



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)課時(shí)安排實(shí)驗(yàn)內(nèi)容課時(shí)說明實(shí)驗(yàn)一C語(yǔ)言運(yùn)行環(huán)境2必做實(shí)驗(yàn)二c語(yǔ)言基礎(chǔ)知識(shí)2必做實(shí)驗(yàn)三順序程序設(shè)計(jì)2必做實(shí)驗(yàn)四if-else語(yǔ)句2必做實(shí)驗(yàn)五switch語(yǔ)句2必做實(shí)驗(yàn)六while語(yǔ)句、do-while語(yǔ)句2必做實(shí)驗(yàn)七for語(yǔ)句2必做實(shí)驗(yàn)八函數(shù)12必做實(shí)驗(yàn)九函數(shù)22必做實(shí)驗(yàn)十一維數(shù)組2必做實(shí)驗(yàn)十一二維數(shù)組2必做實(shí)驗(yàn)十二字符數(shù)組與字符串處理函數(shù)2必做實(shí)驗(yàn)十三預(yù)處理2必做實(shí)驗(yàn)十四指針12必做實(shí)驗(yàn)十五指針22必做實(shí)驗(yàn)十六結(jié)構(gòu)體和共同體2必做實(shí)驗(yàn)十七綜合實(shí)驗(yàn)2必做合計(jì)32實(shí)驗(yàn)一C程序的運(yùn)行環(huán)境一、 實(shí)驗(yàn)?zāi)康?了解和使用VisualC++6.0(簡(jiǎn)稱VC)集成開發(fā)環(huán)境:.熟悉VC的控制臺(tái)應(yīng)用程序的開發(fā)、調(diào)試步驟和方法;3、掌握C程序的編輯、編譯、連接和運(yùn)行過程;4、了解工程、文件、工作區(qū)等基本概念;5、能理解常見錯(cuò)誤的提示信息,并根據(jù)提示進(jìn)行改錯(cuò)。二、相關(guān)知識(shí)點(diǎn)VC集成開發(fā)環(huán)境;C語(yǔ)言的編輯、編譯、連接和運(yùn)行過程;C語(yǔ)言的調(diào)試方法和工具:C語(yǔ)言的基本組成特點(diǎn)。術(shù)語(yǔ):“控制臺(tái)應(yīng)用程序”是一個(gè)在DOS窗口中運(yùn)行的基于字符的程序。由于這種模式的應(yīng)用程序比Windows程序簡(jiǎn)單,我們先選擇利用VisualC++來建立這樣一個(gè)應(yīng)用,這樣使得我們可以將精力先投入到學(xué)習(xí)使用C或者C++編程語(yǔ)言,而不需要把過多的精力投入到學(xué)習(xí)復(fù)雜的Windows編程中去。三、實(shí)驗(yàn)內(nèi)容一(驗(yàn)證及程序分析)Eg1-1:使用VisualC++6.0集成環(huán)境來編輯、編譯并運(yùn)行下面的示例程序:#include<stdio.h>voidmain()(printfC'ThisismyfirstCprogram!\n");)【說明:】本題要求完成一個(gè)字符串的輸出,并且是“依葫蘆畫瓢”哦!實(shí)驗(yàn)步驟:(1)啟動(dòng)VisualC++開發(fā)環(huán)境(2)創(chuàng)建一個(gè)工程a.單擊File菜單中的New選項(xiàng),顯示出新建對(duì)話框b.選擇Win32consoleApplication。c.選擇項(xiàng)目所在路徑及輸入項(xiàng)目的名稱d.在建立一個(gè)什么類型的控制臺(tái)應(yīng)用程序中,選中“一個(gè)空工程”,按“完成”按鈕,至此,已經(jīng)建立好工程相關(guān)的文件。(3)建立C++源程序文件a.選菜單命令ProjectlAddtoProjectINew,彈出New對(duì)話框b.在New對(duì)話框的Files選項(xiàng)卡中選擇C++SourceFile,并填入文件名稱,單擊OK按鈕,完成新建C++源程序文件(4)編輯C++源程序文件a.在文件編輯窗口中輸入代碼b.完成后,選擇菜單FilelSave保存這個(gè)文件(5)編譯、鏈接并運(yùn)行可執(zhí)行程序a.選擇菜單命令Compile,建立H標(biāo)代碼文件;如果程序有語(yǔ)法錯(cuò)誤,則屏幕下方的狀態(tài)窗口中會(huì)顯示錯(cuò)誤信息,根據(jù)這些錯(cuò)誤信息對(duì)源程序進(jìn)行修改后,重新選擇菜單命令Compile建立目標(biāo)代碼文件。b.選擇菜單命令Build,建立可執(zhí)行程序如果你正確輸入了源程序,此時(shí)便成功地生成了可執(zhí)行程序.如果程序有鏈接錯(cuò)誤,則屏幕下方的狀態(tài)窗口中會(huì)顯示錯(cuò)誤信息,根據(jù)這些錯(cuò)誤信息對(duì)源程序進(jìn)行修改后,重新選擇菜單命令Build建立可執(zhí)行程序。c.選擇菜單命令Run,運(yùn)行程序,觀察屏幕顯示內(nèi)容?!菊f明】有時(shí)也可直接選擇菜單命令Run,將“編譯、鏈接并運(yùn)行”幾個(gè)步驟合為一起。(6)關(guān)閉工作空間選擇菜單命令FilelColseWorkspace關(guān)閉工作空間。四、上機(jī)內(nèi)容:.輸入并運(yùn)行程序,寫出運(yùn)行結(jié)果。main()inta,b,sum;a=123;b=456;sum=a+b;printf(l*sumis%d\n",,sum);.輸入并運(yùn)行程序,寫出運(yùn)行結(jié)果。main()inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf(**max=%d,\c);)intmax(intxjnty)(intz;if(x>y)z=x;elsez=y;return(z);).編程實(shí)現(xiàn)在屏幕上顯示如下三行文字Hello,world!WolcometotheClanguageworld!Everyonehasbeenwaitingfo匚實(shí)驗(yàn)二C語(yǔ)言的基礎(chǔ)知識(shí)【目的與要求】.掌握C語(yǔ)言數(shù)據(jù)類型,熟悉如何定義一個(gè)整型、字符型、實(shí)型變量,以及對(duì)它們賦值的方法,了解以上類型數(shù)據(jù)輸出時(shí)所用的格式轉(zhuǎn)換符。.學(xué)會(huì)使用C的有關(guān)算術(shù)運(yùn)算符,以及包含這些運(yùn)算符的表達(dá)式,特別是自加(++)和自減(-)運(yùn)算符的使用。.進(jìn)一步熟悉C程序的編輯、編譯、連接和運(yùn)行的過程?!旧蠙C(jī)內(nèi)容】【一般示例】【例1】輸入并運(yùn)行下程序,寫出運(yùn)行結(jié)果。mian(){chard,c2;c1=97;c2=98;printf(u%c%cn,c1,c2);)在此基礎(chǔ)上1)加一個(gè)printf語(yǔ)句,并運(yùn)行之。printf("%d,%d,,,c1,c2);2)再將第二行改為:intd,c2;再使之運(yùn)行。3)再將第三行改為:c1=300;c2=400;再使之運(yùn)行,分析其運(yùn)行結(jié)果。在該程序中,說明了字符型數(shù)據(jù)在特定情況下可作為整型數(shù)據(jù)處理,整型數(shù)據(jù)有時(shí)也可以作為字符型數(shù)據(jù)處理?!纠?】分析卜程序,寫出運(yùn)行結(jié)果,再輸入計(jì)算機(jī)運(yùn)行,將得到的結(jié)果與你分析得到的結(jié)果比較對(duì)照。main()(chard='a',c2='b',c3='c',c4='\101;c5='\116';printf(ua%cb%c\tabc\n",c1,c2,c3);printf(u\t\b%c%c",c4,c5);在該程序中,主要考查對(duì)轉(zhuǎn)義字符的掌握情況?!纠?】分析下程序,寫出運(yùn)行結(jié)果,再輸入計(jì)算機(jī)運(yùn)行,將得到的結(jié)果與你分析得到的結(jié)果比較對(duì)照。main(){inti,j,m,n;i=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d",i,j,m,n);)分別作以卜改動(dòng)之后,先分析再運(yùn)行:1)將第四行改為:m=i++;n=++j;2)程序改為:main(){inti.j;i=8;j=10;printf("%d,%d",i++,j++);}3)在2)的基礎(chǔ)上,將printf語(yǔ)句改為:printf("%d,%d”,++i,++j);4)再將printf語(yǔ)句改為:printf(u%d,%d,%d,%d",i,j,i++,j++);5)程序改為:main(){inti,j,m=O,n=O;i=8;j=10;printf("i=%d,j=%d,m=%d,n=%d",i,j,m,n);)此程序主要考查自加、自減運(yùn)算符以及復(fù)合運(yùn)算符的用法?!咀鳂I(yè)】1.要講“China”譯成密碼,密碼規(guī)律是:用原來的字母后面第5個(gè)字母代替原來的字母。例如,字母“A”后面第5個(gè)是“F’,用“F代替“A”。因此,“China”應(yīng)譯為“Hmnsf”。請(qǐng)編一程序,用賦初值的方法使c1、c2、c3、c4、c5五個(gè)變量的值分別為C、‘h‘、’i'、’n'、'a',經(jīng)過運(yùn)算,使其分別變?yōu)椤瓾'、‘m'、’n'、’s'、’f',并輸出。實(shí)驗(yàn)三順序結(jié)構(gòu)程序設(shè)計(jì)實(shí)驗(yàn)三順序結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?、熟練掌握C語(yǔ)言中賦值語(yǔ)句的使用方法:2,掌握格式輸入輸出scanf()函數(shù)、printfO函數(shù)的調(diào)用語(yǔ)法:整型、實(shí)型、字符型數(shù)據(jù)的輸入輸出格式.3,掌握字符輸入輸出由數(shù)getcharO、putcharO函數(shù)的調(diào)用語(yǔ)法.二、相關(guān)知識(shí)點(diǎn)scanR)函數(shù)和print!。函數(shù)的意義及用法:getchart)函數(shù)和putchar()函數(shù)的J&義及用法:gets()函數(shù)和puts。函數(shù)的意義及用法:I三、實(shí)驗(yàn)內(nèi)容一(驗(yàn)證及程序分析)Eg3-1:從鍵盤輸入兩個(gè)o到127的整數(shù),求兩數(shù)的平方差并輸出其值以及這兩個(gè)整數(shù)的ASCH碼對(duì)應(yīng)的字符.(1)算法分析:標(biāo)準(zhǔn)ASCII儲(chǔ)值范圍是。到127,所以在這范圍內(nèi)的數(shù)可以以字符形式輸出,實(shí)現(xiàn)方法是用格式輸出函數(shù)并用格式符c控制輸出.(2)源程序://include<stdio.h>voidmain()iiitx,y,sub;scanf("<?od°od",&x.&y); /*變量前一定要加取地址符&*/sub=x*x-y*y;prin 0od\n'\x,y,sub);}(3)在VC++編輯環(huán)境卜編輯源程序.(4)編譯自到程序沒有錯(cuò)誤。(5)從鍵盤輸入10050/,運(yùn)行結(jié)果如何?(6)輸出結(jié)果:Eg3-2:輸入程序//include<stdio.h>voidmain()■(inta.b;floatd,e;charcl.c2;doublef,g;longm.n;unsignedintp.q;a=61; b=62;cl-a*; c2=*b*;d=3.56; e=-6.87 ;f=3157.890121;g=0.123456789:m=50000; n=-60000;p=32768; q=40000;printf(',a=°od.b=°od\ncl=°oc,c2=0oc\nd=°<6.2f,e=°06.2f\iia.b.cLc2,d,e);printfC,^0ol5.6f.g=°ol5.12f\nm=°okLn=°old\np=°ou.q=°ou\n"f.g.mm.p.q);}(1)運(yùn)行程序并分析結(jié)果。(2)在此基礎(chǔ)上,修改程序的第1075行(即變最賦值部分)為:a=61; b=62;cl=a; c2=b;0=3157.890121;g=0.123456789d=f; e=g;p=a=m=50000;q=b=n=-60000;運(yùn)行程序,分析結(jié)果。(3)改用scanf函數(shù)輸入數(shù)據(jù)而不用賦值語(yǔ)句,scanf函數(shù)如下:scanflr°od,ki,93,%c,%f?忒%lf.9&£/ld.° ou”,輸入的數(shù)據(jù)如下:61.62.a,b,3.56,-6.87,3157.890121,0.123456789,50000.-6000032768.40000(0^)(說明:If和Id格式符分別用「輸入double型和long型數(shù)據(jù))分析運(yùn)行結(jié)果。(4)將printf語(yǔ)句改為:printfC'a=°od.b=°od\ncl=°oc,c2=oac\nd=°ol5.6f.e=°ol5.12f\n'\a.b.cl,c2.d.e);printl(["f=^af.g=°of\nm=°od.n=°od\np=°od.q=?od\n",f.g.m.n.p.q);運(yùn)行程序,分析結(jié)果。(5)將p、q改用%o格式符輸出。(6)將scanf函數(shù)中的。olf和。。Id改為。of和。0d,運(yùn)行程序分析結(jié)果。對(duì)照程序和運(yùn)行結(jié)果思考:(7)將一個(gè)負(fù)整數(shù)賦給一個(gè)無符號(hào)的變最,會(huì)得到什么結(jié)果.(8)將一個(gè)大于32767的長(zhǎng)整數(shù)賦給整型變量,會(huì)得到什么結(jié)果。(9)將一個(gè)長(zhǎng)整數(shù)賦給無符號(hào)變睛,會(huì)得什么結(jié)果(分別考慮該長(zhǎng)整數(shù)的值大r?或等于65535以及小于65535的情況)。四、實(shí)驗(yàn)內(nèi)容二(綜合及設(shè)計(jì)類)Eg3"3:調(diào)試訓(xùn)練——改正下列程序中的錯(cuò)誤,輸入?yún)?shù)abc,求一元二次方程ax2+bx+c=0的根。//include<std沁.h>//include<math.h>voidmaiii()|doublea.b.c.d;prilltf(nEntera.b,c:M);scanf(,,oolPblfoolf,,&a,&b,&c);d=b*b-4*a*c;〃斷點(diǎn)1if(a==0)(if(b=0){if(c==0)printfC參數(shù)都為零,方程無意義!\n");elseprintfCa和b為0,c不為0,方程不成立!\n");)elseprintiX"x=%0.21\n",-c/b);}elseif(d>=0)〃斷點(diǎn)2printf(["xl=%0.2f\n",(-b+sqrt(d)y(2*a));printf("x2=%0.2i\n",(-b-sqrt(d))/(2*a));}else〃斷點(diǎn)3:printf(,,xl=%0.2fi-%0.2fi\n",-b/(2*a),sqrt(dy(2*a));printfC'x2=oo0.2^o0.2fi\n".-b/(2*a),sqrt(d)/(2*a));說明:斷點(diǎn)的作用是使程序執(zhí)行到斷點(diǎn)處暫停,讓用戶可以觀察當(dāng)前變量或表達(dá)式的值。設(shè)置斷點(diǎn)時(shí),先將光標(biāo)定位到要設(shè)置斷點(diǎn)的位置,然后單擊編譯微型T-具的"?"按鈕,斷點(diǎn)即設(shè)置完畢。如果要取消設(shè)置的斷點(diǎn),只需要將光標(biāo)移到要取消的斷點(diǎn)處,單擊“色”按鈕,該斷點(diǎn)即取消.(1)打開源程序,對(duì)程序進(jìn)行編譯和連接,沒有出現(xiàn)錯(cuò)誤信息。(2)調(diào)試開始,設(shè)置三個(gè)斷點(diǎn),具體位置見源程序的注釋.=1(3)單擊G。按鈕,輸入a,b,c的值(2.09.03.0)后,程序執(zhí)行到第一個(gè)斷點(diǎn)處,在觀察窗口輸入變最名a,b,c,直看變最a,b,c的值。此時(shí),這些變最的值與輸入的值一致.(4)繼續(xù)單.擊Go-'按鈕,程序運(yùn)行到第二個(gè)斷點(diǎn)處,觀察到變髓d的值為57,說明方程有實(shí)根。(5)再次單擊G?!?按鈕,程序運(yùn)行到最后一個(gè)斷點(diǎn)處,運(yùn)行窗口顯示xl=-0.36,X2=4.14,符合題目要求.(6)單擊StopDebugging"按鈕,程序調(diào)試結(jié)束。Eg34:輸入一個(gè)華氏溫度,要求輸出攝氏溫度。公式為c=5/9*(f-32)。提示:注意c=5/9*(f-32)與c=5.0/9.0*(f-32)的區(qū)別作業(yè):.輸入一個(gè)非負(fù)實(shí)數(shù),計(jì)算以該實(shí)數(shù)為半徑的圓周長(zhǎng)及面積。.輸入兩個(gè)整型變量a,b的值,輸出a+b,a-b,a*b,a/b,float)a/b,a%b的結(jié)果,要求連同算式一起輸出,每個(gè)算式占一行。實(shí)驗(yàn)四分支結(jié)構(gòu) if…else一、【實(shí)驗(yàn)題目】分支結(jié)構(gòu) if-else二、【實(shí)驗(yàn)類型】基礎(chǔ)型實(shí)驗(yàn)三、【實(shí)驗(yàn)要求】.實(shí)驗(yàn)前必須做好實(shí)驗(yàn)準(zhǔn)備,弄清實(shí)驗(yàn)內(nèi)容和實(shí)驗(yàn)?zāi)康模?實(shí)驗(yàn)結(jié)束后,把程序運(yùn)行結(jié)果寫在程序旁邊相應(yīng)位置,并回答問題;.將完成后的實(shí)驗(yàn)報(bào)告交給任課教師。四、【實(shí)驗(yàn)?zāi)康摹?理解分支結(jié)構(gòu)中用到的邏輯表達(dá)式;.學(xué)會(huì)畫程序流程圖;.掌握if…else語(yǔ)句及其嵌套的用法;.理解程序設(shè)計(jì)的基本思想。五、【實(shí)驗(yàn)內(nèi)容】(一)調(diào)試運(yùn)行下面的程序,理解關(guān)系表達(dá)式和邏輯表達(dá)式的計(jì)算:#include<stdio.h>voidmain()printfC'TRUE=%d\n,,13>=2);printf("FALSE=%d\n",3==2);printf("4>3>2:%d\n",4>3>2);printf("4>3&&3>2:%d\n",4>3&&3>2);}.關(guān)系表達(dá)式或邏輯表達(dá)式的值為真(1)或假(0),但注意用非0值可表示真:.區(qū)別表達(dá)式4>3>2與4>3&&3>2;.關(guān)系運(yùn)算符的優(yōu)先級(jí)別要高于邏輯運(yùn)算符,邏輯運(yùn)算符的優(yōu)先級(jí)的高低順序?yàn)椤?!”、?&”、“II”。(二)下面的程序是輸入三個(gè)整數(shù),輸出其最大值。理解程序求解的思路,并用NS圖(PAD圖)表示該算法思路。#include<stdio.h>voidmain()(inta,b,c,max;scanf(u%d%d%d^^,&a,&b,&c);max=a;if(b>max)max=b;if(c>max)max=c;printf("MAX=%d\n",max);}.注意輸入的三個(gè)數(shù)之間請(qǐng)用空格分開,若要在輸入的三個(gè)數(shù)之間用逗號(hào)分隔,應(yīng)該對(duì)程序如何修改;.若要求輸出最小值,應(yīng)該如何修改上述程序(三)有以下分段函數(shù),要求輸入x值,輸出相應(yīng)的y值。x (x<2)/- 8x^6 (2£x<2D)10X-20 (X>20)#include<stdio.h>voidmain()(floatx,y;printf("輸入x:H);scanf(H%r,&x);if(x<2)y=x;if(x>=20)y=10*x-20;elsey=8*x+6;printf(,'x=%-6.2fy=%-6.2f\n',,x,y);}.輸入不同的值進(jìn)行測(cè)試,檢查是否滿足題設(shè)要求,如果不滿足,請(qǐng)找出出錯(cuò)的地方,改正后再上機(jī)執(zhí)行;.請(qǐng)注意輸出格式的控制;實(shí)驗(yàn)五分支結(jié)構(gòu) switch---case一、【實(shí)驗(yàn)題目】分支結(jié)構(gòu) switch.…case二、【實(shí)驗(yàn)類型】基礎(chǔ)型實(shí)驗(yàn)三、【實(shí)驗(yàn)要求】.實(shí)驗(yàn)前必須做好實(shí)驗(yàn)準(zhǔn)備,弄清實(shí)驗(yàn)內(nèi)容和實(shí)驗(yàn)?zāi)康模?實(shí)驗(yàn)結(jié)束后,把程序運(yùn)行結(jié)果寫在程序旁邊相應(yīng)位置,并回答問題;.將完成后的實(shí)驗(yàn)報(bào)告交給任課教師。四、【實(shí)驗(yàn)?zāi)康摹?理解分支結(jié)構(gòu)中用到的邏輯表達(dá)式;.學(xué)會(huì)畫程序流程圖;.掌握switch.…case語(yǔ)句的使用;.了解break語(yǔ)句在switch.■,?case語(yǔ)句中的作用;.理解程序設(shè)計(jì)的基本思想。五、【實(shí)驗(yàn)內(nèi)容】(一)輸入一個(gè)不超過5位的整數(shù),求整數(shù)的位數(shù)、每一位上的數(shù)字,并按逆序輸出各位數(shù)字。#include<stdio.h>voidmain()(intx,a,b,c,d,n=1;printf(“請(qǐng)輸入一個(gè)不超過5位的整數(shù):”);scanf(l'%d",&x);a=x/10000;x=x%10000;if(d!=O)n++;if(c!=O)n++;if(b!=O)n++;if(a!=O)n++;printf("%d位數(shù):M,n);switch(n){printf(M%dM,e);break;printf(tt%d,%dM,e,d);break;printf(w%d,%d,%dM,e,d,c);break;printf(M%d,%d,%d,%d,,,e,d,c,b);break;printf(u%d,%d,%d,%d,%dn,e,d,c,b,a);break;))I.在程序中空白的地方填上適當(dāng)?shù)恼Z(yǔ)句使程序完整,并上機(jī)調(diào)試執(zhí)行,看看執(zhí)行結(jié)果是否滿足題目的要求;2.想一想:程序中哪些語(yǔ)句是相似的、重復(fù)的?如果本算法的目的是給人看,你會(huì)用什么更簡(jiǎn)潔的自然語(yǔ)言語(yǔ)句描述它?(二)計(jì)算獎(jiǎng)金:當(dāng)企業(yè)利潤(rùn)P等于或低于0.5萬元時(shí),獎(jiǎng)金為利潤(rùn)的1%;當(dāng)0.5VPW1萬元時(shí),超過0.5萬元部分的獎(jiǎng)金為利潤(rùn)的1.5%,0.5萬元以下仍按1%計(jì)算;當(dāng)1VPW2萬元時(shí),1萬元以下部分仍按前面的方法計(jì)算,超過1萬元的部分其獎(jiǎng)金按利潤(rùn)的2%計(jì)算;當(dāng)2Vp<5萬元時(shí),2萬元以下部分仍按前面的方法計(jì)算,超過2萬元部分的獎(jiǎng)金按利潤(rùn)的2.5%計(jì)算;當(dāng)5VPW1O萬元時(shí),超過5萬元部分的獎(jiǎng)金利潤(rùn)的3.0%計(jì)算;當(dāng)P>10萬元,5萬元以下部分仍按前面的方法計(jì)算,超過10萬元部分按3.5%計(jì)算。其中P從鍵盤輸入,計(jì)算并輸出相應(yīng)的獎(jiǎng)金數(shù)W。#include<stdio.h>voidmain()doublep,w=0.0;intk;printf(”請(qǐng)輸入企業(yè)利潤(rùn)p:”);scanf(n%ir,&p);if(k>10)k=10;elseif(k>0.5)k=(int)p;switch(k){case9:w=w+0.035*(p-10.0);p=10.0;case8:case7:case6:case5:w=w+0.03*(p-5.0);p=5.0;case4:case3:case2:w=w+0.025*(p-2.0);p=2.0;case1:w=w+0.02*(p-1.0);p=1.0;case0:w=w+0.015*(p-0.5);p=0.5;default:w=w+0.01*p;)printf("獎(jiǎng)金數(shù)w=%f\n",w);.注意p在輸入時(shí)格式的控制:.結(jié)合switch結(jié)構(gòu)的執(zhí)行特點(diǎn),分析程序中if..else結(jié)構(gòu)對(duì)k做預(yù)處理的作用;.將double類型轉(zhuǎn)換為int類型時(shí)的強(qiáng)制類型轉(zhuǎn)換方法;.注意case標(biāo)號(hào)出現(xiàn)的順序;.輸入不同的測(cè)試數(shù)據(jù),分析程序的執(zhí)行流程;7.試用if..else結(jié)構(gòu)實(shí)現(xiàn)本題(三)編程:等級(jí)轉(zhuǎn)換??荚嚱Y(jié)束后,老師要將同學(xué)的成績(jī)轉(zhuǎn)換成五等制,轉(zhuǎn)換原則是:90分以上優(yōu)秀,89~80分良好,79~7。分中等,69~6。分合格,60分以下不合格。你自告奮勇來做老師的小幫手,現(xiàn)在就動(dòng)手吧!要求:先設(shè)想一F.對(duì)于本題是用if..else結(jié)構(gòu)實(shí)現(xiàn)好,還是用switch結(jié)構(gòu)實(shí)現(xiàn)好?選擇一種你認(rèn)為好的結(jié)構(gòu)實(shí)現(xiàn)本題。實(shí)驗(yàn)六條件型循環(huán)結(jié)構(gòu)實(shí)驗(yàn)?zāi)康?理解循環(huán)結(jié)構(gòu)的概念.掌握對(duì)while、dowhile語(yǔ)句的使用.掌握while與dowhile語(yǔ)句之間的異同點(diǎn)二.預(yù)習(xí)知識(shí)while與dowhile語(yǔ)句構(gòu)成的循環(huán)While與dowhile語(yǔ)句構(gòu)成的循環(huán)的比較應(yīng)用while與dowhile語(yǔ)句解決一些實(shí)際應(yīng)用問題三.改正程序錯(cuò)誤while循環(huán)n=5;while(n);(m++;printf("%d”,m);};dowhile循環(huán)n=5;do;(m++;printf("%d”,m);}while(n)四.實(shí)驗(yàn)內(nèi)容編程序并上機(jī)調(diào)試運(yùn)行。(1)編程實(shí)現(xiàn)以下功能:輸出兩位數(shù)中個(gè)位和十位的乘積大于個(gè)位和十位的和的所有整數(shù)。分析及算法從10開始取數(shù)a把兩位數(shù)的十位賦給變量r。b把兩位數(shù)的個(gè)位賦給變量q。C進(jìn)行是否滿足條件的判斷d若條件滿足則輸出該數(shù)并統(tǒng)計(jì)滿足條件的數(shù)的個(gè)數(shù),其中個(gè)數(shù)統(tǒng)計(jì)用于每行輸出個(gè)數(shù)的控制,當(dāng)每行輸出個(gè)數(shù)達(dá)到5個(gè)時(shí)就換行。e當(dāng)完成對(duì)一個(gè)數(shù)的判斷和執(zhí)行后,繼續(xù)下一個(gè)數(shù)的判斷,回到步驟b。依次類推,直到把所有的兩位數(shù)判斷完。其中用到的主要算法如卜.:計(jì)算個(gè)位可以通過該數(shù)除以10取余的方法獲得。計(jì)算十位可以通過該數(shù)除以10的商的方法獲得。換行的實(shí)現(xiàn)方法為:用輸出的數(shù)的個(gè)數(shù)是否能被5整除來判斷是否進(jìn)行換行,”1能被5整除時(shí)就換行,否則就不換行。要求:方法1:用while語(yǔ)句實(shí)現(xiàn)方法2:用dowhile語(yǔ)句實(shí)現(xiàn)(2)編寫程序找出1-99之間的全部同構(gòu)數(shù)。同構(gòu)數(shù)的概念:如果1個(gè)數(shù)出現(xiàn)在其平方的右邊,則該數(shù)為同構(gòu)數(shù)。例如5的平方是25,而5出現(xiàn)在25的右邊;25的平方是625.而25出現(xiàn)在625的右邊,因此5和25都是同構(gòu)數(shù)。分析.位數(shù)平方的特點(diǎn)是最大為81,即只可能是1個(gè)1位數(shù)或者是1個(gè)2位數(shù)。兩位數(shù)的平方的特點(diǎn)是只可能是一個(gè)3位數(shù)或者4位數(shù)。.算法①依次取1-99之間的數(shù).②被取數(shù)若是1位數(shù),則取其平方的個(gè)位與其本身比較,若被取數(shù)滿足條件在輸出該數(shù)(取低兩位可用求余方法得到)。③被取數(shù)若是兩位數(shù),則取其平方的低兩位與其本身比較,若被取數(shù)滿足條件則輸出該數(shù)(取低兩位可用求余的方法獲得)。(3)輸入?行字符,分別統(tǒng)計(jì)出其中的英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。(4)猴子吃桃問題。猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè)。第二天早上乂將剩下的桃子蛇掠一半,又多吃?個(gè)。以后每天早上都吃了前?天剩下的?半零?個(gè)。到第10天早上想再吃時(shí),見只剩一個(gè)桃子了。求第一天共摘了多少桃子.在得到正確結(jié)果后,修改題目,改為猴子每天吃了前一天剩下的?半后,再吃兩個(gè)。請(qǐng)修改程序,并運(yùn)行,檢查結(jié)果是否正確.五.實(shí)驗(yàn)要求及總結(jié).結(jié)合上課內(nèi)容,對(duì)I:述程序先閱讀,然后上機(jī)并調(diào)試程序,并對(duì)實(shí)驗(yàn)結(jié)果寫出你自己的分析結(jié)論。.整理上機(jī)步驟,總結(jié)經(jīng)驗(yàn)和體會(huì)。.完成實(shí)驗(yàn)報(bào)告和上交程序。實(shí)驗(yàn)七記數(shù)型循環(huán)結(jié)構(gòu)實(shí)驗(yàn)?zāi)康?掌握對(duì)for語(yǔ)句及其特殊形式的使用.掌握for語(yǔ)句與while語(yǔ)句之間的轉(zhuǎn)換.掌握循環(huán)的嵌套.學(xué)會(huì)調(diào)試程序二.預(yù)習(xí)知識(shí)for語(yǔ)句構(gòu)成的循環(huán)及其特殊形式for與while語(yǔ)句之間的轉(zhuǎn)換循環(huán)的嵌套的用法三.改正程序錯(cuò)誤(1)for循環(huán)for(n=5;;n-);{m++;printf(**%dM,m);四.實(shí)驗(yàn)內(nèi)容編程序并上機(jī)調(diào)試運(yùn)行。(1)打印“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)3位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如153=13+53+33,所以153是“水仙花數(shù)”。算法分析:這個(gè)數(shù)n應(yīng)該滿足KXKnTOOO,設(shè)其百位權(quán)為i,十位權(quán)為j,個(gè)位權(quán)為k,則i,j>k應(yīng)該滿足公式(i*100+j*10+k==i*i*i+j*j*j+k*k*k)?這樣問題就轉(zhuǎn)化為尋找滿足條件的i,j,k。i=n/100(百位)j=n/10-i*10(十位)k=n%10(個(gè)位)(2)有人說,任意一個(gè)兩位數(shù)乘以167加上2500所得到的值,其低兩位數(shù)乘以3后所得到的值的低兩位數(shù)正好等于該兩位數(shù),例如,35*167+2500=8345,45*3=135,135的低兩位數(shù)正好是35。編寫程序驗(yàn)證此結(jié)論。算法分析:所有的兩位數(shù)進(jìn)行驗(yàn)算,若所有的式子都成立,則結(jié)論正確,否則結(jié)論錯(cuò)誤。(3)編程輸出以下圖形,運(yùn)行情況:pleaseinputanum:3(Enter)********pleaseinputanum:5(Enter)********(4)輸出100—1000之間的所有素?cái)?shù),打印時(shí)每行輸出10個(gè)數(shù)(5)木馬板髡三十三,百個(gè)腿腿地卜翻。編程求解:木馬和板凳各有多少條?(6)今有一樓梯(少于300階),每步跨2階,最后余1階:每步跨3階,最后余2階;每步跨5階,最后余4階;每步跨6階,最后余5階;每步跨7階,最后正好到達(dá)樓頂。編程計(jì)算樓梯的總階數(shù)。五.實(shí)驗(yàn)要求及總結(jié).結(jié)合上課內(nèi)容,對(duì)上述程序先閱讀,然后上機(jī)并調(diào)試程序,并對(duì)實(shí)驗(yàn)結(jié)果寫出你自己的分析結(jié)論。.整理上機(jī)步驟,總結(jié)經(jīng)驗(yàn)和體會(huì)。.完成實(shí)驗(yàn)報(bào)告和上交程序。實(shí)驗(yàn)八函數(shù)1實(shí)驗(yàn)七函數(shù)1一、實(shí)驗(yàn)?zāi)康?、掌握函數(shù)的定義方法:2、掌握函數(shù)的調(diào)用及函數(shù)聲明:3,掌握函數(shù)實(shí)參與形參的對(duì)應(yīng)關(guān)系及“值傳遞”的方式;4、掌握函數(shù)實(shí)參與形參的對(duì)應(yīng)關(guān)系及“地址傳遞”的方式;二、相關(guān)知識(shí)點(diǎn)(比較詳細(xì))函數(shù)定義的一般形式:函數(shù)的參數(shù)(形參、實(shí)參);函數(shù)的返回值:函數(shù)的調(diào)用(值傳遞,地址傳遞):三、實(shí)驗(yàn)內(nèi)容一(驗(yàn)證及程序分析)Eg7-1:判別一個(gè)整數(shù)數(shù)組中各元素的值,若大于o則輸出該值,若小于等丁o則輸出o值。(知識(shí)點(diǎn):數(shù)組元素作參數(shù),值傳遞)(1)算法分析:本程序中首先定義一個(gè)無返回值函數(shù)cmp,并說明其形參v為整型變吊:.在函數(shù)體中根據(jù)v值輸出相應(yīng)的結(jié)果。在main函數(shù)中用一個(gè)for語(yǔ)句輸入數(shù)組各元素,每輸入一個(gè)就以該元素作實(shí)參調(diào)用一次cmp函數(shù),即把a(bǔ)[i]的值傳送給形參v,供cmp函數(shù)使用。(2)程序如下:ttinclude<stdio.h>voidcmp(intv){if(v>0)printf(*%d*,v);elseprintf(*%d 0);voidmain(){inta[5],i;printf(*input5niunbers'n");for(i=0;i<5;i++){scanf("%d"?&a「i]):/*每輸入一個(gè)數(shù),就對(duì)它進(jìn)行與零的比較*/cmp(a[i]);))(3)在VC++編輯環(huán)境下輸入源程序。(4)編譯直到程序無錯(cuò)誤。(5)運(yùn)行,輸入:input5numbers(6)查看運(yùn)行結(jié)果.Eg7-2:輸入io個(gè)學(xué)生的姓名和學(xué)號(hào),要求按學(xué)號(hào)從小到大順序排序,姓名順序也隨之調(diào)整。(知識(shí)點(diǎn):數(shù)組名作為函數(shù)參數(shù),地址傳遞)(1)克法分析:input函數(shù)完成10個(gè)學(xué)生的數(shù)據(jù)的錄入,sort函數(shù)的作用是選擇法排序。(2)程序如下://include<sld心.h>#include<string.h>//defineN10\oidinput(intnmn[].charname[N][8])/*定義函數(shù)input,完成輸入數(shù)據(jù)的功能*/inti;fbr(i=O;i<N;i+-*-)printf(M\ninputNO.:n);scanR"%d”.&num[iD;printf(Hiiiputname:0);getchar();gets(name[i]);}}voidsort(intnum[],charname[N][8]) /*定義函數(shù)sort,完成排序的功能*/{inti.j.min.templ;chartemp2[8];fbiti=O;i<N-l;i-H-)/*外循環(huán)控制輪次*/{min=i;for(j=i;j<Nj++)if(num[min]>num[j])/*內(nèi)循環(huán)控制本輪中共執(zhí)行的次數(shù)*/mm=i;/*每次進(jìn)行比較,變昂:i用來記錄元素卜標(biāo)的最小值*/templ=numm;/*假設(shè)如果為真,則以下語(yǔ)句完成交換*/strcpy([i]);num[i|=num[min|;strcpy(naine[i]jiame[mm]);num[mm]=templ;strcpy(naine[min]Jemp2);}printf(°\nresult:\nH);fbr(i=0;i<N;i++)printf(,f\n%5d%10slnim[iLname[iD;/*按排好的順序輸出1。個(gè)數(shù)據(jù)*/voidmaiii(){intniun[N]jiumber;charname[N][8];input();/*調(diào)用輸入函數(shù)input*/sort();/*調(diào)用排序函數(shù)sort*/)(3)在VC++編譯環(huán)境下輸入源程序代碼。(4)編譯直到程序沒有錯(cuò)誤。(5)運(yùn)行,輸入:inputNO,:1/inputname:Li/inputNO.:2/inputname:Wang/inputNO,:5/inputname:LiuZinputNO,:8/inputname:Ma/inputNO,:4/inputname:Chen/inputNO,:10/inputname:Zhou/inputNO.:12/inputname:Zhang/inputNO.:6/inputname:Xie/inputNO.:23/inputname:Yuan/inputNO,:34/inputname:Lu/(6)查看運(yùn)行結(jié)果理解驗(yàn)證程序的工作流程,分析其算法,對(duì)照結(jié)果解釋產(chǎn)生該結(jié)果現(xiàn)象的原因。四、實(shí)驗(yàn)內(nèi)容二(綜合及設(shè)計(jì)類)Eg7-3:輸入io個(gè)學(xué)生5門課的成績(jī),分別用函數(shù)求:(1)每個(gè)學(xué)生平均分:(2)每門課的平均分;(3)找出最高的分?jǐn)?shù)所對(duì)應(yīng)的學(xué)生和成績(jī).根據(jù)題目要求設(shè)計(jì)解決問題的算法,畫出其流程框圖,寫出滿足C語(yǔ)言規(guī)范的源程序,在VC++環(huán)境下調(diào)試運(yùn)行,對(duì)照運(yùn)行結(jié)果分析其結(jié)果。實(shí)驗(yàn)九函數(shù)2實(shí)驗(yàn)八函數(shù)2一、實(shí)驗(yàn)?zāi)康?、掌握函數(shù)的嵌套調(diào)用和遞回調(diào)用方法;2、掌握全局變敏和局部變最、動(dòng)態(tài)變量和靜態(tài)變量的概念和使用方法:3、學(xué)習(xí)對(duì)多文件程序的編譯和運(yùn)行。二、相關(guān)知識(shí)點(diǎn)遞歸函數(shù)的嵌套調(diào)用規(guī)則;局部、全局變吊:的作用域和使用時(shí)機(jī);四種存儲(chǔ)屬性AUTO、REGISTER.ENTER'和STATIC變后的生存期和使用時(shí)機(jī):三、實(shí)驗(yàn)內(nèi)容一(驗(yàn)證及程序分析)Eg8-1:Hanoi(漢諾)塔問題(函數(shù)遞歸調(diào)用)這是一個(gè)典型的只有用遞歸方法(而不可能用其他方法)解決的問題。問題是這樣的:有三根針A、B、C。A針上有64個(gè)盤子,盤子大小不等,大的在下,小的在上。要求把這64個(gè)盤子從A針移到C針,在移動(dòng)過程中可以借助B針,每次只允許移動(dòng)一個(gè)盤,且在移動(dòng)過程中在三根針上都保持大盤在下,小盤在上。要求編程序打印出移動(dòng)的步驟。(1)算法思想:將n個(gè)盤子從A針移到C針可以分解為以下三個(gè)步驟:①將A上n-1個(gè)盤借助C針先移到B針上.②把A針上剩下的一個(gè)盤移到C針上。③將n-1個(gè)盤從B針借助于A針移到C針上。(2)源程序:#include<stdio.h>voidmove(chargetone,charputone)(printf(',ooc-->^oc\nn,getone.putone);}voidhanoi(intn.charone,chartwo.charthree){ /*將n個(gè)盤從one借助two,移至I]three*/if(n=l)mo\e(one.three);elsehaiioi(n-l,one.three.t\vo);move(one,three);haiioi(n-l,two.one.three);}voidmain()tintm;printf("inputthenmnberofdiskes:'*);printf("Thesteptomoving%3ddiskes:\n",m);hanoi(m,,A','B','C,);}(3)運(yùn)行結(jié)果:Eg8-2:利用函數(shù)的遞歸調(diào)用實(shí)現(xiàn)某數(shù)的階乘(函數(shù)遞歸調(diào)用)(1)源程序://include<stdio.h>inifac(intn){ //求階乘函數(shù)intf;if(n<0)printfi["n<O,dataerror!");elseif(n==0||n==l)41;elsef=fac(n-l)*n;retum(f);)voidmain(){intn,y;printf("Inputaintegernumber:n);scanfC^od\&n);尸fac(n);printf<M%d!=%15dH,n,y);(2)運(yùn)行結(jié)果:Eg8-3:分析下面程序的運(yùn)行結(jié)果,為什么出現(xiàn)這種結(jié)果?(1)源程序//include<stdio.h>\oidfun(inti,intj);\oidmain(){intij,x,y,n,g;i=2j=3,g=x=5,y=9,n=7;fiin(n,6);prints"g=°od;i=?od;j=%d;\n,,?g,ij);prints"x=°od;y,=ood\n",x,y);fiin(n,6);|voidfim(inti,intj){intx,y,g;g=8;x=7;y=2;printf(,'g=?od;i=oodj=?od;\n',,gj.j);printf("x=,od;y^odXiT'xy);x=8,y=6;}(2)運(yùn)行結(jié)果:(3)結(jié)果分析:Eg8Y:分析下面程序的運(yùn)行結(jié)果,為什么出現(xiàn)這種結(jié)果?(1)源程序://include<Stdio.h>voidincx(void);voidincy(\oid);voidmain(){incx();incy();iiicx();ittcy();iiicx();incy();}voidincx(void){intx=0;printf^,*x=?od\t",++x);voidincy(\oid){staticinty=0;printfT'\ny9討矯”,++y);(2)運(yùn)行結(jié)果:(3)結(jié)果分析:四、實(shí)驗(yàn)內(nèi)容二(綜合及設(shè)計(jì)類)Eg8-5:用遞歸算法處理Fibonicci數(shù)列問題,計(jì)尊Fibonicci數(shù)列的第7項(xiàng)f(7)o遞歸公式:r1 (n=Df(n)=J1 (n=2)Lf(n-l)+f(n-2)(n>2)注意:1、函數(shù)Rn)是一個(gè)有返回值的函數(shù)。2、在主函數(shù)中提供參數(shù)n的值。作業(yè):1.定義一個(gè)函數(shù),功能是計(jì)算n個(gè)學(xué)生的成績(jī)中,高于平均成績(jī)的人數(shù),并作為函數(shù)值。用主函數(shù)來調(diào)用它,統(tǒng)計(jì)50個(gè)學(xué)生成績(jī)中,高于平均成績(jī)的有多少人?2.編寫一個(gè)對(duì)n個(gè)數(shù)據(jù)從大到小的排序C函數(shù),再編寫一個(gè)計(jì)算最后得分的C函數(shù),計(jì)算方法是:去除一個(gè)最高分,去除一個(gè)最低分,其余的平均分為參賽選手的最后得分。并在主函數(shù)中調(diào)用它們對(duì)有n個(gè)評(píng)委評(píng)分,m個(gè)選手參賽的最后得分,從大到小排序輸出。實(shí)驗(yàn)十一維數(shù)組【目的與要求】.掌握一維數(shù)組的定義、賦值和輸入輸出的方法;.掌握字符數(shù)組的使用;.掌握與數(shù)組有關(guān)的算法(例如排序算法)?!旧蠙C(jī)內(nèi)容】【一般示例】【例1】在鍵盤上輸入N個(gè)整數(shù),試編制程序使該數(shù)組中的數(shù)按照從大到小的次序排列。分析:C中數(shù)組長(zhǎng)度必須是確定大小,即指定N的值。排序的方法有多種,我們?nèi)〕銎渲袃煞N作為參考。方法一:起泡排序從第一個(gè)數(shù)開始依次對(duì)相鄰兩數(shù)進(jìn)行比較,如次序?qū)t不做任何操作;如次序不對(duì)則使這兩個(gè)數(shù)交換位置。第一遍的(N-1)次比較后,最大的數(shù)已放在最后,第二遍只需考慮(N*1)個(gè)數(shù),以此類推直到第(N-1)遍比較后就可以完成排序。源程序如下:#defineN10#include"stdio.h"main()(inta[N],i,j,temp;printf(Mpleaseinput%dnumbers\n",N);for(i=0;i<N;i++)scanf(n%d",&a/-for(i=0;ivN-1;i++)for(j=0;j<N-1-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}printff'thearrayaftersort:\n");for(i=0;i<N;i++)printf("%5d",a);}方法二;選擇排序首先找出值最小的數(shù),然后把這個(gè)數(shù)與第一個(gè)數(shù)交換,這樣值最小的數(shù)就放到了第一個(gè)位置;燃后,在從剩下的數(shù)中找值最小的,把它和第二個(gè)數(shù)互換,使得第二小的數(shù)放在第二個(gè)位置上。以此類推,或到所有的值從小到大的順序排列為止。#indude"stdio.h"#defineN10main(){inta[N],i,j,r,temp;printff'pleaseinput%dnumbers\n",N);for(i=0;ivN;i++)scanf("%d\&a);for(i=0;i<N-1;i++)g;for(j=i+1;j<N;j-k+)if(a[j]<a[r])r=j;if(r!=i){temp=a[r];a[r]=a;a=temp;}}printfC'thearrayaftersort:\n");for(i=0;i<N;i++)printf(〃%5d':a);printfC^n");}【例2】青年歌手參加歌曲大獎(jiǎng)賽,有10個(gè)評(píng)委對(duì)她的進(jìn)行打分,試編程求這位選手的平均得分(去掉一個(gè)最高分和一個(gè)最低分分析:這道題的核心是排序。將評(píng)委所打的10個(gè)分?jǐn)?shù)利用數(shù)組按增序(或降序)排列,計(jì)算數(shù)組中除第個(gè)和最后?個(gè)分?jǐn)?shù)以外的數(shù)的平均分,其中排序部分這里用選擇法實(shí)現(xiàn).main(){intfloattemp,ave=0;floata[11];printf(”\n輸入評(píng)委所打的分?jǐn)?shù):\n〃);for(i=1;i<=10;i++)scanf(H%r,&a);for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a;a=a[min];a[min]=temp;}for(i=2;i<=9;i++)/*注意i值的變化范圍*/ave=ave+a;printf("選手所得最后分?jǐn)?shù):%6.1f",ave/8);printf("\n");【例3】輸入?串字符,計(jì)算其中空格的個(gè)數(shù)。#include<stdio.h>main(){charc[30]:inti,sum=O;gets(c);for(i=O;i<str!en(c);i++)if(c=='')sum=sum+1;printf("空格數(shù)為:%dIn",sum);}【作業(yè)】.已有一個(gè)已排好序的數(shù)組,今輸入一個(gè)數(shù),要求按原來排序的規(guī)律將它插入數(shù)組中。.將一個(gè)數(shù)組中的值按逆序重新存放。例如,原來順序?yàn)?,6,5,4,1。要求改為1,4,5,6,8。.有15個(gè)數(shù)按由小到大順序存放在一個(gè)數(shù)組中,輸入一個(gè)數(shù),要求用折半查找法找出該數(shù)是數(shù)組中第幾個(gè)元素的值。如果該數(shù)不在數(shù)組中,則打印出“無此數(shù),.編?程序,將兩個(gè)字符串連接起來,不要用strcat函數(shù)。實(shí)驗(yàn)十一二維數(shù)組【目的與要求】.掌握二維數(shù)組的定義、賦值和輸入輸出的方法;.掌握字符數(shù)組的使用;.掌握與數(shù)組有關(guān)的算法(例如排序算法)?!旧蠙C(jī)內(nèi)容】【一般示例】【例1】有一個(gè)3x4的矩陣,要求輸出其中值最大的元素的值,以及它的行號(hào)和列號(hào)。#defineM3#defineN4main(){intmax,i,j,r,c;staticinta[M][N]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99});max=a[0][0];for(i=0;i<M;i++)for(j=0;j<N;i++)if(a[i][j]>max){max=a[i][j];r=i;c=j;printf(,4max=%d,row=%d,colum=%d\n”,max,r,c);【例2】打印以下圖案:main(){chara[5]={'inti,j,k;charspace='for(i=0;i<5;i++)/*輸出5行*/{printf("\n");/*輸出每行前先換行*/printf("");/*每行前面留5個(gè)空格*/for(j=1;j<=i;j++)printf("%c",space);/*每行再留1個(gè)空格*/for(k=0;k<5;k++)printf("%c",a(k])/*每行輸入5個(gè)*號(hào)*/))【例3】求矩陣下三角形兀素之和。#defineN6main(){inti,j,sum=O;inta[N][N]={0};printf("input5x5data:\nH);for(i=1;i<N;i++){printf("Inputthe%dlinedata:\nH,i);for(j=1;j<N;j++)scanf(M%du,&a[i][j]);}for(i=1;i<N;i++){for(j=1;j<N;j++)printf(w%5d",a[i][j]);printfCAn*');}for(i=1;i<N;i++)for(j=1;j<=i;j++)sum=sum+a[i][j];printf(,'sum=%d\n",sum);)【作業(yè)】.求一個(gè)3*3矩陣對(duì)角線元素之和。.打印出以卜的楊輝三角形(要求打印出10行)。11121133114641151010513.有一篇文章,共有3行文字,每行有80個(gè)字符。要求分別統(tǒng)計(jì)出其中英文大寫字母、小寫字母、數(shù)字、空格以及其他字符的個(gè)數(shù)實(shí)驗(yàn)十二字符數(shù)組及字符串處理函數(shù)一、實(shí)驗(yàn)?zāi)康?掌握C語(yǔ)言中字符數(shù)組和字符串處理函數(shù)的使用。.掌握在字符串中刪除和插入字符的方法。.熟悉TC集成環(huán)境的調(diào)試字符串程序的方法。二、預(yù)習(xí)知識(shí).字符數(shù)組的概念定義及初始化.字符串處理函數(shù)的使用.字符串處理函數(shù)在實(shí)際問題中的應(yīng)用三、實(shí)驗(yàn)內(nèi)容及步驟1.調(diào)試下列程序,使之具有如下功能:任意輸入兩個(gè)字符串(如:"abc123"和"china"),并存放在a,b兩個(gè)數(shù)組中。然后把較短的字符串放在a數(shù)組,較長(zhǎng)的字符串放在b數(shù)組。并輸冊(cè)。main(){chara[10],b[10];intc,d,k;scanf("%s”,&a);scanf&b);printf(,a=%s,b=%s\n”,a,b);c=strlen(a):d=strlen(b);if(c>d)for(k=0;k<d;k++){ch=a[k];a[k]=b[k];b[k]=chs}printf("a=%s\n”,a);printf(*b=%s\n*,b);}程序中的strlen是庫(kù)函數(shù),功能是求字符串的長(zhǎng)度,它的原型保存在頭文件"string,h"中。調(diào)試時(shí)注意庫(kù)函數(shù)的調(diào)用方法,不同的字符串輸入方法,通過錯(cuò)誤提示發(fā)現(xiàn)程序中的錯(cuò)誤。.編寫程序,輸入若干個(gè)字符串,求出每個(gè)字符串的長(zhǎng)度,并打印最長(zhǎng)一個(gè)字符串的內(nèi)容。以"stop"作為輸入的最后一個(gè)字符串。.編寫程序,輸入任意一個(gè)含有空格的字符串(至少10個(gè)字符),刪除指定位置的字符后輸出該字符串。如:輸入"BEIJING123”和刪除位置3,則輸出:"BEIING123”。四、選做題.編寫程序,輸入字符串si和s2以及插入位置f,在字符串si中的指定位置f處插入字符串s2.如:輸入"BEIJING"、"123”和位置3,則輸出:”BEU23JING123”。.編寫程序,將輸入的兩個(gè)字符串進(jìn)行合并,合并后的字符串中的字符按照其ASCII碼從小到大的順序排序,在合并后的字符串中相同的字符只出現(xiàn)一次。H.實(shí)驗(yàn)要求及總結(jié).復(fù)習(xí)字符串處理函數(shù)和字符數(shù)組的使用、庫(kù)函數(shù)的調(diào)用方法..編寫程序,運(yùn)行程序并記錄運(yùn)行結(jié)果。.將源程序、目標(biāo)文件、可執(zhí)行文件和實(shí)驗(yàn)報(bào)告存在軟盤上。.結(jié)合上課內(nèi)容,對(duì)上述程序先閱讀,然后上機(jī)并調(diào)試程序,并對(duì)實(shí)驗(yàn)結(jié)果寫出你自己的分析結(jié)論。.整理上機(jī)步驟,總結(jié)經(jīng)驗(yàn)和體會(huì)。.完成實(shí)驗(yàn)報(bào)告和上交程序。實(shí)驗(yàn)十三預(yù)處理實(shí)驗(yàn)時(shí)間:年月曰 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)成績(jī):一、【實(shí)驗(yàn)題目】預(yù)處理二、【實(shí)驗(yàn)類型】基礎(chǔ)型實(shí)驗(yàn)三、【實(shí)驗(yàn)要求】.實(shí)驗(yàn)前必須做好實(shí)驗(yàn)準(zhǔn)備,弄清實(shí)驗(yàn)內(nèi)容和實(shí)驗(yàn)?zāi)康模?實(shí)驗(yàn)結(jié)束后,把程序運(yùn)行結(jié)果寫在程序旁邊相應(yīng)位置,并回答問題;.將完成后的實(shí)驗(yàn)報(bào)告交給任課教師。四、【實(shí)驗(yàn)?zāi)康摹?理解宏定義的概念及其與相應(yīng)函數(shù)的區(qū)別;.掌握有參數(shù)的宏和無參數(shù)的宏定義及其應(yīng)用;.理解“文件包含”的作用,掌握“文件包含”的具體形式;.理解條件編譯及其形式,并能進(jìn)行簡(jiǎn)單的運(yùn)用。五、【實(shí)驗(yàn)內(nèi)容】(一)下面的程序用宏P(guān)OWER求一個(gè)數(shù)的平方?;卮鹣铝袉栴}。#include<stdio.h>#definePOWER(x)x*xvoidmain()(intx,y;printf("請(qǐng)輸入兩個(gè)數(shù):");scanf("%d%d”,&x,&y);printf("%d的平方是%d\n",x,POWER(x));printf("%d的平方是%d\n",y,POWER(y));printf("%d+%d的平方是%d\n",x,y,POWER(x+y));).調(diào)試執(zhí)行程序,看看程序是否滿足題目要求;如果不滿足,請(qǐng)改正:.在一個(gè)被包含文件中又可以包含另一個(gè)被包含文件,即文件包含是可以的;.在#include命令中,文件名可以用雙撇號(hào)也可以用尖括號(hào)括起來,二者的區(qū)別是什么?.對(duì)帶參數(shù)的宏的展開只是將語(yǔ)句中的宏名后面括號(hào)內(nèi)的一字符串代替#define命令行中的;.在宏定義時(shí),在宏名與帶參數(shù)的括號(hào)之間如果加上空格,這時(shí)替代部分會(huì)怎么處理?.帶參數(shù)的宏定義與函數(shù)有什么區(qū)別?(二)調(diào)試運(yùn)行下列程序,并回答下列問題。#include<stdio.h>#defineMAX#defineMAXIMUM(x,y)(x>y)?x:y#defineMINIMUM(x,y)(x>y)?y:xvoidmain()(inta=10,b=20;#ifdefMAXprintf("較大的數(shù)是%d\nM,MAXIMUM(a,b));#elseprintf("較小的數(shù)是%d\n,',MINIMUM(a,b));#endif#ifndefMINprintf("較小的數(shù)是%d\nM,MINIMUM(a,b));#elseprintf("較大的數(shù)是%d\n,',MAXIMUM(a,b));#endif#undefMAX#ifdefMAXprintf("較大的數(shù)是%d\n",MAXIMUM(a,b));#elseprintf("較小的數(shù)是%d\n,',MINIMUM(a,b));#endif#defineMIN#ifndefMINprintf("較小的數(shù)是%d\n,1,MINIMUM(a,b));#elseprintf("較大的數(shù)是%d\nM,MAXIMUM(a,b));#endifgetchar();}.上述條件編譯可以直接用if語(yǔ)句達(dá)到相同的要求嗎?.條件編譯與直接用if語(yǔ)句有什么不同?.本程序的功能是什么?.掌握條件編譯的方法,學(xué)會(huì)使用條件編譯作一些簡(jiǎn)單的程序。(三)編程:編寫一個(gè)可以判斷給定的年份是否是閏年的宏。實(shí)驗(yàn)十四指針1實(shí)驗(yàn)九指針1一、實(shí)驗(yàn)?zāi)康?、掌握指針的概念,會(huì)定義和使用指針變量:2、「解或掌握指針與數(shù)組的關(guān)系,指針與數(shù)組有關(guān)的算術(shù)運(yùn)算、比較運(yùn)算。3、學(xué)會(huì)用指針作為函數(shù)參數(shù)的方法。二.相關(guān)知識(shí)點(diǎn)宏定義,帶參數(shù)的宏定義,不帶參數(shù)的宏定義:地址和指針的概念:數(shù)組和指針的關(guān)系:字符串和指針的關(guān)系:三、實(shí)驗(yàn)內(nèi)容一(驗(yàn)證及程序分析)Eg9-1:編輯源程序,回答后面的問題。(1)源程序:#defineS(a,b)a*b#include<stdio.h>\oidmain()(intc.d.t;scanf^'^od.°W.&c.&d):t=S(c+d.sd); /?宏展開后代入變最c,d的值,從而求得變最t的值*/printfC%d”,t);}(2)輸入數(shù)據(jù):(3)結(jié)果輸出:(4)分析本題難點(diǎn):①宏展開后的表達(dá)式應(yīng)該為:c+d*c-d②代入c,d的值(例如輸入2,3),則32+3*2-3=5③易錯(cuò)的地方是結(jié)果為:(2+3)*(2-3)=-6(無形中加了括號(hào))假設(shè)此題變化為:#indefineS(a,b)(a)*(b),則正確結(jié)果才是-6通過此題應(yīng)該掌握帶參的宏展開的實(shí)質(zhì):不僅僅是作簡(jiǎn)單的置換,還要進(jìn)行參數(shù)的替換.Eg9-2:輸入兩個(gè)整數(shù),并使其從大到小輸出,用指針變最實(shí)現(xiàn)數(shù)的比較。(1)源程序:#include<std沁.h>voidmain(){int*pl.*p2.*p.a.b:scanK,,obcLoodM,&a,&b);pl=&a;p2=&b;ifi(a<b){P=pl:pl=p2;p2=p;}printf("a=ood.b=°od\n",a.b);printfi("max=ood.min=ood\n",*pl.*p2);}(2)輸入數(shù)據(jù):(3)結(jié)果輸出:Eg9-3:輸入兩個(gè)整數(shù),并使其從大到小輸出,用函數(shù)實(shí)現(xiàn)數(shù)的交換(1)源程序:#include<stdio.h>voidswap(int*pl,int*p2){intp;P=*pl;*pl=*p2;*p2=p;}\oidmain(){inta.b;uit*p.*q;scanf("^od.°od",&a.&b);p=&a;q=&b;if(a<b)s\vap(p,q);printf("\n^od.°bd\n",a.b);)(2)輸入數(shù)據(jù):(3)結(jié)果輸出:(4)如果將swap函數(shù)修改為如下形式,分析如何調(diào)試和修改?voids\vap(iiit*pl,int*p2){int*p;*p=*pl;?pl=*p2;?p2=*p;Eg9Y:用指針法輸入12個(gè)數(shù),然后按每行4個(gè)數(shù)輸出。(I)算法分析:定義一個(gè)整型數(shù)組和一個(gè)整型指針,這樣通過數(shù)組就可以靜態(tài)分配內(nèi)存空間,存儲(chǔ)數(shù)據(jù):然后將指針與數(shù)組相關(guān),使指針指向與數(shù)組相同的首地址處,這樣就可以通過指針或者數(shù)組都可以對(duì)存儲(chǔ)空間加以操作.(2)源程序:#include<stdio.h>\oidmain(){inljjc.a[12],*p;p=a; 〃使指針p指向與數(shù)組a相同的首地址處for(j=0;j<12j-H-)scanf("°bd",p++); //移動(dòng)P的位置,輸入數(shù)據(jù)p=a; 〃指針重定位fbr(j=0;j<12j-H-){if(j%4==0)printf("\n"); 〃按每行4個(gè)數(shù)輸出printf(“%4d”,*嚴(yán));}printfC'Xn");}(3)輸入數(shù)據(jù):(4)結(jié)果輸出:四、實(shí)驗(yàn)內(nèi)容二(綜合及設(shè)計(jì)類)Eg9-5:從鍵盤輸入十個(gè)整數(shù),要求用冒泡法(或選擇法)實(shí)現(xiàn)從大到小的排列輸出。Eg9-6:將指針作為函數(shù)參數(shù):一個(gè)數(shù)組有10個(gè)元素{1,8,10,2,-5,0,7,15,4,-5),利用指針作為函數(shù)參數(shù)編程,輸出數(shù)組中最大和最小的元素值。實(shí)驗(yàn)十五指針2實(shí)驗(yàn)十指針2一、實(shí)驗(yàn)?zāi)康?、進(jìn)一步理解指針的概念,掌握其在數(shù)組和字符串中的應(yīng)用。2、學(xué)會(huì)使用函數(shù)的指針和指向函數(shù)的指針變量。3、了解指向指針的指針的概念及其使用方法。二、相關(guān)知識(shí)點(diǎn)字符、字符串和字符數(shù)組的關(guān)系與表示方法:函數(shù)指針,指向指針的指針的概念;三、實(shí)驗(yàn)內(nèi)容一(驗(yàn)證及程序分析)Eg10-1:用指針方法處理,輸入三個(gè)字符串,按由小到大的順序輸出.(1)算法分析:字符串的比較要用到函數(shù)strcmp,比較后值的保存及交換要用到函數(shù)strcpy及一個(gè)中間變最。參數(shù)的傳送方式是“傳址”方式。(2)程序如下:/include<stdio.h>#include<string.h>voidmain()(charstrl[20],str2[20],str3[20]; 定義三個(gè)字符數(shù)組*/charswap(); /*聲明函數(shù)*/printf(Hinputthreestring:\nM);gets(strl);gets(str2);gets(str3);if(strcmp(strl,str2)>0)swap(strl,str2);/*調(diào)用函數(shù)swap*/if(strcmp(strl,str3)>O)s\vap(strl,str3);if(strcmp(str2,str3)>O)s\vap(str2,str3);printf(Htheorderis:\nH);printf(%s\n°os\n%s\n",strl,str2,str3);}charswap(char*pl,char*p2) /*定義交換兩個(gè)字符串的函數(shù)swap?/(char*p[20];..〈irrnv/nn1、strcpy(p.pl);strcpy(pl.p2);strcpy(p2,p);/*以上三條語(yǔ)句完成比較交換功能*/}(3)運(yùn)行程序,輸入:Inputthreelines:Istudyveryhard./Heisateacher./Todayisfine.3(4)查看運(yùn)行結(jié)果,想想為什么是這個(gè)結(jié)果?Eg10-2:調(diào)試并修改下列程序,使之具有如下功能:任意輸入2個(gè)數(shù),調(diào)用兩個(gè)函數(shù)分別求:①2個(gè)數(shù)的和:②2個(gè)數(shù)交換值。要求用“函數(shù)指針”調(diào)用這兩個(gè)函數(shù),結(jié)果在主函數(shù)中輸出.(1)源程序:#include<stdio.h>\oidmain()(inta,b,c,(*pXXscanf(^oAood,,,&a.&b);p=sum;?p(a,b,c);p=s\vap;?p(a,b);prinlf(,,sum=°od\n”,c);printf("a=。od.b=°od\nH,a,b);}sum(inta.iii(bantc)(c=a+b;)s\vap(inta.iiitb)(intt;t=a;a=b;b=t;}(2)調(diào)試程序時(shí)注意參數(shù)傳遞的是數(shù)值還是地址。四、實(shí)驗(yàn)內(nèi)容二(綜合及設(shè)計(jì)類)EG10-3:練習(xí)指針數(shù)組:有三個(gè)字符串“Datastructure",14Coputerdesign”、“CProgrom”,請(qǐng)按字符順序輸出這三個(gè)字符串。(要求用指針數(shù)組指向這三個(gè)字符串。)EG10-4:輸入10個(gè)整數(shù),找出其中最大的數(shù)并與最后一個(gè)數(shù)對(duì)換。寫三個(gè)函數(shù):(1)輸入10個(gè)數(shù):(2)進(jìn)行處理:(3)輸出10個(gè)數(shù).要求:在主函數(shù)中,用一個(gè)函數(shù)指針來訪問這三個(gè)函數(shù)。實(shí)驗(yàn)十六結(jié)構(gòu)體和共用體一、實(shí)驗(yàn)?zāi)康?、掌握結(jié)構(gòu)體類型變量的定義和使用;2,掌握結(jié)構(gòu)體類型數(shù)組的概念和使用:3、掌握鏈表的概念,初步學(xué)會(huì)對(duì)旋表進(jìn)行操作:4、掌握共用體的概念與使用;5,掌握按位運(yùn)算的概念和方法,學(xué)會(huì)使用位運(yùn)算符:6,學(xué)會(huì)通過位運(yùn)算實(shí)現(xiàn)對(duì)某些位的操作。二、相關(guān)知識(shí)點(diǎn)C語(yǔ)酒提供了一種如果用簡(jiǎn)單變量來分別代表屬性,難以反映出他們之間的內(nèi)在聯(lián)系數(shù)據(jù)類型稱為結(jié)構(gòu)體。如學(xué)生姓名、編號(hào)、性別、年齡、各科成績(jī)、地址等。他們是同一個(gè)處理對(duì)象,學(xué)生的屬性,在這之|間,即有字符型、也有長(zhǎng)整、短整型、實(shí)型等各種數(shù)據(jù)類型。例:Niminamesexagescoreaddi10010Lifilmm1888.5beijin整型字符型字符整型實(shí)型字符型stinctstudent{intnmn:chaiuame[20]icharsex:shortintage:floatscore:charaddrfSOl:)上面就定義了一個(gè)結(jié)構(gòu)體類型,stnict是關(guān)鍵字,結(jié)構(gòu)體類型是student。其中有6個(gè)不同的數(shù)據(jù)項(xiàng).結(jié)構(gòu)體類型不同丁?基本數(shù)據(jù)類型的特點(diǎn):(1)由若干個(gè)數(shù)據(jù)項(xiàng)組成,每個(gè)數(shù)據(jù)項(xiàng)稱為一個(gè)結(jié)構(gòu)體的成員,也可稱為“域”.(2)結(jié)構(gòu)體類型并非只能仃一種,而可以有千千萬萬.stnict結(jié)構(gòu)體名(成員項(xiàng)表列(3)定義一個(gè)結(jié)構(gòu)體類型,并不意味著系統(tǒng)將分配一段內(nèi)存單元來存放各數(shù)據(jù)項(xiàng)成員。因?yàn)檫@僅僅只定義了類型。(4)結(jié)構(gòu)體類型需用戶自己定義.位運(yùn)算符和位運(yùn)算三、實(shí)驗(yàn)內(nèi)容一(驗(yàn)證及程序分析)Eg11-1:編寫一個(gè)函數(shù)pnnt,打印一個(gè)學(xué)生的成績(jī)數(shù)組,該數(shù)組中有5個(gè)學(xué)生的數(shù)據(jù)記錄,每個(gè)記錄包括num、name、score[3],用主函數(shù)輸入這些記錄,用print函數(shù)輸出這些記錄.(1)算法分析:依據(jù)題意,先定義一個(gè)包含有三個(gè)成員項(xiàng)的結(jié)構(gòu)體數(shù)組,在主函數(shù)中利用循環(huán)依次輸入數(shù)據(jù),并調(diào)用函數(shù)print,完成輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)綜合體智能技術(shù)應(yīng)用與運(yùn)營(yíng)效率考核試卷
- 水電合同范本2017
- 綠墻保養(yǎng)合同范本
- 按摩店轉(zhuǎn)讓合同范本
- 商超促銷員培訓(xùn)課件
- 承包木耳基地合同范本
- 業(yè)務(wù)代理服務(wù)協(xié)議條款及細(xì)則
- 創(chuàng)新醫(yī)療技術(shù)研發(fā)合同2024
- 私營(yíng)店主用人勞動(dòng)合同
- 男女朋友分手協(xié)議書
- PySide學(xué)習(xí)教程
- 數(shù)據(jù)結(jié)構(gòu)英文教學(xué)課件:chapter1 Introduction
- 人教三年級(jí)數(shù)學(xué)下冊(cè)表格式全冊(cè)
- 事業(yè)單位綜合基礎(chǔ)知識(shí)考試題庫(kù) 綜合基礎(chǔ)知識(shí)考試題庫(kù).doc
- 優(yōu)秀教研組評(píng)比制度及實(shí)施細(xì)則
- 譯林初中英語(yǔ)教材目錄
- 物業(yè)交付后工程維修工作機(jī)制
- 農(nóng)作物病蟲害專業(yè)化統(tǒng)防統(tǒng)治管理辦法
- JJF 1752-2019全自動(dòng)封閉型發(fā)光免疫分析儀校準(zhǔn)規(guī)范(高清版)
- GB 1886.300-2018 食品安全國(guó)家標(biāo)準(zhǔn) 食品添加劑 離子交換樹脂(高清版)
- 食品經(jīng)營(yíng)單位經(jīng)營(yíng)場(chǎng)所和設(shè)備布局、操作流程示意圖模板
評(píng)論
0/150
提交評(píng)論