Оглавление
Введение....................................................................................................................................... 2
1. Краткая справка по языку Си и разработке консольных приложений в среде VisualC++
2008............................................................................................................................................... | |
Вопросы по самопроверке........................................................................................................ | |
2. Программы линейной структуры........................................................................................ | |
2.1. Средства разработки программ линейной структуры................................................ | |
Целый тип данных............................................................................................................. | |
Вещественные типы данных............................................................................................ | |
Стандартные функции для обработки числовых данных............................................. | |
Оператор присваивания и его сокращенные формы..................................................... | |
Арифметические выражения............................................................................................ | |
Вывод десятичных чисел в окно программы................................................................. | |
Ввод десятичных чисел с клавиатуры............................................................................. | |
2.2 Приемы, используемые для минимизации вычислений.............................................. | |
2.3 Примеры выполнения задания....................................................................................... | |
Пример 2.1 выполнения задания...................................................................................... | |
Пример 2.2 выполнения задания...................................................................................... | |
2.4. Задания А для самостоятельной работы...................................................................... | |
2.5. Задания Б для самостоятельной работы....................................................................... | |
Вопросы по самопроверке........................................................................................................ | |
3. Программы разветвляющейся структуры........................................................................... | |
3.1 Средства разработки программ разветвляющейся структуры................................... | |
Условные операторы......................................................................................................... | |
Сложные логические выражения..................................................................................... | |
Условное выражение (тернарный оператор).................................................................. | |
3.2. Примеры выполнения задания...................................................................................... | |
3.3. Задания для самостоятельной работы.......................................................................... | |
Вопросы по самопроверке........................................................................................................ | |
4. Программы циклической структуры................................................................................... | |
4.1. Средства разработки программ циклической структуры........................................... | |
Цикл с параметром (for).................................................................................................... | |
Цикл с предусловием (while)............................................................................................ | |
Цикл с постусловием (dowhile)....................................................................................... | |
4.2. Вычисление и вывод данных в виде таблицы............................................................. | |
4.3. Пример выполнения задания с использованием цикла while................................... | |
4.4. Пример выполнения задания с использованием цикла for...................................... | |
4.5. Задания для самостоятельной работы.......................................................................... | |
4.6. Сохранение результатов вычислений в массиве......................................................... | |
4.7. Пример выполнения задания......................................................................................... | |
4.8. Задания для самостоятельной работы.......................................................................... | |
Вопросы по самопроверке...................................................................................................... | |
Список рекомендуемой литературы...................................................................................... |
1. Краткая справка по языку Си и разработке консольных приложений в среде VisualC++ 2008
|
|
|
|
Система программирования VisualC++ предоставляет возможность разработки и отладки различных программных продуктов, в том числе приложений, работающих как с использованием графического интерфейса пользователя, так и в консольном режиме. Последние имеют интерфейс пользователя в виде текстового окна, называемого окномпрограммы,в котором последовательно,строка за строкой отображаются данные,вво-димые пользователем с клавиатуры, и данные, выводимые программой. Позицию начала ввода или вывода в окне программы указывает курсор - мигающий символ, имеющий вид подчеркивания в режиме вставки или прямоугольника – в режиме замены. По умол-чанию длина строки равна 80, а количество строк – 50. Изменить эти и другие параметры окна программы позволяет диалог, открывающийся при вводе команды Свойства в сис-темном меню окна программы при ожидании ввода данных.
При вводе пользователь имеет возможность редактировать последние вводимые данные, используя клавиши с печатными символами, а также клавиши BackSpace (уда-ление последнего введённого символа), Delete (удаление символа справа от курсора), Insert (переключение режимов вставки и замены), Стрелка вверх (удаление всех введён-ных символов), Стрелка влево (перемещение курсора в предыдущую позицию), Стрелка вправо (перемещение курсора в следующую позицию). Если в окне диалога, открываю-щегося при вводе команды Свойства системного меню окна программы, установить на вкладке Общие флажок Выделение мышью, то становится возможным выделять части текста буксировкой мыши, копировать выделенное в буфер обмена щелчком её правой клавиши и затем вставлять в позицию курсора щелчком правой клавиши. Завершается ввод нажатием клавиши Enter, при этом курсор перемещается в начало новой строки.
Вывод данных из программы выполняется в виде текста, символ за символом при автоматическом перемещении курсора в очередную позицию строки, а при достижении её конца – в начало новой строки.
Консольный режим обычно используется в тех случаях, когда основными требо-ваниями к программе являются минимизация времени счёта и расхода оперативной па-мяти. На подготовку таких программ требуется меньше времени, поэтому консольный режим удобно использовать для быстрой проверки и отладки отдельных алгоритмов. Именно поэтому, имея в виду, что данный сборник задач ориентирован на развитие на-
«Практикум по программированию на языке C в среде VS C++»
чальных навыков алгоритмизации и отладки небольших программ, предполагается ис-пользование консольного режима.
Рис. 1.1
Для создания программы, работающей в консольном режиме, следует после за-
|
|
пуска Visual C++ ввести команду File/New/Project.... В открывшемся окне New Project
(см. рис. 1.1) выбрать в левом списке строку Win32, в правом списке – Win32 Console Application, ввести в поле Location: (или выбрать в диалоге, нажав кнопку Browse…) папку для размещения проекта, ввести в поле Name: имя проекта и нажать кнопку OK, а затем - кнопку Finish во вновь появившемся окне Win32 Application Wizard. При этом изменится набор окон, как показано на рис. 1.2.
В окне редактирования программы (см. рис. 1.2) будет представлен подготовлен-ный системой исходный текст простейшей программы - шаблон консольной программы
(или просто шаблон программы).
Элементами шаблона программы являются
∗ заголовок программы
//Программа 1.cpp: Defines the entry point for the console application –
комментарий (начинается с пары символов //) указывающий, в каком файле проекта на-ходится описание исходного текста программы и что это приложение консольное.
«Практикум по программированию на языке C в среде VS C++»
Панель инст- | Панель инст- | Панель инст- | ||
рументов | рументов Edit | рументов De- | ||
Standard | bug | |||
Окно редакти- | Окно | |||
рования про- | вывода | |||
Строка меню граммы | сообщений | |||
Рис. 1.2
∗ директива #include"stdafx.h",подключающая к шаблону заголо-вочный файл stdafx.h, необходимый для использования минимального набора стан-дартных (библиотечных) функций, обеспечивающих работу проекта,
∗ главная функция (primary function),включающая
§ заголовок функции
int _tmain(int argc, _TCHAR* argv[])
§ тело функции – блок из пары фигурных скобок,содержащих лишь одиноператор return0;
выхода из программы с кодом завершения 0.
«Практикум по программированию на языке C в среде VS C++»
Для создания файла исполняемой программы шаблона (как и создаваемых на его основе консольных программ), который будет размещён в подпапке Debug папки при-ложения, следует ввести команду Build/BuildSolution. Работающая программа шаблона будет представлять только окно консольного приложения(окно программы). Для её за-
|
|
пуска в среде VisualC++ необходимо ввести команду Debug/StartWithoutDebugging (старт без отладки), или щелкнуть кнопку , или нажать клавиши Ctrl+F5. В резуль-тате откроется окно программы (см. рис 1.3) с предложением нажать любую клавишу, будет выполнен единстаенный оператор шаблона return0;, завершающий работу программы, а нажатие любой клавиши приведёт к закрытию её окна.
Рис 1.3.
При запуске программы шаблона командой Debug/StartDebugging (старт в ре-жиме отладки),или щелчком на кнопке , или нажатием клавиши F5, или при запуске из папки окно программы также откроется, но сразу же закроется, и работа программы будет завершена. Чтобы задержать окно программы до нажатия клавиши, в программу следует добавить перед оператором return0; оператор getch(); и директиву
#include "conio.h"как показано ниже #include "stdafx.h" #include "conio.h"
int _tmain(int argc, _TCHAR* argv[])
{
getch(); return0;
}
Впрочем, закрыть окно и завершить работу программы можно и любым другим способом закрытия окна Windows.
«Практикум по программированию на языке C в среде VS C++»
В дальнейшем при разработке программы в шаблон потребуется добавлять опера-торы, объявления переменных и именованных констант, комментарии, директивы, соз-даваемые пользователем функции, а также, при необходимости, директивы #include, подключающих к проекту иные наборы библиотечных и пользовательских функций.
Комментарии никак не влияют на создание исполняемой программы и простопропускаются компилятором. Назначение же комментариев состоит в том, чтобы облег-чить понимание алгоритма программы при чтении её исходного текста. Оформить текст в виде комментария можно одним из следующих способов:
∗ поместив символы // перед текстом строки, например,
//оператор getch(); заставит программу getch(); //ждать нажатия клавиши
∗ заключив текст в скобки вида /* и */, например, текст, занимающий несколько строк,
/* составить программу вычисления времени движения тела с ускорением 9,8 м/с^2 на пути заданной длины, вводимой с клавиатуры */
или поясняющий текст внутри конструкции языка, если комментарий не искажает их смысл и правила построения
int _tmain(int argc, _TCHAR* argv[/*массив аргументов*/])
или
int _tmain(int argc/*количество аргументов*/, _TCHAR* argv[])
Нельзя использовать этот комментарий, например, после знака /, внутри задаваемых пользователем имён, внутри строковых констант (текстов, начинающихся и заканчивающихся символом ", например, "conio.h") и других таких же комментариев.
Операторы программы служат для описания её алгоритма.Конструкция операто-ра определяет, какие действия должны быть выполнены по обработке данных и\или пе-редаче управления от оператора к оператору. В соответствии с правилами построения различают составные операторы или блоки, структурные операторы и простые опе-раторы.
В этом разделе ограничимся рассмотрением некоторых простых операторов и блоков.
Простые операторы могут выражать некоторое законченное действие и завер-шаться знаком; (точка с запятой), например, getch(); или return 0; или q++; (увеличить
«Практикум по программированию на языке C в среде VS C++»
значение переменной q на 1), а также быть частью выражений, например, s=s+q++ (уве-личить значение переменной s на значение переменной q, а затем увеличить значение переменной q на 1) или частью списков с разделителем «запятая» внутри структурных операторов (см. один из примеров организации цикла for в разделе 4.1).
Блоки (составные операторы) начинаются с открывающей фигурной скобки ({) и заканчиваются парной закрывающей фигурной скобкой (}). Они используются в качест-ве тел функций (например, тело функции _tmain, см. выше), могут быть частями струк-турных операторов или иметь самостоятельное значение. Их особенностью является то, что они могут содержать, помимо вложенных в них других операторов, в том числе и со-ставных, объявления локальных переменных, используемых («видимых») только внутри этих блоков. Операторы, входящие в составной, могут описывать сложный алгоритм, выполнение которого начинается при входе в составной оператор. Завершение алгорит-ма происходит либо при выполнении оператора, меняющего естественный порядок их выполнения (в порядке их следования в тексте программы), например, оператором return выхода из функции, либо при достижении парной закрывающей фигурной скобки.
Обрабатываемые данные хранятся в ячейках оперативной памяти, а переменные и константы представляют их в исходном тексте программы.Отличие переменной отконстанты состоит в том, что переменным можно присваивать новые значения, а значе-ния констант задают только в исходном тексте программы и нельзя изменять их при её выполнении. В простейшем случае для объявления переменной используется конструк-ция <Имя типа><><Имя переменной>;
где
<Имя типа> - один из предописанных типов: int (целый), float (веществен-ный), double (вещественный удвоенной точности), char (символьный),
<> - пробел, <Имя переменной> - последовательность латинских букв, цифр, знаков $ и _
(подчерк), начинающаяся с буквы, знака $ или _.
Вместо одной можно описать несколько переменных, записав их имена через за-
пятую.
При описании переменных им можно задавать начальные значения, которые будут иметь переменные в момент начала выполнения программы. Начальное значение
«Практикум по программированию на языке C в среде VS C++»
переменной должно записываться вслед за знаком = после её имени (знак «равно» имеет в Си смысл присваивания переменной значения).
Помимо обычных констант, значения и типы которых определяются по их форме записи, можно использовать и именованные константы (иногда их называют перемен-ными-константами), которые представляют значения своими именами. Именованные константы объявляются подобно переменным с начальными значениями, но перед их именами необходимо ставить слово const.
intx, y=-5;/*Объявление двух переменных типаint.Переменная y будет иметь начальное значение -5*/
intconstn = 10;/*Объявление именованной константы типаint */
Именованные константы в ряде случаев позволяют облегчить понимание алго-ритма программы и избежать ошибок при необходимости изменения значения. Напри-мер, если число 10 используется для объявления размеров нескольких массивов и в опе-раторах обработки этих массивов, то желательно использовать именованную константу со значением 10. Тогда, при необходимости замены числа 10 другим, достаточно будет сделать эту замену только в объявлении именованной константы (см. пример программы в разделе 4.6).
Рассмотрим следующий пример программы, вычисляющей время движения тела с ускорением 9,8 м/с2 на пути заданной длины, вводимой с клавиатуры.
#include"stdafx.h"
#include"conio.h"/*подключение библиотечных подпрограммконсольного ввода-вывода, в частности getch(); */
#include"math.h"/*подключение библиотечных подпрограммвычисления математических функций
*/
//главная функция программы
int_tmain(intargc, _TCHAR* argv[])
{
// ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ
«Практикум по программированию на языке C в среде VS C++»
floatconstg=9.8;/*Именованная константа,представляющая ускорение. */
floatT;/*Переменная вещественного типа,которая будетпредставлять искомое время. */
intS;//Переменная целого типа,представляющая длину пути.// ОПЕРАТОРЫ
//Вывод приглашения к вводу значения переменной Sprintf("EnterS: ");
//Ввод значения переменной Sscanf("%d",&S);
//Вычисление времени движения тела на заданном пути
T=sqrt(S*2/g);
//Вывод результата с пояснениями printf("T=%f\n", T);
//Задержка закрытия окна программы до нажатия клавиши getch();
return0;
}
В блоке главной функции _tmain программы используется объявление имено-ванной константы (константа g), объявления переменных T и S, а также операторы, представляющие алгоритм решения задачи. Протокол ввода-вывода программы пред-ставлен в окне программы на следующем рисунке.
Результат выводится с поясняющим кратким текстом, набранным в латинском алфавите.
Цвет фона (чёрный) и символов (белый) в окне программы можно изменить сле-дующим образом: раскрыть системное меню окна щелчком на кнопке , выбрать пункт Свойства, в появившемся окне диалога на вкладке Цвета из представленной палитры вы-брать для фона и символов желаемые цвета, нажать кнопку OK. Например, при выборе белого цвета для фона и чёрного для символов окно программы примет вид
«Практикум по программированию на языке C в среде VS C++»
Используемая в VisualC++ кодировка символов не обеспечивает правильный вы-вод букв кириллицы, что представляет неудобство для русскоязычных пользователей. Наиболее простым способом обеспечения вывода текстов на русском языке является включение в программу объявления функции Ruc перекодирования символов как пока-зано ниже.
#include "stdafx.h" #include "conio.h"
// Подключение библиотечных подпрограмм
// вычисления математических функций.
#include "math.h"
//заголовок функции Ruc, описание см. ниже. char* Ruc(chars[]);
int _tmain(int argc, _TCHAR* argv[])
{
// ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ
floatconstg=9.8;/*Именованная константа,представляющая ускорение. */
floatT;/*Переменная вещественного типа,которая будетпредставлять искомое время. */
intS;//Переменная целого типа,представляющая длину пути.// ОПЕРАТОРЫ
//Вывод приглашения к вводу значения переменной S.
//Знак \ в конце строки первой строки оператора обозначает //перенос текста константы на начало новой строки. printf(Ruc("Программа вычисляет время,за которое тело\при ускорении %f\n пройдёт заданный путь.\n"), g);printf(Ruc("Введите длину пути в метрах: "));
//Ввод значения переменной S. scanf("%d",&S);
«Практикум по программированию на языке C в среде VS C++»
//Вычисление времени движения тела на заданном пути. //Математическая функция sqrt извлекает квадратный корень. T=sqrt(S*2/g);
//Вывод результата с пояснениями.
printf("%sT=%f", Ruc("Путь будет пройден за"), T); printf("%s\n", Ruc("секунд."));
//Задержка закрытия окна программы до нажатия клавиши. getch();
return 0;
}
char* Ruc(char s[])
{ //Функция перекодирования русских букв//для вывода в окно программы.
int i;
static char ss[257];
for (i=0;s[i]!='\0'; i++)
{
if (s[i]>= -64 && s[i] <= -17)ss[i]=(-64+s[i]); //А..п
else if (s[i]>= -16 && s[i] <= 0)ss[i]=(char)(-16+s[i]); //р..я
else if (s[i] == -72)ss[i]=(char)(-15); //ё
else if (s[i] == -88)ss[i]=(char)(-16); //Ё
else
ss[i]=s[i];
}
ss[i]='\0';
returnss;
}
Протокол ввода-вывода программы будет иметь вид
«Практикум по программированию на языке C в среде VS C++»
В исходном тексте программы использована, помимо главной функции _tmain, дополнительная функция Ruc. Дополнительные функции можно размещать как перед главной функцией, так и после неё. Но если функция размещена после главной или лю-бой другой, из которой она вызывается, то необходимо давать опережающее объявление её заголовка (как и сделано в приведённом примере, так как функция Ruc размещена по-сле главной).
Используемые в программе дополнительные, помимо главной, функции можно также размещать в одном или нескольких отдельных файлах. Чтобы разместить допол-нительные функции при их создании в среде VisualC++ в отдельном файле следует вве-сти команду Project/AddNewItem…, в открывшемся окне выделить элемент списка HeaderFile.h, ввести имя, которое хотите дать файлу (например, Перекодировщик), и щелкнуть на кнопке Add. В результате в папке проекта появится новый файл, в списке
SolutionExplorer (открываемом командой View/SolutionExplorer) будет размещен соот-
ветствующий ему элемент, а также в окне VisualC++ появится новая вкладка для ввода описаний функций, озаглавленная именем созданного файла (Перекодировщик.h). За-тем перед заголовком главной функции следует записать директиву #include с именем файла (#include"Перекодировщик.h"). Пример представляют следующие рисун-ки.
«Практикум по программированию на языке C в среде VS C++»
«Практикум по программированию на языке C в среде VS C++»
Если файл с добавляемыми функциями был создан ранее (уже существует), то в файл главной функции нужно просто добавить директиву #include со ссылкой на него
(например, #include"D:\temp\Перекодировщик.h").
Одним из важных этапов разработки программ является их отладка – локализация и устранение ошибок, препятствующих созданию исполняемого файла (синтаксических ошибок), и ошибок, вносящих несоответствие программы заданию на её разработку (смысловых ошибок).
Синтаксические ошибки выявляет система программирования при выполнении команды Build/BuildSolution или Build/RebuildSolution. Сообщения об ошибках выво-
дятся в окно Output построчно. Они содержат краткие пояснения о причинах ошибок, номера строк исходного текста программы, в которых ошибки обнаружены, а двойным щелчком на строке сообщения курсор устанавливается на соответствующей строке про-граммы.
В VisualC++ многие библиотечные функции языка C имеют усовершенствован-ный аналог, который предлагается использовать в сообщениях об ошибках типа warning. Однако такие ошибки не препятствуют созданию исполняемого файла. Другой тип оши-бок отмечен в сообщениях словом error. В большинстве случаев эти ошибки связаны с нарушением правил языка C (например, не дано опережающее объявление заголовка функции, размещенной после главной, не поставлена знак «точка с запятой» после объ-явления переменной, нет соответствия между открывающими и закрывающими скобка-ми) и вызовом не существующих функций. Такие ошибки препятствуют созданию ис-полняемого файла и их необходимо устранять.
Поиск и устранение смысловых ошибок более сложен. Существующие методики в большинстве случае не могут дать гарантий на отсутствие таких ошибок, однако без их применения разработку программы нельзя считать законченной. К числу таких методик относится тестирование всей программы и её частей. Тестирование всей программы со-стоит в подборе тестовых исходных данных для работы программы, для которых извест-ны, в соответствии с заданием, требуемые результаты работы программы, и сравнение с ними реальных результатов работы программы. Если реальные результаты не совпадают с требуемыми, значит программа не соответствует заданию и необходимо выявить и уст-ранить причину этого несоответствия. С этой целью может использоваться как отладоч-ная печать, так и имеющиеся в VisualC++ средства отладки.
«Практикум по программированию на языке C в среде VS C++»
Обычно программу можно разделить на имеющие законченный смысл алгоритмы (подзадачи), выполняемые последовательно или являющиеся частями более сложных ал-горитмов (подзадач). В простейшем случае, как в представленной ранее программе вы-числения времени прохождения тела в вакууме заданного пути при заданном ускорении, в программе можно выделить части: ввод исходных данных, их обработка и вывод ре-зультатов.
Части программы можно отлаживать в любом порядке. Однако желательно начать с той части, которая представляет суть задания. В большинстве случаев это часть обра-ботки данных, и именно она наиболее сложна в отладке. Приступить к ней, минуя ввод исходных данных, позволяют следующие средства системы программирования:
∗ задание начальных значений переменных,
∗ подготовка, как рабочего, так и отладочного вариантов программы и быст-рой замены одного варианта другим,
∗ слежение в среде VisualC++ за значениями переменных и изменение их при выполнении программы в отладочном режиме,
∗ использование различных способов приостановки программы и после-дующего продолжения её выполнения.
Рассмотрим эти приёмы и средства более подробно.
Отладочный вариант программы, помимо начальных значений исходных данных, может содержать коды задания значений промежуточным данным и отладочный вывод, которые должны отсутствовать в рабочем варианте программы. Реализуется возмож-ность быстрого перехода от рабочего кода программы к отладочному (и обратно) с по-мощью директив условной компиляции.
Например, вставив в код программы директиву #defineu1 (директива опреде-ления имени, в данном случае имени u1), везде ниже по тексту можем размещать кон-струкции
#ifdefu1
... // код
... // используемый для
... // отладки
#endif
заставляя компилятор обрабатывать код между директивами #ifdefu1 (если u1 опре-делено) и #endif (конец блока #ifdef), то есть рассматривать его как часть кода про-
«Практикум по программированию на языке C в среде VS C++»
граммы. Чтобы исключить использование в программе отладочного кода, достаточно удалить директиву #defineu1 или превратить строку с ней в комментарий.
Подобный результат можно получить для отдельной отладочной вставки с помо-щью конструкции
///*
... // код
... // используемый для
... // отладки
//*/
позволяющей добавить отладочный код в программу. Чтобы превратить всю конструк-цию в комментарий достаточно в первой строке переместить первые два знака // в её ко-нец (первая строка примет вид /*// и станет началом многострочного комментария).
Возможно использование рассмотренных конструкций и для временного удале-ния части кода рабочего варианта программы, если это ускорит процесс отладки других частей. Например, если программа требует ввода значительных объёмов исходных дан-ных, то при её отладке целесообразно временно заменить ручной ввод заданием и редак-тированием начальных значений переменных.
Директив #define в программе может быть несколько. Чтобы определяемые ди-рективами #define имена указывали на отладочный вариант программы в сочетании с директивой #ifdef, они должны быть информативными, например, #definedebug1, #definedebug2 и тому подобными.Тогда временно удаляемые при отладкечасти кодов рабочей программы должны начинаться с директивы #ifndef (если имя не определено), а отладочные вставки кодов – с директивы #ifdef. Если в программе от-ладочный код должен замещать часть кода рабочей программы, то, например, при нали-чии директивы #definedebug1 следует использовать конструкцию
#ifdefdebug1 //если имяdebug1определено,добавить
... // код, используемый для
... // отладки
#else//иначе,т.е.если имяdebug1не определено,//использовать
... // часть кода
... // рабочей
... // программы
#endif
«Практикум по программированию на языке C в среде VS C++»
Дополнительную информацию по директивам условной компиляции можно найти в справочной системе VisualC++.
Чтобы ускорить поиск и исправление ошибок в программе желательно подгото-вить в окне VisualC++ минимальные наборы инструментов панели отладки (Debug)
и панели редактирования текста (Edit)
Для этого в меню Tools следует выбрать пункт Customize… и в открывшемся окне
установить флажки на строках Debug и TextEditor. Затем на вкладке Commands,
,
«Практикум по программированию на языке C в среде VS C++»
выбрав в левом списке строку Edit, отбуксировать из правого списка на панель инстру-ментов редактирования Edit окна VisualC++ недостающие значки. Аналогично выпол-нить настройку панели инструментов отладки, выбрав в левом списке окна Customize строку Debug. Чтобы удалить ненужные значки с панелей инструментов, их просто сле-дует отбуксировать с панелей в любое место при открытом окне Customize.
Инструменты панели Debug имеют следующее назначение:
- запустить программу в обычном режиме, без использования отладочных средств среды VisualC++.
- запустить программу в режиме отладки. В этом режиме в программу будут автоматически добавлены коды, обеспечивающие использование отладочных средств (см. далее).
- завершить работу программы, запущенной в режиме отладки, и вернуться к редактированию её кода.
- добавить в окно наблюдения Watch строку слежения за текущим значением переменной или выражения: выражение следует выделить, а переменную либо выделить, либо поставить перед ней курсор и щелкнуть на этом значке. Можно также получить и всплывающую подсказку по значению, подведя курсор к переменной или выделенному выражению. (В VSC++ 2008 есть окно Autos, где автоматически отображаются локаль-ные переменные текущего блока или оператора)
- выполнить шаг трассировки без захода в подпрограммы (трассировка без за-хода в подпрограммы – это выполнение программы строка за строкой при каждом щелч-ке на кнопке, без захода в вызываемые в строке функции).
- трассировка с заходом в подпрограммы (если в текущей строке программы есть вызовы функций, то после щелчка на кнопке появится код функции для выполнения его трассировки).
- завершение выполнения кода функции и возврат управления в вызвавшую её программу.
При отладке обычно используют точки безусловного и условного останова (по-следние рассматривать не будем). Строка программы является точкой безусловного ос-танова, если при работе программы в отладочном режиме выполнение программы будет остановлено непосредственно перед этой строкой. Таких точек в программе может быть несколько. Сделать строку точкой безусловного останова можно выбором в контекстном меню строки пункта Breakpoint/insertBreakpoint. В результате на серой вертикальной по-
«Практикум по программированию на языке C в среде VS C++»
лосе перед строкой появится красный кружок – признак точки безусловного останова. Такую установку можно выполнить просто щелчком на указанной полосе, а отменить – щелкнув ещё раз.
Использование в отладочном варианте программы
∗ начального значения переменной S и отключение её ввода директивами условной компиляции,
∗ точек безусловного останова и
∗ окна наблюдения за текущими значениями переменных и выражения sqrt(S*2/g)
поясняет следующий рисунок.
«Практикум по программированию на языке C в среде VS C++»
После запуска программы в отладочном режиме (щелчком на кнопке ) её вы-полнение будет приостановлено в первой точке безусловного останова, отмеченной красным кружком (перед выполнением строки T=sqrt(S*2/g);, отмеченной красным кружком), а при повторном щелчке на кнопке - перед строкой
printf("%sT=%f", Ruc("Путь будет пройден за"), T);
«Практикум по программированию на языке C в среде VS C++»
Вопросы по самопроверке
1. Когда целесообразно использовать консольные приложения?
2. Какой интерфейс пользователя имеют консольные приложения?
3. Что включает шаблон консольного приложения?
4. В чем назначение операторов программы?
5. Какую конструкцию программы называют блоком?
6. В чем назначение переменных программы?
7. Что такое именованная константа?
8. В каких случаях целесообразно объявлять переменные с начальными значениями?
9. Для чего предназначены директивы #include?
10. Какие виды ошибок бывают в программе?
11. Такие ошибки препятствуют созданию исполняемого файла?
12. Какими способами можно запустить консольное приложение?
13. Что понимают под отладкой программы?
14. Что такое тестирование?
15. Какие средства есть в VisualC++ для поиска смысловых ошибок в программе?
16. Что называют точкой безусловного останова?
17. Как приостановить на заданной строке программы её выполнение в отладочном ре-жиме?
18. Какие бывают виды трассировки?
19. Какими способами можно наблюдать за значениями переменных в процессе отладки программы?
20. Как создать панель инструментов отладки или изменить набор её инструментов?
21. Для чего предназначены комментарии в программе?
22. Какие есть виды комментариев?
23. Как можно быстро превратить часть строк программы в комментарий?
24. Как можно создать отладочный вариант программы, используя директивы условной компиляции, чтобы после отладки можно было быстро восстановить рабочий ва-риант программы?
«Практикум по программированию на языке C в среде VS C++»