解题思路:
本题由几个关键点:
字符转化为数字。
scanf()什么时候返回EOF,在回车后按ctrl+z就可以了
参考代码:
#include<stdio.h> #include<string.h> //包含strlen() int main() { int a,b,d,sum=0,i,len; //其中a为第一个数,b为第二个数 //d为a与b运算正确的数,len为最后弟弟输入的数的长度 char c,s[10]; //其中c为预算符,s为弟弟输入的结果 while(scanf("%d%c%d=%s",&a,&c,&b,s)!=EOF) //回车也不会结束,但ctrl+z可以让scanf()返回EOF //运行时到结束的时候按ctrl+z即可 { d=0; //初始化d很关键 len=strlen(s); //strlen()得弟弟输入的结果的长度,用到后面将字符转化为数里面 if(s[0]!='?') //如果是问号就直接跳过了 { for(i=0;i<len;i++) { d=d*10+s[i]-'0'; } if(c=='+') { if(a+b==d) sum++; } else if(c=='-') { if(a-b==d) sum++; } } } printf("%d\n",sum); return 0; }
大家看看还有什么不懂的,请在下面评论区留言
0.0分
32 人评分
一直在纠结最后可能是数字可能是问号该怎么处理
Cerain 2020-12-19 13:49:28 |
这道题就难在弟弟的计算结果可能是?这个字符,所以在定义代表弟弟的计算结果的变量时才用的char类型字符串,如果结果只用考虑数字就简单很多了。
for(i=0;i<len;i++) { d=d*10+s[i]-'0'; } 这是什么意思,s是结果的长度还是整个式子的长度呢? 谢谢
d=d*10+s[i]-'0' 表示看不懂
Mister-小方 2017-07-29 18:20:02 |
其实是acsii
正邪共存 2017-08-28 14:00:42 |
为什么不能直接写 d=s[ i ] - ' 0 '
黎明 2017-11-17 20:52:29 |
@abc000 可能不是一位数
我来啦 2020-01-15 13:49:24 |
就是把字符变成了数字(“123”-》123)所以要减‘0’;
Cerain 2020-12-19 14:00:08 |
s[i]包含一个字符,可能是0-9这10种可能(因为计算结果为?的情况已经在while循环内部的开头过滤掉,剩下的只能是一些属于数字的字符),s[i]-'0'是用s[i]对应的acsii码减去'0'对应的acsii码。只有确保计算结果一定是一位数时才能直接写d=s[i]-'0'。
Cerain 2020-12-19 14:14:04 |
你可以直接举例子进行理解,假如代表弟弟的某一行的计算结果的字符串s='123',首先,d初始化为0,接着for循环开始, i=0,d=d*10+s[0]-'0'=0*10+49-48=1; i=1,d=d*10+s[1]-'0'=1*10+50-48=12; i=2,d=d*10+s[2]-'0'=12*10+51-48=123, 最终字符串s='123'成功转化成数字意义上的123赋值给整型变量d。(注意,字符'0'一直到字符'9'的ascii码分别是48一直到57)
弟弟的作业 (C++代码)浏览:1342 |
C语言训练-立方和不等式 (C语言代码)浏览:779 |
九宫重排 (C++代码)浏览:2195 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:778 |
上车人数 (C语言代码)浏览:816 |
A+B for Input-Output Practice (II) (C语言代码)浏览:1043 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:583 |
K-进制数 (C语言描述,蓝桥杯)浏览:955 |
矩阵加法 (C语言代码)浏览:1768 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:676 |