问题 问答题

下列程序定义了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");

do
m=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;++)。

解答题
单项选择题