初学者C语言程序改错题
找出程序中的错误,并改正:当从键盘输入数据时,依次输入2473并以Enter键结束,程序输出为668977。#include<stdio.h>voidmain(){int...
找出程序中的错误,并改正: 当从键盘输入数据时,依次输入2473并以Enter键结束,程序输出 为668977。 #include<stdio.h> void main(){ int c; while((c=getchar())!='\n') { switch(c-'2') ( case 0: case 1:putchar(c+4); case 2:putchar(c+4); case 3:putchar(c+3); default:putchar(c+2); } }printf("\n"); }
展开
1个回答
展开全部
首先我指出你书写的一个错误。switch(c-'2')下面那行的(
应该改成{
因为{是与default:putchar(c+2);下面出现的}进行配对的。
依次输入2473得到输出668977,只需修改一处地方。在case
2:putchar(c+4);后面加上
break;
分析如下:使用getchar输入,每次只能识别一个字符,而又使用了while循环,输入2473就相当于输入了4个数,while每次识别一个。
先分析输入2的情况:这里的2是字符'2',执行switch(c-'2'),‘2’-‘2’=0;因此要执行case
0的情况,case
0
和case
1
共用putchar(c+4),故2+4=6,要输出6,记住:输出的这个6其实是字符‘6’。然后继续执行case
2:putchar(c+4);输出第二个‘6’。这时后面加上了break;即跳出本层switch,本次while循环执行完毕。第一次循环完毕,输出了:66
然后是输入为4的情况:执行switch(c-'2'),‘4’-‘2’=2;所以执行case
2:putchar(c+4);即4+4=8,输出一个8(字符‘8’)。继续执行break;跳出本层switch,本次while循环执行完毕。第二次循环完毕,输出了:8
继续输入为7的情况:执行switch(c-'2'),‘7’-‘2’=5;要执行case
5,但本程序中并没有case
5,故执行缺省情况
default:putchar(c+2);‘7’+‘2’=‘9’,因此输出9(字符‘9’)。本次while循环执行完毕。第三次循环完毕,输出了:9
最后一个输入数3的情况:执行switch(c-'2'),‘3’-‘2’=1;所以执行
case
1:putchar(c+4);即‘3’+‘4’=‘7’,输出7(字符‘7’)。继续执行case
2:putchar(c+4);又输出了一个7(字符‘7’)。遇到后面的break;跳出switch,本次while循环结束。第四次循环结束,输出了:77
至此,全部四次循环均结束,所以最后的输出是668977.
应该改成{
因为{是与default:putchar(c+2);下面出现的}进行配对的。
依次输入2473得到输出668977,只需修改一处地方。在case
2:putchar(c+4);后面加上
break;
分析如下:使用getchar输入,每次只能识别一个字符,而又使用了while循环,输入2473就相当于输入了4个数,while每次识别一个。
先分析输入2的情况:这里的2是字符'2',执行switch(c-'2'),‘2’-‘2’=0;因此要执行case
0的情况,case
0
和case
1
共用putchar(c+4),故2+4=6,要输出6,记住:输出的这个6其实是字符‘6’。然后继续执行case
2:putchar(c+4);输出第二个‘6’。这时后面加上了break;即跳出本层switch,本次while循环执行完毕。第一次循环完毕,输出了:66
然后是输入为4的情况:执行switch(c-'2'),‘4’-‘2’=2;所以执行case
2:putchar(c+4);即4+4=8,输出一个8(字符‘8’)。继续执行break;跳出本层switch,本次while循环执行完毕。第二次循环完毕,输出了:8
继续输入为7的情况:执行switch(c-'2'),‘7’-‘2’=5;要执行case
5,但本程序中并没有case
5,故执行缺省情况
default:putchar(c+2);‘7’+‘2’=‘9’,因此输出9(字符‘9’)。本次while循环执行完毕。第三次循环完毕,输出了:9
最后一个输入数3的情况:执行switch(c-'2'),‘3’-‘2’=1;所以执行
case
1:putchar(c+4);即‘3’+‘4’=‘7’,输出7(字符‘7’)。继续执行case
2:putchar(c+4);又输出了一个7(字符‘7’)。遇到后面的break;跳出switch,本次while循环结束。第四次循环结束,输出了:77
至此,全部四次循环均结束,所以最后的输出是668977.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询