Сама по себе программа на языке С++ представляет собой текстовый файл, в котором представлены конструкции и операторы данного языка в заданном программистом порядке. В самом простом случае этот текстовый файл может содержать такую информацию:
Листинг 1.1. Пример простой программы.
/* Пример простой программы*/
#include
int main()
{
printf(“Hello World!”);
return 0;
}
и обычно имеет расширение cpp, например, «ex1.cpp».
Следующий шаг – это компиляция исходного кода. Под компиляцией понимают процесс, при котором содержимое текстового файла преобразуется в исполняемый машинный код, понимаемый процессором компьютера. Однако компилятор создает не готовую к исполнению программу, а только объектный код (файл с расширением *.obj). Этот код является промежуточным этапом при создании готовой программы. Дело в том, что создаваемая программа может содержать функции стандартных библиотек языка С++, реализации которых описаны в объектных файлах библиотек. Например, в приведенной программе используется функция printf() стандартной библиотеки «stdio.h». Это означает, что объектный файл ex1.obj будет содержать лишь инструкции по вызову данной функции, но код самой функции в нем будет отсутствовать.
Для того чтобы итоговая исполняемая программа содержала все необходимые реализации функций, используется компоновщик объектных кодов. Компоновщик – это программа, которая объединяет в единый исполняемый файл объектные коды создаваемой программы, объектные коды реализаций библиотечных функций и стандартный код запуска для заданной операционной системы. В итоге и объектный файл, и исполняемый файл состоят из инструкций машинного кода. Однако объектный файл содержит только результат перевода на машинный язык текста программы, созданной программистом, а исполняемый файл – также и машинный код для используемых стандартных библиотечных подпрограмм и для кода запуска.
Рассмотрим более подробно пример программы листинга 1.1. Первая строка задает комментарии, т.е. замечания, помогающие лучше понять программу. Они предназначены только для чтения и игнорируются компилятором. Во второй строке записана директива #include, которая дает команду препроцессору языка С++ вставить содержимое файла ‘stdio.h’ на место этой строки при компиляции. В третьей строке определена функция с именем main, которая возвращает целое число (тип int) и не принимает никаких аргументов (тип void). Функция main() является обязательной функцией для всех программ на языке С++ и без ее наличия уже на этапе компиляции появляется сообщение об ошибке, указывающее на отсутствие данной функции. Обязательность данной функции обусловливается тем, что она является точкой входа в программу. В данном случае под точкой входа понимается функция, с которой начинается и которой заканчивается работа программы. Например, при запуске exe-файла происходит активизация функции main(), выполнение всех операторов, входящих в нее и завершение программы. Таким образом, логика всей программы заключена в этой функции. В приведенном примере при вызове функции main() происходит вызов функции printf(), которая выводит на экран монитора сообщение “Hello World!”, а затем выполняется оператор return, который возвращает нулевое значение. Это число возвращается самой функцией main() операционной системе и означает успешное завершение программы. Фигурные скобки {} служат для определения начала и конца тела функции, т.е. в них содержатся все возможные операторы, которые описывают работу данной функции. Следует отметить, что после каждого оператора в языке С++ ставится символ ‘;’. Таким образом, приведенный пример показывает общую структуру программ на языке С++.
Программа на языке Си состоит из одной или более подпрограмм, называемых функциями .
Язык Си является блочно-структурированным. Каждый блок заключается в фигурные скобки {} .
Основным блоком в программе консольного приложения на языке Си является главная функция, имеющая имя main() .
Каждое действие в языке Си заканчивается символом «точка с запятой» — ; . В качестве действия может выступать вызов функции или осуществление некоторых операций.
Имя функции
- это коллективное имя группы описаний и операторов,
заключенных в блок (фигурные скобки). За именем функции в круглых скобках указываются параметры функции.
В языке Си для комментариев используются символы
/* — начало комментария;
*/ — конец комментария.
Вся последовательность, заключенная между этими символами, является комментарием.
Это удобно для написания многострочных комментариев :
int
a; /* целая
переменная */
Многострочные комментарии также удобно использовать при отладке для сокрытия от выполнения части кода.
В дополнение к этому, для написания коротких комментариев могут использоваться символы // . При этом комментарием является все, что расположено после символов // и до конца строки:
float b; // вещественная переменная
При выполнении консольного приложения, написанного на языке Си, операционная система компьютера передаёт управление функции с именем main() . Функцию main() нельзя вызывать из других функций программы, она является управляющей.
Следующие за именем функции круглые скобки предназначены для указания параметров (аргументов), которые передаются в функцию при обращении к ней. В данном случае операционная система не передаёт в функцию main() никаких аргументов, поэтому список аргументов в круглых скобках пустой.
Главную функцию можно записать по-разному:
Перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. Последняя запись не будет возвращать значения. Однако void main() — не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения.
При этом запись int
main()
сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме.
Для возврата целочисленного значения перед завершением функции добавляется строка
return 0; // вещественная переменная
В фигурные скобки заключены описания и операторы.
В общем случае программа может содержать несколько функций. Каждая функция имеет список передаваемых в нее параметров, указанный в круглых скобках, и набор операций, заключенных в блок, ограниченный фигурными скобками.
Пример:
Вывод на экран сообщения "Hello, world!"
.
1
2
3
4
5
6
7
#include
int
main() // Главная функция
{
printf("Hello, world!"
); // Вывод сообщения
getchar(); // Задержка окна консоли
return
0;
}
Теперь попробуем написать текст на русском языке.
1
2
3
4
5
6
7
#include
int
main()
{
printf("Здравствуй, мир!"
);
getchar();
return
0;
}
При этом текст программы будет выглядеть следующим образом.
Лекция № 1
Тема: Знакомство с языком C++. Операторы и типы данных
План
5. Операторы ввода/вывода на языке С++
6. Пример программы на С++
1. История развития языка программирования С++
Языка C++, объединяющий в себе свойства языка С и объектно–ориентированного программирования, стал один из главных языков программирования в 90–е годы и твердо продолжает оставаться таким в начале XXI века. Язык C++ получил в наследство от языка С такие качества, как эффективность, компактность, быстрота выполнения и переносимость программ. От объектно–ориентированного программирования язык C++ получил новую методологию программирования, позволяющую справиться с возросшей сложностью современных задач программирования. А такие элементы языка, как улучшенные шаблоны, привносят в язык C++ еще одну новую методологию программирования: обобщенное программирование. Это тройное наследство является для языка C++ одновременно и благословением, и проклятием. Оно делают язык очень мощным, но в то же время и сложным; а это означает, что программистам приходится больше изучать.
В последние несколько десятилетий компьютерная технология развивалась поразительными темпами. Языки программирования также претерпели значительную эволюцию. В 70–е годы такие языки программирования, как С и Pascal, помогли войти в эру структурного программирования, принесшего порядок в ту область, которая сильно нуждалась в этом. Язык С предоставил в распоряжение программиста инструменты, необходимые для структурного программирования, а также обеспечил создание компактных, быстро работающих программ и возможность адресации аппаратных средств, например, возможность управления портами связи и накопителями на магнитных дисках. Эти качества помогли языку С стать господствующим языком программирования в 80–е годы. Вместе с тем в эти годы появилась новая модель программирования:объектно–ориентированное программирование, или ООП, воплощенное в таких языках, как SmallTalk и C++.
Язык С
Сотрудник компании Bell Laboratories Кена Томпсона в 1969 году разработал язик B (би) для создания других программных систем. Однако этот язык был интерпретируемым, что не позволяло создавать на нем независимые исполняемые файлы. Тем не менее этот язык явился предшественником языка С.
В начале 70–х годов Денис Ритчи из компании Bell Laboratories занимался разработкой операционной системы UNIX. Для выполнения этой работы Ритчи нуждался в таком языке программирования, который был бы кратким, а также мог бы обеспечивать эффективное управление аппаратными средствами и создание компактных, быстро работающих программ. Традиционно такие потребности программистов удовлетворял язык ассемблера, который тесно связан с внутренним машинным языком компьютера. Однако язык ассемблера – это язык низкого уровня, т.е. он привязан к определенному типу процессора (или компьютера). Поэтому если программу на языке ассемблера необходимо перенести на компьютер другого типа, то ее приходится переписывать заново на другом языке ассемблера.
Операционная система UNIX предназначалась дли работы на разнообразных типах компьютеров (или платформах). А это предполагало использование языка высокого уровня. Язык высокого уровни ориентирован на решение задач, а не на конкретное аппаратное обеспечение. Специальные программы, которые называются компиляторами, транслируют программу на языке высокого уровня в программу на внутреннем языке конкретного компьютера. Таким образом, используя отдельный компилятор для каждой платформы, одну и ту же программу на языке высокого уровня можно выполнять на разных платформах. Ритчи нуждался в языке, который бы объединял эффективность и возможность доступа к аппаратным средствам, имеющиеся у языка низкого уровня, с более общим характером и переносимостью, присущими языку высокого уровня. Поэтому на основе имеющегося языка программирования В Ритчи разработал язык С. Принято считать, что авторами языка являются Ритчи и Томпсон.
Язык С, как и большинство основных языков программирования нашего времени, является процедурным.
Язык С++
С развитием объектно–ориентированной технологии возможностей стандартного языка С уже было недостаточно. В результате появился язык С++.
Язык C++, так же как и язык С, является детищем компании Bell Laboratories. Автор Бьярни Страуструп разработал этот язык в начале 80–х годов. По его собственным словам, «язык C++ был спроектирован главным образом так, чтобы мне и моим друзьям не приходилось программировать на ассемблере, С или различных современных языках высокого уровня. Его главная цель состояла в следующем: сделать так, чтобы отдельным программистам было легче и приятнее писать хорошие программы» .
Страуструп создал C++ на основе языка С, так как язык С был кратким, хорошо подходил для системного программировании, был широко доступен и тесно связан с операционной системой UNIX. Объектно–ориентированная часть языка C++ возникла под влиянием языка моделирования Simula67. Страуструп добавил элементы ООП в язык С, не изменяя при этом существенно сам язык С.
Название C++ происходит от обозначения оператора инкремента ++ в языке С, который добавляет единицу к значению переменной. Название C++ подразумевает, что этот язык является усовершенствованной (++) версией языка С.
Обобщенное программирование
Обобщенное программирование – это еще одна парадигма программирования, поддерживаемая языком C++. Оно имеет общую с ООП цель – упростить повторное использование кодов программ. Однако, в то время как в ООП основное внимание уделяется данным, в обобщенном программировании упор делается на алгоритмы. И у него другая область применения. ООП – это инструмент дли разработки больших проектов, тогда как обобщенное программирование предоставляет инструменты для выполнения задач общего характера, таких как сортировка данных. Термин обобщенный означает создание кода программы, независимого от типа данных. В языке C++ имеются данные различных типов – целые числа, числа с дробной частью, символы, строки символов, определяемые пользователем сложные структуры, состоящие из данных нескольких типов. Если, например, требуется сортировать данные различных типов, то обычно для каждого типа создается отдельная функция сортировки. Обобщенное программирование расширяет язык таким образом, что позволяет один раз написать функцию для обобщенного (т.е. неопределенного) типа данных и затем использовать ее для разнообразных реальных типов данных. Это обеспечивается с помощью шаблонов языка C++. (начало)
2. Структура программы на С++
Программа C++ строится из отдельных блоков, называемых функциями. Как правило, программа разделяется на ряд крупных задач, а затем для выполнения этих задач разрабатываются отдельные функции.
Большинство программ на С++ имеют следующий вид:
раздел подключения заголовочных файлов
заголовок программы (функции)
тело функции
Заголовок программы
Программа C++ состоит из одного или более модулей, называемых функциями. Выполнение программы начинается с функции, имеющей имя main(), поэтому в программе обязательно должна присутствовать функция с таким именем. Если в программе нет такой функции, то в нет и законченной программы; компилятор в этом случае указывает, что функция main() не была определена.
Описание такой функции выполняют в разделе заголовка программы и записывают в виде:
Важно учитывать тот факт, что компилятор С++ различает регистр символов. Поэтому, имя функции, набранное в другом регистре (например: Main() или MAIN()), будет распознаваться как неправильное.
Раздел подключения заголовочных файлов
При создании исполняемого кода программ C++, так же как и в случае с программами С, используется препроцессор. Это программа, которая обрабатывает исходный файл перед основной компиляцией. Чтобы вызвать этот препроцессор, не надо делать ничего особенного. Он запускается автоматически при компиляции программы.
Каждая программа на С++ вначале имеет директиву вида:
#include
Эта директива приводит к тому, что препроцессор добавляет в программу содержимое файла iostream. Это типичное для препроцессора действие: добавление или изменение текста в исходном коде перед компиляцией.
Директива
#include приводит к тому, что содержимое
файла iostream передается в компилятор
вместе с содержимым исходного файла. В
сущности, содержимое файлаiostream заменяет
в программе строку #include
Такие файлы, как iostream, называются файлами включения (поскольку они включаются в другие файлы) или заголовочными файлами (поскольку они включаются в начале файла). Компиляторы C++ поставляются со многими заголовочными файлами, каждый из которых поддерживает отдельное семейство программных средств. Заголовочные файлы в языке С по традиции имеют расширение h, это самый простой способ идентификации типа файла по его имени. Например, заголовочный файл math.hподдерживает различные математические функции языка С++.
Заголовочные файлы находятся в папке Include среды разработки Turbo C++. Если при запуске программы выдается ошибка, указывающая на отсутствие подключаемого заголовочного файла, то в среде Turbo C++ необходимо выполнить настройку. Для этого выполните команду Options – Directories, в поле Include Directoriesвведите..\INCLUDE, а в поле Library Directories введите..\LIB.
Тело функции
Тело функции содержит инструкции для компьютера, т.е. определяет то, что собственно делает функция.
Тело функции имеет следующий вид:
описание переменных;
операторы;
Как видно тело функции заключается в фигурные скобки. Описание переменных будет рассмотрено в следующем разделе лекции.
Оператор представляет собой инструкцию для компьютера. Чтобы понять исходный код, компилятор должен знать, когда заканчивается один оператор и начинается другой. В некоторых языках программирования используются разделители операторов. В языке Pascal один оператор от следующего отделяется точкой с запятой. В некоторых случаях точку с запятой в языке Pascal можно опускать, например, после оператора перед словом END, когда фактически не происходит разделение двух операторов. Но в языке C++, так же как и в языке С, применяется скорее признак (указатель) конца, чем разделитель. Признак конца – это точка с запятой, которая отмечает конец оператора; она является скорее частью оператора, чем разделителем между операторами. Практический результат заключается в том, что в языке C++ никогда нельзя опускать точку с запятой.
Инструкция RETURN 0 указывает на завершение работы функции и возврат в вызывающую программу. В главной функции main() эту инструкцию можно не указывать.
В тексте программ допускается использовать комментарии. В языке C++ комментарии обозначаются двойной наклонной чертой (//). В программах C+ + можно использовать комментарии из языка С, которые заключены между символами /* и */.
Поскольку комментарий из языка С заканчивается не символом конца строки, а символом */, его можно продолжать на несколько строк. В программах можно использовать любой из этих двух видов комментариев или оба вместе. (начало)
Использование языка программирования С в решении экономических задач
Программы и данные
Достоинства языка С
1) С – современный язык, его структура побуждает программиста использовать в своей работе методы: нисходящего проектирования, структурного программирования, модульную структуру программ.
2) С – эффективный язык. Программы на С отличаются компактностью и быстротой выполнения.
3) С – переносимый или мобильный язык.
4) С – мощный и гибкий язык.
5) Программы написанные на С используються для решения задач различных уровней. С обладает рядом мощных конструкций ассемблера.
6) С – удобный язык, он структурирован и вместе с тем не слишком ограничивает свободу программистам.
7) С – язык компелирующего типа. Так как С стандартизированный, аппаратно-независимый, широко доступный язык, приложение написанное на С часто могут выполняться с минимальными модификациями или даже без них на самых различных компьютерных системах. Компьютер, несмотря на его скорость и мощность вычислений, является простым устройством, которое манипулирует с двоичными числами. Одни двоичные числа интерпретируются компьютером, как команды, другие, как данные. Чтобы заставить компьютер выполнить что-нибудь полезное, нужно составить программу.
Программирование – деятельность по составлению программы.
Программа -это описание алгоритма решения задачи, заданной на языке ЭВМ.
Команда – предписание, определяющее очередной шаг.
Пример команды : С=А+В, где А, В-операнды, +- операция.
Операция -это то, что должна сделать ЭВМ согласно каждой команде.
Операнды -участники операции, то над чем и с чем выполняется операция. Набор элементарных операций из способов их описаний образуют систему команд языка программирования.
Пример №1:
# include
{void main(void) //заголовок головной функции программы
сout << “Здравствуй, С!\ n”;
1 строка : подключение вспомогательных библиотек, ориентированных на ввод и вывод данных разных типов в поток.
2 строка: заголовок головной функции программы. Cout-оператор вывода информации << – помещение в класс данных, \n-переход к новой строке вывода.
Программа -это последовательность инструкций, реализующих алгоритм набор предписаний, однозначно определяющих содержание и последовательность выполнения операций для решения задач.
Использование С.
1. Программы и данные.
2. Схема выполнения программы на ЭВМ:
Пример №1:
# include < stdio.h>
printf ("Я учусь в БГУИР\ n");
1 строка: команда препроцессора include, включающая файл stdio.h, который описывает библиотечную функцию printf.
2 строка: определение функции с именем main, не получающей никаких аргументов. Инструкция main заключается в фигурные скобки. Функция main обращается к библиотечной ф-ции printf для печати, заданной в последовательности литер. Наклонная черта (\ n) - литера новая строка, переход к новой строке.
Для выполнения программы на ПВЭМ, необходимо сделать следующие действия:
1) Составить программу на языке программирования.
2) Транслировать ее в стандарте этого языка.
3) Связать ее с необходимыми программами и функциями.
4) Загрузить в оперативную память.
5) Выполнить и получить результат.
Транслятор – это компьютерная программа по переводу программы, написанной на языке программирования, в форму понятную для компьютера. На выходе компилятора получается файл с расширением obj. Исполняемый файл или загрузочный модуль представляет собой файл, содержащий откомпилированную и готовую к выполнению программу. Borland C++ является средой для разработки программ, которые включают в себя как компилятор, так и некоторые другие инструменты.
Структура программы на языке С.
Любая программа на языке С состоит из одной или более ф-ций и элементов. Различным функциям можно давать любые имена. Ф-ции содержат инструкции (команды) предписывающие действия на определенном шаге выполнения, а переменная хранит значения, используемые в процессе этих действий. Такими действиями могут быть присвоения значения переменных, проверка некоторого условия. Функция с именем main. Выполнение любой программы начинается с ф-ции main.
а) Общая структура программы на С без обращения к подпрограмме:
б) Общая структура программы на С с обращением к подпр-ме:
Аргументы являются одним из механизмов взаимодействия между функциями. Список аргументов в круглых скобках идет следом за именем функции. Фигурные скобки обрамляют начало и конец программы. Инструкции, из которых состоит тело программ из операторов и операндов. В С каждый оператор и каждая строка с обращением к функции заканчивается точкой с запятой. Исключение составляют команды препроцессора и имена функции, стоящие в начале программной единицы. Целью большинства программ является решение задачи путем различных преобразований исходных данных. Для этого необходимо.
Состав языкаВ тексте на любом естественном языке можно выделить четыре
основных элемента: символы, слова, словосочетания и предложения.
Подобные элементы содержит и алгоритмический язык:
Алфавит языка, или его символы - это основные неделимые знаки, с
помощью которых пишутся все тексты на языке.
Лексема- минимальная единица языка, имеющая самостоятельный
смысл.
Выражение задает правило вычисления некоторого значения.
Оператор задает законченное описание некоторого действия.
Для описания сложного действия требуется последовательность
операторов. Операторы могут быть объединены в составной
оператор, или блок (блоком в языке С++ считается
последовательность операторов, заключенная в фигурные скобки { }).
В этом случае они рассматриваются как один оператор.
Каждый элемент языка определяется синтаксисом и семантикой.
Синтаксические определения устанавливают правила построения
элементов языка, а семантика определяет их смысл и правила
использования.
Объединенная единым алгоритмом совокупность описаний и
операторов образует программу на алгоритмическом языке.