- •Элементы языка си
- •Структура программы на языке си
- •Выражения
- •Арифметические выражения
- •Операции «инкремент, декремент»
- •Операции ввода-вывода в языке си
- •Функция вывода printf( )
- •Специальные управляющие символы
- •Символы преобразования
- •Функция ввода scanf()
- •Операторы языка си
- •Пустой оператор
- •Составной оператор
- •Оператор перехода
- •Для программирования ветвлений в языке Си используют условную операцию ?, условный оператор if и оператор выбора варианта switch. Условный оператор
- •Оператор выбора варианта
- •Оператор разрыва
- •Операторы цикла
- •Оператор продолжения
- •Оператор цикла с параметром (с шагом)
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Массивы в языке си
- •Строки (символьные массивы)
- •Ввод-вывод символьных строк
- •Обработка строк
- •Структурный тип данных (Структуры)
- •Имя структуры.Имя элемента
- •Функции в языке си
Оператор цикла с предусловием
Оператор цикла с предусловием (анализ конца цикла производится до выполнения операторов тела цикла) используется, когда количество повторений операторов тела цикла заранее не известно и определяется в процессе выполнения цикла.
Синтаксис оператора:
while (выражение)
оператор;
где
выражение – выражение любого типа;
оператор - простой или составной оператор тела цикла, он должен включать оператор изменения операндов логического выражения.
Вначале вычисляется выражение (условие), если оно истинно, то выполняется тело цикла, и выражение вычисляется снова; если ложно – тело цикла не выполняется. Цикл продолжается до тех пор, пока значение выражения не станет ложным и управление сразу передаётся следующему оператору. Если выражение ложно изначально, то тело цикла не будет выполнено ни разу.
Например:
i=20;
while (i>=1)
{x=i;
i - -;
}
Оператор цикла с постусловием
Оператор цикла с постусловием (анализ конца цикла производится после выполнения операторов тела цикла) используется, когда количество повторений операторов тела цикла заранее не известно и определяется в процессе выполнения цикла.
Синтаксис оператора:
do
оператор
while (выражение);
где
выражение – выражение любого типа;
оператор - простой или составной оператор тела цикла.
Тело цикла выполняется хотя бы один раз. После каждого выполнения тела цикла анализируется значение выражения: если оно истинно, то тело цикла выполняется снова, и снова вычисляется значение выражения; если ложно - цикл завершается.
Например:
do
{y=x-5;
x - -}
while (x>0);
Массивы в языке си
Массив – это совокупность однотипных элементов, занимающих непрерывную область памяти. Элементы массива образуют последовательность, упорядоченную по номерам их элементов. С массивом связаны следующие его свойства: имя, тип, размерность.
Синтаксис объявления массива:
тип_элементов имя_массива [константное_выражение];
где
константное выражение определяет размер массива, т.е количество элементов массива. Например:
1) int a[10];
объявлен одномерный массив с именем a, содержащий 10 элементов целого типа.
2) float b[3][3]
объявлен двумерный массив b, состоящий из 3 строк и 3 столбцов, т.е. из 9 элементов вещественного типа.
В отличие от языка Паскаль в языке Си нельзя определять произвольные диапазоны для индексов. Размер массива, указанный в объявлении, всегда на единицу больше максимального значения индекса.
Для обращения к элементам массива используется имя массива, после которого в квадратных скобках стоит индекс в виде выражения определяющего значение индекса - порядкового номера элементов массива. Индексов в квадратных скобках может быть столько, сколько измерений в массиве. Каждый индекс указывается в своих скобках. Значения индекса должны лежать в диапазоне от 0 до величины на единицу меньшей, чем размер массива указанный при его объявлении.
Например: a[0], а[1], а[2], а[3], а[4], а[5], а[6], а[7], а[8], а[9].
b[0][0], b[0][1], …, b[3][3]
В памяти элементы массива располагаются так, что при переходе от элемента к элементу наиболее быстро меняется самый правый индекс массива. Т.е. матрица располагается в памяти по строкам. Между элементами массива в памяти разрывыф отсутствуют. Операций над массивами в Си нет. Пересылка элементов одного массива в другой может быть реализована только поэлементно, с помощью цикла. Над элементами массива допускаются те же операции, что и над скалярными переменными того же типа. Форматный ввод-вывод значений элементов массива можно производить только поэлементно.
Пример 1. Ввод с клавиатуры и вывод на экран одномерного массива.
while(1)//открытие беск.цикла для проверки размерности
{
printf("Ведите размерность вектора:");
scanf("%d",&r);
if((r>0)&&(r<=R)) break;
printf("Размерность вне диапазона,повторите ввод\n");
} //закрытие беск.цикла для проверки размерности
printf("\n\t Введите вектор\n");// ввод вектора
for(i=0;i<r;i++)
{
printf("a[%d]=>",i);
scanf("%f",&a[i]);
} //конец ввода вектора
printf("\n\t Исходный вектор \n");//вывод вектора
for(i=0;i<r;i++)
printf("%5.2f",a[i]);
printf("\n");//конец вывода вектора
Пример 2. Ввод с клавиатуры и вывод на экран двумерного массива.
while(1)
{
printf("Введите размерность матрицы по строкам:");
scanf("%d",&ri);
if ((ri>0)&&(ri<=R)) break;
printf("Размерность вне диапазона, повторите ввод\n");
}
while(1)
{
printf("Введите размерность матрицы по столбцам:");
scanf("%d",&rj);
if ((rj>0)&&(rj<=R)) break;
printf("Размерность вне диапазона, повторите ввод\n");
}
printf("\n\t Введите матрицу\n");
for(i=0;i<ri;i++)
for(j=0;j<rj;j++)
{
printf("a[%d][%d]=> ",i,j);
scanf("%f",&a[i][j]);
}
printf("\n\t Исходная матрица \n");
for(i=0;i<ri;i++)
{
for(j=0;j<rj;j++)
printf("%5.2f ",a[i][j]);
printf("\n");
}
При объявлении массива можно указывать инициализацию массива, т.е присвоить значение каждому элементу массива.
Например:
float a[5] = {1, 0.5, 3, 2.1, 6};
int b[2][2] = {1,2,3,4}
int m[6] = {5, 3, 2}; - будет создан массив из шести элементов. Первые три элемента получат инициализированные значения. Значения остальных будут либо неопределенными, либо разны нулю, если массив внешний или статический.
Размер массива может не указываться, если при объявлении производится инициализация значений элементов.
Например: int p[] = {2, 4, 6, 10, 1};
