《C語言編程基礎(chǔ)第2版》王森-上機解答.doc_第1頁
《C語言編程基礎(chǔ)第2版》王森-上機解答.doc_第2頁
《C語言編程基礎(chǔ)第2版》王森-上機解答.doc_第3頁
《C語言編程基礎(chǔ)第2版》王森-上機解答.doc_第4頁
《C語言編程基礎(chǔ)第2版》王森-上機解答.doc_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言編程基礎(chǔ)(第2版)上機實習(xí)解答前 言C語言編程基礎(chǔ)(第2版)在各章后面都安排了上機實習(xí)指導(dǎo)和上機實習(xí),這是該書編寫的一大特色。上機實習(xí)指導(dǎo)給出了該章的學(xué)習(xí)目標和應(yīng)注意的問題,這兩部分都非常重要,前者告訴讀者應(yīng)該掌握的知識重點,后者告訴讀者最容易忽略、混淆、搞錯的概念和問題。而上機實習(xí)的內(nèi)容又很好地配合了對這些知識的掌握和理解,并通過實踐、操作、練習(xí),能很好地鍛煉編程技巧和能力。為了幫助老師教學(xué)、方便學(xué)生做好實習(xí)準備,特別是幫助不具備上機條件的學(xué)生了解上機結(jié)果,我們給出本上機實習(xí)解答。重點是給出一些程序的運行結(jié)果、需要完善的程序語句、及要求編寫的程序答案。如有錯誤或不當之處請批評指正。第1章 C語言概述上機實習(xí) Turbo C系統(tǒng)的基本操作方法二、上機內(nèi)容2、 運行結(jié)果如下:sum=3 刪除變量定義語句或?qū)⑵渥⑨屍饋砗螅龠\行會出現(xiàn)錯誤提示: “ Error Undefined symbol a in function main. ”等信息。告知a、b、sum在函數(shù)中未定義3、運行該程序,輸入任意兩個整數(shù),會輸出其中的最大值。第2章 數(shù)據(jù)類型和簡單程序設(shè)計上機實習(xí) 基本數(shù)據(jù)類型的簡單程序設(shè)計二、上機內(nèi)容1、語法錯誤的檢查與修改。錯誤:y未定義。修改:int x1,x2,y;運行結(jié)果:y=50錯誤:inta 缺少空格。修改:int a,b,c;運行結(jié)果:c=5000錯誤:ch=A 字符變量賦值錯誤。修改:ch=A運行結(jié)果:A錯誤:m#1 #不能為變量名。修改:float m1;m1=2.36;printf(“%f”,m1/2);運行結(jié)果:1.1800002、分析程序運行結(jié)果。 該題是已知半徑而求圓的面積,輸出半徑和面積值。運行結(jié)果為: r=2s=12.566360 該題是求字母a和b的ASCII碼值。運行結(jié)果為: 字母a的ASCII碼為:97 字母b的ASCII碼為:98 運行結(jié)果: (笑臉) (梅花)3、設(shè)計編寫一個簡單程序。main()printf(“平均成績:%dn”,(100+80+75)/3);該程序運行結(jié)果為:平均成績:85第3章 表達式與運算符上機實習(xí) 運算符及表達式應(yīng)用二、上機內(nèi)容1、指出下面程序中的錯誤,并改正。錯誤:C未定義且該定義語句不正確;若定義時給a、b、c三個變量都初始賦值了,可刪掉“scanf(“%d,%d,%d”,a,b,c);”程序行;若定義變量時不進行初始化,該接收變量值的語句有錯。修改:int a,b,c;scanf(“%d,%d,%d”,&a,&b,&c);運行結(jié)果:1,2,3A=1,b=2,c=62、運行下列程序,觀察并分析運行結(jié)果。 運行結(jié)果:(a+b)/(a-b)=-5a+b/a-b=-9分析:該題說明在表達式中,分數(shù)線上下使用括號與否計算結(jié)果完全不同,應(yīng)注意使用括號。 運行結(jié)果:100/200=0100/200.0=0.500000分析:該題說明整除運算結(jié)果只保留整數(shù)部分,實數(shù)運算的結(jié)果保留小數(shù)。 運行結(jié)果:(i+)+j=300i+(+j)=301i+j)=300分析:自增自減運算符的前置運算與后置運算不同,并注意運算符的結(jié)合性。 運行結(jié)果:i=101j=101k=101分析:使原數(shù)加1的三種不同運算方法。 書中例3.7程序調(diào)試運行結(jié)果如下:char=1char(ch)=1int=2int(x)=2float=4float(y)=43、完善程序 #include y=pow(x,5)+POW(10,5);.b=xy?x:y;.第4章 數(shù)據(jù)的輸入與輸出上機實習(xí)一 字符的輸入輸出二、上機內(nèi)容1、運行下列程序,注意觀察運行結(jié)果。 運行結(jié)果: a(輸入數(shù)據(jù))c1=a ab(輸入數(shù)據(jù))c1=a abc(輸入數(shù)據(jù))c1=agetchar()只接收一個字符,且等待回車后向下運行,因此c1輸出結(jié)果相同。 運行結(jié)果:請輸入一個字母:b(輸入數(shù)據(jù))b的前一個字母是a,后一個字母是c(輸出結(jié)果)變化:更換“getch ()”命令不顯示輸入內(nèi)容,不等待回車便向下執(zhí)行,輸出結(jié)果相同。2、完善程序ch1=getchar();ch2=ch1-32;(ch1=a&ch1=z)?putchar(ch2):printf(“輸入出錯!”);上機實習(xí)二 格式輸入輸出函數(shù)的使用二、上機內(nèi)容1、運行下列程序,注意觀察運行結(jié)果。 運行結(jié)果: 10 25 4.72(輸入數(shù)據(jù)及格式)a=10b=25c=4.720000 10(輸入數(shù)據(jù)及格式) 20 4.72a=10b=25c=4.720000 10,25,4.72(輸入數(shù)據(jù)及格式)a=10b=-20c=324這種輸入格式不對,scanf語句中格式轉(zhuǎn)換符之間沒有非格式字符,輸入逗號以后不能給后面的變量正確賦值。 運行結(jié)果:113,3270;x(輸入數(shù)據(jù)及格式)a=113b=3270c=x 運行結(jié)果:p=3.14p=3.1416p= 3.14p= 3.1416p=-10.2fp=-10.4f分析:在%后面加上負號后,改變了格式控制符的作用,將-10.2f與-10.4f作為非格式符輸出。在語句“clrscr();”的后面加上語句“printf(“nnn”);”再運行程序,在輸出結(jié)果上面空出三個空行。2、完善程序: scanf(“%d”,&cost);printf(“輸入折扣率”);scanf(“%f”,&percent);printf(“實際售價為%f”,c);3、編寫程序。main() float kilometer,metre,mile; printf(“請輸入公里數(shù):”); scanf(“%f”,&kilometre);metre=kilometre*1000;mile=kilometre*2;printf(“%.1f 公里=%.2f里=%.2f米”,kilometre,mile,metre); 第5章 控制結(jié)構(gòu)程序設(shè)計上機實習(xí)一 關(guān)系表達式和邏輯表達式二、上機內(nèi)容1、運行下列程序,分析并觀察運行結(jié)果。 運行結(jié)果:a=1, b=2, c=3ab 的值為:1ab 的值為:1 運行結(jié)果:x=3,y=4,z=5xy&xz的值為:1xz的值為:0xz的值為:1!x的值為:0!(xy)的值為:1(xy|xz)&yz的值為:0 運行結(jié)果:x=202x10 的值為:12x&x10的值為:02、完善程序b=(year%4= =0 & year%100 != 0 ) | | ( year%400= = 0 );上機實習(xí)二 if語句二、上機內(nèi)容1、運行下列程序,分析并觀察運行結(jié)果。 運行結(jié)果(輸入測試數(shù)據(jù)一)number=300300是10的倍數(shù)(輸入測試數(shù)據(jù)二)number=27無輸出 運行結(jié)果:(輸入測試數(shù)據(jù)二)number=300300是10的倍數(shù)(輸入測試數(shù)據(jù)二)number=2727不是10的倍數(shù)分析:上兩題雖然測試數(shù)據(jù)相同,但判斷語句完整性不同,輸出結(jié)果便不同。 運行結(jié)果: number=8(輸入測試數(shù)據(jù)8)8是正數(shù)。 number=0(輸入測試數(shù)據(jù)0)0是零。 number=-8(輸入測試數(shù)據(jù)-8)-8是負數(shù)。分析:該題輸出所輸入的數(shù)據(jù)是正數(shù)、零、還是負數(shù)。2、完善程序if(m= =1|m= =3|m= =5|m= =7|m= =8|m= =10|m= =12) days=30 printf(“%d月份有%d天。n”,m,days) 上機實習(xí)三 switch語句二、上機內(nèi)容1、運行下列程序,分析并觀察運行結(jié)果。 1(輸入測試數(shù)據(jù)1)* 2(輸入測試數(shù)據(jù)2)* 3(輸入測試數(shù)據(jù)3)*分析:輸入數(shù)值為1、2、3時輸出如上結(jié)果,輸入其它數(shù)時無輸出。2、完善程序switch(grade)case 9:printf(“等級為A”);break;case 8:printf(“等級為B);break;case 7:printf(“等級為C);break;case 6:printf(“等級為D);break;default:printf(“等級為E”);3、編寫程序#include main()float n,c,sq,sqr;int i;while(1)clrscr();printf(輸入一個實數(shù):);scanf(%f,&n);printf(1.輸出相反數(shù)n2.輸出平方數(shù)n3.輸出平方根n4.退出n);scanf(%d,&i);switch(i)case 1:printf(相反數(shù)為:%fn,-n);break;case 2:printf(平方數(shù)為:%fn,n*n); break;case 3:printf(平方根為:%fn,sqrt(n); break;case 4:exit(0);default:printf(輸入錯誤!n); 上機實習(xí)四 for語句二、上機內(nèi)容1、運行程序,分析并觀察運行結(jié)果。 運行結(jié)果:4 8 12 16 20分析:該題輸出20以內(nèi)能被4整除的數(shù)。 運行結(jié)果:*程序修改后運行結(jié)果:*2、完善程序。. for(j=0;j_4-i_;j+). for(j=0;j_i_;j+).3、編寫程序。main()int grade,n1,n2,i=1;clrscr();n1=n2=0;printf(“輸入學(xué)生成績:n”);while(i=60) n1+;else n2+;i+;printf(“及格人數(shù)為:%dn不及格人數(shù)為:%d”,n1,n2);上機實習(xí)五 while語句和do-while語句二、上機內(nèi)容1、運行下列程序,分析并觀察運行結(jié)果。 原程序運行結(jié)果: sum=6 程序修改后運行結(jié)果:sum=0分析:因為循環(huán)條件為i=3,當i=1改成i=4后循環(huán)未執(zhí)行,因此sum=0(初始值)。 原程序運行結(jié)果:sum=10 程序修改后運行結(jié)果:sum=4分析:do-while循環(huán)先做一次循環(huán)體后再判定條件,因此原程序可做到+1+2+3+4使sum=10,程序修改后,只做一次循環(huán)體+4使sum=4。2、完善程序。.n1=n2=_0_;.scanf(“%d”,&grade);while(grade!=-1).else n2+;.3、編寫程序。按題目要求編寫輸出10行楊輝三角形的程序提供了兩種方法,其中第二種方法更加簡單和便于理解,但需要學(xué)習(xí)了第6、7章的知識后再用才更為合適。因此,本題也可以作為習(xí)題放在以后再做。 main() int l,c; long int v; clrscr(); for(l=1;l=10;l+) v=1; printf(%d,v); for(c=2;c=l;c+) v=v*(l-1)-(c-1)+1)/(c-1); if(v100) if(v10) printf(% ld ,v); else printf(% ld ,v); else printf(%ld ,v); printf(n); main() static int m,n,b1010;b01=1;clrscr();for(m=1;m=10;m+) for(n=1;n=m;n+) bmn=bm-1n-1+bm-1n; printf(%-5d,bmn); printf(n); 第6章 數(shù) 組上機實習(xí)一 數(shù)值型數(shù)組二、上機內(nèi)容1、上機調(diào)試下面的程序,修改其中存在的錯誤。 定義數(shù)組長度不能使用變量。因此,“int ab=1,2,3,4,5;”應(yīng)為“ int a5=1,2,3,4,5;”。 定義一維數(shù)組時,若不是通過初始化將所有的元素賦值,其長度值不能省略。因此,“int a ;”不正確,按此題意應(yīng)為:“int a11;”。另外,求和變量應(yīng)給初值賦零,“int i,sum;”應(yīng)為:“int i,sum=0;”。2、運行下列程序,分析并觀察運行結(jié)果。 運行結(jié)果: 輸入要查找的數(shù):89(輸入數(shù)據(jù)一)89在這組數(shù)中的第1個位置 輸入要查找的數(shù):120(輸入數(shù)據(jù)二)120不在這組數(shù)中 輸入要查找的數(shù):94(輸入數(shù)據(jù)三)94在這組數(shù)中的第7個位置分析:輸入的數(shù)據(jù)在數(shù)組中有無,其輸出結(jié)果能明確告知。3、完善程序 . scanf(%d,&numi); if(numi0 )count+; sum=sum+numi; . . For(i=0;inum;i+) for(j=0;j2;j+) scorei2+=scoreij; avi=scoreij/2; . printf(“%8d”,i+1); printf(“%10d”,scoreij);printf(“%10.1fn”,avi); 上機實習(xí)二 字符型數(shù)組二、上機內(nèi)容1、上機調(diào)試下面的程序,修改其中存在的錯誤。 該程序語句“str=Hello;”不正確,可將前兩句程序合并為:char str =Hello;運行結(jié)果:Hello 本程序比較兩個輸入的字符串是否相同,使用如下語句是不正確的。if (str1= =str2) printf(兩個字符串相同);應(yīng)改為: if (strcmp(str1,str2)=0) printf(兩個字符串相同);運行結(jié)果: abcabc兩個字符串相同 abcdef兩個字符串不同 2、完善程序。 if (_!strcmp(password,str_) printf(_密碼不正確_); for(i=0;inum;i+)for(j= i ;jnum;j+).scorei=scorej;scorej=t;strcpy(namei,namej);strcpy(namej,str);printf(“%8s%12s%8sn”,”名次”,”姓名”,”成績”);printf(“%8d%12s%8dn”,i+1,namei,scorei);第7章 函 數(shù)上機實習(xí)一 函數(shù)的定義和調(diào)用二、上機內(nèi)容1、上機調(diào)試下面的程序,修改其中存在的錯誤。 該程序有如下缺陷: 返回值類型不為int型時,應(yīng)指出該函數(shù)的類型,并應(yīng)在主函數(shù)中予以指明; 定義sum( )函數(shù)時,形式參數(shù)類型說明使用不正確; 返回值變量的類型要與函數(shù)類型相一致。程序修改如下:main() float a,b,s; float sum(); scanf(%f%f,&a,&b); s=sum(a,b); printf(sum=%f,s);float sum(float x, float y) float s; s=x+y; return s; 該程序有如下缺陷: 該程序所使用的函數(shù)體用大括號不匹配; 自定義函數(shù)的形式參數(shù)沒說明類型,且不用應(yīng)用空值類型說明; 主程序中是要接收打印星號的數(shù)量值,而不是輸出n的值。程序修改如下:main() int n; scanf(%d,&n); printstar(n); printstar(n) int n; int i; for (i=1;i=n;i+) printf(*); 2、運行下列程序,分析并觀察運行結(jié)果。 運行結(jié)果:10,35,-20(輸入數(shù)據(jù))35 (輸出數(shù)據(jù))分析:求三個輸入數(shù)據(jù)的最大值 運行結(jié)果:a0=11 (輸入數(shù)據(jù))a1=22a0=22 (輸出數(shù)據(jù))a1=11分析:輸入到兩個數(shù)組元素內(nèi)的數(shù),經(jīng)調(diào)用s函數(shù)后,將其值進行了交換。3、完善程序.scanf(%d,&ascii);put(ascii);int n;for(i=1;imaxi) maxi=xij;上機實習(xí)三 一個應(yīng)用程序的設(shè)計二、上機內(nèi)容題目要求編寫應(yīng)用程序的三個函數(shù)如下:1、減法練習(xí)函數(shù) subt() int i,num1,num2,answer;clrscr();for(i=1;i=5;i+)num1=random(99)+1;num2=random(99)+1;question(num1,num2,-);scanf(“%d”,&answer);if(answer=num1-num2)puts(“正確”);elsevoice();printf(“錯了!正確答案是:%dn”,num1-num2);printf(“n減法練習(xí)做完了,按任意鍵返回菜單.”);getch();2、乘法練習(xí)函數(shù)mult() int i,num1,num2,answer;clrscr();for(i=1;i=5;i+)num1=random(99)+1;num2=random(99)+1;question(num1,num2,*);scanf(“%d”,&answer);if(answer= =num1*num2)puts(“正確”);elsevoice();printf(“錯了!正確答案是:%dn”,num1*num2);printf(“n乘法練習(xí)做完了,按任意鍵返回菜單.”);getch();3、除法練習(xí)函數(shù)divid() int i,num1,num2,answer;clrscr();for(i=1;i=5;i+)num1=random(99)+1;num2=random(99)+1;question(num1,num2,/);scanf(“%d”,&answer);if(answer=num1/num2)puts(“正確”);elsevoice();printf(“錯了!正確答案是:%dn”,num1/num2);printf(“n除法練習(xí)做完了,按任意鍵返回菜單.”);getch();第8章 文 件上機實習(xí)一 文件的順序讀寫二、上機內(nèi)容1、建立和運行給定程序,分析并觀察運行結(jié)果 該題目要求改正錯誤上機運行,請參看本資料包的習(xí)題解答部分。 該程序運行時,送入的文件名應(yīng)該是題中創(chuàng)建和操作過的xt1.txt。2、完善程序。 . fp=fopen(filename,”w”); . fprintf(fp,”%s %d %d”,name,s1,s2); . fclose(fp); . . if(fp=fopen(filename.”r”)= =NULL); .fscanf(fp,”%s %d %d”,name,&s1,&s2):if(strcmp(name,stuname)= =0).3、從文件中讀出例8.8寫入的字符串,可以放在字符數(shù)組中,通過屏幕輸出查驗讀出的內(nèi)容,寫出參考程序如下:#include FILE *fp;main( ) static char a32; fp=fopen(w88.txt,r); fgets(

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論