- •1.1. Элементы Языка си
- •1.1.1. Используемые символы
- •1.1.2. Константы
- •1.1.3. Идентификатор
- •1.1.4. Ключевые слова
- •1.1.5. Использование комментариев в тексте программы
- •1.2. Типы данных и их объявление
- •1.2.1 Категории типов данных
- •1.2.2. Целый тип данных
- •1.2.3. Данные плавающего типа
- •1.2.12. Инициализация данных
- •1.3. Выражения и Операции
- •1.3.1. Выражения
- •1.3.2. Операции
- •1.3.3. Операции унарный минус, отрицание и дополнение
- •1.3.4. Операции разадресации и адреса
- •1.3.5. Операция sizeof
- •1.3.6. Мультипликативные операции
- •1.3.7. Аддитивные операции
- •1.3.8. Логические операции
- •1.3.9. Операция последовательного вычисления
- •1.3.10. Условная операция
- •1.3.11. Операции увеличения и уменьшения
- •1.3.12. Составное присваивание
- •1.3.13. Приведение типов
- •1.3.14. Приоритеты операций и порядок вычислений
- •1.4. Операторы
- •1.4.1. Оператор выражение
- •1.4.2. Пустой оператор
- •1.4.3. Составной оператор
- •Ввод с клавиатуры осуществляется оператором scanf()
- •1.4.4. Оператор if
1.4.1. Оператор выражение
Любое выражение, которое заканчивается точкой с запятой, является оператором.
Выполнение оператора выражение заключается в вычислении выражения. Правила вычисления выражений были сформулированы выше.
Примеры:
++ i;
Этот оператор представляет выражение, которое увеличивает значение переменной i на единицу.
a=cos(b * 5);
Этот оператор представляет выражение, включающее в себя операции присваивания и вызова функции.
1.4.2. Пустой оператор
Пустой оператор состоит только из точки с запятой. При выполнении этого оператора ничего не происходит. Он обычно используется в случаях, когда по ситаксису требуется наличие в данном месте оператора, а по сути решения задачи никакие действия в этом месте выполнять не надо.
1.4.3. Составной оператор
Составной оператор представляет собой несколько операторов и объявлений, заключенных в фигурные скобки:
{ [oбъявление]
:
оператор; [оператор];
:
}
Заметим, что в конце составного оператора точка с запятой не ставится.
Выполнение составного оператора заключается в последовательном выполнении составляющих его операторов.
Пример:
int main ()
{
int q,b;
double t,d;
:
if (...)
{
int e,g;
double f,q;
:
}
:
return (0);
}
1.4.4. Операторы ввода и вывода информации.
В Си предусмотрены достаточно большие возможности для ввода и вывода информации. Мы на первом этапе рассмотрим только самые необходимые.
Для ввода с клавиатуры и вывода на экран разработаны специальные функции, которые становятся доступными после подключения заголовочного файла stdio.h. Чтобы подключить заголовочный файл необходимо вставить строку
#include <stdio.h> в самом начале программы.
Вывод на экран осуществляется оператором printf()
Структура (синтаксис) обращения к функции:
printf (строка формата, арг1, арг2, …, аргN);
В качестве аргументов функции арг1…аргN используются идентификаторы переменных или выражения. Список аргументов может быть пустым.
Строка формата(управляющая строка) - строковая константа, которая может содержать:
любой текст;
спецификаторы форматов (по количеству аргументов), обозначаются символом %, содержат информацию о типе выводимого значения и его модификации;
управляющие символы.
Каждому аргументу должен соответствовать только один спецификатор формата. Вид формата определяется типом аргумента.
Целые числа:
%i – аргумент рассматривается как целое 10-тичное число со знаком;
%d – аргумент рассматривается как целое 10-тичное число со знаком;
%u – целое 10-тичное без знака;
%x – 16-ричное целое без знака;
%o – 8-ричное целое без знака.
Вещественные числа:
%f – аргумент записывается в форме вещественного числа с фиксированной точкой (например, 0.036);
%g – аргумент записывается в форме вещественного числа с фиксированной точкой
%e – аргумент записывается в форме числа с плавающей точкой.
Символы:
%c – аргумент рассматривается как значение типа char, и на экран выводится один символ;
Рассмотрим пример:
#include <stdio.h> /* подключение заголовочного файла*/
int main(void)
{
float x=2.,y;
y=x*x;
printf("\n y(%f)=%f", x, y); /* вывод на экран y(2.000000)=4.000000*/
return 0;
}
Управляющая строка содержит ESC-символ перевода строки '\n', текст и два спецификатора формата (%f): первый для аргумента x, второй – для аргумента y.
Вызов функции printf() можно записать и в ином виде, включив в нее вычисление выражения:
#include <stdio.h> /* подключение заголовочного файла*/
int main(void)
{
float x=2.;
printf("\n y(%f)=%f", x, x*x);
return 0;
}
В результате на экране:y(2.000000)=4.000000.
Спецификаторы формата целых чисел можно записать в виде:
%Nd, %Nu, %No, %Nx,
где N – натуральное число, определяющее количество позиций, отводимых под значения числа (ширина поля вывода).
Для форматов вещественных чисел спецификатор формата представляется в виде:
%N.Mf или %N.Me,
где N и M – натуральные числа, определяющие общее число позиций, отведенных под число, N (ширина поля вывода) и число знаков в дробной части M (точность отображения).
Модифицируем форматы в нашем примере:
#include <stdio.h>
int main(void)
{
float x=2.;
printf("\n y(%4.1f)=%6.2f", x, x*x);
return 0;
}
Результат на экране: y( 2.0) = 4.00.
Заметим, что в соответствии с используемыми форматами для значения переменной x отведено 4, а для y – 6 позиций. Это находит свое отражение и на экране, т. е. после открывающей круглой скобки присутствует один пробел (само значение x занимает 3 позиции), а после знака равенства – 2 пробела (y занимает 4 позиции).
При неправильно заданном формате, когда ширина поля вывода оказывается меньше, чем необходимо для представления значения переменной, компилятор языка добавляет недостающие позиции, исправляя ошибку программиста.
Примеры форматирования данных на экране с помощью функции printf() приведены в табл. 5.1.
Таблица 9
|
Аргумент |
Спецификатор формата |
Результат |
|
|
значение |
тип |
||
|
123 |
int |
%d |
123 |
|
123 |
int |
%10d |
(7 пробелов) 123 |
|
123 |
int |
%x |
7B |
|
64000L |
long |
%ld |
64000 |
|
'x' |
char |
%c |
x |
|
'x' |
char |
%5c |
(4 пробела) x |
|
123.45 |
float |
%f |
123.450000 |
|
123.45 |
float |
%10.3f |
(3 пробела) 123.450 |
|
123.45 |
float |
%e |
1.234500E+02 |
|
123.45 |
double |
%10.3lf |
(3 пробела) 123.450 |
