C语言二维数组的函数调用

#include "stdafx.h"#define A 100#define sub 3int ReadMark(int stu);void StuAverage(int Mark[][sub], int stu);void SubAverage(int Mark[][sub], int stu);int main(){ int Mark[A][sub]; int stu; printf("Student Numbers:"); scanf_s("%d", &stu); getchar(); Mark[A][sub] = ReadMark(stu); printf("%d\n", Mark[0][0]); //验证行代码 StuAverage(Mark, stu); SubAverage(Mark, stu); getchar();}int ReadMark(int stu){ int Mark[A][sub]; for (int Number = 0; Number < stu; Number++) { printf("输入第%d位学生的成绩:\n", (Number + 1)); for (int Subject = 0; Subject < sub; Subject++) { printf("输入第%d科的成绩:", (Subject + 1)); scanf_s("%d", &Mark[Number][Subject]); getchar(); } } return Mark[A][sub];}void StuAverage(int Mark[][sub], int stu){ int Number, Subject, Total; for (Number = 0; Number < stu; Number++) { Total = 0; for (Subject = 0; Subject < sub; Subject++) { Total = Total + Mark[Number][Subject]; } printf("第%d位学生平均成绩为:%d\n", (Number + 1), Total / stu); }}void SubAverage(int Mark[][sub], int stu){ int Number, Subject, Total; for (Subject = 0; Subject < sub; Subject++) { Total = 0; for (Number = 0; Number < stu; Number++) { Total = Total + Mark[Number][Subject]; } printf("第%d课平均成绩为:%d\n", (Subject + 1), Total / sub); }}

函数调用不能这么用,第36行。C标准里面返回值是不能直接返回一个数组的,只能返回数组的首地址。输出学生成绩和每科成绩那个函数,你可以定义一个全局变量数组,还有求平均值最好用float 或者double,用int会造成精度流失。帮你调试了一下,大概就这样吧

温馨提示:内容为网友见解,仅供参考
无其他回答

c语言二维数组怎么用函数一个一个调用,这样对吗
1.可以用指针。void Func(int array,int m,int n);在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为:((int*)array + n*i + j);2.可以用二维数组名作为实参或...

c语言中怎么用二维数组作为函数参数
二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中对形参数组定义可以指定所有维数的大小,也可以省略第一维的大小说明,如:它们是合法且等价,也可以使用如下形式:但不能省略第二维的大小,如下面的定义是不合法的,编译时会出错:因为从实参传递来的是数组的起始地址,如果在形参中不说...

c语言中在不知道二维数组行列数的情况下怎么在函数里调用这个二维数组...
行数 = sizeof(array)\/sizeof(array[0]);列数 = sizeof(array[0])\/sizeof(array[0][0]);你也可以在函数形参里加入行列值,然后主函数调用子函数的时候,把行列数做为参数传过去。

求C语言编程:调用函数计算二维数组所有元素的平均值
两个for循环 记录二维数组的总值 count+=array[i][j]key记录数组元素个数 key++;最后 return count\/key 或:double avg(int x[10][10]){ int i,j,sum;for(i=0;i<10;i++){ for(j=0;i<10;j++)sum+=x[i][j];} return sum\/((i+1)*(j+1));} ...

C语言,如何在子函数中写一个3*3二维数组,给主函数调用!!
在子函数申请二维数组,主函数使用,可以用动态申请。方法不止一种,我这里用指针的指针实现二维数组。二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。include<stdio.h>#include<malloc.h>int ** sr(void){ int i,j; ...

C语言,如何在子函数中写一个3*3二维数组,给主函数调用!!
在子函数申请二维数组,主函数使用,可以用动态申请。方法不止一种,我这里用指针的指针实现二维数组。二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。include<stdio.h>#include<malloc.h>int ** sr(void){ int i,j; ...

如何通过函数调用二维数组
C语言编程的过程中,不可避免的会碰到二维或二维以上的数组作为函数的形参的情况,在以前的编程过程中,习惯了动态数组的应用,很是使用直接定义高维数组。最近在编程的过程中就碰到了这个问题:有如下的测试程序:voidtest(double **x,int Row,int Col);voidtest(double **x){ for(int i=0...

C语言函数调用二维数组,指针问题
必须自己写成*(p+2*10+3)来调用 假如定义成 deal(int (*p)[10])就不一样了,编译器就能知道p是一个指向长度为10的数组的指针 那么p[2][3]就能编译成*(p+2*10+3)了 总之,C语言是很灵活的,不同的定义方式配上不同的用法,都是能得到正确的结果的 不知道这么说楼主明白了没?同样的...

关于C语言的二维数组作为函数参数的问题?
int n=2,m=3;int (*arr)[m];所以,传递二维数组作为参数,实际上就是传递了一个指针。将形参的类型定义成int*,再在函数内部转换回指向数组的指针就行了,比如:void f(int *p,int row,int column){ int (*arr)[column]=(int (*)[column])p;\/\/使用二维数组arr } 这样传递参数:int n...

C语言二维数组的定义和引用
另一种是按列排列, 即放完一列之后再顺次放入第二列。在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a行,最后存放a行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。二维数组元素的引用 二维数组的元素也称为...

相似回答