- •Программирование на языке высокого уровня
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67
- •Алгоритмизация вычислительных процессов
- •Средства программирования вычислительных процессов
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Ввод-вывод данных в стиле с
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения):
- •Функция очистки экрана результатов:
- •Выражения и операции
- •Логические выражения и операции.
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель.
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
Операторы передачи управления
Оператор if помимо вычислений осуществляет заданную условием передачу управления. Однако, во многих случаях при выполнении сложных операторов (условных, выбора вариантов, цикла), требуется выполнить безусловную передачу управления из одного места программы в другое, для чего используются операторы goto, break, continue, return.
Оператор безусловного перехода имеет вид:
goto метка, где
goto (идти на) – ключевое слово (неразделенное);
метка – идентификатор помеченного оператора, на который передается управление.
Помеченный оператор имеет вид
метка : оператор.
Между меткой и помеченным оператором ставится разделитель двоеточие (:).
Оператор goto позволяет передавать управление из любого места программы на любой оператор.
Пустой оператор не выполняет никакого действия, но перед ним можно поставить метку и использовать, например, для передачи управления на конец программы:
goto fin;
.…….
fin : ; // помеченный пустой оператор
Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
Операторы continue и return используются в операторах цикла и в функциях, где и будут рассмотрены.
Оператор выбора (switch)
Для определения варианта продолжений действий алгоритма, когда число ветвей больше двух, в программе используется оператор вида:
switch (выражение)
{ case метка : операторы;
……..
default : операторы;
}, где
switch (переключатель), case (вариант), default (отсутствие варианта) – ключевые слова;
выражение – переключатель для получения значения целого или символьного типа;
метка – одно из значений типа выражение, которые могут следовать в любом порядке;
операторы – последовательность операторов варианта, которая не заключается в операторные скобки и может даже отсутствовать.
Действие оператора выбора состоит в следующем:
По значению выражения определяется совпадающая с ним метка варианта (ветви) действий алгоритма.
После выполнения операторов варианта с данной меткой выполняются операторы следующих вариантов, если только не встретится оператор передачи управления goto или break. Оператор goto может передать управление любому оператору программы, а оператор break (прервать) передает управление оператору, следующему за оператором switch.
Если нужная метка не найдена и есть необязательное ключевое слово default, то выполняются операторы идущие за ним, в противном случае управление передается оператору, следующему за оператором switch.
Пример 15:
Программа выбора вариантов вычислений.
#include <stdio.h> // функции стандартного ввода-вывода
#include <conio.h> // функции консольного ввода-вывода
#include <math.h> // математические функции
void main ( ) // главная функция
{ int i ; float F, x; // описание переменных
clrscr ( ); // очистка экрана
printf (“Введите i, x:”);
scanf (“%d%f”, &i, &x); // ввод исходных данных
switch (i -2) // переключатель выбора вариантов
{ case 2: F = sin(x); break; // метка и вариант вычислений
case 10: case 12: F = x * x ; break;
default : printf (“Вариант отсутствует”);
goto fin; // переход на конец программы
}
printf (“F = %f”, F); // вывод результата
fin : ; // пустой оператор – конец программы
}
Пример 16.
Ввести два числа, знак операции (+, -, *, /) и вычислить выражение. Рассмотрим решение этой задачи с использованием операторов if и switch.
1. Программа использования вложенных операторов if.
#include <conio.h>
#include <stdio.h>
void main ( )
{ float x, y, rez; // переменные для чисел и результатов
char sign; // переменная для знака операции
clrscr ( ); // очистка экрана
printf ( “\n Введите 2 числа x, y :”);
scanf (“%f%f” , &x, &y); // ввод чисел
fflush (stdin); // очистка буфера ввода
printf (“Введите знак операции (+, –, *, / или иной):”) ;
scanf (“%c”, &sign); // ввод символа операции
// sign = getchar (); другой вариант ввода символа
if (sign ==”+”) rez = x+y; // проверка знака и результат операции
else if ( sign == ”–”) rez = x–y;
else if (sign == ” *” ) rez = x * y;
else if (sign == ” / ”)
{ if (y==0) // проверка делителя
{ printf (“Деление на 0!”);
goto fin; //выход на конец программы
}
else rez = x / y;
}
else
{ printf (“Неизвестная операция!”);
goto fin ; //выход на конец программы
}
printf(“x %c y=%5.1f”, sign, rez); //вывод результата операции
fin : ; //помеченный пустой оператор
}
Pезультат программы:
Введите 2 числа x, y: 5 7
Введите знак операции (+, –, *, / или иной): *
x * y = 35.0
2. Более рационально решать эту задачу с использованием оператора выбора вариантов. Программа использования оператора выбора switch для определения знака операции:
#include<conio.h>
#include<stdio.h>
void main ()
{ float x, y, rez; // переменные для чисел и результата
char sign; // переменная для знака операции
clrscr (); // очистка экрана
printf (“\nВведите 2 числа x, y: “);
scanf (“%f%f”, &x, &y); // ввод чисел
fflush (stdin); // очистка буфера ввода
printf (“Введите знак операции (+, –, *, / или иной): “);
scanf (“%c”, &sign); // ввод символа операции
switch (sign) // переключатель для знака операции
{ case ‘+’ : rez=x + y; break; // выбор варианта и выход из него
case ‘– ’ : rez=x – y; break;
case ‘ * ’ : rez=x * y; break;
case ‘ / ’ : if (y==0) // проверка деления
{ printf(“Деление на 0! ”);
goto fin; // выход на конец программы
}
else
{ rez= x / y; break; }
deafult : printf(“Неизвестная операция”);
goto fin; //выход на конец программы
printf(“x %c y=%5.1f”,sign,rez); //вывод результата операции
fin : ; //помеченный пустой оператор
}
Результат программы: