Условное выражение удобно использовать, когда имеется некоторая переменная, которой можно присвоить одно из двух возможных значений.
Пр.: max = (а>b) ? a : b;
Преобразование типов
В операторах и выражениях должны быть данные одного и того же типа. Но на Си возможно это нарушить (в отличии от Паскаля). Си компилятор автоматически преобразует типы, но следует соблюдать определенные правила:
1.Если производится операция над данными 2-х разных типов, то обе величины приводятся к высшему типу (происходит "повышение" типа).
2. Типы от высшего к низшему: double, float, long, int, short, char. Применение слова unsigned повышает ранг соответствующего типа со знаком.
3. В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение ( при этом может быть как повышение так и понижение типа). "Понижение" типа приводит к отбрасыванию разрядов.
4. При вычислениях величин типа float они автоматически преобразуются в тип double (для сохранения точности вычислений, это уменьшает ошибку округления). Конечный результат преобразуется обратно в float, если это диктуется оператором описания.
Операции приведения
Хотя в СИ и возможно преобразование типов, лучше избегать этого и указывать точно тип данных. Это называется привидением типов.
int num;
num = 1,6+1,7; 3,3 => 3. Сначала числа складываются, затем результат приводится к указанному типу.
num = (int)1,6+(int)1,7; 1+1 = 2. В это случае, числа сначала приведены к данному типу, а затем складываются.
Дополнительные операции присваивания
+ = (величина, стоящая справа, прибавляется к величине, расположенной слева)
n + = 13 тоже, что и n=n+13
- = (от величины, стоящей слева, отнимается величина, расположенная справа)
den - = 20 den = den-20
* = (величина слева умножается на величину справа)
n*=2 n = n*2
/ = делит переменную л. ч. на величину п. ч.
% = дает остаток от деления переменной л. ч. на величину п. ч.
<<=; >>=; | =; & =; ^ =; ~=;
7. ОПЕРАТОРЫ ЯЗЫКА СИ
Основу программы на Си составляют выражения, а не операторы. Большинство операторов в программе являются выражениями с ‘;’. Это позволяет создавать эффективные программы.
Оператор является законченной конструкцией языка Си. Операторы служат основными конструкциями при построении программы. Выражение состоит из операций и операндов (операнд – то, над чем выполняется операция, простейшее выражение может состоять из одного операнда). Оператор служит командой компьютеру. Операторы бывают простые и составные. Простые операторы оканчиваются ‘;’ .
Простые операторы:
1. Пустой оператор ‘;’
2. Оператор описания int x, y;
3. Оператор присвоения count = 0.0;
4. Оператор выражение (управляющий оператор)
sum = sum+count;
var = (var + 10)/4;
5. Оператор вызова функции
printf("Привет \n");
6. Оператор следоаания ‘,’
x=7, y=10;
Составные операторы или блоки
Это группа операторов, заключенных в фигурные скобки {...}.
7. Оператор ветвления if... else.
Оператор может быть простым и составным. Позволяет пропустить оператор или блок операторов, если условие ложно.
if(условное выражение) или if(условное выражение) {
оператор; операторы;
}
1.Схема выполнения оператора
Тело программы
If Истина
if(условное выражение) или if(условное выражение) {
оператор1; операторы;
else оператор2; }
else {
операторы; }
2. Схема выполнения оператора
If Истина тело программы
else
С помощью оператора ветвления можно организовать множественный выбор, если составить сложную конструкцию.
if(условное выражение1)
оператор1;
else if(условное выражение2)
оператор2;
else if(условное выражение3)
оператор3;
else оператор4;
Слово else всегда относится к ближайшему if, иначе нужно ставить скобки.
if(условное выражение1) {
if(условное выражение2)
оператор1;
}
else оператор2;
// Пример задачи на использование оператора
#include <stdio. h>
#define LIMIT 12600
#define MAX 25200
#define NORMA 60
#define PEOPLE 20
void main(void)
{
float kwh; //количество киловат
float bill; // плата
int p, house;
printf("Укажите количество израсходованных кВт/ч.\n);
scanf("%f",&kwh);
printf("Укажите количество человек в семье.\n);
scanf("%d",&p);
house=NORMA+PEOPLE*p;
if(kwh<=house)
bill=kwh*LIMIT;
else
bill= house*LIMIT + (kwh-house)*MAX;
printf("Плата за %f составляет %f.\n",kwh, bill);
}
8. Оператор множественного выбора.
Оператор if...else осуществляет выбор между двумя (условиями) вариантами. Но иногда нужно сделать выбор из нескольких вариантов. Это можно сделать с помощью if-else if-else. Иногда удобнее применить оператор switch.
switch (целое выражение)
{
case конст1:
оператор;
case конст2:
оператор;
default:
оператор;
}
В начале вычисляется выражение в скобках за ключевым словом. Затем просматривается список меток case 'a': пока не будет найдена, соответствующая этому значению. Если нет такой метки, то будет выполнен default. Метка default может отсутствовать, тогда оператор switch ничего не выполнит и программа перейдет на следующий оператор. Оператор break служит для выхода из оператора switch и перехода к следующему оператору. Метки в операторе switch должны быть константами целого типа, включая chаr. Могут следовать несколько меток подряд.
//пример программы на множественный выбор
#include <stdio. h>
void main(void)
{
int x, y;
char c;
printf("Введите 2 целых числа и знак операции");
scanf(“ %d %d %c”, &x, &y, &c);
switch (c) {
case '+': printf("x + y = %3d\n”, x+y);
break;
case '-': printf("x - y = %3d\n”, x-y);
break;
case '*': printf("x * y = %3d\n”, x*y);
break;
case '/': printf("x / y = %3d\n”, x/y);
break;
default:
printf("Такой операции нет!\n);
}
}
9. Операторы цикла while.
Цикл – это многократно повторяющиеся действия или группа действий.
Операторы цикла могут быть трех видов: с предусловием, с постусловием, со счетчиком.
а) с предусловием:
Оператор while состоит из трех частей: это ключевое слово while, затем в круглых скобках указывается проверяемое условие, и тело цикла - оператор, который выполняется, если условие истинно (таких операторов может быть несколько, тогда они заключаются в {} и получается составной оператор). Если оператор один, то действие оператора while распространяется от ключевого слова while до ‘;’.
while (условное выражение) или while (условное выражение){
оператор; операторы;
}
Схема выполнения цикла
while Истина
Ложь (переход к следующей операции)
Тело цикла может состоять из нескольких операторов. В этом случае оно заключается
в фигурные скобки.
Пример 1: Пример 2:
index = 0; index = 0;
while (index++ < 10) while (index++ < 10) {
sum = 10*index + 2; sum = 10*index + 2;
printf ("sum = % d \n", sum); printf ("sum = % d \n", sum);
}
В примере 1 в цикл включен только один оператор присваивания. Печать данных будет производиться только 1 раз – после завершения цикла (будет выведено – sum=102). В примере 2 в цикл включено два оператора, поэтому печать результатов будет выводиться на каждом шаге работы цикла.
В операторе цикла с предусловием, решение о прохождении цикла принимается до прохождения цикла. Поэтому возможно, что цикл никогда не будет пройден.
Последовательность действий, состоящая из проверки выражения и выполнения оператора, периодически повторяется до тех пор, пока выражение не станет ложным. Каждый такой шаг называется «итерацией».
//Пример программы с циклом while
#include <stdio. h>
void main(void)
{
int guess=1;
char res;
printf("Задумайте число от 1 до 100. Я попробую его угадать");
printf("\n Отвечайте д, если моя догадка верна и”);
printf( «\n н, если я ошибаюсь.\n»);
printf("Итак ваше число %d?\n", guess);
while((res=getchar()) != 'д')
if(res!='\n')
printf("Тогда оно равно %d?\n", ++guess);
printf("Ура, я угадала!!!");
}
б) Оператор цикла с постусловием (истинность условия проверяется после выполнения каждой итерации цикла. Решение, выполнять или нет очередной раз тело цикла, принимается после выполнения всех итераций). Этот цикл всегда выполняется хотя бы 1 раз.
do или do {
оператор; операторы;
while (условное выражение); } while (условное выражение);
Проверка истинности осуществляется после выполнения оператора или блока операторов. Хотя бы один раз этот цикл будет выполнен.
Схема выполнения цикла
![]() |
Do while Истина
Ложь
Рассмотрим два примера:
Пример 1 Пример 2
do { while((ch = getchar()) ! = '\n')
ch = getchar(); putchar (ch);
putchar (ch);
} while(ch ! = '\n')
Функция getchar получает один символ, поступающий с клавиатуры и передает его программе, аргументов она не имеет. Функция putchar получает один символ, поступающий из программы, и пересылает его для вывода на экран, эта функция имеет один аргумент, т. е. в скобках необходимо указывать символ, который будет выведен на печать. Можно использовать эту функцию в следующем виде: putchar(getchar()) – эта запись компактна и не требует введения вспомогательных переменных.)
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 |



