Язык Си часть 1. Язык Си Часть Интегрированная среда, первая программа
Скачать 1.52 Mb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Ульяновский государственный технический университет» Язык Си Часть 1. Интегрированная среда, первая программа, ветвления. МЕТОДИЧЕСКИЕ УКАЗАНИЯ, ЗАДАНИЯ И ПРИМЕРЫ ВЫПОЛНЕНИЯ ЛАБОРАТОРНЫХ РАБОТ ДЛЯ СТУДЕНТОВ НАПРАВЛЕНИЯ 09.03.02 «Информационные системы и технологии» Составители: А.Е. Докторов, Е.А. Докторова Ульяновск 2015 2 ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ Интегрированная среда разработки, ИСР (англ. IDE, Integrated de- velopment environment) – система программных средств, используемая программистами для разработки программного обеспечения (ПО). Обычно, среда разработки включает в себя: текстовый редактор, компилятор, средства автоматизации сборки, отладчик. При начальном изучении языков программирования Си и С++ бу- дем использовать кроссплатформенную интегрированную среду Co- deBlocks, которая включает в себя все указанные компоненты. На- помним, что кроссплатформенность – это способность программного обеспечения функционировать в нескольких различных операцион- ных системах или на разных аппаратных платформах. Для инсталляции (англ. installation — установка, размещение, мон- таж) интегрированной среды будем использовать файл codeblocks- 8.02mingw-setup.exe (или более поздней версии), который можно взять по адресу http://ivk.ulstu.ru/files или найти в интернете. При самостоя- тельном поиске обратите внимание, чтобы инсталлятор содержал компилятор. Инсталляция осуществляется простым запуском на исполнение файла codeblocks-8.02mingw-setup.exe (желательно от имени админи- стратора, не забывая провести проверку на вирусы). Весь процесс идет практически в автоматическом режиме. При этом надо запом- нить путь размещения файлов интегрированной среды, например: c:\Program Files\CodeBlocks. Знание пути поможет быстро обнаружить и устранить некоторые проблемы. Например, если по указанному пу- 3 ти не будет присутствовать каталог MinGW, то будет отсутствовать компилятор с языка Си. CodeBlocks кроме самой интегрированной среды содержит множе- ство других файлов, например, достаточно подробное руководство по интегрированной среде разработки программ CodeBlocks (на англий- ском языке). В каталоге c:\Program Files\CodeBlocks\MinGW есть подкаталоги: bin – содержит исполняемые файлы, выполняющие разнообразные действия в интегрированной среде (в том числе компиляцию и сборку программ), include – содержит включаемые файлы, lib – библиотечные файлы. Что такое включаемые и библиотечные файлы, как идет сам про- цесс преобразования (см. Рис. 1.) текстового файла на языке Си (файл с расширением c, например, main.c) в исполняемый (executable) файл (файл с расширением exe, например, first.exe), который мы можем с помощью операционной системы загрузить в память компьютера и выполнить, иллюстрируется в книге на странице 65. По схеме видно, что текст программы, написанный программи- стом, после добавления дополнительной информации, обрабатывается препроцессором, компилятором и компоновщиком. Это процесс сборки программы в интегрированной среде автоматизирован и не требует раздельного запуска препроцессора, компилятора и компо- новщика. Каждая программа, подготовленная в интегрированной среде, мо- жет иметь свои персональные настройки для дальнейшей обработки. Персональные настройки сохраняются в файле проекта (файл с рас- ширением cbp – codeblocks project). Заметим, что процесс пошаговой отладки программы, можно выполнить только с использованием про- екта. Процесс работы в интегрированной среде отражен на рисунках со второго по седьмой. 4 Рис. 1. Схема обработки программы Новый проект создается в интегрированной среде очень просто (см. Рис. 2). Достаточно выбрать вариант «Create a new project». На этом же рисунке видно, что открытие уже существующего проекта не сложнее (Open an existing project). В дальнейшем мы будем писать программы, которые используют так называемые устройства стандартного ввода (клавиатура) и стан- дартного вывода (экран дисплея). Такие программы также называют- ся консольными приложениями. Консоль компьютера (англ. console — пульт управления) — сово- купность устройств (в том числе устройств ввода-вывода), обеспечи- вающая взаимодействие человека-оператора с компьютером. Заме- 5 тим, что Microsoft Management Console в Microsoft Windows – это обо- лочка для управления системной конфигурацией Windows. Существу- ет также специальный тип окна, используемый текстовыми програм- мами (командная строка) – такие окна также могут быть названы кон- сольными. Выбираем консольное приложение (Рис. 3) и язык программиро- вания (Рис. 4), а далее, не забываем дать имя проекту и указать его расположение на носителе информации (Рис. 5). Рис. 2. Создание нового проекта 6 Рис. 3. Выбор консольного приложения Рис.4. Выбор языка программирования 7 Рис. 5. Определение имени проекта и места его расположения Обратите внимание на то, какое будет имя проекта и полный путь к файлу проекта. Причем место размещения (Folder to create project in:) запоминается интегрированной средой после предыдущего запуска и предлагается при следующем запуске. При выборе компилятора и конфигураций для создания исполняе- мых файлов (Рис. 6.) достаточно убедиться, что выбран GNU GCC Compiler и будут созданы нужные конфигурации. По завершении выбора конфигурации в нашем распоряжении бу- дет три окна (см. Рис.7.): 1) окно управления проектами, 2) окно ре- дактирования текста программы, 3) окно статуса выполнения (в дан- ном случае компиляции). Исходный текст (Source, выделен стрелкой), надо раскрыть, дваж- ды кликнув левой кнопкой мыши сначала на слове Source, а потом на слове main.c (имя файла с программой на языке Си), которое появится ниже. Только после этого мы увидим в окне текстового редактора шаблон программы на языке Си (см. Рис. 8). 8 Рис. 6. Выбор компилятора и конфигураций Рис. 7. Интегрированная среда разработки 9 Рис. 8. Шаблон программы на языке Си Причем шаблон вполне работоспособен и содержит основные час- ти программы. Теперь рассмотрим программу построчно. Читайте также книгу, начиная со страницы 63. Обратите внимание, что в книге приведен несколько другой вариант использования главной функции, что не меняет сути описания основной функции. Отличия вызваны исполь- зованием в книге другого компилятора с языка Си. Итак, в 1-ой и 2-ой строках представлены директивы препроцессо- ру. То, что это директива – обозначено символом «решетка» (#). В данном случае – это директива «включить» (include). Эти две дирек- тивы добавляют в текст программы заголовочные файлы, содержащие прототипы библиотечных функций стандартного ввода-вывода и функций стандартной библиотеки. Перечень прототипов функций стандартного ввода-вывода (stdio – standard input-output) и стандарт- ной библиотеки (stdlib – standard library) найдите в книге на страницах 565-570. Прототип функции указывает на то, какого типа нужны функции параметры, и какого типа оказывается результат, возвращаемый функцией. Другие препроцессорные средства представлены в третьей главе книги (см. стр. 131). В строке 4 начинается описание реализации (или алгоритма рабо- ты) главной функции: 10 int – тип результата работы функции или тип возвращаемого зна- чения; main – имя главной функции; ( ) – круглые скобки – это обязательный атрибут функции (обычно в скобках записываются параметры, необходимые для работы функ- ции, но, если параметров нет, то скобки все равно обязательны). В строках 5 ({ – открывающая фигурная скобка) и 8 (} – закры- вающая фигурная скобка) определяются начало и завершение блока программы (в данном случае – границы функции main или еѐ тело). В строке 7 – указывается, какой результат вернет (return) функция. Принято, что главная функция, выполняющаяся без ошибок, должна вернуть операционной системе число ноль. И, наконец, в строке 6 вызывается на исполнение библиотечная функция вывода (printf) на стандартное устройство (экран монитора). В функцию printf в качестве параметра (в круглых скобках) пере- дается строка текста. Константная строка в языке Си записывается в двойных кавычках (см. страницы 21-23 книги). В конце строки запи- сан управляющий символ \n, означающий, что после вывода текста на экран курсор переместится в новую строку. На странице 16 книги найдите другие управляющие символы, а начиная со страницы 553 – коды символов. При этом обратите внимание, что коды одних и тех же по прори- совке символов в разных операционных системах разные. Даже для таких «родственных» систем, как MS DOS и Windows есть отличия. В MS DOS используется кодовая страница 866, а в Windows – 1251. От- личия в кодировке, конечно, проявляются только для «расширенной» части алфавита, то есть не латиницы. Латинские буквы, символы цифр и основные знаки препинания имеют одинаковую кодировку. Текст программы, подготовленный в интегрированной среде, имеет кодировку 1251. Текст, выводимый в консольное окно, по умолчанию 11 имеет кодировку 866. Далее будет показано, как изменить кодировку в консольном окне. Теперь перейдем к вопросу работы в интегрированной среде. Сре- да содержит меню и кнопки управления. Рассмотрим, для начала, только часть кнопок управления (см. Рис. 9). Рис. 9. Управляющие клавиши Полный процесс преобразования программы на языке Си (от тек- ста программы до исполняемого модуля) представлен в книге на странице 65 книги. Он содержит работу препроцессора, компилятора и компоновщика. В интегрированной среде достаточно нажать на кнопку 1 (Build – построить проект) и пройдут все три операции. При нажатии кнопки 2 (Run) программа запустится на исполнение. А при нажатии кнопки 3 (Build & Run - построить проект и запустить на ис- полнение) оба предыдущие действия – и сборка (build) программы и ее исполнение (Run). Результат сборки отображается в окне Build log (Рис. 10). Рис. 10. Статус завершения сборки программы В данном случае 0 ошибок (errors), 0 предупреждений (warnings). В противном случае будет указан номер строки и тип ошибки. 12 После запуска программы на исполнение на экране появится всплывающее консольное окно, в котором будет результат работы программы (Рис. 11). Рис. 11. Консольное окно По умолчанию консольное окно будет черного цвета. Для на- стройки свойств окна надо кликнуть правой кнопкой мыши в указан- ном месте и провести настройку свойств шрифта (размер, цвет, а так- же, чтобы в дальнейшем работала русификация, не забудьте выбрать не точечный тип шрифта, а True Type, который обозначен двумя бук- вами T, см. Рис. 12). Рис. 12. Окно настройки свойств консольного окна 13 Так как текущая кодовая страница в консольном окне 866, а в тек- стовом редакторе 1251, на экран вместо текста на русском языке мо- гут отображаться непонятные символы. Чтобы реализовать русифи- кацию достаточно в программе, например, в строке 3 ввести включе- ние файла windows.h, а в строке 5 команду изменения кодовой стра- ницы на 1251 (см. Рис. 13). С помощью функции system можно вы- полнить любую команду, доступную в консольном окне. Сама коман- да, как легко заметить, пишется в кавычках. В строке 5 записана ко- манда chcp (change code page) – изменить кодовую страницу. За ко- мандой следует номер кодовой страницы (1251), а далее перенаправ- ление вывода (обозначен знаком >) сообщения («Текущая кодовая страница 1251») на «пустое» (NUL) устройство. Рис. 13. Использование команд в консольном окне В данном примере в 7-ой строке с помощью функции system вы- зывается пауза в выполнении программы. На этом первое знакомство с интегрированной средой разработки программ можно завершить и перейти к рассмотрению языка Си. 14 ЯЗЫК СИ Тема №1. Функции стандартного ввода–вывода, вычисление математических функций Задание: 1) составить программу для проведения математических вычисле- ний по индивидуальным вариантам заданий, которые представлены далее по тексту; 2) все исходные данные, необходимые для вычислений, вводить с клавиатуры; 3) запущенная на исполнение программа должна выводить инфор- мацию об авторе и назначении программы (задание должно приво- диться полностью); 4) перед запросом ввода данных с клавиатуры обязательно должно быть сообщение о типе и количестве вводимых данных; 5) изучить наиболее распространенные математические функции (даже если они не используются при выполнении индивидуального задания), перечень функций дан ниже по тексту. Краткая теоретическая справка и рекомендации по выполне- нию При выполнении лабораторного задания обязательным является изучение материала по теме в книге Подбельский В. В. Программирование на языке Си: учебное пособие для вузов / Под- бельский В. В., Фомин С. С. – 2-е изд., доп. – Москва: Финансы и ста- тистика, 2005. – 600 с.. Авторы считают, что нет необходимости под- робного переписывания материала из книги. Здесь чаще всего будут присутствовать задание на необходимость изучения соответствующе- го материала и указание страницы в тексте книги. То есть, для выпол- нения лабораторного задания требуется выборочное чтение книги. 15 По теме №1 мы должны рассмотреть в языке Си: 1) представление числовой информации (стр. 17-20); 2) переменные и их типы (стр. 23-27), приведение типов (стр. 55); 3) операция и оператор присваивания (стр. 39, 53-55); 4) арифметические операции и операторы (стр. 36-37); 5) выражения и приведение арифметических типов (стр. 50); 6) библиотечные математические функции (стр. 562-564); 7) структуру простой программы (стр. 66) и функции форматного ввода и вывода (стр. 69-77, 337-353), а также пример выполнения. По первому пункту обратите внимание на диапазоны представле- ния числовой информации. По второму пункту заметим, что числа с плавающей точкой (ве- щественные) включают в себя и целочисленный диапазон. По третьему пункту важным является тип данных, присваиваемых той или иной переменной, а также возможность объединения в одном операторе арифметического действия и присваивания. В четвертом пункте обратите внимание, что оператор деления ис- пользуется как для целочисленного деления, так и для деления чисел с плавающей точкой. Будет ли результатом деления целое число или число с плавающей точкой зависит от исходных данных. В пятом пункте интересны операторы инкремента (++, увеличение целого числа на единицу) и декремента (--, уменьшение целого числа на единицу). Заметьте, что они могут быть префиксными и постфикс- ными. В шестом пункте для каждой функции обратите внимание на тип обрабатываемых данных, например, результатом функции abs(–3.7) будет число 3, а не 3.7 как ожидалось, т.к. функция abs может рабо- тать только с целыми числами. Прототипы математических функций приведены в файле math.h, а подробный их перечень в приложении 3 книги (стр. 562-564). Здесь приведем только краткий перечень мате- 16 матических функций для изучения (в тригонометрических функциях углы измеряются в радианах): abs – абсолютная величина целого числа, acos – вычисление арккосинуса, asin – вычисление арксинуса, atan – вычисление арктангенса, atan2 – вычисление арктангенса (вычисляет угол по значению кате- тов), atof – преобразует строку в число с плавающей точкой, cabs – вычисляет абсолютную величину комплексного числа, ceil – округление до ближайшего целого в большую сторону, cos – вычисляет косинус, cosh – вычисляет гиперболический косинус, exp – вычисляет экспоненту (например, exp(x) вычисляет e x ), fabs – абсолютная величина числа с плавающей точкой, floor – округление до ближайшего целого в меньшую сторону, fmod – остаток целочисленного деления двух чисел (результат – число с плавающей точкой), frexp – вычисляет значение мантиссы m и показателя степени n для преобразования числа с плавающей точкой к виду n m 2 , hypot – вычисляет значение гипотенузы по значениям катетов, ldexp – по значению мантиссы m и показателя степени n вычисляет число с плавающей точкой по формуле n m 2 , log – вычисляет натуральный логарифм числа, log10 – вычисляет десятичный логарифм числа, modf – разбивает число с плавающей точкой на целую и дробную час- ти, poly – вычисляет полином вида n n x a x a x a 1 1 0 0 , pow – вычисляет число в степени, pow10 – возведение числа 10 в степень, 17 sin – вычисление синуса угла, sinh – вычисление гиперболического синуса, sqrt – вычисление квадратного корня, tan – вычисление тангенса угла, tanh - вычисление гиперболического тангенса угла. Пример выполнения задания по теме № 1 /* В программе использованы комментарии стр.10 */ /* Блок директив препроцессору стр. 131*/ // Включение файлов стр. 135 (// - тоже обозначает комментарий) #include #include #include // Замена в тексте (стр. 136) символ g будет заменен на запись 9.81 #define g 9.81 int main () /* Блок главной функции программы */ { // начало блока главной функции float V, H;/* Объявление переменных V и H */ system ("chcp 1251 > NUL"); // смена кодовой страницы printf ("\n Лабораторная работа N1 вариант N12"); printf ("\n\n Выполнила студентка гр.Пд-11 Петрова Н.В."); printf ("\n Вертикально вверх бросают камень \ со скоростью (V)."); printf ("\n Определите максимальную высоту (H) \ подъема камня."); printf ("\n Введите начальную скорость в м/c (от 0 до 100) V="); scanf ("%f", &V); // ввод значения скорости и размещение его ... // по адресу ( & ) переменной V после преобразования к ... // формату с плавающей точкой (см. стр. 345) 18 // Вычисление высоты проведено в два действия H = pow (V,2); // 1) вычисление квадрата скорости H = H / (2*g); // 2) деления квадрата скорости на 2*g // Вывод результата вычисления в с точностью до двух знаков ... /* При выводе результата после десятичной точки, всего выделено пять знакомест, а после десятичной точки два знака (см. стр. 337) */ printf("\n Максимальная высота подъема \ камня H = %5.2f м \n", H); // Остановка работы программы перед закрытием консольного окна system ("pause"); return 0; }// конец блока главной функции Обратите внимание на то, что программа состоит из нескольких блоков, первый из которых включение (include) заголовочных файлов для обращения к библиотекам языка Си. Ни одна библиотечная функ- ция языка Си не может быть использована без указания места распо- ложения ее прототипа. Кроме того, не забудьте, что язык Си различа- ет регистр написания букв. Поэтому компилятор примет написание имени функции Printf, но укажет, что Printf– это неизвестный иденти- фикатор. Найдите описание функций, которые относятся к используемым в программе библиотекам: математической (math), библиотеке стан- дартного ввода-вывода (stdio.h). Более пристального внимания тре- буют функции форматного ввода-вывода (scanf и printf), особенно во- просы задания формата вводимых и выводимых данных, так как вы- бор формата (как и многое другое) определяет программист. Не за- будьте, что функция scanf требует указать адрес переменной с помо- щью знака «амперсанд» (&). 19 Блок объявления главной функции, операторные скобки ( { – нача- ло блока, } – конец блока) и переменные также требуют внимания. Наиболее часто встречающиеся ошибки: лишняя точка с запятой после объявления функции main (); объявление локальной переменной до фигурной скобки; отсутствие декларирования переменных; забыты круглые скобки после идентификатора функции при ее объявлении или вызове на исполнение (напомним, что скобки обязательны, даже если функция не содержит пара- метров); переменные и другие идентификаторы написаны с использо- ванием букв разных регистров (заглавных и строчных); в функции scanf забыт знак адреса переменной; при определении замены в тексте после числа поставлена точка с запятой; забыто включение заголовочного файла (будет предупреж- дение implicit declaration function ...). Формулы для решения задач 1) Площадь треугольника: , 2 1 h a S где: а – основание, h – высота треугольника. 2) Формула Герона для вычисления площади треугольника: , ) ( ) ( ) ( p r c p b p a p p S где: p – полупериметр треугольника, a, b, c – стороны треугольника, r – радиус вписанной окружности. 20 3) Теорема синусов: , 2 sin sin sin R c b a , 2 sin sin sin R c b a , , – углы, противолежащие соответствующим сторонам, R – радиус описанной окружности. 4) Теорема косинусов: cos 2 2 2 2 c b c b a , где: a, b, c – стороны треугольника, – угол между сторонами b и c, 5) Длина биссектрисы треугольника: c b a c b c b L a 2 2 , где: a, b, c – стороны треугольника, 6) Длина медианы треугольника: 2 2 2 2 2 a c b m где: a, b, c – стороны треугольника, 7) Площадь эллипса: b a S , где: a и b – радиусы эллипса. 21 Варианты заданий 1. По значению сторон треугольника определить все его высоты. 2. По координатам вершин квадрата вычислить площадь, вписан- ного в него круга. 3. По сторонам треугольника вычислить биссектрисы всех его уг- лов. 4. По сторонам треугольника вычислить площадь вписанного в не- го круга. 5. По сторонам и основаниям трапеции вычислить еѐ диагонали. 6. По сторонам треугольника вычислить его площадь и углы. 7. По координатам вершин квадрата вычислить площадь описан- ного круга. 8. По сторонам треугольника вычислить его медианы. 9. По радиусу окружности и расстоянию до внешней точки вычис- лить угол, образованный касательными из внешней точки к ок- ружности. 10. По сторонам прямоугольника вычислить площадь описанного вокруг него круга. 11. По координатам трех точек на плоскости вычислить радиус ок- ружности, проходящей через эти точки. 12. По радиусу окружности и хорде вычислить площадь равнобед- ренного треугольника, вписанного в эту окружность (основание треугольника - хорда). 13. По величине высот, проведенных из центра окружности до хорд и углу между хордами определить расстояние от центра окруж- ности до точки пересечения хорд. 14. По сторонам треугольника определить площадь описанного во- круг него круга. 15. По стороне правильного шестиугольника вычислить его пло- щадь. 22 Примерный перечень контрольных вопросов по теме № 1 1. Как создать новый проект? 2. Как загрузить и сохранить проект и текст программы? 3. Как построить (откомпилировать) программу? 4. Как настроить консольное окно? 5. Как запустить программу на исполнение? 6. Как задать формат вывода чисел в функции printf? 7. Что делает математическая функция (выборочно из перечня)? 8. Где находится результат компиляции программы? 9. Что означает директива препроцессору #include? 10. Что означает директива препроцессору #define? 11. Какой результат будет в переменной x, после следующего вычисления: float x = 9 / 4; 12. Поясните схему подготовки исполняемой программы. 13. Какие числа будут выведены на экран после выполнения следующих строк программы? int x = 4; printf (“\n %d \n”, x++); printf (“\n %d \n”, ++x); 14. Что означает следующее сообщение при компиляции про- граммы? warning: implicit declaration of function „pow‟ 15. Что означает следующее сообщение при компиляции про- граммы? error: „V‟ undeclared (first use in this function) 16. Найдите ошибку в следующей строке программы: scanf("%f",V); сообщение компилятора: warning: format „%f‟ expects type „float *‟, but argument 2 has type „double‟ 23 |