- •Программирование на языке высокого уровня
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67
- •Алгоритмизация вычислительных процессов
- •Средства программирования вычислительных процессов
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Ввод-вывод данных в стиле с
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения):
- •Функция очистки экрана результатов:
- •Выражения и операции
- •Логические выражения и операции.
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель.
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
Оператор присваивания
Это один из основных операторов для вычисления и сохранения в памяти значения выражения, который имеет вид:
переменная = выражение.
Выражение справа вычисляются и его значение присваивается переменной слева от знака операции присваивания (=). Тип результата выражения приводится к типу переменной слева.
Например, преобразование типов данных:
int x ; char y ; long z;
x = y;
x = x + z;
В первом операторе присваивания значение y преобразуется к типу int. Во втором операторе x справа преобразуется к типу long, а результат выражения x+z преобразуется к типу int переменной x слева.
Если, как в последнем операторе присваивания, переменная находится в левой и правой части, можно образовать составное присваивание.
Пример 11.
Простое присваивание: Составное присваивание:
x = x + z; x += z;
s = s * (f + 2); s *= f + 2;
c = c + 1; c +=1;
Если, как в последнем примере, переменная изменяется на 1 можно использовать сокращенную форму присваивания с помощью операции ++ (увеличение на 1) или – – (уменьшение на 1).
Применяются две формы таких операций:
1. Префиксная, когда знак операции стоит перед операндом:
++ с; – – с ;
при этом операнд изменяется на 1 и его новое значение участвует в выражении.
2. Постфиксная, когда знак операции стоит после операнда:
c++; c– –;
при этом операнд сначала участвует в выражении со старым значением, затем операнд изменяется на 1.
Ясно, что нет никакого различия между результатами выражений ++с или с++. Форма записи операций ++ или – – сказываются в составных выражениях.
Например, пусть даны описания переменных:
int x = 1, p = 2, r ;
Тогда r = ++x + p ; // x = 2, результат r = 4,
r = p + x++ ; // x = 2, результат r = 3.
Цепочкой присваиваний можно задать одно значение нескольким переменным, например,
x = y = z = 0;
Условный оператор (if)
В разветвляющихся вычислительных процессах на некотором этапе вычислений осуществляется проверка заданного условия (в виде выражения) и выбор одной из ветвей продолжения вычислительного процесса, которых может быть две (ветви “да” и “нет”) или больше. Для реализации разветвления в программе используется условный оператор (в полной и сокращенной форме) и оператор выбора.
Полный условный оператор имеет вид:
if (условие) оператор 1
else оператор 2
где if (если) , else (иначе) – ключевые слова;
условие – это выражение (не обязательно логическое), значение которого сравнивается с 0. При этом, если значение выражения не равно 0 (условие истинно), то выполняется оператор 1, а оператор 2 пропускается, иначе (выражение = 0, то есть условие ложно) выполняется оператор 2;
оператор 1, оператор 2 – одиночные или составные операторы.
Составной оператор – это группа операторов, заключенная в фигурные скобки, которая выступает как единое целое в сложных операторах (условном и операторах цикла):
{оператор; …} .
Замечание. В случае, если оператор 1 или оператор 2 одиночные, то после них ставится разделитель точка с запятой (;), а если эти операторы составные, то после закрывающей фигурной скобки (}) точка с запятой не ставится.
Пример 12.
а) Применение одиночных операторов.
Фрагмент схемы алгоритма: Фрагмент программы:
да
x>y if ( x>y ) p = x+y;
else p = x-y;
p=x-y
p=x+y
вывод(p)
б) Применение составных операторов.
Фрагмент схемы алгоритма: Фрагмент программы:
да if ( k )
k { p = x+y;
нет p=x+y printf (“p=%f”, p);
r=x-y }
else
вывод(r)
вывод(p)
printf (“r=%f”, r);
}
Неполный условный оператор образуется, если отсутствует часть else условного оператора:
if (условие ) оператор.
Тогда, если условие истинно (не равно 0) , то выполняется оператор, иначе он пропускается, и выполняется оператор, следующий за условным оператором. В схеме алгоритма это выражается отсутствием действий по ветви “нет”:
фрагмент схемы алгоритма: фрагмент программы:
да
a >b if ( a>b ) max=a;
нет max=a
Пример 13.
В переменную max записать максимум из значений трех переменных a, b, c и вывести его.
Программа:
#include <stdio.h> // функции стандартного ввода-вывода
#include <conio.h> // функции консольного ввода-вывода
void main ( ) // главная функция
{ float a, b, c, max; // описание переменных
clrscr ( ); // очистка экрана
printf (“Введите a, b, c: ”);
scanf (“%f%f%f”, &a, &b, &c); // ввод исходных данных
if (a>b) max = a; // полный условный оператор
else max = b;
if (c>max) max = c; // неполный условный оператор
printf (“max=%f”, max); //* вывод результата
}
Вложенный оператор if образуется, если оператор после условия или после else также является условным оператором, причем глубина вложения не ограничена. Применение фигурных скобок во вложенных операторах позволяет правильно отразить действие алгоритма задачи. При их отсутствии действует следующее правило трактовки вложенных операторов – каждому else соответствует предыдущее свободное слово if.
Пример14.
Влияние фигурных скобок при использовании вложенных операторов if.
Программа с применением фигурных скобок:
void main ()
{ int a=2, b=7, c=3;
if (a>b)
{ if (b<c) c=b;
}
else c=a;
printf(“c=%d”, c);
}
Результат программы:
с=2.
Опустив фигурные скобки в операторе if, получим следующий вложенный условный оператор:
if (a>b)
if(b<c) c=b;
else c=a;
Результат в этом случае: с=3, то есть реализуется другой алгоритм.