Процедурное программирование на языке С. Часть 1. Основные понятия языка С: Методические указания к лабораторным работам по курсам «Алгоритмические языки и программирование» и «Процедурное программирование», страница 2

В примере 1.1 приведен фрагмент программы,  в котором после объявления переменной G с клавиатуры вводится ее значение.

Пример 1.1.

          float G ;   printf(“Vvod G =”); scanf(“%f”, &G);

В соответствии с операторомfloatG ;   в 16-разрядной среде выделяется 4 байта для хранения значения переменнойG, пусть адрес первого байта – 32000, т.е. адрес переменнойG ( &G )  = 32000  :

       G

     32000 32001 32002 32004

После вызова функции scanf(“%f”, &G);  – по адресу 32000 записывается значение, вводимое с клавиатуры.

Замечание. Для наглядности здесь и далее адреса представлены в десятичной системе счисления, на самом деле они исчисляются в 16-й системе.

1.2.CТРУКТУРА ПРОГРАММЫ НА ЯЗЫКЕ  С

Процесс решения любой задачи на компьютере начинается с разработки алгоритма. При программировании (кодировании алгоритма на каком-либо языке, в частности, на языке С) решения простых задач возможно использование лишь одной главной функции, которая всегда имеет имя main.  При этом функция main() составляется с помощью ряда операторов, в состав которых  для ввода/вывода данных входят операторы вызова  функций scanf() и printf().

Структура простейшей программы на языке С имеет вид:

  Директивы препроцессора.

  Заголовок главной функции                                                           определение

   { Объявление локальной переменной lok_1.

       …                                                                            тело           главной

    Объявление локальной переменной lok_g.         главной

    Исполнимые операторы главной функции .      функции      функции

  }

В примере 1.2 в главной функции выделяется память под N элементов целочисленного массива, константный адрес которого  –  значение  A. С клавиатуры вводится значение 0-го элемента массива, и рассчитываются значения всех остальных элементов массива. Значения всех элементов массива выводятся на экран, при этом в каждой строке размещаются данные о четырех элементах.

Пример 1.2.

#include <stdio.h>

#define N 15

void main (void)

  {  int i=1, A[N] ;

             printf(“Enter A[0] =”); scanf(“%d”,&A[0]);

     do   {A[i]= A[i-1]+5;i++;

            }    while (i<N);

     for(i=0; i<N; i++)

           { if (i%4==0) printf(“\n”);

             printf(“A[%d] = %d \t”,i,A[i]);

}

  }

Назначение препроцессора: модификация исходного текста программы для последующей его обработки компилятором.

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

В соответствии с директивой #defineN 15 препроцессор изменит исходный текст программы следующим образом. Идентификатор N  встречается в тексте 3 раза. Во всех этих местах вместо идентификатора N будет записано число 15.

Таким образом, после обработки препроцессором

1. Функция main () будет иметь вид:

void main (void)

  {  int i=1, A[15] ;

             printf(“Enter A[0] =”); scanf(“%d”,&A[0]);

     do   {A[i]= A[i-1]+5;i++;

            }    while (i<15);

     for(i=0; i<15; i++)

           { if (i%4==0) printf(“\n”);     printf(“A[%d] = %d \t”,i,A[i]);     }

}

2. Компилятор получит доступ к заголовочному файлу stdio.h.

1.3. СРЕДСТВО ВЫВОДА НА ЭКРАН БУКВ РУССКОГО АЛФАВИТА

При выводе на экран букв из русского алфавита очень полезна функция CharToOem(), которая записывает  строку, свой первый аргумент,  по адресу – своему второму аргументу. Прототип функции  –  в заголовочном файле        windows.h. Пример 1.3 демонстрирует некоторые варианты использования этой функции.  В программе присваивается значение 0-му элементу массива с константным адресом B, далее рассчитываются значения остальных элементов этого массива. В  массив с константным адресом C элементы исходного массива записываются в обратном порядке.