小学生四则运算程序
Posted 自由jay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小学生四则运算程序相关的知识,希望对你有一定的参考价值。
需求分析:
为小学生能够出四则运算的题,并且能对其所答的答案进行判断,如答错能显示正确答案。
代码设计:
生成随机数和运算符:
int convert(ZX number[100]) { stack<ZX>s2; for(int i=0;i<t;i++) { if(number[i].b==1)//操作数 s2.push(number[i]); else { if(number[i].a==\')\') { while(s1.top().a!=\'(\') { s2.push(s1.top()); s1.pop(); } s1.pop(); } else if(s1.empty()||s1.top().a==\'(\'||number[i].a==\'(\') s1.push(number[i]); else { if(number[i].b==0&&(number[i].a==\'*\'||number[i].a==\'/\')&&(s1.top().a==\'+\'||s1.top().a==\'-\')) s1.push(number[i]); else { s2.push(s1.top()); s1.pop(); i--; } } } } while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } while(!s2.empty()) { ZX s=s2.top(); s2.pop(); s1.push(s); } ZX c1; int c2,c3,c4; stack<int>s3; while(!s1.empty()) { c1=s1.top(); s1.pop(); if(c1.b==1) s3.push(c1.a); else { c2=s3.top(); s3.pop(); c3=s3.top(); s3.pop(); switch(c1.a) { case \'+\':c4=c3+c2;break; case \'-\':c4=c3-c2;break; case \'*\':c4=c3*c2;break; case \'/\':c4=c3/c2;break; } s3.push(c4); } } return s3.top(); }
判断数字或括号前后面所跟的参数:
void passkh(ZX number[100])//去括号 { for(int i=1;i<t-1;i++) { number[i-1].a=number[i].a; number[i-1].b=number[i].b; } t-=2; } void aftersz(ZX number[100])//数字后跟什么 { int i=rand()%10; if(i<=2) { int j=rand()%4; switch(j) { case 0:number[t].a=\'+\';break; case 1:number[t].a=\'-\';break; case 2:number[t].a=\'*\';break; case 3:number[t].a=\'/\';break; } number[t].b=0; t++; afterfh(number); } else if(i>=3&&i<=6) { if(n1==1) { aftersz(number); } else return ; } else//右括号 { if(n>0&&number[t-2].a!=\'(\'&&number[t-2].b!=0) { number[t].b=0; number[t].a=\')\'; n--; t++; aftersz(number); } else aftersz(number); } } void afterfh(ZX number[100])//括号后跟什么 { int p=rand()%10; if(p>=3)//数字 { number[t].b=1; number[t].a=rand()%100; t++; n1++; aftersz(number); } else//左括号 { number[t].b=0; number[t].a=\'(\'; n++; t++; afterfh(number); } }
随机生成四则运算试子并让学生进行答题并判断,如果答错显示正确答案。
int main() { printf("下面是数学题请同学进行答题:\\n"); printf("\\n"); /*随机生成一个四则运算(100以内) 第一位 左括号(0-2) 数字(3-9) 数字后面是+-/*(0-2) 什么都没有(3-6) 右括号(7-9) 右括号后面 +-/*(0-2) 什么都没有(3-6) 右括号(7-9) +-/*后面 左括号(0-2) 数字(3-9) 左括号后面 左括号(0-2) 数字(3-9) */ while(1) { n1=0,n=0; ZX number[100]; t=0; afterfh(number); while(n>0) { number[t].a=\')\'; number[t++].b=0; n--; } while(number[0].a==\'(\'&&number[0].b==0&&number[t-1].b==0&&number[t-1].a==\')\') passkh(number); while(number[t-3].a==\'(\'&&number[t-3].b==0) { number[t-3].a=number[t-2].a; number[t-3].b=number[t-2].b; t-=2; } for(int i=0;i<t;i++) { if(number[i].b==0) printf("%c",number[i].a); else printf("%d",number[i].a); } printf("\\n"); printf("请作答:\\n"); int p,q=convert(number); scanf("%d",&p); if(p==q) printf("回答正确\\n\\n"); else printf("回答错误 正确结果为:%d\\n\\n",q); } return 0; }
测试结果:
ssh:git@git.coding.net:ziyoujay/sizeyunsuan.git
以上是关于小学生四则运算程序的主要内容,如果未能解决你的问题,请参考以下文章