Главная :: Программы для программирования :: Программирование в Си :: Первая программа на Си
Ваши руки выполнили недопустимую операцию и будут ампутированы

Первая программа на Си

В этом уроке напишем не самую простую программу на Си. Главная цель урока - попробовать написание программ с использованием основных типов данных.

Хорошим стилем будет в начале каждой программы и в наиболее сложных местах кода помещать комментарии. Многострочный комментарий помещается между символами /* и */. Строчный комментарий начинается символами // - все содержимое до конца строки игнорируется компилятором.

/*
 Первая программа на Си.
 С комментариями
*/

Далее подключаются библиотеки и заголовочные файлы. Подключим стандартную библиотеку ввода вывода

#include // Стандартная библиотека ввода-вывода

Каждая программа на Си (как и на С++) должна содержать основную функция main(). Если эта функция возвращает значение, то перед ней указывается тип, если же функция ничего не возвращает, то вместо типа указывается void. Логично, если главная функция будет возвращать целое значение, т.к. это значение указывает успешно или аварийно завершилось выполнение программы (значение переменной %errorlevel% в ОС Windows или $status в GNU/Linux). Успешно завершенная программа возвращает 0, аварийно завершенная программа - значение отличное от 0 (разные значение указывают на вид ошибки). Минимальная программа будет содержить следующий код:

int main(){
  // Здесь код программы
  return 0; // успешное завершение
}

Для того, чтобы понять работу статуса завершения (или кода завершения) создадим файл first.c и запишем в него код примера. Далее компилируем, запускаем и проверяем возвращаемый статус завершения (GNU/Linux):

gcc first.c
./a.out
echo $status

После третьей команды в консоль выведется значение 0. Если мы укажем в return другое значение, то и после завершения работы программы результат переменной $status соответственно изменится. В ОС Windows для проверки используйте команду echo %errorlevel% в командной оболочке. Отметим, что по такому принципу работают все стандартные команды. Например, если в команде перехода в каталог, вы укажите несуществующую папку, то изменится статус завершения команды на значение 1 (попробуйте команду cd qqq, где qqq - имя несуществующего каталога).

Следующий код показывает работу с целыми числами и числами с плавающей точкой. Для описания пременной мы указываем тип данных, далее, через запятую, список переменных данного типа. В объявлении переменных мы можем сразу же присвоить значение. В Си нет необходимости описывать переменные начале программы - описание может происходить в любом месте программы перед использованием данной переменной. Все команды в Си разделяются символом точки с запятой. Повторяющиеся пробелы и переносы строк игнорируются. В примере объявляются целочисленные переменные a, b, c и переменная с плавающей точкой d. Для присваивания значения переменной используется символ "=", для арифметических операций: "+" (сложить), "-" (вычесть), "*" (умножить), "/" (разделить). Приоритет у операций умножение и деления выше, чем у сложения и вычитания.

  int a = 1, b = 2, c; // Целочисленные переменные
  c = a + b; // c = 3
  printf("c = %i\n", c); // Форматный вывод
  c = a / b; // Целочисленное деление c = 0
  printf("c = %i\n", c); // Форматный вывод
  float d;
  d = a / b; // Целочисленное деление d = 0
  printf("d = %.4f\n", d); // Форматный вывод
  d = (float) a / b; // Нецелочисленное деление
  printf("d = %.4f\n", d); // Форматный вывод

Чтобы избежать в дальнейшем головной боли запомните, что при делении целых чисел используется целочисленное деление. Поэтому c = a / b и d = a / b дает результат 0. Использование преобразования типов данных дает уже правильный результат d = (float) a / b равный 0,5, т.к. переменная a преобразуется к числу с плавающей точкой.

Для вывода данных мы используем команду форматного вывода printf. В качестве первого параметра указывается строка, содержащая спецификацию формата начинающуюся с символа процента. После идут параметры (переменные), которые последовательно подставляются согласно формату. Для целых чисел мы используем %i, для фиксированного формата (числа с фиксированной точкой) %f или %.xf, где x - число значащих цифр после точки.

Для вещественных чисел с большей точностью, чем float используется тип double.

Для символьного типа используется тип char. Об этом типе мы поговорим подробно в одном из следующих уроков. Пока пример для размышления:

  char e = 'a';
  printf("e = %c %c\n", e, 85); // Форматный вывод

В данном уроке мы изучили основные типы данных и научились форматному выводу значений переменных. В последующих урокам мы будем расширять наши знания о типах данных и видах форматного вывода.

В заключение приведем полный текст нашей программы. Это уже не привет, мир!.

/*
 Первая программа на Си.
 С комментариями
*/

#include  // Стандартная библиотека ввода-вывода

int main(){
  // Здесь код программы
  int a = 1, b = 2, c; // Целочисленные переменные
  c = a + b; // c = 3
  printf("c = %i\n", c); // Форматный вывод
  c = a / b; // Целочисленное деление c = 0
  printf("c = %i\n", c); // Форматный вывод
  float d;
  d = a / b; // Целочисленное деление  d = 0
  printf("d = %.4f\n", d); // Форматный вывод
  d = (float) a / b; // Нецелочисленное деление  d = 0.5
  printf("d = %.4f\n", d); // Форматный вывод
  char e = 'a';
  printf("e = %c %c\n", e, 85); // Форматный вывод
  return 0; // успешное завершение
}
Автор: Ильдар Насибуллаев