#include <stdio.h>
#define MAXLEN 80
main()
{int k=0,number=0;
char str[MAXLEN];
while((str[k]=getchar())!='#')
k++;
str[k]='\0';
for(k=0;str[k]!='\0';k++)
if(str[k]>='0'&& str[k]<='9'||str[k]=='A'||str[k]=='B')
if(str[k]>='0'&& str[k]<='9')
number=number*12+str[k]-'0';
else if(str[k]=='A'||str[k]=='B')
number=number*12+str[k]-'A'+10;
else ;//第15行
else break; //第16行
printf("%d\n",number);
}
1、程序运行时,输入10#,输出:12
2、程序运行时,输入1a0#,输出:1
3、第16行改为“;”后,程序运行时,输入A*0#,输出:120
4、第16行改为“else break;”删除第15行后,程序运行时,输入1b0#,输出:12
?
c语言题目 高手请进 谢谢
答案:1 悬赏:0 手机版
解决时间 2021-07-26 03:49
- 提问者网友:藍了天白赴美
- 2021-07-25 15:49
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-07-25 16:18
你是不是想自己发明个“12进制”出来啊?
你的程序有很多缺陷:
1、无法自动排除非法输入,
while((str[k]=getchar())!='#')
k++;
仅仅判断了#为结束符,假如我输入除了0~9,A~B以外的字符(比如退格键),还是照单全收,需要等到后面的程序来处理,这样的感觉很差劲,另外,一般习惯是用回车键结束输入的,你不觉得用#很别扭吗?
这个问题先放一边,下面的问题更大。
2、条件语句混乱
首先,第10行的if(str[k]>='0'&& str[k]<='9'||str[k]=='A'||str[k]=='B')是多余的,因为你这里的条件又在后面重新分别出现,在多条件判断同时出现&&和||时,应当适当地添加括号来表达清楚运算优先顺序以免短路效应造成逻辑混乱,当然,既然是多余的就不讨论它了。
3、疏忽了大小写的情况,你整个程序就只接受数字键和A,B,却忘记了a,b,这种错误很低级啊。
至于那什么15行16行的疑问,只要你理解和熟悉了 if 和 else 的配对顺序,自然就迎刃而解了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