標籤:
一、功能介紹
程式採用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);
}
軟體工程第一次作業 出題程式