Скачать презентацию Основы программирования на Си С доцент кафедры теоретической Скачать презентацию Основы программирования на Си С доцент кафедры теоретической

Лекция 1. Основы программирования на Си, С++.pptx

  • Количество слайдов: 56

Основы программирования на Си, С++ доцент кафедры теоретической кибернетики Киевского национального университета имени Тараса Основы программирования на Си, С++ доцент кафедры теоретической кибернетики Киевского национального университета имени Тараса Шевченко Бычков Алексей Сергеевич

Содержание История. Архитектура компьютера. Алфавит языка. Пример программы на С. Разбор программы. Изучение синтаксиса. Содержание История. Архитектура компьютера. Алфавит языка. Пример программы на С. Разбор программы. Изучение синтаксиса. Функция печати. Спецсимволы управления печатью. Простые типы переменных. Основные операции. Примеры решения задача. Контрольные вопросы.

Цели Ø Узнать: что такое компьютер, программа Ø Написать первую программу Ø Научиться писать Цели Ø Узнать: что такое компьютер, программа Ø Написать первую программу Ø Научиться писать простые программы (очень простые)

Что такое компьютер? Вкратце: компьютер — устройство для программируемой обработки информации. А это значит… Что такое компьютер? Вкратце: компьютер — устройство для программируемой обработки информации. А это значит… Компьютер может управлять доменной печью. А может помогать печатать тексты. И то, и другое — обработка информации. Чтобы компьютер работал, в него надо загрузить задание по обработке информации, так называемую программу. И наша задача — научиться эти программы писать.

Что такое компьютер? Из чего компьютер состоит. Память, в которой компьютер держит программу, по Что такое компьютер? Из чего компьютер состоит. Память, в которой компьютер держит программу, по которой работает, и данные, которые обрабатывает. Арифметико-логическое устройство. Состоит из небольшого количества памяти (т. н. регистров процессора) и логических схем, которые по команде извне соединяют регистры друг с другом. Например, соединили два регистра схемой суммирования — получили сумму двух чисел. Устройство управления, которое загружает из памяти команды и исполняет их на арифметико-логическом устройстве. Устройства ввода-вывода.

Что такое компьютер? арифметико-логическое устройство + устройство управления = центральный процессор. Что такое компьютер? арифметико-логическое устройство + устройство управления = центральный процессор.

Архитектура компьютера ГАРВАРДСКАЯ АРХИТЕКТУРА Архитектура компьютера ГАРВАРДСКАЯ АРХИТЕКТУРА

ГАРВАРДСКАЯ АРХИТЕКТУРА Применяется в основном в специальных компьютерах и микроконтроллерах. Компьютеры гарвардской архитектуры работают ГАРВАРДСКАЯ АРХИТЕКТУРА Применяется в основном в специальных компьютерах и микроконтроллерах. Компьютеры гарвардской архитектуры работают в ваших флэшках, клавиатурах, модемах. Два запоминающих устройства — выше скорость (память намного медленнее арифметико-логического устройства). Крайне сложно испортить программу по ошибке программиста. Программная память может быть постоянная, а память данных — оперативная. В таком случае гарвардской ЭВМ вообще не нужна начальная загрузка.

АРХИТЕКТУРА ФОН НЕЙМАНА АРХИТЕКТУРА ФОН НЕЙМАНА

АРХИТЕКТУРА ФОН НЕЙМАНА Применяется в компьютерах общего назначения. Это ваши настольные компьютеры, ноутбуки, телефоны, АРХИТЕКТУРА ФОН НЕЙМАНА Применяется в компьютерах общего назначения. Это ваши настольные компьютеры, ноутбуки, телефоны, планшеты, маршрутизаторы. Общая память для программ и данных => возможны сложные операционные системы наподобие Windows и Linux, загружающие программы в память и выгружающие их. Для прикладного программиста разница между этими архитектурами невелика. И на тех, и на других можно программировать на языке Си.

Немного о Си Язык Си был разработан Брайаном Керниганом и Деннисом Ричи в 1973 Немного о Си Язык Си был разработан Брайаном Керниганом и Деннисом Ричи в 1973 году. Первой крупной разработкой на Си стало ядро операционной системы Unix. Существуют три стандарта Си: ANSI C (1989) C 99 (1999) C 11 (2011) Си и его последователь Cи++ — основные языки профессионального программирования.

Немного о Си Наиболее известные компиляторы Си: Microsoft Visual C++ Intel C Compiler GNU Немного о Си Наиболее известные компиляторы Си: Microsoft Visual C++ Intel C Compiler GNU Compiler Collection Clang

