第一周老师要求我们编写了简单的30道加减法题,第二周老师提高了对我们的要求,要求我们编写一个四则运算的程序。参考了其他的同学的想法,我的想法是先随机生成一个数,然后把这个数进行拆分,生成运算式。代码如下:
// second.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdlib.h" #include "time.h" typedef unsigned char Operator; #define Judge(OP1,OP2) (((Operator)(OP1)>>1<(Operator)(OP2)>>1)?true:false) void Split(Operator OP,int &a,int &b,int num) { switch(OP) { case 0: { if(num) { a=rand()%(num+1); b=num-a; } else a=b=0; }break; case 1: { if(num) { a=num+rand()%100; b=a-num; } else a=b=rand()%100; }break; case 2: { if(num) { int i; for(i=1;i<num;i++) if(!(num%i)) if(rand()%2) break; a=i,b=num/i; } else { if(rand()%2) a=rand()%100,b=0; else b=rand()%100,a=0; } }break; case 3: { if(num) { a=num*(1+rand()%10+rand()%10); b=a/num; } else a=0,b=rand()%100+1; } } } void Printf_OP(Operator OP) { switch(OP) { case 0: printf("+");break; case 1: printf("-");break; case 2: printf("*");break; case 3: printf("/");break; } } void Printf_equation(Operator Parent,int num,int OP_num) { if(!OP_num) { printf("%d",num); return; } Operator here=rand()%4; int a,b,OP_n1,OP_n2; OP_num--; Split(here,a,b,num); Split(0,OP_n1,OP_n2,OP_num); if(Judge(here,Parent)) { printf("("); Printf_equation(here,a,OP_n1); Printf_OP(here); Printf_equation(here,b,OP_n2); printf(")"); } else { Printf_equation(here,a,OP_n1); Printf_OP(here); Printf_equation(here,b,OP_n2); } } int main(int argc, char* argv[]) { int x[100],y[100]; srand((unsigned)time(NULL)); for(int i=1;i<=30;i++) { int num=rand()%100; x[i]=num; printf("%d ",i); Printf_equation(0,num,1+i/8); printf("=? "); } for(i=1;i<=30;i++) { printf("请按题号答题: "); printf("%d ",i); scanf("%d",&y[i]); if(y[i]==x[i]) { printf("恭喜你!回答正确! "); } else { printf("答案错误!正确答案为%d ",x[i]); } } return 0; }
这次编程让我知道了编程的方式有很多种,编程的思路也是千变万化的,每一种思路都是可行的,只是看你个人的习惯,各种方法要巧妙运用,以后我要加大编写的代码量,只有编写的代码多了,才能熟能生巧,以后碰到各种难题都能迎刃而解。