C語言實驗報告_第1頁
C語言實驗報告_第2頁
C語言實驗報告_第3頁
C語言實驗報告_第4頁
C語言實驗報告_第5頁
已閱讀5頁,還剩49頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、-PAGE . zC語言實驗報告專業 _年 級 _學 號 _學生 _指導教師 _華中師大學信息管理系編 = 1 * ROMAN I實驗要求1每次實驗中有假設干習題,每個學生至少應該完成其中的三道習題。2上機之前應作好充分的準備工作,預先編好程序,經過人工檢查無誤后,才能上機,以提高上機效率,嚴禁一邊上機一邊編寫。3獨立上機輸入和調試自己所編的程序,切忌抄襲、拷貝他人程序。4上機完畢后,應整理出實驗報告。書寫實驗報告時,重點放在調試過程和小結局部,總結出本次實驗中的得與失,以到達穩固課堂學習、提高動手能力之目的。 = 2 * ROMAN II 實驗容實驗一 簡單程序設計【實驗目的】1熟悉TC+、

2、Borland C+和VC+6.0的運行環境。2了解在TC+、Borland C+和VC+6.0上如何編輯、編譯、連接和運行一個C程序。3熟練使用各種C語言的數據類型、運算符與表達式。4熟練掌握格式輸入與格式輸出函數的使用。通過運行簡單的程序,初步了解源程序的特點,初步掌握查錯和排錯的技能.【上機實習指導】通過以下程序來掌握上機操作的全過程在VC、BC或TC中練習輸入、編譯、運行一個C語言程序的全過程以下程序是計算函數y=3*2+2*-4(假設*=2)。* include stdio.hvoid main( ) int *=2,y; y=3*+2*-4; printf(ny=%d,y);2根本

3、數據類型表示圍練習假設有如下程序: *include void main ( ) char ch1, ch2, ch;unsigned char c;int a;ch1 = 80;ch2 = 60;ch = ch1 + ch2;c = ch1 + ch2;a = ch1 + ch2;printf (ch1 + ch2 = %dn, ch1 + ch2);printf(ch = %dn, ch);printf(c = %dn, c);printf(a = %dn, a);問題1 :運行該程序,寫出輸出結果。并說明為什么存在輸出結果的差異.問題2 :如果要求四行輸出的結果均為140,在不改變變量的

4、數據類型的根底上,則應修改程序中的哪條語句.怎樣修改.問題3 :編一程序,要求兩個負整數相加,輸出的結果為一正整數。【自編程序上機】1 鍵盤輸入與屏幕輸出練習用下面的scanf函數輸入數據,使a = 3, b = 7, * = 8.5, y = 71.82, c1 = A, c2 = a,問在鍵盤上如何輸入.要求把以下程序補充完整。*include void main()int a, b;float *, y;char c1, c2;scanf (a = %d b = %d, &a, &b);scanf(* = %f y = %e, &*, &y);scanf(c1 = %c c2 = %c,

5、 &c1, &c2);提示:在格式控制字符串中除了格式說明以外還有其它字符,在輸入數據時應輸入與這些字符一樣的字符。為了驗證輸入格式的正確與否,應在程序中補充調用標準的輸出函數printf。按輸出結果要求編寫程序假設a = 3, b = 4, c = 5, * = 1.2, y = 2.4, z = -3.6, u = 51274, n = 128765. c1 = a, c2 = b,想得到以下輸出格式和結果,請寫出完整的程序。要求輸出結果如下:(*表示空格)a = 3*b=4*c=5* = 1.20000, y = 2.400000, z = -3.600000*+y = *3.60*y+

6、z = -1.20*z+* = -2.40u = 51274*n = *128765c1 = a*or*97(ASCII)c2 = b*or*98(ASCII)提示:根據題目中變量的值定義適宜的變量類型。正確定義和使用printf函數中的格式控制字符串。計算定期存款本利之和設銀行定期存款的年利率rate為2.25%,并存款期為n年,存款本金為capital元,試編程計算n年后本利之和deposit。要求定期存款的年利率rate、存款期間n和存款本金capital均由鍵盤輸入。4. 設一個正圓臺的上底半徑r1=2.5cm,下底半徑r2=3.7cm,高h=3.5cm。分別計算并輸出該圓臺的上底面積

7、s1下底面積s2,側面積s3,圓臺的體積v。 具體要求如下: = 1 * GB3 r1,r2,h用scanf函數輸入,且在輸入前要有提示; = 2 * GB3 在輸出結果時要有文字說明,每個輸出值占一行,且小數點后取4位數字。 = 3 * GB3 所有變量均定義為單精度類型。5編程實現:用1分、5分、10分、25分的硬幣湊成任何給定的錢數*,要求硬幣的數目最少。【實驗報告】實習時間: 實習地點: 實習機號:具體實驗容1、*include void main ( )int a, b;float *, y;char c1, c2;scanf (a=%db=%d,&a,&b);scanf(*=%fy

8、=%e,&*,&y);scanf(c1=%cc2=%c,&c1,&c2);printf(a=%d,b=%d,*=%.1f,y=%.2f,c1=%c,c2=%cn,a,b,*,y,c1,c2);2*includestdio.hvoid main()int a=3,b=4,c=5;float *=1.2,y=2.4,z=-3.6;long u=51274,n=128765;char c1=a,c2=b;printf(a=%-4d,b=%-4d,c=%-4dn,a,b,c);printf(*=%7.5f,y=%8.6f,z=%8.6fn,*,y,z);printf(*+y= %-6.2fy+z=%-

9、7.2fz+*=%5.2fn,*+y,y+z,z+*);printf(u=%-8ldn=%9ldn,u,n);printf(c1=%c or %d(ASCII)n,c1,c1);printf(c2=%c or %d(ASCII)n,c2,c2);3*includestdio.h*includemath.hvoid main() double capital,rate,deposit;int n;printf(input capital,year:);scanf(%lf,%d,%lf,&capital,&n,&rate);deposit=capital*pow(1+rate,n);printf(

10、deposit=%lfn,deposit);4.*includestdio.h*includemath.hvoid main()double r1,r2,h;printf(輸入上底半徑,下底半徑,高:);scanf(%f,%f,%f,&r1,&r2,&h);double s1,s2,s3,l,v,pi=3.1314;s1=pi*r1*r1;s2=pi*r2*r2;l=sqrt(r2-r1)*(r2-r1)+h*h);s3=pi*l*(r1+r2);v=pi*h*(r1*r1+r2*r2+r1*r2)/3.0;printf(s1=%.4lfns2=%.4lfns3=%.4lfnv=%.4lfn,

11、s1,s2,s3,v);5.*includevoid main()int money;int a,b,c,d,sum;printf(Enter the coins:);scanf(%d,&money);a=money/25;b=(money%25)/10;c=(money%25)%10)/5;d=money%25%10%5;sum=a+b+c+d;printf(25分的有%dt10分的有%dt5分的有%dt1分的有%dn,a,b,c,d);printf(總的硬幣數是%dn,sum); 實驗二 選擇構造程序設計【實驗目的】1熟練掌握上機運行一個C程序的操作過程。2學會正確使用邏輯運算符和邏輯表達

12、式,進一步掌握各種表達式的使用。3利用if語句實現選擇構造程序設計。4利用switch語句實現多分支選擇構造程序設計。5進一步練習調試與修改程序。【上機實習指導】輸入并運行習題3.10。即:* include stdio.hvoid main( ) int i,j,n,m; i=8;j=10;m=+i;n=j+; printf(%d,%d,%d,%d,i,j,m,n);分別作以下改變并運行: = 1 * GB3 將程序第四行改為:m=i+;n=+j; = 2 * GB3 程序改為:* include stdio.hvoid main( ) int i,j; i=8;j=10;printf(%d

13、,%d,i+,j+); = 3 * GB3 在 = 2 * GB3 的根底上,將語句改為:printf(%d,%d,i+,j+); = 4 * GB3 再將語句改為:printf(%d,%d,%d,%d,i,j,i+,j+); = 5 * GB3 程序改為:* include stdio.hvoid main( ) int i,j,n=,m=0; i=8;j=10;m+=i+;n-=- -j; printf(%d,%d,%d,%d,i,j,m,n);2計算以下分段函數值:具體要求如下: = 1 * GB3 用if語句實現分支。自變量*與函數值均用單精度類型。 = 2 * GB3 自變量*用sc

