先把格式跟你调一下,看着头晕!
int x=0,y=2,z=3;
switch(x)
{
case 0:
switch(y==2)
{
case 1:printf("*");break;
case 2:printf("%");break;
}
case 1:switch(z)
{
case 1:printf("");
case 2:printf("");break;
case 3:printf("#");
}
main()
{
//2473
//668977
int c;
while((c=getchar())!='\n')
{switch(c-'2')
{
case 0:
case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break;
}
}
printf("\n");
}
第1题:
因为switch(y==2)的结果为真,在C里面真的值是1,所以运行
case 1:printf("*");
break;//退出最近的switch
继续运行
case 1:switch(z)//z的值是3,所以运行case 3:printf("#");
最终结果为:*#
第2题:
当程序遇到'\n'则退出,输入的是字符,运算的也是字符'2',而在ASCII码表里面0-9的数字是挨着的.所以在这里完全可以当作数值来运算.
输入2,switch(c-'2')结果是0,switch在没有遇到break和结束时会继续运行,所以要输出66.
输入4,switch(c-'2')结果是2,然后直接运行
case 2:putchar(c+4);break; 即输出('4'+'4'):8
输入7,switch(c-'2')结果是5,因为没有case 5,所以执行缺省default:putchar(c+2);break;即输出('9'+'2'):9
输入3,switch(c-'2')结果是1,执行
case 1:putchar(c+4);
case 2:putchar(c+4);break;遇到了break结束switch,所以输出:77
上面已经讲得很详细了,如果还不明白可以加我百度HI
x=0;y=2;z=3;
switch(x) 相当与switch(0)``选择从case0处执行
{case 0:switch(y==2) 相当与switch(1)``执行case1`
{case 1:printf("*");break; 输出*后跳出switch(y==2)
case 2:printf("%");break;
}
case 1:switch(z) 相当与switch(3)`执行case 3
{case 1:printf("");
case 2:printf("");break;
case 3:printf("#"); 输出# 你题目没写完啊```
2 `输入2473```首先2!='\n'
执行switch(c-'2') 也就是switch(0)`'2'代表字符2`
执行case0直到break
case 1:putchar(c+4);
case 2:putchar(c+4);break; `输出66
然后是4`!='\n'
执行switch(c-'2') 也就是switch(2)`
执行case2直到break
case 2:putchar(c+4);break; 输出8``
然后是7!='\n'
执行switch(c-'2') 也就是switch(5)`
执行case5没有就是default:putchar(c+2);break;
输出7```
最后3`执行case1到break输出77
答案668977
2、getchar()函数的意思是从输入流中一个一个的读取数据,然后进行运算由于你的switch()用的是ASII进行运算的那么就有2的ASII码是50,那么程序执行的是switch(c - ‘2’) = switch(50-50)执行case0、1、2,程序写c+4,c+4 66 到输出流中,然后break;对于4同样的程序运行的是switch(52-50)case2,程序输出的是c+4 = 4+4 =8 ,对于7运行的是55 - 50 = 5执行缺省的7+2 = 9,对于3运行51 -50 case1 case2,输出的是77
因此程序总的输出内容是668977,你可以试一下如果你单独的输入2,那么程序输出的是66
哦msdn中对于putchar的解释是Writes a character to a stream,意思是写一个字符到数据流中。
对于第一个我实在看不懂你写的啥东西。