S=PI*r*r;

printf (“площадь круга = %f \n”, S); }

Таблица 1 – Спецификации формата

Спецификации формата

Тип выводимой информации

%d

Десятичное целое число

Один символ

%s

Строка символов

Число с плавающей точкой, экспоненциальная запись

%f

Число с плавающей точкой, десятичная запись

%g

Используется вместо записей % f или % е, если он короче

%u

Десятичное целое число без знака

Восьмеричное целое число без знака

Шестнадцатеричное целое число без знака

Применение функции scanf ( )

Общий вид функции scanf ( ):

scanf (<cтрока формата>, <адрес>, <адрес>, …);

Функция scanf( ) использует практически тот же набор символов спецификаций преобразования, что и функция printf ( ). Основные отличия в случае функции scanf ( ) следующие:

1. Отсутствует спецификация %g.

2. Спецификации %f и %e эквивалентны.

3. Для чтения целых чисел типа short применяется спецификация % h.

Заметим:

1. При записи адреса используется операция адреса (&) для передачи адресов переменных.

2. При вводе значения строковой переменной символ & не пишется.

Пример программы:

main ( )

{ char name[30];

printf (“Введите имя автора”);

scanf (“%s”, name);

printf (“Автором программы является % s\n”, name); }

т. к. name является массивом символов, значения name это адрес самого массива. Поэтому перед именем name не используется адресный оператор &.

Основные операции в языке Си.

Самой общей операцией является присваивание. В языке Си оператор присваивания записывается V=A;

НЕ нашли? Не то? Что вы ищете?

где V – переменная, A – выражение.

Можно использовать последовательные присваивания, например sum=a=b;

Присваивание производится справа налево, то есть b будет присвоено a, которая в свою очередь будет присвоена sum, так что все три переменные получают одно и тоже значения (а именно; начальное значение b).

Язык Си поддерживает обычный набор арифметических операций:

* – умножение, / – деление, % – операция деления по модулю, + – сложение, – – вычитание.

Операция деление по модулю используется в целочисленной арифметике. Ее результатом является остаток от деления целых чисел (20 % 3 = 2).

Операции + и - имеют приоритет ниже, чем приоритет операций *, / и %, а у них он, в свою очередь, ниже приоритета унарного минуса.

Рассмотрим пример:

main( )

{ int m1, m2;

m1=m2= -(15+3)*5+(11+9*(8+3)) – 266%16; /* m1=m2=10;

(операция выполняется справа налево) */

printf (“m1 = %d\n”, m1);

printf (“%d\n”, m2/3); }

Операции увеличения и уменьшения: ++ и - -.

Эти операции позволяют добавить 1 или вычесть 1 из любого операнда. Различают две формы указанных операций, постфиксная и префиксная. Они различаются между собой только тем, в какой момент осуществляется увеличение или уменьшение операнда. Операции увеличения и уменьшения могут быть выполнены в середине выражения, причем эти операции могут быть выполнены до и после вычисления выражения. Рассмотрим примеры.

Пример 1: Пусть l=10;

тогда

x=l++; присвоит переменной x значение 10,

x=++l; присвоит переменной x значение 11.

В двух случаях значение l станет равным 11.

Пример 2:

sum=a+b++;

sum=a+ ++b;

b++ – постфиксная форма: переменная b изменяется после того, как ее значение используется.

++b – префиксная форма: переменная b изменяется перед тем, как ее значение используется.

В первом случае: “сложить a и b, присвоить результат sum и увеличить b на единицу.

Во втором случае: “увеличить b на единицу, сложить a и b, и присвоить результат sum”.

Пример 3:

main()

{ int a, b, s=0;

a=b=10; s=a+b++;

printf(“%d %d \n”, s, b);

s=a+ ++b;

printf (“%d %d \n”, s, b); }

Операции вычисления и уменьшения имеют очень высокий уровень старшинства; только круглые скобки обладают более высоким приоритетом.

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

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

