Лекция: Программы линейной структуры

Оглавление

 

Введение… 2

 

1. Краткая справка по языку Си и разработке консольных приложений в среде Visual C++

 

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)…
Цикл с постусловием (do while)…
4.2. Вычисление и вывод данных в виде таблицы…
4.3. Пример выполнения задания с использованием цикла while…
4.4. Пример выполнения задания с использованием цикла for…
4.5. Задания для самостоятельной работы…
4.6. Сохранение результатов вычислений в массиве…
4.7. Пример выполнения задания…
4.8. Задания для самостоятельной работы…
Вопросы по самопроверке…
Список рекомендуемой литературы…

 

1. Краткая справка по языку Си и разработке консольных приложений в среде Visual C++ 2008

Система программирования Visual C++ предоставляет возможность разработки и отладки различных программных продуктов, в том числе приложений, работающих как с использованием графического интерфейса пользователя, так и в консольном режиме. Последние имеют интерфейс пользователя в виде текстового окна, называемого окном программы, в котором последовательно, строка за строкой отображаются данные, вво-димые пользователем с клавиатуры, и данные, выводимые программой. Позицию начала ввода или вывода в окне программы указывает курсор — мигающий символ, имеющий вид подчеркивания в режиме вставки или прямоугольника – в режиме замены. По умол-чанию длина строки равна 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[])

 

§тело функцииблокиз пары фигурных скобок, содержащих лишь одиноператор return 0;

выхода из программы с кодом завершения 0.

 

«Практикум по программированию на языке C в среде VS C++»


 

Для создания файла исполняемой программы шаблона (как и создаваемых на его основе консольных программ), который будет размещён в подпапке Debug папки при-ложения, следует ввести команду Build/Build Solution. Работающая программа шаблона будет представлять только окно консольного приложения (окно программы). Для её за-

пуска в среде Visual C++ необходимо ввести команду Debug/Start Without Debugging (старт без отладки), или щелкнуть кнопку, или нажать клавиши Ctrl+F5. В резуль-тате откроется окно программы (см. рис 1.3) с предложением нажать любую клавишу, будет выполнен единстаенный оператор шаблона return 0;, завершающий работу программы, а нажатие любой клавиши приведёт к закрытию её окна.

 

 

Рис 1.3.

 

При запуске программы шаблона командой Debug/Start Debugging (старт в ре-жиме отладки), или щелчком на кнопке, или нажатием клавиши F5, или при запуске из папки окно программы также откроется, но сразу же закроется, и работа программы будет завершена. Чтобы задержать окно программы до нажатия клавиши, в программу следует добавить перед оператором return 0; оператор getch(); и директиву

 

#include «conio.h» как показано ниже #include «stdafx.h» #include «conio.h»

 

int _tmain(int argc, _TCHAR* argv[])

 

{

 

getch(); return 0;

}

 

Впрочем, закрыть окно и завершить работу программы можно и любым другим способом закрытия окна 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.

 

int x, y=-5; /* Объявление двух переменных типа int. Переменная y будет иметь начальное значение -5*/

 

int const n = 10; /* Объявление именованной константы типа int */

 

Именованные константы в ряде случаев позволяют облегчить понимание алго-ритма программы и избежать ошибок при необходимости изменения значения. Напри-мер, если число 10 используется для объявления размеров нескольких массивов и в опе-раторах обработки этих массивов, то желательно использовать именованную константу со значением 10. Тогда, при необходимости замены числа 10 другим, достаточно будет сделать эту замену только в объявлении именованной константы (см. пример программы в разделе 4.6).

 

Рассмотрим следующий пример программы, вычисляющей время движения тела с ускорением 9,8 м/с2 на пути заданной длины, вводимой с клавиатуры.

 

#include «stdafx.h»

 

#include «conio.h» /*подключение библиотечных подпрограмм консольного ввода-вывода, в частности getch(); */

#include «math.h» /* подключение библиотечных подпрограмм вычисления математических функций

*/

 

//главная функция программы

 

int _tmain(int argc, _TCHAR* argv[])

 

