教你夺冠


私信TA

用户名:835685327

访问量:156788

签 名:

相互交流 相互学习

等  级
排  名 15
经  验 22543
参赛次数 0
文章发表 84
年  龄 0
在职情况 学生
学  校 辣鸡施工大学
专  业

  自我简介:

努力刷题 熟能生巧!

其实还是花了挺长时间做这个题的,感觉还是自己做的题太少了。做完后参考其他人的题解,发现自己的方法果然还是太老实,用于学习还好,要是真的笔试的时候就太不够聪明了。

继续刷题继续学习!!

参考代码如下:

#include <stdio.h>
#include <math.h>
#include <string.h>

int main()
{
    char str[100];
    int  flag;          //设立一个标志符,记录输入的算术式中运算符是‘+’还是‘-’
    int  rightnum = 0;  //答对的题目总数,初始化为0
    int  line = 0;      //输入的行数
    
    while (scanf("%s", str) != EOF && line <= 100) //以文件结束符结尾,且输入的行数要求不超过100行
    {
        //1) 首先将算术式中的'+'或'-',和'='换成空格符' ',并设立flag
        int len = strlen(str);
        int j;
        for (j = 0; j < len; j++)
        {
            if (str[j] == '+')
            {
                flag = 1; //若该算术式中运算符是'+',flag设为1
                str[j] = ' ';
            }
            if (str[j] == '-')
            {
                flag = -1; //若该算术式中运算符是'-',flag设为-1
                str[j] = ' ';
            }
            if (str[j] == '=')
            {
                str[j] = ' ';
            }
        }
        //此时该算术式已经变成形式“a b c”的字符串,a、b、c均为数

        //2) 接下来利用strtok分隔字符串,分割三次,分割为三个字符串,并分别转化为整型数字
        char *token1, *token2, *token3;
        int a, b, c;
        token1 = strtok(str, " ");
        a = atoi(token1);

        token2 = strtok(NULL, " ");
        b = atoi(token2);

        token3 = strtok(NULL, " ");
        c = atoi(token3);

        if (a > 100 || b > 100) //题目要求,a和b不能超过100,若不满足,则跳出这次循环
        {
            continue;
        }
        
        //3) 根据flag标记,来验证所输入算术式是否正确
        if (flag == 1) //加法运算
        {
            if ((a + b) == c)
            {
                rightnum++;
            }
        }

        if (flag == -1) //减法运算
        {
            if ((a - b) == c)
            {
                rightnum++;
            }
        }

        line++; //输入行数+1,题目要求不能输入超过100行
    }

    printf("%d\n", rightnum);

    return 0;
}

欢迎留言交流 相互学习!

 

0.0分

3 人评分

  评论区

  • «
  • »