您的位置:首页 > 其它

软件工程课堂练习--四则运算(三)

2015-03-19 19:09 381 查看
一、设计思路

题目:可以答题并判断对错,最后显示做对几道题。

思路:在原来的基础上又添加了用户在系统上可选择直接答题模块,思路上上次的四则运算(二)大致相同,不过又添加了几个函数,经过调用实现操作。

二、程序代码

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

int truenum=0;    int falsenum=0;

void operation(int num,int numvalue,int judear,int judemd,int linenum)
{
switch(judemd)
{
case 0:{
int x,y;
if(judear==0){
srand((int)time(0));
for(int i=1;i<=num;i++)          //出题数量
{

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

x=1+rand()%10;     //随机产生10种类型的题目
switch (x)
{
case 1:
{
printf("%d+%d=",a,b);
break;
}
case 2:
{
printf("%d-%d=\t",a,b);

break;
}
case 3:
{
printf("-%d+%d=\t",a,b);

break;
}
case 4:
{
printf("%d+(-%d)=\t",a,b);

break;
}
case 5:
{
printf("-%d+(-%d)=\t",a,b);

break;
}
case 6:
{
printf("-%d-%d=\t",a,b);

break;
}
case 7:
{
printf("%d-(-%d)=\t",a,b);

break;
}
case 8:
{
printf("-%d-(-%d)=\t",a,b);

break;
}
case 9:
{
printf("%d*%d=\t",a,b);

break;}
case 10: {
if (b!=0)
{printf("%d/%d=\t",a,b);}
else
{
b=b+1;
printf("%d/%d=\t",a,b);

}
break;
}
default:{"输出有误!";}
}
if(i%linenum==0)
{
printf("\n");
}
}

}
else if(judear==1)
{
srand((int)time(0));
for(int i=1;i<=num;i++)
{

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

y=1+rand()%4;     //随机产生四种不同的题目
switch (y)
{
case 1:
{
printf("%d+%d=    \t",a,b);

break;
}
case 2:
{
printf("%d-%d=    \t",a,b);

break;
}
case 3:
{
printf("%d*%d=    \t",a,b);

break;
}
case 4: {
if (b!=0)
{printf("%d/%d=    \t",a,b);}
else
{
b=b+1;
printf("%d/%d=    \t",a,b);

}
break;
}
default:{printf("输出有误!");}
}
}
if(i%linenum==0)
{printf("\n");}

}
else
printf("出错!");
break;
default:{printf("出错!");}
}
case 1:{
int q,w;
if(judear==0)
{
srand((int)time(0));
for(int i=1;i<=num;i++)
{

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

q=1+rand()%8;         //随机产生8种不同的题型
switch (q)
{
case 1:
{
printf("%d+%d=    \t",a,b);

break;
}
case 2:
{
printf("%d-%d=    \t",a,b);

break;
}
case 3:
{
printf("-%d+%d=   \t",a,b);

break;}
case 4:
{
printf("%d+(-%d)= \t",a,b);

break;}
case 5:
{
printf("-%d+(-%d)=\t",a,b);

break;}
case 6:
{
printf("-%d-%d=   \t",a,b);

break;
}
case 7:
{
printf("%d-(-%d)= \t",a,b);

break;
}
case 8:
{
printf("-%d-(-%d)=\t",a,b);

break;
}
default:{"输出有误!";}
}
if(i%linenum==0)
{
printf("\n");
}
}

}
else if(judear==1)
{
srand((int)time(0));
for(int i=1;i<=num;i++)
{

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

w=1+rand()%2;     //随机产生2种不同的题型
switch (w)
{
case 1:
{
printf("%d+%d=    \t",a,b);

break;
}
case 2:
{
printf("%d-%d=    \t",a,b);

break;
}
default:{"输出有误!";}
}
if(i%linenum==0)
{
printf("\n");
}
}

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

}

void add(int num1,int num2)
{
int userresult,truresult;
scanf("%d",&userresult);
truresult=num1+num2;
if(truresult==userresult)
{
printf("  √");
truenum++;
}
else if(truresult!=userresult)
{
printf("  ×");
falsenum++;
}
printf("\n");

}

void sub(int num1,int num2)
{
int userresult,truresult;
scanf("%d",&userresult);
truresult=num1-num2;
if(truresult==userresult)
{
printf("  √");
truenum++;
}
else if(truresult!=userresult)
{
printf("  ×");
falsenum++;
}
printf("\n");

}

void mul(int num1,int num2)
{
int userresult,truresult;
scanf("%d",&userresult);
truresult=num1*num2;
if(truresult==userresult)
{
printf("  √");
truenum++;
}
else if(truresult!=userresult)
{
printf("  ×");
falsenum++;
}
printf("\n");

}

void division(int num1,int num2)
{
int userresult,truresult;
scanf("%d",&userresult);
truresult=num1/num2;
if(truresult==userresult)
{
printf("  √");
truenum++;
}
else if(truresult!=userresult)
{
printf("  ×");
falsenum++;
}

}

void answoperation(int num,int numvalue,int judear,int judemd,int linenum)
{
switch(judemd)
{
case 0:{
int x,y;
if(judear==0){
srand((int)time(0));
for(int i=1;i<=num;i++)          //出题数量
{

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

x=1+rand()%10;     //随机产生10种类型的题目
switch (x)
{
case 1:
{
printf("%d+%d=",a,b);
add(a,b);
break;
}
case 2:
{
printf("%d-%d=",a,b);
sub(a,b);
break;
}
case 3:
{
printf("-%d+%d=",a,b);
add(-a,b);
break;
}
case 4:
{
printf("%d+(-%d)=",a,b);
add(a,-b);
break;
}
case 5:
{
printf("-%d+(-%d)=",a,b);
add(-a,-b);
break;
}
case 6:
{
printf("-%d-%d=",a,b);
sub(-a,b);
break;
}
case 7:
{
printf("%d-(-%d)=",a,b);
sub(a,-b);
break;
}
case 8:
{
printf("-%d-(-%d)=",a,b);
sub(-a,-b);
break;
}
case 9:
{
printf("%d*%d=",a,b);
mul(a,b);
break;}
case 10: {
if (b!=0)
{
printf("%d/%d=",a,b);
division(a,b);
}
else
{
b=b+1;
printf("%d/%d=",a,b);
division(a,b);

}
break;
}
default:{"输出有误!";}
}
if(i%linenum==0)
{
printf("\n");
}
}

}
else if(judear==1)
{
srand((int)time(0));
for(int i=1;i<=num;i++)
{

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

y=1+rand()%4;     //随机产生四种不同的题目
switch (y)
{
case 1:
{
printf("%d+%d=",a,b);
add(a,b);
break;
}
case 2:
{
printf("%d-%d=",a,b);
sub(a,b);
break;
}
case 3:
{
printf("%d*%d=",a,b);
mul(a,b);

break;
}
case 4: {
if (b!=0)
{
printf("%d/%d=",a,b);
division(a,b);
}
else
{
b=b+1;
printf("%d/%d=",a,b);
division(a,b);
}
break;
}
default:{printf("输出有误!");}
}
}
if(i%linenum==0)
{printf("\n");}

}
else
printf("出错!");

break;
default:{printf("出错!");}

}
case 1:{
int q,w;
if(judear==0)
{
srand((int)time(0));
for(int i=1;i<=num;i++)
{

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

q=1+rand()%8;         //随机产生8种不同的题型
switch (q)
{
case 1:
{
printf("%d+%d=",a,b);
add(a,b);
break;
}
case 2:
{
printf("%d-%d=",a,b);
sub(a,b);
break;
}
case 3:
{
printf("-%d+%d=",a,b);
add(-a,b);
break;}
case 4:
{
printf("%d+(-%d)=",a,b);
add(a,-b);
break;}
case 5:
{
printf("-%d+(-%d)=",a,b);
add(-a,-b);
break;}
case 6:
{
printf("-%d-%d=",a,b);
sub(-a,b);
break;
}
case 7:
{
printf("%d-(-%d)=",a,b);
sub(a,-b);
break;
}
case 8:
{
printf("-%d-(-%d)=",a,b);
sub(-a,-b);
break;
}
default:{"输出有误!";}
}
if(i%linenum==0)
{
printf("\n");
}
}

}
else if(judear==1)
{
srand((int)time(0));
for(int i=1;i<=num;i++)
{

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

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

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

}

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

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);
}
printf("是否要在此系统上直接运算?请输入【0/1】表示【是/否】:");
scanf("%d",&answer);
while(answer!=0 && answer!=1)                         //判断用户是否按要求输入
{
printf("sorry!输入错误,请按要求输入:");
scanf("%d",&answer);
}
if (answer==1)
{
operation(num,numvalue,judear,judemd,linenum);           //调用operation函数
}
else if(answer==0)
{
answoperation(num,numvalue,judear,judemd,linenum);                       //调用answ-operation函数
}

}

int main(int argc, char* argv[])
{

printf("                         四则运算出题系统                      \n");
print();
printf("最后计算正确%d道题,错误%d道题\n",truenum,falsenum);
printf("\n");
return 0;
}


三、运行结果





其他功能和上篇发的内容相同,此处就不在贴图啦

四、心得体会

由于一开始写四则运算时没想太多,就是想着把这个简简单单的快完成就好了,所以写的程序的扩展性不好,导致后面在一点点的加功能时自己乱,读者看着更乱,虽然功能都实现了,但是代码显得没有条理,所以我想以后再遇到为题时不要先急着下手,要先想想大体思路以及框架,这样在操作起来后就会有条理,思路不乱了程序敲起来也会更顺手吧,对于编程我真的算是一个初学者了,和大伙分享一下我的经验教训吧。

五、psp0级

周活动项目计划总结表+时间记录日志+缺陷记录志

一、项目计划总结:

表1 周活动总结表

姓名:曹美娜 日期:2015.03.15

日期/任务

听课

编写程序

阅读课本

准备考试

日总计

周日

周一

300

45

345

周二

300

80

380

周三

100

100

200

周四

300

115

60

475

周五

周六

周总计

总计

800

268

95

1163

平均

800

268

95

1163

最大

800

268

95

1163

最小

800

268

95

1163

表2 时间记录日志

学生 曹美娜 日期 2015.03.19

教师 王建民 课程 软件工程

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/18

10:40

12:13

93

结队编程

3/19

17:00

18:20

80

编写四则运算程序

3/20

阅读梦断代码

看书

表3 缺陷记录日志

学 生 曹美娜

日 期 2015.03.19

教 员 王建民

程序号

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3/18

0

结队编程

编译

1分钟

将输出语句写到内循环中

3/19

1

编程

编译

2分钟

全局变量应用不正确

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