原题链接:弟弟的作业
解题思路:
此方法在全部输入后,再根据换行符分别判断每一个算式;
用控制语句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; }
0.0分
25 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复