Процедуры и функции в Си.
Процедуры в си
В Си можно вводить собственные процедуры. Программа разбивается на подпрограммы. Использование собственных процедур делает наглядным код программы. Кроме того процедуры можно вызвать в различных местах программы.
Чтобы задать собственную процедуру в си необходимо указать
void имя процедуры( тип параметра 1 параметр1, тип параметра2 параметр2 …. )
{
//набор команд выполняемых процедурой
}
Процедура в си описывается до основной программы, которая начинается с ключевого слова main()
Пример процедуры анализа количества правильных ответов и выставления оценки.
void ocenka ( int kol, int pr)
{
float k; // параметр для расчета относительного числа правильных ответов
k=(float)pr/kol;// рассчитываем коэффициент относительного числа правильных ответов
// анализируем ответ
if ( koef<0.3) {printf("Очень плохо\n");}
if ( (koef>=0.3) && (koef<0.6)) {printf("Удовлетворительно\n");}
if ( (koef>=0.6) && (koef<0.9)) {printf("Хорошо\n");}
if ( (koef>=0.9) && (koef<=1)) {printf("Отлично\n");}
if ( koef>1) {printf("Некорректные данные\n");}
}
Данная процедура использует два параметра 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\n”, x);
stat=stat+1;// изменение глобальной переменной
}
main()
{
int x;// локальная переменная
x=10;
stat=1;
oc ();
// процедура изменила глобальную переменную stat. будет выведено 2
printf(“%d\n”, stat);
//процедура не поменяла локальную для основной программы переменную x. будет выведено 10
printf(“%d ”, x);
getch();
}
Для игр и тестов можно использовать следующую структуру программы
Перечисление заголовочных файлов
Объявление глобальных переменных отвечающих за общую статистику теста
Процедура ввода начальных параметров
Процедура стандартного вопроса теста или хода игры
Процедура расчета и вывода статистки игры
main()
{
Вызов процедуры ввода начальных параметров
ans=1;
// выполняем тест пока ответ на продолжение игры ==1
while (ans==1)
{
Вызов процедуры стандартного вопроса теста или хода игры
printf("Хотите продолжить ? 1 -Да. 2 - Нет.\n");
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("Очень плохо\n");}
if ( (k>=0.3) && (k<0.6)) {printf("Удовлетворительно\n");}
if ( (k>=0.6) && (k<0.9)) {printf("Удовлетворительно\n");}
if ( k>=0.9) {printf("Отлично\n");}
}
// процедура стандартного вопроса теста . Запрашиваем квадрат числа ch
void vopr(int ch)
{
int x;
printf("Введите квадрат числа %d\n", ch);
scanf("%d", &x);
// проверка правильности ответа
if (x==ch*ch)
{ printf ("Правильно\n");
prav=prav+1; // увеличиваем счетчик правильных ответов
}
else
{
printf ("Неправильно\n");
}
}
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 - Нет.\n");
scanf("%d", &ans);
}
// вывод результатов теста
printf("Всего примеров %d Правильных из них %d\n", 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\n");
scanf("%f", &x);
// вызов функции
zn= parabola(x);
printf ("Значение функции %f\n", 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\n", a,b);
scanf("%d", &x);
}
return x;
}
main()
{
int ves;
int rost;
printf("Введите Ваш вес в кг\n");
// вызов функции vvod для запроса веса вес может изменяться от 30 до 500 ru
ves=vvod(30, 500);
printf("Введите Ваш рост в см\n");
// вызов функции vvod для запроса роста Рост может изменяться от 50 до 220 см
rost=vvod(50,220);
printf ("Ваш вес %d и рост %d\n", ves, rost);
getch();
}
Вернуться к содержанию Перейти к следующему уроку Массивы в Си
Полезно почитать по теме процедуры и функции в си
Заполнение экрана орнаментом
Анимация в си
Поделиться:
Нет комментариев. Ваш будет первым!