Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация и программирование на языке С++. Ч.1. Учебник

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
2. Среды разработки С++ инаписаниепервой программы
21
применяется для идентификации имен и устранения неодно­значности в разных частях текста программы. Замечание. Использование директивы
using namespace
может быть нежелательным в больших проектах, с большим исход­ным кодом [18
].
Вернемся к коду выполнения запущенной программы. Его, естественно, можно узнать после ее завершения, как было показано ранее. Но его можно узнать и другим способом. Для
*.bat
этого создаем командный файл (его расширение
). Он бу­дет запускать программу и выводить этот код. Исполнимый файл созданного ранее проекта находится в каталоге:
ais49\source\repos\ConsoleApplication3\bin\Debug
.
C:\Users\
Созданный командный файл может иметь такое содержи-
мое:
ConsoleApplication6.exe echo Exit Code %errorlevel%
Первая строка запускает исполнимый файл приложения, а вторая – выводит код его завершения. Но созданный bat­файл должен находиться в том же каталоге, что и
plication6.exe
(рис. 2.14).
ConsoleAp-
Рис. 2.14. Вывод кода завершения программы в командном
файле Windows
В тексте программы была такая инструкция
return 1
Более полную информацию о командных (пакетных) фай­лах можно найти, например, в [19, 20].
.
22
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
Приведем еще один вариант программы «Hello, world!». Выводимую в ней строку зададим вне программы, как пара­метр, задаваемый при обращении к программе, то есть как
main()
аргумент функции
В шаблоне Консольное приложение C++ в функции
.
main()
аргументов не задано. Там содержится такое описание:
int main()
Изменим текст программы следующим образом:
#include <iostream>
int main(int argc, char* argv[]) { std::cout << “\n1: “ << *argv << “ “ << argc;
2
std::cout << “\n std::cout << “\n
: “ << argv;
3
: “ << argv[0]; std::cout << “\n4: “ << argv[1] << “\n»; // std::endl; system(«pause»); return 0; }
Теперь у функции
main()
задано два аргумента. Первый (целочисленный) определяет количество полученных пара­метров (аргументов). Вторым является массив строк. Первым его элементом является полный адрес имени программы – ис­полнимого файла. Заметим, что в последнем операторе вы-
endl
вода использовано
, что обеспечивает переход на новую
строку при последующем выводе.
Обратиться к первой строке можно так:
argv[0]
. Следу­ющие элементы этого массива содержат наборы символов, задаваемых при ее вызове. К ним обращаемся так –
argv[2], . .
.
argv[1],
При запуске такой программы получим следующий ре­зультат (рис. 2.15), после которого выведется сообщение об ошибке (рис. 2.16).
Остановить отладку программы после ошибки можно ком­бинацией клавиш <Shift+F5> или командой «Отладка Ос­тановить отладку».
2. Среды разработки С++ инаписаниепервой программы
Рис. 2.15. Запуск программы с заданными аргументами
функции
Рис. 2.16. Сообщение об ошибке: не заданы аргументы
main()
23
Зададим значения аргументов функции
main()
. Для этого в обозревателе решений нужно нажать правую кнопку и вы­брать «Свойства» (если Обозреватель решений не отобража­ется на экране, включите его с помощью меню «Вид»). Затем выбрать «Свойства конфигурации Отладка». На правой панели будет строка «Аргументы команды», куда ввести пе­редаваемый аргумент (рис. 2.17).
Запустив программу, получим результат (рис. 2.18).
1:
На что следует обратить внимание. После
выводится полное имя исполнимой программы с указанием каталога, в котором расположен файл, и количество аргументов
2:
После И после
выводится первый аргумент (
3:
то, что задается в строке вызова программы – пер-
вый (до первого разделителя) набор символов (
Hello
и
World
Если задать слова
с пробелом, то выведется толь-
ко первое из них, а второе разместится в
argv[0]
) – имя файла.
argv[2]
Hello_World.!
.
main()
).
.
24
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
Рис. 2.17. Задаем аргумент командной строки в среде
выполнения Visual Studio
Рис. 2.18. Вывод при задании значения в аргументах
функции
main()
Записать строку определения функции можно и другими
способами, например:
int main(void) int main(int argc, char** argv) void main() int main(int argc, char* argv[], char* envp[])
Первая строка определяет, что аргументов у функции
main()
нет. Вторая аналогична приведенной ранее в примерах
2. Среды разработки С++ инаписаниепервой программы
25
с получением аргументов. Третья строка определяет ситуа­цию, в которой функция не возвращает значения. Но в после запуска программы все равно выводится сообщение о коде 0 как результат завершения процесса. Интересна четвертая строка. Ее третий аргумент – переменные окружения среды Windows. В командной строке вывести их список можно ко-
set
мандой
. Таких переменных около 40, среди них есть, на-
пример, такие:
OS=Windows_NT Path – список каталогов, содержащих PROCESSOR_ARCHITECTURE=AMD64 PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 126 Stepping 5, GenuineIntel SystemDrive=C: SystemRoot=C:\WINDOWS
Еще обратим внимание на сообщение ниже окна исход­ного текста программы (рис. 2.19). Это сообщение означает, что в коде нет синтаксических ошибок.
Рис. 2.19. Сообщение – проблемы не найдены
Приведем измененный текст программы «Hello World!».
using
Заметим, что здесь использована директива
, о которой
было рассказано ранее.
#include <iostream> using namespace std;
int main(int argc, char* argv[]) { cout << "Hello, world" << endl; system("pause"); return 0; }
26
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
 
OnlineGDB
Скомпилировать и отладить программу, написанную на языке программирования С++ (как и на многих других язы­ках), можно не устанавливая на компьютер дополнитель­ные средства, а используя онлайн-компиляторы, например ([21]):
CodeCHEF (codechef.com/ide);
Оболочка C++ (cpp.sh);
OnlineGDB (onlinegdb.com);
С, С++, С++0x, С++11 (tutorialspoint.com);
Code, create and learn together (repl.it);
ideone.com (ideone.com);
codepad (codepad.org);
Compiler Explorer (gcc.godbolt.org);
SoloLearn (code.sololearn.com).
Они, как правило, обладают схожим функционалом, но характеристики несколько отличаются [22].
Рассмотрим использование онлайн-компиляторов на при­мере OnlineGDB.com (https://www.onlinegdb.com/about). Пе­рейдя по ссылке, выбираем IDE, и сразу появляется текст пер­вой программы:
#include <stdio.h>
int main() { printf("Hello World");
return 0; }
Это дань языку программирования С. После этого можно начать отладку программ на одном из 28 языков программи­рования, в том числе на семи Си-подобных. (Так же среди ус­луг, предлагаемых эти сайтом, обучение программированию на С и С++. )
2. Среды разработки С++ инаписаниепервой программы
27
Для начала отладки надо выбрать язык. При выборе в спи­ске Language любого из 4 вариантов (С++, С++14, С++17,
С++20) появится панель управления онлайн компилятора OnlineGDB (рис. 2.20) и текст первой программы – это вари- ант уже знакомой нам «Hello World!».
#include <iostream>
using namespace std;
int main() { cout<<"Hello World";
return 0; }
Рис. 2.20. Панель управления онлайн компилятора
OnlineGDB
При нажатии на кнопку Run в нижней части окна уви­дим результат (рис. 2.21).
Рис. 2.21. Результат работы первой программы в OnlineGDB
Если изменить текст программы, записав строку заголов­ка функции без указания типа возвращаемого значения:
28
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
main()
то результат останется таким же (но не для всех версий С++).
Если записать заголовок функции с ключевым словом
void
, оставив в тексте инструкцию
return
(явная ошибка), то
в нижней части окна появиться такое сообщение (рис. 2.22).
Рис. 2.22. Сообщение об ошибке: конфликт
Если из программы убрать инструкцию
void
и
return
, сообщение
return
об ошибке останется. То есть в этой среде разработки, как и
main()
в Dev C++, функция
обязательно должна возвращать
целочисленное значений кода завершения процесса.
 
Прежде чем обсуждать вопрос типов данных, поддержи­ваемых С++, опишем важное понятие.
 
Переменная является простейшей структурой данных. С понятием переменная в программировании связаны три та­ких свойства: имя, тип и значение (рис. 3.1).
Рис. 3.1. Свойства переменной
Имя (идентификатор), используемое для обозначения переменных (а также других объектов), может содержать ла­тинские буквы (заглавные и строчные буквы в именах раз-
_
личаются), и цифры, а также знак подчеркивания ( этом начинаться должно с буквы (использование некоторых других символов рамках данного учебника не рассматри­вается). Например, в программе будут обозначать разные переменные).
В C++ переменные объявляются с определенным типом данных. Тип данных определяет место для хранения пере­менной, расположение, в котором будет выделена память для переменной во время выполнения программы, способ представления значения переменной в памяти (и, соответ­ственно, способ преобразования из внешнего представления, т.е. записи в программе или во вводимых данных, во вну­треннее), множество допустимых значений, а также набор операций, которые можно выполнять с этими данными. Так, значения переменных целых типов представляются в памя-
a4, alf,с_n, b, B
(последние два имени
), при
30
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
ти как двоичные числа, полученные непосредственно пере­водом из десятичной системы счисления в двоичную. Целые числа в памяти представляются точно, и при выполнении операций с целыми числами никаких ошибок не возникает (кроме некоторых случаев деления).
Вещественные числа в памяти представляются следую­щим образом. Сначала число приводится к нормализован­ному виду, когда целая часть числа равна 0, первая цифра после запятой является значащей, а положение запятой в числе определяется значением показателя степени 10. На­пример, число 0,086 в нормализованной форме имеет вид
–1
0.8610
, число 123,45 –0.12345103. При этом цифры, рас-
положенные в нормализованной записи после точки, назы­ваются мантиссой, а показатель степени 10 – это порядок. В памяти отдельно представляется мантисса и отдельно по­рядок. При этом количество бит, предназначенных для ман­тиссы, определяет точность представления, а количество бит, предназначенных для порядка, определяет диапазон представляемых чисел. Если количество цифр в двоичном представлении мантиссы превышает количество отведенных под нее разрядов, то последние двоичные цифры теряются и число оказывается представленным в памяти приближен­но. Кроме того, при выполнении арифметических опера­ций ошибки могут накапливаться. Таким образом, в общем случае вещественные числа в памяти представляются при­ближенно, и их сравнение на точное равенство невозможно. Обычно вещественные переменные используются для обо­значения величин, полученных в результате измерений, ко­торые всегда имеют некоторую погрешность, либо получен­ных в результате вычислений.
Следует отметить, что с расширением возможностей язы­ков программирования, переменная уже не является просто областью памяти и хранимым в ней значением. В C++, набрав
int.
имя типа переменной и точку, например
, получаем до­ступ к множеству свойств этого объекта (и не только). Исполь­зуя терминологию объектно-ориентированного программиро-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]