14、anf函數輸入,且輸入前要有提示。結果的輸出采用以下形式: *=具體值,f(*)=具體值 = 3 * GB3 分別輸入*=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0,運行該程序。3先靜態分析以下程序的運行結果,然后上機驗證。 * include stdio.hvoid main( ) int a=3,b=4,c=5,*,y,z; *=cba; y=!a+bc&(b!=c); z=c/b+(float)a/b&(float)(a/c); printf(n *=%d,y=%d,z=%d,*,y,z); *=a|b-; y=a3&b; printf(n %d,%d,%d,%d,%d,

15、%d,a,b,c,*,y,z); 上機運行的結果與你分析的結果是否一致.不一致的原因何在.請在程序的最后一個花括號前加上語句:getchar();后重新運行程序,考前須知加上這一語句后,程序的運行進程有何不同.getchar()是一個函數調用,其作用是等待接收你從鍵盤輸入的一個字符,在你未按鍵之前一直處于等待狀態。在這里可以起到暫停的作用。當你看清結果并按任意鍵后,立即退出程序并切換回TC主屏幕。用這一方法可以減少屏幕切換操作。4以下C程序的功能是:計算并輸出分段函數值。其中*由鍵盤輸入。 請通過調試修改程序中的錯誤(包括語法錯誤和邏輯錯誤)。*includestdio.h main() fl

16、oat*,y; printf(input*=); scanf(%f,&*); if(-5.0=*0.0)&(*!=-2.0)y=1.0/(*+2.0); elseif(*5.O)y=l.0/(*+5.0); elseif(*100|score=90)printf(score is %f,grade is An,score);else if(score=80)printf(score is %f,grade is Bn,score);else if(score=70)printf(score is %f,grade is Cn,score);else if(score=60)printf(sco

17、re is %f,grade is Dn,score);elseprintf(score is %f,grade is En,score); 3、*includestdio.hvoid main()float score,s;scanf(%f,&score);s=score/10;switch(int)s)case 10:case 9:printf(score is %f,grade is An,score);break;case 8:printf(score is %f,grade is Bn,score);break;case 7:printf(score is %f,grade is C

18、n,score);break;case 6:printf(score is %f,grade is Dn,score);break;case 5:case 4:case 3:case 2:case 1:printf(score is %f,grade is En,score);break;default:printf(enter data error!n);4、*includestdio.hvoid main()int a,b,c,d,e,m1,m2,s1,s2;scanf(%d%d%d%d%d,&a,&b,&c,&d,&e);if(ab)m1=a;s1=b;if(ad)m2=c;s2=d;i

19、f(cm2)if(m1e)printf(ma*=%dn,m1);elseprintf(ma*=%dn,e);else if(m2e)printf(ma*=%dn,m2);elseprintf(ma*=%dn,e);if(s1s2)if(s1e)printf(min=%dn,s1);elseprintf(min=%dn,e);else if(s2e)printf(min=%dn,s2);elseprintf(min=%dn,e);程序調試過程實習小結實驗三 循環構造程序設計【實驗目的】1進一步練習選擇構造的程序設計。練習并掌握實現循環構造的三種方法。3練習并掌握選擇構造與循環構造的嵌套。4掌握多

20、重循環的應用。5學會單步跟蹤的操作方法。【上機實習指導】1輸入例6.2. = 1 * GB3 上機運行程序,分析運行結果。 = 2 * GB3 用單步跟蹤觀察while語句的執行過程:連續按三次F8鍵,再用兩次Ctrl-F7操作分別將i和sum的值顯示出來,然后不按斷F8鍵,每次按F8后,觀察綠條的變化和變量值的變化情況,以此來分析并弄清while語句的執行過程。 = 3 * GB3 修改程序,實現s=1+1/2+1/3+1/10。【自編程序上機】 1如果一個數恰好等于它的所有因子(包括1但不包括自身)之和,例如:6的因子為1,2,3,且1236,因此6是一個完數。 計算并輸出1000以的所有

21、完數之和。 具體要求如下: = 1 * GB3 所有循環均用for循環。 = 2 * GB3 輸出要有文字說明,并同時輸出各完數。輸出形式為:完數1+完數2+=和值2彩票選號*市體育彩票采用整數1、2、3、36表示36種體育運動,一彩票可選擇7種運動。編寫程序,選擇一彩票的,使這彩票的7個之和是105且相鄰兩個之差按順序依次是1、2、3、4、5、6。例如第一個是1,則后續應是2、4、7、11、16、22。提示:= 1 * GB2假設7個中的第一個是k0 ,則后續之間的關系是:ki-ki-1 = i,其中i = 1,2,3,4,5,6。= 2 * GB2k0+k1+k2+k3+k4+k5+k6之

