
Лекция 1. Основы программирования на Си, С++.pptx
- Количество слайдов: 56
Основы программирования на Си, С++ доцент кафедры теоретической кибернетики Киевского национального университета имени Тараса Шевченко Бычков Алексей Сергеевич
Содержание История. Архитектура компьютера. Алфавит языка. Пример программы на С. Разбор программы. Изучение синтаксиса. Функция печати. Спецсимволы управления печатью. Простые типы переменных. Основные операции. Примеры решения задача. Контрольные вопросы.
Цели Ø Узнать: что такое компьютер, программа Ø Написать первую программу Ø Научиться писать простые программы (очень простые)
Что такое компьютер? Вкратце: компьютер — устройство для программируемой обработки информации. А это значит… Компьютер может управлять доменной печью. А может помогать печатать тексты. И то, и другое — обработка информации. Чтобы компьютер работал, в него надо загрузить задание по обработке информации, так называемую программу. И наша задача — научиться эти программы писать.
Что такое компьютер? Из чего компьютер состоит. Память, в которой компьютер держит программу, по которой работает, и данные, которые обрабатывает. Арифметико-логическое устройство. Состоит из небольшого количества памяти (т. н. регистров процессора) и логических схем, которые по команде извне соединяют регистры друг с другом. Например, соединили два регистра схемой суммирования — получили сумму двух чисел. Устройство управления, которое загружает из памяти команды и исполняет их на арифметико-логическом устройстве. Устройства ввода-вывода.
Что такое компьютер? арифметико-логическое устройство + устройство управления = центральный процессор.
Архитектура компьютера ГАРВАРДСКАЯ АРХИТЕКТУРА
ГАРВАРДСКАЯ АРХИТЕКТУРА Применяется в основном в специальных компьютерах и микроконтроллерах. Компьютеры гарвардской архитектуры работают в ваших флэшках, клавиатурах, модемах. Два запоминающих устройства — выше скорость (память намного медленнее арифметико-логического устройства). Крайне сложно испортить программу по ошибке программиста. Программная память может быть постоянная, а память данных — оперативная. В таком случае гарвардской ЭВМ вообще не нужна начальная загрузка.
АРХИТЕКТУРА ФОН НЕЙМАНА
АРХИТЕКТУРА ФОН НЕЙМАНА Применяется в компьютерах общего назначения. Это ваши настольные компьютеры, ноутбуки, телефоны, планшеты, маршрутизаторы. Общая память для программ и данных => возможны сложные операционные системы наподобие Windows и Linux, загружающие программы в память и выгружающие их. Для прикладного программиста разница между этими архитектурами невелика. И на тех, и на других можно программировать на языке Си.
Немного о Си Язык Си был разработан Брайаном Керниганом и Деннисом Ричи в 1973 году. Первой крупной разработкой на Си стало ядро операционной системы Unix. Существуют три стандарта Си: ANSI C (1989) C 99 (1999) C 11 (2011) Си и его последователь Cи++ — основные языки профессионального программирования.
Немного о Си Наиболее известные компиляторы Си: Microsoft Visual C++ Intel C Compiler GNU Compiler Collection Clang
Алфавит Буквы: A–Z, a–z, подчёркивание _. Подчёркивание считается буквой. Язык Си отличает заглавные буквы от строчных. Цифры: 0– 9. Невидимые: пробел; TAB, приравнивающийся к пробелу; перевод строки. Специальные: ! # % ^ & * ( ) − + = ~ [ ] ' | ; : " { } , . < > / ?
Алфавит Зарезервированные слова: Auto, break, case, char, const, continue, default, double, else, enum, extern, float, for, goto, if, inline, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while
Первая программа на Си /* Первая программа на Си Выводит на экран Hello world */ // Подключение заголовочного файла #include
Первая программа на Си /* Первая программа на Си Выводит на экран Hello world */ Это комментарий — пояснение к программе. Компиляторы его пропускают. Начиная с C 99, разрешены и однострочные комментарии — от // и до конца строки.
Первая программа на Си #include
Первая программа на Си int main() { …. . } Тело программы всегда содержится в функции с названием main, которая не принимает никаких параметров (пустые скобки) и возвращает целое число (int, сокращение от integer).
Первая программа на Си printf("Hello world!n"); Для чего мы подключали stdio. h? Из него нам нужна функция printf (print форматный). Текст берётся в двойные кавычки; n — обозначение для символа перехода на новую строку. Хороший тон: всё, что в фигурных скобках, сдвигать вправо. То есть, мы пишем текст «Hello world» и переводим курсор на новую строку. В конце каждой команды должна быть точка с запятой.
Первая программа на Си return 0; Наша функция main всегда возвращает 0. Этот ноль — так называемый «код возврата из программы» . Принято, что нормально закончившаяся программа возвращает ноль, закончившаяся с ошибкой — не ноль. Коды возврата используются, когда одна программа вызывает другую.
Первая программа на Си Кроме n, существуют такие спецсимволы: n — перейти на новую строку. a — звуковой сигнал. r — возврат каретки (вернуться в начало строки). t — табуляция (переход к ближайшей позиции 1, 9, 17, 25, 33…) b — сдвинуть курсор на одну позицию назад. " — кавычка ' — апостроф \ — обратная косая черта. 123 — символ, заданный восьмеричным кодом. До трёх цифр. x. AB — символ, заданный шестнадцатеричным кодом. Сколько угодно цифр.
Первая программа на Си Одной функцией printf можно написать и несколько строк текста, например, printf(“Мы студенты первого курсаn. Киевского национального университетаn”); Запись "раз" "два" эквивалентна "раздва", поэтому тот же оператор можно записать как printf(“Мы студенты первого курсаn” “Киевского национального университетаn”);
Первая программа на Си Хороший тон: многострочный вывод оформлять вот так. printf(“Мы студенты первого курсаn” “Киевского национального университетаn”);
Типы переменных Программа, написанная на Си, оперирует переменными. Каждая из переменных имеет какой-то тип. Например, int x; Вот мы объявили переменную x типа int.
Типы переменных Наименование Размер памяти для работы Диапазон принимаемых значений signed char Целый, 1 байт − 128… 127 signed short Целый, 2 байта − 32768… 32767 signed long Целый, 4 байта ± 2 млрд. signed long Целый, 8 байт ± 9· 1018 signed int Оптимальный для данной машины целый на x 86 и x 64 аналогично long unsigned char 0… 255 unsigned short 0… 65535 unsigned long 0… 4 млрд. unsigned long 0… 1, 8· 1019 float Дробный, 4 байта 10− 38… 1038, 7 знаков double Дробный, 8 байтов 10− 308… 10308, 12 знаков long double Самый длинный дробный на x 86 и x 64 — 10 байт, 10− 1000… 101000, 18 знаков
Типы переменных Опишем ещё пару переменных. double vector. X, vector. Y; short char. Code; int a_1, a_2, a_3; long _test;
Имена переменных — так называемые идентификаторы — устроены так. Начинаются с буквы или подчёркивания. Состоят из букв, цифр и подчёркиваний. Регистр важен.
Еще одна программа на Си Так что давайте напишем вторую программу. /* Программа вводит a и b, и выдаёт сумму a+b */ #include
Еще одна программа на Си int a, b, sum; Мы завели три переменных целого типа: для a, b и суммы. printf("Enter a >"); С этим мы уже знакомы. Однако символа n нет, так что на другую строку не переходим. Хороший тон: прежде чем просить пользователя ввести что-то, напишите, что именно вы требуете от него.
Еще одна программа на Си scanf("%d", &a); Это scan форматный, ещё одна функция из stdio. h. Команда считывает с клавиатуры одно число типа int (%d в форматной строке) и помещает его в переменную a. Для чего нужен амперсанд, мы узнаем позже, через несколько лекций, а пока только скажу: он нужен.
"); scanf("%d", &b); Пишем «Enter b >»" src="https://present5.com/presentation/1/24576161_226290827.pdf-img/24576161_226290827.pdf-31.jpg" alt="Еще одна программа на Си printf("Enter b >"); scanf("%d", &b); Пишем «Enter b >»" />
Еще одна программа на Си printf("Enter b >"); scanf("%d", &b); Пишем «Enter b >» , остаёмся на той же строке и просим пользователя ввести число.
Еще одна программа на Си sum = a + b; Берём значения переменных а и b, складываем их и результат помещаем в sum. Читается как «sum присвоить a+b» .
Еще одна программа на Си printf("a+b=%dn", sum); С концепцией форматной строки мы уже знакомы по scanf. Вместо %d будет подставлено значение переменной sum, типа int.
Еще одна программа на Си Вот еще несколько форматных строк. %d — для int %u — для unsigned int %f — для float %lf — для double %% — знак процента (Есть и другие форматные строки, об этом позже)
Целые и дробные числа Целые числа в языке программирования Си имеют такой вид: [+|−|0 x|0]цифры[U][L|LL]
Целые и дробные числа Минус — для отрицательного числа (− 4) 0 x — для числа в шестнадцатеричной системе счисления (0 x. F 5 = F 516 = 245) 0 — для числа в восьмеричной системе счисления (0267 = 2678 = 183) U — чтобы сказать, что число беззнаковое (например, 1 U). L — чтобы сказать, что оно long (2 L) LL — чтобы сказать, что оно long (123456789012 LL). Буквы U, L и LL разрешены как большие, так и маленькие. Хороший тон: не писать 2 l ( «два-эль» ). Это Си разрешает, но легко спутать с числом 21 ( «двадцать один» ).
Целые и дробные числа Допустим, некоторые компиляторы отказываются работать с таким кодом: long x; x = 12121212; Приходится писать x = 12121212 LL;
Целые и дробные числа Дробные числа выглядят так: [+|−]цифры[E][+|−]цифры][F|L] Например, 3, 5· 10− 6 записывается как 3. 5 e− 6. По умолчанию числовые константы имеют точность double. Если нужна точность float, надо добавить F, если long double — L. Число 3, 5 называется мантисса, число − 6 — порядок.
Еще одна программа…. /* Вычисление площади круга */ #include
Еще одна программа…. double r, area; Заводим две переменных типа double: радиус и площадь. Внимание! Старайтесь придумывать переменным говорящие имена. Вашу программу будет проще читать тому, кто не знаком с вашим кодом.
Еще одна программа…. scanf("%lf", &r); Тут мы вводим радиус типа double, соответствующей форматной строкой. с area = 3. 14159265*r*r; Умножение в компьютере принято обозначать звёздочкой. Вычисляем площадь и присваиваем её переменной area. printf("Area is %lf. ”, area); Опять-таки: раз уж выводим double, то и в форматной строке пишем %lf.
Операции 1. Унарные суффиксные (наивысший приоритет). x++ Вернуть x, затем прибавить единицу x−− Вернуть x, затем вычесть единицу ( ) Вызов функции; управление порядком операций (скобки как в математике) [ ] Элемент массива . Поле структуры −> Переход по указателю
Операции 2. Унарные префиксные. ++x Прибавить единицу −−x Вычесть единицу + Ничего не делает (например, +5) − Изменить знак (например, −x) ! Логическое «НЕ» ~ Побитовое «НЕ» (int) Преобразование типа * Разыменование указателя & Получить указатель на объект sizeof() Получить размер переменной
Операции 3. Операции типа умножения. * Умножение / Деление (для целых чисел — округляет к нулю) То есть, 10. 0/3. 0 == 3. 3333333 (дробные числа); 10/3 == 3 (целые числа) % Взятие остатка от деления (10%3 == 1). Работает только для целых чисел, для дробных функция fmod.
Операции 4. Операции типа сложения + Сложение − Вычитание 5. Побитовые сдвиги >> Сдвиг вправо (для знаковых чисел — т. н. «арифметический сдвиг» ) << Сдвиг влево
Операции 6. Операции сравнения < <= > >= Меньше или равняется Больше или равняется 7. Операции сравнения-2 == Равняется != Не равняется
Операции 8. & (побитовое «И» ) 9. ^ (побитовое «исключающее ИЛИ» aka XOR) 10. | (побитовое «ИЛИ» ) 11. && (логическое «И» ) 12. || (логическое «ИЛИ» ) 13. x ? y : z (операция «если-то-иначе» ) Порядок — справа налево.
Операции 14. Присваивания. Порядок — справа налево. = Присвоить += Прибавить −= Вычесть *= Умножить /= Разделить %= Взять остаток <<=Сдвинуть влево >>=Сдвинуть вправо &= Перемножить побитово |= Сложить побитово
Операции 15. Запятая (минимальный приоритет) , Выполнить последовательно. Результат — последний из операндов.
И ещё одна задача Одна сухопутная миля равняется 1, 609 км. Один американский галлон равняется 3, 785 л. Перевести американский расход топлива (миль на галлон, mpg) в наши родные литры/100 км.
И ещё одна задача /* Преобразование расхода топлива: mpg → л/100 км */ #include
Как сделать задержку? И наконец. В некоторых средах программирования, когда вы запускаете программу, окошко мелькает и исчезает. Чтобы сделать задержку, нужен вот такой код. printf("Press Enter!"); fflush(stdin); getchar(); fflush(stdin);
Как сделать задержку? 1. Напечатать «Press Enter» . 2. Выбросить все несчитанные символы из стандартного потока ввода (stdin). Замечание. В Windows — работает. В Linux — нет. Для чего это нужно? Мы ввели « 10 ENTER» . Scanf считал число, а enter оставил. Вот getchar этот ENTER и считает. 3. Считать ещё один символ. Символы передаются в программу, когда пользователь нажимает ENTER. 4. И снова выбросить всё, что сверх одного символа.
Задания 1. Вывести printf’ом какой-нибудь узор, например * * **** * * * * * * **** ** Постарайтесь это сделать одним printf’ом. 2. Перевести градусы Фаренгейта в градусы Цельсия. 0°F = − 18°C, 100°F = 38°C.
Задания 3. Ввести с клавиатуры a, b, c, d, e, f. Решить методом Крамера систему линейных алгебраических уравнений: ax + by = c dx + ey = f (считаем, что система невырожденная и имеет только одно решение. )
В следующей лекции будет… Подробнее об операциях. Математика. Модуль math. h Преобразование типов. Простейшая логика.