改错题 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]”。