Процедуры и функции в Си.

11 сентября 2018 - Администратор

В Си можно вводить собственные процедуры.  Программа разбивается на подпрограммы.  Использование собственных процедур делает наглядным код программы.  Кроме того процедуры можно вызвать в различных местах программы.

Чтобы задать собственную процедуру необходимо указать

void  имя процедуры( тип параметра 1  параметр1, тип параметра2   параметр2 …. )

{

//набор команд выполняемых процедурой

}

Процедура  описывается до основной программы  , которая начинается с ключевого слова main()

Пример процедуры анализа количества правильных ответов и выставления оценки.

void ocenka ( int kol, int pr)

{

  float k; // параметр для расчета относительного числа правильных ответов

   k=(float)pr/kol;//  рассчитываем коэффициент относительного числа правильных ответов

 // анализируем ответ

  if ( koef<0.3) {printf("Очень плохо");}

   if ( (koef>=0.3) && (koef<0.6)) {printf("Удовлетворительно");}

   if ( (koef>=0.6) && (koef<0.9)) {printf("Хорошо");}

   if ( (koef>=0.9) && (koef<=1)) {printf("Отлично");}

  if ( koef>1) {printf("Некорректные данные");}

 }

Данная процедура использует два параметра kol – общее количество, pr – количество правильных ответов

Чтобы вызвать процедуру

Необходимо просто  написать ее имя  и в скобочках указать  значения параметров. Значения параметров можно указать явно

ocenka (5,3);

В этом случае в процедуре  параметры  будут  kol = 5 и  pr =3

В процедуру в качестве  значений параметров можно поставить значения переменных.

stat=10;

prav=4;

ocenka (stat,prav);

В этом случае в процедуре параметры  будут  kol=10 и pr =4

Структура программы

Для наглядности кода в  программе используются  процедуры.  Каждая процедура выполняет  блок команд , который можно по смыслу отделить от остальной программы.

 

перечисление  заголовочных файлов

объявление глобальных переменных

Перечисление функций и процедур

main()

{

Вызов процедур

Вызов команд

}

Глобальные переменные можно вызывать и изменять в любой процедуре. Локальные переменные  объявляются внутри каждой  процедуры и могут изменяться только внутри каждой процедуры, другие процедуры не могут использовать локальные переменные.

Пример программы 13. Локальные и глобальные переменные. В программе

#include<iostream.h>

#include<conio.h>

int stat; // глобальная переменная, может вызваться и изменяться в любых местах программы

void  oc()

{ int x;// Локальная переменная видна только в рамках процедуры ос

x=3;// переменная поменялась только в рамках процедуры будет выведено 3

printf(“%d ”, x);

stat=stat+1;// изменение глобальной переменной

}

main()

{

int x;// локальная переменная

x=10;

stat=1;

oc ();

// процедура изменила глобальную переменную stat.  будет выведено 2

printf(“%d ”, stat);

//процедура не поменяла локальную для основной  программы переменную x.   будет выведено 10

printf(“%d ”, x);

getch();

}

Для игр и тестов можно использовать следующую структуру программы

Перечисление  заголовочных файлов

Объявление глобальных переменных отвечающих за общую статистику теста

Процедура ввода начальных параметров

Процедура стандартного вопроса теста или хода игры

Процедура  расчета и вывода статистки игры

main()

{

Вызов процедуры  ввода начальных параметров

ans=1;

   //  выполняем тест пока ответ на продолжение игры ==1

   while (ans==1)

   {

   Вызов процедуры  стандартного вопроса теста или хода игры

   printf("Хотите продолжить ?  1 -Да. 2 - Нет. ");

   scanf("%d", &ans);

   }

Вызов процедуры  расчета и вывода статистки игры

}

Следуя такой логике,  приведем пример правильно написанной программы тестирования таблицы квадратов.

Пример программы 14. Программа запрашивает начальное значение,  с которого будет производится тест на знание квадратов, выводит число и запрашивает его квадрат. Анализирует введенный ответ. Подсчитывает число правильных и неправильных ответов. После каждого вопроса запрашивает вопрос на продолжение теста. В конце теста выводит оценку.

// тест на таблицу квадратов

#include<iostream.h>

#include<conio.h>

int prav;// счетчик правильных ответов

int stat;// счетчик количества вопросов

// процедура выставления оценки kol количество всего вопросов, pr – количество //правильных ответов