Алфавит Буквы: A–Z, a–z, подчёркивание _. Подчёркивание считается буквой. Язык Си отличает заглавные буквы Алфавит Буквы: A–Z, a–z, подчёркивание _. Подчёркивание считается буквой. Язык Си отличает заглавные буквы от строчных. Цифры: 0– 9. Невидимые: пробел; TAB, приравнивающийся к пробелу; перевод строки. Специальные: ! # % ^ & * ( ) − + = ~ [ ] ' | ; : " { } , . < > / ?

Алфавит Зарезервированные слова: Auto, break, case, char, const, continue, default, double, else, enum, extern, Алфавит Зарезервированные слова: 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 Первая программа на Си /* Первая программа на Си Выводит на экран Hello world */ // Подключение заголовочного файла #include // Главная функция int main() { printf("Hello world!n"); return 0; }

Первая программа на Си /* Первая программа на Си Выводит на экран Hello world Первая программа на Си /* Первая программа на Си Выводит на экран Hello world */ Это комментарий — пояснение к программе. Компиляторы его пропускают. Начиная с C 99, разрешены и однострочные комментарии — от // и до конца строки.

Первая программа на Си #include <stdio. h> Это так называемая «директива препроцессора» . Эта Первая программа на Си #include Это так называемая «директива препроцессора» . Эта директива подключает к нашей программе файл с функциями ввода-вывода (standard input -output).

Первая программа на Си int main() { …. . } Тело программы всегда содержится Первая программа на Си int main() { …. . } Тело программы всегда содержится в функции с названием main, которая не принимает никаких параметров (пустые скобки) и возвращает целое число (int, сокращение от integer).

