Стадии преобразования программы
Для получения исполниого файла исходная программа проходит следующие стадии обработки:
Препроцессорное преобразование. Исходный текст обрабатывается специальной программой-препроцессором. При этом выполняются преобразования, заданные препроцессорными директивами (подключение заголовочных файлов и др.), сами директивы из текста удаляются. В результате получается полный исходный текст программы без препроцессорных директив.
Компиляция. Полный исходный текст программы с помощью программы-компилятора преобразуется в машинный код. В результате образуется объектный модуль.
Компоновка (сборка или редактирование связей). К полученному объектному модулю добавляются стандартные библиотечные модули, происходит настройка связей. В результате образуется исполнимый файл.
Организация ввода-вывода
Для организации ввода-вывода в стиле C++ используются стандартные потоки cin – ввод данных и cout – вывод данных (заголовочный файл iostream.h). Для работы с потоками используются операции извлечения из потока >> и помещения в поток <<.
Пример программы (вычисление площади круга):
#include <iostream.h>
void main()
{
double r,s;
const float pi=3.14;
cout << "\nРадиус круга r=";
cin >> r;
s=pi*r*r;
cout << "\nПлошадь круга:" << s;
}
В языке Си нет встроенных средств ввода/вывода. Для организации ввода-вывода используются библиотечные функции scanf() (ввод) и printf() (вывод).
Формат вызова функций:
scanf(форматная_строка, список_аргументов);
printf(форматная_строка, список_аргументов);
Функция scanf() считывает коды с клавиатуры, преобразует их в соответствии со спецификацией форматной строки и передает программе. Форматная строка и список аргументов для функции scanf() – обязательные параметры.
Форматная строка для функции scanf() имеет вид:
%ширина_поля спецификатор
Для числовых данных используются спецификаторы:
d – для целых десятичных чисел (тип int);
u – для целых десятичных без знака (тип unsigned int);
f – для вещественных чисел (тип float);
e – для вещественных чисел в экспоненциальной форме (тип float).
Перед спецификатором можно указать префикс h, l или L. Например: %lf, %le, %hd.
Для целых типов префикс h эквивалентен short, префикс l – long.
Для вещественных типов префикс l означает, что тип аргумента не float а double. (для префикса L – тип long double).
Примечание – Форматная строка всегда заключается в двойные кавычки.
Функция printf() переводит данные из внутреннего кода в символьное представление в соответствии с форматной строкой и выводит полученные символы на экран. Форматная строка может включать произвольный текст, управляющие символы и спецификации преобразования данных. Список аргументов является необязательным параметром.
Для использования в программе функций printf() и scanf() необходимо вначале программы разместить препроцессорную директиву
#include <stdio.h>.
Пример программы (вычисление площади круга):
#include <stdio.h>
void main()
{
double r,s;
const float pi=3.14;
printf("\nРадиус круга r=");
scanf("%lf",&r);
s=pi*r*r;
printf("\nПлошадь круга: %10.3f",s);
}
Примечание – В функции scanf() используются не имена переменных, а их адреса (знак & означает взятие адреса).