{

 

// ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ

 

 

«Практикум по программированию на языке C в среде VS C++»


 

float const g=9.8; /*Именованная константа, представляющая ускорение. */

 

float T;/*Переменная вещественного типа, которая будет представлять искомое время. */

int S;//Переменная целого типа, представляющая длину пути. // ОПЕРАТОРЫ

//Вывод приглашения к вводу значения переменной S printf(«Enter S: „);

//Ввод значения переменной S scanf(“%d»,&S);

 

//Вычисление времени движения тела на заданном пути

 

T=sqrt(S*2/g);

 

//Вывод результата с пояснениями printf(«T=%f\n», T);

 

//Задержка закрытия окна программы до нажатия клавиши getch();

 

return 0;

 

}

 

 

В блоке главной функции _tmain программы используется объявление имено-ванной константы (константа g), объявления переменных T и S, а также операторы, представляющие алгоритм решения задачи. Протокол ввода-вывода программы пред-ставлен в окне программы на следующем рисунке.

 

Результат выводится с поясняющим кратким текстом, набранным в латинском алфавите.

Цвет фона (чёрный) и символов (белый) в окне программы можно изменить сле-дующим образом: раскрыть системное меню окна щелчком на кнопке, выбрать пункт Свойства, в появившемся окне диалога на вкладке Цвета из представленной палитры вы-брать для фона и символов желаемые цвета, нажать кнопку OK. Например, при выборе белого цвета для фона и чёрного для символов окно программы примет вид

 

«Практикум по программированию на языке C в среде VS C++»


 

 

Используемая в Visual C++ кодировка символов не обеспечивает правильный вы-вод букв кириллицы, что представляет неудобство для русскоязычных пользователей. Наиболее простым способом обеспечения вывода текстов на русском языке является включение в программу объявления функции Ruc перекодирования символов как пока-зано ниже.

 

#include «stdafx.h» #include «conio.h»

 

// Подключение библиотечных подпрограмм

 

// вычисления математических функций.

 

#include «math.h»

 

 

//заголовок функции Ruc, описание см. ниже. char* Ruc(char s[]);

 

int _tmain(int argc, _TCHAR* argv[])

 

