C语言数组作为函数参数-学习十九
C语言数组作为函数参数-学习十九
2022-02-13 / 0评论 / 309阅读 / 0点赞
-- XG.孤梦

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

XG.孤梦
2022-02-13 / 0 评论 / 309 阅读 / 正在检测是否收录...

数组元素作函数实参

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

36522-f99l4yzyp7q.png


数组名作函数参数

  • 除了可以用数组元素作为函数参数外,还可以用数组名作函数参数(包括实参和形参)。
  • 数组元素作实参时,向形参变量传递的是数组元素的值
  • 数组名作函数实参时,向形参传递的是数组首元素的地址
  • 例子:
    有一个一维数组score,内放10个学生成绩,求平均成绩。
#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;
}

60591-h4tl0jyzrkm.png


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

  • 需要解决怎样用同一个函数两个不同长度的数组的平均值的问题
#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;
}

98942-dcbvv4i144.png


注意

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

  • 1.用数组元素作实参时,对数组元素的处理是按普通变量对待的。

    • 用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组
    • 都必须有明确的数组说明,当形参和实参二者不一致时,即会发生错误。
  • 2.在普通变量或下标变量作函数参数时,形参变量实参变量是由编译系统分配的两个不同的内存单元

    • 在函数调用时发生的值传送是把实参变量的值赋予形参变量。
    • 在用数组名作函数参数时,不是进行值的传送,是把实参数组的首地址赋子形参数组名,
      而不是把实参数组的每一个元素的值都赋予形参数组的各个元素。

用多维数组名作函数参数

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

    • int array[5][10]
    • int array[][10]

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

#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;
}

49417-is1rms9bcus.png


0

评论

博主关闭了所有页面的评论