标签:
一、功能介绍
程序采用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