问题 问答题

下列给定程序中,函数fun的功能是:有N×N矩阵,将矩阵的外围元素做顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,再使临时数组中的元素成为最后一列。
例如,若N=3,有下列矩阵:
1 2 3
……
4 5 6
……
7 8 9
操作后应为:
7 4 1
……
8 5 2
……
9 6 3
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define N 4
void fun(int(*f)(N1)

int i,[N];
for(j=0;j<N;j++)
r[j]=t[0][j];
for(j=0;j<N;j++)
/********found********/
t[0][N-j-1]=t[j] (1) ;
for(j=0;j<N;j++)
f[j][0]=t[N-1][j];
/********found******/
for(j=N-1;j>=0; (2) )
t[N-1][N-1-j]=t[j][N-1];
for(j=N-1;j>=0;j--)
/********found********/
t[j][N-1]=[ (3) ];

main()

int t[][N]=21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10,i,j;
printf("\nThe original array:\n");
for(i=0;i<N;i++)

for(j=0;j<N;j++)
printf("%2d",t[i][j]);
printf("\n");

fun(t);
printf("\nThe result is:\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
printf("%2d",t[i][j]);
printf("\n");

答案

参考答案:0 (2)j- (3)j

解析:
本题关键字有:数组元素的引用;for循环语句。二维数组a[N][N]的周边元素可表示成:
a[0][0]… a[0][N-i-1]… a[0][N-1]
a[1][0]… … … a[1][N-1]
a[N-j-1][0]… … … a[N-j-1][N-1]
a[N-1][0]… a[N-1][N-i-1]… a[N-1][N-1]
[微分析]
填空1:N×N矩阵,t[0][N-j-1]表示第一行元素,t[j][0]表示第一列元素,第一列成为第一行,因此填入0。
填空2:for循环语句中,变量j的变化范围为N-1~0,所以填入j--。
填空3:将临时数组r中的元素赋值给矩阵最后一列元素。

单项选择题 A1型题
实验题