Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си к экзамену.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1 Мб
Скачать
☆

For (инициализация; условие; приращение) {блок_операторов;}

инициализация – это присваивание начального значения переменной, которая называется параметром цикла.

условие представляет собой условное выражение, определяющее, следует ли в очередной раз выполнять блок_операторов (его называют телом цикла).

приращение осуществляет изменение параметра цикла при каждом проходе.

Цикл for выполняется, если выражение условие принимает значение ИСТИНА. Если оно хотя бы один раз примет значение ЛОЖЬ, то программа выходит из цикла и выполняется блок операторов, следующий за телом цикла for.

Важно: Инициализация, условие и приращение обязательно разделяются точкой с запятой. После for (инициализация; условие; приращение) точка с запятой не ставится!

В общем виде блок-схема оператора for выглядит так:

Пример

int x;

for (x=1; x <= 100; x++)

{

printf("%d ", x);

}

Блок-схема к примеру.

Оператор цикла while (цикл с предусловием)

Обшая форма цикла while имеет следующий вид:

While (условие) {блок_операторов;}

условие представляет собой условное выражение, определяющее, следует ли в очередной раз выполнять блок_операторов. Условие считается истинным, если значение выражения не равно нулю, а оператор выполняется, если условие принимает значение ИСТИНА. Если условие принимает значение ЛОЖЬ, программа выходит из цикла и выполняется следующие за циклом действия.

блок операторов должен включать в себя изменение параметра цикла.

В общем виде блок-схема оператора while выглядит так:

Пример

int x;

x=1;

while (x <= 100)

{

printf("%d ", x);

x++;

}

Блок-схема такая же, как в предыдущем примере.

Пример

В этом примере ввод с клавиатуры происходит до тех пор, пока пользователь не введет символ g:

ch = '\0'; // инициализация ch

while(ch != 'g')

{

ch = getchar();

}

Блок-схема к примеру.

Оператор цикла do-while (цикл с постусловием)

В отличие от циклов for и while, которые проверяют свое условие перед выполнением тела цикла, do-while делает это после него. Поэтому цикл do-while всегда выполняется как минимум один раз.

Общая форма цикла do-while следующая:

Do { блок_операторов;} while (условие);

блок операторов выполняется, пока условие не примет значение ЛОЖЬ. Блок операторов должен включать в себя изменение параметра цикла.

В общем виде блок-схема оператора do-while выглядит так:

Пример

В этом примере числа считываются с клавиатуры, пока не встретится число, меньшее или равное 10:

do

{

scanf("%d", &num);

}

while (num > 10);

Блок-схема к примеру.

Пример

int x;

x=1;

do

{

printf("%d ", x);

x++;

}

while (x <= 100)

Блок-схема к примеру (аналогичен)

Работа с одномерными массивами

В общем случае объявление одномерного массива выглядит так:

тип имя_массива[количество_элементов];

тип имя_массива[количество_элементов n] = {значение_элемента_0, значение_элемента_1, … значение_элемента_n-1};

Пример. Объявление одномерного массива

int mas1[10];

int mas2[4] = {10, 2, 13, 7};

Для перебора элементов массива необходимо организовать цикл. Чтобы было удобно работать с массивами, можно вводить константы.

Пример. Подсчет суммы и среднего арифметического элементов одномерного массива

#include <stdio.h>

#include <stdlib.h>

#define N 4

void main()

{

int mas1[N] = {10, 2, 15, 7};

int sum=0, i;

float sr;

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

{

sum+=mas1[i];

}

printf("Summa = %d\n", sum); //вывод результата, равного 32

sr=sum/N; //при целочисленном делении дробная часть отбрасывается,

//поэтому необходимо приведение суммы к вещественному типу

printf("Srednee = %6.3f", sr); //вывод результата, равного 8.000

sr=(float)sum/N; // приведение суммы к вещественному типу и подсчет результата

printf("Srednee = %6.3f", sr); //вывод результата, равного 8.500

}

Пример. Заполнение и вывод одномерного массива

#include <stdio.h>

#define N 5

void main()

{

int mas1[N];

int i;

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

{

mas1[i] = i+3; //заполнение массива значениями от 3 до N-1+3

}

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

{

printf("%d\n", mas1[i]); //вывод элементов массива: 3 4 5 6 7

}

}

Для заполнения массива случайным образом необходимо:

  1. для привязки генератора псевдослучайных чисел к моменту времени вызвать функцию srand(). В качестве ее параметра указать time(0).

  2. при заполнении массива вызывать функцию rand(), генерирующую псевдослучайные числа.

Функция rand() генерирует число от 0 до 65 535. Для уменьшения диапазона используется нахождение остатка от деления (%). Значение выражения rand()%30 находится в диапазоне от 0 до 29. Для смещения этого диапазона применяется сложение или вычитание в зависимости от того, какой диапазон необходимо получить. Так значение выражения rand()%30-15 находится в диапазоне от -15 до 14.

Пример. Заполнение массива случайными значениями

#include <stdio.h>

#include <stdlib.h>

#include <time.h> //не забыть подключить эту библиотеку

#define N 10

void main()

{

srand(time(0));

int mas1[N];

int i;

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

{

mas1[i] = 15+rand()%30; //заполнение массива значениями от 15 до 44

}

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

{

printf("%d\n", mas1[i]); //вывод элементов массива

}

}

Для заполнения массива символами необходимо в указанный пример внести следующие изменения:

  1. объявить массив символов: char mas1[N];

  2. генерировать коды символов в соответствии с таблицей ASCII

  3. на экран выводить символы: printf("%с\n", mas1[i]);

Пример. Поиск максимального элемента в массиве

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define N 10

void main()

{

srand(time(0));

int mas1[N];

int Max, i;

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

{

mas1[i] = 15+rand()%30; //заполнение массива значениями от 15 до 44

}

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

{

printf("%d\n", mas1[i]); //вывод элементов массива

}

Max=mas1[0]; //задание переменной Max начального значения

for (i=1; i<N; i++) //поиск максимального элемента

{

if (mas1[i]>Max)

{

Max=mas1[i];

}

}

printf("Max = %d\n", Max); //вывод значения максимального элемента

}