Первая программа на Си printf( Первая программа на Си printf("Hello world!n"); Для чего мы подключали stdio. h? Из него нам нужна функция printf (print форматный). Текст берётся в двойные кавычки; n — обозначение для символа перехода на новую строку. Хороший тон: всё, что в фигурных скобках, сдвигать вправо. То есть, мы пишем текст «Hello world» и переводим курсор на новую строку. В конце каждой команды должна быть точка с запятой.

Первая программа на Си return 0; Наша функция main всегда возвращает 0. Этот ноль Первая программа на Си return 0; Наша функция main всегда возвращает 0. Этот ноль — так называемый «код возврата из программы» . Принято, что нормально закончившаяся программа возвращает ноль, закончившаяся с ошибкой — не ноль. Коды возврата используются, когда одна программа вызывает другую.

Первая программа на Си Кроме n, существуют такие спецсимволы: n — перейти на новую Первая программа на Си Кроме n, существуют такие спецсимволы: n — перейти на новую строку. a — звуковой сигнал. r — возврат каретки (вернуться в начало строки). t — табуляция (переход к ближайшей позиции 1, 9, 17, 25, 33…) b — сдвинуть курсор на одну позицию назад. " — кавычка ' — апостроф \ — обратная косая черта. 123 — символ, заданный восьмеричным кодом. До трёх цифр. x. AB — символ, заданный шестнадцатеричным кодом. Сколько угодно цифр.

Первая программа на Си Одной функцией printf можно написать и несколько строк текста, например, Первая программа на Си Одной функцией printf можно написать и несколько строк текста, например, printf(“Мы студенты первого курсаn. Киевского национального университетаn”); Запись "раз" "два" эквивалентна "раздва", поэтому тот же оператор можно записать как printf(“Мы студенты первого курсаn” “Киевского национального университетаn”);

Первая программа на Си Хороший тон: многострочный вывод оформлять вот так. printf(“Мы студенты первого Первая программа на Си Хороший тон: многострочный вывод оформлять вот так. printf(“Мы студенты первого курсаn” “Киевского национального университетаn”);

Типы переменных Программа, написанная на Си, оперирует переменными. Каждая из переменных имеет какой-то тип. Типы переменных Программа, написанная на Си, оперирует переменными. Каждая из переменных имеет какой-то тип. Например, int x; Вот мы объявили переменную x типа int.

Типы переменных Наименование Размер памяти для работы Диапазон принимаемых значений signed char Целый, 1 Типы переменных Наименование Размер памяти для работы Диапазон принимаемых значений 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; Типы переменных Опишем ещё пару переменных. double vector. X, vector. Y; short char. Code; int a_1, a_2, a_3; long _test;

Имена переменных — так называемые идентификаторы — устроены так. Начинаются с буквы или подчёркивания. Имена переменных — так называемые идентификаторы — устроены так. Начинаются с буквы или подчёркивания. Состоят из букв, цифр и подчёркиваний. Регистр важен.

Еще одна программа на Си Так что давайте напишем вторую программу. /* Программа вводит Еще одна программа на Си Так что давайте напишем вторую программу. /* Программа вводит a и b, и выдаёт сумму a+b */ #include int main() { int a, b, sum; printf("Enter a >"); scanf("%d", &a); printf("Enter b >"); scanf("%d", &b); sum = a + b; printf("a+b=%dn", sum); return 0; }

Еще одна программа на Си int a, b, sum; Мы завели три переменных целого Еще одна программа на Си int a, b, sum; Мы завели три переменных целого типа: для a, b и суммы. printf("Enter a >"); С этим мы уже знакомы. Однако символа n нет, так что на другую строку не переходим. Хороший тон: прежде чем просить пользователя ввести что-то, напишите, что именно вы требуете от него.

Еще одна программа на Си scanf( Еще одна программа на Си 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; Берём значения переменных а Еще одна программа на Си sum = a + b; Берём значения переменных а и b, складываем их и результат помещаем в sum. Читается как «sum присвоить a+b» .

Еще одна программа на Си printf( Еще одна программа на Си printf("a+b=%dn", sum); С концепцией форматной строки мы уже знакомы по scanf. Вместо %d будет подставлено значение переменной sum, типа int.

Еще одна программа на Си Вот еще несколько форматных строк. %d — для int Еще одна программа на Си Вот еще несколько форматных строк. %d — для int %u — для unsigned int %f — для float %lf — для double %% — знак процента (Есть и другие форматные строки, об этом позже)

Целые и дробные числа Целые числа в языке программирования Си имеют такой вид: [+|−|0 Целые и дробные числа Целые числа в языке программирования Си имеют такой вид: [+|−|0 x|0]цифры[U][L|LL]

Целые и дробные числа Минус — для отрицательного числа (− 4) 0 x — Целые и дробные числа Минус — для отрицательного числа (− 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; Целые и дробные числа Допустим, некоторые компиляторы отказываются работать с таким кодом: long x; x = 12121212; Приходится писать x = 12121212 LL;

Целые и дробные числа Дробные числа выглядят так: [+|−]цифры[E][+|−]цифры][F|L] Например, 3, 5· 10− 6 Целые и дробные числа Дробные числа выглядят так: [+|−]цифры[E][+|−]цифры][F|L] Например, 3, 5· 10− 6 записывается как 3. 5 e− 6. По умолчанию числовые константы имеют точность double. Если нужна точность float, надо добавить F, если long double — L. Число 3, 5 называется мантисса, число − 6 — порядок.

Еще одна программа…. /* Вычисление площади круга */ #include <stdio. h> int main() { Еще одна программа…. /* Вычисление площади круга */ #include int main() { double r, area; printf("Enter raduis >"); scanf("%lf", &r); area = 3. 14159265*r*r; printf("Area is %lf. ”, area); return 0; }

Еще одна программа…. double r, area; Заводим две переменных типа double: радиус и площадь. Еще одна программа…. double r, area; Заводим две переменных типа double: радиус и площадь. Внимание! Старайтесь придумывать переменным говорящие имена. Вашу программу будет проще читать тому, кто не знаком с вашим кодом.

Еще одна программа…. scanf( Еще одна программа…. scanf("%lf", &r); Тут мы вводим радиус типа double, соответствующей форматной строкой. с area = 3. 14159265*r*r; Умножение в компьютере принято обозначать звёздочкой. Вычисляем площадь и присваиваем её переменной area. printf("Area is %lf. ”, area); Опять-таки: раз уж выводим double, то и в форматной строке пишем %lf.

Операции 1. Унарные суффиксные (наивысший приоритет). x++ Вернуть x, затем прибавить единицу x−− Вернуть Операции 1. Унарные суффиксные (наивысший приоритет). x++ Вернуть x, затем прибавить единицу x−− Вернуть x, затем вычесть единицу ( ) Вызов функции; управление порядком операций (скобки как в математике) [ ] Элемент массива . Поле структуры −> Переход по указателю

Операции 2. Унарные префиксные. ++x Прибавить единицу −−x Вычесть единицу + Ничего не делает Операции 2. Унарные префиксные. ++x Прибавить единицу −−x Вычесть единицу + Ничего не делает (например, +5) − Изменить знак (например, −x) ! Логическое «НЕ» ~ Побитовое «НЕ» (int) Преобразование типа * Разыменование указателя & Получить указатель на объект sizeof() Получить размер переменной

Операции 3. Операции типа умножения. * Умножение / Деление (для целых чисел — округляет Операции 3. Операции типа умножения. * Умножение / Деление (для целых чисел — округляет к нулю) То есть, 10. 0/3. 0 == 3. 3333333 (дробные числа); 10/3 == 3 (целые числа) % Взятие остатка от деления (10%3 == 1). Работает только для целых чисел, для дробных функция fmod.

Операции 4. Операции типа сложения + Сложение − Вычитание 5. Побитовые сдвиги >> Сдвиг Операции 4. Операции типа сложения + Сложение − Вычитание 5. Побитовые сдвиги >> Сдвиг вправо (для знаковых чисел — т. н. «арифметический сдвиг» ) << Сдвиг влево

Операции 6. Операции сравнения < <= > >= Меньше или равняется Больше или равняется Операции 6. Операции сравнения < <= > >= Меньше или равняется Больше или равняется 7. Операции сравнения-2 == Равняется != Не равняется

Операции 8. & (побитовое «И» ) 9. ^ (побитовое «исключающее ИЛИ» aka XOR) 10. Операции 8. & (побитовое «И» ) 9. ^ (побитовое «исключающее ИЛИ» aka XOR) 10. | (побитовое «ИЛИ» ) 11. && (логическое «И» ) 12. || (логическое «ИЛИ» ) 13. x ? y : z (операция «если-то-иначе» ) Порядок — справа налево.

Операции 14. Присваивания. Порядок — справа налево. = Присвоить += Прибавить −= Вычесть *= Операции 14. Присваивания. Порядок — справа налево. = Присвоить += Прибавить −= Вычесть *= Умножить /= Разделить %= Взять остаток <<=Сдвинуть влево >>=Сдвинуть вправо &= Перемножить побитово |= Сложить побитово

Операции 15. Запятая (минимальный приоритет) , Выполнить последовательно. Результат — последний из операндов. Операции 15. Запятая (минимальный приоритет) , Выполнить последовательно. Результат — последний из операндов.

И ещё одна задача Одна сухопутная миля равняется 1, 609 км. Один американский галлон И ещё одна задача Одна сухопутная миля равняется 1, 609 км. Один американский галлон равняется 3, 785 л. Перевести американский расход топлива (миль на галлон, mpg) в наши родные литры/100 км.

И ещё одна задача /* Преобразование расхода топлива: mpg → л/100 км */ #include И ещё одна задача /* Преобразование расхода топлива: mpg → л/100 км */ #include int main() { double mpg, km_l, l_100 km; printf("Enter mpg >"); scanf("%lf", &mpg); km_l = mpg * 1. 609 / 3. 785; l_100 km = 100. 0 / km_l; printf("Расход топлива равен %lf l/100 km. ", l_100 km); return 0; }

Как сделать задержку? И наконец. В некоторых средах программирования, когда вы запускаете программу, окошко Как сделать задержку? И наконец. В некоторых средах программирования, когда вы запускаете программу, окошко мелькает и исчезает. Чтобы сделать задержку, нужен вот такой код. printf("Press Enter!"); fflush(stdin); getchar(); fflush(stdin);

Как сделать задержку? 1. Напечатать «Press Enter» . 2. Выбросить все несчитанные символы из Как сделать задержку? 1. Напечатать «Press Enter» . 2. Выбросить все несчитанные символы из стандартного потока ввода (stdin). Замечание. В Windows — работает. В Linux — нет. Для чего это нужно? Мы ввели « 10 ENTER» . Scanf считал число, а enter оставил. Вот getchar этот ENTER и считает. 3. Считать ещё один символ. Символы передаются в программу, когда пользователь нажимает ENTER. 4. И снова выбросить всё, что сверх одного символа.

Задания 1. Вывести printf’ом какой-нибудь узор, например * * **** * * * * Задания 1. Вывести printf’ом какой-нибудь узор, например * * **** * * * * * * **** ** Постарайтесь это сделать одним printf’ом. 2. Перевести градусы Фаренгейта в градусы Цельсия. 0°F = − 18°C, 100°F = 38°C.

Задания 3. Ввести с клавиатуры a, b, c, d, e, f. Решить методом Крамера Задания 3. Ввести с клавиатуры a, b, c, d, e, f. Решить методом Крамера систему линейных алгебраических уравнений: ax + by = c dx + ey = f (считаем, что система невырожденная и имеет только одно решение. )

В следующей лекции будет… Подробнее об операциях. Математика. Модуль math. h Преобразование типов. Простейшая В следующей лекции будет… Подробнее об операциях. Математика. Модуль math. h Преобразование типов. Простейшая логика.