Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_prog2_ru_2016_3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
334 Кб
Скачать
☆

Void main()

{int am=2, bm=5, res1,res2,res3;

res1=def(); // 10*3=30

res2=def(am); // 2*3=6

res3=def(am,bm); // 2*5=10

printf("res1=%d res2=%d res3=%d\n",res1,res2,res3); }

В результате работы программы на экран выведется:

res1=30 res2=6 res3=10

Если функция с умалчиваемыми параметрами определена после функции main(), то значения умалчиваемых параметров указыва­ются обязательно в прототипе этой функции, а в определении функ­ции (в списке формальных параметров) эти значения не указываются.

Пример. Функция находит сумму 3-х переменных

#include <stdio.h>

int sum(int,int=5,int=10); //Прототип функции

Void main()

{int am=20, bm=50, cm=100, s1,s2,s3,s4;

s1=sum(am); // 20+5+10=35

s2=sum(am,bm); // 20+50+10=80

s3=sum(am,bm,cm); // 20+50+100=170

printf("s1=%d s2=%d s3=%d\n",s1,s2,s3);}

int sum(int a,int b,int c) // Определение функции

{return a+b+c;}

В результате работы программы на экран выведется:

s1=35 s2=80 s3=170

1.5 Функции с переменным числом параметров

Функции с переменным числом параметров – это функции, в ко­торых количество и типы параметров определяются только во время их вызова. Синтаксис определения прототипа таких функций:

тип имя(спецификация явных параметров,...);

Последняя запятая необязательна. Многоточие сообщает компи­лятору, что не нужно проводить дальнейший контроль соответствия количества параметров и их типов при обработке вызова. Переход в списке от параметра к параметру осуществляется с помощью указате­ля, тип которого является типом переменной. При увеличении указа­теля на единицу осуществляется переход к следующей переменной такого же типа. В ВС31 функции с переменным числом параметров не работают с типами char, unsigned char, float.

В таких функциях существуют два способа определения коли­чества параметров: 1) передача в функцию в списке фактических параметров информации об их количестве; 2) добавление параметра–индикатора в конец списка фактических параметров.

Пример. В функцию передается в списке явных параметров количес­тво элементов, которые суммируются.

#include <stdio.h>

int sumi(int i,...)// Определение функции

{int *num=&i; // 1-й параметр – число переменных в списке

int sum=0;

for(;i;i--) sum+=*(++num);//вычисляем сумму со 2-го элемента

return sum;}

double sumd(int i,double d...)// Определение функции

{double *ptr=&d; //указатель на 2-й параметр типа double

double sum=0.0;

for(;i;i--) // 1-й параметр – число переменных в списке

sum+=*(ptr++);

return sum;}

Void main()

{int a1=10,a2=20,a3=30,s1,s2;

s1=sumi(3,a1,a2,a3); //сумма 3-х чисел a1,a2,a3

s2=sumi(6,1,a1,3,a2,a3,4); //сумма 6-и чисел

double d1=5.7, d2=1.3,s3;

s3=sumd(4,d1,1.25,d2,2.5); //сумма 4-х чисел

printf("s1=%d s2=%d s3=%.2lf\n",s1,s2,s3);}

В результате работы программы на экран выведется:

s1=60 s2=68 s3=10.75

Пример. В функции вычисляется произведение элементов, при этом каждый элемент сравнивается с параметром–индикатором, который находится в конце списка явных параметров.

#include <stdio.h>

#define term 0.0

double mult(double arg...) // Определение функции

{double a=1.0, *ptr=&arg;

if(*ptr==0.0) return 0.0;

for(;*ptr!=term;ptr++)

a*=*ptr;

return a;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]