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

小數化分數c語言

發布時間: 2024-03-29 06:20:16

c語言中,如何將小數轉化為百分數

將小數乘以100就可以得到百分數,具體實現可以參考如下程序:

#include<stdio.h>
voidmain()
{
floatpercent;
scanf("%f",&percent);//輸入小數
if(percent<0||percent>1)//如果小數不在0~1的范圍內,則輸出錯誤提示
printf("輸入的小數錯誤");
else//輸入的小數在0~1的范圍內,則輸出對應的百分數形式
printf("%f對應的百分數為:%f%",percent,100*percent);
}

㈡ C語言 如何編寫將小數轉換成分數(可以肯定該小數能轉換成分數)

循環小數麻煩些,比如
0.(16789)
這代表0.1678916789......
我們可以設s=0.(16789)
則100000s=16789.(16789)
相減得99999s=16789
則s=16789/99999
一般來說0.(x1x2..xn)可以化成x1x2..xn/99..9(n個),然後再約分

㈢ 請問在C語言中分數怎麼表示啊,即10/9

首先10/9是表達式,但是在C語言中沒有表示分數的形式,也就是當要以這種形式給出的時候C已經幫運算出結果了。所以你可以選擇兩種表達方式。

1、使用字元串,在使用使用時在轉化一下。

2、使用小數,就是1.1111...這種,申請一個Double型來儲存。

字元串就是 10/9 這種 char fenshu[]="10/9";當要使用的時候,還要再次轉換成Double型。所以說,想要的分數形式只是一個外表沒實際用處。

(3)小數化分數c語言擴展閱讀:

字元串在存儲上類似字元數組,它每一位單個元素都是能提取的,字元串的零位是它的長度,如s[0]=10,這提供給我們很多方便,例如高精度運算時每一位都能轉化為數字存入數組。

通常以串的整體作為操作對象,如:在串中查找某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字元串相等的充要條件是:長度相等,並且各個對應位置上的字元都相等。

㈣ 怎樣用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;
}

熱點內容
zenly為什麼不能下載安卓機 發布:2024-11-28 18:59:05 瀏覽:295
怎麼把輔助放入伺服器 發布:2024-11-28 18:53:06 瀏覽:598
渲染器伺服器ip一定嗎 發布:2024-11-28 18:44:38 瀏覽:648
光遇的伺服器老是爆滿怎麼辦 發布:2024-11-28 18:41:10 瀏覽:714
sql最大日期的記錄 發布:2024-11-28 18:35:35 瀏覽:716
數據伺服器和電腦如何連接 發布:2024-11-28 18:06:49 瀏覽:745
怎麼讓編譯器輸出的字元相隔單位 發布:2024-11-28 18:04:25 瀏覽:524
w7電腦如何顯示配置 發布:2024-11-28 18:01:35 瀏覽:116
智通編譯股票股東 發布:2024-11-28 17:51:56 瀏覽:731
恥辱2低配置怎麼設置 發布:2024-11-28 17:51:50 瀏覽:92