- •Министерство образования и науки Российской Федерации
- •1. Модель рабочего стола
- •2. Интерфейс командной строки
- •3. Компиляция, компоновка и выполнение программы
- •4. Командные файлы
- •5. Вывод символьной информации
- •6. Операции с целыми числами
- •7. Операции с вещественными числами
- •8. Операторы
- •9. Символы и строки
- •10 Передача параметров в командной строке
- •Министерство образования и науки Российской Федерации
- •Министерство образования и науки Российской Федерации
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) на вход поступают вещественные числа, программа определяет, упорядочены они по убыванию или нет;