关于#c语言#的问题:输出数组元素

这个是题目:

img


这个是我的答案

#include
int main()
{
    int n,i=0,j=0;
    scanf("%d",&n);
    int a[n],b[n];
    for(i=0;i"%d",&a[i]);
    }
    for(i=0;ifor(j=0;jfor(j=0;jif(j%3==1)
        {
            printf("%d",b[j]);
        }
        else
        {
            printf(" %d",b[j]);
        }
        if(j%3==0)
        {
            printf("\n");
        }
    }
}

请问我哪些地方写错了? 谢谢

首先,第11行的for循环结束条件i<n,改为i<n-1, 因为如果不改的话,第15行的a[i+1]会数组越界。

然后,第13行那个for循环去掉,因为保存前后项之差不需要把每一项差值都循环保存一遍到数组b中,与题意不符,去掉这个循环,然后在第15行后面加个j++, 表示把前后之差依次保存到数组b中相应的元素;

最后打印结果那里修改下即可。

修改如下:


#include<stdio.h>
int main()
{
    int n,i=0,j=0;
    scanf("%d",&n);
    int a[n],b[n];
    
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    
    for(i=0;i<n-1;i++)
    {
        
        b[j]=a[i+1]-a[i];
      //  printf("i=%d,b[%d]=a[%d]-a[%d]=%d-%d=%d\n",i,j,i+1,i,a[i+1],a[i],b[j]);
        j++; 
        
    }
    
    for(j=0;j<n-1;j++)
    {
        if(j%3==0&&j!=0)
        {
            printf("\n");
        }
        
        if(j%3!=2&&j<n-2){ //当是每行前两个元素,且不是最后一个数组元素,则在输出数字后打印一个空格 
            printf("%d |",b[j]);
        }else{  // 每行最后一个数字或是数组最后一个数字,则只打印数字 
            printf("%d",b[j]);
        }
        
    }
}
 

img

给b数组赋值的时候内部不用再循环了,只要外面的大循环即可

img

#include<stdio.h>
int main()
{
    int n,i=0,j=0;
    scanf("%d",&n);
    int a[100],b[100];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
    {
        b[i]=a[i+1]-a[i];
    }
    for(j=0;j<n-1;j++)
    {
        if((j+1)%3==1)
        {
            printf("%d",b[j]);
        }
        else
        {
            printf(" %d",b[j]);
        }
        if((j+1)%3==0)
        {
            printf("\n");
        }
    }
}
/*10
5 1 7 14 6 36 4 28 50 100
*/