改错题
1. 下列给定程序中,函数proc()的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。
请修改函数proc()中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
void proc()
{
int arr[3][3],mul;
int i,j;
mul=1;
printf("please input an 3*3 array:\n");
for(i=0;i<3;i++)
{
//****found****
for(i=0;j<3;j++)
scanf("%d",&arr[i][j]);
}
for(i=0;i<3;i++)
//****found****
mul=mul*arr[i][j];
printf("Mul=%d\n",mul);
}
void main()
{
proc();
}
【正确答案】(1)错误:for(i=0;j<3;j++)
正确:for(j=0;j<3;j++)
(2)错误:mul=mul*arr[i][j];
正确:mul=mul*arr[i][i];
【答案解析】 由函数proc()可知,变量i,j分别表示二维数组的行和列,从键盘输入二维数组的元素是按行输入的,因此,“for(i=0;j<3;j++)”应改为“for(j=0;j<3;j++)”;二维数组主对角线上元素的两个下标是相等的,因此,“mul=mul*arr[i][j];”应改为“mul=mul*arr[i][i];”。