22、和必須是105。= 3 * GB2ki36,其中i=0,1,2,3,4,5,6。3百錢買百雞問題。公雞每只5元,母雞每只3元,小雞1元3只,要求100元錢正好買100只雞,則應買公雞、母雞的小雞各多少只.4*班有學生n人,從終端讀入n及n個人學生的成績,試編程實現以下功能: = 1 * GB3 打印出前3個最好成績及取得每個最好成績的人數; = 2 * GB3 假設90分以上計為優,7589分計為良,6074分計為中,60分以下計為不及格,試統計各檔成績所占百分率。【實驗報告】實習時間: 實習地點: 實習機號:具體實驗容1、*includevoid main()int i,m,sum1,sum

23、2=0;for(i=1;i=1000;i+)sum1=0;for(m=1;mi;m+)if(i%m=0)sum1=sum1+m;if(sum1=i)printf(完數%d+,i);sum2=sum2+i;printf(b=%dn,sum2);2、*includestdio.hvoid main()int i,j,k,sum;for(i=1;i=11;i+)sum=0;k=i;for(j=0;j=6;j+)k=k+j;sum=sum+k;if(sum=105) k=i; for(j=0;j7;j+) printf(%2d ,k=k+j); printf(n);*includevoid main(

24、)int i,j,m;for(i=0;i=100;i+)for(j=0;j=100;j+)for(m=0;m=100;m+)if(i+j+m=100&5*i+3*j+m/3=100)printf(公雞 %dt母雞 %dt小雞 %dn,i,j,m);4、*include void main()float a500,t,you,liang,zhong,cha;int i,j,n=0,sum=1,N;printf(input the numble of student:);scanf(%d,&N);printf(input scores:n);for(i=0;iN;i+)scanf(%f,&ai);

