C语言问题~~~~

#include<stdio.h>
main()
{ 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")
}
如果从第一列开始输入数据2473;则程序的输出结果是多少。。请说明下。谢谢

输出结果是:668977

输入2473
while((c=getchar())!='\n')
先读第一个字符 c = 2
switch(c-'2') 是0
所以是 case 0:因为case 0没有break,所以会执行下一个case 1:中的语句putchar(c + 4)(打印一个6),执行完后还是没有break,继续执行下一个case 2:中的语句putchar(c + 4)(打印一个6),然后break,结束。(switch的穿透)

接着继续
while((c=getchar())!='\n')
读出下一个字符 c = 4
switch(c-'2') 是2
所以是 case 2:putchar(c + 4)(打印8),break,结束。

while((c=getchar())!='\n')
读出下一个字符 c = 7
switch(c-'2') 是5
所以是 default :putchar(c+2);(打印9),break,结束。

while((c=getchar())!='\n')
读出下一个字符 c = 3
switch(c-'2') 是1
所以是 case 1 :putchar(c+4);(打印7),没break,继续 case 2:putchar(c+4);(打印7),break;结束。

while((c=getchar())!='\n')
读出下一个字符 c = '\n',循环结束

(由于没有putchar打印过程中没有换行,所以打印出来的在一行:668977)

执行 printf("\n");
程序结束。
(case 0后面应该是冒号“:”,不是分号)
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-04
输出: 668977
下面在代码中解释:
void main()
{
int c;
while((c=getchar())!='\n')
{
switch(c-'2') //输入'2',匹配case 0
//输入'4',匹配case 2
//输入'7',匹配default
//输入'3',匹配case 1
{
case 0: //输入'2',这里没有break;,继续执行case 1,
case 1:putchar(c+4); //输入'2', 输出6;,继续执行case 2,
//输入'3',输出7,继续执行case 2
case 2:putchar(c+4);break;//输入'2',输出6,执行break;脱离switch,继续循环,
//输入'4'时,输出8,脱离switch,继续循环,
//输入'3'时,输出7,脱离switch,继续循环,
case 3:putchar(c+3);
default :putchar(c+2);break;//输入'7'时,输出9,脱离switch,继续循环,
}
}
printf("\n");
}

计算机有关c语言的一些问题选择 各位大大 求帮忙~~~
第一题:d 理由:3\/2的结果是1,因为除号两边均是整型数据,故结果也是整形,又因为X是双精度浮点型,C编译系统会自动把1转换成double型后在参加运算。故结果是double数据 第二题:a 理由:根据运算符的优先级,先运算括号里面的,(int)(x + y)结果是7,接着从左到右运算加号后面的,因为他们...

C语言问题~~~
所以是 default :putchar(c+2);(打印9),break,结束。while((c=getchar())!='\\n')读出下一个字符 c = 3 switch(c-'2') 是1 所以是 case 1 :putchar(c+4);(打印7),没break,继续 case 2:putchar(c+4);(打印7),break;结束。while((c=getchar())!='\\n')读出下一...

C语言~~~问题
-16啊。首先要计算x+x,然后是x-=8+8,x=8-16=-8,然后是x+=-8,此时x=-8,那么x=x+(-8),也就是x=-8+(-8),x=-16啊

C语言问题~~~
printf("a%c b%c\\tc%c\\tabc\\n",c1,c2,c3);printf输出。输出“ ”里是值。%c表示输出字符型数据。\\t表示横向跳若干格。\\n表示回车换行。这里要清楚转义字符\\?形式?是t呀n呀等。。。看下转义字符就明白了。还有%?型输出类型?是c呀d呀等。看下printf输出函数就行了。那有。明白这些,...

C语言的小问题~~~
"%c",这个参数表示输出结果是字符型Char。那么当然要输出一个字符了。'G'+'a'-'A'这三个字符做“+”和“-”的时候是按照ASCII码去计算的。因为小写字母的ASCII 比对应的大写字母要大一个常量,好像是32。所以就可以把‘G’转化为了'g'。

C语言的问题~~~
void main(){ int age;printf("请输入年龄:");scanf("%d",&age);printf((age >= 18 && age <= 20) ? "A" : "B");\/\/三元运算符->> (条件语句) ? 操作数1 : 操作数2 当条件为True是返回 操作数1 当条件为false是返回 操作数2 } ...

C语言的小问题~~
1。a是二维数组的首地址,其类型是int**,p的类型是int*,不同,不能赋值 q[i]是int*,a[i]也是int*,是可以赋值的 2。由于k++返回的是自增前的值,即0,为假,直接跳转,也就不再执行后面的自增了,所以是2 你在调试时可以打开汇编窗口,代码如下:4: while(k++&&n++>2);00401036...

C语言的问题~~~
函数里面a和b是两个指针变量,用来存放变量在内存中的地址,而且a和b都是定义在函数里面的,函数的作用只是交换了a和b的值,也就是本来a是存放x的地址,b是存放y的地址,函数运行以后,a存放y的地址,b存放x的地址,然而x和y没有变,所以无论怎么调用,输出都是3 5 ...

C语言问题~~~
算y=(x++)+(--x)时,等号右边的式子要先从左边算,x为10时,--x是9,然后x++与此时的x值相等,即9,所以y为18;x经一次自减和一次自加,值不变,仍为10。结果是10,18

几道C语言的入门问题,给过程,在线等
1、C A选项表示8进制的1;B选项表示十六进制的1;C选项错误,0开头的表示八进制的整数常量,范围是0-7,08显然超过了8进制的表示范围;D选项表示十进制的8;2、B f表示单精度,不写的话默认都是双精度;3、0X10;两个十六进制的数进行按位与运算,首先把两个十六进制数化成二进制OX14:0010 ...

相似回答
大家正在搜