类推则有 a[i]等于 b[i]。
【例 8.8】数组 a 中存放了一个学生 5 门课程的成绩,求平均成绩。
float aver(float a[5])
{
int i;
float av,s=a[0];
for(i=1;i<5;i++)
s=s+a[i];
av=s/5;
return av;
}
void main()
{
float sco[5],av;
int i;
谭浩强 C 语言程序设计 2001 年 5 月 1 日
printf("
input 5 scores:
");
for(i=0;i<5;i++)
scanf("%f",&sco[i]);
av=aver(sco);
printf("average score is %5.2f",av);
}
本程序首先定义了一个实型函数 aver,有一个形参为实型数组 a,长度为 5。在函
数 aver 中,把各元素值相加求出平均值,返回给主函数。主函数 main 中首先完成数
组 sco 的输入,然后以 sco 作为实参调用 aver 函数,函数返回值送 av,最后输出 av
值。 从运行情况可以看出,程序实现了所要求的功能。
3) 前面已经讨论过,在变量作函数参数时,所进行的值传送是单向的。即只能从实参
传向形参,不能从形参传回实参。形参的初值和实参相同,而形参的值发生改变后,
实参并不变化,两者的终值是不同的。而当用数组名作函数参数时,情况则不同。
由于实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之
变化。当然这种情况不能理解为发生了“双向”的值传递。但从实际情况来看,调
用函数之后实参数组的值将由于形参数组值的变化而变化。为了说明这种情况,把
例 5.4 改为例 5.6 的形式。
【例 8.9】题目同 8.7 例。改用数组名作函数参数。
void nzp(int a[5])
{
int i;
printf("
values of array a are:
");
for(i=0;i<5;i++)
{
if(a[i]<0) a[i]=0;
printf("%d ",a[i]);
}
}
main()
{
int b[5],i;
printf("
input 5 numbers:
");
for(i=0;i<5;i++)
scanf("%d",&b[i]);
printf("initial values of array b are:
");
for(i=0;i<5;i++)
printf("%d ",b[i]);
nzp(b);
printf("
last values of array b are:
");
for(i=0;i<5;i++)
printf("%d ",b[i]);
}
谭浩强 C 语言程序设计 2001 年 5 月 1 日
本程序中函数 nzp 的形参为整数组 a,长度为 5。主函数中实参数组 b 也为整型,长度
也为 5。在主函数中首先输入数组 b 的值,然后输出数组 b 的初始值。然后以数组名 b 为实
参调用 nzp 函数。在 nzp 中,按要求把负值单元清 0,并输出形参数组 a 的值。 返回主函
数之后,再次输出数组 b 的值。从运行结果可以看出,数组 b 的初值和终值是不同的,数组
b 的终值和数组 a 是相同的。这说明实参形参为同一数组,它们的值同时得以改变。
用数组名作为函数参数时还应注意以下几点:
a. 形参数组和实参数组的类型必须一致,否则将引起错误。
b. 形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检
查形参数组的长度。当形参数组的长度与实参数组不一致时,虽不至于出现语
法错误(编译能通过),但程序执行结果将与实际不符,这是应予以注意的。
【例 8.10】如把例 8.9 修改如下:
void nzp(int a[8])
{
int i;
printf("
values of array aare:
");
for(i=0;i<8;i++)
{
if(a[i]<0)a[i]=0;
printf("%d ",a[i]);
}
}
main()
{
int b[5],i;
printf("
input 5 numbers:
");
for(i=0;i<5;i++)
scanf("%d",&b[i]);
printf("initial values of array b are:
");
for(i=0;i<5;i++)
printf("%d ",b[i]);
nzp(b);
printf("
last values of array b are:
");
for(i=0;i<5;i++)
printf("%d ",b[i]);
}
本程序与例 8.9 程序比,nzp 函数的形参数组长度改为 8,函数体中,for 语句的循环
条件也改为 i<8。因此,形参数组 a 和实参数组 b 的长度不一致。编译能够通过,但从结果
谭浩强 C 语言程序设计 2001 年 5 月 1 日
看,数组 a 的元素 a[5],a[6],a[7]显然是无意义的。
c. 在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素
的个数。
例如,可以写为:
void nzp(int a[])
或写为
void nzp(int a[],int n)
其中形参数组 a 没有给出长度,而由 n 值动态地表示数组的长度。n 的值由主
调函数的实参进行传送。
由此,例 8.10 又可改为例 8.11 的形式。
【例 8.11】
void nzp(int a[],int n)
{
int i;
printf("
values of array a are:
");
for(i=0;i
小说推荐
- 星卡设计师:开局设计火伊布
- 苏洛花8700万拍下了限量青眼白龙卡牌,遭到了全网嘲讽,没想到,竟然真的召唤出了青眼白龙 这是个类似女武神的世界观,神族以圣战的方式,决定人族的去留 所谓圣战,便是在人类中挑选出九名最强星卡师,与诸神中的九位主神展开对决,若是人类能赢五场,便让人族延续千年 于是青眼白龙从各个星球中挑选有天赋的星卡师
- 玄幻小说箫锦鲤连载中
- 最新章:新书发了
- 亲爱的,你被我设计了!
- 作者所写的《亲爱的,你被我设计了》无弹窗免费全文阅读为转载作品,章节由网友发布
- 都市言情未知连载中
- 最新章:page 32
- 乌龙设计师
- 因为身边没有亲人,袁婉绿早就学会独立自主,也养成了凡事自己来、从不依靠别人的习惯!没想到这个才见第二次面的室内设计师,居然会这么关心她,不但陪着她到医院就诊,而且还因为担心她会发烧、家里没人照料,主动表示愿意让她到他家借住…天底下怎么会有这么好心的人啊?真是令人感动—见鬼了!她只是在向他道谢而已,他
- 都市言情未知连载中
- 最新章:第18章
- 亲爱的你被我设计了
- 原来我被他们联合起来设计了,正在我似梦非梦无法从惊奇中清醒过来时,只听到罗斌在耳边悄悄问:亲爱的,你喜不喜欢我的设计 作者:雨醉霜浓所写的《亲爱的你被我设计了》无弹窗免费全文阅读为转载作品,章节由网友发布
- 都市言情雨醉霜浓完本
- 最新章:尾声
- 人生设计在童年
- 人生设计在童年作者[美]高燕定广西师范大学出版社出版 序言 新东方教育集团文化研究院院长徐小平 我是在2003年5月底在美国休斯敦见到高燕定先生的。我去休斯敦看望一个多年不见的老友。朋友说有一个高燕定先生,在教育方面很有见地,希望我们能够见面认识 见到高燕定先生,真使我有相见恨晚之感。高先生在20世
- 现代文学未知连载中
- 最新章:第67章
- 冒牌设计师
- 新书《傲临都市》已经上传,望新老朋友多多支持,新书要冲个小榜,求收藏,求推荐 拜谢!新书书号3127811 作者:吾爱杨所写的《冒牌设计师》无弹窗免费全文阅读为转载作品,章节由网友发布
- 穿越架空吾爱杨完本
- 最新章:第二六零章 成就!黄粱一梦?(大结局)
- 王牌设计师
- 新书:神灵纪。书号:1365414【起点第二编辑组荣誉出品】他,天资平庸,然而一夜之间拥有王牌设计师的头脑,任何设计都难不倒他.建筑设计 服装设计?广告设计?这些通通都是小菜!但是他却有着一个改不过来的毛病,那就是一旦扯上和女人沾边的事儿,就会犯傻.比如说,有美女脱光衣服送上门来,他也不知道下手…群
- 都市言情爱上云的风完本
- 最新章:想说的话以及关于新书
- 超人气设计
- 《超人气设计》作者:沈娆(VIP手打完结)_TXT下载她只是个小裁缝的女儿,异能不多不少,刚够实现她的梦想,偶然的机遇让她闯进了光怪陆离五彩斑斓的时尚圈,成为一名新晋时装设计师。生存在白天鹅群中,她如何才能破茧成蝶,一飞冲天 作者:所写的《超人气设计》无弹窗免费全文阅读为转载作品,章节由网友发布
- 都市言情未知连载中
- 最新章:第125章
- 命运设计师
- [都市异能《命运设计师》作者:独爱金秋【第一部完结】一个想救出父母的少年,无意间拯救了世界~一面魂镜,控制无数人的命运。一位总师,设计着所有人的蓝图。你的命运其实早就被安排好了,不管你如何改变,都是我想让你改变的,某设计师如是说。第一卷:幻境奇缘第一章:魂镜之母上 公元前221年,秦始皇率军占领齐国
- 玄幻小说未知连载中
- 最新章:第141章