标签:
一、题目新的要求
1、题目避免重复;
2、可定制(数量/打印方式);
3、可以控制下列参数: 是否有乘除法、是否有括号、
数值范围、加减有无负数、除法有无余数、否支持分数 (真分数,
假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;
二、设计思想(将自己上次上课时的设计思想进行稍微的修改)
1、判断两次随机数是否相同
使用函数srand()保证两个随机数不同
2、多加入一个变量,来控制题目数量
3、在每一个switch选择的语句,进行选择判断
3.1选择是否有乘除法,
3.2是否有括号
判断是否加减乘除是否都存在,加减在算式中的位置,然后进行选择是否添加括号
3.3数值范围
主要控制随机数产生器模余的大小(如a=rand()%n,n可以取任意值)
3.4加减有无负数
比较减数和被减数的大小,如果减数小于被减数,进行交换
3.5除法有无余数
将被除数(随机数)与除数(随机数)进行模余运算
3.6是否支持分数(真假分数)
判断是否除法运算,如果除不尽的话,再选择是否支持分数,判断除数与被除数的大小,来分析是否是真(假)分数
3.8打印每行间隔可以调整
将题目进行模余运算来该变每行题目的数量
三、源程序
// asdfg.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdlib.h" #include<stdio.h> #include <time.h> #include <windows.h> int fx1(int a0) { printf("请输入要打印的题目数:"); scanf("%d", &a0); while (a0 <= 0) //题数为正数 { printf("请重新输入题目数:"); scanf("%d", &a0); }; return 0; } int fx2(int a2) { printf("请输入运算数的范围:"); scanf("%d", &a2); while (a2 <= 0) //运算数为正数 { printf("请重新输入范围:"); scanf("%d", &a2); }; return 0; } int fx3(int a1) { //题目中是否有乘除法 printf("请选择乘除法(是1;否0):"); scanf("%d", &a1); while ((a1 != 1)&(a1 != 0)) //只能选择1或0 { printf("请重新输入数值:"); scanf("%d", &a1); }; return 0; } int fx4(int a3) { //题目结果是否有负数 printf("请选择有无负数(是1;否0):"); scanf("%d", &a3); while ((a3 != 1)&(a3 != 0)) //只能选择1或0 { printf("请重新输入数值:"); scanf("%d", &a3); }; return 0; } int fx5(int a4) { //结果是否有余数 printf("请选择有无余数(是1;否0):"); scanf("%d", &a4); while ((a4 != 1)&(a4 != 0)) //只能选择1或0 { printf("请重新输入数值:"); scanf("%d", &a4); }; return 0; } int fx6(int a5) { //是否支持小数 printf("请选择有无小数(是1;否0):"); scanf("%d", &a5); while ((a5 != 1)&(a5 != 0)) //只能选择1或0 { printf("请重新输入数值:"); scanf("%d", &a5); }; return 0; } int fx7(int a6) { //是否加括号 printf("请选择有无括号(是1;否0):"); scanf("%d", &a6); while ((a6 != 1)&(a6 != 0)) //只能选择1或0 { printf("请重新输入数值:"); scanf("%d", &a6); }; return 0; } int main() { srand(time(NULL)); //避免题目重复 int rand1, rand2, flag, i, j; int rand3, rand4; int a0, a1, a2, a3, a4 , a5 ,a6; printf("请按照提示进行输入\n"); fx1(a0); fx2(a2); fx3(a1); fx4(a3); fx5(a4); fx6(a5); fx7(a6); //循环打印符合要求的题目 for (i = 0; i < a0; i++) { switch (a1) { case 1:j = rand() % 4; break; //有乘除法 case 0:j = rand() % 2; break; //无乘除法 } rand1 = rand() % a2 + 1; rand2 = rand() % a2 + 1; //循环打印 if (j == 0) { switch (a6) { case 0: switch (a5) { case 0:printf("%d+%d=\t\t", rand1, rand2); break; case 1: rand3 = rand() % 9 + 1; rand4 = rand() % 9 + 1; printf("%d.%d+%d.%d=\t\t", rand1, rand3, rand2, rand4); break; } break; case 1: switch (a5) { case 0:printf("(%d+%d)=\t", rand1, rand2); break; case 1: rand3 = rand() % 9 + 1; rand4 = rand() % 9 + 1; printf("(%d.%d+%d.%d)=\t", rand1, rand3, rand2, rand4); break; } break; } } if (j == 1) { switch (a3) { case 1: //结果可有负数 break; case 0: //结果无负数 if (rand1 < rand2) //被减数比减数小则交换 { flag = rand1; rand1 = rand2; rand2 = flag; } break; } switch (a6) { case 0: switch (a5) { case 0:printf("%d-%d=\t\t", rand1, rand2); break; case 1: rand3 = rand() % 9 + 1; rand4 = rand() % 9 + 1; printf("%d.%d-%d.%d=\t\t", rand1, rand3, rand2, rand4); break; } break; case 1: switch (a5) { case 0:printf("(%d-%d)=\t", rand1, rand2); break; case 1: rand3 = rand() % 9 + 1; rand4 = rand() % 9 + 1; printf("(%d.%d-%d.%d)=\t", rand1, rand3, rand2, rand4); break; } break; } } if (j == 2) { switch (a6) { case 0: switch (a5) { case 0:printf("%d*%d=\t\t", rand1, rand2); break; case 1: rand3 = rand() % 9 + 1; rand4 = rand() % 9 + 1; printf("%d.%d*%d.%d=\t\t", rand1, rand3, rand2, rand4); break; } break; case 1: switch (a5) { case 0:printf("(%d*%d)=\t", rand1, rand2); break; case 1: rand3 = rand() % 9 + 1; rand4 = rand() % 9 + 1; printf("(%d.%d*%d.%d)=\t", rand1, rand3, rand2, rand4); break; } break; } } if (j == 3) { switch (a4) { case 1: //结果可有余数 break; case 0: //结果无余数 while (rand1%rand2 != 0) //如果不能整除,则重新生成 { rand1 = rand() % a2 + 1; rand2 = rand() % a2 + 1; }; break; } switch (a6) { case 0: switch (a5) { case 0:printf("%d/%d=\t\t", rand1, rand2); break; case 1: rand3 = rand() % 9 + 1; rand4 = rand() % 9 + 1; printf("%d.%d/%d.%d=\t\t", rand1, rand3, rand2, rand4); break; } break; case 1: switch (a5) { case 0:printf("(%d/%d)=\t", rand1, rand2); break; case 1: rand3 = rand() % 9 + 1; rand4 = rand() % 9 + 1; printf("(%d.%d/%d.%d)=\t", rand1, rand3, rand2, rand4); break; } break; } } } return 0; }
四、程序截图
五、总结
通过这次的实验,我更深刻的了解,一个简单的小想法原来可以进行进行更深层次的修改、拓展,使它能够由小变大,有简单到复杂。现在也知道了代码的模块化是多么的重要,如果不进行模块化,程序和代码势必容易出问题,而且逻辑关系会很难理清。
一、项目计划总结:
周活动总结表
姓名:黄肖飞 日期:3月12日
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
日总计 |
周日 |
|
|
|
|
|
周一 |
400 |
|
60 |
|
460 |
周二 |
200 |
110 |
60 |
|
370 |
周三 |
100 |
170 |
|
|
270 |
周四 |
200 |
100 |
100 |
|
400 |
周五 |
200 |
190 |
60 |
|
450 |
周六 |
|
160 |
60 |
|
320 |
周总结 |
1100 |
730 |
340 |
|
2170 |
阶段时间和效率 第2 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
总计 |
|
|
|
|
|
|
|
平均 |
|
|
|
|
|
|
|
最大 |
|
|
|
|
|
|
|
最小 |
|
|
|
|
|
|
|
以前各周的累计时间
总计 |
|
|
|
|
|
|
|
平均 |
|
|
|
|
|
|
|
最大 |
|
|
|
|
|
|
|
最小 |
|
|
|
|
|
|
|
二、时间记录表:
学生 黄肖飞 日期 3月14日
教师 王建民 课程 PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/10 |
8:00 |
12:00 |
40 |
200 |
软件工程,操作系统 |
课间休息 |
|
2:30 |
4:30 |
10 |
110 |
编写程序 |
上厕所,休息 |
|
8:30 |
9:30 |
|
60 |
《梦断代码》 |
看书 |
3/11 |
8:00 |
10:00 |
20 |
100 |
计算机网络 |
课间休息 |
|
2:30 |
5:30 |
10 |
170 |
编写程序 |
上厕所 |
|
9:00 |
10:00 |
|
60 |
《梦断代码》 |
看书 |
3/12 |
10:00 |
12:00 |
20 |
100 |
计算机接口技术 |
课件休息 |
|
2:00 |
4:00 |
20 |
100 |
嵌入式开发技术 |
课间休息 |
|
6:00 |
8:00 |
20 |
100 |
编写程序 |
上厕所 |
|
9:00 |
10:00 |
|
60 |
《梦断代码》 |
看书 |
3/13 |
8:00 |
12:00 |
40 |
200 |
软件工程,操作系统 |
课间休息 |
|
2:00 |
5:30 |
20 |
190 |
编写程序 |
上厕所 |
|
9:00 |
10:00 |
|
60 |
《梦断代码》 |
看书 |
3/14 |
8:00 |
11:00 |
20 |
160 |
编写程序 |
上厕所 |
三、缺陷记录日志:
学生 黄肖飞
日期 3月14日
教员 王建民
程序号
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/10 |
1 |
001 |
设计 |
编译 |
10 |
|
使用某一函数没有与之对应的头文件#include<time.h>,函数rand(),srand() |
||||||
|
2 |
002 |
设计 |
编译 |
15 |
|
如何避免产生两个相同的四则运算,使用srand()函数,避免产生两个相同的随机数就将问题解决了 |
||||||
3/12 |
3 |
003 |
设计 |
编译 |
10 |
|
少了一个大括号,使得编译一直没有通过,最后将代码重新规范一下,发现主函数少了一个括号 |
||||||
3/13 |
4 |
004 |
设计 |
编译 |
5 |
|
fatal error C1010: unexpected end of file while looking for precompiled header directive。寻找预编译头文件路径时遇到了不该遇到的文件尾。(没有#include "stdafx.h") |
标签:
原文地址:http://www.cnblogs.com/huangxiaofei/p/4338258.html