软件工程第一次作业 四则运算程序编写
2016年3月10日 晴 沈阳
一、程序制作初衷以及功能介绍
制作初衷:本次四则运算程序我使用的是C语言,考虑到考研报考学校专业课考的是C语言所以打算借此好好复习C语言语法。
本程序主要功能是:1、自动生成30道题和其答案
2、支持整数四则运算
3、支持分数四则运算
二、程序演示
1、初始界面
2、输入1后按回车键进入出题与答案界面
3、按任意键位进入下一界面
4、按任意键位进入下一界面
三、编写代码想法与过程
首先,我先在草稿质上把四则运算的数学方法整理清楚,然后确定下来把整数运算和真分数运算分开进行编写,
于是便诞生了两个子函数Simple和Real。接着先书写主函数,主函数主要通过if语句对输入的数字进行判断从
而选择是否进入子函数Shengcheng中。由于要生成30道题所以在Shengcheng函数中利用for循环实现30次
循环产生30道题,并利用随机函数使整数m要么值为1要么值为2以此来判断使用Simple函数还是Real函数,
因此生成整数运算和真分数运算的几率是对半开的。
Simlpe函数中利用随机函数来实现使整数四种运算出现的几率相同,在四则运算中特别的是 1.减法运算需要
判断下随机产生的两个数大小,查看其是否需要交换,因为所得到的值必须是正数;2.除法运算则是利用乘法
运算来完成,为了不让出现小数,例如先随机产生2个整数a、b相乘得到整数c,再将c的值与a的值交换则能实
现a/b=c,c一定是整数。
Real函数中同样利用随机函数来实现使整数四种运算出现的几率相同,在四则运算中与整数不同的是:1.加减
法运算需要先通过分数运算,合成一个真分数,再上下同除通过MaxGYS函数得出最大公约数最终得到答案。
2.除法则需要将被除数分子与分母交换值后根据乘法运算编写。
完成30次运算后,我考虑到是给小学2年级学生使用,所以建立了一个友好的鼓励界面,如果推出程序则还会提
示用户如果有意见发送至邮箱。
四、代码附录
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
void Shengcheng();
void Simple();
void real();
int MaxGYS(int a,int b);
int system(const char *string);
int main(void)
{
int n;
Loop1: printf("\n\n\n\n\t\t\t*欢迎来到朴宝英的每日练习*\n\n\t\t\t[1] 生成小学数学四则运算30题练习\n\n\t\t\t[2] 退出程序\n\n\t\t\t请输入相应的选项,按回车键确定:");
scanf("%d",&n);
system("cls");
if (n==1)
Shengcheng();
else
if (n==2)
{
printf("\n\n\n\n\n\n\t\t感谢您对朴宝英软件公司的支持\n\n\t\t如果您对软件有意见请把意见以邮件形式发至\n\n\t\t295793858@qq.com\n\n\t\t我们将会尽快给您答复!\n\n\t\t");
return 0;
}
else
printf("输入错误请重新输入");
goto Loop1;
return 0;
}
void Shengcheng()
{
int m,i;
for(i=0;i<30;i++)
{
m=rand()%2+1;
if (m==1)
Simple();
else
real();
}
system("pause");
system("cls");
printf("\n\n\n\n\n\n\t\t宝英欧尼:宝宝今天全做对了吗?\n\n\t\t宝英欧尼:全对摸摸头哦~\n\n\t\t宝英欧尼:做错也没关系,按任意键回到主页再来一次!Fighting~-0-\n\n\t\t");
system("pause");
system("cls");
return ;
}
void Simple()
{
int m,b,c,d,t;
m=rand()%3+1;
b=rand()%20+1;
c=rand()%20+1;
switch(m)
{
case 1:{
d=b+c;
printf("%d+%d=\t\t\t\t\t\t\t\t\t%d\n",b,c,d);
}break;
case 2:{
if(b>c)
{
t=b;
b=c;
c=t;
}
d=b-c;
printf("%d-%d=\t\t\t\t\t\t\t\t\t%d\n",b,c,d);
}break;
case 3:{
d=b*c;
m= rand()%2+1;
if(m==1)
printf("%d*%d=\t\t\t\t\t\t\t\t\t%d\n",b,c,d);
else
printf("%d/%d=\t\t\t\t\t\t\t\t\t%d\n",d,b,c);
} break;
}
return ;
}
void real()
{
int a,b,c,d,e,f,g,h,t;
a=rand()%4+1;
b=rand()%9+1;//第一个数字分子
c=rand()%9+1;//第一个数字分母
d=rand()%9+1;//第二个数字分子
e=rand()%9+1;//第二个数字分母
if(b>c)
{
t=b;
b=c;
c=t;
}
if(d>e)
{
t=d;
d=e;
e=t;
}
switch(a)
{
case 1:{
f=c*e;
g=b*e+d*c;
h=MaxGYS(g,f);
f=f/h;
g=g/h;
printf("(%d/%d)+(%d/%d)=\t\t\t\t\t\t\t\t(%d/%d)\n",b,c,d,e,g,f);
}break;
case 2:{
f=c*e;
g=b*e-d*c;
if(g>0)
{
h=MaxGYS(g,f);
f=f/h;
g=g/h;
printf("(%d/%d)-(%d/%d)=\t\t\t\t\t\t\t\t(%d/%d)\n",b,c,d,e,g,f);
}
else
{
g=abs(g);
h=MaxGYS(g,f);
f=f/h;
g=g/h;
printf("(%d/%d)-(%d/%d)=\t\t\t\t\t\t\t\t(%d/%d)\n",d,e,b,c,g,f);
}
}break;
case 3:{
f=c*e;
g=b*d;
h=MaxGYS(g,f);
f=f/h;
g=g/h;
printf("(%d/%d)*(%d/%d)=\t\t\t\t\t\t\t\t(%d/%d)\n",b,c,d,e,g,f);
}break;
case 4:{
f=b*e;
g=c*d;
h=MaxGYS(g,f);
f=f/h;
g=g/h;
printf("(%d/%d)/(%d/%d)=\t\t\t\t\t\t\t\t(%d/%d)\n",b,c,d,e,g,f);
}
default:break;
}
return ;
}
int MaxGYS(int a,int b)
{
int c,t;
if(a<b)
{
t=a;
a=b;
b=t;
}
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
return a;
}