999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C語言中“/”影響運算精度問題的探討

2008-12-31 00:00:00
電腦知識與技術 2008年30期

摘要:使用C語言編程進行計算的時候常常會因為不注意類型轉換產生問題,尤其是在使用除法運算符“/”的時候,經常因為沒有注意運算數據類型轉換,從而導致運算結果不正確或著說是精度不夠的問題。以下就C語言中“/”影響運算精度的問題做簡單的探討,希望助于初學者甚至是有一定編程水平的人更好地使用C語言。

關鍵詞:C語言;精度;除法運算符

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)30-0604-02

Affect Arithmetic Accuracy Problem Investigation and Discussion in C Language

CHEN Jie, DANG Qun

(Northeastern University at Qinhuangdao (Computer Engineering),Qinhuangdao 066004,China)

Abstract: Using the C language programming to be in progress when secretly scheming against often may produce problem because of not paying attention to a type change , when using the division arithmetic magic figure\" especially, change , lead to thereby arithmetic result block of wood rightness or insufficient problems of accuracy often because of not paying attention to the arithmetic data type. The problem \"affecting arithmetic accuracy's hereinafter right away in C language\" makes simple investigation and discussion , hopes that aiding in the beginner is that the horizontal people of Cheng uses C language much better even have one to delimit organizational structure.

Key words: C language; accuracy; division operator

1 引言

C語言中除法運算符(“/”)是一個雙目運算符,雖然它的運算規(guī)則比較簡單,但是在實際的編程中,許多人也會因為沒能很好地理解它,從而導致計算的結果精度不夠的問題。下面我們從除法運算符最簡單的規(guī)則開始探討,從而讓C 語言初學者甚至是有一定編程水平的人能夠正確地使用“/”運算符。

2 C語言程序中的“/”運算符與數學中的“/”的不同

先來看一個求平均值的例子:

main()

{int a,b,c;

float ave;

scanf(“%d,%d,%d”,a,b,c);

ave=(a+b+c)/3;

printf(“ave=%f\”,ave);

}

從數學的角度來看這個程序完全正確,然而當你多輸入幾組數據測試的時候,你會發(fā)現運行的結果并不是理論上的結果。比如輸入:1,4,5 三個數,然而輸出結果卻是:ave=3.000000,這顯然不是我們想要的結果:3.333333。這是為什么呢?這就涉及到“/”運算符的規(guī)則問題了。

3 “/”運算符的規(guī)則

3.1 類型轉換

C語言中規(guī)定:相同類型的數據才可以直接進行運算,其結果還是原數據類型。而當不同的數據類型進行運算時,需要將數據轉換成同一數據類型,然后才可以進行運算。轉換可以通過兩種方式實現:

3.1.1 數據類型的隱含轉換

當不同類型進行運算時,要先轉為精度較高類型,然后進行運算。默認以下順序由低到高轉換:

3.1.2 數據類型的強制轉換

程序員也可以強制性地改變數據的類型,一般格式為:(類型標識符)(表達式)。如(float)(x+y)表示將表達式x+y的值轉換成float型。需要注意的是:在強制型轉換時,會得到一個指定類型的中間變量,原來變量的類型并未發(fā)生改變。比如:(int)a如果a原定義為float型,進行強制類型轉換后得到一個int 型的中間變量,它的值等于a的整數部分,而a的類型不變(仍為float型)。

3.2 整型數和實型數的除法運算

從剛才的論述中我們很容易理解一個C語言規(guī)則:當“/”兩邊的操作數均為整型時,所得結果也是一個整型;當“/”兩邊的操作數只要有一個為實型時,則運算結果為實型。在C語言中,整數除法運算結果的小數部分都被丟棄,這個過程被稱為截尾(truncation)。沒有把整數除法運算的結果四舍五入到最近的整數,而是進行截尾,即舍棄整個小數部分,若要強制性地用float型輸出,小數部分也全部為0。

現在再來看上例,a,b,c均為int型,所以a+b+c也為int型,而3也是int型則(a+b+c)/3也應為int型,表達式將運算結果賦給float型變量ave,所以運算結果3以實數3.000000的形式放在ave中,并以“%f”的格式輸出,則輸出結果當然為3.000000。此程序可將3改為3.0,則可輸出正確結果:3.333333。

4 實例分析

例1:請看以下程序

main()

{int a=35;

float b;

b=a/2;

printf(“%f”,b);

}

輸出結果:17.0 00000

分析:在此程序中兩操作數a和2均為int型,運算結果當然也為int型。程序將運算結果賦給float 型變量b,所以運算結果17以實數17.000000的形式存放在b中,并以%f的格式輸出,則輸出結果為17.000000 。

顯然這個程序不能保證運算的精度。若要保證運算精度,可以將語句“b=a/2;”改為“b=a/2.0;”或“b=(float)a/2;”,此時兩操作數在運算前轉換為實型,所以運算結果也為實型,所以輸出結果為:17.500000 。

例2:4*3/2 不滿足結合律

