解题思路:

此方法在全部输入后,再根据换行符分别判断每一个算式;

用控制语句while((c =getchar())!=EOF)输入算式;

递归处理每一个算式,记录运算符,选择运算,把字符型的运算数转换为数值;

期间记录正确的个数;

处理到最后面等于回车或'0'结束;


注意事项:
在提取算式时指针的移动;
M记录正确个数,x,y,z记录运算数;

参考代码:

#include <stdio.h>

int M = 0, i = 0, x = 0, y = 0, z = 0;


void transfer( char *s );


int main()
{
    char    c;
    char    a[1000];

    while ( (c = getchar() ) != EOF )
    {
        a[i] = c;
        i++;
    }
    a[i] = '\0';

    transfer( a );

    printf( "%d", M );

    return(0);
}


void transfer( char *s )
{
    x    = 0;
    y    = 0;
    z    = 0;


    int jiaorjian = 4;                  /* 用于记录运算符 */
    if ( (*s) == '\0' || (*s) == '\n' )
        return;

    while ( (*s) != '+' && (*s) != '-' )
    {
        x = x * 10 + (*s) - '0';
        s++;
    }

    if ( (*s) == '+' )
    {
        jiaorjian = 1;
    }                                /* +等于1 */
    else
    if ( (*s) == '-' )
    {
        jiaorjian = 0;
    }

    s++;
    while ( (*s) != '=' )
    {
        y = y * 10 + (*s) - '0';
        s++;
    }

    s++;

    while ( (*s) != '\n' )
    {
        if ( (*s) == '?' )
        {
            z = -1;
            s++;
        }else  { z = z * 10 + (*s) - '0';
             s++; }
    }

    s++;            /* 这里回车占两个字符所以还要++ */


    if ( z != -1 )  /* z==-1表示不会做 */
    {
        if ( jiaorjian == 1 )
        {
            if ( x + y == z )
                M++;
        }
        if ( jiaorjian == 0 )
        {
            if ( x - y == z )
                M++;
        }
    }


    transfer( s++ ); /* 递归处理 */

    return;
}


点赞(30)
 

0.0分

25 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 4 条评论

零露 3年前 回复TA
牛逼,被你搞这么复杂
结城 6年前 回复TA
@结城 谢谢Manchester同学
Manchester 6年前 回复TA
@结城 是一个字符,如果用字符调用就看做一个字符,比如printf("%c",'\n');就是换行了。 但是在字符串中,在printf("%s","\n");是两个字符处理的,字符串自动加空字符,也就是由\n\0构成的字符串,还是以一个字符处理的。
结城 6年前 回复TA
为什么回车是两个字节