解题思路:使用bool函数判定字符串中的数字和运算符号,输入字符串后从第0个元素开始检查,遇到数字时完成int转化(char转int固定格式:chardigit-'0'),遇到运算符号时储存在局部变量中最后再进行判定。本来想直接scanf("%d%c%d=%d"),能省略掉大多步骤,但这样好像和最初做的一些入门简单题一样了。。。
注意事项:检查下每次输入时变量的重置;提取运算符时,使用n[i++]先对n[i]进行检验再递增i,而不是直接检验n[i++]。
参考代码:
#include
#include
#include
bool isNum(char c)
{
return c >= '0' && c <= '9';
}
bool isOperator(char c)
{
return c == '+' || c == '-';
}
int main()
{
char n[11];
int right = 0;
while (scanf("%s", n) != EOF)
{
int a = 0, b = 0, c = 0;//重置等式三个变量
int length = strlen(n);
int i = 0;
// 提取第一个数字
while (isNum(n[i]))
{
a = a * 10 + (n[i] - '0');
i++;
}
// 提取运算符号
char operator = n[i++];
// 提取第二个数字
while (isNum(n[i]))
{
b = b * 10 + (n[i] - '0');
i++;
}
// 提取等号和第三个数字
if (n[i] == '=')
{
i++;
if (isNum(n[i])) {
while (i < length && isNum(n[i]))
{
c = c * 10 + (n[i] - '0');
i++;
}
} else if (n[i] == '?')
{
c = -1; // 埋个错误值
}
}
if (isOperator(operator) && c >= 0 && c <= 200)//运算判定
{
int result = (operator == '+') ? a + b : a - b;
if (c == result)
{
right++;
}
}
}
printf("%d\n", right);
return 0;
}
0.0分
0 人评分
Cylinder (C语言描述,蓝桥杯)浏览:1279 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:750 |
C语言训练-亲密数 (C语言描述,反正怎么都能对)浏览:2256 |
幸运数 (C++代码)浏览:2982 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:456 |
C语言训练-最大数问题 (C语言代码)浏览:668 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:455 |
半数集问题 (C语言代码)浏览:968 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:717 |
剩下的树浏览:941 |