第二次结对作业

一.题目选择

我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
能够自动生成四则运算练习题
(1)可以定制题目数量
(2)用户可以选择运算符
(3)用户设置最大数(如十以内、百以内等)
(4)用户选择是否有括号、是否有小数
(5)用户选择输出方式(如输出到文件、打印机等)(6)最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)。

角色确定

驾驶员何聪 ;
领航员王军宏 ;

二、功能及程序实现

  我觉得程序最大的重点就是生成随机数,通过生成随机数我们可以完成很多功能比如括号的随机,运算符加减乘除的随机:
        num = rand() / (double)(RAND_MAX / (max - min));
        num = num + min;
 这个函数是随机生成一个小数;并且有上下限及最大最小值;
             qw = rand() % q ;
 这是生成一个随机整数;

程序:我们的程序分为3大模块

(1)界面

  刚开始准备用qt做界面的,但是不知道为什么一直创建项目不成功,所以准备改用c++来做界面,界面模型做了出来,但是最后没能将界面与程序连接起来,花了很久,心灰意冷,所以就放弃了,就在程序运行框做了一个简易的理想界面,唉,还是我们的能力不够,太菜了!

界面函数:
void jiemian()//界面提示函数
{
cout << "选择需要生成的题量(本程序最多可产生1000个算式):";
cin >> n;
for (; n == 0;)
{
cout << "请输入大于0的数:";
cin >> n;
}
cout << "选择数值范围:";
cin >> min >> max;
for (; min > max;)
{
cout << "您输入的数大小顺序有误,请重新输入:";
cin >> min >> max;
}
cout << endl;
cout << "选择运算符:" << endl;
cout << "(1)选择加法输入1,否则输入0:";
cin >> fuhao[0];
cout << "(2)选择减法输入1,否则输入0:";
cin >> fuhao[1];
cout << "(3)选择乘法输入1,否则输入0:";
cin >> fuhao[2];
cout << "(4)选择除法输入1,否则输入0:";
cin >> fuhao[3];
for (; fuhao[0] == 0 && fuhao[1] == 0 && fuhao[2] == 0 && fuhao[3] == 0;)
{
cout << "请选择至少一个符号:" << endl;
cout << "(1)选择加法输入1,否则输入0:";
cin >> fuhao[0];
cout << "(2)选择减法输入1,否则输入0:";
cin >> fuhao[1];
cout << "(3)选择乘法输入1,否则输入0:";
cin >> fuhao[2];
cout << "(4)选择除法输入1,否则输入0:";
cin >> fuhao[3];
}
cout << "选择是否保留小数并选择保留小数点后几位(不保留输入0.有则输入它的最大保留位数(4以内)):";
cin >> q;
for (; q <0 || q>4;)
{
cout << "请输入一个0-4的整数:";
cin >> q;
}
cout << "选择运算长度:";
cin >> maxlong;
for (; maxlong < 2;)
{
cout << "请输入一个有效的数:";
cin >> maxlong;
}
cout << "选择是否有括号(有则输入1,无则输入0):";
cin >> kh;
}
界面结果显示:
1346027-20180417174344940-957772202.png
(2)主函数程序
int main()
{
void jiemian();
fp = fopen("1.txt", "w");
int panduan(int x);
int i, lon, j, b, fh = 4, jia = -1, jia_n = 0, lef = 1, zh = 0;
int qw=0;
jiemian();
srand((unsigned)time(NULL)); //用时间做种,每次产生随机数不一样
double num;
int s = 0;
int sa = 0;
for (i = 0; i < n; i++)//进入生成一个算式的循环
{
cout << "(" << i + 1 << ")" << ":";
fprintf(fp, "( %d ):", i + 1);
lon = rand() % (maxlong - 1) + 2;//产生不超过我们所规定的最大长度的算式
s = 0;
for (j = 0; j < lon - 1; j++)
{
if (lon > 2 && kh == 1)
jia = rand() % 2;
if (j == lon - 2 && s == 1)//判断随机的左括号是否可以加
jia = 0;
else
jia = jia;
if (jia == 1)
{
cout << "(";
fprintf(fp, "(");
jia_n = jia_n + 1;//记录算式中多出的左括号的个数
if (j == 0)
s = 1;//记录下第一个数有右括号的写入
lef = 0;
}
jia = -1;
num = rand() / (double)(RAND_MAX / (max - min));//产生第一个随机数
num = num + min;
for (; sa == 1 && num == 0;)//如果符号为/,那么他的除数不为0;
{
num = rand() / (double)(RAND_MAX / (max - min));
num = num + min;
}
qw = rand() % q ;
cout << fixed << setprecision(qw) << num;
if (qw == 0)
fprintf(fp, "%.0f", num);
if (qw == 1)
fprintf(fp, "%.1f", num);
if (qw == 2)
fprintf(fp, "%.2f", num);
if (qw == 3)
fprintf(fp, "%.3f", num);//文件输出浮点数
if (kh == 1 && lef != 0 && jia_n > 0)//随机产生右括号,并判断是否可以加入算式
jia = rand() % 2;
if (jia == 1)
{
cout << ")";
fprintf(fp, ")");
jia_n = jia_n - 1;
lef = 1;
if (jia_n == 0)
s = 0;
}
jia = -1;
b = rand() % fh;
for (; fuhao[b] == 0;)
{
b = rand() % fh;
}
if (s == 1 && j == lon - 2)
{
for (; jia_n >= 1; jia_n--)
{
cout << ")";
fprintf(fp, ")");
}
}
sa = panduan(b);
}
num = rand() / (double)(RAND_MAX / (max - min));//补上算式的最后一个数
num = num + min;
qw = rand() % q ;
cout << fixed << setprecision(qw) << num;
if(qw==0)
fprintf(fp, "%.0f", num);
if (qw == 1)
fprintf(fp, "%.1f", num);
if (qw == 2)
fprintf(fp, "%.2f", num);
if (qw == 3)
fprintf(fp, "%.3f", num);//文件输出输出浮点数
for (; jia_n >= 1; jia_n--)
{
cout << ")";
fprintf(fp, ")");
}
cout << "=" << endl;
fprintf(fp, "=\n");
}
fclose(fp);
system("PAUSE ");
return 0;
}
(3)符号函数:
int panduan(int x)//符号函数
{
int data=0;//为了使被除数不能为0
switch (x)
{
case 0:cout << "+", fprintf(fp, "+"); break;
case 1:cout << "-", fprintf(fp, "-"); break;
case 2:cout << "", fprintf(fp, ""); break;
case 3:cout << "/", fprintf(fp, "/"), data=1; break;
default:
break;
}
return data;
}

