C语言习题~~~请教高手,急!!!

都有答案,但是不知道原因,帮忙分析一下哈
1.运行下面程序后,输出是( )。 main( )
{ int k=-3;
if (k<=0) printf("****\n")
else printf("####\n");
}
A) #### B) ****
C) ####**** D) 有语法错误不能通过编译
D
2.下面程序的输出结果是
#include <stdio.h>
main( )
{ int a=2,b=7,c=5;
switch(a>0)
{ case 1:switch(b<0)
{ case 1: printf("@"); break;
case 0: printf("!"); break;
}
case 0:switch(c==5)
{ case 0: printf("*"); break;
case 1: printf("#"); break;
default: printf("%%");break;
}
default: printf("&");
} printf("\n");
}
A) & B) !#&
C) %% D) @*&
B
3.运行下面程序时,若从键盘输入数据为"123",
则输出结果是( )。
main( )
{ int num,i,j,k,place;
scanf("%d",&num);
if (num>99)
place=3;
else if(num>9)
place=2;
else
place=1;
i=num/100;
j=(num-i*100)/10;
k=(num-i*100-j*10);
switch (place)
{ case 3: printf("%d%d%d\n",k,j,i);
break;
case 2: printf("%d%d\n",k,j);
break;
case 1: printf("%d\n",k);
}
}
A) 123 B) 1,2,3
C) 321 D) 3,2,1
C

第一题:D
if后面的输出语句后面没有分号。
第二题:B
帮你分析:
#include <stdio.h>
main( )
{ int a=2,b=7,c=5;
switch(a>0)
\*你先看这个,a>0为真,其值是1,可以看成switch(1)*\
{ case 1:switch(b<0)
\*执行这条语句,b<0为假,其值为0,同上,可看成switch(0)*\
{ case 1: printf("@"); break;
case 0: printf("!"); break;
\*执行这条语句,输出!*\
}
case 0:switch(c==5)
\*由于“case 1:switch(b<0)”语句没有break作结束,所以
继续执行这条语句,它的值为真,即1,看成switch(1)*\
{ case 0: printf("*"); break;
case 1: printf("#"); break;
\*执行这条语句,输出#*\
default: printf("%%");break;
}
default: printf("&");
\*语句“case 0:switch(c==5)”依然没有break作结束,所以
执行这条语句,输出&*\
} printf("\n");
}
第三题:C
帮你分析:
main( )
{ int num,i,j,k,place;
scanf("%d",&num);
\*首先,输入的是123给变量sum*\
if (num>99)
\*num是大于99的,这条语句成立*\
place=3;
\*执行这条语句,把3赋给变量place,
注意,只有当这条语句不成立的时候
才执行下面的两条分支语句!*\
else if(num>9)
place=2;
else
place=1;
i=num/100;
\*num的值是123,除100理论上应该是1.23,
但是num与100均是整型,两个整型相除在
C语言里只保留整数位,所以i=1*\
j=(num-i*100)/10;
\*j=(123-1*100)/10,j=(123-100)/10,
j=23/10,j=2,注意,23/10不是2.3而
是2,原理同上。*\
k=(num-i*100-j*10);
\*k=(123-1*100-2*10),
k=(123-100-20),
k=3。*\
switch (place)
\*还记得place是多少吗?是3,看上面的注释。
这个就可以看成switch(3)。*\
{ case 3: printf("%d%d%d\n",k,j,i);
break;
\*执行这条语句,依次输出3,2,1。遇到break语句,结束。
注意,输出语句的格式是%d%d%d,中间没有,或空格,我写
上,是方便你理解。*\
case 2: printf("%d%d\n",k,j);
break;
case 1: printf("%d\n",k);
}
}

我解释的还不够细啊?你别学了,真的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-06-09
1.第一题printf("****\n")后没有;直接由语法错误;
2.注意的是switch后的case语句中必须要有break作为结束标志,否则将一直往下执行下去;
3.关键的是i,j,k最后取的结果是整形,还有输出语句的格式是%d%d%d,中间没有,或空格,主要以其中间是否有符号为准!
第2个回答  2009-06-07
1、if (k<=0) printf("****\n")少了分号,若有分号,就是B
2、表达式(a>0)为真,即为1,进入case1,执行完case1,没有break,继续执行case0,defaul
3、num=123大于99,所以place=3;,进入case3 printf("%d%d%d\n",k,j,i);,剩下就是数学算式的计算
第3个回答  2009-06-09
好好看看书吧
第4个回答  2009-06-07
这种题还问,还没分,你死去算了
相似回答