Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по программированию.doc
Скачиваний:
11
Добавлен:
13.11.2019
Размер:
1.2 Mб
Скачать

Void main()

{

int i=2;

double a[]={0.23,-1.45,2.04},

b [] ={-3.12.0.03,4.66}, c=0.0;

for(;i>=0;) c+=a[i]*b[i- -] ;

printf("c=%lf",c);

}

При задании компонентов массивов в описаниях присваи­ваемые значения перечисляются в фигурных скобках че­рез запятую. Как видно из текста программы, в этом случае количество элементов в массиве - длину массива можно не указывать и в описании после имени масси­ва оставить пустые прямые скобки. Действительно, ко­личество инициализирующих значений внутри скобок {} автоматически задает длину массива. Если же вы ука­жете длину массива явно, а в инициализирующем списке напишете значений меньше, чем длина, то будут заданы первые элементы массива, а остальные останутся неопре­деленными.

Теперь рассмотрим следующую задачу. Сформиру­ем два массива целых чисел по 100 элементов в каждом. Заполним массивы случайными целыми числами в диа­пазоне от 0 до 500. Выведем на экран номера (индексы) и значения попарно совпадающих элементов массивов, продвигаясь по массивам "сверху вниз", то есть, начиная с последних элементов массивов. Задача может быть ре­ализована следующей программой:

Void main()

{

const double f=l./32767*500;

int i,a[100],b[100];

for(i=0; i<100; i++)

{

a[i]=rand()*f;

b[i]=rand()*f;

}

for(; - -i>==0;) if(a[i]==b[i])

printf("a[%d]=b[%d]=%d \n",i,i,a[i]);

}

Сначала в программе задается глобальная веществен­ная константа f, которая, будучи умноженной на функ­цию rand(), дает вещественное случайное число в нуж­ном диапазоне. В первом цикле for элементам массивов а и b придаются случайные значения. Поскольку мас­сивы описаны как целые, правые части выражений при­сваивания автоматически будут приведены к целому ти­пу. Если же вы (как и ваш покорный слуга) с трудом переносите такое вольное обращение с типами данных, то пишите a[i]=(int) (rand()*f). Программа от это­го ничего не потеряет, хотя ровным счетом ничего и не приобретет. Из первого цикла программа выходит при значении i, равном 100. Следующий цикл должен про­сматривать массивы, начиная с 99-х элементов. В этой связи в проверке условия в цикле используется предва­рительная декрементация переменной i. Напомним, что выражение - -i>=0 сначала уменьшает i на единицу, а затем производит сравнение уменьшенного значения с нулем.

До сих пор мы говорили о числовых массивах. Масси­вы, однако, как и простые переменные, могут быть про­извольного типа. Определенные особенности имеют ме­сто для символьных массивов. В этой связи остановимся на массивах типа char более детально.

В принципе обращение с символьными массивами мо­жет ничем не отличаться от обращения с числовыми мас­сивами. Вот пример инициализации массива символов путем ввода значения каждого элемента с клавиатуры:

Viod main()

{

char a[5],z; int i;

for(i=0; i< 5; i++) scanf(“%c".&z); a[i]=z;

}

Инициализация при описании тоже может быть выпол­нена обычным образом:

Void main()

{

char s[]={'a’,’b’,’c’};

printf("%c",s[2]);

}

Напомним, что символьная константа есть это символ, за­ключенный в апострофы. В результате работы этой про­граммы на экран будет выведен символ с.

Теперь обратим внимание на смысл понятия "массив символов". Это ведь не что иное, как строка в самом житейском понимании. Не правда ли? Такая интерпре­тация символьных массивов породила в языке С некоторые особые моменты. Начальная инициализация строки при описании, наряду со стандартным способом, может быть выполнена несколько проще: