Программирование на языке Си/§2

В этой лекции мы разберём несколько программ на языке Си и подробно разберём их.

## Первая программа

Это программа даётся практически во всех учебниках программирования в самом начале, не будем же исключением:

```
#include <stdio.h> /*1*/
int main() //2
{
printf("Hello, World!\n"); //3
return 0; //4
}
```

Разберём программу построчно:

- -- директива препроцессора, при выполнении которой препроцессор включает в текст содержимое заголовочного файла stdio.h, где содержится сведения о библиотечных средствах ввода-вывода используемых в программе
#include <stdio.h>

- -- int - тип возвращаемого значения функции (int - целый, void - ничего не возвращает и т.д.). Функция main которая запускается на исполнение по командам операционной системы, возвращение функцией значение также передаётся операционной системе. В скобках указывается набор параметров, в отличии от обычных функций главная функция main() может использоваться как с параметрами так и без них.
int main()

- Вслед за заголовком функции идёт её тело. Тело функции - это блок, последовательность определений, описаний и исполняемых операторов, заключённая в фигурные скобки.
- printf("Hello, World!\n"); -- это библиотечная функция вывода на экран текста, в денном случае "Hello, World!". Прототип функции хранится в директиве stdio.h, по этому прежде чем её использовать всегда необходимо объявить директивы процессора (#include <stdio.h>). \n - переход на новую строчку. После каждого определения объектов и исполнения объектов ставится ";".
- return 0; -- завершение исполнения программы и возвращение нулевого значения среде исполнения.

## Вторая программа

В этой программе мы с вами изучим функции вывода сообщений на экран

```
#include <stdio.h>
int main()
{
/*объявим переменные*/
int k,r,s; // мы объявили три целочисленные переменные
/*присвоим им значения*/
k=5; r=4; s=12;
/*выведем их на экран*/
printf(" k=%d /n r=%d /n s=%d /n",k,s,r);
return 0;
}
```

Как мы видим программа несколько отличается от предыдущей, давайте по порядку рассмотрим эти изменения:

- int k,r,s; -- когда мы работаем с идентификаторами которых нет в самой программе нам необходимо их объявлять. Синтаксис объявления довольно прост:
*Тип идентификатор;*. В конкретном случае мы объявили идентификаторы k,r,s целочисленного типа int. - k=5; r=4; s=12; -- после объявления идентификаторов нам необходимо задать им некоторое начальное значение, иначе оно будит присвоено произвольно. Синтаксис присвоения следующий:
*Идентификатор=значение;*. Это необходимо*запомнить*, присвоение*всегда*происходит*справа налево*. - printf(" k=%d /n r=%d /n s=%d /n",k,s,r); -- мы производим вывод на экран значений идентификаторов функцией printf. Синтаксис:
*printf(" текст=%спецификатор",идентификатор);*.

Спецификаторы:

- d - десятичный, целочисленный со знаком(int);
- i - десятичный, целочисленный со знаком;
- u - целочисленный, десятичный без знака(unsigned);
- o - целочисленный, восьмеричный без знака;
- x - целочисленный, шестнадцатеричный без знака;
- f - вещественный с фиксированной точкой (float, double);
- e - вещественный с плавающей точкой (float, double);
- c - отдельный символ (char);
- s - символьная строка (char).

## Третья программа

Третья программа поможет разобраться с параметрами сообщений выводимых на экран

```
#include <stdio.h>
int main()
{
/*объявим переменные и сразу же присвоим им значения*/
int k=51; // целочисленная
float z=12.123, l=14.1234; // вещественная
/*выведем их на экран*/
printf(" k=%d \t z=%e \t l=%f \n\n",k,z,l);
printf(" k=%4d \t z=%2.4e \t z=%5.2e \t l=%10,3e",k,z,z,l);
return 0;
}
```

рассмотрим различия между программами:

- printf(" k=%4d \t z=%2.4e \t z=%5,2e \t l=%10,3e",k,z,z,l); -- синтаксис остался тот же, изменился лишь формат выдаваемого значения. к спецификатору мы добавили ширину поля и точность. Синтаксис:
*тест=% ширина_поля.точность спецификатор*. \t - напомню табуляция по горизонтали.

## Практикум

Напишите на компиляторе языка Си все выше приведённые примеры. Обратите внимание как меняется расположение выводимых сообщений в зависимости от изменения ширины поля и точности выводимых значений. Поэкспериментируйте с типами переменных (int,float,double и т.д.) и значениями присваиваемых идентификаторам. Проанализируете выдаваемый ошибки и результаты.

## Домашнее задание

- Напишите программу на языке Си выдающую число Пи до 4 знака после запятой. Идентификатору присвойте значение в 12 знаков после запятой (3,141592653589).