四则运算二
一,设计思路:
1,避免题目重复,开始准备使用链表后来由于掌握不熟练没能够实现。然后改用定义三个数组进行这不实现,每一道题都要和前面的题目进行比较如果完全不一样才符合要求,否则重新生成。
2,可定制和打印方式的实现:可定制的实现是在函数里面设置了可变参数,供用户进行选择题目的数量。打印方式分为逐行打印和按每行几列进行打印。
3,其余参数的控制,都是先给用户输出提示信息,给参数设置控制量,用户输入0则有该参数,输入0则没有该参数,其余提示输入错误请重新输入。
二,源代码:
#include<stdlib.h>
#include<stdio.h>
void Display(int p); //输出题目
int a[100],b[100],c[100];
int i;
void Carry() //执行全部过程,添加出错处理
{
int j;
int t;
int m;
int n;
int q;
int d;
int p;
int r;
printf("1.请选择是否有乘除法(0:是 1:否)\n");
scanf("%d",&m);
if(m!=0&&m!=1)
{
printf("输入错误,请重新输入!\n");
Carry();
}
printf("2.请输入取值范围:(0-?)\n");
scanf("%d",&r);
printf("3.请选择加减有无负数:(0:有 1:无)\n");
scanf("%d",&n);
if(n!=0&&n!=1)
{
printf("输入错误请重新输入!\n");
Carry();
}
if(m==0)
{
printf("4.请选择出发有无余数:(0:有 1:无)\n");
scanf("%d",&d);
if(d!=0&&d!=1)
{
printf("输入错误请重新输入!\n");
Carry();
}
}
printf("5.请输入题目个数:\n");
scanf("%d",&q);
if(q<=0)
{
printf("输入错误请重新输入!\n");
Carry();
}
printf("6.请选择打印方式:0为逐行打印,输入其他数字则为一行几列\n");
scanf("%d",&p);
if(p<0)
{
printf("输入错误请重新输入!\n");
Carry();
}
for(i=0;i<q;i++)
{
a[i]=rand()%r;
b[i]=rand()%r;
c[i]=rand()%4;
if(c[i]==3&&b[i]==0)
{
b[i]++;
}
for(j=0;j<i;j++) //判断题目是否重复,若重复则a[i]++
if(a[j]==a[i]&&b[j]==b[i]&&c[j]==c[i])
a[i]++;
if(m==0&&n==0&&d==0)
{
Display(p);
}
else if(m==1) //没有乘除法
{
if(c[i]>=2)
c[i]=c[i]-2;
Display(p);
}
else if(m==0&&n==1&&d==0) //无负数,且被除数大于除数
{
if(a[i]<b[i])
{
t=a[i];
a[i]=b[i];
b[i]=t;
}
Display(p);
}
else
{
if(c[i]==3)
{
if(a[i]<b[i])
{
t=a[i];
a[i]=b[i];
b[i]=t;
}
while(a[i]%b[i]!=0) //无余数
b[i]++;
}
Display(p);
}
}
}
void Display(int p) //输出题目
{
if(p==0)
{
if(c[i]==0)
printf("%d+%d=\n",a[i],b[i]);
if(c[i]==1)
printf("%d-%d=\n",a[i],b[i]);
if(c[i]==2)
printf("%d*%d=\n",a[i],b[i]);
if(c[i]==3)
printf("%d/%d=\n",a[i],b[i]);
}
else
{
if(c[i]==0)
printf("%d+%d=\t",a[i],b[i]);
if(c[i]==1)
printf("%d-%d=\t",a[i],b[i]);
if(c[i]==2)
printf("%d*%d=\t",a[i],b[i]);
if(c[i]==3)
printf("%d/%d=\t",a[i],b[i]);
if((i+1)%p==0)
printf("\n");
}
}
void main()
{
Carry();
}
三,运行截图:
四,实验总结:
1,开始的逻辑设计思路有些问题,导致程序不能按正常的功能实现。
2,全局变量定义和调用有无导致程序运行错误。
3,避免重复设计复杂后来改为定义数组进行比较来解决的问题。
五,项目进行表:
1,项目计划总结:
周活动总结表
姓名:胡顺利 日期:2015/3/10
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
|
|
|
|
|
周一 |
|
|
|
|
|
|
|
周二 |
100 |
|
|
|
|
|
100 |
周三 |
|
25 |
35 |
|
|
|
60 |
周四 |
|
60 |
10 |
|
|
|
70 |
周五 |
100 |
0 |
|
|
|
|
100 |
周六 |
|
90 |
|
|
|
|
90 |
周总结 |
200 |
175 |
45 |
|
|
|
420 |
阶段时间和效率 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
总计 |
|
|
|
|
|
|
|
平均 |
|
|
|
|
|
|
|
最大 |
|
|
|
|
|
|
|
最小 |
|
|
|
|
|
|
|
以前各周的累计时间
总计 |
200 |
175 |
45 |
|
|
|
420 |
平均 |
200 |
175 |
45 |
|
|
|
420 |
最大 |
200 |
175 |
45 |
|
|
|
420 |
最小 |
200 |
175 |
45 |
|
|
|
420 |
2、时间记录表:
学生 胡顺利 日期 2015/3/11
教师 王建民 课程 PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/11 |
16:45 |
17:10 |
|
25 |
编程 |
四则运算2 |
|
17:10 |
17:45 |
|
35 |
看书 |
数据结构 |
3/12 |
17:13 |
17:58 |
|
45 |
编程 |
四则运算2 |
|
17:58 |
18:08 |
|
10 |
看书 |
C++ |
|
18:34 |
18:49 |
|
15 |
编程 |
四则运算2 |
3/13 |
|
|
|
|
|
|
3/14 |
9:30 |
11:00 |
|
90 |
编程 |
四则运算2 |
3、缺陷记录日志:
学生 胡顺利
日期 3/14
教员 王建民
程序号
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
|
3/14 |
1 |
1 |
编码 |
编译 |
10min |
|
|
描述:全局变量的声明和调用错误。 |
|||||||
|
2 |
2 |
编码 |
编译 |
21min |
|
|
描述:避免重复设计思路没能实现,后来改为数组进行比较 |
|||||||
|
3 |
3 |
设计 |
编译 |
2min |
|
|
描述:除数为零未考虑进去 |
|||||||
|
4 |
3 |
设计 |
编译 |
2min |
|
|
描述:控制参数逻辑设计错误 |
|||||||
|
5 |
3 |
设计 |
编译 |
8min |
|
|
描述:没有添加出错处理 |
|||||||
|
|
|
|||||
|