前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言数组作为函数参数-学习十九

C语言数组作为函数参数-学习十九

作者头像
XG.孤梦
发布2022-03-01 14:07:34
1.7K0
发布2022-03-01 14:07:34
举报
文章被收录于专栏:日志随记

本文最后更新于2022年02月13日,已超过15天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

数组元素作函数实参

  • 数组元素就是变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的, 在发生函数调用时,把作为实参的数组元素的值传递给形参,实现单向的值传送。
  • 例子: 有两个数组 a,b,各有10个元素,将它们对应地逐个相比(即 a[0] 与 b[0] 比....…)。如果a数组中的元素大于b数组中的相应元素的数目多于 b 数组中元素大于 a 数组中相应元素的数目(如:a[i]>b[i] 3次,b[i]>a[i] 5次,其中i每次为不同的值),则认为a 数组小于 b 数组,并分别统计出两个数组相应元素大于、等于、小于的次数。
代码语言:javascript
复制
#include <stdio.h>

main() {
    int large(int x, int y);
    int i,c,v=0,m=0,n=0,a[10],b[10];
    printf("输入a数组的值:\n");
    for (i = 0; i < 10; i++) {
        scanf_s("%d", &a[i]);
    }
    printf("输入b数组的值:\n");
    for (i = 0; i < 10; i++) {
        scanf_s("%d", &b[i]);
    }
    
    for (i = 0; i < 10; i++) {
        c = large(a[i], b[i]);
        if (c == 1) {
            v++;
        }
        else if (c == -1) {
            n++;
        }
        else {
            m++;
        }
    }
    printf("a[i]大于b[i]的个数:%d\na[i]小于b[i]的个数:%d\na[i]等于b[i]的个数:%d\n", v, n, m);

    if (v > n) {
        printf("a[i]大于b[i]\n");
    }
    else if(v < n){
        printf("a[i]小于b[i]\n");
    }
        else {
                printf("a[i]等于b[i]\n");
        }
}

int large(int x,int y) {
    int flag;
    if (x > y) {
        flag = 1;
    }
    else if(x < y){
        flag = -1;
    }
    else {
        flag = 0;
    }
    return (flag);
}

数组名作函数参数

  • 除了可以用数组元素作为函数参数外,还可以用数组名作函数参数(包括实参和形参)。
  • 数组元素作实参时,向形参变量传递的是数组元素的值
  • 数组名作函数实参时,向形参传递的是数组首元素的地址
  • 例子: 有一个一维数组score,内放10个学生成绩,求平均成绩。
代码语言:javascript
复制
#include <stdio.h>

main() {
    float score[10], aver;
    float average(float array[10]);
    printf("输入10个成绩:\n");
    for (int i = 0; i < 10; i++) {
        scanf_s("%f", &score[i]);
    }
    aver = average(score);
    printf("平均成绩= %.2f\n", aver);
}

float average(float array[10]) {
    int i;
    float aver, sum = array[0];
    for (i = 1; i < 10; i++) {
        sum = sum + array[i];
    }
    aver = sum / 10;
    return aver;
}

有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。

  • 需要解决怎样用同一个函数两个不同长度的数组的平均值的问题
代码语言:javascript
复制
#include <stdio.h>

main() {
    float score1[5], score2[10], aver1, aver2;
    float average(float array[], int n);
    printf("输入A班成绩:\n");
    for (int i = 0; i < 5; i++) {
        scanf_s("%f", &score1[i]);
    }
    printf("输入B班成绩:\n");
    for (int i = 0; i < 10; i++) {
        scanf_s("%f", &score2[i]);
    }
    aver1 = average(score1, 5);
    aver2 = average(score2, 10);
    printf("A平均成绩= %.2f\nB平均成绩= %.2f\n", aver1, aver2);
}

float average(float array[], int n) {
    int i;
    float aver, sum = array[0];
    for (i = 1; i < n; i++) {
        sum = sum + array[i];
    }
    aver = sum / n;
    return aver;
}

注意

用数组与用数组元素名作函数参数不同点:

  • 1.用数组元素作实参时,对数组元素的处理是按普通变量对待的。
    • 用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组
    • 都必须有明确的数组说明,当形参和实参二者不一致时,即会发生错误。
  • 2.在普通变量或下标变量作函数参数时,形参变量实参变量是由编译系统分配的两个不同的内存单元
    • 在函数调用时发生的值传送是把实参变量的值赋予形参变量。
    • 在用数组名作函数参数时,不是进行值的传送,是把实参数组的首地址赋子形参数组名, 而不是把实参数组的每一个元素的值都赋予形参数组的各个元素。

用多维数组名作函数参数

  • 多维数组元素与一维数组元素一样,可以看作一个变量,所以在调用函数时可以作为实参,进行值的传递。
  • 多维数组名作为函数参数传递的是数组首元素的地址,要求形参是相同类型的同维数组
  • 这里,形参是二维数组时,第二维的大小(长度)必须指明,而第一维的大小(长度)可以指明,也可以不指明
  • 例如:
    • int array[5][10]
    • int array[][10]

求出3X4的矩阵(二维数组)中的最大元素。

代码语言:javascript
复制
#include <stdio.h>

main() {
    int max(int array[][4]);
    int a[3][4] = { {1,5,7,9},{2,6,12,10},{15,16,33,4} };
    printf("最大值= %d\n", max(a));
}

int max(int array[][4]) {
    int i,j,n;
    n = array[0][0];
    for(i=0;i<3;i++){
        for (j = 0; j < 4; j++) {
            if (n < array[i][j]) {
                n = array[i][j];
            }
        }
    }
    return n;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组元素作函数实参
  • 数组名作函数参数
  • 注意
    • 用数组与用数组元素名作函数参数不同点:
    • 用多维数组名作函数参数
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档