新編C語言程序設計教程練習三參考答案_第1頁
新編C語言程序設計教程練習三參考答案_第2頁
新編C語言程序設計教程練習三參考答案_第3頁
新編C語言程序設計教程練習三參考答案_第4頁
新編C語言程序設計教程練習三參考答案_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、練習三3.1把下面的代數(shù)式改寫成c語言表達式:(1) ax3+bx2+d (2) (3) (4) cos60°+ 8ey (5) (ax+sin)答案:(1) a * x * x * x + b * x * x + d(2)(a * b c * d) / (2 * a)(3)a /(b + c / a) (4)cos(3.1415926/180 * 60) + 8 * pow(e, y),其中cos和pow為庫函數(shù),注意:cos函數(shù)的參數(shù)為弧度。(5)1/2.0*(a * x + sin(3.1415926),其中sin為庫函數(shù),注意不能寫成1/2*(a * x + sin(3.14

2、15926),可參考3.3。3.2把下面的C語言表達式還原成代數(shù)式:(1) a/b/c*e*3 (2) exp(x*x/2)/sqrt(2*sin(30*3.1415926/180)(3) sqrt(fabs(pow(x,y)+log(y) (4) a*e/c/b*3答案:(1)或(2)(3)(4)或3.3求表達式1/2*(a*x+(b+x)/(4*a)的值。答:1/2的值為0,故整個表達式的值為0。3.4參考表3-1,根據(jù)操作符的優(yōu)先級和結合性用加括號方式確定表達式的求值順序,如a += a+2的求值順序可用加括號的方式表示為(a += (a+2))。(1) flag & n !=

3、0 (2) c = getchar( ) != 'n'(3) hi << 4 + low (4) *p3 (5) *p+ (6) 0 < n < q (7) !x | y+ (8) x + y > 0 && i+ < 0答:(1) (flag & (n != 0) (2) (c = (getchar( ) != 'n')(3) (hi << (4 + low) (4) (*(p3) (5) (*(p+) (6) (0 < n) < q) (7) (!x) | (y+) (8) (

4、x + y) > 0) && (i+) < 0)3.5試總結C語言操作符優(yōu)先級的規(guī)律。答:1.單目操作符的優(yōu)先級最高2.算術運算操作符的優(yōu)先級較高3.賦值操作符的優(yōu)先級較底4.逗號操作符的優(yōu)先級最底3.6寫出下面程序的輸出結果:#include <stdio.h>void main( )char x = 0xFFFF; printf("%dn", x-);答:1.給字符型變量賦值時,如果字面量較大,則僅取一個字節(jié),因此變量x的存儲狀態(tài)為8個1,當用"%d"解碼時輸出為-1.3.7 int a = 10時,求a -=

5、 a *= a += a /= 2的值,a的值為25時呢?答:a -= a *= a += a /= 2的求值順序為(a -= (a *= (a += (a /= 2)。a /= 2為a = a /2,a = 10時a /2為5, a /= 2執(zhí)行后a的值變?yōu)?,且子表達式的值為5。原表達式變?yōu)?a -= (a *= (a +=5)。再化簡為(a -= (a *=10)、(a -=100),最終變量a的值為0,整個表達式的值也為0。a的值為25時,(a -= (a *= (a += (a /= 2)變?yōu)?a -= (a *= (a += 12)、(a -= (a *= 24)、(a -=576

6、), 最終變量a的值為0,整個表達式的值也為0。3.8求下面表達式的值并編程驗證結果。(1) -7 / 5 (2)-7 % 5 (3)7 % -5(4) 7 / -5 (5)-7 / -5 (6)-7 % -5答:3.9 對于整型變量i,求表達式(2 * i + 1)/ 2和表達式(2 * i - 1)/ 2的值。答:當變量i大于0時,表達式(2 * i + 1)/ 2的值為i,表達式(2 * i - 1)/ 2的值為i-1。當變量i小于0時,表達式(2 * i + 1)/ 2的值為i+1,表達式(2 * i - 1)/ 2的值為i。3.10計算下面表達式的值:(1)3 / 2 + 2.0 (

7、2)3 / 2.0 + 2 (3) (float)3 / 2 + 2(4)float(3 / 2 + 2.0) (5)(4 + 1) / 2 + sqrt(9.0) * 1.2 / 2 + 5.5 (5)x %= 7 + 7 % 5(其中x的值為12) (6)(' z' - ' a') % 3 + 3.2(7)20000 + 20000 - 10000(int為2個字節(jié)時和4個字節(jié)時的值)答:(1)3 / 2 + 2.0=1 + 2.0 = 3.0(2)3 / 2.0 + 2=1.5 + 2 = 3.5(3) (float)3 / 2 + 2 = 1.5 + 2

8、 = 3.5(4)(float)(3 / 2 + 2.0) = (float) (1 + 2.0) = 3.0(5)(4 + 1) / 2 + sqrt(9.0) * 1.2 / 2 + 5.5 = 2 + 1.8 + 5.5 = 9.3(5)x %= 7 + 7 % 5(其中x的值為12)可改寫為:x = x %(7 + 7 % 5)簡化為x = 12 % 9,求值后變量x的值為3,表達式的值也為3。(6)(' z' - ' a') % 3 + 3.2 = 25 % 3 + 3.2 = 4.2(7)20000 + 20000 - 10000(int為2個字節(jié)時

9、和4個字節(jié)時的值)int為2個字節(jié)時int為4個字節(jié)時3.11已知f為float型變量,分別求sizeof(f)、sizeof(f + 2.3)、sizeof(f + 2)、sizeof 3.14和sizeof 3.14f的值。答:注意:f + 2的值為double型(這里VC的輸出為4似乎有問題,如下所示,在TC中的輸出為8),字面量3.14為double型,而字面量3.14f為float型。3.12 -1+1U等于0嗎?-2+1U等于幾?-3+1U呢?答:當int為4個字節(jié)時,在VC中。因為-1+1U值的類型為無符號,所以應用格式字符串"%u"輸出。3.13 有unsi

10、gned short ui = 3,uj = 5時,表達式ui - uj等于幾?有同學認為等于-2,因為編程驗證時語句printf("%hdn", ui - uj)的輸出為-2。有同學認為表達式ui - uj的值是無符號型,它不可能等于-2。你的觀點呢?當有short k = -5時,表達式ui + k的值是多少呢?答:語句printf("%hdn", ui - uj)的輸出結果不能證明ui uj的值為-2,因為printf函數(shù)只按參數(shù)的格式字符串解碼數(shù)據(jù)。表達式ui uj中一個為無符號數(shù),結果應該也為無符號數(shù),但是由例3-4的討論可知,由于算術運算時,

11、“短整型”都要統(tǒng)一為int型,這個操作可能改變變量的類型,故原表達式的類型需要討論,只有確定了類型之后,才能討論它的值。在VC中,求值時unsigned short要統(tǒng)一為4個字節(jié)的int型,統(tǒng)一后變量的類型也變成了有符號數(shù),因此,表達式ui uj的值為有符號整數(shù),為-2。在TC中,int型為2個字節(jié), unsigned short類型可直接求值,表達式ui uj的值為無符號數(shù),為65534。在求ui uj的值時, ui加uj的相反數(shù),即5的補碼。當有short k = -5時,表達式ui + k的求值過程與表達式ui uj的類似。3.14 寫出并分析下面程序的輸出結果: #include &

12、lt;stdio.h>void main()int i, j, k;i = j = k = 3;k = i+ + 1;printf("%d,%d,", i, k);k = +i + 1;printf("%d,%dn", i, k);k = j- - 1;printf("%d,%d,", j, k);k = -j - 1;printf("%d,%dn", j, k); 答:k = i+ + 1;/ k =3+1且變量i自增1變?yōu)?k = +i + 1; /變量i自增1變?yōu)?,k =5+1k = j- - 1;

13、/ k =3-1且變量j自減1變?yōu)?k = -j - 1; /變量j自減1變?yōu)?,k =1-13.15分析表達式(a = n)= 3和a+ = 3的合法性。答:表達式(a = n)= 3中,先求子表達式a = n的值,為變量a,則原表達式變?yōu)閍 = 3,故表達式(a = n)= 3合法。表達式a+ = 3中,賦值操作符的左邊不是變量,原表達式不合法。注:如果認為子表達式a = n的值為具體的數(shù)值時,則表達式(a = n)= 3也不合法。3.16 改寫表達式(i+) + (i+) + (i+),使其結果與編譯系統(tǒng)無關。答:1)int i=2,j;j = i; 原表達式改寫為j + j +j; i

14、 += 3;2)int i=2, j;j = i+; j += i+; j+=i+;3.17 已知float f = 5.1739,求表達式(int)(f * 100 + 0.5)/ 100、(int)(f * 100 + 0.5) / 100.0、(f * 100 + 0.5)/ 100和(f * 100 + 0.5)/ 100.0的值。答:(int)(f * 100 + 0.5)/ 100 = (int)517.89 / 100 = 517 / 100 = 5(int)(f * 100 + 0.5) / 100.0 = 517 / 100.0 = 5.17(f * 100 + 0.5)/

15、100 = 517.89 / 100 = 5.1789(f * 100 + 0.5)/ 100.0 = 517.89 / 100.0 = 5.17893.18 給下面的程序加上類似例3-11的注釋,并與例3-11比較。#include <stdio.h>void main( )int n, sum;printf("請輸入一個三位數(shù)的正整數(shù)n");scanf("%d", &n); /*用戶輸入235,變量n的值變?yōu)?35*/ printf("(%d)", n); /*輸出變量n的值,屏幕上顯示(235)*/ sum

16、= n / 100; /* n / 100為2,變量sum的值為2 */ printf("%d+", sum); /*屏幕上顯示(235)2+*/ n = n % 100; /* n % 100為35,變量n 的值變?yōu)?5 */ sum = sum + n / 10; /* sum + n / 10為2+3,變量sum的值變?yōu)?*/ printf("%d+", n / 10); /*屏幕上顯示(235)2+3+*/ n %= 10; /* n %= 10為n = n % 10,變量n的值變?yōu)?*/ sum += n; /* sum + n為sumsum

17、+ n,變量sum的值變?yōu)?0*/ printf("%d=%dn", n, sum); /*屏幕上顯示(235)2+3+510*/3.19 輸入二位數(shù)(如23)與四位數(shù)(如2352)時,分析例3-11的輸出并上機驗證。n的值為235時計算表達式n / 100 + (n / 10 - n / 100 * 10) + n % 100 / 10的值。答:n / 100 + (n / 10 - n / 100 * 10) + n % 100 / 10 = 2 + (23 2 * 10) + 35 / 10 = 2 + 3 + 3 = 8 3.20 讀取一個三位數(shù)的正整數(shù),按如下規(guī)則

18、對此數(shù)加密,每位數(shù)字都用加7的和除以10的余數(shù)取代,再把第1位與第3位交換,最后輸出加密后的數(shù)字(如輸入235顯示209;輸入523,顯示92)。請編程實現(xiàn)。3.21 請編程把3.20中的加密數(shù)字解密。(如輸入209,顯示235;輸入92,顯示523)3.22 指出下面程序中的錯誤:#include <stdio.h>void main( )int n, sum;printf("請輸入一個自然數(shù)n");scanf("%d", &n); sum = 1 / 2 * n * (n + 1); printf("1 + + %d = %dn", n, sum); 答:sum = 1 / 2 * n * (n + 1); 應改為 sum = 1.0 / 2 * n * (n + 1);或sum = 0.5 * n * (n + 1);3.23 編寫程序,接收一個介于by的小寫字母,輸出該字母及與之前后相鄰的字母,且輸出時字母全部大寫(如用戶輸入c時,程序輸出BCD)。3.24 編程交換兩個float變量的值。3.25 給出下面程序的運行結果:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論