码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程第一次作业 出题程序

时间:2016-03-08 23:30:02      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

  一、功能介绍

  程序采用c语言编写,实现功能:

  1.每次出30道题,并给出答案  

  2.四则运算(结果不会出现负数,除法全部可以整除) 

  3.真分数四则运算(结果全为最简形式)

二、完成效果

  1.开始界面

技术分享

  2.四则运算出题

技术分享

  3.显示答案

技术分享

  4.真分数四则运算

技术分享

  5.显示答案

技术分享

  三、编写过程

  程序的两大功能就是四则运算和真分数的四则运算,所以在主函数设计if分支,按照选择使用不同的功能。

  这两个主要部分都是通过生成一个0-3的随机数来控制出的题是加法还是减法还是乘除法,然后用for循环完成30道题的生成。

  1.四则运算的编写

  生成两个随机的运算数,值控制在10以内。

  如果加法就直接加,然后将结果存放在数组answer[30]里面。

  如果是减法,要比较两个随机数的大小,避免被减数小于减数而产生负数,如果被减数小于减数,则将两数位置调换,再将结果存放在数组中。

  如果是乘法就直接乘,结果存放在数组中。

  除法先用随机数生成结果和除数,然后相乘求出被除数,这样可以保证除法答案全是整数。

  最后用for循环打印答案。

  2.真分数运算的编写

  生成四个随机的运算数,值控制在10以内,分别作为两个运算数的分子和分母。

  用于保存结果的数组也有一个变为两个,分别存放结果的分子和分母,这样设计方便将分数化成最简形式。

  如果是加法,按照最小公倍数通分,然后存放结果。

  如果是减法,先求出结果,判断正负,如果为负数则调换两数顺序,然后将结果(负数)取反并保存。

  如果是乘法,现将分子相乘,分母相乘,然后求出分子分母的最大公约数化成最简。

  如果是除法,将被除数分子分母调换位置,按照乘法方法计算。

  最后用for循环打印答案。

  

  完整代码

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

void Function1();
void Function2();
int maxg(int a, int b);

int main(void)
{
int choose;
printf("欢迎使用!\n\n请选择以下操作:\n\n");
printf("1.整数四则运算\n\n2.真分数运算\n\n");
printf("输入对应选项数字,按回车确认\n");
//system("pause");
scanf("%d",&choose);
if (choose == 1)
Function1();//四则运算
else
if (choose == 2)
Function2();//真分数运算
else
printf("非法输入!");
return 0;
}

void Function1()
{
int i ;
int answer[30], a, b, c,d;
for (i = 0; i < 30; i++)
{
a = (int)rand() % 4;
if (a == 0)//加法
{
b = (int)rand() % 10;
c = (int)rand() % 10;
printf("第%d题 %d+%d= \n",i+1,b,c);
answer[i] = b + c;
}
else
if (a == 1)//减法
{
b = (int)rand() % 10;
c = (int)rand() % 10;
if (c > b)//避免出现负数
{
d = b;
b = c;
c = d;
}
printf("第%d题 %d-%d= \n", i + 1, b, c);
answer[i] = b - c;
}
else
if (a == 2)//乘法
{
b = (int)rand() % 10;
c = (int)rand() % 10;
printf("第%d题 %dX%d= \n", i + 1, b, c);
answer[i] = b * c;
}
else
if (a == 3)//除法
{
b = (int)rand() % 10;
c = (int)rand() % 10;
d = b*c;//保证结果都是整数
printf("第%d题 %d÷%d= \n", i + 1, d, c);
answer[i] = b;
}
}
system("pause");//按任意键显示答案
printf("\n");
for (i = 0; i < 30; i++)
{
printf("第%d题 %d\n", i + 1, answer[i]);
}
system("pause");
}

void Function2()
{
int fenzi[30],fenmu[30];
int a, b, c, d, e, i;
for (i = 0; i < 30; i++)
{
a = (int)rand() % 4;
if (a == 0)
{
b = ((int)rand() % 9) + 1;//避免分母出现0
c = ((int)rand() % 9) + 1;
d = ((int)rand() % 9) + 1;
e = ((int)rand() % 9) + 1;
printf("第%d题 (%d/%d)+(%d/%d)= \n", i + 1, b, c,d,e);//按最小公倍数化简
fenmu[i] =c*e/maxg(c,e) ;
fenzi[i] = fenmu[i] / c*b + fenmu[i] / e*d;
}
else
if (a == 1)
{
b = ((int)rand() % 9) + 1;
c = ((int)rand() % 9) + 1;
d = ((int)rand() % 9) + 1;
e = ((int)rand() % 9) + 1;
fenmu[i] = c*e / maxg(c, e);//按最小公倍数化简
fenzi[i] = fenmu[i] / c*b - fenmu[i] / e*d;
if (fenzi[i] < 0)//如果出现负数,将减数与被减数调换
{
fenzi[i] = 0 - fenzi[i];//保证结果为正数
printf("第%d题 (%d/%d)-(%d/%d)= \n", i + 1, d, e, b, c);
}
printf("第%d题 (%d/%d)-(%d/%d)= \n", i + 1, b, c, d, e);
}
else
if (a == 2)
{
b = ((int)rand() % 9) + 1;
c = ((int)rand() % 9) + 1;
d = ((int)rand() % 9) + 1;
e = ((int)rand() % 9) + 1;
printf("第%d题 (%d/%d)X(%d/%d)= \n", i + 1, b, c, d, e);
fenzi[i] = b*d;
fenmu[i] = c*e;
fenzi[i] = fenzi[i] / maxg(fenzi[i], fenmu[i]);//通分后分子分母除以最大公约数
fenmu[i] = fenmu[i] / maxg(fenzi[i], fenmu[i]);
}
else
if (a == 3)
{
b = ((int)rand() % 9) + 1;
c = ((int)rand() % 9) + 1;
d = ((int)rand() % 9) + 1;
e = ((int)rand() % 9) + 1;
printf("第%d题 (%d/%d)÷(%d/%d)= \n", i + 1, b, c, d, e);
fenzi[i] = b*e;
fenmu[i] = c*d;
fenzi[i] = fenzi[i] / maxg(fenzi[i], fenmu[i]); //通分后分子分母除以最大公约数
fenmu[i] = fenmu[i] / maxg(fenzi[i], fenmu[i]);
}
}
system("pause");//按任意键显示答案
printf("\n");
for (i = 0; i < 30; i++)
{
if (fenzi[i]==0)
printf("第%d题 %d\n", i + 1, fenzi[i]);//如果分子为0,直接将0作为结果打印
else
printf("第%d题 %d/%d\n", i + 1, fenzi[i],fenmu[i]);
}
system("pause");
}

int maxg(int a, int b)//最大公约数
{
int c, d;
if (a < b)
{
c = a;
a = b;
b = c;
}
d = a%b;
if (d == 0)
return b;
else
maxg(b, d);
}

软件工程第一次作业 出题程序

标签:

原文地址:http://www.cnblogs.com/wangtianning1223/p/5256260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!