- •Рецензенты:
- •Лекция 1 Основные понятия языка с
- •Первая программа
- •Переменные языка с
- •Имя переменной
- •Объявление константы
- •Операции языка с
- •Лекция 2 Операторы языка с Условный оператор
- •Оператор switch
- •Циклы Цикл for
- •Циклы while и do-while
- •Оператор безусловного перехода
- •Использование операторов break, continue и goto в циклах
- •Операция условие ?
- •Лекция 3 Массивы
- •Инициализация массивов
- •Массивы символов. Строки
- •Функции для работы со строками
- •Лекция 4 Указатели
- •Объявление указателей
- •Операции над указателями
- •Связь указателей и массивов
- •Массивы указателей
- •Инициализация указателей
- •Лекция 5 Функции языка с
- •Объявление функции
- •Оператор return
- •Прототипы функций
- •Функции c произвольным числом параметров
- •Область действия и область видимости переменной
- •Классы памяти
- •Параметры и аргументы функции
- •Лекция 6 Типы, определяемые пользователями
- •Структура
- •Перечислимый тип
- •Переименование типов-typedef
- •Лекция 7 Модели памяти и препроцессор языка с Модели памяти
- •Препроцессор языка с
- •Директива #define
- •Список рекомендуемой литературы
- •Оглавление
- •Программирование на языках высокого уровня: с
- •428015 Г.Чебоксары, Московский просп., 15
Инициализация массивов
Очень важно уметь инициализировать массивы, т.е. присваивать элементам массива некоторые начальные значения. В языке С для этого имеются специальные возможности. Самый простой способ инициализации следующий: в процессе объявления массива можно указать в фигурных скобках список инициализаторов:
flоаt farr[6]={1.1,2.2,3.3,4.0,5,6};
int а[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
В другом случае такая форма записи эквивалентна набору
а[0][0]=l; a[0][1]=2; a[0][2]=3; a[0][3]=4;
а[0][4]=5; а[1][0]=6; а[1][1]=7; а[1][2]=8; и т. д.
В памяти компьютера многомерный массив располагается непрерывно по строкам. Многомерные массивы, в том числе и двумерные, можно инициализировать, рассматривая их как массив массивов. Инициализации
int a[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
и
int a[3][5] ={{1,2,3,4,5}, {6,7,8,9,10},{11,12,13,14,15});
эквивалентны. Количество инициализаторов не обязано совпадать с количеством элементов массива. Если инициализаторов меньше, то оставшиеся значения элементов массива не определены. В то же время инициализации
int a[3][5]={(1,2,3}, {4,5,6,7,8}, {9, 10,11}};
и
int a[3][5]={1,2,3,4,5,6,7,8,9,10,11};
различны. Соответствующие массивы будут заполнены следующим образом:
в первом случае: вo втором случае:
1 |
2 |
3 |
|
|
|
1 |
2 |
3 |
4 |
5 |
4 |
5 |
6 |
7 |
8 |
|
6 |
7 |
8 |
9 |
10 |
9 |
10 |
11 |
|
|
|
11 |
|
|
|
|
B пустых клетках значения не определены.
Символьные массивы могут инициализироваться как обычные массивы
char str[15] {'В', 'о', 'г', /', 'и', 'п', 'd', • ', 'С', •+'. '+'};
Их можно также представить как строку символов:
char str[15]=”Borland C++";
Отличие этих двух способов состоит в том, что во втором случае будет добавлен еще и нулевой байт. К тому же второй способ короче.
Допускается также объявление и инициализация массива без явного указания размера массива. Напримеp, для выделения места под символьный массив обычным способом
char str[180]=”Это объявление и инициализация массива символов";
мы должны считать количество символов в строке или указать заведомо больший размер массива.
При инициализации массива без указания его размера, например, следующим образом:
char str[]='"Это объявление и инициализация массива символов";
компилятор сам определит необходимое количество элементов массива, включая нулевой байт. Можно объявлять таким же способом массивы любого типа:
int mass[]={1,2,3,1,2,3,4);
в том числе и многомерные массивы. При объявлении массивов с неизвестным количеством элементов можно не указывать размер только в самых левых квадратных скобках:
int arr[][3]={1,2,3,5,6,7,8,9,0}
Программа 3.1 иллюстрирует различные методы инициализации массивов. В качестве примера использования массивов можно привести метод сортировки элементов массива
#include<stdio.h>
#include<stdlib.h>
//include ''time.h>
/*Инициализация массивов */
void main() {
int a[10]={1,23,4,7,8,0,1,9,4,78};
int ran[5];
int i,j,tmp,max;
//инициализация элементов массива с помощью случайной функции random
randomize();
for(i=0; i<5;i++)
{ ran[i]=random(100);
printf("ran[%d]= %d\n", i, ran[i]); }
//найдем максимальный элемент массива ran
for(i=0; i<4; i++) {max =(ran[i]<ran[i+l])?ran[i+l]:ran[i];}
ргintf("Максимальный элемент массива ran = %d\n", max);
//Sorting
printf"( "Heoтсортированный массив а: ");
for(i=0; i<10: i++) {printf("%d ", a[i]);}
printf(“\n”);
for(i=0; i<9; i++)
for(j=i;j<10;j++)
if(a[i]<a[j+l])
{tmp = a[i];
a[i]=a[j+1];
a[j+1]= tmp;}
ргintf("Отсортированный массив а: ");
for(i=0; i<10; i++){ printf("%d ", a[i]);}}
Результат выполнения этой программы следующий:
ran[0]=24
ran[1]=75
ran[2]=34
ran[3]=24
ran[4]=90
Maximum is 90
Неотсортированный массив а: 1, 23, 4, 7, 8, 0, 1, 9, 4. 78
Отсортированный массив а: 78, 23, 9, 8, 7. 4. 4, 1, 1, 0
