Директивы Include
Во многие программы на (Турбо) Си подставляются один или несколько файлов, часто в самое начало кода главной функции main.
Появление директив
#include <файл_1>
#include "файл_2"
...
#include <файл_n>
приводит к тому , что препроцессор подставляет на место этих директив тексты файлов файл_1, файл_2 , ... , файл_n соответственно.
Если имя файла заключено в угловые скобки <...> , то поиск файла производится в специальном разделе подстановочных файлов. В отличие от многих других операторов (Турбо) Си директива Include не должна оканчиваться точкой с запятой .
Макро
С помощью директивы #define, вслед за которой пишутся имя макро и значение макро, оказывается возможным указать препроцессору, чтобы он при любом появлении в исходном файле на (Турбо) Си данного имени макро заменял это имя на соответствующие значения макро .
Например, директива
#define pi 3.1415926
связывает идентификатор pi со значением 3.1415926. После значения макро (;) не ставится.
Типы данных
В (Турбо) Си переменные должны быть описаны, а их тип специфирован до того, как эти переменные будут использованы.
При описании переменных применяется префиксная запись , при которой вначале указывается тип, а затем - имя переменной.
Например:
float weight;
int exam_score;
char ch;
С типом данных связываются и набор предопределенных значений, и набор операций, которые можно выполнять над переменной данного типа.
Переменные можно инициализировать в месте их описаний.
Пример:
int height = 71 ;
float income =26034.12 ;
Простейшими скалярными типами, предопределёнными в (Турбо) Си, являются
char Представляется как однобайтовое целое число
int Двубайтовое целое
long Четырёхбайтовое целое
float Четырёхбайтовое вещественное
double Восьмибайтовое вещественное
Оператор printf: вывод на терминал
Функцию printf можно использовать для вывода любой комбинации символов, целых и вещественных чисел, строк, беззнаковых целых, длинных целых и беззнаковых длинных целых.
Пример:
printf("\nВозраст Эрика - %d. Его доход $%.2f",age,income);
Предполагается, что целой переменной age (возраст) и вещественной переменной income (доход) присвоены какие-то значения.
Последовательность символов "\n" переводит курсор на новую строку.
Последовательность символов "Возраст Эрика -" будет выведена с начала новой строки. Символы %d - это спецификация для целой переменной age. Следующая литерная строка " Его доход $ ". %2f - это спецификация ( символ преобразования формата ) для вещественного значения, а также указание формата для вывода только двух цифр после десятичной точки. Так выводится значение переменной income
Символ формата | Тип выводимого объекта |
%с char
%s строка
%d int
%o int ( в восьмеричном виде )
%u unsigned int
%x int ( в шестнадцатеричном виде )
%ld long ( в десятичном виде )
%lo long ( в восьмеричном виде )
%lu unsigned long
%lx long ( в шестнадцатеричном виде )
%f float/double ( c фиксированной точкой)
%e float/double ( в экспоненциальной форме )
%g float/double ( в виде f или е в зависимости от значения )
%lf long float ( c фиксированной точкой )
%le long float ( в экспоненциальной форме )
%lg long float ( в виде f или е в зависимости
от значения )
Оператор scanf: ввод с клавиатуры
Оператор scanf является одной из многих функций ввода, имеющихся во внешних библиотеках.
Каждой вводимой переменной в строке функции scanf должна соответствовать спецификация. Перед именами переменных необходимо оставить символ &. Этот символ означает "взять адрес".
Пример:
#include<stdio.h>
main()
{
int weight, /*вес*/
height; /*рост*/
printf(" Введите ваш вес: ");
scanf("%d", &weight);
printf(" Введите ваш pocт: ");
scanf("%d", &height);
printf("\n\nВес = %d, рост = %d\n",
weight,height);
}
Задание:
Составить и распечатать программу вывода на экран своих анкетных данных различного типа: - вводимых с клавиатуры,
- с помощью директивы define,
- инициализированных при описании.
Лабораторная работа 3
Операторы и операции
(2 часа)
Цель работы: Изучение арифметических, логических операций и операций отношения и присваивания.
Основу языка (Турбо) Си составляют операторы. Оператором-выражения называют выражение, вслед за которым стоит точка с запятой. В (Турбо) Си точки с запятой используются для разделения операторов. Принято группировать все операторы в следующие классы: присваивания, вызов функции, ветвления и цикла.
В операторе присваивания используется операция присваивания = ,
Например:
c = a * b;
Действие такого оператора можно описать следующими словами: " с присваивается значение а, умножение на b ". Значение, присваиваемое переменной с, равняется произведению текущих значений переменных а и b.
Операторы часто относятся более чем к одному из четырех классов.
Например: оператор:
if ( ( c = cube( a * b ) ) > d )
...
составлен из представителей следующих классов: присваивания, вызов функции, и ветвление.
К понятию оператора вплотную примыкает понятие операции.
Различают следующие группы операций (Турбо) Си : арифметические операции, операции отношения, операции присваивания, логические операции, побитовые операции, операция вычисления размера (sizeof) и операция следования (запятая).
Арифметические операции
К арифметическим операциям относятся: сложение (+), вычитание (-), деление (/) , умножение (*) и остаток (%). Все операции (за исключением остатка) определены для переменных типа int , char , float. Остаток не определен для переменных типа float. Все арифметические операции с плавающей точкой производятся над операндами двойной точности.
Операции отношения
В языке определены следующие операции отношения: проверка на равенство (==), проверка на неравенство (!=), меньше (<), меньше или равно (<=), больше (>), больше или равно (>=).
Все перечисленные операции вырабатывают результат типа int. Если данное отношение между операндами истинно, то значение этого целого - единица, а если ложно, то нуль.
Все операции типа больше-меньше имеют равный приоритет, причем он выше , чем приоритет операций == и !=. Приоритет операции присваивания ниже приоритета всех операций отношений. Для задания правильного порядка вычислений используются скобки.
Логические операции
В языке имеются три логические операции:
&& операции И (and)
|| операции ИЛИ (or)
! отрицание
Аргументами логических операций могут быть любые числа, включая задаваемые аргументами типа char. Результат логической операции-единица, если истина, и нуль, если ложь. Вообще все значения, отличные от нуля, интерпретируются как истинные.
Логические операции имеют низкий приоритет, и поэтому в выражениях с такими операциями скобки используются редко.
Вычисление выражений, содержащих логические операции, производится слева направо и прекращается (усекается), как только удается определить результат. Если выражение составлено из логических утверждений (т.е. выражения, вырабатывающие значения типа int), соединенных между собой операцией И (&&), то вычисление выражения прекращается, как только хотя бы в одном логическом утверждении вырабатывается значение нуль. Если выражение составлено из логических утверждений, соединенных между собой операцией ИЛИ (||), то вычисление выражения прекращается, как только хотя бы в одном логическом утверждении вырабатывается ненулевое значение.
Вот несколько примеров, в которых используются логические операции:
if( i > 50 && j == 24)
...
if( value1 < value2 && (value3 > 50 || value4 < 20) )
...
Операции присваивания
К операциям присваивания относятся =, +=, -=, *= и /=, а также префиксные и постфиксные операции ++ и --. Все операции присваивания присваивают переменной результат вычисления выражения. Если тип левой части присваивания отличается от типа правой части, то тип правой части приводится к типу левой.
В одном операторе операция присваивания может встречаться несколько раз. Вычисления производятся справа налево.
Например:
a = ( b = c ) * d;
Вначале переменной d присваивается значение с, затем выполняется операция умножения на d, и результат присваивается переменной а.
Операции +=, -=, *= и /= являются укороченной формой записи операции присваивания. Их применение проиллюстрируем при помощи следующего описания:
a += b означает a = a + b.
a -= b означает a = a - b.
a *= b означает a = a * b.
a /= b означает a = a / b.
Префиксные и постфиксные операции ++ и -- используют для увеличения (инкремент) и уменьшения (декремент) на единицу значения переменной.
Семантика указанных операций следующая:
++a увеличивает значение переменной а на единицу до использования этой переменной в выражении.
а++ увеличивает значение переменной а на единицу после использования этой переменной в выражении.
--a уменьшает значение переменной а на единицу до использования этой переменной в выражении.
a-- уменьшает значение переменной а на единицу после использования этой переменной в выражении.
Операцию sizeof (размер) можно применить к константе, типу или переменной. В результате будет получено число байтов, занимаемых операндом.
Например:
printf ( "\nРазмер памяти под целое %d", sizeof( int) );
printf ( "\nРазмер памяти под cимвол %d", sizeof( сhar) );
Задание: Cоставить и распечатать программу, использующую оператор присваивания, арифметические операции и операцию sizeof.
Лабораторная работа 4
Функции