Файл: Лабораторная работа 1 Изучение среды разработки программ 3 Лабораторная работа 2 Исследование базовых типов данных языка Си 18.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 261
Скачиваний: 3
СОДЕРЖАНИЕ
Лабораторная работа № 1Изучение среды разработки программ
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Лабораторная работа № 2Исследование базовых типов данных языка Си
Лабораторная работа № 4Применение управляющих инструкций языка для организации ветвлений в программе
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
Лабораторная работа № 5Исследование циклов
Лабораторная работа № 6Применение массивов и указателей для решения прикладных задач
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Лабораторная работа № 7Исследование массивов и указателей
Лабораторная работа № 8Применение функций работы со строками для решения прикладных задач
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Практическое занятие № 6Использование функций для работы с массивами
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Практическое занятие № 7Программирование рекурсивных алгоритмов
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Практическое занятие № 8Применение производных типов данных для решения прикладных задач
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Лабораторная работа № 5Исследование методов доступа к файлам данных
Лабораторная работа № 6Исследование связанных списков данных
Алгоритм достаточно прост:
-
объявление трех переменных; -
инициализация первых двух начальными значениями; -
вычисление частного; -
вывод результата на экран.
Примерный текст программы приведен на рисунке 1.10. Если откомпилировать этот текст (компиляция и запуск программы на выполнение осуществляются нажатием комбинации клавиш Ctrl+F7), то в окне сообщений Output появится множество строк с сообщениями об ошибках (рисунок 1.11). Появление ошибок при наборе текста программы – процесс неизбежный, хотя количество допускаемых ошибок уменьшается с опытом.
Рисунок 1.10 - Окно редактора кода с текстом программы
Обычно основную массу ошибок составляют следующие ошибки:
-
оператор не закончен «точкой с запятой»; -
переменная использована, но не объявлена; -
вызвана неизвестная функция; -
ошибка несоответствия типов.
В приведенном листинге умышленно допущен ряд ошибок.
syntax error : missing ';' before identifier 'a' - пропущена «точка с запятой» перед идентификатором а.
'c' : undeclared identifier – необъявленный идентификатор ‘c’. Действительно, переменная c использована для сохранения результата деления, но она не объявлена.
syntax error : missing ';' before identifier 'printf' - пропущена «точка с запятой» перед идентификатором printf.
Рисунок 1.11 - Окно результатов компиляции
В более ранних версиях была бы указана ошибка 'printf' : undeclared identifier – необъявленный идентификатор ‘printf’. Действительно, эту функцию, не являющуюся ключевым словом (то есть не входящую в состав базовых операторов языка Си), ранние версии компилятора автоматически не распознают. Поэтому необходимо директивой препроцессора #include <stdio.h> подключить соответствующий файл заголовка.
Если же все ошибки исправлены, то приложение запускается на выполнение. Программа работает, но мы не успеваем увидеть окно результатов. Для исправления этого недоразумения добавим функцию ожидания нажатия клавиши
_getch() (рис. 1.12).
Рисунок 1.12 - Окно редактора кода с текстом программы
Если откомпилировать этот текст, то в окне сообщений Output появится строка с сообщением об ошибке (рисунок 1.13).
'_getch' : undeclared identifier – необъявленный идентификатор '_getch'. Действительно, мы использовали эту функцию, но забыли, что она не является ключевым словом (то есть не входит в состав базовых операторов языка Си) и компилятором автоматически не распознается. Поэтому необходимо директивой препроцессора #include ''conio.h'' подключить соответствующий файл заголовка (рис.1.14).
Рисунок 1.13 - Окно результатов компиляции
О шибки исправлены, запускаем приложение на выполнение. При этом, из рисунка 1.14 видно, что результат работы программы выводится в отдельное окно, которое отображает работу программы в режиме эмуляции MS-DOS.
Рисунок 1.14 - Отлаженное и запущенное приложение с окном результатов
После нажатия любой клавиши программа заканчивает свою работу, и окно MS-DOS закрывается.
После получения отлаженного работающего кода приложения, в соответствии с этапами решения задачи на ЭВМ, наступает этап тестирования приложения. Среда разработки Microsoft Visual Studio предоставляет широкие возможности для тестирования полученного кода. Рассмотрим их.
Рисунок 1.15 - Просмотр текущего значения переменной
Режим тестирования программного кода (или режим пошагового исполнения программы) запускается нажатием клавиши F11 (или путем выбора соответствующих пунктов из командного меню: Build -> Start Debug -> Step Into). При этом возле текущего исполняемого оператора появляется желтая стрелка-указатель (рисунок 1.15).
Самым простым способом проверки текущих значений переменных является выделение переменной, значение которой необходимо просмотреть, и наведение указателя курсора «мыши» на эту выделенную переменную (рисунок 1.15).
П ри этом необходимо иметь ввиду, что посмотреть текущее значение переменной можно только после того, как уже исполнились операторы объявления и инициализации этой переменной.
Следующая предоставляемая возможность просмотра текущих значение переменных реализуется автоматически с использованием окна Watch. Если этого окна нет, или Вы его закрыли, его можно открыть заново следующим образом: Debug -> Windows -> Watch -> Watch 1 (рисунок 1.16).
Для того, чтобы добавить переменную в окно Watch, необходимо выделить ее в коде модуля, и в открывшемся при нажатии правой кнопки мыши контекстном меню выбрать Add Watch
Рисунок 1.16 – Порядок открытия окна Variables
В окне Watch отображаются все добавленные вами переменные того модуля, который выполняется в данный момент (рисунок 1.17).
Рисунок 1.17 – Окно Variables
Таким образом, среда программирования Visual C++ позволяет выполнять программу пооператорно с возможностью просмотра значений переменных программы в реальном масштабе времени. Кроме рассмотренных возможностей, разработчики Microsoft Visual Studio предусмотрели еще ряд других, рассмотрение которых выходит за рамки данного занятия.
На начальных этапах развития вычислительной техники, когда ЭВМ было мало и они были громоздкими, а машинное время стоило очень дорого, основным режимом работы ЭВМ являлся пакетный режим выполнения программ. При таком подходе заранее готовилась программа со всеми исходными данными, затем она ставилась в очередь на выполнение. При достижении своей очереди программа быстро выполнялась, а результаты ее работы либо сохранялись в отдельном файле, либо выводились на материальные носители. Основным недостатком пакетного режима являлось отсутствие диалога между пользователем и программой. Современная же вычислительная техника компактна и доступна многим. Естественно предположить, что теперь целесообразно реализовать возможность диалога между пользователем и программой. Такой режим работы называется диалоговым. Основным продуктом ведения диалога между программой и пользователем является информация (данные). Следовательно, любой современный язык программирования должен обладать способностью вводить и выводить информацию в процессе работы программы.
В языке Си нет встроенных средств ввода и вывода – он осуществляется либо функциями (в стиле Си), либо классами (в стиле С++). Рассмотрим каждый из этих способов.
Функции языка Си. Рассмотрим прототипы функций ввода и вывода информации в стиле Си:
-
int scanf (const char* format, …) // ввод -
int printf (const char* format, …) // вывод
Эти две функции выполняют форматированный ввод и вывод произвольного количества величин в соответствии со строкой формата format. Строка формата содержит символы, которые при выводе копируются в поток (на экран) или запрашиваются из потока (с клавиатуры) при вводе, и спецификации преобразования, начинающейся со знака %, которые при вводе и выводе заменяются конкретными величинами. Список спецификаций приведен в литературе [1] страницы 387-389. Вместо многоточия задается список переменных, значения которых выводятся в поток (на экран), или вводится из потока (с клавиатуры). Например, операторы:
printf(“Enter time(hh mm ss):”); | выведет на экран фразу Enter time (hh mm ss): |
scanf(“\n%i %i %i”,&Hr,&Mn,&Sc); | после нажатия клавиши Enter на клавиатуре запишет три введенных через пробел числа в переменные Hr, Mn, Sc соответственно; |
printf(”Current time: %i:%i:%i”,Hr,Mn,Sc); | выведет на экран фразу Current time: 11:23:36, где 11, 23 и 36 – значения переменных Hr, Mn,Sc соответственно. |
Классы языка С++. Для ввода и вывода используются стандартные объекты-потоки cin и cout для ввода с клавиатуры и вывода на экран соответственно и операции помещения в поток “<<” и чтения из потока “>>”. Например, операторы:
cout<<”Enter time (hh mm ss):”; | выведет на экран фразу Enter time (hh mm ss): |
cin>>Hr>>Mn>>Sc; | после нажатия клавиши Enter на клавиатуре запишет три введенных через пробел числа в переменные Hr, Mn, Sc соответственно; |
cout<<”Current time:” < | выведет на экран фразу Current time: 11:23:36, где 11, 23 и 36 – значения переменных Hr, Mn,Sc соответственно. |
Потоки более подробно рассмотрены в литературе [1] на с.265
ПРОГРАММА РАБОТЫ
-
Отработать весь материал по ходу его изложения в соответствии с теоретическим материалом. -
Создать заготовку проекта для консольного приложения с именем
MyFirstProg.cpp. -
Реализовать листинг приведенной в рисунке 1.10 программы (именно этой программы с ошибками). -
Запустить его на компиляцию и увидеть разобранные в теоретических сведениях ошибки. -
Исправить ошибки (в соответствии с рисунком 1.12) и откомпилировать приложение. -
Просмотреть папку с проектом и увидеть приведенные в рисунке 1.6 файлы проекта. -
Проинспектировать переменные рассмотренными двумя способами в соответствии с рисунками 1.13, 1.15. -
В соответствии с номером рабочего места реализовать следующую задачу с последующим ее тестированием:-
; -
; -
; -
; -
; -
; -
; -
; -
; -
; -
-
-
-
-
-
-
Начальные значения всем переменным задаются пользователем путем ввода с клавиатуры, результат работы программы выводится на экран.
Занятие 2