




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、-PAGE . zC語言實(shí)驗(yàn)報(bào)告專業(yè) _年 級 _學(xué) 號 _學(xué)生 _指導(dǎo)教師 _華中師大學(xué)信息管理系編 = 1 * ROMAN I實(shí)驗(yàn)要求1每次實(shí)驗(yàn)中有假設(shè)干習(xí)題,每個學(xué)生至少應(yīng)該完成其中的三道習(xí)題。2上機(jī)之前應(yīng)作好充分的準(zhǔn)備工作,預(yù)先編好程序,經(jīng)過人工檢查無誤后,才能上機(jī),以提高上機(jī)效率,嚴(yán)禁一邊上機(jī)一邊編寫。3獨(dú)立上機(jī)輸入和調(diào)試自己所編的程序,切忌抄襲、拷貝他人程序。4上機(jī)完畢后,應(yīng)整理出實(shí)驗(yàn)報(bào)告。書寫實(shí)驗(yàn)報(bào)告時,重點(diǎn)放在調(diào)試過程和小結(jié)局部,總結(jié)出本次實(shí)驗(yàn)中的得與失,以到達(dá)穩(wěn)固課堂學(xué)習(xí)、提高動手能力之目的。 = 2 * ROMAN II 實(shí)驗(yàn)容實(shí)驗(yàn)一 簡單程序設(shè)計(jì)【實(shí)驗(yàn)?zāi)康摹?熟悉TC+、
2、Borland C+和VC+6.0的運(yùn)行環(huán)境。2了解在TC+、Borland C+和VC+6.0上如何編輯、編譯、連接和運(yùn)行一個C程序。3熟練使用各種C語言的數(shù)據(jù)類型、運(yùn)算符與表達(dá)式。4熟練掌握格式輸入與格式輸出函數(shù)的使用。通過運(yùn)行簡單的程序,初步了解源程序的特點(diǎn),初步掌握查錯和排錯的技能.【上機(jī)實(shí)習(xí)指導(dǎo)】通過以下程序來掌握上機(jī)操作的全過程在VC、BC或TC中練習(xí)輸入、編譯、運(yùn)行一個C語言程序的全過程以下程序是計(jì)算函數(shù)y=3*2+2*-4(假設(shè)*=2)。* include stdio.hvoid main( ) int *=2,y; y=3*+2*-4; printf(ny=%d,y);2根本
3、數(shù)據(jù)類型表示圍練習(xí)假設(shè)有如下程序: *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 :運(yùn)行該程序,寫出輸出結(jié)果。并說明為什么存在輸出結(jié)果的差異.問題2 :如果要求四行輸出的結(jié)果均為140,在不改變變量的
4、數(shù)據(jù)類型的根底上,則應(yīng)修改程序中的哪條語句.怎樣修改.問題3 :編一程序,要求兩個負(fù)整數(shù)相加,輸出的結(jié)果為一正整數(shù)。【自編程序上機(jī)】1 鍵盤輸入與屏幕輸出練習(xí)用下面的scanf函數(shù)輸入數(shù)據(jù),使a = 3, b = 7, * = 8.5, y = 71.82, c1 = A, c2 = a,問在鍵盤上如何輸入.要求把以下程序補(bǔ)充完整。*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);提示:在格式控制字符串中除了格式說明以外還有其它字符,在輸入數(shù)據(jù)時應(yīng)輸入與這些字符一樣的字符。為了驗(yàn)證輸入格式的正確與否,應(yīng)在程序中補(bǔ)充調(diào)用標(biāo)準(zhǔn)的輸出函數(shù)printf。按輸出結(jié)果要求編寫程序假設(shè)a = 3, b = 4, c = 5, * = 1.2, y = 2.4, z = -3.6, u = 51274, n = 128765. c1 = a, c2 = b,想得到以下輸出格式和結(jié)果,請寫出完整的程序。要求輸出結(jié)果如下:(*表示空格)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)提示:根據(jù)題目中變量的值定義適宜的變量類型。正確定義和使用printf函數(shù)中的格式控制字符串。計(jì)算定期存款本利之和設(shè)銀行定期存款的年利率rate為2.25%,并存款期為n年,存款本金為capital元,試編程計(jì)算n年后本利之和deposit。要求定期存款的年利率rate、存款期間n和存款本金capital均由鍵盤輸入。4. 設(shè)一個正圓臺的上底半徑r1=2.5cm,下底半徑r2=3.7cm,高h(yuǎn)=3.5cm。分別計(jì)算并輸出該圓臺的上底面積
7、s1下底面積s2,側(cè)面積s3,圓臺的體積v。 具體要求如下: = 1 * GB3 r1,r2,h用scanf函數(shù)輸入,且在輸入前要有提示; = 2 * GB3 在輸出結(jié)果時要有文字說明,每個輸出值占一行,且小數(shù)點(diǎn)后取4位數(shù)字。 = 3 * GB3 所有變量均定義為單精度類型。5編程實(shí)現(xiàn):用1分、5分、10分、25分的硬幣湊成任何給定的錢數(shù)*,要求硬幣的數(shù)目最少。【實(shí)驗(yàn)報(bào)告】實(shí)習(xí)時間: 實(shí)習(xí)地點(diǎn): 實(shí)習(xí)機(jī)號:具體實(shí)驗(yàn)容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(總的硬幣數(shù)是%dn,sum); 實(shí)驗(yàn)二 選擇構(gòu)造程序設(shè)計(jì)【實(shí)驗(yàn)?zāi)康摹?熟練掌握上機(jī)運(yùn)行一個C程序的操作過程。2學(xué)會正確使用邏輯運(yùn)算符和邏輯表達(dá)
12、式,進(jìn)一步掌握各種表達(dá)式的使用。3利用if語句實(shí)現(xiàn)選擇構(gòu)造程序設(shè)計(jì)。4利用switch語句實(shí)現(xiàn)多分支選擇構(gòu)造程序設(shè)計(jì)。5進(jìn)一步練習(xí)調(diào)試與修改程序。【上機(jī)實(shí)習(xí)指導(dǎo)】輸入并運(yùn)行習(xí)題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);分別作以下改變并運(yù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計(jì)算以下分段函數(shù)值:具體要求如下: = 1 * GB3 用if語句實(shí)現(xiàn)分支。自變量*與函數(shù)值均用單精度類型。 = 2 * GB3 自變量*用sc
14、anf函數(shù)輸入,且輸入前要有提示。結(jié)果的輸出采用以下形式: *=具體值,f(*)=具體值 = 3 * GB3 分別輸入*=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0,運(yùn)行該程序。3先靜態(tài)分析以下程序的運(yùn)行結(jié)果,然后上機(jī)驗(yàn)證。 * 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); 上機(jī)運(yùn)行的結(jié)果與你分析的結(jié)果是否一致.不一致的原因何在.請?jiān)诔绦虻淖詈笠粋€花括號前加上語句:getchar();后重新運(yùn)行程序,考前須知加上這一語句后,程序的運(yùn)行進(jìn)程有何不同.getchar()是一個函數(shù)調(diào)用,其作用是等待接收你從鍵盤輸入的一個字符,在你未按鍵之前一直處于等待狀態(tài)。在這里可以起到暫停的作用。當(dāng)你看清結(jié)果并按任意鍵后,立即退出程序并切換回TC主屏幕。用這一方法可以減少屏幕切換操作。4以下C程序的功能是:計(jì)算并輸出分段函數(shù)值。其中*由鍵盤輸入。 請通過調(diào)試修改程序中的錯誤(包括語法錯誤和邏輯錯誤)。*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);程序調(diào)試過程實(shí)習(xí)小結(jié)實(shí)驗(yàn)三 循環(huán)構(gòu)造程序設(shè)計(jì)【實(shí)驗(yàn)?zāi)康摹?進(jìn)一步練習(xí)選擇構(gòu)造的程序設(shè)計(jì)。練習(xí)并掌握實(shí)現(xiàn)循環(huán)構(gòu)造的三種方法。3練習(xí)并掌握選擇構(gòu)造與循環(huán)構(gòu)造的嵌套。4掌握多
20、重循環(huán)的應(yīng)用。5學(xué)會單步跟蹤的操作方法。【上機(jī)實(shí)習(xí)指導(dǎo)】1輸入例6.2. = 1 * GB3 上機(jī)運(yùn)行程序,分析運(yùn)行結(jié)果。 = 2 * GB3 用單步跟蹤觀察while語句的執(zhí)行過程:連續(xù)按三次F8鍵,再用兩次Ctrl-F7操作分別將i和sum的值顯示出來,然后不按斷F8鍵,每次按F8后,觀察綠條的變化和變量值的變化情況,以此來分析并弄清while語句的執(zhí)行過程。 = 3 * GB3 修改程序,實(shí)現(xiàn)s=1+1/2+1/3+1/10。【自編程序上機(jī)】 1如果一個數(shù)恰好等于它的所有因子(包括1但不包括自身)之和,例如:6的因子為1,2,3,且1236,因此6是一個完數(shù)。 計(jì)算并輸出1000以的所有
21、完數(shù)之和。 具體要求如下: = 1 * GB3 所有循環(huán)均用for循環(huán)。 = 2 * GB3 輸出要有文字說明,并同時輸出各完數(shù)。輸出形式為:完數(shù)1+完數(shù)2+=和值2彩票選號*市體育彩票采用整數(shù)1、2、3、36表示36種體育運(yùn)動,一彩票可選擇7種運(yùn)動。編寫程序,選擇一彩票的,使這彩票的7個之和是105且相鄰兩個之差按順序依次是1、2、3、4、5、6。例如第一個是1,則后續(xù)應(yīng)是2、4、7、11、16、22。提示:= 1 * GB2假設(shè)7個中的第一個是k0 ,則后續(xù)之間的關(guān)系是: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只雞,則應(yīng)買公雞、母雞的小雞各多少只.4*班有學(xué)生n人,從終端讀入n及n個人學(xué)生的成績,試編程實(shí)現(xiàn)以下功能: = 1 * GB3 打印出前3個最好成績及取得每個最好成績的人數(shù); = 2 * GB3 假設(shè)90分以上計(jì)為優(yōu),7589分計(jì)為良,6074分計(jì)為中,60分以下計(jì)為不及格,試統(tǒng)計(jì)各檔成績所占百分率。【實(shí)驗(yàn)報(bào)告】實(shí)習(xí)時間: 實(shí)習(xí)地點(diǎn): 實(shí)習(xí)機(jī)號:具體實(shí)驗(yàn)容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(完數(shù)%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(優(yōu)(百分比):%.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);程序調(diào)試過程實(shí)習(xí)小結(jié)實(shí)驗(yàn)四 數(shù)組程序設(shè)計(jì)1【實(shí)驗(yàn)?zāi)康摹?掌握一維數(shù)組與二維數(shù)組的定義及其元素的引用方法。2深刻體會數(shù)組與循環(huán)的關(guān)系。3掌握利用一維數(shù)組和二維數(shù)組實(shí)現(xiàn)一些常用算法的編程技巧。4進(jìn)一步掌握動態(tài)調(diào)試的根本技能。【上機(jī)實(shí)習(xí)指導(dǎo)】1用移位法將數(shù)組a中的最后一個數(shù)移到最前面,其余數(shù)依次往后移動一個位置。 * 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);請按以下步驟實(shí)習(xí)和思考: = 1 * GB3 分析程序及其特性。 = 2 * GB3 上機(jī)運(yùn)行程序,查看運(yùn)行結(jié)果是否正確. = 3 * GB3 用動態(tài)跟蹤查找錯誤原因,即按如下操作:首先將光標(biāo)移至t=a9的語句行上,按F4,再用Ctrl-F7操作將a數(shù)組的容顯示出來,然后將光標(biāo)移至ai=ai-1的語句行上,不斷按F4,觀
28、察a數(shù)組值的變化情況,以此分析并找出錯誤原因。 = 4 * GB3 改正錯誤后重新運(yùn)行程序,直到結(jié)果正確為此。 = 5 * GB3 如果要用三次循環(huán)移位來實(shí)現(xiàn)將最后三個數(shù)移到前面,其余數(shù)依次往后移三個位置,則程序應(yīng)該如何修改. 2輸入n個學(xué)生的單科成績,然后從高到低的順序排序后輸出。以下是用選擇法實(shí)現(xià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 上機(jī)編譯程序,程序是否有語法錯誤.應(yīng)如何修改.數(shù)組a的長度可比n大些,改正錯誤后重新編譯和運(yùn)行程序,直到結(jié)果正確為此。 = 3 * GB3 你對選擇排序算法的實(shí)現(xiàn)過程是否清楚了.假設(shè)不清楚,請用動態(tài)跟蹤的方法觀察其實(shí)現(xiàn)過程,操作如下:首先將光標(biāo)移至 if語句行上,按F4,接著輸入數(shù)據(jù),當(dāng)綠條第停留在if語句行時,用Ctrl-F7操
30、作將a數(shù)組的容顯示出來,不斷按F4,觀察a數(shù)組值的變化情況,以此分析和領(lǐng)會算法的實(shí)現(xiàn)過程。 = 4 * GB3 輸入冒泡排序程序,用動態(tài)跟蹤觀察其實(shí)現(xiàn)過程。 = 5 * GB3 如果要用三次循環(huán)移位來實(shí)現(xiàn)將最后三個數(shù)移到前面,其余數(shù)依次往后移三個位置,則程序應(yīng)該如何修改.【自編程序上機(jī)】1將矩陣45中值行中所有數(shù)的和為最大的那一行元素與首行元素對換。具體要求如下: = 1 * GB3 矩陣的數(shù)值從鍵盤輸入。 = 2 * GB3 以矩陣的形式輸出對換后的矩陣。2P141 7.6。3數(shù)字檢查通過鍵盤輸入nn50個4位數(shù)輸入-1時完畢,統(tǒng)計(jì)這n個4位數(shù)中各位上的數(shù)字均是偶數(shù)的數(shù)的個數(shù),并把這些4位數(shù)
31、按從大到小的順序進(jìn)展輸出。提示:定義兩個一維數(shù)組a和b,數(shù)組a用于存放輸入4位數(shù),數(shù)組b用于存放滿足條件的4位數(shù);判斷4位數(shù)沙鍋的各個數(shù)是否為偶數(shù)的方法可將該數(shù)的每一位數(shù)拆分出來,然后進(jìn)展判斷即可。【實(shí)驗(yàn)報(bào)告】實(shí)習(xí)時間: 實(shí)習(xí)地點(diǎn): 實(shí)習(xí)機(jī)號:具體實(shí)驗(yàn)容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);程序調(diào)試過程實(shí)習(xí)小結(jié)實(shí)驗(yàn)五 數(shù)組程序設(shè)計(jì)2【實(shí)驗(yàn)?zāi)康摹?進(jìn)一步掌握一維數(shù)組與二維數(shù)組的定義及其元素的引用方法。2掌握利用一維數(shù)組和二維數(shù)組實(shí)現(xiàn)一些常用
34、算法的編程技巧。【自編程序上機(jī)】1成績排名假設(shè)有五位同學(xué)四門功課的成績?nèi)缦拢F(xiàn)要求得每位同學(xué)的總分,并按照總分從高到低的順序進(jìn)展排序,輸出其名次,如果總分一樣,則按語文和數(shù)學(xué)分?jǐn)?shù)之和高者排前,低者排后,但名次一樣。姓 名語 文數(shù) 學(xué)英 語綜 合大明120130110280小紅110120105290王志強(qiáng)108128126278汪曉成112135122286 丹100120108276提示:用二維數(shù)組score存放每個學(xué)生各門課程的成績,二維數(shù)組定義時最后多定義一列,用于存放每個學(xué)生的總分;用一個字符串?dāng)?shù)組name存放學(xué)生的。217個人圍坐一圈,順序編號為1,2,3,,17。現(xiàn)在從第一個人開場
35、數(shù)起,每數(shù)到7時,這個人就從圈里出來,再從下一個數(shù)重新開場數(shù)1,2,7,數(shù)到第7的這個人也從圈里出來,直到全部17個人從圈里出來為此。例如,前面站出來的4個人是7,14,4和12。編程輸出從圈里出來的人的順序。【實(shí)驗(yàn)報(bào)告】實(shí)習(xí)時間: 實(shí)習(xí)地點(diǎn): 實(shí)習(xí)機(jī)號:具體實(shí)驗(yàn)容程序調(diào)試過程實(shí)習(xí)小結(jié)實(shí)驗(yàn)六 模塊化程序設(shè)計(jì)(1)【實(shí)驗(yàn)?zāi)康摹?掌握C語言中定義函數(shù)的方法及其調(diào)用方法。2掌握函數(shù)實(shí)參與形參的對應(yīng)關(guān)系以及值傳遞與地址傳遞的方式,熟練掌握模塊間數(shù)據(jù)傳遞的方式。3掌握全局變量和局部變量、動態(tài)變量與靜態(tài)變量的概念和使用方法,深刻體會全局變量和局部變量、動態(tài)變量與靜態(tài)變量的概念和使用方法,【上機(jī)實(shí)習(xí)指導(dǎo)】1
36、先靜態(tài)閱讀以下程序,然后上機(jī)運(yùn)行程序,查看運(yùn)行結(jié)果是否與你閱讀的結(jié)果一致.不一致的原因何在.* 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靜態(tài)分析以下程序的執(zhí)行結(jié)果,然后上機(jī)運(yùn)行程序,將分析結(jié)果與運(yùn)行結(jié)果加以比照,從中領(lǐng)會靜態(tài)局部變量的含義及用法。* 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(); 【自編程序上機(jī)】1求兩整數(shù)的最公約數(shù)和最小公倍數(shù)。用一函數(shù)求最大公約數(shù),用另一函數(shù)調(diào)用此函數(shù)求出最大公約數(shù),并用求出的最大公約數(shù)求最小公倍數(shù)。具體要求如下: = 1 * GB3 用全局變量。將最大公約數(shù)與最小公倍數(shù)設(shè)為全局變量,在主函數(shù)中輸出它們的值。 = 2 * GB3 不用全局變量。最大公約數(shù)和最小公倍數(shù)由
38、被調(diào)模塊返回值。2計(jì)算并輸出具體要求如下: = 1 * GB3 編制一個函數(shù)pq(n),返回n!值。 = 2 * GB3 編制主函數(shù),由鍵盤輸入m與n(mnO),調(diào)用(1)中的函數(shù)計(jì)算以下算式值。 = 3 * GB3 在主函數(shù)中,輸入m與n之前要有提示,并檢查輸入數(shù)據(jù)的合理性,對于不合理的輸入,應(yīng)輸出出錯信息,不再進(jìn)展計(jì)算。在函數(shù)pq(n)中也要檢查n的合理性,當(dāng)nO時輸出出錯信息,不再進(jìn)展計(jì)算。 = 4 * GB3 分別輸入(m,n)=(3,-1),(0,0),(8,3),(3,8),(8,8)運(yùn)行該程序。 = 5 * GB3 畫出模塊pq()的流程圖。3編寫程序,要求找出滿足以下條件的3位
39、數(shù):它是完全平方數(shù),又有兩位數(shù)字一樣。如:144、676。要求:設(shè)計(jì)一函數(shù)判斷一個三位數(shù)是否為完全平方數(shù),設(shè)計(jì)另一函數(shù)判斷一個三位數(shù)中是否有兩位數(shù)字一樣,再在主函數(shù)中調(diào)用這兩個函數(shù),找出所有的滿足這兩個條件的三位數(shù)。【實(shí)驗(yàn)報(bào)告】實(shí)習(xí)時間: 實(shí)習(xí)地點(diǎn): 實(shí)習(xí)機(jī)號:具體實(shí)驗(yàn)容程序調(diào)試過程實(shí)習(xí)小結(jié)實(shí)驗(yàn)七 模塊化程序設(shè)計(jì)(2)【實(shí)驗(yàn)?zāi)康摹?進(jìn)一步熟悉函數(shù)之間的數(shù)據(jù)傳遞方式,熟練掌握函數(shù)的嵌套調(diào)用與遞歸調(diào)用的方法。2掌握通過數(shù)組進(jìn)展數(shù)據(jù)傳遞的方法。【上機(jī)實(shí)習(xí)指導(dǎo)】1.對以下程序進(jìn)展單步運(yùn)行,并從中了解數(shù)組作為函數(shù)的參數(shù)是如何進(jìn)展數(shù)據(jù)傳遞.* 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(); 【自編程序上機(jī)】1編
41、寫函數(shù),將n個整數(shù)的數(shù)列進(jìn)展重新排放,重新排放后的結(jié)果為:前段都是奇數(shù),后段都是偶數(shù),并編寫主函數(shù)完成: = 1 * GB3 輸入10個整數(shù); = 2 * GB3 調(diào)用此函數(shù)進(jìn)展重排; = 3 * GB3 輸出重排后的結(jié)果。2輸入10個學(xué)生4門課的成績,分別用函數(shù)求: = 1 * GB3 每個學(xué)生的平均成績; = 2 * GB3 每門課的及格率; = 3 * GB3 最高分所對應(yīng)的學(xué)生和課程。【實(shí)驗(yàn)報(bào)告】實(shí)習(xí)時間: 實(shí)習(xí)地點(diǎn): 實(shí)習(xí)機(jī)號:具體實(shí)驗(yàn)容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(學(xué)生%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,學(xué)生%d,成績%.2fn,sub,stu,t);void main()float stuNM;float *stu_ave=new float;int i=1,j;for(;i=N;i+)printf(請輸入第%d個學(xué)生的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);程序調(diào)試過程實(shí)習(xí)小結(jié)實(shí)驗(yàn)八 指針程序設(shè)計(jì)【實(shí)驗(yàn)?zāi)康摹?掌握變量的指針及其根本用法。 掌握一維數(shù)組的指針及其根本用法。掌握指針變量作為函數(shù)的參數(shù)時,參數(shù)的傳遞過程及其用法。【上機(jī)實(shí)習(xí)指導(dǎo)】1對以下程序進(jìn)展單步運(yùn)行,并從中了解變量的指針和指針變量的概念。 * include stdio.h void main() int a=5,b=5,*p; p=&a;*p=8;p=&b;b=10; 按以下步驟操作: = 1 * GB3 輸入程序后,連續(xù)按三次F8,使綠條停留在P=&a誦句行上。 = 2 * GB3 用Ctrl一F7操作分別將a,b,&a
46、,&b,p及*p顯示出來。 = 3 * GB3 查看觀察窗口中的容,可發(fā)現(xiàn)此時a、b己有確定的地址(&a和&b)和確定的值,而p還沒荷確定的值(此時語句p=&a還未執(zhí)行),即p還沒有明確的指向,因而它所指向的存單元(*p)中的容也是不確定的。 = 4 * GB3 按F8往下執(zhí)行一步后再查看觀察窗中的容,可發(fā)現(xiàn)p已有確定的值,它與&a的值一致,說明p中存放了變量a的地址,也就是說p是指向變量a的指針變量。同時可發(fā)現(xiàn),*p的容與a的容一致,即p所指向的存單元中的容就是a的容;從而可以理解*p等效于a,表示同一存單元。 = 5 * GB3 按F8往下執(zhí)行一步后再查看觀察窗中的容,可發(fā)現(xiàn)*p和a的容都
47、已發(fā)生變化,從而可理解通過改變指針變量p所指向的存單元中的容可以間接地改變a中的容。 = 6 * GB3 再按F8往下執(zhí)行一步,可發(fā)現(xiàn)p的值己發(fā)生變化,它與&b的值一致,說明p已經(jīng)是指向變量b的指針變量,它不再是指向a,*p的容也已變?yōu)閎的容,從而可理解指針變量的指向是隨時可以改變的。 = 7 * GB3 再按F8往下執(zhí)行一步,可發(fā)現(xiàn),b的值和*p的值都已發(fā)生變化,即改變b的容就等于改變指針變量p所指向的存單元中的容。2單步運(yùn)行以下程序,觀察&a0,&ai)和P的變化,然后答復(fù)以下問題: = 1 * GB3 程序的功能是什么 = 2 * GB3 在開場進(jìn)入循環(huán)體之前,p指向誰 = 3 * GB
48、3 循環(huán)每增加一次,p的值(地址)增加多少它指向誰 = 4 * GB3 退出循環(huán)后,p指向誰 = 5 * GB3 你是否初步掌握了通過指針變搔引用數(shù)組元素的方法* 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.先分析以下程序的運(yùn)行結(jié)果,然后上機(jī)驗(yàn)證,并通過此例掌握通過指針變量引用數(shù)組元素的各種方法。 * 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); 【自編程序上機(jī)】1.編寫函數(shù)實(shí)現(xiàn)計(jì)算一元二次方程的兩個實(shí)根,然后編寫主函數(shù)調(diào)用此函數(shù)。要求:在同一個函數(shù)求出方程的兩個實(shí)根,此函數(shù)不準(zhǔn)使用全局變量進(jìn)展數(shù)據(jù)傳遞,也不能使用return語句,只能通過指針進(jìn)展數(shù)據(jù)傳遞。2編寫函數(shù),將n個數(shù)按原來的順序的逆序排列要求用指針實(shí)現(xiàn),
50、然后編寫主函數(shù)完成: = 1 * GB3 輸入10個數(shù); = 2 * GB3 調(diào)用此函數(shù)進(jìn)展重排; = 3 * GB3 輸出重排后的結(jié)果。【實(shí)驗(yàn)報(bào)告】實(shí)習(xí)時間: 實(shí)習(xí)地點(diǎn): 實(shí)習(xí)機(jī)號:具體實(shí)驗(yàn)容程序調(diào)試過程實(shí)習(xí)小結(jié)實(shí)驗(yàn)九 構(gòu)造體程序設(shè)計(jì)【實(shí)驗(yàn)?zāi)康摹?掌握構(gòu)造體類型變量與構(gòu)造體數(shù)組的定義和使用。 學(xué)會使用構(gòu)造體指針變量和構(gòu)造體指針數(shù)組。掌握鏈表的概念,初步學(xué)會對鏈表進(jìn)展操作。【上機(jī)實(shí)習(xí)指導(dǎo)】1輸入出10個學(xué)生的*、和成績,求出其中的高分者和低分者。 * 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 分析程序,上機(jī)運(yùn)
52、行程序。 = 2 * GB3 程序中,哪些是對構(gòu)造體變量的成員引用,哪些是整體引用. = 3 * GB3 對于此例來說,用構(gòu)造體變量作為數(shù)據(jù)構(gòu)造有何優(yōu)越性.【自編程序上機(jī)】1有一學(xué)生情況如下表所示。編制一個C程序,用冒泡法對該學(xué)生情況表按成績grade從低到高進(jìn)展排序。具體要求如下: = 1 * GB3 構(gòu)造體類型為struct 構(gòu)造體名 int num; charname8; char se*; intage;intgrade; = 2 * GB3 在程序中,首先輸出排序前的學(xué)生情況,然后輸出排序后的結(jié)果,其格式如上表所示(表的框線不要)。2鏈表根本操作。 具體要求如下: = 1 * GB3
53、 初始時鏈表為空,即鏈表的頭指針為空。 = 2 * GB3 對于上表所示的學(xué)生情況表,依次將每個學(xué)生的情況作為一個結(jié)點(diǎn)插入到單鏈表的鏈頭(即當(dāng)前插入的結(jié)點(diǎn)將成為鏈表的第一個結(jié)點(diǎn))。 = 3 * GB3 所有學(xué)生情況都插入到鏈表中后,從鏈頭開場,依次輸出鏈表中的各結(jié)點(diǎn)值(即每個學(xué)生的情況)。輸出格式如同上表。【實(shí)驗(yàn)報(bào)告】實(shí)習(xí)時間: 實(shí)習(xí)地點(diǎn): 實(shí)習(xí)機(jī)號:具體實(shí)驗(yàn)容程序調(diào)試過程實(shí)習(xí)小結(jié)實(shí)驗(yàn)十 文件程序設(shè)計(jì)【實(shí)驗(yàn)?zāi)康摹?掌握文件與文件指針的概念。2學(xué)會使用文件翻開、文件關(guān)閉、讀與寫文件等根本的文件操作函數(shù)。運(yùn)用文件操作函數(shù)進(jìn)展程序設(shè)計(jì)。【上機(jī)實(shí)習(xí)指導(dǎo)】1以文本方式建立初始數(shù)據(jù)文件,請?jiān)赥C的編輯窗中
54、輸入10個學(xué)生的*、及考試成績,形式如下:LiLi 80HuWei 90LiMing 75數(shù)據(jù)輸入完后,請選用File中的菜單中項(xiàng)Write to 將數(shù)據(jù)存入文件file1.dat 中。記住,你建立的file1.dat是一個不等長記錄的文本文件,即每個學(xué)生的數(shù)據(jù)是不等長的,數(shù)據(jù)間以空格作為分隔。現(xiàn)在,你再瘵編輯窗口中的數(shù)據(jù)修改成等長記錄,*、和成績的長度分別按4、10、3給定,形式如下:1001LiLi 801002HuWei 901003LiMing 75然后將數(shù)據(jù)存入文件file2.dat中,該文件就是一個等長記錄的文本文件,每個學(xué)生的數(shù)據(jù)占18個字符包括換行符。讀入file1.dat中的
55、數(shù)據(jù),找出最高分和最低度分的學(xué)生。* 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();請按以下步驟實(shí)習(xí)和思考: = 1 * GB3 分析程序,上機(jī)運(yùn)行程序并分析運(yùn)行結(jié)果。
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CCASC 6002-2021氯堿工業(yè)綠色設(shè)計(jì)產(chǎn)品評價(jià)氯化石蠟
- T/CAR 10-2022食品速凍裝置隧道式速凍裝置
- r語言考試題及答案
- 廣告設(shè)計(jì)考試題庫及答案
- nginx面試題及答案
- 刁難類面試題及答案
- 大班模型考試題及答案
- 環(huán)保員面試題庫及答案
- 單位中層副職競聘演講稿
- 銀行客戶經(jīng)理試用期工作總結(jié)
- 2022聯(lián)合國電子政務(wù)調(diào)查報(bào)告(中文版)
- 小學(xué)心理健康教育家長會
- 2025屆山西省呂梁市高三第三次模擬考試英語試題(原卷版+解析版)
- 8.3 法治社會 課件高中政治統(tǒng)編版必修三政治與法治
- 《醫(yī)藥企業(yè)防范商業(yè)賄賂合規(guī)指引》配套典型案例
- 新一代大型機(jī)場行李處理系統(tǒng)關(guān)鍵技術(shù)與應(yīng)用
- 鐵路電務(wù)設(shè)備培訓(xùn)課件
- 礦產(chǎn)資源勘查技術(shù)在頁巖氣勘探的應(yīng)用考核試卷
- 工業(yè)設(shè)計(jì)接單合同協(xié)議
- 營房維修考試題及答案
- 足浴店面轉(zhuǎn)讓協(xié)議書
評論
0/150
提交評論