原题链接:弟弟的作业
解题思路:
此方法在全部输入后,再根据换行符分别判断每一个算式;
用控制语句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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
@结城 是一个字符,如果用字符调用就看做一个字符,比如printf("%c",'\n');就是换行了。 但是在字符串中,在printf("%s","\n");是两个字符处理的,字符串自动加空字符,也就是由\n\0构成的字符串,还是以一个字符处理的。