Условное выражение удобно использовать, когда имеется некоторая переменная, которой можно присвоить одно из двух возможных значений.

Пр.: 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