问题 单项选择题

下面程序段的执行结果是( )。
main()
int a[5][5],i,j;
for(i=1;i<5;i++)
for(j=1;j<5;j++)
a[i][j]=(i<j)*(j/i);
for(i=1;i<5;i++)
for(j=1;j<5;j++)
printf("%2d",a[i][j]);
printf("\n");

A.1111
1111
1111
1111

B.0001
0010
0100
1000

C.1000
0100
0010
0001

D.0000
0000
0000
0000

答案

参考答案:C

解析: 本题使用一个双重循环对—个二维数组的一部分赋值(下标中含0的元素不赋值),赋值表达式是a[i][j]=(i/j)*(j/i)。因为i和j都是正整数,所以当i大于j时,j/i为0,当i小于j时,i/j为0,而0乘以任何数都为0,故表达式(i/j)*(j/i)在i和j不相等时的值为0。当i和j相等时,i/j和j/i的值都为1,所以表达式(i/j)*(j/i)的值为1。故二维数组中的a[1][1]、a[2][2]、 a[3][3]、a[4][4]被赋为1,其余下标不含0的元素被赋为0。故应该选择C。

单项选择题 A3/A4型题
选择题