- •Void main(void)
- •Void main(void)
- •Void main()
- •Void main()
- •Viod main()
- •Условные выражения
- •Void main()
- •If(Выраженне1) Выражение2;
- •If(Выражение1) Выраженпе2; else ВыражениеЗ;
- •Void main()
- •Циклические выражения
- •Void nain()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Массивы
- •Void main()
- •Void main()
- •Void main()
- •Viod main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Адреса и указатели
- •Void main()
- •Viod main()
- •Функции
- •Void main(void)
- •Void main(void)
- •Int I; double X,step();
- •Void decart(double r, double f)
- •Void main()
- •Void decart(double r,double f,double *X,double*y)
- •Void main()
- •Void rnain()
- •Void main()
- •Void main()
- •Void main()
- •Int length;
- •Объектно-ориентированное программирование и приложения с графическим интерфейсом
- •Void main(void)
- •Int MyFunc(int, int);
- •Void NewFunc(void);
- •Void main()
- •Void FuncOut();
- •Void prob::FuncOut()
- •Void main()
- •Void main()
- •Void __fastcall tForm1::Button1Click(tObject *Sender)
- •Int pascal
- •Int nCmdShow)
- •Void __fastcall tForm1::Timer1Timer(tObject *Sender)
- •Void __fastcall tForm1::okClick(tObject *Sender)
- •Int I,step;
- •Введение в численные методы
Массивы
Если вам приходится работать с большими объемами данных, то неизбежно возникает проблема задания большого количества имен переменных, с которыми обращается программа. Однако эта проблема еще не проблема по сравнению с тем, что нужно найти способ компактного описания однотипных действий с большим количеством однотипных данных. В математике эти проблемы давно решены с помощью введения переменных с индексами - векторов, тензоров. Этим же путем пошли и разработчики многих языков программирования, включая С.
Итак, массивом называется совокупность переменных с одинаковым именем и снабженных индексами. Сразу уточним, что все компоненты массива имеют один и тот же тип. Сами же массивы могут быть любых типов, как и простые переменные. Проиллюстрируем способ описания массивов и методы работы с массивами в языке С на программе, вычисляющей скалярное произведение двух векторов. Вектор является типичным представителем массивов. В трехмерном пространстве, например декартовом, вектор R есть совокупность трех компонентов: Rx,Ry,Rz. Ничто не мешает нам заменить буквенные обозначения индексов на числовые. Для того чтобы ближе подойти к правилам описания и использования массивов в С, обозначим компоненты вектора как R0,R1,R2.
Как известно читателю, скалярное произведение двух векторов c = ab есть сумма произведений соответствующих компонентов:
a0b0+a1b1+a2b2.
Тогда программа, выполняющая поставленную задачу, может выглядеть следующим образом:
Void main()
{
int i;
double c=0.,a[3],b[3];
for(i=0; i<3; i++)
{
printf("a[%d]="); scanf(“lf”,&a[i]);
printf("b[%d]="); scanf("&lf".&b[i]);
}
for(i=0; i<3; i++) c+=a[i]*b[i];
printf(“c=%lf”,c);
}
Описание массива аналогично описанию переменной, с той лишь разницей, что после имени массива следуют прямые скобки, в которых указывается число элементов в массиве. В данном случае описаны два массива: а и b, элементы которых есть вещественные числа типа double. Каждый массив состоит из трех чисел. Теперь подчеркнем важнейший момент, который начинающие, как правило, упускают из вида, что приводит к серьезным неприятностям при выполнении программы. Автор настоятельно советует читателю несколько раз повторить про себя, что ЭЛЕМЕНТЫ МАССИВОВ НУМЕРУЮТСЯ, НАЧИНАЯ С 0, а не с 1, хотя последнее, возможно, более привычно. В нашем примере массив а состоит из трех элементов: а[0], а[1], а[2]. Уясните себе, что если массив описан, например, как Р[5], то в нем последним элементом является Р[4] и вовсе нет элемента Р[5] , зато есть элемент Р[0]. Автору не хотелось бы показаться занудой, но он вынужден вновь и вновь возвращать читателя на несколько строчек назад, к выделенному заглавными буквами тексту. Основная беда здесь заключается в том, что компилятор (по крайней мере, в Builder) спокойно пропускает ситуацию, когда программист допускает "выход за границы массива" - система ошибки не обнаруживает. При этом во время выполнения программы возникает конфликт в оперативной памяти компьютера, который довольно трудно распознать. Очень часто именно по этой причине возникает фатальное "зависание" системы, и единственным выходом из такой ситуации является перезагрузка компьютера.
Последняя программа показывает, как следует обращаться к отдельным элементам массива: пишется имя массива, а в прямых скобках его индекс. Очевидно, что использование массивов в сочетании с циклами позволяет реализовывать однотипные операции над большими объемами данных.
В предыдущей программе заполнение массивов конкретными значениями - инициализация массивов делалось через ввод значений каждого из элементов с консоли с использованием приглашения и функции scanf. Однако аналогично тому, как начальная инициализация простых переменных может быть выполнена непосредственно в описаниях, точно так и массивы можно инициализировать в описаниях. Следующая программа, также выполняющая скалярное произведение векторов, демонстрирует начальную инициализацию массивов: