當前位置:首頁 » 編程語言 » c語言分數約分

c語言分數約分

發布時間: 2022-12-29 12:20:13

『壹』 編寫c語言程序,實現分數的約分

以下一段程序是循環運行的,即, 得出結果後繼續下一輪接受用戶輸入.
任何一個數為0 則退出.

程序運行過程:
接受用戶輸入兩個數, 第一個是分子, 第二個是分母.
輸出結果,並等待下一輪.
兩個數中任意一個為0, 則程序立即退出.

#include<stdio.h>
#include<conio.h>
main()
{
int iNum,iDeno,iMod,iMin;
iNum=iDeno=1;
while(iNum!=0 && iDeno!=0)
{
printf("Please input the numerator and the denominator:\n");
scanf("%i%i",&iNum,&iDeno);

if (iNum==0 || iDeno==0)
continue;
if (iNum<iDeno)
iMin=iNum;
else
iMin=iDeno;

for (int i=2;i<=iMin;i++)
{
if (i>iNum || i>iDeno)
break;

if (iNum%i==0 && iDeno%i==0)
{
iNum/=i;
iDeno/=i;
i=1;
}
}

printf("\n%i\n----\n%i\n",iNum,iDeno);
getch();
}

}

『貳』 簡單的c語言題目求最簡分數

#include<stdio.h>
intmain(){
inti,j,n;
scanf("%d",&n);
for(i=1;i<n;i++){
for(j=2;j<=i;j++)
if(i%j==0&&n%j==0)break;
if(j>i)printf("%d/%d,",i,n);
}
return0;
}

//運行示例:

『叄』 如何用C語言編程輸入兩個分數求和並以最簡分式的方式輸出

輸入可以用如下格式:
unsigned int a,b,c,d;

scanf("%d/%d",&a,&b);/*a/b*/
scanf("%d/%d",&c,&d);/*c/d*/
求最大公因數,可以用輾轉相除法;公分母=b、d的最小公倍數=b*d/b、d的最大公約數,
通分後,分子相加,結果的分子、分母用輾轉相除法求最大公約數,進行約分。
約分後的結果輸出。

『肆』 c語言,怎麼實現對分數<就是幾分之幾>的加減乘除等等的運算

  1. 定義一個數據結構,可以是一個長度2的數組,也可以是一個struct,下面以數組為例

  2. 定義兩個長度2的數組 a[2],b[2],分子分別保存在a[0],b[0],分母分別保存在a[1],b[1](負數的話,符號同分子一起)

  3. 乘:分母,分子分別相乘;除:乘以倒數(調換乘數的分子分母);然後約分(涉及最大公約數演算法,可網路)

  4. 加減:分母需要相同,涉及最小公倍數演算法(可網路)


以上思路和人工計算的方式相同,只是用c語言「翻譯」一下

另外提供一個思路,直接計算結果,然後從無限循環小數轉化成分數形式

『伍』 C語言 約分最簡分式

此即為求兩個數的最大公約數
最大公約數用歐幾里得演算法
int gcd(int a, int b)
{
if(0 == a%b)
return b;
return gcd(b, a%b);
}
int main()
{
int a,b,c;
scanf("%d %d", &a, &b);
c = gcd(MAX(a,b), MIN(a,b));
printf("%d %d\n", a/c, b/c);
return 0;
}

『陸』 編寫c語言程序,實現分數的約分

以下一段程序是循環運行的,即,
得出結果後繼續下一輪接受用戶輸入.
任何一個數為0
則退出.
程序運行過程:
接受用戶輸入兩個數,
第一個是分子,
第二個是分母.
輸出結果,並等待下一輪.
兩個數中任意一個為0,
則程序立即退出.
#include
#include
main()
{
int
iNum,iDeno,iMod,iMin;
iNum=iDeno=1;
while(iNum!=0
&&
iDeno!=0)
{
printf("Please
input
the
numerator
and
the
denominator:\n");
scanf("%i%i",&iNum,&iDeno);
if
(iNum==0
||
iDeno==0)
continue;
if
(iNum
iNum
||
i>iDeno)
break;
if
(iNum%i==0
&&
iDeno%i==0)
{
iNum/=i;
iDeno/=i;
i=1;
}
}
printf("\n%i\n----\n%i\n",iNum,iDeno);
getch();
}
}

『柒』 編寫C語言程序,計算由用戶輸入的兩個分數,求它們的加,減,乘,除.

這題,問過答過。
int Gcd(int a, int b){} 是求最大公約數函數。用於加,減,乘,除結果的約分。
輸入格式 是 4/3,9/8 用逗號分隔 2 個分數。

#include<stdio.h>
#include<math.h>
int Gcd(int a, int b)
{
if(b == 0)
return a;
return Gcd(b, a % b);
}
main(){
int a,b,c,d;
int e,f,g;
printf("input: 4/3,9/8\n");
scanf("%d/%d,%d/%d",&a,&b,&c,&d);
// printf("%d %d %d %d\n",a,b,c,d);
e = a*d+c*b;
f = b*d;
g = Gcd(f,e);
f = f/g; e = e/g;
printf("sum: %d/%d\n",e,f);
e = a*d-c*b;
f = b*d;
g = Gcd(f,e);
f = f/g; e = e/g;
printf("dif: %d/%d\n",e,f);
e = a*c;
f = b*d;
g = Gcd(f,e);
f = f/g; e = e/g;
printf("mul: %d/%d\n",e,f);
e = a*d;f=b*c;
g = Gcd(f,e);
f = f/g; e = e/g;
printf("quo: %d/%d\n",e,f);
return 0;
}
運行結果:
4/3,9/8
sum: 59/24
dif: 5/24
mul: 3/2
quo: 32/27

『捌』 C語言約分問題

#include"stdio.h"
intmain(intargc,char*argv[]){
intx,y,r,a,b;
printf("Pleaseenterx&y(int0<=x,y)... ");
scanf("%d%d",&x,&y);
if((a=x)&&(b=y)){
while(r=a%b){
a=b;
b=r;
}
printf("%d",x/b);
if((y/=b)!=1)
printf("/%d",y);
printf(" ");
}
elseif(x==0)
printf("0 ");
elseif(y==0)
printf("Nosolution... ");
return0;
}

運行樣例:

『玖』 怎樣用c語言寫一個將小數轉化成最簡分數的演算法

演算法很簡單,程序中已經說明。重要的是系統對浮點數是有修正的,導致結果出現問題。
如何解決,詳見程序。

//#include "stdafx.h" //VS 默認使用
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#pragma warning(disable: 4996)
//為了最大限度支持(目前)小數,整數定義成:__int64
//支持32位:以下分別為 int(__int32) 1E8
#define ZHENGSHU __int64
#define XIAOSHUDIANZUOYI 1E15 //double 最多隻能確精確到15位有效數字
#define XIUZHENG 1E-16 //用於修正浮點數計算誤差
int _tmain(int argc, _TCHAR* argv[])
{
//怎樣用c語言寫一個將小數轉化成最簡分數的演算法
//開始
double xs = 0.000625; //為了簡便,直接指定。也可以讓用戶輸入
//scanf("%lf", &xs);
ZHENGSHU fz, fm, zs, k, fh;
//數學演算法是:如 0.123456 = 123456/1000000 ,然後約分
//實現第一步轉換
if (xs < 0)
{
fh = -1;
xs = -xs;
}
else
{
fh = 1;
}
zs = (ZHENGSHU)xs; //支持假分數
//計算整數部分的有效數位數
k = 1;
while (zs / k > 0)
k *= 10;
xs -= (double)zs;
fm = XIAOSHUDIANZUOYI / k; //分母
xs = (double)((ZHENGSHU)((xs + XIUZHENG * k) * fm)) / fm; //修正浮點數計算誤差
xs += XIUZHENG; //修正浮點數計算誤差
fz = (ZHENGSHU)(xs * fm); //分子

for (;;) //這樣循環,是因為 C/C++ 中,for 循環效率最高
{ //約去多乘的 10 的倍數
if ((fz % 10 == 0) && (fm % 10 == 0))
{
fz /= 10;
fm /= 10;
}
else
{
break;
}
}
//實現第二步:約分。以下看起來有點麻煩,目的是為了減少演算法的時間復雜的
while ((fz % 2 == 0) && (fm % 2 == 0))
{ //將公約數 2 約盡
fz /= 2;
fm /= 2;
}
k = 3;
for (;;)
{
while ((fz % k == 0) && (fm % k == 0))
{
fz /= k;
fm /= k;
}
k += 2;
if (k > (ZHENGSHU)sqrt(fz))
break;
}

//將整數部分加上,形成假分數。如果原數為不為0整數,則化成分母為 1 的假分數
//如果原數為 0,則化成分子為 0,分母為 1。
if (fz == 0)
{
fz = fh * zs;
fm = 1;
}
else
{
fz = fh * (fz + fm * zs);
}
//結束

//顯示一下結果
printf("%lf = %lld/%lld\n", fh * (zs + xs), fz, fm);
//printf("%lf = %ld/%ld\n", fh * (zs + xs), fz, fm); //32位
system("pause"); //防止窗口一閃而退
return 0;
}

『拾』 C語言中怎樣約分

main()
{
intden,num,temp,x=0;
printf("請輸入分子!");
scanf("%d",&num);
printf("請輸入分母!");
scanf("%d",&den);
if(num!=den)
{temp=den>num?den:num;
while(temp>1)
{
if(den%temp==0&&num%temp==0)
{
printf("有公約數%d,約分後=%d/%d",temp,num/temp,den/temp);
x=1;
break;
}
elsetemp--;

}
}
elseprintf("分子分母相同");
if(x==0)printf("不能約分");
}

你如果要的是這個的話

熱點內容
安卓手機6位數密碼有多少組 發布:2025-07-02 21:50:31 瀏覽:797
存儲卡視頻多了 發布:2025-07-02 21:49:40 瀏覽:850
ajax無刷新上傳圖片 發布:2025-07-02 21:32:56 瀏覽:117
編譯器不認pow函數 發布:2025-07-02 21:27:04 瀏覽:339
w10隱藏文件夾 發布:2025-07-02 21:27:03 瀏覽:534
電腦d盤拒絕訪問 發布:2025-07-02 21:27:02 瀏覽:779
pythonif字元串比較大小 發布:2025-07-02 21:23:18 瀏覽:127
平安銀行信用卡怎麼設置密碼 發布:2025-07-02 21:21:11 瀏覽:214
群暉隱藏文件夾 發布:2025-07-02 21:00:28 瀏覽:570
pythonbytesio 發布:2025-07-02 20:45:56 瀏覽:196