25、for(j=0;jN-1;j+)for(i=0;iN-j-1;i+)if(aiai+1)t=ai;ai=ai+1;ai+1=t;for(i=0;iN;i+)if(ai+1=ai)sum+;elseprintf(%.2f分:%dn,ai,sum);sum=1;n+;if(n=3)break;you=0;liang=0;zhong=0;cha=0;for(i=0;i=90)you+;if(ai=75)liang+;if(ai=60)zhong+;if(ai60)cha+;printf(優(百分比):%.2fn,100*you/(you+liang+zhong+cha);printf(良(百分比):

26、%.2fn,100*liang/(you+liang+zhong+cha);printf(中(百分比):%.2fn,100*zhong/(you+liang+zhong+cha);printf(不及格(百分比):%.2fn,100*cha/(you+liang+zhong+cha);程序調試過程實習小結實驗四 數組程序設計1【實驗目的】1掌握一維數組與二維數組的定義及其元素的引用方法。2深刻體會數組與循環的關系。3掌握利用一維數組和二維數組實現一些常用算法的編程技巧。4進一步掌握動態調試的根本技能。【上機實習指導】1用移位法將數組a中的最后一個數移到最前面,其余數依次往后移動一個位置。 * i

27、nclude stdio.h void main() int i,t,a10=0,1,2,3,4,5,6,7,8,9; t=a9; for(i=1;i10;i+) ai=ai-1; a0=t; printf(n); for(i=0;i10;i+) printf(%d ,ai);請按以下步驟實習和思考: = 1 * GB3 分析程序及其特性。 = 2 * GB3 上機運行程序,查看運行結果是否正確. = 3 * GB3 用動態跟蹤查找錯誤原因,即按如下操作:首先將光標移至t=a9的語句行上,按F4,再用Ctrl-F7操作將a數組的容顯示出來,然后將光標移至ai=ai-1的語句行上,不斷按F4,觀

28、察a數組值的變化情況,以此分析并找出錯誤原因。 = 4 * GB3 改正錯誤后重新運行程序,直到結果正確為此。 = 5 * GB3 如果要用三次循環移位來實現將最后三個數移到前面,其余數依次往后移三個位置,則程序應該如何修改. 2輸入n個學生的單科成績,然后從高到低的順序排序后輸出。以下是用選擇法實現的排序。* include stdio.hvoid main( )int i,j,t,n,an; printf(n n=);scanf(%d,&n);printf(input n numbers :n); for (i=0;in;i+)scanf(%d,&ai);for(i=0;in-1;i+)

29、for(j=i+1;jn;j+) if(aiaj) t=ai;ai=aj;aj=t; printf(the sorted numbers:n); for(i=0;in;i+) printf(%4d,ai); = 1 * GB3 分析程序及其特性。 = 2 * GB3 上機編譯程序,程序是否有語法錯誤.應如何修改.數組a的長度可比n大些,改正錯誤后重新編譯和運行程序,直到結果正確為此。 = 3 * GB3 你對選擇排序算法的實現過程是否清楚了.假設不清楚,請用動態跟蹤的方法觀察其實現過程,操作如下:首先將光標移至 if語句行上,按F4,接著輸入數據,當綠條第停留在if語句行時,用Ctrl-F7操

30、作將a數組的容顯示出來,不斷按F4,觀察a數組值的變化情況,以此分析和領會算法的實現過程。 = 4 * GB3 輸入冒泡排序程序,用動態跟蹤觀察其實現過程。 = 5 * GB3 如果要用三次循環移位來實現將最后三個數移到前面,其余數依次往后移三個位置,則程序應該如何修改.【自編程序上機】1將矩陣45中值行中所有數的和為最大的那一行元素與首行元素對換。具體要求如下: = 1 * GB3 矩陣的數值從鍵盤輸入。 = 2 * GB3 以矩陣的形式輸出對換后的矩陣。2P141 7.6。3數字檢查通過鍵盤輸入nn50個4位數輸入-1時完畢,統計這n個4位數中各位上的數字均是偶數的數的個數,并把這些4位數

31、按從大到小的順序進展輸出。提示:定義兩個一維數組a和b,數組a用于存放輸入4位數,數組b用于存放滿足條件的4位數;判斷4位數沙鍋的各個數是否為偶數的方法可將該數的每一位數拆分出來,然后進展判斷即可。【實驗報告】實習時間: 實習地點: 實習機號:具體實驗容1、*includestdio.hvoid main()int A45;int i,j,n,t=0,ma*=0,temp;for(i=0;i4;i+)for(j=0;j5;j+)scanf(%d,&Aij);for(i=0;i4;i+)n=0;for(j=0;jma*)ma*=n;t=i;for(j=0;j5;j+)temp=A0j;A0j=A

32、tj;Atj=temp;for(i=0;i4;i+)for(j=0;j5;j+)printf(%d,Aij);printf(n);2、*includestdio.hvoid main()int a1010;int i,j;for(i=0;i10;i+)ai0=1;aii=1;for(i=1;i10;i+)for(j=0;ji;j+)ai+1j+1=aij+aij+1;for(i=0;i10;i+)for(j=0;ji+1;j+)printf(%5d,aij);printf(n);3、*includestdio.hvoid main()int a50,b50;int i,j,n=0,t,m,te

33、mp=0;for(i=0;i50;i+)scanf(%d,&ai);if(ai=-1)break;for(j=0;ji;j+)if(aj/1000%2=0&aj/100%10%2=0&aj/10%100%2=0&aj%1000%2=0)bn=aj;n=n+1;for(m=0;mn;m+)for(t=0;tn-m;t+)if(btbt+1)temp=bt;bt=bt+1;bt+1=temp;for(t=0;tn;t+)printf(%dn,bt);程序調試過程實習小結實驗五 數組程序設計2【實驗目的】1進一步掌握一維數組與二維數組的定義及其元素的引用方法。2掌握利用一維數組和二維數組實現一些常用

34、算法的編程技巧。【自編程序上機】1成績排名假設有五位同學四門功課的成績如下,現要求得每位同學的總分,并按照總分從高到低的順序進展排序,輸出其名次,如果總分一樣,則按語文和數學分數之和高者排前,低者排后,但名次一樣。姓 名語 文數 學英 語綜 合大明120130110280小紅110120105290王志強108128126278汪曉成112135122286 丹100120108276提示:用二維數組score存放每個學生各門課程的成績,二維數組定義時最后多定義一列,用于存放每個學生的總分;用一個字符串數組name存放學生的。217個人圍坐一圈,順序編號為1,2,3,,17。現在從第一個人開場

35、數起,每數到7時,這個人就從圈里出來,再從下一個數重新開場數1,2,7,數到第7的這個人也從圈里出來,直到全部17個人從圈里出來為此。例如,前面站出來的4個人是7,14,4和12。編程輸出從圈里出來的人的順序。【實驗報告】實習時間: 實習地點: 實習機號:具體實驗容程序調試過程實習小結實驗六 模塊化程序設計(1)【實驗目的】1掌握C語言中定義函數的方法及其調用方法。2掌握函數實參與形參的對應關系以及值傳遞與地址傳遞的方式,熟練掌握模塊間數據傳遞的方式。3掌握全局變量和局部變量、動態變量與靜態變量的概念和使用方法,深刻體會全局變量和局部變量、動態變量與靜態變量的概念和使用方法,【上機實習指導】1

36、先靜態閱讀以下程序,然后上機運行程序,查看運行結果是否與你閱讀的結果一致.不一致的原因何在.* include stdio.hint a=3,b=5,c=2;int f(int a,int b) a+;b-;c=a+b;return(a+b+c);void main( ) int a=4,k; k=f(a+2,b+1); printf(n %d,%d,%d,%d,a,b,c,k); getchar();2靜態分析以下程序的執行結果,然后上機運行程序,將分析結果與運行結果加以比照,從中領會靜態局部變量的含義及用法。* include stdio.hint f(int *) static int

37、f=0,y=0; if(f=0) y+=2*; else if(f=1)y+=3*; else y+=4*; f+; return y;void main( ) printf(n %d,f(2); printf(n %d,f(2);printf(n %d,f(2);getchar(); 【自編程序上機】1求兩整數的最公約數和最小公倍數。用一函數求最大公約數,用另一函數調用此函數求出最大公約數,并用求出的最大公約數求最小公倍數。具體要求如下: = 1 * GB3 用全局變量。將最大公約數與最小公倍數設為全局變量,在主函數中輸出它們的值。 = 2 * GB3 不用全局變量。最大公約數和最小公倍數由

38、被調模塊返回值。2計算并輸出具體要求如下: = 1 * GB3 編制一個函數pq(n),返回n!值。 = 2 * GB3 編制主函數,由鍵盤輸入m與n(mnO),調用(1)中的函數計算以下算式值。 = 3 * GB3 在主函數中,輸入m與n之前要有提示,并檢查輸入數據的合理性,對于不合理的輸入,應輸出出錯信息,不再進展計算。在函數pq(n)中也要檢查n的合理性,當nO時輸出出錯信息,不再進展計算。 = 4 * GB3 分別輸入(m,n)=(3,-1),(0,0),(8,3),(3,8),(8,8)運行該程序。 = 5 * GB3 畫出模塊pq()的流程圖。3編寫程序,要求找出滿足以下條件的3位

39、數:它是完全平方數,又有兩位數字一樣。如:144、676。要求:設計一函數判斷一個三位數是否為完全平方數,設計另一函數判斷一個三位數中是否有兩位數字一樣,再在主函數中調用這兩個函數,找出所有的滿足這兩個條件的三位數。【實驗報告】實習時間: 實習地點: 實習機號:具體實驗容程序調試過程實習小結實驗七 模塊化程序設計(2)【實驗目的】1進一步熟悉函數之間的數據傳遞方式,熟練掌握函數的嵌套調用與遞歸調用的方法。2掌握通過數組進展數據傳遞的方法。【上機實習指導】1.對以下程序進展單步運行,并從中了解數組作為函數的參數是如何進展數據傳遞.* include stdio.hvoid change(int

40、a,int n) int i,j,t; for(i=0,j=n-1;ij;i+,j-) t=ai; ai=aj; aj=t; void main( ) int i,b10; for(i=0;i10;i+) scanf(%d,&bi); printf(The array b is:); for(i=0;i10;i+) printf(%3d,bi); printf(n); change(b,10); printf(The array b is:); for(i=0;i10;i+) printf(%3d,bi); printf(n); getchar(); getchar(); 【自編程序上機】1編

41、寫函數,將n個整數的數列進展重新排放,重新排放后的結果為:前段都是奇數,后段都是偶數,并編寫主函數完成: = 1 * GB3 輸入10個整數; = 2 * GB3 調用此函數進展重排; = 3 * GB3 輸出重排后的結果。2輸入10個學生4門課的成績,分別用函數求: = 1 * GB3 每個學生的平均成績; = 2 * GB3 每門課的及格率; = 3 * GB3 最高分所對應的學生和課程。【實驗報告】實習時間: 實習地點: 實習機號:具體實驗容1.*include stdio.hvoid main()int a10,b10,c10;int i,bcount=0,ccount=0;print

42、f(input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i10;i+)if(ai%2=0)bbcount=ai;bcount+;elsecccount=ai;ccount+;printf(output:n);for(i=0;iccount;i+)printf(%d ,ci);for(i=0;ibcount;i+)printf(%d ,bi);2.*includestdio.h*includemath.h*define N 10*define M 4float *average(float aM)int i,j;float ave,*

43、stu=new float;printf(各科及格率為:n);for(i=0;iN;i+)for(ave=0,j=0;jM;j+)ave+=aij;stui=ave/M;printf(學生%d:%.2ft,i+1,stui);printf(n);return stu;void aver(float aM)int i,j;float ave;printf(每科的平均分:n);for(i=0;iM;i+)for(ave=0,j=0;j=60) ave+;printf(科目%d:%.2ft,i+1,ave/N);void hight(float aM)int i,j,stu=0,sub=0;floa

44、t t=a00;for(i=0;iN;i+)for(j=0;jM;j+)if(taij)t=aij;sub=j;stu=i;printf(科目%d,學生%d,成績%.2fn,sub,stu,t);void main()float stuNM;float *stu_ave=new float;int i=1,j;for(;i=N;i+)printf(請輸入第%d個學生的4科成績:n,i);for (j=0;jM;j+)scanf(%f,&stui-1j);for (i=0;iN;i+)for(j=0;jM;j+)printf(%.2f,stuij);printf(v);stu_ave=avera

45、ge(stu);aver(stu);hight(stu);程序調試過程實習小結實驗八 指針程序設計【實驗目的】 掌握變量的指針及其根本用法。 掌握一維數組的指針及其根本用法。掌握指針變量作為函數的參數時,參數的傳遞過程及其用法。【上機實習指導】1對以下程序進展單步運行,并從中了解變量的指針和指針變量的概念。 * include stdio.h void main() int a=5,b=5,*p; p=&a;*p=8;p=&b;b=10; 按以下步驟操作: = 1 * GB3 輸入程序后,連續按三次F8,使綠條停留在P=&a誦句行上。 = 2 * GB3 用Ctrl一F7操作分別將a,b,&a

46、,&b,p及*p顯示出來。 = 3 * GB3 查看觀察窗口中的容,可發現此時a、b己有確定的地址(&a和&b)和確定的值,而p還沒荷確定的值(此時語句p=&a還未執行),即p還沒有明確的指向,因而它所指向的存單元(*p)中的容也是不確定的。 = 4 * GB3 按F8往下執行一步后再查看觀察窗中的容,可發現p已有確定的值,它與&a的值一致,說明p中存放了變量a的地址,也就是說p是指向變量a的指針變量。同時可發現,*p的容與a的容一致,即p所指向的存單元中的容就是a的容;從而可以理解*p等效于a,表示同一存單元。 = 5 * GB3 按F8往下執行一步后再查看觀察窗中的容,可發現*p和a的容都

47、已發生變化,從而可理解通過改變指針變量p所指向的存單元中的容可以間接地改變a中的容。 = 6 * GB3 再按F8往下執行一步,可發現p的值己發生變化,它與&b的值一致,說明p已經是指向變量b的指針變量,它不再是指向a,*p的容也已變為b的容,從而可理解指針變量的指向是隨時可以改變的。 = 7 * GB3 再按F8往下執行一步,可發現,b的值和*p的值都已發生變化,即改變b的容就等于改變指針變量p所指向的存單元中的容。2單步運行以下程序,觀察&a0,&ai)和P的變化,然后答復以下問題: = 1 * GB3 程序的功能是什么 = 2 * GB3 在開場進入循環體之前,p指向誰 = 3 * GB

48、3 循環每增加一次,p的值(地址)增加多少它指向誰 = 4 * GB3 退出循環后,p指向誰 = 5 * GB3 你是否初步掌握了通過指針變搔引用數組元素的方法* include stdio.hvoid main() int i,*p,s=0,a5=5,6,7,8,9; p=a; for(i=0;i5;i+,p+) s+=*p;printf(n s=%d,s);3.先分析以下程序的運行結果,然后上機驗證,并通過此例掌握通過指針變量引用數組元素的各種方法。 * include stdio.hvoid main( ) int i,s1=0, s2=0, s3=0, s4=0,*p,a5=1,2,3

49、,4,5; p=a; for(i=0;i5;i+) s1+=pi; for(i=0;i5;i+) s2+=*(p+i); for(p=a;pa+5;p+) s3+=*p; p=a; for(i=0;i5;i+) s4+=*p+; printf(n s1=%d, s2=%d, s3=%d, s4=%ds1,s2,s3,s4); 【自編程序上機】1.編寫函數實現計算一元二次方程的兩個實根,然后編寫主函數調用此函數。要求:在同一個函數求出方程的兩個實根,此函數不準使用全局變量進展數據傳遞,也不能使用return語句,只能通過指針進展數據傳遞。2編寫函數,將n個數按原來的順序的逆序排列要求用指針實現,

50、然后編寫主函數完成: = 1 * GB3 輸入10個數; = 2 * GB3 調用此函數進展重排; = 3 * GB3 輸出重排后的結果。【實驗報告】實習時間: 實習地點: 實習機號:具體實驗容程序調試過程實習小結實驗九 構造體程序設計【實驗目的】 掌握構造體類型變量與構造體數組的定義和使用。 學會使用構造體指針變量和構造體指針數組。掌握鏈表的概念,初步學會對鏈表進展操作。【上機實習指導】1輸入出10個學生的*、和成績,求出其中的高分者和低分者。 * include stdio.hstruct student int num; char name20; int score; ;void mai

51、n( ) int i; struct student st,stma*,stmin; stma*.score=0; stmin.score=100; printf(n input data); for(i=0;istma*.score) stma*=st; if(st.scorestmin.score) stmin=st; printf(n hight:%5d%15s%5d,stma*.num,stma*.name,stma*.score);printf(n low:%5d%15s%5d,stmin.num,,stmin.score); = 1 * GB3 分析程序,上機運

52、行程序。 = 2 * GB3 程序中,哪些是對構造體變量的成員引用,哪些是整體引用. = 3 * GB3 對于此例來說,用構造體變量作為數據構造有何優越性.【自編程序上機】1有一學生情況如下表所示。編制一個C程序,用冒泡法對該學生情況表按成績grade從低到高進展排序。具體要求如下: = 1 * GB3 構造體類型為struct 構造體名 int num; charname8; char se*; intage;intgrade; = 2 * GB3 在程序中,首先輸出排序前的學生情況,然后輸出排序后的結果,其格式如上表所示(表的框線不要)。2鏈表根本操作。 具體要求如下: = 1 * GB3

53、 初始時鏈表為空,即鏈表的頭指針為空。 = 2 * GB3 對于上表所示的學生情況表,依次將每個學生的情況作為一個結點插入到單鏈表的鏈頭(即當前插入的結點將成為鏈表的第一個結點)。 = 3 * GB3 所有學生情況都插入到鏈表中后,從鏈頭開場,依次輸出鏈表中的各結點值(即每個學生的情況)。輸出格式如同上表。【實驗報告】實習時間: 實習地點: 實習機號:具體實驗容程序調試過程實習小結實驗十 文件程序設計【實驗目的】1掌握文件與文件指針的概念。2學會使用文件翻開、文件關閉、讀與寫文件等根本的文件操作函數。運用文件操作函數進展程序設計。【上機實習指導】1以文本方式建立初始數據文件,請在TC的編輯窗中

54、輸入10個學生的*、及考試成績,形式如下:LiLi 80HuWei 90LiMing 75數據輸入完后,請選用File中的菜單中項Write to 將數據存入文件file1.dat 中。記住,你建立的file1.dat是一個不等長記錄的文本文件,即每個學生的數據是不等長的,數據間以空格作為分隔。現在,你再瘵編輯窗口中的數據修改成等長記錄,*、和成績的長度分別按4、10、3給定,形式如下:1001LiLi 801002HuWei 901003LiMing 75然后將數據存入文件file2.dat中,該文件就是一個等長記錄的文本文件,每個學生的數據占18個字符包括換行符。讀入file1.dat中的

55、數據,找出最高分和最低度分的學生。* include stdio.htypedef struct student int num; char name20; int score;STU;void main() int i; STU st,stma*,stmin; FILE *fp; stma*.score=0; stmin.score=100; fp=fopen(file1.dat,r); if(!fp) return; for(i=0;istma*.score) stma*=st; if(st.scorestmin.score) stmin=st; fclose(fp); printf(n hight:%5d%15s%5d,stma*.num,stma*.name,stma*.score);printf(n low:%5d%15s%5d,stmin.num,,stmin.score);getchar();請按以下步驟實習和思考: = 1 * GB3 分析程序,上機運行程序并分析運行結果。

溫馨提示

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

評論

0/150

提交評論