您的位置:首页 > 其它

软件工程课堂练习四则运算续篇

2015-03-14 13:45 337 查看
一、设计思想

根据题目的新要求我做了以下更改

1.为使用户可定制数量以及打印方式,可使用户输入打印方式、数量的参数来进行设置
2.参数设置:提示用户是否有乘除法运算,是/否用户可输入【1/0】表示。

提示用户是否有负数参与运算;

提示用户参与运算的数值范围;

提示用户输入出多少道题目;

提示用户输入题目输出列数;

二、源代码

#include "stdafx.h"
#include "stdio.h"
#include "time.h"
#include "stdlib.h"      //随机器函数头文件

void print()
{
int num,numvalue,judear,judemd,linenum;  //变量含义分别为出题数目、数值范围、判断有无负数、判断有无乘除、输出列数

printf("请输入出题数目:");
scanf("%d",&num);
printf("请输入要输出的题目列数:");
scanf("%d",&linenum);
printf("加减有无负数?请输入【0/1】表示【是/否】:");
scanf("%d",&judear);
while(judear!=0 && judear!=1)                          //判断用户是否按要求输入
{
printf("sorry!输入错误,请按要求输入:");
scanf("%d",&judear);
}
printf("请输入出题的范围绝对值(不考虑小数请输入整数):00-");
scanf("%d",&numvalue);
printf("出题是否含有乘除法?请输入【0/1】表示【是/否】:");
scanf("%d",&judemd);
while(judear!=0 && judear!=1)                         //判断用户是否按要求输入
{
printf("sorry!输入错误,请按要求输入:");
scanf("%d",&judemd);
}
switch(judemd)
{
case 0:{
int x,y;
if(judear==0){
srand((int)time(0));
for(int i=1;i<=num/linenum;i++)          //出题数量
{
for(int j=1;j<=linenum;j++)       //控制出题列数
{

int a=rand()%numvalue;
int b=rand()%numvalue;

x=1+rand()%10;     //随机产生10种类型的题目
switch (x)
{
case 1:
{
printf("%d+%d=\t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 2:
{
printf("%d-%d=\t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 3:
{
printf("-%d+%d=\t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 4:
{
printf("%d+(-%d)=\t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 5:
{
printf("-%d+(-%d)=\t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 6:
{
printf("-%d-%d=\t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 7:
{
printf("%d-(-%d)=\t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 8:
{
printf("-%d-(-%d)=\t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 9:
{
printf("%d*%d=\t",a,b);
if(j%linenum==0)
printf("\n");
break;}
case 10: {
if (b!=0)
{printf("%d/%d=\t",a,b);
if(j%linenum==0)
printf("\n");}
else
{
b=b+1;
printf("%d/%d=\t",a,b);
if(j%linenum==0)
printf("\n");
}
break;
}
default:{"输出有误!";}
}
}
}

}
else if(judear==1)
{
srand((int)time(0));
for(int i=1;i<=num/linenum;i++)
{
for(int j=1;j<=linenum;j++){           //控制出题列数

int a=rand()%100;
int b=rand()%100;

y=1+rand()%4;     //随机产生四种不同的题目
switch (y)
{
case 1:
{
printf("%d+%d=    \t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 2:
{
printf("%d-%d=    \t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 3:
{
printf("%d*%d=    \t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 4: {
if (b!=0)
{printf("%d/%d=    \t",a,b);
if(j%linenum==0)
printf("\n");}
else
{
b=b+1;
printf("%d/%d=    \t",a,b);
if(j%linenum==0)
printf("\n");
}
break;
}
default:{"输出有误!";}
}
}
}
}
else
printf("出错!");
break;
default:{printf("出错!");}
}
case 1:{
int q,w;
if(judear==0)
{
srand((int)time(0));
for(int i=1;i<=num/linenum;i++)
{
for(int j=1;j<=linenum;j++){     //控制出题列数
int a=rand()%100;
int b=rand()%100;

q=1+rand()%8;         //随机产生8种不同的题型
switch (q)
{
case 1:
{
printf("%d+%d=    \t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 2:
{
printf("%d-%d=    \t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 3:
{
printf("-%d+%d=   \t",a,b);
if(j%linenum==0)
printf("\n");
break;}
case 4:
{
printf("%d+(-%d)= \t",a,b);
if(j%linenum==0)
printf("\n");
break;}
case 5:
{
printf("-%d+(-%d)=\t",a,b);
if(j%linenum==0)
printf("\n");
break;}
case 6:
{
printf("-%d-%d=   \t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 7:
{
printf("%d-(-%d)= \t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 8:
{
printf("-%d-(-%d)=\t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
default:{"输出有误!";}
}
}
}
}
else if(judear==1)
{
srand((int)time(0));
for(int i=1;i<=num/linenum;i++)
{
for(int j=1;j<=linenum;j++){         //控制出题列数

int a=rand()%100;
int b=rand()%100;

w=1+rand()%2;     //随机产生2种不同的题型
switch (w)
{
case 1:
{
printf("%d+%d=    \t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
case 2:
{
printf("%d-%d=    \t",a,b);
if(j%linenum==0)
printf("\n");
break;
}
default:{"输出有误!";}
}
}
}

}
else
printf("出错!");
}

}
}

int main(int argc, char* argv[])
{
printf("                         四则运算出题系统                      \n");
print();
return 0;
}


三、运行结果







四、心得体会

这次的四则运算出题系统是上一次的扩展,其实还有很多功能没能实现,是否支持小数(有效数值是多少位),是否支持有括号运算等等;

这次的程序写的很简单,把所有的功能都写在一个函数中了,没有分模块处理,因为我之前是利用的多个函数但涉及到传参问题,而我对他实在是没有办法,整理半天没整明白,所以最后只能用自己绝得简单的方法实现这个问题了

编程过程中也有出现过很多错误,如

1.在输出所有题目和列数时,把for语句的循环条件弄错,导致每一列输出了总题数

2.马虎大意漏写;号

3.if后面条件写错

五、psp0级相关日志

1.项目计划日志

周活动总结表

姓名:曹美娜 日期:2015.03.15

日期/任务

听课

编写程序

阅读课本

准备考试

日总计

周二 3.10

200

30

230

周三 3.11

100

65

45

210

周四

200

102

302

周五

200

73

50

323

周六

120

120

周日 3.15

120

120

周总计

700

240

365

1305
阶段时间和效率 周数(上一次周活动总结表的周数+1):1

不包括上一周在内的累计时间

总计

平均

最大

最小

以前个周的累计时间

总计

800

300

150

60

1310

平均

800

300

150

60  

1310

最大

800

300

150

60

1310

最小

800

300

150

60

1310
2.时间记录日志

时间记录日志

学生 曹美娜 日期 2015.03.10

教师 王建民 课程 软件工程

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/10

3/11

16:20

17:40

15分钟

65

编写四则运算程序

中间电话插入

3/12

16:45

18:27

102

编程

19:30

21:30

120

自习

3/13

15:23

16:36

73

编程

3/15

9:10

11:00

110

看书

3.缺陷记录表

缺陷记录日志

学 生 曹美娜

日 期 2015.03.10

教 员 王建民

程序号

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3/10

3/11

0

编程

编译

3分钟

漏掉“;”

3/12

1

编程

5分钟

For循环条件出错

3/13

2

编程

2分钟

If语句条件错误

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: