第二题:if的作用范围是其后面的第一个语句,如果想要if作用多个语句,应用“{}”,例if(a<c&&b<c)
{
t=bb=aa=t
}。而你的程序没加“{}”,所以相当于:
main()
{
int
a=3,b=4,c=5,t=99
if(b<a&&a<c)
t=a
a=cc=t
if(a<c&&b<c)
t=b
b=aa=t
printf("%d%d%d\n",a,b,c)
}
这样执行完第一个if后,不管()内的值是什么,都会执行a=cc=t
第二个if也一样。
第三题:你没有加在case
结束后加break所以当i==0时,执行完
case
0会继续执行case
2与default后的语句。如果想i为0时只执行case
0,应为:case
0:printf("%d",i)break
break是用来跳出循环体,或if()、switch()的,如:
for(i=0i<10i++)
{
printf("%d",i)
}
for(i=0i<10i++)
{
printf("%d",i)if(i==5)
break
}
第一个for语句会显示0-9;而第二个当i==5时遇到break,就跳出循环,不再执行i=6,7...9的情况。
对switch()语句也一样,遇到break就会跳出switch()后的{},否则就会按顺序的执行下去。
改如下:
int main(){int x,/*a,b,c,d,e,*/f
scanf("%d",&x)
if(x<1000||x>9999)
{
printf("Invalid data\n")
}
else
{
/*a=x/1000//这一段算法有误
e=x-1000*a
b=e/100
e=e-100*b
c=b/10
e=e-10*c
d=eprintf("%d %d %d %d\n",a,b,c,d)
f=(a+b+c+d)/2*/
f=(x/1000+x/100%10+x/10%10+x%10)%2//将上面注销的改成这一行
if(f==0)
{
printf("Yes\n")
}
else
{
printf("No\n")
}
}
return 0
}