1. Если операция выполняется над данными двух различных типов, обе величины приводятся к «высшему» из двух типов. Этот процесс называется «повышением» типа.

2. Последовательность имен типов, упорядоченных от «высшего» типа к «низшему» выглядит так: double, float, long, int, short и char. Примечание ключевого слова unsigned повышает ранг соответствующего типа данных.

3. В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение. Данный процесс может привести к «повышению» или «понижению» типа (во втором случае величина приводится к типу данных, имеющему более низкий приоритет).

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

Пример:

main ( )

{ char ch; int i; float fl;

fl=i=ch=’A’;

printf (“ch=%c, i=%d, fl=%6.2f\n”,ch, i, fl);

ch=ch + f; (65+1=66 =>код символа ''В''=> в ch)

i=fl+2*ch; (66*2+65.00=>132.00+65.00=>197.00=>197)

fl=2.0*ch+c; printf (''сh=%с, i=%d, fl=%62f)n'',ch, i, fl); }

Результат:

ch=A, i=65, fl=65.00

ch=B, i=197, fl=329.10

Еще один вид преобразования типов. Для сохранения точности вычислений при арифметических операциях все величины типа float преобразуются в данные типа double. Это существенно уменьшает ошибку округления. Конечный результат, преобразуется обратно в число типа float, если это диктуется соответствующим оператором описания.

Операции приведения.

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

(тип) выражение

где фактически имя требуемого типа подставляется вместо слова ''тип''

Например: пусть m – типа int

m = 2.7+2.9; - 5

m = (int) 2.7 + (int)2.9; - 4

Библиотечная программа sqrt рассчитана на аргумент типа double. Если m – целое, то при sqrt ((double) m) параметр m сначала преобразуется к типу double.

Выражение представляет собой объединение операций и операндов. Некоторые выражения состоят из меньших выражений, которые называются подвыражениями. В языке Си каждое выражение имеет значение.

Примеры: С=5+10=15 25+(С=5+10)=40

15>12  = 1

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

<, <=, = =, >=, >, !=

Если отношение истинно, значение условного выражения равно 1; если отношение ложно значение условного выражения равно 0. Простое условие выражения состоит из знака операции отношения и операндов, расположенных слева и справа от него. Приоритет операции отношения считается меньшим, чем у арифметических операций +, -, *, /, и большим, чем у операции присваивания.

Сами операции отношения можно разбить на две группы в соответствии с назначенными приоритетами: группа операций более высокого приоритета <, <=, >=, > и группа операций более низкого приоритета = =, !=. Операции отношения выполняются слева направо.

Операторы языка Си

Оператор присваивания имеет вид: V=A;

y=5*x+sqrt(7*x+3);

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

Например: выражение вида ((S=13+12)<=30) будет иметь значение истина.

Составные операторы (блоки). Составные операторы представляют собой два или более операторов, объединенных с помощью фигурных скобок; он называется также ''блоком''. Составные операторы используются в условном операторе, операторах цикла.

Основная литература: 1осн[63-77], 2осн[23-133]

Дополнительная литература: 11доп[84-106 ]

Контрольные вопросы:

1.  Назовите тип данных для работы с беззнаковыми целыми числами?

2.  Какие существуют формы записи операций увеличения и уменьшения и чем они отличаются?

3.  Назовите директиву препроцессора для определения символьных и строковых констант?

4.  Какие спецификации формата являются эквивалентными при их использовании в функции scanf?

5.  В каком случае происходит «повышение» типа?

Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.

Язык Си предоставляет три типа структур выбора. В структуре выбора if некоторое действие либо выполняется (выбирается), если условие истинно, либо пропускается, если это условие ложно. В структуре выбора if/else некоторое действие выполняется, если условие истинно, и выполняется другое действие, если это условие ложно. В структуре выбора switch выполняется одно из набора действий в зависимости от значения некоторого выражения.

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

Общий вид структуры выбора if:

if (выражение) оператор1;

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27