Лекция 02
.pdfКафедра автоматизации технологических процессов Тверского государственного технического университета
Разработчик: доцент В. Г. Васильев
ЛЕКЦИЯ № 2
«Структура программ на языке С/С++. Этапы сборки программы»
по курсу «Структуры и алгоритмы обработки данных»
(для специальности «Управление в технических системах»)
СОДЕРЖАНИЕ:
2.1.Структура программы.
2.2.Второй пример программы на языке С/ С++
2.1. Структура программы на языке С++.
Программа на Cи++ представляет собой последовательность ACSIIсимволов, представляющих собой ее исходный текст.
Алфавит языка состоит из следующих символов:
Заглавные и строчные латинские буквы A-Z, a-z и символ подчеркивания. Цифр от 0 до 9. Специальных символов + - * / = > < . ; , : [ ] { } ( ) # $.
Символы пробел, табуляция, перевод строки, возврат каретки называются пробельными.
Идентификаторы. Имена, которые присваиваются константам, типам данных, переменным и функциям называются идентификаторами. В Си следующие правила создания идентификаторов: они должны начинаться с букв (a...z,A...Z) или с подчеркивания (_), остальная часть идентификатора должна состоять из букв, подчеркиваний и/или цифр(0...9).
Ключевые слова. В таблице 1 перечислены 32 ключевых слова, определенные стандартом С89. Они же являются ключевыми словами языка С как подмножества C++. В табл. 1.3 приведены ключевые слова, добавленные стандартом С99. Набор ключевых слов вместе с формальным
синтаксисом С составляет язык программирования С.
Таблица 1
Ключевые слова стандарта C89
|
|
|
|
|
|
|
auto |
|
double |
|
int |
|
struct |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break |
|
else |
|
long |
|
switch |
|
|
|
|
|
|
|
case |
|
enum |
|
register |
|
typedef |
|
|
|
|
|
|
|
char |
|
extern |
|
return |
|
union |
|
|
|
|
|
|
|
const |
|
float |
|
short |
|
unsigned |
|
|
|
|
|
|
|
continue |
|
for |
|
signed |
|
void |
|
|
|
|
|
|
|
default |
|
goto |
|
sizof |
|
volatile |
|
|
|
|
|
|
|
do |
|
if |
|
static |
|
while |
|
|
|
|
|
|
|
. Ключевые слова, добавленные стандартом C99
|
|
|
|
|
_Bool |
|
_Imaginary |
|
restrict |
|
|
|
|
|
_Complex |
|
inline |
|
|
|
|
|
|
|
Кроме стандартных ключевых слов, многие компиляторы для лучшего функционирования в среде программирования разрешают дополнительно использовать некоторые нестандартные ключевые слова. Например, несколько компиляторов, рассчитанных на создание кода, выполняемого в моделях памяти, поддерживаемых процессорами семейства 8086, с целью поддержки взаимодействия программ, написанных на разных языках, а также для обеспечения доступа к прерываниям дополнительно вводят следующие ключевые слова:
asm |
_ds |
huge |
pascal |
cdecl |
_es |
intrrupt |
_ss |
_cs |
far |
near |
|
В языке С различаются верхний и нижний регистры символов: else — ключевое слово, a ELSE — нет. В программе ключевое слово может быть использовано только как ключевое слово, то есть никогда не допускается его использование в качестве переменной или имени функции.
Функции. Любая программа на языке С/С++ представляет собой одну или несколько функций. В любой программе обязательно должна быть одна функция main() (для консольных приложений).
main() и не является ключевым словом. Однако к нему следует относиться как к ключевому. Не следует использовать main как имя переменной, так как это может нарушить работу компилятора.
Правилом хорошего тона в программировании является разбиение задачи на подзадачи, и в главной функции чаще всего должны быть операторы вызова других функций. Общую структуру любой программы на языке Си можно записать следующим образом.
Объявление глобальных переменных
Тип_ результата main (Список_переменных)
{
Операторы
}
Тип_результата f1(Список_переменных)
{
Операторы
}
Тип_результата f2(Список_переменных)
{
Операторы
}
...
Тип_результата fn(Список_переменных)
{
Операторы
}
Здесь Тип_результата - тип возвращаемого функцией значения. В простейшем случае программа на языке Си состоит из одной функции main, в этом случае структура программы будет такой.
int main()
{
Операторы
}
2.2. Второй пример программы на языке С
Перед тем, как перейти к подробному изложению основ языка, рассмотрим еще пример программы на С.
Задача. Известны длины двух катетов прямоугольного треугольника. Найти длину гипотенузы, площадь прямоугольника и величины его углов.
#include <stdio.h> #include <math.h> int main()
{
float a,b,c, alf,bet,s; printf("A="); scanf("%f",&a); printf("B="); scanf("%f",&b); s=a*b/2; c=pow(a*a+b*b,0.5); alf=atan(a/b); bet=3.14159/2-alf;
printf("\n A=%5.2f \t B=%5.2f \t C=%5.2f \n",a,b,c); printf("\nS=%5.2f \t alf=%3.0f \t bet=%3.0f\n", s,alf*180/3.14159,bet*180/3.14159);
}
Рассмотрим подробно текст программы.
Строки 1-2. Указывают компилятору (а точнее препроцессору), что надо использовать функции из библиотек, stdio.h и math.h. В данном случае они необходимы для выполнения операторов ввода scanf и вывода printf (stdio.h) и математических функций возведения в степень pow и вычисление арктангенса atan (math.h).
Строка 5. Описание вещественных переменных a,b,c,alf,bet,s. Строка 6. Оператор вывода строки символов А=.
Строка 7. Оператор ввода вещественного числа a. В этом операторе (а точнее
вфункции scanf) должны быть два параметра:
строка, в которой указывают типы вводимых переменных, перед кодом типа должен быть символ %; символ f используется для указания вещественного типа, d – для целого типа;
список адресов вводимых переменных, для вычисления адреса переменной используется символ &.
Строка 8. Оператор вывода строки символов B=. Строка 9. Оператор ввода вещественного числа b.
Строка 10. Оператор присваивания для вычисления площади треугольника
по формуле. В операторе присваивания могут использоваться знаки операций: +, -, *, /.
Строка 11. Оператор присваивания для вычисления гипотенузы с использованием теоремы Пифагора. Функция pow(x,y) используется в Си для вычисления xy. Строка 12-13. Операторы присваивания для вычисления углов α и β по
формулам |
. |
Строки 14-15. Функции вывода результатов на экран. В функции вывода printf должны быть два параметра:
строка вывода, в которой вместо выводимых переменных указываются их типы, между символом % и кодом формата можно указывать формат вывода, который в случае вывода вещественных чисел имеет вид m.n (m - количество позиций в числе, n – количество позиций в дробной части числа); в строке вывода могут использоваться можно поставить знаки: \n перевод строки, \t – табуляция.
список выводимых переменных.
Строка комментариев в Си начинается символами //. Комментариями также называются символы, стоящие между /* и */.
Мы рассмотрели простейшую программу на языке С, состоящую из операторов ввода данных, операторов присваивания (в которых происходит расчет по формулам) и операторов вывода. Рассмотренные в первой программе операторы ввода-вывода являются операторами классического C, в дальнейшем мы рассмотрим и операторы С++.
Рассмотрим основные этапы обработки программы на языке С и формирования машинного кода.
1.Сначала программа обрабатывается препроцессором, который выполняет директивы препроцессора, в нашем случае это директивы включения заголовочных файлов (файлов с расширением h) - текстовых файлов, в которых содержится описание используемых библиотек. В результате формируется полный текст программы, который поступает на вход компилятора.
2.Компилятор разбирает текст программ на составляющие элементы, проверяет синтаксические ошибки и в случае их отсутствия формирует объектный код (файл с расширением obj).
3.Компоновщик подключает к объектному коду программы объектные модули библиотек и других файлов (если программа состоит из нескольких файлов) и генерирует исполняемый код программы (файл с расширением exe), который уже можно запускать на выполнение.
Итак, для всех программ написанных на языке С/С++ структура общая. В ней можно выделить несколько блоков:
блок заголовочных файлов. Тут подключаются различные заголовочные файлы и библиотеки, функции из которых нам понадобятся в нашей программе.
блок описания пользовательских функций. В данном блоке программист описывает свои функции нужные ему для решения каких то задач. Данный блок может отсутствовать, как, например, в программе рассмотренной выше.
блок описание главной функции. В этом блоке находится сама логика всей программы.