Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УЧЕБНАЯ ПРАКТИКА120625.doc
Скачиваний:
2
Добавлен:
27.09.2019
Размер:
526.85 Кб
Скачать

8. Операторы

Управляющие конструкции задают порядок выполнения команд в программе. Синтаксис ветвления:

if ( условие )

команда1

[ else

команда2 ]

Сначала программа проверяет истинность условия. Если условие истинно, то выполняется команда1, если нет, и присутствует ключевое слово else – то выполняется команда2. Затем управление передается команде, следующей за ветвлением.

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

/*prog10.c*/

/*программа вычисляет абсолютную величину вещественного числа */

#include <stdio.h>

main()

{

float x, y;

scanf ( “х = %f”, &x );

if ( x >= 0 )

y = x;

else

y = - x;

printf ( “ | %f | = %f\n”, x, y );

return 0;

}

В том случае, когда в ходе ветвления надо выполнить не одну, а несколько команд, их заключают в фигурные скобки:

if ( условие )

{

команда1a

команда1b

...

}

[ else

{

команда2a

команда2b

...

}

]

Условие оператора ветвления обычно включает в себя операции сравнения:

> - больше;

< - меньше;

>= - больше или равно;

<= - меньше или равно;

== - равно (равняется)

!= - не равно.

Определённые трудности вызывает операция “==”. В языке математики символ равенства “=” обозначает две разных операции: присваивание (x = 1 – переменной x присваивается значение 1) и сравнения ( 2 = 2 – утверждение, что 2 равно 2).В языке C символ “=” обозначает операцию присваивания, слева от него должна стоять переменная, эта операция возвращает значение присвоенной переменной. Например, в результате выполнения команды x = ( y = 2 ) переменным x и y будет присвоено одно и то же значение – число 2. Операция сравнения обозначается с помощью символа “==”, слева и справо от него стоят выражения, результат операции сравнения может быть ложью или истиной. В языке C лжи соответствует число 0, а истине – неналевое число, как правило, это 1. Таким образом, результатом операции 2 == 2 является истина (1), а результатом операции 2 == 1 – ложь (0).

Логические операции:

&& - конъюнкция (и);

|| - дизъюнкция (или);

! - отрицание (не).

Операторы цикла используются в тех случаях, когда надо несколько раз повторить одна или несколько команд. Синтаксис цикла while:

while ( условие )

тело цикла.

Программа повторяет выполненеи команды, содержащиеся в теле цикла до тех пор, пока условие истинно. Если тело цикла состоит из нескольких команд, то их заключают в фигурные скобки.

/*prog11.c*/

//программа вычисляет сумму квадратов чисел 1, 2,..., n

#include <stdio.h>

main()

{

unsigned int n, s = 0, i = 1; /* переменная s является сумматором, в ней будет накапливаться сумма чисел от 1 до n; переменные n и s относятся к типу “целые без знака” */.

scanf ( “n = %u”, &n );

while ( i <= n )

{

s = s + i * i;

i++;

}

printf ( “ 1 * 1 + 2 * 2 +...+ %u * %u = %u\n”, n, n, s );

return 0;

}

Эту же задачу можно решить с использованием цикла for:

/*prog12.c*/

//программа вычисляет сумму квадратов чисел 1, 2,..., n

#include <stdio.h>

main()

{

unsigned int n, s, i; /* переменная s является сумматором, в ней будет накапливаться сумма чисел от 1 до n; переменные n и s относятся к типу “целые без знака” */.

scanf ( “n = %u”, &n );

for ( i = 1, s = 0; i <= n; i++)

s = s + i * i;

printf ( “ 1 * 1 + 2 * 2 +...+ %u * %u = %u\n”, n, n, s );

return 0;

}

Операции, которые отделяются друг от друга запятой, в языке С образуют единое целое; таким образом, в начале цикла for переменной i присваивается значение 1, а сумматору s - значение 0. После каждого прохода цикла значение переменной i увеличивается на 1, а к значению s программа прибавляет квадрат значения i. Повторение цикла прекратится, когда значение переменной i будет больше 1.

/*prog13.c

на вход программы поступают целые положительные числа, программа вычисляет их сумму. Ввод преращается, когда пользователь введёт 0*/

#include <stdio.h>

main()

{

unsigned int i, s = 0; /* переменная s является сумматором, в ней будет накапливаться сумма чисел, которые вводит пользователь; в ячейке i хранится очередное число, прочитанное программой; переменные i и s относятся к типу “целые без знака” – unsigned int */

scanf ( “%u”, &i );

while ( i != 0 )

{

s = s + i;

scanf ( “%u”, &i );

}

printf ( “ сумма введённых чисел равна %u\n”, s );

return 0;

}

Язык С предназначен в первую очередь для разработки программ, которые выполняются на компьютерах, обладающих очень высокой производительностью. Здесь машинное время очень дорого, поэтому ввод данных осуществляется не с клавиатуры, а из файла. Изменим программу prog13.c:

/*prog14.c

на вход программы поступают вещественные числа, программа вычисляет их сумму*/

#include <stdio.h>

main()

{

float x, s = 0; /* переменная s является сумматором, в ней будет накапливаться сумма чисел, которые вводит пользователь; в ячейке x хранится очередное число, прочитанное программой */

int flag; /* в переменную flag помещается значение, которое возвращает функция scanf */

flag = scanf ( "%f", &x);

/*программа читает данные из файла, содержимое которого направляется в её входной поток; когда прочитан весь файл, функция scanf возвращает значение EOF, оно определяется в файле stdio.h*/

while ( flag != EOF )

{

s = s + x;

flag = scanf ( "%f", &x);

}

printf ( “ сумма введённых чисел равна %f\n”, s );

return 0;

}

Составим текстовый файл mydata.txt, содержащий следующие вещественные числа:

121.45 12.78 151.11 777.76

Откомпилируем программу prog14.c и запустим её, набрав в командной строке:

prog14.exe < mydata.txt

Символ < указывает операционной системе, что стандартный канал ввода исполняемого файла prog14.exe следует соединить с файлом mydata.txt. Программа выводит на экран сумму чисел, содержащихся в файле mydata.txt.

Составьте программы для решения следующих задач:

(8.1) на вход поступают два целых числа, программа определяет, равны они или нет;

(8.2) на вход поступают два разных вещественных числа, программа выводит на экран снечала большее число, а под ним меньшее;

(8.3) на вход поступают три вещественных числа, программа определяет, есть ли среди них положительные числа;

(8.4) на вход поступают три вещественных числа, программа определяет, есть ли среди них отрицательные числа;

(8.5) на вход поступают три целых числа, программа определяет, есть ли среди них совпадающие числа;

(8.6) на вход поступают три вещественных числа, программа определяет, могут ли они быть сторонами треугольника;

(8.7) на вход поступают три вещественных числа, программа определяет, могут ли они быть сторонами треугольника;

(8.8) на вход поступает целое положительное число n, программа вычисляет произведение чисел 1, 2,..., n (значение n! - n факториал);

(8.9) на вход поступают вещественные числа, программа вычисляет их среднее арифметическое;

(8.10) на вход поступают ненулевые целые числа, программа подсчитывет, сколко среди них положительных чисел и сколько отрицательных чисел;

(8.11) на вход поступают вещественные числа, программа определяет, упорядочены они по возрастанию или нет;

(8.12) на вход поступают вещественные числа, программа определяет, упорядочены они по убыванию или нет;