做这个程序花了我一个小时的时间,在这个程序里增加了一些功能:1.增加了真分数四则运算的功能 2.增加了可定制出题数量的功能(而不仅限于30道)
遇到的难点及其解决方案:
1.为了能支持真分数计算,我不得不放弃个人项目1中的方法(但整数运算不用改变)而改变一下编程思路,因为现在有四个整体变量,而且比较两次大小,每次比较把数小的放在前面作为分子,显然用以前的整体输出不太合适了。所以我选择分开输出,首选先比较两个随机变量,然后以分数的形式输出它们,然后通过switch函数随机输出加减乘除符号,最后再比较两个随机变量,然后以分数的形式并加上"=\t\t"后输出它们,就这样分三步去输出一个公式。
2.定制出题需要修改一下for循环语句,把30改为一个未知量m,然后通过scanf键盘输入进而对m进行赋值。选择整数计算和真分数计算我使用了if语句,如果键入1就是整数计算,如果键入2就是真分数计算。
代码如下:
#include<stdio.h> #include<Windows.h> #include<time.h> void main() { int a, b, c, d, e, f, g, h, i, m, n; printf("请输入题目数量:\n"); scanf("%d",&m); printf("请选择计算类型(1.整数 2.真分数):"); scanf("%d",&n); srand(unsigned( time(NULL))); if(n == 1) { for(i = 0; i < m; i++) { a = rand() % 100; b = rand() % 100; c = rand() % 4; switch (c) { case 0:printf("%d + %d =\t\t",a,b); break; case 1:if (a < b) { d = a; a = b; b = d; } printf("%d - %d =\t\t", a, b); break; case 2:printf("%d * %d =\t\t",a,b); break; case 3: while (b == 0) { b = rand() % 100; } printf("%d / %d =\t\t", a, b); break; } } system("pause"); } else { for(i = 0; i < m; i++) { e = rand() % 100; f = rand() % 100; g = rand() % 100; h = rand() % 100; c = rand() % 4; if(e >= f) printf("%d/%d",f,e); else printf("%d/%d",e,f); switch (c) { case 0:printf("+");break; case 1:printf("-");break; case 2:printf("*");break; case 3:printf("/");break; } if(g >= h) printf("%d/%d=\t\t",h,g); else printf("%d/%d=\t\t",g,h); } system("pause"); } }
运行结果如下:
其中我还学会了使用“\t\t”(我以前是\n,发现转行符号导致公式太占空间),而使用空格符号可以改善公式的排列,美观而不占用空间,这是个人项目1中没有的。