- •Имена переменных.
- •Типы данных и их размеры.
- •Подробное описание типов данных в языке си
- •Константы в си.
- •Объявления.
- •Арифметические операции.
- •Операции отношения и логические операции.
- •Преобразование типов данных в си.
- •Операции инкрементирования и декрементирования.
- •Операции с присваиванием и выражения с ними.
- •Условные выражения.
- •Приоритет и порядок вычисления.
Объявления.
Все переменные необходимо объявить до их использования, хотя некоторые объявления могут быть сделаны неявно — по контексту. В объявлении указываются тип и список из одной или нескольких переменных этого типа:
int lower, upper, step;
char с, line[1000];
Переменные можно разделять по строкам произвольным образом, например:
float a;
float b;
Переменные можно инициализировать прямо в объявлениях. Если после имени поставить знак равенства и выражение, то значение этого выражения будет присвоено переменной при ее создании:
int a = 25, h = 6;
char g = 'Q', k = 'm';
float r = 1.89;
long double n = r*123;
Выясним теперь, где в тексте программы определяются данные. В языке возможны глобальные и локальные объекты. Первые определяются вне функций и, следовательно, доступны для любой из них. Локальные объекты по отношению к функциям являются внутренними. Они начинают существовать, при входе в функцию и уничтожаются после выхода из нее. Ниже показана структура программы на Си и возможные места в программе, где определяются глобальные и локальные объекты.
int a; /* Определение глобальной переменной */
int function (int b, char c); /* Объявление функции (т.е. описание
ее заголовка)*/
void main (void)
{ //Тело программы
int d, e; //Определение локальных переменных
float f; //Определение локальной переменной
}
int function (int b, char c) /* Определение функции и формальных
параметров (по существу -локальных
переменных) b и c */
{ //Тело функции
char g; //Определение локальной переменной
...
}
Арифметические операции.
Арифметические операции задаются следующими символами (табл. 2): +, -, *, /, %. Последнюю из них нельзя применять к переменным вещественного типа. Например:
a = b + c;
x = y - z;
r = t * v;
s = k / l;
p = q % w;
Основными арифметическими операциями являются: сложение (‘+’), вычитание (‘-‘), умножение (‘*’) и деление (‘/’). Порядок выполнения операций в выражении соответствует их приоритету. Операции с одинаковым приоритетом в выражении выполняются слева направо.
Операция деления (‘/’) выполняется согласно типу ее операндов. Если оба операнда являются целыми числами, то деление будет целочисленным. Если один из операндов является вещественным, то и результат будет вещественным. Например, пусть переменная x имеет целочисленный тип, а y действительный тип. Следующая таблица демонстрирует результаты деления для различных операндов:
операция |
результат |
x = 7 / 3; |
x = 2 |
y = 7 / 3; |
y = 2.000000 |
y = 7.0 / 3; |
y = 2.333333 |
y = (double)7 / 3; |
y = 2.333333 |
Рассмотрим второй пример. При выполнении операции присваивания значения выражения переменной, сначала вычисляется значение выражения, а потом оно присваивается переменной. Поскольку операнды во втором примере являются целыми, то результатом деления 7 / 3 будет 2. Потом целочисленное значение 2 преобразовывается в действительное значение 2.000000 и присваивается действительной переменной y.
В четвертом примере перед выполнением операции деления происходит преобразование типа делимого из целого в вещественный. Поэтому деление будет производиться без потери точности.
Пример. Найти среднее арифметическое двух целых чисел a и b.
Результатом вычисления выражения (a + b) / 2 может быть действительное число. Поэтому деление должно выполняться с сохранением точности. А для этого один из операндов необходимо преобразовать в действительный тип. Например, результат можно вычислить так: res = (a + b) / 2.0. Программа имеет вид:
#include <stdio.h>
int a,b;
double res;
void main(void)
{
scanf("%d %d",&a,&b);
res = (a + b) / 2.0;
printf("%lf\n",res);
}
Операция вычисления остатка в Си обозначается символом ‘%’. При этом остаток при делении отрицательного числа на положительное является отрицательным (хотя математически остаток при делении на число n должен лежать в промежутке от 0 до n – 1 включительно).
Операция |
результат |
x = 6 % 3 |
x = 0 |
x = 8 % 3 |
x = 2 |
x = -6 % 3 |
x = 0 |
x = -8 % 3 |
x = -2 |
