1 #include<stdio.h> 2 #include<stdlib.h> 3 #include <time.h> 4 int main(){ 5 srand(time(NULL)); 6 int sum=0,sum1,x,y; 7 float an[100000],a,b,c; 8 printf("请输入要随机几道计算题:"); 9 scanf("%d",&sum1); 10 printf("1.不带乘除法 2.带乘除法 请输入你的选择:"); 11 scanf("%d",&y); 12 if(y==1){ 13 while(sum<sum1){ 14 a=rand()%100; 15 b=rand()%100; 16 c=rand()%100; 17 switch(rand()%4){ 18 case 0:an[sum]=a+b+c; 19 if(an[sum]>100||an[sum]<0)break; 20 else{ 21 printf("%d:%.1f+%.1f+%.1f=\n",sum+1,a,b,c); 22 sum++; 23 break; 24 } 25 case 1:an[sum]=a+b-c; 26 if(an[sum]>100||an[sum]<0)break; 27 else{ 28 printf("%d:%.1f+%.1f-%.1f=\n",sum+1,a,b,c); 29 sum++; 30 break; 31 } 32 case 2:an[sum]=a-b-c; 33 if(an[sum]>100||an[sum]<0)break; 34 else{ 35 printf("%d:%.1f-%.1f-%.1f=\n",sum+1,a,b,c); 36 sum++; 37 break; 38 } 39 case 3:an[sum]=a-b+c; 40 if(an[sum]>100||an[sum]<0)break; 41 else{ 42 printf("%d:%.1f-%.1f+%.1f=\n",sum+1,a,b,c); 43 sum++; 44 break; 45 } 46 } 47 } 48 printf("答案如下:\n"); 49 for(int i=0;i<sum;i++)printf("%d:%.1f\n",i+1,an[i]); 50 } 51 if(y==2){ 52 while(sum<sum1){ 53 a=rand()%100+1; 54 b=rand()%100+1; 55 c=rand()%100+1; 56 switch(rand()%16){ 57 case 0:an[sum]=a+b+c; 58 if(an[sum]>100||an[sum]<0)break; 59 else{ 60 printf("%d:%.1f+%.1f+%.1f=\n",sum+1,a,b,c); 61 sum++; 62 break; 63 } 64 case 1:an[sum]=a+b-c; 65 if(an[sum]>100||an[sum]<0)break; 66 else{ 67 printf("%d:%.1f+%.1f-%.1f=\n",sum+1,a,b,c); 68 sum++; 69 break; 70 } 71 case 2:an[sum]=a-b-c; 72 if(an[sum]>100||an[sum]<0)break; 73 else{ 74 printf("%d:%.1f-%.1f-%.1f=\n",sum+1,a,b,c); 75 sum++; 76 break; 77 } 78 case 3:an[sum]=a-b+c; 79 if(an[sum]>100||an[sum]<0)break; 80 else{ 81 printf("%d:%.1f-%.1f+%.1f=\n",sum+1,a,b,c); 82 sum++; 83 break; 84 } 85 case 4:an[sum]=a+b*c; 86 if(an[sum]>100||an[sum]<0)break; 87 else{ 88 printf("%d:%.1f+%.1f*%.1f=\n",sum+1,a,b,c); 89 sum++; 90 break; 91 } 92 case 5:an[sum]=a+b/c; 93 if(an[sum]>100||an[sum]<0||c==0)break; 94 else{ 95 printf("%d:%.1f+%.1f/%.1f=\n",sum+1,a,b,c); 96 sum++; 97 break; 98 } 99 case 6:an[sum]=a-b*c; 100 if(an[sum]>100||an[sum]<0)break; 101 else{ 102 printf("%d:%.1f-%.1f*%.1f=\n",sum+1,a,b,c); 103 sum++; 104 break; 105 } 106 case 7:an[sum]=a-b/c; 107 if(an[sum]>100||an[sum]<0||c==0)break; 108 else{ 109 printf("%d:%.1f-%.1f/%.1f=\n",sum+1,a,b,c); 110 sum++; 111 break; 112 } 113 case 8:an[sum]=a*b+c; 114 if(an[sum]>100||an[sum]<0)break; 115 else{ 116 printf("%d:%.1f*%.1f+%.1f=\n",sum+1,a,b,c); 117 sum++; 118 break; 119 } 120 case 9:an[sum]=a*b-c; 121 if(an[sum]>100||an[sum]<0)break; 122 else{ 123 printf("%d:%.1f*%.1f-%.1f=\n",sum+1,a,b,c); 124 sum++; 125 break; 126 } 127 case 10:an[sum]=a*b*c; 128 if(an[sum]>100||an[sum]<0)break; 129 else{ 130 printf("%d:%.1f*%.1f*%.1f=\n",sum+1,a,b,c); 131 sum++; 132 break; 133 } 134 case 11:an[sum]=a*b/c; 135 if(an[sum]>100||an[sum]<0||c==0)break; 136 else{ 137 printf("%d:%.1f*%.1f/%.1f=\n",sum+1,a,b,c); 138 sum++; 139 break; 140 } 141 case 12:an[sum]=a/b+c; 142 if(an[sum]>100||an[sum]<0||b==0)break; 143 else{ 144 printf("%d:%.1f/%.1f+%.1f=\n",sum+1,a,b,c); 145 sum++; 146 break; 147 } 148 case 13:an[sum]=a/b-c; 149 if(an[sum]>100||an[sum]<0||b==0)break; 150 else{ 151 printf("%d:%.1f/%.1f-%.1f=\n",sum+1,a,b,c); 152 sum++; 153 break; 154 } 155 case 14:an[sum]=a/b*c; 156 if(an[sum]>100||an[sum]<0||b==0)break; 157 else{ 158 printf("%d:%.1f/%.1f*%.1f=\n",sum+1,a,b,c); 159 sum++; 160 break; 161 } 162 case 15:an[sum]=a/b/c; 163 if(an[sum]>100||an[sum]<0||b==0||b==0)break; 164 else{ 165 printf("%d:%.1f/%.1f/%.1f=\n",sum+1,a,b,c); 166 sum++; 167 break; 168 } 169 } 170 171 } 172 printf("答案如下:\n"); 173 for(int i=0;i<sum;i++)printf("%d:%.1f\n",i+1,an[i]); 174 } 175 return 0; 176 }
部分截图
刚开始我和我的搭档写的软件是一个简单的可以随机显示加减法题目的软件,这种简单的软件对于我和搭档这样写了一年半代码的人来说根本不是问题,不用分工合作,我的搭档一个人五分钟就写出来了,刚开始我们都十分自信,因为我们都认为逐渐改进程序,增加新的功能不过就是多添加几个循环而已。
接下来我们尝试增加程序的几个功能,比如题目避免重复还有具体的定制,我们一人负责一部分,我的想法是创建两个数组来记录下生成的题目,在下一次生成题目之前和上一次进行比较,重复则另随机函数重新生成,于是我就开始我增加代码的工作。当我准备把我的代码和我的搭档的代码整合到一块儿时,我发现他的思路和我的思路,不一样,他为了程序可以具体选择是否可以加乘除法写了两个循环,这样的话我把我的循环套上去就会产生bug,无奈我们只能重新写。
我们总结了经验,这一次我们事先彼此之间交换了对于这个程序的意见,最终确定了放弃循环,用switch,case方法来修改,最后我们花了比预期多出好几倍的时间才完成。
在写程序的过程中,有一次电脑突然产生bug,我们没来得及备份,导致修改的代码完全被重置。如果应用程序需要修改系统设置,记着应用开始前先保存设置,应用结束后要恢复设置,千万别污染环境。
我们发现其实写程序最困难的并不是写出无bug的代码,而是没有在编写程序之前确定编写程序的方向,在一开始我们写最基础的程序之前就应该构思好框架,这样以后就算是修改程序我们也可以有条不紊,我们应该养成这种写代码时的小习惯,同时也是好习惯。
现在是模块化程序设计的天下,应用程序要实现的目标就是金字塔尖,进行程序设计规划的意义就在于,对构成金字塔的基础模块进行划分,规划得越详细,模块分工越明确,越容易明白下一步该做什么,这好比搭积木的游戏,我们可以把你的积木块组合成各种各样的形状,但首先要熟悉每个积木块的功能。中国人讲究对称之美,用在编程里也很合适,如果程序里用到A循环嵌套B判断,B判断又包含C循环之类的结构,我们最好是使用缩进法,让A:ENDDO对齐A:DO,B:ENDIF对齐B:IF……诸如此类,依次缩进,总之对称就等于美观加易读。
我的搭档:1759131 徐梓渊