下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),该函数的功能是:使数字右上半三角元素中的值乘以m。 例如,若m的值为2,a数组中的值为 a=1 9 2 7 则返回主程序后a数组的值应为 2 18 2 14 注意:部分源程序给出如下. 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include<conio.h> #include<stdio.h> #include<stdlib.h> #define N 5 int fun(int a[] [N], int m) { } main() {int a[N] [N],m, i, j;clrscr ();printf {"*****The array*****\n");for (i=O; i<N; i++) /*输出一个随机的5×5矩阵*/ { for(j=0; j<N; j++) {a[i] [j]=rand()%20; printf("%4d", a[i] [j]); } printf ("\n"); } dom=rand () %10;while (m>=3); /*产生一个上于3的随机数*/printf ("m=%4d\n", m); fun (a,m);printf ("THE RESULT\n");for (i=0; i<N; i++) {for(j=0;j<N;j++) printf ("%4d",a[i] [j]); printf ("\n"); } }
参考答案:
解析:int fun(int a[] [N], int m) { int i,j; for (i=0; i<N; i++) for (j=i; j<N; j++) a [i] [j] =a [i] [j] *m; /*右上半三角元素中的值乘以m*/ } 本题考查表示右上关三角元素的算法。行下标肯定是从0到N-1,而列下标要根据行下标来定,当到第i行时列下标要从第i列开始,所以我们在编写程序时,第2个for()中有j=i(不是1);若要表示左下半三角元素时,行下标也是从0到N-1,列下标也是从0开始,但当到第i行时列只到i。所以要把上述的第2个for()改成for(j=0;j<=i;++)。