问答题 请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中, 一维数组中数据的个数存放在形参n所指的存储单元中。 例如, 二维数组中的数据为: 33 33 33 33 44 44 44 44 55 55 55 55 则一维数组中的内容应是: 33 33 33 33 44 44 44 44 55 55 55 55。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include void fun(int (*s)[10], int *b, int *n, int mm, int nn) { } main() { int w[10][10] = {{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j ; int a[100] = {0}, n = 0 ; printf("The matrix:/n") ; for(i = 0 ; i < 3 ; i++) { for(j = 0 ; j < 4 ; j++) printf("=",w[i][j]) ; printf("/n") ; } fun(w, a, &n, 3, 4) ; printf("The A array:/n") ; for(i = 0 ; i < n ; i++) printf("=",a[i]);printf("/n/n") ; NONO() ; }
【正确答案】void fun(int (*s)[10], int *b, int *n, int mm, int nn) { int i, j, k ; for(i = 0 ; i < mm ; i++) for(j = 0 ; j < nn ; j++) { k = i * nn + j ; b[k] = s[i][j] ; } *n = mm * nn ; } main() { int w[10][10] = {{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j ; int a[100] = {0}, n = 0 ; printf("The matrix:/n") ; for(i = 0 ; i < 3 ; i++) { for(j = 0 ; j < 4 ; j++) printf("=",w[i][j]) ; printf("/n") ; } fun(w, a, &n, 3, 4) ; printf("The A array:/n") ; for(i = 0 ; i < n ; i++) printf("=",a[i]);printf("/n/n") ; NONO() ; }
【答案解析】解题思路: 本题是把二维数组中的数据按行存放到一维数组中。 1. 计算存放到一维数组中的位置。 2. 取出二维数组中的数据存放到一维数组(已计算出的位置)中。