首页 新闻 会员 周边

帮我解释解释这里,代码 C语言

0
悬赏园豆:15 [已解决问题] 解决于 2015-12-25 12:53

先看下面两个代码

 

#include<stdio.h>
int main()
{
int x[1005],y[1005],sum[1005];
int n=0,i=-1;
do
{
i++;
scanf("%x%x",&x[i],&y[i]);
sum[i]=x[i]+y[i];
n=i;
}while(x[i]!=0&&y[i]!=0);
for(int j=0;j<n;j++)
{
printf("%d\n",sum[j]);
}
return 0;
}

 

#include<stdio.h>
int main()
{
int x[1005],y[1005],sum[1005];
int n=0,i=0;//不同之处
do
{
++i;//不同之处
scanf("%x%x",&x[i],&y[i]);
sum[i]=x[i]+y[i];
n=i;
}while(x[i]!=0&&y[i]!=0);
for(int j=0;j<n;j++)
{
printf("%d\n",sum[j]);
}
return 0;
}

  为什么以上两个代码,第一个可以,而第二个就会出错。。。。

Akemo的主页 Akemo | 初学一级 | 园豆:110
提问于:2015-12-24 23:34
< >
分享
最佳答案
0
#include<stdio.h>
int main()
{
int x[1005],y[1005],sum[1005];
int n=0,i=-1;      
do
{
i++;         // =======> -1 + 1 = i = 0
scanf("%x%x",&x[i],&y[i]);
sum[i]=x[i]+y[i];     // ==========> 从sum[0]开始赋值
n=i;
}while(x[i]!=0&&y[i]!=0);
for(int j=0;j<n;j++)
{
printf("%d\n",sum[j]);      // 从 sum[0] 开始取值
}
return 0;
}

 

#include<stdio.h>
int main()
{
int x[1005],y[1005],sum[1005];
int n=0,i=0;//不同之处
do
{
++i;//不同之处     ===========》 0 +1 = i = 1
scanf("%x%x",&x[i],&y[i]);
sum[i]=x[i]+y[i];    // ==========》 从sum[1] 开始赋值
n=i;
}while(x[i]!=0&&y[i]!=0);
for(int j=0;j<n;j++)
{
printf("%d\n",sum[j]);   // ======》 从 sum[0] 开始取值, sum[0] 却没有被赋值
}
return 0;
}
收获园豆:14
米修君 | 小虾三级 |园豆:553 | 2015-12-25 12:26

第一个i=-1,i++不应该是先执行语句再加1吗,那应该是先执行sum[-1],执行完sum[-1]后再使i=i+1;   不应该是这样吗?我理解错在哪?

Akemo | 园豆:110 (初学一级) | 2015-12-25 12:35

@Akemo:

”i++不应该是先执行语句再加1吗“ 这句话没错,错的是你对"语句"的理解,

在这段代码里,"语句"指的就是"i++;"这一句, 而不是下面的那些(;号后面的那些已经是别人家的语句了)

米修君 | 园豆:553 (小虾三级) | 2015-12-25 12:40

@米修君: 。。好钟意的回答,赞一个!!!那第一个里面,i=-1,++i也是可以的,是吗?

Akemo | 园豆:110 (初学一级) | 2015-12-25 12:48

@Akemo: 

int i=0;
printf("%d\n",i);     // 0
printf("%d\n",i++); // 0  ===> 先打印i,再把i+1
printf("%d\n",i);     // 1


int i=0;
printf("%d\n",i);     // 0
printf("%d\n",++i); // 1  ===》先把i+1, 再打印i
printf("%d\n",i);     // 1
米修君 | 园豆:553 (小虾三级) | 2015-12-25 12:49

@Akemo: 是的

米修君 | 园豆:553 (小虾三级) | 2015-12-25 12:50
其他回答(1)
0

第二个程序初始

i=0;

++i  // i=1

sum[0] = ? 

你输出未初始化的sum[0],自然会出错。

收获园豆:1
supervsky | 园豆:144 (初学一级) | 2015-12-25 06:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册