譚浩強(qiáng)C程序設(shè)計第三版課后答案(整本書_第1頁
譚浩強(qiáng)C程序設(shè)計第三版課后答案(整本書_第2頁
譚浩強(qiáng)C程序設(shè)計第三版課后答案(整本書_第3頁
譚浩強(qiáng)C程序設(shè)計第三版課后答案(整本書_第4頁
譚浩強(qiáng)C程序設(shè)計第三版課后答案(整本書_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上C程序設(shè)計(第三版)課后習(xí)題參考解答1.6 寫一個程序,輸入a,b,c三個值,輸出其中最大者。解:main ( )int a,b,c,max;printf(“請輸入三個數(shù)a,b,c: n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf(“ 最大數(shù)為:%d ”,max);第2章 程序的靈魂算法2.1 什么叫結(jié)構(gòu)化的算法?為什么要提倡結(jié)構(gòu)化的算法?解:由一些基本結(jié)構(gòu)順序組成的算法稱為結(jié)構(gòu)化的算法。由于在基本結(jié)構(gòu)之間不存在非順序的跳轉(zhuǎn),流程

2、的轉(zhuǎn)移只存在于一個基本結(jié)構(gòu)范圍之內(nèi),因而提高了算法的質(zhì)量。2.7 什么叫結(jié)構(gòu)化程序設(shè)計?它的主要內(nèi)容是什么?解:結(jié)構(gòu)化程序就是用高級語言表示的結(jié)構(gòu)化算法。它的主要內(nèi)容包括“自頂向下,逐步細(xì)化”的分析方法和“模塊化設(shè)計”的解決方法,以及“結(jié)構(gòu)化編碼”的實現(xiàn)方法。第3章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式33請將下面各數(shù)用八進(jìn)制和十六進(jìn)制數(shù)表示:(1)10 (2)32 (3)75 (4)617(5)111 (6)2483 (7)28654 (8)21003解:(1) (10) 10(12) 8(A) 16(2) (32)10=(40)8=(20) 16(3) (75)10=(113)8=(4B) 16(4)

3、 (617)10=()8=(FD97) 16此題可以這樣考慮:帶符號數(shù)在計算機(jī)中采用補(bǔ)碼表示,正數(shù)的補(bǔ)碼與原碼相同,負(fù)數(shù)的補(bǔ)碼模真值。若使用16位存儲,模為21665536。617的補(bǔ)碼為65536(167)64919()8(FD97)16(5) (111)10=()8=(FF91) 16(6) (2483)10=(4663)8=(9B3) 16(7) (28654)10=()8=(9012) 16(8) (21003)10=(51013)8=(520B) 1634將以下三各整數(shù)分別賦給不同類型的變量,請畫出賦值后數(shù)據(jù)在內(nèi)存中的存儲形式。變量的類型25232769int型long型sort型s

4、igned char(8位)unsigned int型unsigned long型unsigned short型unsigned char型注:如果沒有學(xué)過二進(jìn)制和補(bǔ)碼,此題可以不做。解:各數(shù)據(jù)在內(nèi)存中的存儲形式如下表所示:變量的類型25232769int型00 08 位11110 15 100 001(溢出) 14long型00 0 2411 1110 3100 0100 001 16 14short型00 0811110 15100 001(溢出) 14signed char(8位)(溢出)unsigned int型00 08 11 110 15100 001 14unsigned lon

5、g型00 02411 110 3100 0100 001 16 14unsigned short型00 08 11 110 15100 001 8unsigned char型其中int和short類型,其取值范圍是3276832767。32769在這兩種類型中實際表示負(fù)數(shù),它是一個負(fù)數(shù)的補(bǔ)碼,對其再求一次補(bǔ)碼可得其真值,即(6553632769)32767。char和unsigned char為8位,若將int或long類型數(shù)據(jù)賦給這種類型,則截取數(shù)據(jù)低8位。同理,若將long賦給int,則截取低16位。35字符常量和字符串常量有什么區(qū)別?解:字符常量是一個字符,用單引號括起來。字符串常量是由

6、0個或若干個字符組合而成,用雙引號括起來,存儲時自動在字符串最后加一個結(jié)束符號0。36寫出以下程序運(yùn)行的結(jié)果:# include<stdio.h>void main ( ) char c1=a, c2=b, c3=c, c4=101, c5=116; printf (“a%c b%ct c%ct abcn”, c1, c2, c3); printf (“tb%c %c”, c4, c5);解:程序運(yùn)行的結(jié)果為:aa bb cc abc A N37要將“China”譯成密碼,密碼規(guī)律是:用原來的字母后面第4個字母代替原來的字母。例如,字母“A”后面第4個字母是“E”,用“E”代替“A

7、”。因此,“China”應(yīng)譯為“Glmre”。請編一程序,用賦初值的方法使c1,c2,c3,c4,c5這5個變量的值分別為C,h,i,n,a,經(jīng)過運(yùn)算,使c1,c2,c3,c4,c5的值分別變?yōu)镚,l,m,r,e,并輸出。解:main ( ) char cl=C, c2=h, c3=i, c4=n, c5=a; c1+=4; c2+=4;c3+=4;c4+=4;c5+=4;printf(“密碼是cccccn, c1, c2, c3, c4, c5);運(yùn)行結(jié)果:密碼是Glmre38例2.6能否改成如下:main ( ) int c1, c2; (原為 char c1, c2) c1=97; c2

8、=98; printf (“%c %cn”, c1, c2); printf (“%d %dn”, c1, c2);解:可以。因為在可輸出的字符范圍內(nèi),用整型和用字符型作用相同。39求下面算術(shù)表達(dá)式的值。(1) x+a%3*(int)(x+y)%2/4設(shè)x=2.5,a=7,y=4.7(2) (float)(a+b)/2+(int)x%(int)y設(shè)a=2,b=3,x=3.5,y=2.5解:(1)2.5(2)3.5 310寫出程序運(yùn)行的結(jié)果。main ( ) int i, j, m, n; i=8; j=10; m=+i; n=j+; printf (“%d, %d, %d, %d”, i, j

9、, m, n);解:運(yùn)行結(jié)果為:9,11,9,10311寫出下面賦值的結(jié)果。格中寫了數(shù)值的是要將它賦給其他類型的變量,將所有空格填上賦值后的數(shù)值。int9942chardunsigned int7665535float53.65long int68解:int99100765368421charcdL5D*unsigned int9915535float99.100.76.53.6568.42.long int99155353.12 出下面表達(dá)式運(yùn)算后a的值,設(shè)原來a=12。設(shè)a和n都已定義為整型變量。(1)a+=a (2)a-=2 (3)a*=2+3(4)a/=a+a(5)a%=(n%=2),

10、n的值等于5 (6)a+=a-=a*=a解:(1)24 (2)10(3)60 (4)0(5)0 (6)0 第4章 最簡單的C程序設(shè)計順序程序設(shè)計4.4 若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,n=,c1=a,c2=b,想得到以下的輸出格式和結(jié)果,請寫出程序(包括定義變量類型和設(shè)計輸出)。要求輸出的結(jié)果如下:a=3b=4c=5x= 1.,y= 2.,z= -3.x+y=3.60y+z=-1.20z+x=-2.40u= 51247n=c1=aor97(ASCII)c2=bor98(ASCII)解:main ( )int a,b,c; long int u,n

11、; float x,y,z; char c1,c2; a=3;b=4;c=5; x=1.2;y=2.4;z= -3.6; u=51247;n=; c1=a;c2=b; printf(“n”); printf(“a=%2db=%2dc=%2dn”,a,b,c); printf(“x=%.6f,y=%.6f,z=%.6fn”,x,y,z); printf(“x+y=%.2fy+z=%.2fz+x=%.2fn”,x+y,y+z,z+x); printf(“u=%6ldn=%9ldn”,u,n); printf(“c1=%c or %d(ASCII)n”,c1,c1); printf(“c2=%c o

12、r %d(ASCII)n”,c2,c2);45請寫出下面程序的輸出結(jié)果:main ( ) int a=5,b=7; float x=67.8564,y=-789.124; char c=A; long n=; unsigned u=65535; printf(“%d%dn”,a,b); printf(“%3d%3dn”,a,b); printf(“%f,%fn”,x,y); printf(“%-10f,%-10fn”,x,y); printf(“%8.2f, %8.2f,%4f, %4f, %3f, %3fn”,x,y,x,y,x,y); printf(“%e,%10.2en”,x,y); p

13、rintf(“%c,%d,%o,%xn”,c,c,c,c); printf(“%ld,%lo,%xn”,n,n,n); printf(“%u,%o,%x,%dn”,u,u,u,u); printf(“%s,%5.3sn”,”COMPUTER”,”COMPUTER”);運(yùn)行結(jié)果:575767., -789.67., -789.67.86,-789.12,67.8564,-789.1240,67.,-789.6.e+01,-7.9e+02A,65,101,41,d68765535,ffff,-1COMPUTER,COM可以發(fā)現(xiàn),輸出數(shù)據(jù)中若有負(fù)號、e和小數(shù)點,這些字符也占位。4.6 用下面的sca

14、nf函數(shù)輸入數(shù)據(jù),使a=3,b=7,x=8.5,y=71.82,c1=A,c2=a。問在鍵盤上如何輸入?#include <stdio.h>void main()int a , b;float x , y;char c1 ,c2;scanf(“a=%d b=%d”,&a , &b);scanf(“ %f %e”,&x , &y);scanf(“ %c %c”,&c1 , &c2);解:a=3b=78.571.82Aa4.7下面的scanf函數(shù)輸入數(shù)據(jù),使a=10,b=20,c1=A,c2=a,x=1.5,y=-3.75,z=67.8,

15、請問在鍵盤上如何輸入數(shù)據(jù)?scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z);解:main ( ) int a,b;float x,y,z; char c1,c2; scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z); printf(“a=%d, b=%d, c1=%c, c2=%c, x=%6.2f, y=6.2f, z=6.2fn”),a,b,c1,c2,x,y,z);運(yùn)行

16、情況如下:1020Aa1.5 3.751.5,67.8 (此行為輸入的數(shù)據(jù),其中為空格)a=10, b=20, c1=A, c2=a, x=1.50, y=-3.75, z=67.80 (此行為輸出)說明:按%5d格式的要求輸入a和b時,要先鍵入三個空格,然后再鍵入10與20。%*f是用來禁止賦值的。在輸入時,對應(yīng)于%*f的地方,隨意打入了一個數(shù)1.5,該值不會賦給任何變量。4.8圓半徑r=1.5,圓柱高h(yuǎn)=3,求圓周長,圓面積,圓球表面積,圓球體積,圓柱體積。用scanf輸入數(shù)據(jù),輸出計算結(jié)果,輸出時要求有文字說明,取小數(shù)點后2位數(shù)字。請編程序。解:main ( ) float pi,h,r

17、,l,s,sq,vq,vz; pi=3.; printf(“請輸入圓半徑r,圓柱高h(yuǎn):n”); scanf(“%f,%f”,&r,&h); l=2*pi*r; s=r*r*pi; sq=4*pi*r*r; vq=3.0/4.0*pi*r*r*r; vz=pi*r*r*h; printf(“圓周長為: l=%6.2fn”,l); printf(“圓面積為: s=%6.2fn”,s); printf(“圓球表面積為: sq=%6.2fn”,sq); printf(“圓球體積為: sv=%6.2fn”,vq); printf(“圓柱體積為: sz=%6.2fn”,vz);運(yùn)行結(jié)果:請

18、輸入圓半徑r,圓柱高h(yuǎn):1.5,3圓周長為: l=9.42圓面積為: s=7.07圓球表面積為: sq=28.27圓球體積為: sv=7.95圓柱體積為: sz=21.214.9輸入一個華氏溫度,要求輸出攝氏溫度,公式為C=(5/9)(F-32)輸出要有文字說明,取2位小數(shù)。解:main ( ) float c,f; printf(“請輸入一個華氏溫度:n”);scanf(“%f”,&f); c=(5.0/9.0)*(f-32); /*注意5和9要用實型表示,否則5/9的值為0*/ printf(“攝氏溫度為:%5.2fn”,c); ;運(yùn)行結(jié)果:請輸入一個華氏溫度:78攝氏溫度為:25

19、.56第5章 選擇結(jié)構(gòu)程序設(shè)計5.2語言中如何表示“真”和“假”?系統(tǒng)如何判斷一個量的“真”和“假”?解:設(shè)有一個邏輯表達(dá)式,若其結(jié)果為“真”,則以1表示;若其結(jié)果為“假”,則以0表示。但是判斷一個邏輯量的值時,以0代表“真”,以非0代表“假”。例如3&&5的值為“真”,系統(tǒng)會給出3&&5的值為1。5.3寫出下面各邏輯表達(dá)式的值。設(shè)a=3,b=4,c=5。(1)a+b>c&&b=c(2)a|b+c&&b-c(3)!(a>b)&&!c|1(4)!(x=a)&&(y=b)&&

20、0(5)!(a+b)+c-1&&b+c/2解:(1)0(2)1(3)1(4)0(5)15.4有3個整數(shù)a,b,c,由鍵盤輸入,輸出其中最大的數(shù)。解:方法一:程序如下:main ( ) int a,b,c; printf(“請輸入3個整數(shù):”); scanf(“%d,%d,%d”,&a,&b,&c); if (a<b) if (b<c)printf(“max=%dn”,c); elseprintf(“max=%dn”,b); else if (a<c) printf(“max=%dn”,c);else printf(“max=%dn”,a

21、);運(yùn)行結(jié)果:請輸入3個整數(shù):12, 34, 9max=34方法二:使用條件表達(dá)式,可以使程序更簡明,清晰。main ( ) int a,b,c,temp,max ; printf(“請輸入3個整數(shù):”); scanf(“%d,%d,%d”,&a,&b,&c); temp=(a>b)? a:b; /* 將a和b中的大者存入temp中 */ max=(temp>c)? temp:c; /* 將a和b中的大者與c比較,取最大者 */ printf(“3個整數(shù)中最大數(shù)是%dn”,max);方法三:a>b?(a>c?a:c):(b>c?b:c)運(yùn)行

22、結(jié)果:請輸入3個整數(shù):12,34,93個整數(shù)的最大數(shù)是34。5.5有一函數(shù): 寫一程序,輸入x值,輸出y值。解:程序如下main ( ) int x,y; printf(“輸入x:”); scanf(“%d”,&x); if (x<1) /* x<1 */ y=x; printf(“x=%d3d, y=x=%dn”,x,y); else if (x<10) /* 1x<10 */y=2*x-1; printf(“x=%3d, y=2*x-1=%dn”,x,y);else /* x10 */ y=3*x-11; printf(“x=%3d, y=3*x-11=%d

23、n”,x,y); 運(yùn)行結(jié)果: 輸入x:4x=4, y=2*x-1=7 輸入x:-1x=-1, y=x=-1 輸入x:20 x=20, y=3*x-11=495.6給出一百分制成績,要求輸出成績等級A、B、C、D、E。90分以上為A,8089分為B,7079分為C,6069分為D,60分以下為E。解:程序如下#include "stdio.h"void main() float score; char grade; printf("請輸入學(xué)生成績:"); scanf("%f",&score); while(score>10

24、0 | score<0) printf("n輸入有誤,請重輸"); scanf("%f",&score); switch(int)(score/10) case 10: case 9:grade='A'break; case 8:grade='B'break; case 7:grade='C'break; case 6:grade='D'break; case 5: case 4: case 3: case 2: case 1: case 0:grade='E'

25、 printf("n成績是%5.1f,相應(yīng)的等級是%c。n",score,grade);5.7給定一個不多于5位的正整數(shù),要求:求它是幾位數(shù);分別打印出每一位數(shù)字;按逆序打印出各位數(shù)字。例如原數(shù)為321,應(yīng)輸出123。解:main ( ) long int num; int indiv,ten,hundred,thousand,ten_thousand,place;/*分別代表個位,十位,百位,千位,萬位和位數(shù)*/ printf(“請輸入一個整數(shù)(099999):”); scanf(“%ld”,&num); if (num>9999)place=5; else

26、 if (num>999)place=4; else if (num>99)place=3;else if (num>9)place=2;else place=1;printf(“place=%dn”,place);printf(“每位數(shù)字為:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1

27、000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place)case 5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);printf(“n反序數(shù)字為:”);printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand);break;case 4:printf(“%d,%d,%d,%d”,thousand,hun

28、dred,ten,indiv); printf(“n反序數(shù)字為:”);printf(“%d%d%d%d n”,indiv,ten,hundred,thousand);break;case 3:printf(“%d,%d,%d”,hundred,ten,indiv); printf(“n反序數(shù)字為:”);printf(“%d%d%d n”,indiv,ten,hundred);break;case 2:printf(“%d,%d”, ten,indiv); printf(“n反序數(shù)字為:”);printf(“%d%d n”,indiv,ten);break;case 1:printf(“%d”,

29、 indiv); printf(“n反序數(shù)字為:”);printf(“%dn”,indiv);break; 運(yùn)行結(jié)果:請輸入一個整數(shù)(099999):98765位數(shù)5每位數(shù)字為:9,8,7,6,5反序數(shù)字為:567895.8企業(yè)發(fā)放的獎金根據(jù)利潤提成。利潤I低于或等于10萬元時,獎金可提10;利潤高于10萬元,低于20萬元(<I)時,其中10萬元按10提成,高于10萬元的部分,可提成7.5%; <I時,其中20萬元仍按上述辦法提成(下同),高于20萬元的部分按5提成;<I時,高于40萬元的部分按3提成;<I時,高于60萬的部分按1.5提成;I>時,超過1