三、功能实现

1346027-20180417180401210-1854707361.png

文件输出

1346027-20180417180500446-1644176364.png

四、对领航员的评价及总结

 这是我们第二次结队作业,因为第一次作业没有要求编写代码,只是用以前的程序来进行测试,所以我们对互相的编程习惯等都没有什么太多的了解,所以这次我们共同的编程合作就能是对互相的了解就更深了。这次老师给了两个题目,我们共同决定选择第一个题目进行编。因为他的编程能力比我要强 ,所以这次我自告奋勇的选择驾驶员,为了增加我自己的编程的能力,而他作为领航员我感觉这是一个比驾驶员还重要的角色,驾驶员可能在自己程序编完后就感觉满足而忽略了很多重要的东西,这时候领航员就发挥了特别重要的作用,他会指出这个程序的不完善,以及各种不恰当。而且在编程的时候,他也给了我很多建议,虽然可能在一些地方产生歧义,但是这更增加我们之间的合作与默契。我们在开始的时候只是从简单的开始,比如只做两位整数的计算,不考虑小数与括号的加入。然后在这个完成后,我们开始往复杂的开始进发。开始考虑多个小数计算,然后随机生成括号,就这样越来越复杂,最后完成了程序。当然在之后我们为了完善程序,进行各种修改也新增了很多问题,在我们的共同努力下,最终结束了这次作业。
  “我们真是合作无间”,这是我经常在网上看到的一句话,感觉跟我们这次合作挺符合的,我觉得这次合作后,我们会更加默契,这对以后的团队作业奠定了很大基础。最后附上一张我们的工作照--->>>

1346027-20180417183254296-1482376428.jpg

附录:源代码

转载于:https://www.cnblogs.com/hecong/p/8862628.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值