这个是题目:
#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]);
}
}
}
给b数组赋值的时候内部不用再循环了,只要外面的大循环即可
#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
*/