Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
59
Добавлен:
11.05.2015
Размер:
2.03 Mб
Скачать

2.1.8.3.Функция scanf.

Функция scanf предназначена для осуществления форматного ввода данных с клавиатуры. Scanf (форматное описание) в основном соответствует формату printf. Аргументы scanf должны быть указателями на соответствующие значения переменных. (Перед значениями переменных всех типов, за исключением массивов ( строк символов ) ставится амперсант. & - это символ обозначает, что в распоряжении функции предоставляется не содержимое, а адрес переменной.) Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов. Игнорируются пробелы, символы табуляции и перехода на строку. Между знаком % и символом преобразования может находиться число, задающее max размер поля или (*) запрещение присваивания.

scanf(“% d _ % * d _ % d”, & a, & b);

ввод с клавиатуры 1 _ 2 _ 3

В результате обращения к функции, scanf будут присвоены значения а = 1; b = 3.

2.1.8.4.Функция getchar

Функция getchar предназначена для чтения по одному символу из стандартного источника (клавиатуры) Формальное описание данной функции (переменная должна иметь тип int или char).

Пример:

а = getchar ( );

По данному оператору переменной а, присваивается очередной вводимый символ.

2.1.8.5.Функция putchar

Функция putchar предназначена для вывода значений переменной (символа) в стандартный выходной поток (на экран дисплея)

putchar (переменная);

Пример: putchar (a);

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

2.2.Операции, операторы и выражения.

Выражения являются объектами, конструированными с использованием операции (сложения, вычитания, умножения и т.д.). Константы, переменные (включая структуры, массивы и вызовы функций) и представляют собой формулы для вычисления значений переменных.

Выражения состоят из операндов (элементов языка).

Операции классифицируются по числу участвующих в них операндов и по типу действия, которые они выполняют.

Классифицируются по числу операндов:

1) Первичные, определяющие размер, разделители и компоненты составных объектов языка.

2)Унарные – выполнения действия под одним операндом.

3)Бинарные – требуется два операнда (включая большинство операций С).

4)Тройная – требуется 3 операнда.

?: – условная операция (одна)

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

Порядок можно рассматривать, как направление, в котором выполняются операции, обладающие одинаковым приоритетом.

Приоритет

Знак операции

Класс операции

Порядок

1

( )[ ] –> .

Первичные

––––>

2

!++ -- ~ - *

& sizeof (тип)

Унарные

<––––

3

* / %

Бинарные мультипликативные

––––>

4

+ –

Аддитивные

––––>

5

<< >>

Сдвига

––––>

6

< > <= >=

Отношения

––––>

7

== !=

Равенство

––––>

8

&

Побитовая и

––––>

9

^

Исключающая или

––––>

10

Побитовая или

––––>

11

&&

Логическое и

12



Логическое или

––––>

13

?:

Условное или

<––––

14

= + = – = *= /=

%= &= ^= =

Присваивающая

<––––

15

,

Запятая

––––>

Знак операции

Назначение операции

()

Вызов функции

[]

Выделение элемента массива

––––>

Выделение элемента записи

.

Выделение элемента записи

!

Логическое отрицание

++

Увеличение на единицу

– –

Уменьшение на единицу

~

поразрядное отрицание

изменение знака

*

обращение по адресу

&

- взятие адреса

│ sizeof

определение размера в байтах

( тип)

преобразование типа

*

- умножение

/

Деление

%

определение остатка от деления

+

Сложение

Вычитание

<<

сдвиг влево

>>

сдвиг вправо

<

меньше, чем

>

больше, чем

<=

меньше или равно

>=

больше или равно

= =

Равно

!=

не равно

Для остальных операций назначения определяются названием класса операции (см. предыдущую таблицу).

Оператор “,” используется для связки нескольких выражений. Левая сторона оператора “,” всегда вычисляется, как void (т.е. не выражающее значение) – это означает, что значение выражения находящегося с правой стороны станет значением разделенного запятыми выражения.

Пример:

x= (y=3,y+1);

Скобки необходимы, т.к. операция запятая имеет более низкий приоритет по сравнению с операцией присваивания. Оператор “,” аналогичен и в русском языке.

Оператор sizeof – унарный оператор, возвращающий длину в байтах переменной или типа помещенных в скобке.

Пример:

floatf;

printf (“% f”, sizeof f);

printf (" % d ", sizeof (int) );

В результате выполнения этого оператора выдаются значения 4 и 2.

Для вычисления размера типа, тип помещается в круглые скобки.

Для имени переменной круглые скобки необязательны.

Пример:

1. а! = b

Дает результат 1, если а не = b, и 0 в противном случае.

Операции + + и - - можно записывать как перед операндом, так и после него ++а и а++. В первом случае значение операнда изменяется перед его использованием в соответствующем выражении, а во втором после его использования.

Пример №1.

b = 1;

с = 2;

а = b+с++;

Получены такие значения = 3, а = 3

Пример №2.

b = 1;

с = 2;

а = b+ (++c);

Получены такие значения

с = 3;

а = 4;

Пример №3.

а = ~ b;

b = 1001

а = 0110

Пример №4.

а = b % c

b= 5

c= 2

a= 1

Эту операцию нельзя использовать для переменных типа float и double.

Пример №5.

а = b << c

b = 1001

c = 2

a = 0100

В данной операции осуществляется сдвиг значения влево на с разрядов, в оставшиеся разряды bзаносятся нули.

Пример №6.

а = = b

Дает результат единица, если а = b, и 0 в противном случае.

Остальные операции отношения аналогичны: результат = 1, если истинно, и 0 если ложно.

Пример №7.

y = x ? a:b

(Тройная операция) В этом выражении y = a, если x не = 0 и y = b,

если х = 0

Пример №8.

y = (a > b) ? a : b;

Позволяет присвоить переменной y значение большей переменной а или b.

y = max (a,b) – максимальное значение между а и b.

Пример №9. (конъюнкция (логическое "и"))

а = b & c;

Если b = 1010, c = 0110

(логическое умножение будет означать: 1*0 0*1 1*1 0*0),

то а = 0010

Пример:Поразрядная дизъюнкция ("или")

а = b|с

b = 1010, с = 0110, то а = 1110

1 и 0 выбирают 1, 0 и 1 выбирают 1, 1 и 1 выбирает 1,

0 и 0 выбирает 0

Поразрядно исключающая или

а = b ^ c

b= 1100

c= 0110

a= 1010

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

В языке С а = а + 5; аналогично записи а + = 5. В общем виде

а + = b соответствует а = а + b.

По аналогии используются другие бинарные операции.

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

1) Операторы типа char и short преобразуются к типу int. А типа float к типу double.

2) Если один из 2-х операндов имеет тип double, другой операнд преобразуется к типу double, и результат имеет тип double.

3) Если один из операторов имеет тип unsigned, то и другой операнд преобразуется к типу unsigned результат unsigned.

4) Если один из операндов имеет тип long, другой тоже преобразуется к long, результат long.

5) Если не выполнено условие 1-4, оба операнда должны быть типа int и результат имеет тип int.

Схема выполнения арифметических преобразований.

double <──── float

long

unsigned

int <───── char, short.

Горизонтальные преобразования выполняются всегда, вертикальные по мере необходимости.