第四次作业:四则运算
作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186
我的github地址:https://github.com/yellowjy/study
一、题目要求:
像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。
具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:
23 - 3 * 4 = 11
二、个人软件过程耗时估计与统计表
三、运行结果及主要代码
//产生必要的随机数
a = rand() % 99+1;//随机数a
b = rand() % 99+1;//随机数b
c = rand() % 99+1;//随机数c
o1 = rand() % 4+1;//随机产生第1个运算符
o2 = rand() % 4+1;//随机产生第2个运算符
//main函数主要内容
1 printf("\n\n\n请输入你想要获取的题目数量:"); 2 3 scanf("%d",&number); 4 5 for(i=0;i<number;i++) 6 7 { 8 9 o1 = rand() % 4+1;//随机产生第1个运算符 10 11 switch(o1) 12 13 { 14 15 case 1: 16 17 FistAdd(); 18 19 break; 20 21 case 2: 22 23 FistSubtract(); 24 25 break; 26 27 case 3: 28 29 FistMultiply(); 30 31 break; 32 33 case 4: 34 35 FistDivide(); 36 37 break; 38 39 } 40 41 }
//函数FistAdd(),其他函数也是这个思路
1 int FistAdd(){ 2 3 int a,b,c; 4 5 a = rand() % 99+1;//随机数a 6 7 b = rand() % 99+1;//随机数b 8 9 c = rand() % 99+1;//随机数c 10 11 12 13 o2 = rand() % 4+1;//随机产生第2个运算符 14 15 //printf("%d,%d,%d",a,b,c);///////////////// 16 17 switch(o2) 18 19 { 20 21 case 1://+ 22 23 printf("\n请计算\n"); 24 25 printf("%d + %d + %d= ",a,b,c); 26 27 scanf("%d",&useranswser); 28 29 answer=a+b+c; 30 31 if(useranswser==answer) 32 33 { 34 35 CorrectAnswer++; 36 37 printf("你已经答对了%d道题目\n",CorrectAnswer); 38 39 } 40 41 else 42 43 { 44 45 printf("回答错误,正确答案是:%d\n",answer); 46 47 } 48 49 break; 50 51 52 53 54 55 case 2://- 56 57 if((a+b)<c) 58 59 { 60 61 printf("\n请计算\n"); 62 63 printf("%d + %d - %d= ",a,c,b); 64 65 scanf("%d",&useranswser); 66 67 answer=a+c-b; 68 69 if(useranswser==answer) 70 71 { 72 73 CorrectAnswer++; 74 75 printf("你已经答对了%d道题目\n",CorrectAnswer); 76 77 } 78 79 else 80 81 { 82 83 printf("回答错误,正确答案是:%d\n",answer); 84 85 } ; 86 87 } 88 89 else 90 91 { 92 93 printf("\n请计算\n"); 94 95 printf("%d + %d - %d= ",a,b,c); 96 97 scanf("%d",&useranswser); 98 99 answer=a+b-c; 100 101 if(useranswser==answer) 102 103 { 104 105 CorrectAnswer++; 106 107 printf("你已经答对了%d道题目\n",CorrectAnswer); 108 109 } 110 111 else 112 113 { 114 115 printf("回答错误,正确答案是:%d\n",answer); 116 117 } 118 119 } 120 121 break; 122 123 124 125 case 3: 126 127 printf("\n请计算\n"); 128 129 printf("%d + %d * %d= ",a,b,c); 130 131 scanf("%d",&useranswser); 132 133 answer=a+b*c; 134 135 if(useranswser==answer) 136 137 { 138 139 CorrectAnswer++; 140 141 printf("你已经答对了%d道题目\n",CorrectAnswer); 142 143 } 144 145 else 146 147 { 148 149 printf("回答错误,正确答案是:%d\n",answer); 150 151 152 153 } 154 155 break; 156 157 case 4: 158 159 printf("\n请计算(小数点后保留两位有效小数)\n"); 160 161 printf("%d + %d / %d= ",a,b,c); 162 163 scanf("%lf",÷useranswser); 164 165 divideanswer=(float)a+(float)b/c; 166 167 if(divideuseranswser==divideanswer) 168 169 { 170 171 CorrectAnswer++; 172 173 printf("你已经答对了%d道题目\n",CorrectAnswer); 174 175 } 176 177 else 178 179 { 180 181 printf("回答错误,正确答案是:%0.2f\n",divideanswer); 182 183 } 184 185 break; 186 187 } 188 189 }
四、实验截图
五、总结
在这次作业中,我是构思比较清晰的,通过判断第一个运算符的类型,采用函数构造,让代码比较简洁。但在这次作业的实现过程,也遇到了不少麻烦,一是控制结果大于0,在含除法,减法的算式中都要进行修改操作。二是浮点数的比较以及表示。
作业做了挺久的,感觉c语言忘得差不多了,也要提高自己专注力。
posted on 2018-10-15 13:01 kenda_yellow 阅读(345) 评论(2) 编辑 收藏 举报