C语言 自增自减问题(能解决这个问题的肯定是高手)

发布时间:2024-05-18 14:13 发布:上海旅游网

问题描述:

main()
{ int a[5]={1,2,3,4,5},b[5]={5,4,3,2,1},i=0;
while(a[i++]=b[i]);
for(i=0;i<5;i++) printf("%d",a[i]);
} 有谁能说出这个程序是什么功能? 如果第3行写成while(a[i]=b[i++);有什么变化?为什么? 这是老师讲到的问题当时有点不明白 请教高人指点(分值不多了)

问题解答:

问题1:a[5],b[5]两数组为字符数组,不是字符串,程序应改为:
main()
{ int a[5]={1,2,3,4,5},b[5]={5,4,3,2,1},i=0;
while(a[i++]=b[i]) if (i>=5) break;
for(i=0;i<5;i++)
printf("%d",a[i]);
}
结果54321

问题2:
main()
{ int a[5]={1,2,3,4,5},b[5]={5,4,3,2,1},i=0;
while(a[i]=b[i++]) if (i>=5) break;
for(i=0;i<5;i++)
printf("%d",a[i]);
}
结果15432

原因:
while(a[i]=b[i++]) 中的表达式a[i]=b[i++]不是独立的,先计算b[i++],表达式值为b[i],i自加,再赋值给a[i].
实际为a[i+1]=b[i],例如a[1]=b[0],a[2]=b[1],.......所以问题2:结果15432

那个相当于赋值语句,while(a[i++]=b[i]),这个里面包括了赋值和循环两个功能,把b数组的值赋给a数组,等价于
for(i=0;i<5;i++)
a[i]=b[i]
后面的如果改了,就是把a数组的值赋给b数组…
再补充下吧,遇到这种问题,先看是条件判断还是赋值,即是=还是==,前者是赋值,后者是关系运算,分析好语句的循环条件,上面的那条语句没说条件,条件一直为真…一直循环
只是个人见解,有问题还请指正,希望能帮你…

main()
{
int a[5]={1,2,3,4,5},b[5]={5,4,3,2,1},i=0;

while(a[i++]=b[i]); //这句是把b这个数组复制给a这个数组一个一个的复制
i++的意思就是先用了再加.++i的意思是先加了再用

for(i=0;i<5;i++) printf("%d",a[i]); 这句的意思当然就是一个循环输出a数组的值啦
}

如果第3行写成while(a[i]=b[i++]);有什么变化...这是把b的值复给a....

是个死循环,条件永远是真,循环的还是个空语句……
for语句都执行不到

热点新闻