标签:
1.题目要求:
  (1)、题目避免重复;
  (2)、可定制(数量/打印方式);
  (3)、可以控制下列参数: 是否有乘除法、是否有括号、
数值范围、加减有无负数、除法有无余数、否支持分数 (真分数,   假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;
2.设计思想:
  1.题目要求:题目避免重复
	  将每个算式的第一个数存到一个数组,每次生成第一个数组的时候回溯一遍如果有重复就重新生成。
  2.可定制(数量、打印方式)
	  接受用户输入的一个参数来控制打印的数量
  3.是否有乘除法
	  将整个算法分成两个部分,一部分有四则运算,另一部分只有加减
  4.是否有括号
	  把生成的算式分成两元和三元两种选择
  5.数值范围的限定
	  对rand函数做运算处理,使之生成的数在一定范围之内
  6.加减有无负数
	  生成两个数之后比较一下,保证前者大于后者
  7.除法有无余数
	  生成两个数之后,把这两者做%处理,确保结果为0
  8.是否支持分数假分数,真分数
	  将这一点作为限定条件放到第三点问题上一起处理(未实现)
  9.是否支持小数(精确到多少位)
	  处理位置与3相同,精确到多少位(未实现)
  10.打印中每行位置的间隔可调整
	  在打印每一条数据间控制回车符的数量
  使用语言软件:由于用户输入参数太多,打算使用C#来设计。
整个程序的构架,因为选择很多,我把选择点全都放在一个while循环里,将选择量简化,在循环里分模块,这样程序看上去比较精简而且清楚
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace suanshu { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { shuliang.Text = "10"; chengchu.Text = "是"; kuohao.Text = "否"; amout1.Text = "0"; amout2.Text = "100"; fushu.Text = "是"; xiaoshu.Text = "否"; yushu.Text = "是"; fenshu.Text = "否"; hang.Text = "10"; hangju.Text = "0"; } Random ra = new Random(System.DateTime.Now.Millisecond);//时间毫秒数,取得随机数 int rand(int num1, int num2) { int x; // Random ra = new Random(System.DateTime.Now.Millisecond);//时间毫秒数,取得随机数 x = ra.Next(num1,num2); return x; } bool chongfu(int [] zu,int i,int num) { if(i==0) { return true; } else { int x=0,biaoji=1; while(x<i) { if (zu[x] == num) { biaoji = 0; break; } x++; } if (biaoji == 0) { return false; } else { return true; } } } bool cefushu(int num1, int num2,int ifushu) { if (ifushu ==0) { if (num1 >= num2) { return true; } else { return false; } } else { return true; } } bool ceyushu(int num1, int num2, int iyushu) { if (iyushu == 0) { if (num1%num2==0) { return true; } else { return false; } } else { return true; } } bool sushu(int num,int iyushu) //检测是否是素数 { if (iyushu == 1) { return false; } else { int i = 2, j = num / 2,biaoji=0; while (i <= j) { if (num % i == 0) { biaoji = 1; break; } i++; } if (biaoji == 1) { return false; } else { return true; } } } private void button1_Click(object sender, EventArgs e) { int ishuliang = Convert.ToInt16( shuliang.Text.Trim()); int ichengchu,ikuohao,iamout1,iamout2,ifushu,iyushu,ifenshu,ixiaoshu,ihang,ihangju;//获取变量参数 iamout1 = Convert.ToInt16(amout1.Text.Trim()); iamout2 = Convert.ToInt16(amout2.Text.Trim()); ihang = Convert.ToInt16(hang.Text.Trim()); ihangju = Convert.ToInt16(hangju.Text.Trim()); if (chengchu.Text.Trim() == "是") { ichengchu = 1; } else { ichengchu = 0; } if (kuohao.Text.Trim() == "是") { ikuohao = 1; } else { ikuohao = 0; } if (fenshu.Text.Trim() == "是") { ifenshu = 1; } else { ifenshu = 0; } if (fushu.Text.Trim() == "是") { ifushu = 1; } else { ifushu = 0; } if (yushu.Text.Trim() == "是") { iyushu = 1; } else { iyushu = 0; } if (xiaoshu.Text.Trim() == "是") { ixiaoshu = 1; } else { ixiaoshu = 0; } int i = 0,j=0; int num1, num2,p,num3,bj; int [] zu; string [] zufu={"+","-","*","/"}; string[] zufu1 = { "+", "-" }; zu=new int[ishuliang]; while (i < ishuliang) { j = 0; num1 = rand(iamout1, iamout2); //rand函数是生成一个随机数 while (true) { if (j >= ishuliang) { break; } if (chongfu(zu, i, num1)) //chongfu函数是检测产生的数与前面有木有重复 { zu[i] = num1; break; } num1 = rand(iamout1, iamout2); //rand函数是生成一个随机数 j++; } string sign,sign1; if (ichengchu == 1) { sign = zufu[rand(0, 4)]; } else { sign = zufu1[rand(0, 2)]; } if (sign == "/") { if (sushu(num1, iyushu)) //排除素数因素,否则会导致死循环 { num2 = 1; } else { while (true) { num2 = rand(iamout1, iamout2); if (num2 == num1) //为了排除出现同一个数相除这种简单的题目 { continue; } if (num2 != 0 && cefushu(num1, num2, ifushu) && ceyushu(num1, num2, iyushu))//num2!=0要放在最前面,防止ceyushu函数中除数为0 { break; } } } } else if (sign == "-") { while (true) { num2 = rand(iamout1, iamout2); if (cefushu(num1, num2, ifushu)) { break; } } } else { num2 = rand(iamout1, iamout2); } bj = rand(0,3); if (ikuohao == 1) //选择有无括号 { num3 = rand(iamout1, iamout2); if (ichengchu == 1) { sign1 = zufu[rand(0, 4)]; } else { sign1 = zufu1[rand(0, 2)]; } if (bj == 0) { textBox1.Text += num1 + sign + num2 + sign1 + num3 + "= "; } else if (bj == 1) { textBox1.Text += "(" + num1 + sign + num2 + ")" + sign1 + num3 + "= "; } else { textBox1.Text += num1 + sign +"("+ num2 + sign1 + num3 + ")"+"= "; } } else { textBox1.Text += num1 + sign + num2 + "= "; } if (ihang == 0) //设定每行题目的数量 { } else { if ((i % (ihang )) == (ihang-1)) { p=0; while(p<=ihangju) { textBox1.Text += "\r\n"; //设置行距 p++; } } } i++; } } private void button2_Click(object sender, EventArgs e) //清空 { textBox1.Text = ""; } } }
4.程序截图实现




5.工作记录表格
周活动总结表
姓名:柴珏辉
日期:2015.3.10
| 
 日期 任务  | 
 听课  | 
 编写程序  | 
 阅读课本  | 
 准备考试  | 
 
  | 
 
  | 
 日总计  | 
| 
 周日  | 
 
  | 
 
  | 
 
  | 
 
  | 
 
  | 
 
  | 
 
  | 
| 
 周一  | 
 
  | 
 
  | 
 
  | 
 
  | 
 
  | 
 
  | 
 
  | 
| 
 周二  | 
 2  | 
 
  | 
 0.5  | 
 
  | 
 
  | 
 
  | 
 2.5  | 
| 
 周三  | 
 
  | 
 2.5  | 
 0.5  | 
 
  | 
 
  | 
 
  | 
 3  | 
| 
 周四  | 
 
  | 
 1.5  | 
 0.5  | 
 
  | 
 
  | 
 
  | 
 2  | 
| 
 周五  | 
 2  | 
 
  | 
 
  | 
 
  | 
 
  | 
 
  | 
 2  | 
| 
 周六  | 
 
  | 
 0.5  | 
 0.5  | 
 
  | 
 
  | 
 
  | 
 1  | 
| 
 周总结  | 
 4  | 
 4.5  | 
 2  | 
 
  | 
 
  | 
 
  | 
 10.5  | 
二、时间记录表:
学生 柴珏辉 日期 3.10
教师 王建民 课程 PSP
| 
 日期  | 
 开始时间  | 
 结束时间  | 
 中断时间  | 
 净时间  | 
 活动  | 
 备注  | 
| 
 3.10  | 
 8:00  | 
 10:00  | 
 
  | 
 2  | 
 上课  | 
 软件工程课  | 
| 
 3.11  | 
 10:30  | 
 11:30  | 
 
  | 
 1  | 
 编程  | 
 完成四则运算题作业  | 
| 
 
  | 
 3:30  | 
 5:00  | 
 0.5  | 
 1  | 
 编程  | 
 同上  | 
| 
 
  | 
 9:10  | 
 9:40  | 
 
  | 
 0.5  | 
 编程  | 
 同上  | 
| 
 3.12  | 
 4:30  | 
 5:30  | 
 
  | 
 1  | 
 编程  | 
 同上  | 
| 
 3.14  | 
 21:30  | 
 22:00  | 
 
  | 
 0.5  | 
 编程  | 
 同上  | 
三、缺陷记录日志:
学生 柴珏辉
日期 3.10
教员 王建民
程序号
| 
 日期  | 
 编号  | 
 类型  | 
 引入阶段  | 
 排除阶段  | 
 修复时间  | 
 修复缺陷  | 
||||||||||
| 
 3.11  | 
 1  | 
 
  | 
 编译  | 
 编译  | 
 5min  | 
 
  | 
||||||||||
| 
 Rand函数的new如果在函数中,运行的时候一直出现同一个数  | 
||||||||||||||||
| 
 3.11  | 
 2  | 
 
  | 
 编译  | 
 编译  | 
 2min  | 
 
  | 
||||||||||
| 
 Rand.next(x,y)生成的数a,应该是x<=a<y  | 
||||||||||||||||
| 
 3.11  | 
 3  | 
 
  | 
 设计  | 
 编译  | 
 10min  | 
 
  | 
||||||||||
| 
 在解决除法没有余数的问题中,没有考虑到素数这一因素,导致程序出现死循环  | 
||||||||||||||||
| 
 3.11  | 
 4  | 
 
  | 
 编译  | 
 编译  | 
 1min  | 
 
  | 
||||||||||
| 
 C#中,1和0不能代表bool值,要用true和false  | 
||||||||||||||||
| 
 3.12  | 
 5  | 
 
  | 
 编译  | 
 编译  | 
 2min  | 
 
  | 
||||||||||
| 
 多了一个大括号  | 
||||||||||||||||
| 
 3.12  | 
 6  | 
 
  | 
 编译  | 
 编译  | 
 15min  | 
 
  | 
||||||||||
| 
 设置自动分行代码时,运行程序出错  | 
||||||||||||||||
标签:
原文地址:http://www.cnblogs.com/boluoland/p/4338915.html