30、00萬的部分按1提成。從鍵盤輸入當(dāng)月利潤I,求應(yīng)發(fā)放獎金總數(shù)。要求:(1)用if語句編程序;(2)用switch語句編程序。解:計算利潤時,要特別注意不同利潤的不同提成比例。例如,利潤為15萬元,其中由10萬元按10的比例提成,另外5萬元則按7.5%提成。(1) 用if語句編程序,main ( ) long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=*0.1; /*利潤為10萬元時的獎金*/ bon2=bon1+*0.075 /*利潤為20萬元時的獎金*/ bon4=bon2+*0.05 /*利潤為40萬元時的獎金*/ bon6=bon4+*0.03 /*利潤為60萬元時的獎金*/ bon10=bon6+*0.015; /*利潤為100萬元時的獎金*/ printf(“請輸入利潤i:”); scanf(“%ld”,&i); if (i<=) bonus=i*0.1; /*利潤在10萬元以內(nèi)按0.1提成獎金*/ else if (i<=) bonus=bon1+(i-)*0.075 /*利潤在10萬至20萬元時的獎金*/ else if (i<=) bonus=bon2+(i-)*0.05 /*利潤在20萬至40萬元時的獎金*/ else if (i<=) bonus=bo

溫馨提示

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

最新文檔

評論

0/150

提交評論