下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),该函数的功能是:使数字右上半三角元素中的值乘以m。 例如,若m的值为2,a数组中的值为 a=1 9 2 7 则返回主

admin2010-05-05  25

问题 下列程序定义了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 [j]=rand()%20;
              printf("%4d", a [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 [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;++)。
转载请注明原文地址:https://kaotiyun.com/show/FHID777K
0

最新回复(0)