日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分数化小数c语言题目,习题 2-5 分数化小数 (decimal)(C语言版)

發布時間:2025/4/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分数化小数c语言题目,习题 2-5 分数化小数 (decimal)(C语言版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

習題描述:“輸入正整數 a, b, c,輸出a/b的小數形式,精確到小數點后c位。a, b<= 10^6, c<=100。輸入包含多組數據,結束標記為 a=b=c=0。”

樣例輸入:

1 6 4

0 0 0

樣例輸出:

Case 1: 0.1667

感悟://這道題有些小插曲,我之前嘗試了一些,由于基礎不是很扎實,想的比較復雜,后來了解到:格式化輸出(printf)的特殊用法。如printf(“% * . * lf\n”, 8, 4, (double)1/6); 會輸出8個字寬保留4位小數的浮點數運算結果。

這個方法比分別求小數的整數部分和小數部分 且還要考慮進位的情況簡易的多。但是測試時發現一旦c大于16以后,輸出的浮點數后面全為0,原因是double的有效精度只有16位。不適合題意,但是我還是把兩種方法給列了出來。

解法一(printf的特殊用法)(不符合題意要求):

#include

int main()

{

int a,b,c,s=0;

double m;

while(scanf("%d%d%d",&a,&b,&c)!=EOF)

{

if(a==0&&b==0&&c==0)

{

break;

}

m=1.0*a/b;

s++;

printf("Case %d: %.*f",s,c,m);

}

return 0;

}

解法二(模擬保留小數位的過程):

思路:這道題主要要注意的是小數的位數需要人工輸入,就是模擬保留小數位的過程,具體的思路是先輸出整數位和小數點,小數位則通過上一次除后的所得余數再除除數依次類推,到最后一位時要根據下一位的數值來判斷是否進位。

這里選擇題目的樣例就是1/6,輸出至小數點后4位數,先求出他們的商,既1÷6=0······1。商為0余數為1。那么此時就打印出”0.”來。此時應該算十分位,所以余數1應該乘以10為10,保持被除數和除數位數一致。10÷6=1······4。商為1余數為4。此時打印出來“1”來。則輸出的為“0.1”。再算百分位:40÷6=6······4,商為6余數為4。此時打印出“6”。輸出界面輸出“0.16”。以上辦法得出千分位和萬分位。輸出界面輸出結果為“0.1666”。此時就有四位小數,但是還要檢查最后一位是否為四舍五入。再次計算十萬分位,發現商為6,那么萬分位就要進一。最后結果為“0.1667”。

#include

int n,m[110];//n整數部分,m小數部分

int main()

{

int a,b,c,i,k=0;

while(scanf("%d%d%d",&a,&b,&c)&&a&&b&&c)

{

k++;

n=a/b;

a=a%b;

m[0]=0;//十分位小數,可以進位為整數

for(i=1;i<=c;i++)

{

m[i]=a*10/b;

a=a*10%b;

}

if(a*10/b>=5)//第C+1位,四舍五入

{

for(i=c;i>=0;i--)//進位處理

{

m[i]=m[i]+1;

if(m[i]<10)

break;//若不存在進位,跳出循環。

else

m[i]-=10;

}

}

n=n+m[0];//整數部分進位處理。

printf("Case %d: %d.",k,n);//打印整數部分及小數點

for(i=1;i<=c;i++)

printf("%d",m[i]);//打印小數部分。

printf("\n");

}

return 0;

}

歡迎指點!

總結

以上是生活随笔為你收集整理的分数化小数c语言题目,习题 2-5 分数化小数 (decimal)(C语言版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。