数组和函数

数组元素作为函数实参
数组元素可以作为函数实参,不能作为函数形参。因为形参是在函数被调用时临时分配的存储单元,不可能作为一个数组元素单独分配存储单元(数组是一个整体,在内存中占连续的一段存储单元)。在用数组元素作为函数实参时,把实参的值传给形参,是“值传递”的方式。

程序举例
输入10个数,要求输出其中值最大的元素和该数是第几个数。
解题思路:可以定义一个长度为10的数组。设计一个函数max,用来求两个数中的大者。在主函数中定义一个变量m,m的初值为a[0],每次调用max函数后的返回值存放在m中。用打擂台算法,将数组元素a[1]到a[9]与m比较,最后的到的m就是最大值。

#include<stdio.h>
int main() 
{ 
    int max(int x,int y); 
    int a[10],m,n,i; 
    printf("please enter 10 integer number:"); 
    for(i=0;i<10;i++) 
        scanf("%d",&a[i]); 
    printf("\n"); 
    for(i=1,m=a[0],n=0;i<10;i++) 
    { 
        if(max(m,a[i])>m) //若max函数返回值大于m 
        { 
            m=max(m,a[i]); //max函数的返回值取代m 
            n=i; //把数组元素的序号记下来,放到n中 
        } 
    } 
    printf("the largest number is %d\n it is the %dth number \n",m,n+1); 
} 
    int max(int x,int y) 
    { 
        return(x>y?x:y); 
    } 

数组名作为函数参数
除了可以用数组元素作为函数的参数外,还可以用数组名做函数参数(包括实参和形参)。应当注意的是:用数组元素作为实参时,向形参变量传递的是数组所对应数组元素的值,而用数组名做函数实参时,向形参(数组名或指针变量)传递的是数组首元素的地址
程序举例
有一个一维数组score,内放10个学生成绩,求平均成绩。
解题思路:用一个函数average来求平均成绩,不用数组元素作为函数实参,而是用数组名作为函数的实参,形参也用数组名,在average函数中引用各数组的元素,求平均成绩并返回main函数。
编写程序:

#include<stdio.h>
int main() 
{ 
    float average(float array[10]); 
    float score[10],aver; 
    int i; 
    printf("please enter 10 scores:"); 
    for(i=0;i<10;i++) 
       scanf("%f",&score[i]); 
    printf("\n"); 
    aver=average(score); //注意这里调用函数时,向形参传递的是数组首元素的地址 
    printf("average score is %5.2f\n ",aver); 
    return 0; 
} 
float average(float array[10]) 
{ 
    int i; 
    float aver,sum=0; 
    for(i=0;i<10;i++) 
        sum=sum+array[i]; 
    aver=sum/10; 
    return(aver); 
} 

注意:用数组名作为函数参数,应该在主调函数和被调用函数分别定义数组,例如array是形参的数组名,score是实参数组名,分别在其所在函数中定义。
练习题
1 编写函数fun,其功能是:将1~m能被7或11整除的所有整数放在数组a中,并通过n返回这些数的个数。
例如,如果传给m的值是50,则程序输出: 7,11,14,21,22,28,33,35,42,44,49

2 编写函数fun,其功能是将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c数的十位和千位上,b数的十位和个位依次放在c数的百位和个位上。
例如,当a=45,b=12时,调用该函数后,c=5142.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值