- •Часть 1
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Часть 2 184
- •Пояснительная записка
- •Содержание дисциплины
- •Индивидуальные практические работы, их характеристика
- •Контрольные работы, их характеристика
- •Литература
- •Основная
- •Дополнительная
- •Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •Учебно-методические пособия
- •Алфавит языка
- •Лексемы
- •Идентификаторы
- •Ключевые слова
- •Знаки операций
- •Константы
- •Комментарии
- •Тема 2. Типы данных Концепция типа данных.
- •Простые типы данных
- •Целый тип int
- •Символьный тип char
- •Типы с плавающей точкой: float, double, long double
- •Тема 3. Выражения
- •Переменные
- •Именованные константы
- •Операции
- •Операции присваивания
- •Инкремент и декремент
- •Унарный плюс и унарный минус (строка 2)
- •Явное преобразование типа
- •Операция определения размера sizeof
- •Деление и остаток от деления
- •Логические операции не, и, или (!, &&, ||)
- •Условная операция (?:)
- •Операция запятая (,)
- •Операции взятия адреса и разадресации
- •Тема 4. Операторы
- •Структура программы
- •Тема 5. Базовые конструкции структурного программирования
- •Операторы ветвления
- •1. Условный оператор if
- •2. Оператор switch
- •Операторы цикла
- •1. Цикл с предусловием while
- •2. Цикл с постусловием do-while
- •3. Цикл с параметром for
- •Тема 6. Массивы
- •Тема 7. Указатели и массивы
- •Тема 8. Строки символов
- •Тема 9. Структуры
- •Массивы структур
- •Битовые поля
- •Объединения
- •Перечисления
- •Тема 10. Функции
- •Глобальные, локальные и статические переменные
- •Параметры функции
- •Передача массивов в качестве параметров функции
- •Функция main, ее параметры
- •Функции стандартной библиотеки
- •Функции форматного вывода и ввода printf и scanf
- •Тема 11. Файлы
- •Тема 12. Работа с динамической памятью
- •Тема 13. Динамические структуры данных
- •Очереди
- •Линейные списки
- •Бинарные деревья
- •Практический раздел Общие указания Указания по выбору варианта
- •Порядок оформление итогового отчета
- •Индивидуальные практические работы Индивидуальная практическая работа 1 Методические указания
- •Варианты заданий.
- •Индивидуальная практическая работа 2 Методические указания
- •Варианты заданий
- •Контрольные работы Контрольная работа 1 Методические указания
- •Варианты заданий
- •Контрольная работа 2 Методические указания
- •Варианты заданий
1. Цикл с предусловием while
Формат оператора следующий:
while (логическое выражение)
оператор
Если результат вычисления логического выражения есть ИСТИНА, выполняется образующий тело цикла оператор (простой или составной). Эти действия повторяются до тех пор, пока логическое выражение не примет значение ЛОЖЬ, после чего происходит завершение работы цикла и управление передается оператору, непосредственно следующему за оператором цикла.
Логическое выражение вычисляется перед каждой итерацией цикла. Если при первой проверке значением выражения является ЛОЖЬ, цикл не выполнится ни разу.
Пример 1: сумму 10000$ положили в банк под 10% годовых с условием капитализации процентов. Через сколько лет сумма удвоится?
#include <stdio.h>
void main()
{
float sum = 10000;
float sum2 = 2*sum;
int YearCount = 0;
while(sum < sum2)
{
sum += sum*0.1;
YearCount++;
}
printf(“Число лет = %d”, YearCount);
}
Пример 2: найти все делители целого положительного числа.
#include <stdio.h>
void main()
{
int number, half, div;
scanf(“%d”, &number);
half = number/2;
div =2;
while(div <= half)
{
if(number % div == 0)
printf(“%d ”, div);
div++;
}
}
2. Цикл с постусловием do-while
Формат оператора следующий:
do
оператор
while (логическое выражение);
Сначала выполняется образующий тело цикла оператор (простой или составной), а затем вычисляется логическое выражение. Если выражение принимает значение ИСТИНА, тело цикла выполняется еще раз и проверка повторяется. Цикл завершается, когда выражение примет значение ЛОЖЬ.
Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз, например, если в цикле вводятся данные и выполняется их проверка. В остальных случаях предпочтительнее пользоваться циклом с предусловием. Рассмотрим предыдущий пример, в котором теперь используем цикл с постусловием:
#include <stdio.h>
void main()
{
int number, half, div;
scanf(“%d”, &number);
half = number/2;
div =2;
do
{
If(number % div == 0)
printf(“%d ”, div);
div++;
}
while(div <= half);
}
Однако эта программа будет работать неправильно в случае поиска делителей для числа 2.
3. Цикл с параметром for
Формат оператора следующий:
for (инициализация; логическое выражение; модификация)
оператор
Инициализация служит для присвоения начальных значений величинам, используемым в цикле. В этой части допускается записывать несколько операторов присваивания, разделенных запятой. Инициализация выполняется один раз в самом начале исполнения цикла.
Логическое выражение определяет условие продолжения цикла: если его значение есть ИСТИНА, выполняется образующий тело цикла оператор (простой или составной), иначе происходит завершение работы цикла. Цикл с параметром реализован как цикл с предусловием.
Модификация выполняется после каждой итерации цикла и служит обычно для изменения параметра цикла. В части модификации допускается записывать несколько операторов через запятую.
Снова вернемся к рассмотрению предыдущего примера (найти все делители целого положительного числа), в котором теперь используем цикл for:
#include <stdio.h>
void main()
{
int number, half, div;
scanf (“%d”, &number);
half = number/2;
for (div =2; div <= half; div++)
if (number % div == 0)
printf(“%d ”, div);
}
В операторах цикла могут использоваться операторы break и continue. Оператор break вызывает немедленный выход из цикла. Оператор continue осуществляет немедленный переход к следующей итерации цикла.
Пример, иллюстрирующий использование оператора break: суммировать числа, вводимые с клавиатуры до тех пор, пока не будет введено число 0, после чего вывести полученную сумму на экран.
#include <stdio.h>
void main()
{
int num, sum = 0;
while (1) //запускается бесконечный цикл
{
scanf(“%d”, &num);
if (num == 0) break;
sum += num;
}
printf(“Сумма = %d”, sum);
}
Пример фрагмента кода, иллюстрирующего использование оператора continue для того, чтобы исключить операцию деления на ноль:
#include <stdio.h>
void main()
{
. . .
for (i = 0; i < N; i++)
{
if (i == k) continue;
sum += 1.0/(i - k);
}
. . .
}
Любой цикл while может быть приведен к эквивалентному ему циклу for и наоборот. Например, два следующих цикла эквивалентны:
for (part1; part2; part3) part1;
оператор while (part2)
{
оператор
part3;
}
Отсюда видно, что достоинством цикла for является то, что все управление циклом сосредоточено в его заголовке, что делает программу более простой и понятной.
При необходимости любая из трех частей, содержащихся в заголовке оператора for, может быть опущена, однако точки с запятой надо оставить на своих местах. Например, четыре следующих цикла for эквивалентны:
//1
for (part1; part2; part3)
оператор
//2
part1;
for (; part2; part3)
оператор
//3
for (part1; ; part3)
{
if (!part2) break;
оператор
}
//4
for (part1; part2;)
{
оператор
part3;
}
Подобным образом можно опустить любые две из трех частей, содержащихся в заголовке оператора for, или даже все 3 части, получая следующее:
part1;
for (; ;) //запускается бесконечный цикл
{
if (!part2) break;
оператор
part3;
}
Если тело цикла невелико, можно переместить его в заголовок по правилам операции «запятая». После заголовка необходимо поставить пустой оператор (;):
for (part1; part2; оператор, part3);
Циклы можно вкладывать друг в друга. При этом в качестве параметров вложенных циклов должны быть использованы различные переменные. Пример вывода на экран школьной таблицы умножения:
#include <stdio.h>
void main()
{
const int N = 9;
int i, j;
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
printf(“%3d”, i*j);
printf(“\n”);
}
}