作业二:个人编程项目——四则运算
题目:
- 自动生成四则运算题目
基本要求:
- 除了整数以外,还能支持真分数的四则运算。
- 对实现的功能进行描述,并且对实现结果要求截图。
编程环境:
- 本次编程使用的是C语言,编程软件使用的是C-free5。
主要功能:
- 使用者输入所需要的题目数量,程序自动生成所需数量的四则运算题目(其中包括整数与真分数的加减乘除运算)。
设计思想:
- 首先,看到题目的时候,由于是程序自动生成数字,所以必然需要 rand()函数来为因数随机产生各种数字,而加减乘除四个符号的随机也需要利用随机函数进行选择。
- 因为有四个运算符号,所以需要用到switch()来进行选取。
- 由于需要分数,随机数字需要4个,每2个合成一个分数。
- 在设计中,为了简化题目,便于计算,利用调用函数计算出分数的分子分母的最大公约数,然后计算出分数的最简分数。
程序运行代码:
1 #include"stdio.h" 2 #include"stdlib.h" 3 #include"time.h" 4 5 int max(int a,int b) 6 { 7 int k,l,p; 8 if(a<b){l=a;a=b;b=l;} 9 while(b!=0) 10 { 11 k=a%b;a=b;b=k; 12 } 13 p=a; 14 return p; 15 16 } 17 main() 18 { 19 int a,b,c,d,t,k,m,p; 20 int *p1; 21 srand((int)time(NULL)); 22 printf("请输入需要的题数\t"); 23 scanf("%d",&k); 24 for(int i=0;i<k;i++) 25 { 26 a=rand()%100+1; 27 b=rand()%100+1; 28 c=rand()%100+1; 29 d=rand()%100+1; 30 t=rand()%8; 31 switch(t) 32 { 33 case 0:printf("%d + %d=\n",a,b);break; 34 case 1:{ 35 if(a<b){m=a,a=b,b=m;} 36 printf("%d - %d=\n",a,b);break; 37 } 38 case 2:printf("%d × %d=\n",a,b);break; 39 case 3:printf("%d ÷ %d=\n",a,b);break; 40 case 4:{ 41 if(a>b){m=a,a=b,b=m;} 42 if(c>d){m=c,c=d,d=m;} 43 a=a/max(a,b); 44 b=b/max(a,b); 45 c=c/max(c,d); 46 d=d/max(c,d); 47 printf("%d/%d + %d/%d=\n",a,b,c,d);break; 48 } 49 case 5:{ 50 if(a>b){m=a,a=b,b=m;} 51 if(c>d){m=c,c=d,d=m;} 52 a=a/max(a,b); 53 b=b/max(a,b); 54 c=c/max(c,d); 55 d=d/max(c,d); 56 printf("%d/%d - %d/%d=\n",a,b,c,d);break; 57 } 58 case 6:{ 59 if(a>b){m=a,a=b,b=m;} 60 if(c>d){m=c,c=d,d=m;} 61 a=a/max(a,b); 62 b=b/max(a,b); 63 c=c/max(c,d); 64 d=d/max(c,d); 65 printf("%d/%d × %d/%d=\n",a,b,c,d);break; 66 } 67 case 7:{ 68 if(a>b){m=a,a=b,b=m;} 69 if(c>d){m=c,c=d,d=m;} 70 a=a/max(a,b); 71 b=b/max(a,b); 72 c=c/max(c,d); 73 d=d/max(c,d); 74 printf("%d/%d ÷ %d/%d=\n",a,b,c,d);break; 75 } 76 } 77 } 78 return 0; 79 }
程序运行截图:
总结:
这次作业我认为比较简单,在最开始的设计中,只有整数的加减乘除运算,只用到了3个rand()函数(2个因数的随机,1个符号的随机),然后利用switch输出不同符号之间加减乘除的式子。之后加入了分数的运算,然后出现了设计时的第一个问题,分数不是一个参数,导致原本的输出语句没办法输出a+b=这样的式子,于是我想到了加入更多的case,来将分数的计算加入进去,但这样就出现一个问题,case太多,导致了程序复杂化,我还没有想到更好的解决方法。最后,在测试时我发现分数并不是真分数,并且可以进行约分,我又将对分数的化简与分母比分子大这样的限制加入到程序中,变成现在的程序。
这个程序还不不算很完善,还有很多能够增加和改进的地方,希望以后等我的能力提升了可以设计出更实用,更简洁的程序出来。