- •Предисловие
- •Алфавит языка
- •Служебные слова
- •Константы
- •Комментарии
- •Переменные
- •Int I,j,k; //переменные I, j, k – целого типа
- •Математические функции
- •Выражения
- •Выражения целого типа
- •Примеры записи выражений целого типа:
- •Примеры вычислений выражений целого типа:
- •Выражения вещественного типа
- •Примеры записи выражений вещественного типа
- •Примеры вычислений выражений вещественного типа:
- •Операторы присваивания
- •Примеры записи операторов присваивания:
- •Ввод и вывод данных
- •Стандартный ввод-вывод
- •Посимвольный ввод-вывод
- •Ввод-вывод строк
- •Форматированный вывод
- •Форматированный ввод
- •Scanf(“формат”, аргументы);
- •Int age, rost;
- •Vasja Pupkin
- •Vasja Pupkin
- •Структура программы
- •Void main()
- •Int main()
- •Int age, rost;
- •Директивы препроцессора
- •Включение файлов
- •Int main()
- •Int age, rost;
- •Int main()
- •Int age, rost;
- •Подстановка имен
- •Макросы
- •Структуры данных
- •Массивы
- •Int vect[5];
- •Int vect[count];
- •Vect[0] vect[1] vect[2] vect[3] vect[4]
- •Int main()
- •Int temp;
- •Int matr[row][col];
- •Алгоритм и его свойства
- •Схемы алгоритмов
- •Пример записи алгоритма:
- •Базовые структуры
- •Цепочка
- •Ветвления
- •Альтернатива
- •If (условие)
- •Вариант 2 – с использованием операции конъюнкции
- •Int main()
- •Int c, y1, y2, kl, day, month, year;
- •Часто встречающиеся ошибки программирования:
- •Int main()
- •Переключатель
- •Int main()
- •Int month;
- •Часто встречающиеся ошибки программирования:
- •Бесконечные циклы
- •Циклы с предусловием
- •Int main()
- •Программа
- •Int main()
- •Программа
- •Int main()
- •Часто встречающиеся ошибки программирования:
- •Циклы с постусловием
- •Int main()
- •Int main()
- •Программа
- •Int main()
- •Int main()
- •Int main()
- •Int month;
- •Циклы с параметром
- •Действия цикла:
- •Int main()
- •Int top, bottom;
- •Int main()
- •Int num, sum, factor;
- •Int main()
- •Int main()
- •If (number % 3)
- •Int main()
- •Int main()
- •Int I, m, vector_min, vector_max, temp;
- •Int vector[n];
- •Int main()
- •Int vector_min, vector_max, temp;
- •Int vector[n];
- •Функции
- •Int summa(int a, int b)
- •Int summa(int a, int b)
- •Void swap(int a, int b)
- •Int temp;
- •Int top, bottom, temp;
- •Рекурсия
- •5 * 4 * Factorial(3)
- •5 * 4 * 3 * Factorial(2)
- •5 * 4 * 3 * 2 * Factorial(1)
- •Void quick_sort(int left, int right, int vector[])
- •Int I, last;
- •Void swap(int I, int j, int vector[])
- •Int temp;
- •Особенности рекурсии:
- •Адреса и указатели
- •Операции над указателями
- •Указатели и массивы
- •Int mass[5];
- •Int trio[5][2][3];
- •Указатели и функции
- •Int main()
- •Указатели и строки
- •Функции для работы со строками
- •Vtorokursnik
- •Vtorokursnik
- •Itoa(I, str, 16);
- •Текстовые файлы
- •Int vector[k];
- •Vector_1:
- •Vector_2:
- •Int ocenka;
- •Imja: Vasilij
- •Imja: Ivan
- •Int ocenka;
- •Бинарные файлы
Примеры записи выражений целого типа:
sqrt(a)*b*b
5*pow(x,3) 5*x*x*x
a*b/c + c/(a*b)
cos(x*x*x)*cos(x*x*x)
exp(log(1.0+x)/3.0) pow((1.0+x),1.0/3.0)
Внимание! Ошибочная запись pow((1.0+x),1/3)
Примеры вычислений выражений целого типа:
(5&3) + (5|3)= 8
(3>5)||(4%2)&&(4/2) = 0
(('a' - 32)=='A') + !(3>5) + (5||3) = 3
(5&&3) + (5||3) +!5 = 2
((5>3)==(5!=3)) + !('A'>'B') + ('A'==65) = 3
(!(2%3)||(2%3)) + (!(2/3)&&(2/3)) + !((3>5)||(5>2)) = 1
8/3%2 + !('C' - 'A' == 3%5) - ceil(pow(0.5,2)) = 0
Выражения вещественного типа
В выражениях вещественного типа используются операнды всех типов Си, связанные знаками арифметических, логических операций, операций сравнения и круглыми скобками.
К арифметическим операциям относятся:
+ сложение 3.2 + 2.5 = 5.7
- вычитания 5.8 – 2.5 = 3.3
* умножение 3.5 * 2.0 = 7.0
/ деление 5.5 / 2.0 = 2.25
Логические операции и операции сравнения совпадают с соответствующими операциями для выражений целого типа.
Внимание! Не рекомендуется использовать операцию чистого равенства == для сравнения вещественных чисел – она, как правило, дает значение ложь (0).
Побитовые операции над операндами вещественного типа не определены.
Приоритет и порядок выполнения операций в выражениях вещественного типа соответствует приоритету и порядку их выполнения в выражениях целого типа. Если в выражении вещественного типа встречаются операнды различных типов, то производится автоматическое преобразование типов к одному, самому длинному:
операнды типов char и short – к операндам типа int,
если хотя бы один из операндов имеет тип double, то и другие преобразуются в операнды типа double, и результат будет иметь тоже тип double,
если хотя бы один из операндов имеет тип long, то и другие преобразуются в операнды типа long, и результат будет иметь тоже тип long.
Примеры записи выражений вещественного типа
2.5 + 0.97*b*b
0.2e-4*x – 5.0e-12*y
Примеры вычислений выражений вещественного типа:
ceil(log(1.0)) + ceil(exp(0.0))- round(pow(2.0,0)) = 0
floor(fmod(pow(1.6,2),pow(2.0,1))*10) - ceil(pow(1.41,2))=3
ceil(sqrt(2.0)) + floor(sqrt('D'-'A')) - (3|4) = -4
ceil(sqrt(10.0)) - floor(sqrt(3.0)) - 3%5 = 0
Операторы присваивания
Операторы присваивания служат для вычисления значений выражений и присваивания вычисленных значений переменным.
Оператор присваивания имеет вид:
x = s;
где x – имя переменной,
s – выражение того же типа,
= - знак присваивания.
Оператор присваивания дает команду компьютеру на вычисление значения выражения справа от знака присваивания и запись вычисленного значения в ячейку памяти, отведенную для хранения переменной, стоящей слева от знака присваивания. При этом прежнее значение переменной аннулируется. Поэтому в программировании можно использовать, например, такие операторы присваивания:
y = y + 5;
Выполняя его, компьютер возьмет старое значение переменной y и увеличит его на 5, после чего полученное новое значение этой переменной снова запишет в отведенную для нее ячейку памяти.
Начинающий программист может сделать ошибку, записав слева от знака присваивания не имя переменной, а константу или выражение:
10.5 = x;
a + b = y + 5.2;
В отличие от Паскаля, присваивание в Си может быть организовано несколькими способами:
как оператор присваивания:
a = 5;
как оператор-выражение:
a++;
как операция, встречающаяся в выражении несколько раз, при этом операции присваивания выполняются справа налево:
a = b = c = 5;
как операция, если стоит внутри других операций:
a = (b = 1) + 4;
Сначала переменной b будет присвоено значение 1, а затем к результату, полученному в скобках, будет прибавлено 4..
a = (b = 1, c = 2) + 4;
В этом случае сначала выполняются обе операции присваивания в скобках (перечисляются через запятые). Результат операций в скобках равен результату последней операции в них, то есть 2. После этого выполняются остальные операции в выражении, в данном случае операция сложения. Таким образом, одним оператором присваивания будут присвоены значения сразу трем переменным:
b = 1, c = 2, a = 6
Операции присваивания, изменяющие старые значения переменных, реализуются в Си объединенными арифметическими или побитовыми операциями присваивания:
исходный оператор объединенный оператор
a = a + 5; a+=5;
a = a – 3; a-=3;
a = a * 4; a*=4;
a = a / 6; a/=6;
a = a % 2; a%=2;
a = a + b / c; a+=b/c;
a = a & 3; a&=3;
a = a | 2; a|=2;
a = a * b / c; a*=b/c;
a = a * (b + c); a*=b + c;
Эти операции, как и сама операция присваивания, имеют самый низкий приоритет и выполняются в выражениях последними справа налево, поэтому, например, замена
a = a / b *c; на a/=b * c;
будет неверна – получаются различные выражения.
В операторах присваивания могут использоваться операции инкремента ++ и декремента --. Знаки инкремента и декремента могут стоять в выражениях как перед переменной (префиксная запись), так и после нее (постфиксная запись). При этом выражения будут вычисляться по-разному:
при префиксной записи (знак перед переменной) сначала изменяется значение этой переменной, а затем выполняются другие операции, и последней – операция присваивания:
a = 4;
b = ++a; a=5, b=5
c = ++b/2; b=6, c=3
d = ++a/2; a=6, d=3
при постфиксной записи (знак после переменной) сначала вычисляется значение выражения со старыми значениями переменных, выполняется операция присваивания, после чего выполняются операции инкремента или декремента:
a = 4;
b = a++; b=4, a=5
c = b++/2; c=2, b=5
d = a++/2; d=2, a=6
В Си приветствуется присваивание начальных значений переменным при их описании – инициализация переменных:
int i=5;
float x=3.1415;
char c=’A’;
Инициализировать переменные можно и выражениями, операндами которых являются константы:
int k=117*16;
float x= 3.1415*2.0e-3;
Если значения переменных целого или вещественного типов явно не заданы при их описании, то они автоматически инициализируются нулями.