Лекция 3. Базовые конструкции языка С.
Среда Visual Studio 2010 Для работы мы будем использовать среду программирования, разработанную Microsoft : Microsoft Visual C++ 2010 Express Edition. 2 Где взять? Скачать дистрибутивы с сайта http: //www. microsoft. com/ru-ru/default. aspx Версия Express Edition распространяется бесплатно.
3
Создание проекта 4
5
6
7
8
Структура программы 9 Основные разделы 1. Подключение внешних файлов 2. Объявление глобальных переменных, констант и пользовательских типов данных 3. Описание вспомогательных функций или их прототипов. 4. Заголовок функции main (). a) Объявления локальных переменных b) Тело основной программы Замечание: переменные могут быть объявлены в любом месте программы до их использования.
Основные библиотеки Ядро языка С включает в себя: типы данных, основной набор операторов и служебные слова языка (например: if, for, while и т. д. ). Все остальные функции распределены по внешним библиотекам. Библиотеки содержат функции, сгруппированные по области действия. 10
stdio. h (С) , cstdio (C++) – содержит функции вводавывода, функции работы с файлами cctype (C++), cstring. h, ctype. h (C) – содержит функции работы со строками и символами cstdlib (C++), stdlib. h (C) – функции динамического распределения памяти и служебные функции iostream (С++) – общие операции ввода-вывода conio. h (С) – функции работы с консольным вводомвыводом. 11
math. h (С), cmath (C++) – содержит математические функции (тригонометрические, гиперболические, экпоненциальные и логарифмические и т. д. ) ctime (C++) – содержит функции работы с датой и временем clocale (C++), locale. h (C) – функции локализации 12
Базовые типы данных в С Стандарт С 89 определяет пять базовых типов данных: int – целочисленный тип, целое число; float – вещественное число одинарной точности с плавающей точкой; double – вещественное число двойной точности с плавающей точкой; char – символьный тип для определения одного символа; void – тип без значения, служит для объявления функции, не возвращающей значения, или для создания универсального указателя (pointer). 13
Модификаторы базовых типов данных К модификаторам базовых типов относятся следующие спецификаторы, предшествующие типам в тексте программы: signed – тип данных со знаком; unsigned – беззнаковый тип long – «длинный» тип данных short – «короткий» тип данных 14 Перед типом данных может находиться комбинация спецификаторов.
Тип данных Примерный объем Диапазон значений char unsigned char 8 8 от – 127 до 127 от 0 до 255 signed char int unsigned int 8 16 или 32 от – 127 до 127 от – 32 767 до 32 767 от 0 до 65 535 от – 32 767 до 32 767 short int unsigned short int long int 16 16 16 32 от – 32 767 до 32 767 от 0 до 65 535 от – 32 767 до 32 767 от – 2 147 483 647 до 2 147 483 647 15
Тип данных Примерный Диапазон значений объем long int 64 от –(263– 1 ) до (263– 1) для С 99 signed long int 32 от – 2 147 483 647 до 2 147 483 647 unsigned long int 32 от 0 до 4 294 967 295 unsigned long int 64 от 0 до (264– 1) для С 99 float 32 от 1 Е– 37 до 1 Е+37 (с точностью не менее 6 значащих десятичных цифр) double 64 от 1 Е– 37 до 1 Е+37 (с точностью не менее 10 значащих десятичных цифр) long double 80 от 1 Е– 37 до 1 Е+37 (с точностью не менее 10 значащих десятичных цифр) 16 !!! Объем зависит от реализации компилятора и фиксирован только для типа char !!!
Переменные Переменная – имя ячейки памяти, которую можно использовать для хранения изменяемого значения. Переменные объявляются до своего использования. Синтаксис: тип список переменных; Например: int i, I, j, k=3; float srednee, Sr. Ed. Nee, balance; 17
Квалификатор const 18 Использование квалификатора позволяет определить переменную, значение которой нельзя изменить в дальнейшей программе, но можно инициализировать (задать начальное значение). Например: const int f=10; const также можно использовать для запрета изменений параметров, передаваемых в функцию.
Оператор присваивания 19 Синтаксис: имя_переменной = выражение; Выражение может состоять из: 1. Отдельной константы 2. Комбинации операторов любой сложности. Оператор может быть использован в любом корректном выражении. Разрешается присваивать одно значение одновременно нескольким переменным: x = y = z = 1;
Преобразования типов в операторе присваивания 20 Если в выражении смешаны различные типы чисел и переменных, то компилятор преобразует их в один тип: Все char и short int значения автоматически преобразуются (с расширением "типоразмера") в тип int. Этот процесс называется целочисленным расширением (integral promotion). Все операнды преобразуются (также с расширением "типоразмера") в тип самого большого операнда. Этот процесс называется расширением типа (type promotion).
Арифметические операторы - + * / % -- ++ 21 вычитание сложение умножение деление (результат зависит от типа) остаток от деления уменьшение на 1 (декрементация) увеличение на 1 (инкрементация)
Средства ввода-вывода 22 Часто используются такие средства ввода-вывода, как printf(), getchar(), gets(), scanf(). Вывод данных - printf. Прототип (заголовок) функции printf() имеет вид: int printf(const char *format, ? ); Функция printf() записывает в стандартный поток stdout (стандартный выходной поток данных - консоль) значения аргументов из заданного списка аргументов в соответствии со строкой форматирования (параметр format).
Спецификаторы формата функции printf() %c Символ %d Десятичное целое число со знаком %i Десятичное целое число со знаком %e Экспоненциальное представление числа (в виде мантиссы и порядка, е — на нижнем регистре) %E Экспоненциальное представление числа (в виде мантиссы и порядка, Е — на верхнем регистре) %f Десятичное число с плавающей точкой %F Десятичное число с плавающей точкой (только стандарт С 99) %% Выводит знак процента 23
%g Использует более короткий из форматов %e или %f %G Использует более короткий из форматов %E или %F %o Восьмеричное число без знака %s Символьная строка %x Шестнадцатеричное без знака (строчные буквы) %X Шестнадцатеричное без знака (прописные буквы) %p Выводит указатель %n Соответствующий аргумент должен быть указателем на целое число. 24
Функции ввода-вывода – getchar() Прототип функции getchar() имеет следующий вид: int getchar(void); 25 Функция getchar() возвращает из стандартного потока stdin (входного потока данных - консоли) следующий символ. При чтении символа предполагается, что символ имеет тип unsigned char, который потом преобразуется в целый. Можно использовать для организации задержки экрана.
Функции ввода – scanf() Прототип функции scanf() имеет следующий вид: int scanf(const char *format, ? ); 26 Функция scanf() представляет собой функцию для ввода данных общего назначения, которая читает поток stdin и сохраняет информацию в переменных, перечисленных в списке аргументов.
Все переменные должны передаваться посредством своих адресов, например, с помощью символа &. Управляющая строка, задаваемая параметром format, состоит из символов трех категорий: спецификаторов формата, пробельных символов, отличных от пробельных. Спецификация формата начинается знаком % и сообщает функции scanf() тип значения, которое будет прочитано. 27
Пример 1. 28 #include <stdio. h> #include <conio. h> int main (void) { // Объявления char ch, str[79+1]; // С учетом одного места для символа '