设计一个系统,能够计算用户输入的代数表达式(混合四则运算),并能接收用户自己输入的运算结果同时给出用户计算正确与否的判断,具体要求如下:
1.用户循环输入不通的算术表达式(每个表达式以“#”结束),程序利用栈求解各个表达式的值;2.程序每计算完一个表达式,就要求用户输入自己的答案,并与程序运算结果比较,同时统计总题数和用户计算正确的题数;
3.用户输入“$”表示整个运算结束,此时要求程序给出用户的得分(用百分制表示,为用户计算正确的题数占总题数的百分比)。
【下了一个DEV C++,文件——>新建——>源代码——>F9】
#include "stdio.h"
#include "stdlib.h"
char s[50];
int tops;
float d[100];
int topd;
char number[10];
int num;
char c;
float ans[50];
float yours[50];
int count=0;
int right=0;
int token[7][7]={{1,1,-1,-1,-1,1,1},
{1,1,-1,-1,-1,1,1},
{1,1,1,1,-1,1,1},
{1,1,1,1,-1,1,1},
{-1,-1,-1,-1,-1,0,2},
{1,1,1,1,2,1,1},
{-1,-1,-1,-1,-1,2,0}};
int change(char x)
{
switch(x)
{
case '+': return 0;
case '-': return 1;
case '*': return 2;
case '/': return 3;
case '(': return 4;
case ')': return 5;
case '#': return 6;
}
}
void calculate()
{
float a,b;
b=d[--topd];
a=d[--topd];
switch(s[--tops])
{
case '+': d[topd++]=a+b;return;
case '-': d[topd++]=a-b;return;
case '*': d[topd++]=a*b;return;
case '/': d[topd++]=a/b;return;
}
}
int expression()
{
int i,j;
tops=0;
s[tops++]='#';
topd=0;
//c=getchar();
while(c!='#'||s[tops-1]!='#')
{
num=0;
if(c>='0'&&c<='9')
{
do
{
number[num++]=c;
c=getchar();
}while(c>='0'&&c<='9');
number[num]='\0';
d[topd++]=atof(number);
}
else
{
j=change(c);
i=change(s[tops-1]);
switch(token[i][j])
{
case -1: s[tops++]=c;
c=getchar();
break;
case 0: tops--;
c=getchar();
break;
case 1: calculate();
break;
}
}
}
ans[count]=d[topd-1];
printf("请输入您计算的结果:");
scanf("%f",&yours[count++]);
if(ans[count-1]==yours[count-1]) right++;
//printf("%d",d[topd-1]);
getchar();
}
int main()
{
int i;
printf(" ------计算表达式------\n使用说明:\n");
printf(" 1.请输入要计算的表达式,以#结尾,例如1+2#\n");
printf(" 2.结束计算请输入符号$\n");
printf(" 3.在表达式中可以运算括号,中括号[]和大括号{}统一使用小括号代替()!\n");
printf(" 4.程序输入格式错误时,将会自动结束程序,请注意格式正确!\n");
printf("请输入要计算的表达式,以#结尾。结束程序输入$。\n");
c=getchar();
while(c!='$')
{
expression();
printf("-------------------------------------------\n");
printf("请输入下一个表达式,以#结尾。结束程序输入$。\n");
c=getchar();
}
printf("\n\n ******您的成绩单*******\n");
printf("----------------------------------------\n");
printf(" 序 号 正确答案 您的答案 结 论\n");
for(i=0;i<count;i++)
printf("表达式%d %.2f %.2f %s\n",
i+1,ans[i],yours[i],ans[i]==yours[i]?"正确!":"错误!");
printf("----------------------------------------\n");
printf("解答题目总共为%d道,其中\n",count);
printf("正确解答%d道题,错误解答%d道题。\n *****最后得分为%d分!*****\n",
right,count-right,right*100/count);
printf("----------------------------------------\n");
getchar();
getchar();
}