在數學中4*3/2同4*(3/2)的結果是相同的,而在C語言中則不同:

main()

{int a,b;

a= 4*3/2;

b=4*(3/2);

printf(“%d,”,a);

printf(“%d”,b);

}

輸出結果是:6,4

分析:在第一個輸出語句中,先運算4*3得到12,然后在用12整除以2,然后以整型輸出,所以得到結果:6。而在第二個輸出語句中,由于()的優(yōu)先級大于*,則先運算“3/2”,而3和2是int型,所以3/2的運算結果為1,然后再與4相乘得到輸出結果:4,結果不正確。可將3改為3.0,則操作數在運算前將類型轉換為實型,最后以整型輸出,則可得運算結果得:6。

例3:輸入一個數n,求 1到n的每個數的階乘的倒數的和(sum=1/1!+1/2!+1/3!+…+1/n!) 。

main()

{int i;

unsigned n;

long p=1;

float sum=0.000000;

printf(“please enter anumber:”);

scanf (“%u”,n);

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

{p=p*i;

sum=sum+1/p;

}

printf(“sum=%f”,sum);

}

顯然無論輸入什么正整數結果均為1.000000,因為程序執(zhí)行到“sum=sum+1/p;”這條語句的時候,由于1和p都是int型,所以當p大于2的時,1/p就始終為0了,所以最終結果為1。若想保證精度,則可以 把i定義為float型或將循環(huán)中的“sum=sum+1/p;”改為“sum=sum+1.0/p;”,無論怎樣,要保證1和p中至少有一個為實型,才能得出理想的結果。

以上程序是以Turbo C 環(huán)境為標準。

5 結束語

在C語言中,如果沒有很好的理解類型轉換,那么在實際的編程中就會出現很多的漏洞。特別是在除法運算的時候,很多人都直接用int型除以int型,導致了得到了許多不理想的結果。所以在實際的編程中,一定要注意除法運算符精度問題。

參考文獻:

[1] 譚浩強.C語言程序設計[M].2版.北京:清華大學出版社,2002.

[2] Stephen prata.primer plus[M].5版,中文版.云巔工作室,譯.北京:人民郵電出版社,2005.

[3] 黨群.C語言程序設計[M].沈陽:東北大學出版社,2005.

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文

主站蜘蛛池模板: 国产欧美日韩另类精彩视频| 国产精品人成在线播放| 国产成人亚洲毛片| 国产精品永久在线| 一本色道久久88| 亚洲 欧美 日韩综合一区| 亚洲成人黄色在线| 亚洲天堂久久| 久热re国产手机在线观看| 国产全黄a一级毛片| 国产国产人成免费视频77777 | 色综合久久88| 日韩欧美国产精品| 日韩123欧美字幕| 色香蕉影院| 最新亚洲人成网站在线观看| 蜜臀AV在线播放| 国产成人亚洲精品无码电影| 久久综合色天堂av| 污污网站在线观看| 高清不卡毛片| 国产成人精品午夜视频'| 免费国产小视频在线观看 | 青青青亚洲精品国产| 国产一级在线观看www色| 久久综合色视频| 在线欧美国产| 一级全免费视频播放| 欧美a在线| 色精品视频| 欧美在线网| 中文字幕在线视频免费| 日韩福利视频导航| 欧美在线伊人| 精品人妻一区二区三区蜜桃AⅤ| 亚洲精品亚洲人成在线| 亚洲欧美国产视频| 91视频青青草| 无码啪啪精品天堂浪潮av| 久久综合色播五月男人的天堂| 五月六月伊人狠狠丁香网| 久久人搡人人玩人妻精品一| 露脸一二三区国语对白| h网址在线观看| 视频二区国产精品职场同事| 免费观看国产小粉嫩喷水| 呦女亚洲一区精品| a毛片免费在线观看| 国产精品亚洲专区一区| 宅男噜噜噜66国产在线观看| 狠狠v日韩v欧美v| 一级高清毛片免费a级高清毛片| 在线观看国产精品日本不卡网| 99久久国产综合精品2023| 国产成人无码久久久久毛片| 动漫精品中文字幕无码| 亚洲午夜天堂| 国产AV无码专区亚洲精品网站| 欧美yw精品日本国产精品| 亚洲综合片| 小13箩利洗澡无码视频免费网站| 国产一区二区影院| 国产91av在线| 国产成人综合亚洲欧美在| 国产91熟女高潮一区二区| 欧美激情第一区| 欧美日韩专区| 国产噜噜噜视频在线观看| 国产精品视频猛进猛出| 91在线国内在线播放老师 | 国产亚洲欧美在线视频| 亚洲一区波多野结衣二区三区| 97成人在线观看| 蜜桃视频一区二区三区| 97国产精品视频人人做人人爱| 成人一区在线| 欧美成人精品在线| 黄色一及毛片| 综合色区亚洲熟妇在线| 97se亚洲综合在线天天| 成人av专区精品无码国产 | 成人精品在线观看|