{

 

// ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ

 

float const g=9.8; /*Именованная константа, представляющая ускорение. */

 

float T;/*Переменная вещественного типа, которая будет представлять искомое время. */

int S;//Переменная целого типа, представляющая длину пути. // ОПЕРАТОРЫ

 

//Вывод приглашения к вводу значения переменной S .

 

//Знак \ в конце строки первой строки оператора обозначает //перенос текста константы на начало новой строки. printf(Ruc(«Программа вычисляет время, за которое тело \ при ускорении %f\n пройдёт заданный путь.\n»), g); printf(Ruc(«Введите длину пути в метрах: „));

 

//Ввод значения переменной S. scanf(“%d»,&S);

 

«Практикум по программированию на языке C в среде VS C++»


 

//Вычисление времени движения тела на заданном пути. //Математическая функция sqrt извлекает квадратный корень. T=sqrt(S*2/g);

 

//Вывод результата с пояснениями.

 

printf("%s T=%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';

 

return ss;

 

}

 

Протокол ввода-вывода программы будет иметь вид


 

«Практикум по программированию на языке C в среде VS C++»


 

В исходном тексте программы использована, помимо главной функции _tmain, дополнительная функция Ruc. Дополнительные функции можно размещать как перед главной функцией, так и после неё. Но если функция размещена после главной или лю-бой другой, из которой она вызывается, то необходимо давать опережающее объявление её заголовка (как и сделано в приведённом примере, так как функция Ruc размещена по-сле главной).

 

Используемые в программе дополнительные, помимо главной, функции можно также размещать в одном или нескольких отдельных файлах. Чтобы разместить допол-нительные функции при их создании в среде Visual C++ в отдельном файле следует вве-сти команду Project/Add New Item…, в открывшемся окне выделить элемент списка Header File.h, ввести имя, которое хотите дать файлу (например, Перекодировщик), и щелкнуть на кнопке Add. В результате в папке проекта появится новый файл, в списке

 

Solution Explorer (открываемом командой View/Solution Explorer) будет размещен соот-

 

ветствующий ему элемент, а также в окне Visual C++ появится новая вкладка для ввода описаний функций, озаглавленная именем созданного файла (Перекодировщик.h). За-тем перед заголовком главной функции следует записать директиву #include с именем файла (#include «Перекодировщик.h»). Пример представляют следующие рисун-ки.


 

 

«Практикум по программированию на языке C в среде VS C++»



 

«Практикум по программированию на языке C в среде VS C++»


 

Если файл с добавляемыми функциями был создан ранее (уже существует), то в файл главной функции нужно просто добавить директиву #include со ссылкой на него

(например, #include «D:\temp\Перекодировщик.h»).

 

Одним из важных этапов разработки программ является их отладка – локализация и устранение ошибок, препятствующих созданию исполняемого файла (синтаксических ошибок), и ошибок, вносящих несоответствие программы заданию на её разработку (смысловых ошибок).

Синтаксические ошибки выявляет система программирования при выполнении команды Build/Build Solution или Build/Rebuild Solution. Сообщения об ошибках выво-

дятся в окно Output построчно. Они содержат краткие пояснения о причинах ошибок, номера строк исходного текста программы, в которых ошибки обнаружены, а двойным щелчком на строке сообщения курсор устанавливается на соответствующей строке про-граммы.

В Visual C++ многие библиотечные функции языка C имеют усовершенствован-ный аналог, который предлагается использовать в сообщениях об ошибках типа warning. Однако такие ошибки не препятствуют созданию исполняемого файла. Другой тип оши-бок отмечен в сообщениях словом error. В большинстве случаев эти ошибки связаны с нарушением правил языка C (например, не дано опережающее объявление заголовка функции, размещенной после главной, не поставлена знак «точка с запятой» после объ-явления переменной, нет соответствия между открывающими и закрывающими скобка-ми) и вызовом не существующих функций. Такие ошибки препятствуют созданию ис-полняемого файла и их необходимо устранять.

Поиск и устранение смысловых ошибок более сложен. Существующие методики в большинстве случае не могут дать гарантий на отсутствие таких ошибок, однако без их применения разработку программы нельзя считать законченной. К числу таких методик относится тестирование всей программы и её частей. Тестирование всей программы со-стоит в подборе тестовых исходных данных для работы программы, для которых извест-ны, в соответствии с заданием, требуемые результаты работы программы, и сравнение с ними реальных результатов работы программы. Если реальные результаты не совпадают с требуемыми, значит программа не соответствует заданию и необходимо выявить и уст-ранить причину этого несоответствия. С этой целью может использоваться как отладоч-ная печать, так и имеющиеся в Visual C++ средства отладки.

 

«Практикум по программированию на языке C в среде VS C++»


 

Обычно программу можно разделить на имеющие законченный смысл алгоритмы (подзадачи), выполняемые последовательно или являющиеся частями более сложных ал-горитмов (подзадач). В простейшем случае, как в представленной ранее программе вы-числения времени прохождения тела в вакууме заданного пути при заданном ускорении, в программе можно выделить части: ввод исходных данных, их обработка и вывод ре-зультатов.

Части программы можно отлаживать в любом порядке. Однако желательно начать с той части, которая представляет суть задания. В большинстве случаев это часть обра-ботки данных, и именно она наиболее сложна в отладке. Приступить к ней, минуя ввод исходных данных, позволяют следующие средства системы программирования:

 

∗ задание начальных значений переменных,

 

∗ подготовка, как рабочего, так и отладочного вариантов программы и быст-рой замены одного варианта другим,

∗ слежение в среде Visual C++ за значениями переменных и изменение их при выполнении программы в отладочном режиме,

∗ использование различных способов приостановки программы и после-дующего продолжения её выполнения.

Рассмотрим эти приёмы и средства более подробно.

 

 

Отладочный вариант программы, помимо начальных значений исходных данных, может содержать коды задания значений промежуточным данным и отладочный вывод, которые должны отсутствовать в рабочем варианте программы. Реализуется возмож-ность быстрого перехода от рабочего кода программы к отладочному (и обратно) с по-мощью директив условной компиляции.

 

Например, вставив в код программы директиву #define u1 (директива опреде-ления имени, в данном случае имени u1), везде ниже по тексту можем размещать кон-струкции

#ifdef u1

 

... // код

 

... // используемый для

 

... // отладки

 

#endif

 

заставляя компилятор обрабатывать код между директивами #ifdef u1 (если u1 опре-делено) и #endif (конец блока #ifdef), то есть рассматривать его как часть кода про-

 

«Практикум по программированию на языке C в среде VS C++»


 

граммы. Чтобы исключить использование в программе отладочного кода, достаточно удалить директиву #define u1 или превратить строку с ней в комментарий.

 

Подобный результат можно получить для отдельной отладочной вставки с помо-щью конструкции

 

///*

 

... // код

 

... // используемый для

 

... // отладки

 

//*/

 

позволяющей добавить отладочный код в программу. Чтобы превратить всю конструк-цию в комментарий достаточно в первой строке переместить первые два знака // в её ко-нец (первая строка примет вид /*// и станет началом многострочного комментария).

Возможно использование рассмотренных конструкций и для временного удале-ния части кода рабочего варианта программы, если это ускорит процесс отладки других частей. Например, если программа требует ввода значительных объёмов исходных дан-ных, то при её отладке целесообразно временно заменить ручной ввод заданием и редак-тированием начальных значений переменных.

 

Директив #define в программе может быть несколько. Чтобы определяемые ди-рективами #define имена указывали на отладочный вариант программы в сочетании с директивой #ifdef, они должны быть информативными, например, #define debug1, #define debug2 и тому подобными. Тогда временно удаляемые при отладке части кодов рабочей программы должны начинаться с директивы #ifndef (если имя не определено), а отладочные вставки кодов – с директивы #ifdef. Если в программе от-ладочный код должен замещать часть кода рабочей программы, то, например, при нали-чии директивы #define debug1 следует использовать конструкцию

 

#ifdef debug1 //если имя debug1 определено, добавить

 

... // код, используемый для

 

... // отладки

 

#else //иначе, т.е. если имя debug1 не определено, //использовать

 

... // часть кода

 

... // рабочей

 

... // программы

 

#endif

 

«Практикум по программированию на языке C в среде VS C++»


 

Дополнительную информацию по директивам условной компиляции можно найти в справочной системе Visual C++.

Чтобы ускорить поиск и исправление ошибок в программе желательно подгото-вить в окне Visual C++ минимальные наборы инструментов панели отладки (Debug)

 

и панели редактирования текста (Edit)

 

 

Для этого в меню Tools следует выбрать пункт Customize… и в открывшемся окне

 

 

установить флажки на строках Debug и Text Editor. Затем на вкладке Commands,

 

,

 

 

«Практикум по программированию на языке C в среде VS C++»


 

выбрав в левом списке строку Edit, отбуксировать из правого списка на панель инстру-ментов редактирования Edit окна Visual C++ недостающие значки. Аналогично выпол-нить настройку панели инструментов отладки, выбрав в левом списке окна Customize строку Debug. Чтобы удалить ненужные значки с панелей инструментов, их просто сле-дует отбуксировать с панелей в любое место при открытом окне Customize.

Инструменты панели Debug имеют следующее назначение:

 

— запустить программу в обычном режиме, без использования отладочных средств среды Visual C++.

 

— запустить программу в режиме отладки. В этом режиме в программу будут автоматически добавлены коды, обеспечивающие использование отладочных средств (см. далее).

 

— завершить работу программы, запущенной в режиме отладки, и вернуться к редактированию её кода.

 

— добавить в окно наблюдения Watch строку слежения за текущим значением переменной или выражения: выражение следует выделить, а переменную либо выделить, либо поставить перед ней курсор и щелкнуть на этом значке. Можно также получить и всплывающую подсказку по значению, подведя курсор к переменной или выделенному выражению. (В VS C++ 2008 есть окно Autos, где автоматически отображаются локаль-ные переменные текущего блока или оператора)

 

— выполнить шаг трассировки без захода в подпрограммы (трассировка без за-хода в подпрограммы – это выполнение программы строка за строкой при каждом щелч-ке на кнопке, без захода в вызываемые в строке функции).

 

— трассировка с заходом в подпрограммы (если в текущей строке программы есть вызовы функций, то после щелчка на кнопке появится код функции для выполнения его трассировки).

 

— завершение выполнения кода функции и возврат управления в вызвавшую её программу.

 

При отладке обычно используют точки безусловного и условного останова (по-следние рассматривать не будем). Строка программы является точкой безусловного ос-танова, если при работе программы в отладочном режиме выполнение программы будет остановлено непосредственно перед этой строкой. Таких точек в программе может быть несколько. Сделать строку точкой безусловного останова можно выбором в контекстном меню строки пункта Breakpoint/insert Breakpoint. В результате на серой вертикальной по-

 

«Практикум по программированию на языке C в среде VS C++»


 

лосе перед строкой появится красный кружок – признак точки безусловного останова. Такую установку можно выполнить просто щелчком на указанной полосе, а отменить – щелкнув ещё раз.

Использование в отладочном варианте программы

 

∗ начального значения переменной S и отключение её ввода директивами условной компиляции,

∗ точек безусловного останова и

 

∗ окна наблюдения за текущими значениями переменных и выражения sqrt(S*2/g)

 

поясняет следующий рисунок.


 

«Практикум по программированию на языке C в среде VS C++»


 

 

После запуска программы в отладочном режиме (щелчком на кнопке ) её вы-полнение будет приостановлено в первой точке безусловного останова, отмеченной красным кружком (перед выполнением строки T=sqrt(S*2/g);, отмеченной красным кружком), а при повторном щелчке на кнопке — перед строкой

 

printf("%s T=%f", Ruc(«Путь будет пройден за „), T);


 

«Практикум по программированию на языке C в среде VS C++»


 

 

Вопросы по самопроверке

 

1. Когда целесообразно использовать консольные приложения?

 

2. Какой интерфейс пользователя имеют консольные приложения?

 

3. Что включает шаблон консольного приложения?

 

4. В чем назначение операторов программы?

 

5. Какую конструкцию программы называют блоком?

 

6. В чем назначение переменных программы?

 

7. Что такое именованная константа?

 

8. В каких случаях целесообразно объявлять переменные с начальными значениями?

 

9. Для чего предназначены директивы #include?

 

10. Какие виды ошибок бывают в программе?

 

11. Такие ошибки препятствуют созданию исполняемого файла?

 

12. Какими способами можно запустить консольное приложение?

 

13. Что понимают под отладкой программы?

 

14. Что такое тестирование?

 

15. Какие средства есть в Visual C++ для поиска смысловых ошибок в программе?

 

16. Что называют точкой безусловного останова?

 

17. Как приостановить на заданной строке программы её выполнение в отладочном ре-жиме?

18. Какие бывают виды трассировки?

 

19. Какими способами можно наблюдать за значениями переменных в процессе отладки программы?

20. Как создать панель инструментов отладки или изменить набор её инструментов?

 

21. Для чего предназначены комментарии в программе?

 

22. Какие есть виды комментариев?

 

23. Как можно быстро превратить часть строк программы в комментарий?

 

24. Как можно создать отладочный вариант программы, используя директивы условной компиляции, чтобы после отладки можно было быстро восстановить рабочий ва-риант программы?


 

 

«Практикум по программированию на языке C в среде VS C++»


 

 

Программы линейной структуры

 

Программой линейной структуры называется такая программа, каждый операторкоторой выполняется один и только один раз.

 

Она может строиться только из простых операторов, не меняющих естественный порядок вычислений, а именно, из операторов присваивания и вызова функций. Из числа последних в этом разделе нас будут интересовать только вызовы функций ввода и выво-да для стандартных устройств – клавиатуры и монитора.

 

еще рефераты
Еще работы по информатике