改错题
1. 下列给定程序中,函数proc()的功能是:给一维数组arr输入任意4个整数,并按如下规律输出。
例如,若输入2 3 4 5,则程序运行后输出以下矩阵:
5 2 3 4
4 5 2 3
3 4 5 2
2 3 4 5
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#define N 4
//****found****
void proc(int arr)
{
int i,j,k,m;
printf("Enter 4 number:");
for(i=0; i<N; i++)scanf("%d",&arr[i]);
printf("\n\nThe result:\n\n");
for(i=N; i>0; i--)
{
k=arr[N-1];
for(j=N-1; j>0; j--)
//****found****
arr[j]=arr[j+1];
arr[0]=k;
for(m=0; m<N; m++)printf("%d",arr[m]);
printf("\n");
}
void main()
{
int a[N];
proc(a); printf("\n、n");
}
【正确答案】(1)错误:void proc(int arr)
正确:void proc(int*arr)
(2)错误:arr[j]=arr[j+1];
正确:arr[j]=arr[j-1];
【答案解析】 由主函数中的函数调用可知,函数proc()的形参为整型的指针变量,因此,“void proc(int arr)”应改为“void proc(int*arr)”。由“a[j]=a[j+1];”可知,当“j=M-1”时“a[j+1];”越界了,而程序的思路是把前一个数放到后一个中,再把最后面的数放到第一个中,因此,把“arr[j+1]”改为“arr[j-1]”。