void ocenka ( int kol, int pr)

{

    float k; // локальная переменная для определения относительного  коэффициента правильных ответов

    k=(float)pr/kol;

   if ( k<0.3) {printf("Очень плохо");}

   if ( (k>=0.3) && (k<0.6)) {printf("Удовлетворительно");}

   if ( (k>=0.6) && (k<0.9)) {printf("Удовлетворительно");}

   if ( k>=0.9) {printf("Отлично");}

 }

// процедура стандартного  вопроса теста . Запрашиваем квадрат числа ch

void  vopr(int ch)

{

   int x;

   printf("Введите  квадрат числа %d ", ch);

   scanf("%d", &x);

   // проверка правильности ответа

    if (x==ch*ch) 

    { printf ("Правильно ");

      prav=prav+1; // увеличиваем счетчик правильных ответов

                   }

    else

    {

      printf ("Неправильно "); 

    }

 }

 

int main()

{

   int b; //  начальное число

   int ans; // ответ на вопрос о завершении теста

  

   // обнуляем счетчики

   prav=0;

   stat=0;

   // ввод начального числа теста

   printf("Введите начальное число ");

   scanf("%d", &b);

   // для прохождения первой итерации

   ans=1;

   //  выполняем тест пока ответ на продолжение игры ==1

   while (ans==1)

   {

   stat=stat+1;// увеличиваем число вопросов

   // вопрос теста спрашиваем квадрат текущего числа b

   vopr(b);

   b=b+1;// увеличиваем текущее число

   //  запрос на продолжение  теста

   printf("Хотите продолжить проверку?  1 -Да. 2 - Нет. ");

   scanf("%d", &ans);

   }

   // вывод результатов теста

   printf("Всего примеров %d  Правильных из них %d ",  stat, prav);

   ocenka(stat, prav);

   getch();           

}

Функции – это подпрограммы, которые возвращают определённый результат. При этом функции могут  выполнять набор различных действий.

Чтобы задать собственную функцию, необходимо указать тип возвращаемого результата, название функции, список параметров, тело функции и ключевое слово return  за которым следует значение возвращаемого  результата.

Тип функции Название функции (параметры)

{

Исполняемые операторы

return возвращаемое значение;

}

Используя функции можно задать собственную математическую функцию. Задав ее один раз, мы можем вызвать ее в любом месте программы  просто по имени и  аргументу.

Пример программы 15. Программа запрашивает значение аргумента x и возвращает значение от данного аргумента  введенной собственной математической функции parabola

#include <stdio.h>

#include <conio.h>

// задаем собственную математическую функцию параболу a*x*x+b*x+c

float  parabola(float x)

{

float y;

float a=1; // коэффициент при x^2

float b=2; // коэффициент при x

float c=1; // свободное слагаемое

y =a*x*x+b*x+c;

return  y;

}

main()

{

float x;

float zn;

printf("Введите значение x ");

scanf("%f", &x);

// вызов функции

zn= parabola(x);

printf ("Значение функции %f ", zn);         

getch();

}

Значение функции можно присвоить переменной,  также  функцию можно вызвать в условии.

Функция перед возвратом значения может выполнить различные действия.

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

Пример программы 16.  Программа запрашивает  вес и рост человека. В программе осуществляется проверка корректности ввода информации, введенное значение должно попадать в указанный диапазон.

#include <stdio.h>

#include <conio.h>

// функция запрашивает параметр в  диапазоне от a до b

int   vvod(int a , int b )

{

int  x;

x=0;

// осуществляем запрос параметра до тех пор  пока число не попадет в нужный диапазон от a до b

while (!(x>a && x<b))

{

printf("Введите значение в диапазоне от %d до %d ", a,b);

scanf("%d", &x);

}

return  x;

}

 

main()

{

int ves;

int rost;

printf("Введите Ваш вес в кг ");

// вызов функции  vvod для запроса веса вес может изменяться от 30 до 500 ru

ves=vvod(30, 500);

printf("Введите Ваш рост  в  см ");

// вызов функции vvod для запроса роста  Рост  может изменяться от 50 до 220  см

rost=vvod(50,220);

printf ("Ваш вес  %d  и рост %d ", ves, rost);         

getch();

}   

   Вернуться к содержанию  Перейти к следующему уроку Массивы в Си

Комментарии (0)

Нет комментариев. Ваш будет первым!