问答题 1.  下列程序定义了M×M的二维数组,并在主函数中自动赋值。请编写函数proc(inta[][M],int n),该函数的功能是:使数字右上半三角元素中的值乘以m。
    例如,若m的值为5,a数组中的值为:
    a=1 2
    3 4
    则返回主程序后a数组的值应为:
    5 10
    3 20
    注意:部分源程序如下。
    请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
    试题程序:
    #include<conio.h>
    #include<time.h>
    #include<stdio.h>
    #include<stdlib.h>
    #define M 5
    void proc(int a[][M],int m)
    {
    }
    void main()
    {
    int arr[M][M],m,i,j;
    system("CLS");
    printf("****The array****\n");
    srand((unsigned)time(NULL));
    for(i=0;i<M;i++)
    //输出一个随机的5*5矩阵
    {  for(j=0;j<M;j++)
    {arr[i][j]=rand()%20;
    printf("%4d",arr[i][j]);
    }
    printf("\n");
    }
    m=rand()%10;
    while(m>=3);    //产生一个小于3的随机数
    printf("m=%4d\n",m);
    proc(arr,m);
    printf("THE RESULT\n");
    for(i=0;i<M;i++)
    {  for(j=0;j<M;j++)
    {
    printf("%4d",arr[i][j]);
    printf("\n");
    }
    }
【正确答案】void proc(int a[][M],int m)
   {
   int i,j;
   for(i=0;i<M;i++)
   for(j=i;j<M;j++)     //j表示的是列下标,即右上半三角的下标
   a[i][j]=a[i][j]*m;    //数字右上半三角元素中的值乘以m
   }
【答案解析】 二维数组中右上半三角元素的特点为其行下标小于等于其列下标。根据这个特点,找出二维数组中所有的右上半三角元素,并将其值乘以m放在原来的位置上。