一、题目要求
一家软件公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道四则运算题目给小学生做。
像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 “软件”。
要求:除了整数以外,还要支持真分数的四则运算。
撰写一篇博文要求将程序的设计思想,源程序代码、运行结果截图以及分析一下个人上课未按时完成的原因。
二、设计思想
1、分数和整数运算分别处理;
2、随机产生并输出这一部分功能用一个rand函数实现;
3、随机产生运算数这一功能,两个运算数可以用随机函数生成,并将它们控制在100以内。其中,考虑到除数不能为零,第二个运算数随机产生时+1;
4、随机产生运算法则这一功能,运算法则一共有4种,也可以随机产生0-4的数,分情况进行四则运算。
三、源程序代码
1 //四则运算1,张莹荧 2 #include<iostream> 3 #include<stdlib.h> 4 #include<conio.h> 5 using namespace std; 6 7 void DealFenshu(int m, int a[][2]) 8 { 9 for (int p = 0; p<m; p++) 10 { 11 int i = (int)rand() % 100; 12 int j = (int)rand() % 100; 13 while (j == 0 || i >= j) 14 { 15 i = (int)rand() % 100; 16 j = (int)rand() % 100; 17 } 18 int x = (int)rand() % 100; 19 int y = (int)rand() % 100; 20 while (y == 0 || x >= y) 21 { 22 x = (int)rand() % 100; 23 y = (int)rand() % 100; 24 } 25 int k = (int)rand() % 100 / 25; 26 switch (k) 27 { 28 case 0: 29 cout << "(" << i << "/" << j << ")" << "+" << "(" << x << "/" << y << ")" << "=" << endl; 30 a[p][0] = i*y + x*j; 31 a[p][1] = j*y; 32 break; 33 case 1: 34 cout << "(" << i << "/" << j << ")" << "-" << "(" << x << "/" << y << ")" << "=" << endl; 35 a[p][0] = i*y - x*j; 36 a[p][1] = j*y; 37 break; 38 case 2: 39 cout << "(" << i << "/" << j << ")" << "*" << "(" << x << "/" << y << ")" << "=" << endl; 40 a[p][0] = i*x; 41 a[p][1] = j*y; 42 break; 43 case 3: 44 a[p][0] = i*y; 45 a[p][1] = j*x; 46 cout << "(" << i << "/" << j << ")" << "/" << "(" << x << "/" << y << ")" << "=" << endl; 47 } 48 } 49 50 } 51 52 void DealInt(int m, int a[]) 53 { 54 55 for (int p = 0; p<m; p++) 56 { 57 int i = (int)rand() % 100; 58 int j = (int)rand() % 100; 59 int k = (int)rand() % 100 / 25; 60 switch (k) 61 { 62 case 0: 63 cout << i << "+" << j << "=" << endl; 64 a[p] = i + j; 65 break; 66 case 1: 67 cout << i << "-" << j << "=" << endl; 68 a[p] = i - j; 69 break; 70 case 2: 71 cout << i << "×" << j << "=" << endl; 72 a[p] = i*j; 73 break; 74 case 3: 75 try 76 { 77 a[p] = i / j; 78 cout << i << "÷" << j << "=" << endl; 79 } 80 catch (...) 81 { 82 p--; 83 } 84 } 85 86 87 } 88 } 89 90 void main() 91 { 92 int p; 93 do 94 { 95 system("cls"); 96 int a[1000], b[1000][2]; 97 int m, n; 98 cout << "请输入生成的四则运算题个数:"; 99 cin >> m; 100 cout << endl; 101 cout << "请输入要生成的四则运算种类(输入1为整数,输入2为真分数):"; 102 cin >> n; 103 cout << endl; 104 if (n == 1) 105 { 106 DealInt(m, a); 107 cout << endl; 108 } 109 else 110 { 111 DealFenshu(m, b); 112 cout << endl; 113 } 114 cout << "是否继续生成运算题(生成请输入‘1’,否则输入‘0’)" << endl; 115 cin >> p; 116 cout << endl; 117 } while (1 == p); 118 }
四、运行结果截图
五、个人上课未完成的原因
此次为第一次课堂练习,作业题目当堂布置,一开始没有思路。渐渐地在老师的引导下,有了一些头绪,虽然编写了一部分,但是还不是很完善。再就是自己的编程基础不是很好,所以不能及时完成老师课上布置的任务。在以后的软件工程学习中,我要再接再厉,争取在编程上有更大的进步。