Лекция 2. Базовые конструкции языка С. Типы данных. Ветвления Суперкомпьютерные технологии в математике и математическом образовании М. А. Сокольская
Рекомендуемая литература: l l l 2 Дональд Э. Кнут. Искусство программирования. В 3 -х томах Роберт У. Себеста. Основные концепции языков программирования Герберт Шилдт. Полный справочник по С++. Четвертое издание. Бъёрн Страуструп. «Язык программирования C++» Джефф Элджер. «C++ For Real Programmers» Хэзфилд Р. , Кирби Л. Искусство программирования на C. Фундаментальные алгоритмы, структуры данных и примеры приложений. Энциклопедия программиста.
«Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования. » Линус Торвальдс (создатель ядра Linux) 3
Основные конструкции структурного программирования Линейная (функциональный блок). Операторы ввода, вывода и присваивания, следующие строго друг за другом. 1. 4
Основные конструкции структурного программирования 2. Условная или ветвление. Предполагает проверку екоторого н условия, в зависимости от которого выполняется то или иное действие 5
Основные конструкции структурного программирования 3. Циклическая. Обеспечивает многократное повторение набора операторов, пока не будет выполнено некоторое условие 6
Доказано, что любая программа может быть построена на основе трех базовых конструкций. 7
Блок-схема алгоритма поиска корней квадратного уравнения 8
С — это причудливый, несовершенный, но невероятно успешный язык. Dennis M. Ritchie. 9 Сотрудник фирмы Bell Labs Денис Ритчи создал язык Си в 1972 году во время совместной работы с Кеном Томпсоном, как инструментальное средство для реализации операционной истемы с Unix
Среда Visual Studio 2008 Для работы мы будем использовать среду программирования, разработанную Microsoft : Microsoft Visual C++ 2008 Express Edition. 10 Где взять? Скачать дистрибутивы с сайта http: //www. microsoft. com/ru-ru/default. aspx Версия Express Edition распространяется бесплатно.
11
Создание проекта 12
13
14
15
16
Структура программы 17 Основные разделы 1. Подключение внешних файлов 2. Объявление глобальных переменных, констант и пользовательских типов данных 3. Описание вспомогательных функций или их прототипов. 4. Заголовок функции main (). a) Объявления локальных переменных b) Тело основной программы Замечание: переменные могут быть объявлены в любом месте программы до их использования.
Основные библиотеки Ядро языка С включает в себя: типы данных, основной набор операторов и служебные слова языка (например: if, for, while и т. д. ). Все остальные функции распределены по внешним библиотекам. Библиотеки содержат функции, сгруппированные по области действия. 18
19
Базовые типы данных в С 20
Модификаторы базовых типов данных К модификаторам базовых типов относятся следующие спецификаторы, предшествующие типам в тексте программы: signed – тип данных со знаком; unsigned – беззнаковый тип long – «длинный» тип данных short – «короткий» тип данных 21 Перед типом данных может находиться комбинация спецификаторов.
Тип данных Примерный Диапазон значений объем 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 22
Тип данных Примерный Диапазон значений объем 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 значащих десятичных цифр) 23 !!! Объем зависит от реализации компилятора и фиксирован только для типа char !!!
Переменные Переменная – имя ячейки памяти, которую можно использовать для хранения изменяемого значения. Переменные объявляются до своего использования в любом месте программы. Синтаксис: тип список переменных; Например: int i, I, j, k=3; float srednee, Sr. Ed. Nee, balance; 24
Квалификатор const 25 Использование квалификатора позволяет определить переменную, значение которой нельзя изменить в дальнейшей программе, но можно инициализировать (задать начальное значение). Например: const int f=10; const также можно использовать для запрета изменений параметров, передаваемых в функцию.
Оператор присваивания 26 Синтаксис: имя_переменной = выражение; Выражение может состоять из: 1. Отдельной константы 2. Комбинации операторов любой сложности. Оператор может быть использован в любом корректном выражении. Разрешается присваивать одно значение одновременно нескольким переменным: x = y = z = 1;
Преобразования типов в операторе присваивания Если в выражении смешаны различные типы чисел и переменных, то компилятор преобразует их в один тип: Все char и short int значения автоматически преобразуются в тип int. Этот процесс называется целочисленным расширением (integral promotion). Все операнды преобразуются в тип самого большого операнда. Этот процесс называется расширением типа (type promotion). 27
Арифметические операторы - + * / % -- ++ 28 вычитание сложение умножение деление (результат зависит от типа) остаток от деления уменьшение на 1 (декрементация) увеличение на 1 (инкрементация)
Средства ввода-вывода Вывод данных - printf. Прототип (заголовок) функции printf() имеет вид: int printf(const char *format, ? ); 29 Функция printf() записывает в стандартный поток stdout (стандартный выходной поток данных - консоль) значения аргументов из заданного списка аргументов в соответствии со строкой форматирования (параметр format).
Спецификаторы формата функции printf() %c Символ %d Десятичное целое число со знаком %i Десятичное целое число со знаком %e Экспоненциальное представление числа (в виде мантиссы и порядка, е — на нижнем регистре) %E Экспоненциальное представление числа (в виде мантиссы и порядка, Е — на верхнем регистре) %f Десятичное число с плавающей точкой %F Десятичное число с плавающей точкой (только стандарт С 99) %% Выводит знак процента 30
%g Использует более короткий из форматов %e или %f %G Использует более короткий из форматов %E или %F %o Восьмеричное число без знака %s Символьная строка %x Шестнадцатеричное без знака (строчные буквы) %X Шестнадцатеричное без знака (прописные буквы) %p Выводит указатель %n Соответствующий аргумент должен быть указателем на целое число. 31
Функции ввода-вывода – getchar() Прототип функции getchar() имеет следующий вид: int getchar(void); Функция getchar() возвращает из стандартного потока stdin (входного потока данных - консоли) следующий символ. Можно использовать для организации задержки экрана. 32
Функции ввода – scanf() Прототип функции scanf() имеет следующий вид: int scanf(const char *format, ? ); 33 Функция scanf() представляет собой функцию для ввода данных общего назначения, которая читает поток stdin и сохраняет информацию в переменных, перечисленных в списке аргументов.
Все переменные должны передаваться посредством своих адресов, например, с помощью символа &. Управляющая строка, задаваемая параметром format, состоит из символов трех категорий: lспецификаторов формата, lпробелов, lсимволов, отличных от пробелов. Спецификация формата начинается знаком % и сообщает функции scanf() тип значения, которое будет прочитано. 34
Пример 1. 35 #include <stdio. h> #include <conio. h> int main (void) { // Объявления char ch, str[79+1]; // С учетом одного места для символа '