求教几道C语言的问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 03:05:00
遇到几道题目不会做,请大家帮帮忙,谢谢

1.运行一下程序段后的输出结果是____

int a,b,x;
x=((a=3)>(b=5))?sizeof(a*4):sizeof(b*4);printf("%d",x);

答案是0

能不能解释一下这道题目

2.执行循环语句:
for(x=0,y=0;y!=250||x<4;x++)
y+=50;
其循环体共执行___次

答案是4次

可我总觉得是5次
请帮忙给出解题过程

3.若有一下程序段,w和k都是整型变量:
w=k;
LB:if(w==0) goto LE;
w--;printf("*"); goto LB;
LE:...
则不能与上面程序段等价的循环语句是___
A.for(w=k;w>=0;w--)printf("*");
B.w=k;while(w--!=0)printf("*");w++;
C.w=k;do{w--;printf("*"); } while(w!=0);
D.for(w=k;w;--w) printf("*");

答案是A,但我不太明白

1.是在考运算优先级
实际 : x=((a=3)>(b=5))? 才是第一个判断,X的赋值在此进行,后面的sizeof没有用,而3>5始终是false,相当于x是false,强制转换为int之后也就是0了

2.for(x=0,y=0;y!=250||x<4;x++)
这个是在考for语句的三段执行顺序,出循环之后先执行x++,再进行判断,那不就是4次吗

3.原语句是先判断再执行,可以排除C,D完全不对,只要W跟K不等于0,就不会执行.
A,B的差别很明显,考虑一下K为-1的情况,A不会执行,而B是死循环.哪个正确就很明显了,

楼上的问题3回答不对,呵呵,分归我了

1.这一题a=3是将3赋值给a,b=5是将5赋值给b,然后比较a与b的大小,(a=3)>(b=5)为假,注意?前面是一部分,此时把,(a=3)>(b=5)的值赋值给x所以x=0;其它的都是来迷惑你的
2.x=0时执行一次,x=1,y=50
再执行一次x=2,y=100
再执行一次x=3,y=150
再执行一次x=4,y=200
此时x<4为假,跳出
3.就是从w=k开始,每循环一次输出一个*,w减一,直到w=0了才去执行LE语句

第一题:
答案应该是2,我在tc试过了。sizeof是求字节运算符,a*4,b*4都是整型,占两个字节,所以x被赋值了2.
第二题:
4次。在第4次时,i等于3,y等于200。之后x++,i等于4,因为循环条件是x<4,所以跳出循环。
第三题:
A?你打错了吧,还是题错了?要是A的话,应该是for(w=k;w!=0;w--)printf("*");,当然也可以是 for(w=k;!w;w--)printf("*");
初始值w=k,如果w等于0,则跳出循环,如果w!=0,则执行循环体printf("*");在执行w--,准备下次循环条件判断。
这道题出得不好!程序当中应尽量避免出现goto语句!

准备考2