Устройство консольной программы на языке С
Давайте рассмотрим устройство программы подробнее.
Первая строка - это
#include<stdio.h>
#include - это директива препроцессора, она подключает заголовочный файл (файл с расширением .h) stdio.h, который содержит функции ввода и вывода на экран. Имя подключаемого модуля указывается в <>(когда заголовочный файл находится в каталоге \INCLUDE\ конкретной среды разработки), либо в " " (когда заголовочный файл находится в том же каталоге, где и включающий его модуль разрабатываемой программы с расширением .cpp.
Дадим некоторые пояснения. В языке Си любая программа, состоит из нескольких программных единиц и каждая из них - функция. Функции в Си подобны функциям или подпрограммам в Фортране или процедурам в Паскале, Имена функций выбираются произвольно (только латинскими буквами), но одно из них main, именно с нее начинается выполнение программы. Такая главная функция обычно обращается к другим функциям, которые находятся в одном файле с головной программой или извлекают из библиотеки предварительно подготовленных функций.Функцияmainне имеет аргументов, поэтому список ее выглядит так: ( ) . Скобки { } обрамляют операторы, которые реализуют собственно алгоритм. Эти скобки аналогичны BEGIN - END в Паскале.
Строка int a,b,c;объявляет a,b,cпеременными целого типа. Все используемые в программе переменные должны быть объявлены. Далее идут операторы присваивания к a значение 5, а к b - 7, с- значение их суммы. Значения переменных типа int лежат в диапазоне [-32768; 32767]. Функция printf выводит на экран: СУММА = 12.
Рассмотрим теперь функциюscanfпредназначенную для форматного ввода данных. Функция scanf в качестве фактических параметров использует адреса переменных, а не их значения. Для этого перед соответствующим параметром ставят знак & - символ взятия адреса. Например, &XL означает "адрес переменнойXL", а не значение, которое переменная имеет в данный момент.
Строка форматов функции scanf указывает, какие данные ожидаются на входе. Если функция встречает в форматной строке знак % , за которым следует символ преобразования, то она будет пропускать на входе символы до тех пор, пока не встретит какой-нибудь не пустой символ.
Предыдущяя программа страдает одним недостатком: программа вычисления суммы годится только для одного конкретного случая, когда a=5, b=7. Улучшим ее, заменив соответствующие операторы присваивания вызовом функции scanf
/* Ввод двух чисел, вычисление суммы и печать результата*/
#include <stdio.h>
int main( )
{
int a,b,c;
scanf(" %d %d",&a,&b);
c=a+b;
printf("Cумма = %d \n",c);
}
Форматная строка предписывает функции scanf ввести десятичное число, которое надо поместить в переменную a, затем через пробел ввести второе десятичное число, которое надо присвоить переменной b.Обратите внимание, что программа начинается со строки комментарием : /* .. */ ,транслятор пропускает любые символы между /* и */ их можно использовать для пояснений.
Главная функция
При выполнении консольного приложения, написанного на языке Си, операционная система компьютера передаёт управление функции с именем main(). Функцию main() нельзя вызывать из других функций программы, она является управляющей.
Следующие за именем функции круглые скобки предназначены для указания параметров (аргументов), которые передаются в функцию при обращении к ней. В данном случае операционная система не передаёт в функцию main() никаких аргументов, поэтому список аргументов в круглых скобках пустой.
Главную функцию можно записать по-разному:
· int main()
· void main().
Перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. Последняя запись не будет возвращать значения. Однако void main() - не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения. При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме. Для возврата целочисленного значения перед завершением функции дописывается строка
return 0;
Типы данных в языке Си
Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и способ реализации хранения значений и выполнения операций.
Процесс проверки и накладывания ограничений на типы используемых данных называется контролем типов или типизацией программных данных. Различают следующие виды типизации:
· Статическая типизация — контроль типов осуществляется при компиляции.
· Динамическая типизация — контроль типов осуществляется во время выполнения.
Язык Си поддерживает статическую типизацию, и типы всех используемых в программе данных должны быть указаны перед ее компиляцией.
Различают простые, составные и прочие типы данных.
Простые данные
Простые данные можно разделить на
· целочисленные,
· вещественные,
· символьные
· логические.