版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、河南省計(jì)算機(jī)等級(jí)考試二級(jí)C培訓(xùn)講義yoyo電腦培訓(xùn)第一講:了解HNCRE-2C 河南省計(jì)算機(jī)等級(jí)考試中的二級(jí)C語(yǔ)言考試采用機(jī)試的形式,內(nèi)容包括二大部分:基礎(chǔ)知識(shí)部分和C語(yǔ)言部分,總分100分。基礎(chǔ)知識(shí)占30分,題型為選擇題,共30題,每題1分。C語(yǔ)言部分占70分,題型為編寫(xiě)程序題,其中第1道編程題是必做題,分值20分;第2、3、4道編程題每題25分,考生從后3道編程題中選做兩題,我們一般選做第2和第3道編程題。這4道編程題,每一題都有固定的內(nèi)容,很有規(guī)律;比如第1道編程是與數(shù)列有關(guān)的題,第2題通常是求方程的根、求積分的值等方面內(nèi)容的題,第3題是與文件操作有關(guān)的題,第4題是可視化設(shè)計(jì)方面的題。因
2、為我們的教材沒(méi)有講可視化設(shè)計(jì)方面的內(nèi)容,所以我們一般不選這個(gè)題;當(dāng)然,同學(xué)如果對(duì)可視化很有興趣,而且也掌握了這方面的知識(shí)和編程技術(shù),也可以選這個(gè)題。如果4個(gè)編程題都做了,只計(jì)算前3道編程題的分值。基礎(chǔ)知識(shí)的題一般同學(xué)最少也能拿到15分,而編程題則要求較嚴(yán),要求程序必須能順利運(yùn)行而且結(jié)果正確。我們的培訓(xùn)班緊扣編程題的內(nèi)容,仔細(xì)講解這些題的編寫(xiě)方法,力求同學(xué)都能過(guò)關(guān)。1. 與數(shù)列有關(guān)的題 數(shù)列就是一組排列有序,變化有規(guī)律的數(shù)據(jù)。我們?cè)跀?shù)學(xué)中學(xué)過(guò)的等比數(shù)列、等差數(shù)列,以及我們前面講過(guò)的斐波拉契數(shù)列都是典型數(shù)列。對(duì)于有關(guān)數(shù)列的題目,關(guān)鍵在于發(fā)現(xiàn)數(shù)列變化的規(guī)律,以及找到用C語(yǔ)言的語(yǔ)句體現(xiàn)這種變化規(guī)律的方
3、法。 例:編程序,計(jì)算并輸出下面數(shù)列前n項(xiàng)的和(設(shè)n=20,x=0.5),要求結(jié)果保留3位小數(shù)。 sin(x)/x,sin(2x)/2x,sin(3x)/3x,sin(n*x)/(n*x), (其中,sin(x)為正弦函數(shù)) 程序如下: #include #include math.h main() float s=0; float n=1,x=0.5; while(n=20) s=s+sin(n*x)/(n*x); n=n+1; printf(ok=%7.3fn,s); 2. 求方程根、求積分值等計(jì)算方面的題 例:在給定程序中,函數(shù)fun和funx的功能是用二分法求解方程2x3-4x2+3x
4、-6=0的一個(gè)根,并要求絕對(duì)誤差不超過(guò)0.001。例如:給m輸入-100,給n輸入90,則函數(shù)求得一個(gè)根值為2.000。 程序如下: #include math.h #include double funx(double x); double fun(double m, double n); main() double m,n,root; printf(Enter m,n:n); scanf(%lf,%lf,&m,&n); root=fun(m,n); printf(The root is %6.3fn,root); double funx(double x) return (2*x*x*x-
5、4*x*x+3*x-6); double fun(double m, double n) double r; r=(m+n)/2; while(fabs(n-m)=0.001) if (funx(r)*funx(n)0) m=r; else n=r; r=(m+n)/2; return r; 3. 與文件操作有關(guān)的題 已知在文本文件下載文件“20075.txt”(右擊,選擇“目標(biāo)另存為”)中共有500個(gè)記錄,每個(gè)記錄是用以下格式表示的5項(xiàng)數(shù)據(jù)(各數(shù)據(jù)間以空格分開(kāi)):學(xué)號(hào)姓名機(jī)試成績(jī)筆試成績(jī)平時(shí)成績(jī)nnnnnnnnnccccccnnnnnn (說(shuō)明:n表示整型;c表示字符型;n的個(gè)數(shù)表示數(shù)據(jù)位數(shù)
6、,例如nn表示兩位整數(shù),c的個(gè)數(shù)表示字符位數(shù)) 求出前100人的筆試的平均成績(jī)。 程序如下: #include stdio.h struct course_type long sno; char sname6; short course1; short course2; short course3; ycourse501; void main() int i; float avecourse=0; FILE * fp; if (fp=fopen(20075.txt,rb)=NULL) printf(Can not open the file!n); return; for (i=0;i100;
7、i+) fscanf(fp,%ldt%st%dt%dt%dt,&ycoursei.sno,&ycoursei.sname,&ycoursei.course1,&ycoursei.course2,&ycoursei.course3); avecourse=avecourse+(float)(ycoursei.course2)/100; printf(average course2 is: %fnn,avecourse); fclose(fp); return; 1. C源程序文件的建立 打開(kāi)Microsoft Visual C+ 6.0(簡(jiǎn)稱(chēng)VC6.0)的開(kāi)發(fā)環(huán)境窗口,選用File(文件)菜單下
8、的New(新建)菜單項(xiàng),這樣會(huì)打開(kāi)一個(gè)New(新建)對(duì)話框,選擇其中的Files(文件)標(biāo)簽頁(yè),然后在該標(biāo)簽頁(yè)左邊的文件類(lèi)型列表中選中C+ Source File(C+源程序文件),并在右邊的File(文件名)輸入框中,輸入所要?jiǎng)?chuàng)建的程序文件的基本名和擴(kuò)展名(.c或.cpp ),其中的擴(kuò)展名(.c或.cpp)可以不輸入,VC6.0的開(kāi)發(fā)環(huán)境會(huì)自動(dòng)在其后加上“.cpp”這一擴(kuò)展名。對(duì)于我們的考試范圍而言,.c和.cpp并沒(méi)有什么區(qū)別,但因?yàn)槲覀兛嫉氖嵌?jí)c,而不是二級(jí)c+。所以好象用.c合適些。如果你想省事,讓系統(tǒng)在源程序文件主名后加上.cpp的擴(kuò)展名,也什么錯(cuò)。在文件名輸入框下面的Locati
9、on:(位置)輸入框中可以查看和改變所建立的程序文第二講:熟悉考試的軟件環(huán)境Microsoft Visual C+ 6.0件在電腦上的存放位置,還可以用該輸入框右邊的“省略號(hào)”按鈕選擇另一個(gè)位置來(lái)存放所要建立的程序。指定了文件的名稱(chēng)和位置后,按下該對(duì)話框最下邊的OK(確定)按鈕,光標(biāo)就進(jìn)入VC6.0開(kāi)發(fā)環(huán)境主窗口右邊的程序代碼輸入、編輯區(qū)域(主區(qū)域),你可以在這里將你所寫(xiě)的程序代碼逐字逐行地輸入。 如果有一個(gè)已經(jīng)存在的C語(yǔ)言源程序文件,我們可以用“我的電腦”這一工具程序或“資源管理器”這一工具程序找到這個(gè)文件,雙擊它,就能在VC6.0的開(kāi)發(fā)環(huán)境下的程序代碼輸入編輯區(qū)域(主區(qū)域)中打開(kāi)它,并可以
10、進(jìn)行修改、編輯、鏈接、運(yùn)行。 如果VC6.0的開(kāi)發(fā)環(huán)境已經(jīng)打開(kāi),我們還可以用其File(文件)菜單下的Open(打開(kāi))菜單項(xiàng)來(lái)打開(kāi)一個(gè)“打開(kāi)”對(duì)話框,并通過(guò)這一對(duì)話框打開(kāi)一個(gè)機(jī)器上已有的文件。 無(wú)論是輸入了一個(gè)新程序文件的內(nèi)容,還是修改了一個(gè)舊程序文件的內(nèi)容后,都可以用菜單項(xiàng)或工具條上的按鈕來(lái)保存程序的內(nèi)容?;蛘呤鞘褂肍ile(文件)菜單上的Save as(另存為)菜單項(xiàng)用一個(gè)另外的文件名稱(chēng)來(lái)保存你所輸入或修改的程序。但一般情況下,我們無(wú)論是輸入了一個(gè)新文件的內(nèi)容還是修改了一個(gè)舊文件的內(nèi)容,我們都會(huì)先看看,這個(gè)程序能不能運(yùn)行,運(yùn)行結(jié)果對(duì)不對(duì)。這樣的話,我們就會(huì)對(duì)源程序文件進(jìn)行編譯、鏈接、運(yùn)行。
11、而在這個(gè)過(guò)程中,系統(tǒng)會(huì)對(duì)你的源程序文件進(jìn)行保存。所以一個(gè)源程序文件運(yùn)行通過(guò)后,其內(nèi)容已經(jīng)保存在電腦的盤(pán)上了。2. C程序文件的編譯、鏈接、運(yùn)行 在輸入完一個(gè)新的程序文件的代碼或修改好一個(gè)舊的程序文件的代碼后,我們使用Build(創(chuàng)建)菜單下的Compile (編譯 某文件)菜單項(xiàng)來(lái)編譯它,編譯一個(gè)源程序時(shí),VC6.0很可能會(huì)顯示一個(gè)這樣的提示框。這是系統(tǒng)告訴你要編譯一個(gè)源程序文件,這個(gè)源程序文件一定要在一個(gè)活動(dòng)的項(xiàng)目或工程的工作空間中,而你還沒(méi)有為你的程序文件建立一個(gè)項(xiàng)目工作空間,所以系統(tǒng)要為你建立一個(gè)項(xiàng)目工作空間,問(wèn)你愿意嗎,我們當(dāng)然選“是(Y)”以便系統(tǒng)為我們建立這個(gè)工作空間。如果是對(duì)一個(gè)
12、新程序文件的代碼進(jìn)行編譯或是對(duì)一個(gè)已經(jīng)被改過(guò)的舊程序文件的代碼進(jìn)行編譯,系統(tǒng)會(huì)顯示如下的信息框,問(wèn)你是否要保存文件。 我們選“是(Y)”進(jìn)行保存。如果程序代碼沒(méi)有語(yǔ)法錯(cuò)誤,編譯就會(huì)順利通過(guò),在VC6.0開(kāi)發(fā)環(huán)境的左下邊顯示 XXXXXXX.obj - 0 error(s) 0 warning(s). 這里的“XXXXXXX”代表文件的基本名,它會(huì)與你給程序文件所起的基本名一致。而“.obj”是編譯后形成的一種不同于.c或.cpp的文件類(lèi)型,我們稱(chēng)之為目標(biāo)代碼。目標(biāo)代碼仍然不能直接運(yùn)行,接下來(lái)我們使用Build(創(chuàng)建)菜單下的Build (鏈接 某文件)將目標(biāo)代碼鏈接為可執(zhí)行文件。如果不出現(xiàn)錯(cuò)誤
13、,鏈接通過(guò)后,VC6.0開(kāi)發(fā)環(huán)境的左下邊顯示 XXXXXXX.exe - 0 error(s) 0 warning(s). 這里的“XXXXXXX”代表文件的基本名,它會(huì)與你給程序文件所起的基本名一致。而.exe就代表可執(zhí)行文件這種文件類(lèi)型。最后,我們用Build(創(chuàng)建)菜單下的Execute (執(zhí)行 某文件)來(lái)執(zhí)行我們的程序。如果順利的話,我們會(huì)看到一個(gè)黑底色的窗口。其中顯示了我們想要看的內(nèi)容。 如果程序沒(méi)有錯(cuò)誤,可以不一步一步地發(fā)指令進(jìn)行編譯、鏈接、運(yùn)行。也可使用“創(chuàng)建”菜單中的“運(yùn)行”菜單項(xiàng)或工具欄中的運(yùn)行圖標(biāo)/快捷方式(!)讓系統(tǒng)自動(dòng)連續(xù)地完成這三個(gè)步驟。3. C程序文件的調(diào)試 如果程
14、序代碼有錯(cuò)誤,編譯就不能通過(guò),在VC6.0開(kāi)發(fā)環(huán)境的左下邊顯示 XXXXXXX.obj - n error(s) m warning(s). 表示機(jī)器發(fā)現(xiàn)了n個(gè)嚴(yán)重錯(cuò)誤,m個(gè)不太嚴(yán)重的警告性的錯(cuò)誤。如下圖所示: 其中error型的嚴(yán)重錯(cuò)誤是必須改正的。我們將光標(biāo)指向出錯(cuò)提示信息處,閱讀出錯(cuò)的大致原因,然后用光標(biāo)雙擊錯(cuò)誤文字行,系統(tǒng)就會(huì)在代碼輸入、編輯區(qū)域中出錯(cuò)行的左邊顯示一個(gè)出錯(cuò)標(biāo)志,指示你進(jìn)行修改。 大家在編譯和鏈接時(shí)發(fā)現(xiàn)的錯(cuò)誤通常是語(yǔ)法錯(cuò)誤,例如句尾缺了分號(hào)或變量沒(méi)有定義就給它賦值就會(huì)在編譯是被系統(tǒng)告知出錯(cuò),如果一個(gè)工程的工作空間里有兩個(gè)main()函數(shù),在鏈接時(shí)也會(huì)被VC告知有錯(cuò)誤。一般
15、來(lái)說(shuō),語(yǔ)法錯(cuò)誤相對(duì)好查找、糾正一些,因?yàn)閂C有錯(cuò)誤提示信息顯示在開(kāi)發(fā)環(huán)境的下面。 另一類(lèi)錯(cuò)誤是語(yǔ)意錯(cuò)誤或稱(chēng)之為邏輯錯(cuò)誤,是程序的算法不能滿足題目或任務(wù)的要求而產(chǎn)生的錯(cuò)誤。如程序中出現(xiàn)了一個(gè)無(wú)限次執(zhí)行的循環(huán)體,或者是數(shù)學(xué)公式在輸入、編輯時(shí)寫(xiě)錯(cuò)了(比如把求圓的面積的公式3.14*r*r寫(xiě)成了2*3.14*r),都會(huì)造成程序運(yùn)行的結(jié)果不對(duì)。這種錯(cuò)誤一般比較難定位和糾正,通常是通過(guò)仔細(xì)閱讀程序來(lái)找出出錯(cuò)的原因并進(jìn)行修正。 在調(diào)試程序時(shí),如果懷疑某條語(yǔ)句是否必要,可能想把這條語(yǔ)句刪除掉以后,再試著運(yùn)行一下程序。我們建議你不要直接在代碼中徹底刪掉它,如果這樣的話,假設(shè)這條語(yǔ)句不能少,我們還得重新輸入進(jìn)出,
16、一個(gè)好的方法是先把它注釋掉。這樣在執(zhí)行時(shí)就不把它當(dāng)作一條可執(zhí)行的語(yǔ)句去執(zhí)行了,如果后來(lái)發(fā)現(xiàn)這條語(yǔ)句還得要,我們把注釋標(biāo)志去掉即可。當(dāng)然,如果發(fā)現(xiàn)這條語(yǔ)句確實(shí)是多余,就可以把它徹底刪掉了。 在C程序中加注釋的方法有兩種,一種是在一行的行首加“/”,這種方式只能使其所在的一行成為注釋。還有一種方法是用“/*”和“*/”這兩個(gè)定界符把任意位置、任意長(zhǎng)度的內(nèi)容變成注釋。 我們對(duì)程序代碼進(jìn)行修改后,重新進(jìn)行編譯、鏈接、運(yùn)行。直到得到較滿意的結(jié)果。4. 編寫(xiě)、運(yùn)行多個(gè)程序時(shí)的注意事項(xiàng) 編寫(xiě)、調(diào)試、運(yùn)行好一個(gè)程序后,請(qǐng)先使用“文件”菜單下的“保存”菜單項(xiàng)予以保存。然后,使用“文件”菜單下的“關(guān)閉工作空間”,
17、將其所在項(xiàng)目工作空間關(guān)閉。接下來(lái)再使用“文件”菜單下的“新建”菜單項(xiàng)新建一個(gè)C+ source file。否則,兩個(gè)或多個(gè)程序文件的多個(gè)main()函數(shù)混在一個(gè)項(xiàng)目的工作空間中,會(huì)使你無(wú)法生成新程序的exe文件。 如果不小心將多個(gè)程序的多個(gè)main()函數(shù)混寫(xiě)在一個(gè)項(xiàng)目中,在組建.exe文件時(shí)出現(xiàn)錯(cuò)誤:_main already defined in XXX.obj。這時(shí)可以用以下方法解決它們之間的沖突: a.在VC開(kāi)發(fā)環(huán)境窗口的左邊有一個(gè)工作空間觀察框,逐步點(diǎn)開(kāi)其中的分枝結(jié)點(diǎn),你會(huì)看到多個(gè)main()函數(shù)。 b.使用“工程”菜單下的“設(shè)置”菜單項(xiàng),打開(kāi)“工程設(shè)置”(Project setti
18、ngs)對(duì)話框,點(diǎn)開(kāi)左邊列表框中的分枝結(jié)點(diǎn),找到此前已經(jīng)調(diào)好和運(yùn)行過(guò)的程序,選中它,再在右邊的常規(guī)標(biāo)簽頁(yè)中點(diǎn)選“組建時(shí)排除文件X”可選項(xiàng),單擊“確定”按鈕。這樣在組建.exe文件時(shí)就不包含其中的內(nèi)容,如果在工程中有多個(gè)在組建.exe文件時(shí)不想包含其內(nèi)容的文件,可以按上述步驟一一排除它們。這樣就能在組建.exe文件避免出現(xiàn)前述的錯(cuò)誤了。5.使用scanf()函數(shù)的有關(guān)注意事項(xiàng) 在scanf()函數(shù)的格式串(第一個(gè)參數(shù))中,不能使用“n”要求光標(biāo)換行;否則,輸入數(shù)據(jù)后按回車(chē)鍵無(wú)法返回程序繼續(xù)執(zhí)行。另外在格式串中使用%f或%lf格式符時(shí)不能指定實(shí)型數(shù)或雙精度數(shù)的精度,即不能使用形如%7.2f這樣的格
19、式符要求小數(shù)點(diǎn)后輸入兩位小數(shù);但是可以指定實(shí)型數(shù)在輸入時(shí)所占的總寬度(字符數(shù)),比如使用%7f是正確的。 在調(diào)試程序時(shí),當(dāng)黃箭頭指向scanf()語(yǔ)句,使用Step Over方式執(zhí)行該語(yǔ)句時(shí),會(huì)發(fā)現(xiàn)黃箭頭并不向下移動(dòng),這是因?yàn)閟canf()語(yǔ)句執(zhí)行時(shí),等著用戶到那個(gè)黑底色的窗口去輸入數(shù)據(jù),所以要點(diǎn)開(kāi)黑底的窗口,在那里進(jìn)行輸入,回車(chē)后才能回到調(diào)試界面接著進(jìn)行調(diào)試。當(dāng)你不想再調(diào)試下去時(shí),可以使用Stop Debuging菜單項(xiàng)/按鈕結(jié)束調(diào)試,回到對(duì)程序進(jìn)行編輯的界面。第三講:從最簡(jiǎn)單的C程序到復(fù)雜的C程序1. 顯示Hello everyone!#include stdio.hmain() prin
20、tf(Hello everyone!n);2. 求10的階乘#include stdio.hmain() int m; m=1*2*3*4*5*6*7*8*9*10; printf(10!=%dn,m);3. 輸入一個(gè)任意正整數(shù),求其階乘#include main()unsigned long m=1;int i,j;printf(Please input a integer:);scanf(%d,&j);for (i=1;i=j;i+) m=m*i;printf(m!=%ldn,m);4. 求Cnm #include int jc(int k) int p,q=1; for (p=1;p=k
21、;p+) q=q*p; return q; main() int n,m,jc1,jc2,jc3,jg; printf(Please input the value of n , m:); scanf(%d , %d,&n,&m); jc1=jc(n);jc2=jc(m);jc3=jc(n-m); jg=jc1/(jc2*jc3); printf(The resulut is:%dn,jg); 有的同學(xué)在上機(jī)時(shí),輸入了書(shū)上第11頁(yè)例1-8的程序,發(fā)現(xiàn)編譯不能通過(guò),原因是這個(gè)程序有一個(gè)自定義函數(shù)mul(),這個(gè)自定義函數(shù)沒(méi)有寫(xiě)在main()函數(shù)的前面,而是寫(xiě)在main()的后面,main()函數(shù)
22、中的第4條語(yǔ)句調(diào)用mul()時(shí),因?yàn)樵诖饲皼](méi)有發(fā)現(xiàn)對(duì)它的定義,不知道這是一個(gè)什么東西,所以報(bào)錯(cuò)。 #include stdio.h main() int a,b,c;printf(input two number:);scanf(%d,%d,&a,&b);c=mul(a,b);printf(product=%dn,c); int mul(int a, int b) int c;c=a*b;return c; 解決的辦法是在main()函數(shù)前或是在main()函數(shù)中的聲明部分說(shuō)明它的函數(shù)形式。如下所示: #include stdio.h main() int a,b,c;int mul(int
23、a, int b);printf(input two number:);scanf(%d,%d,&a,&b);c=mul(a,b);printf(product=%dn,c); int mul(int a, int b) int c;c=a*b;return c; 或者如下所示: #include stdio.h int mul(int a, int b); main() int a,b,c;printf(input two number:);scanf(%d,%d,&a,&b);c=mul(a,b);printf(product=%dn,c); int mul(int a, int b) i
24、nt c;c=a*b;return c; 注意,在對(duì)函數(shù)的自變量進(jìn)行說(shuō)明時(shí),如果有多個(gè)參數(shù),每個(gè)參數(shù)的類(lèi)型都要分別說(shuō)明,即使是相鄰的兩個(gè)參數(shù)的類(lèi)型一樣,也要用兩個(gè)類(lèi)型說(shuō)明字說(shuō)明,而不能象定義變量時(shí)那樣,讓多個(gè)變量名字共用一個(gè)類(lèi)型說(shuō)明字。 前面講過(guò)C程序中的每一條語(yǔ)句后面都要用分號(hào)(;)作為結(jié)束符,但有的同學(xué)發(fā)現(xiàn)有些句子后面沒(méi)有分號(hào)。確實(shí)有這種情況,如main()函數(shù)語(yǔ)句行和#include 語(yǔ)句行都沒(méi)有用分號(hào)結(jié)尾。我們告訴大家,你記住三點(diǎn):(1)在以#號(hào)開(kāi)頭的語(yǔ)句后面一定不用分號(hào);(2)左大括號(hào)()的前面一條語(yǔ)句末尾,不要用分號(hào);(3)書(shū)中40頁(yè)中的9種控制語(yǔ)句中1、2、3、5條控制語(yǔ)句中的這
25、幾個(gè)詞(與其后緊跟的一對(duì)小括號(hào)在一起)后一般不要用分號(hào): if() else switch() while() 注:是while型循環(huán)的while(),不是dowhile型循環(huán)的while() for() 還有一條也要切記,程序代碼中所有的標(biāo)點(diǎn)符號(hào)都要求是英文的標(biāo)點(diǎn)符號(hào)(即所謂的半角標(biāo)點(diǎn)符號(hào),寬度占同樣字體字號(hào)的一個(gè)漢字的一半),如果用了中文的標(biāo)點(diǎn)符號(hào)(即所謂的全角標(biāo)點(diǎn)符號(hào),寬度與同樣字體字號(hào)的一個(gè)漢字相同) ,就會(huì)出錯(cuò)。5. 求一個(gè)任意的一元二次方程的根 程序1: #include #include main() double a,b,c,delta,x1,x2; printf(Please
26、 input the factor a,b,c:); scanf(%lf,%lf,%lf,&a,&b,&c); delta=b*b-4*a*c; if (delta=0) x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a); printf(has two real roots:%10.6f and %10.6fn,x1,x2); 程序2: #include #include main() double a,b,c,delta,x1,x2; printf(Please input the factor a,b,c:); scanf(%lf,%lf,
27、%lf,&a,&b,&c); delta=b*b-4*a*c; if (delta0) printf(has no real root); else x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a); printf(has two real roots:%10.6f and %10.6fn,x1,x2); 程序3: #include #include main() double a,b,c,delta,x1,x2; printf(Please input the factor a,b,c:); scanf(%lf,%lf,%lf,&a,&b,&
28、c); if (a=0) printf(is not a quadratic); else delta=b*b-4*a*c; if (delta=0) x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a); printf(has two real roots:%10.6f and %10.6fn,x1,x2); 程序4: #include #include main() double a,b,c,delta,x1,x2; printf(Please input the factor a,b,c:); scanf(%lf,%lf,%lf,&a,&b,
29、&c); if (abs(a)=0) printf(is not a quadratic); else delta=b*b-4*a*c; if (delta0) printf(has no real root); else x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a); printf(has two real roots:%10.6f and %10.6fn,x1,x2); 程序5: #include #include main() float a,b,c; double delta,x1,x2; printf(give factor a,
30、b,c for an unary quadratic equation:); scanf(%lf,%lf,%lf ,&a,&b,&c); if (abs(a)=1e-6) printf(is not a quadratic); else delta=b*b-4*a*c; if (abs(delta)1e-6) x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a); printf(distinct real roots:%10.6fand%10.6fn,x1,x2); else r=-b/(2*a); p=sqrt(-delta)/(2*a); pr
31、intf(has complex roots:n); printf(%8.4f+%8.4fin,r,p); printf(%8.4f-%8.4fin,r,p); 6. 求一組數(shù)中的最大數(shù) 程序1:由鍵盤(pán)輸入3個(gè)整數(shù),輸出其中最大的數(shù)。 #include main() int a,b,c,max; printf(Please input there integer to a,b,c:); scanf(%d %d %d,&a,&b,&c); max=a; if (maxb) max=b; if (maxc) max=c; printf(max=%dn,max); 程序2:由鍵盤(pán)輸入6個(gè)整數(shù),輸出其
32、中最大的數(shù)。 #include main() int a,b,c,d,e,f,max; printf(Please input there integer to a,b,c,d,e,f:); scanf(%d %d %d %d %d %d,&a,&b,&c,&d,&e,&f); max=a; if (maxb) max=b; if (maxc) max=c; if (maxd) max=d; if (maxe) max=e; if (maxf) max=f; printf(max=%dn,max); 程序3:由鍵盤(pán)輸入20個(gè)整數(shù),輸出其中最大的數(shù)。 #include main() int a5
33、0,n,j=1,max; printf(Please input the count of integers:); scanf(%d,&n); printf(Please input these integers:); while (j=n) scanf(%d,&aj+); max=a1;j=2; do if (maxaj) max= aj; while(j=n); printf(max=%dn,max); 程序4:輸入4個(gè)整數(shù)存入數(shù)組,將最大的數(shù)放在數(shù)組的最前面的一個(gè)元素中,其它的數(shù)保留在數(shù)組的其它元素中,其它數(shù)在數(shù)組中的位置可變。 #include main() int a50,n,j,t
34、,max; printf(Please input the count of integers:); scanf(%d,&n); printf(Please input these integers:); for (j=1;j=n;j+) scanf(%d,&aj); for (j=2;j=n;j+) if (a1aj) t=a1; a1=aj; aj=t; printf(max=%dn,max); 7. 為一個(gè)數(shù)值型的一維數(shù)組排序 程序1:比較交換法(也叫順序排序法 從大到小排序) #include #define N 6 main() int i,j,t,aN+1; printf(Inpu
35、t N numbers:n); for (i=1;i=N;i+) scanf(%d,&ai); printf(n); for (i=1;i=N-1;i+) for (j=i+1;j=N;j+) if (aiaj) t=ai;ai=aj;aj=t; printf(the sorted numbers:n); for (i=1;i=N;i+) printf(%3d,ai); 程序2:冒泡法(從小到大排序) #include #define N 6 main() int i,j,t,aN+1; printf(Input N numbers:n); for (i=1;i=N;i+) scanf(%d,
36、&ai); printf(n); for (i=1;i=N-1;i+) for (j=1;jaj+1) t=aj;aj=aj+1;aj+1=t; printf(the sorted numbers:n); for (i=1;i=N;i+) printf(%3d,ai); 程序3:選擇排序法(從大到小排序) #include #define N 6 main() int i,j,t,k,aN+1; printf(Input N numbers:n); for (i=1;i=N;i+) scanf(%d,&ai); printf(n); for (i=1;i=N-1;i+) k=i; for (j
37、=i+1;j=N;j+) if (akaj) k=j; if (k!=i) t=ai;ai=ak;ak=t; printf(the sorted numbers:n); for (i=1;i=N;i+) printf(%3d,ai); 第四講:第一類(lèi)題型的程序設(shè)計(jì) 1.編寫(xiě)程序,計(jì)算出2000到9000之間所有能同時(shí)被3、5和7整除的整數(shù)的平方根的和。保留3位小數(shù)。 #include stdio.h #include math.h main() double s=0; int n; for (n=2000; n=-100) s=s+(3*n+1)-(3*n+2)-(3*n+3); n=n+1;
38、 printf(The answer is %dn,s); 3.編寫(xiě)程序計(jì)算并輸出下面數(shù)列前n項(xiàng)的和,當(dāng)?shù)谝淮纬霈F(xiàn)和數(shù)的絕對(duì)值大于500時(shí)求和終止。 1*2*3,-2*3*4,3*4*5,-4*5*6, ,(-1)(n-1)*n*(n+1)*(n+2), (其中,表示冪運(yùn)算) #include stdio.h #include math.h main() int s=0; int n=1; do s=s+(pow(-1,(n-1)*n*(n+1)*(n+2); n=n+1; while (abs(s)=0.001) s=s+(double)a/(2*n-1); else break; prin
39、tf(The result is %10.3fn,s); 5.編寫(xiě)程序,求下面數(shù)列的和S,當(dāng)某項(xiàng)(即1/n!)的值小于0.001時(shí)求和終止并輸出s,該項(xiàng)參入求和。結(jié)果取3位小數(shù)。 1/1!,1/2!,1/3!,1/n!,(其中,!表示求階乘) #include stdio.h #include math.h main() float s=0; int n=1; float w=1; do w=w*n; s=s+1/w; n=n+1; while (1/w=0.001); printf(The result is %10.3fn,s); 6.編寫(xiě)程序,計(jì)算下面數(shù)列的和,當(dāng)?shù)谝淮纬霈F(xiàn)的和值能被7整
40、除時(shí)求和終止,輸出終止時(shí)是第幾項(xiàng)以及求和的結(jié)果是多少。 1*3,-3*5,5*7,-7*9,9*11, #include stdio.h #include math.h main() int i=3,m=3,s=0; while (21) s=s+m; if (s%7=0) break; m=(-1*m*(i+2)/(i-2); i=i+2; printf(The end item is %dth, the sum is %d.,(i-1)/2,s); 7.設(shè)計(jì)一個(gè)子函數(shù):能產(chǎn)生Fibonacci序列的第i個(gè)數(shù)。用主函數(shù)調(diào)用這個(gè)函數(shù)并完成下列任務(wù):找出所有出現(xiàn)在15,35范圍內(nèi)是奇數(shù)的Fibo
41、nacci數(shù),統(tǒng)計(jì)這些奇數(shù)的個(gè)數(shù)。(Fibonacci序列數(shù)的規(guī)則:前兩項(xiàng)均為1,從第3項(xiàng)開(kāi)始,每一項(xiàng)均為其前兩項(xiàng)的和,即1、1、2、3、5、8、13、21、.) #include stdio.h int fb(int i); void main() int j=1,m,count=0;m=fb(j);while (m=15)&(m%2)=1) count=count+1;j=j+1;m=fb(j);printf(The count of matched fibonacci is %dn,count); 子函數(shù)1: int fb(int i) int k,rv,rv1,rv2;if (i=1
42、| i=2) rv=1 ; elserv1=1;rv2=1;for (k=3; k0.0001) x=gx; gx=sqrt(1.0+x*x)/2; printf(The root is %f,x); 2.編寫(xiě)程序,用牛頓切線法求方程f(x)=2x+sinx-2.45=0在區(qū)間0,5上的近似實(shí)根r,迭代初值自選,精確到0.0001。提示:牛頓切線法的計(jì)算公式為x=x-f(x)/f(x)。 #include stdio.h #include math.h main() double x,fx,dfx; printf(Please input the initial x value:); scan
43、f(%lf,&x); do fx=2*x+sin(x)-2.45; dfx=2+cos(x); x=x-fx/dfx; fx=2*x+sin(x)-2.45; while (fabs(fx)1e-4); printf(The root is:%f n,x); 3. 設(shè)計(jì)一個(gè)函數(shù):判定任意正整數(shù)是否是素?cái)?shù)。在主函數(shù)中調(diào)用這個(gè)函數(shù)并完成下列任務(wù):(1)統(tǒng)計(jì)1500,2500范圍內(nèi)的素?cái)?shù)的個(gè)數(shù)m;(2)統(tǒng)計(jì)2500,3500范圍內(nèi)的素?cái)?shù)的個(gè)數(shù)n;(3)輸出m,n范圍內(nèi)的所有素?cái)?shù)的平均值。(素?cái)?shù):只能被1和其自身整除的正整數(shù),包括2,但不包括1) #include stdio.h #include m
44、ath.h int isprime(unsigned int number1) int i; if number1=1 return 0; if number1=2 return 1; for (i=2; i=sqrt(number1); i+) if (number1 % i = 0) return 0 ; return 1; main() int m=0,n=0,j,k=0,s=0; for (j=1500; j=2500; j+)if (isprime(j) m+; printf(The count of prime from 1500 and 2500 is %d.n,m); for
45、(j=2500; j=3500; j+)if (isprime(j) n+; printf(The count of prime from 2500 and 3500 is %d.n,n); for (j=m; j=n; j+) if (isprime(j) k+; s+=j; printf(The average value of the primes from %d and %d is %f.n,m,n,(float)s/k); 4. 設(shè)計(jì)一個(gè)函數(shù):判定任意正整數(shù)是否是絕對(duì)素?cái)?shù)。在主函數(shù)中調(diào)用這個(gè)函數(shù)并完成下列任務(wù):輸出10,99范圍內(nèi)的所有絕對(duì)素?cái)?shù)的個(gè)數(shù)。 (一個(gè)素?cái)?shù),當(dāng)它的數(shù)字位置對(duì)換
46、以后仍為素?cái)?shù),這樣的數(shù)被稱(chēng)為絕對(duì)素?cái)?shù)) #include stdio.h #include math.h int isabsprime(unsigned int number1) int i,number2; if (number1=1) return 0; if (number1=2) return 1; for (i=2; i=sqrt(number1); i+) if (number1 % i = 0) return 0 ; number2=(number1%10)*10+number1/10; for (i=2; i=sqrt(number2); i+) if (number2 % i
47、 = 0) return 0 ; return 1; main() int j,k=0; for (j=10; j=99; j+)if (isabsprime(j) k+; printf(The number of abstract prime between 10 and 99 is %5d.n,k); isabsprime()函數(shù)的另一種寫(xiě)法 int isabsprime(unsigned int number1) int i,number2=0; if (number1=1) return 0; if (number1=2) return 1; for (i=2; i0); for (i
48、=2; i=sqrt(number2); i+) if (number2 % i = 0) return 0 ; return 1; 5. 編寫(xiě)程序,用梯形法求一元函數(shù)f(x)=ln(x+1)+x/3(其中l(wèi)n為自然對(duì)數(shù)),在區(qū)間1,4上的積分近似值S,保留3位小數(shù)(小區(qū)間數(shù)n=20,此參數(shù)不能改動(dòng),否則影響答案)。程序1:#include stdio.h #include math.h void main() int n; double x1=1,x2,fx1,fx2,s=0,h; h=(4-1)/20.0; for (n=1;n20;n+) fx1=log(x1+1)+x1/3; x2=x
49、1+h; fx2=log(x2+1)+x2/3; s=s+(fx1+fx2)*h/2; x1=x2; printf(The result is: %.3fn,s); 程序2: #include stdio.h #include math.h void main() int n;double fx1,fx2,fx,s=0,x=1;for (n=1;n20;n+)fx1=log(x+n*(4-1)/20+1);fx2=(x+n*(4-1)/20)/3;fx=fx1+fx2;s=s+fx;s=s+(log(1+1)+1/3+log(4+1)+4/3)/2;s=s*(4-1)/20;printf(Th
50、e result is: %.3fn,s); 6. 編寫(xiě)程序,用矩形法求f(x)=sin(2x)+2x2-3,在區(qū)間0,3.1416上的積分近似值S,保留3位小數(shù)(小區(qū)間數(shù)n=25,此參數(shù)不能改動(dòng),否則影響答案)。 #include stdio.h #include math.h void main() int n;double h,fx,s=0,x=0;h=(3.1416-0)/25;for (n=1;nj) g=j;else g=i;for (k=2;kj) k=i; else k=j;for (p=i*j;p=k;p-)if (p%i=0)&(p%j=0) t=p;return t; 9
51、. 編程,按要求輸出下列三角形(要求用循環(huán)實(shí)現(xiàn)) D D D D D D D C C C C C B B B A #include main() int i,j;char c= D;for (i=1;i=4;i+)for (j=1;j=9-2*i;j+) printf(%c ,c);printf(n);c=c-1; 10. 編寫(xiě)一個(gè)能夠計(jì)算二維數(shù)組各元素和的函數(shù)。編寫(xiě)主程序調(diào)用以上過(guò)程,對(duì)于已知數(shù)組A(數(shù)據(jù)附后),輸出其各元素之和的平均值。(結(jié)果保留到小數(shù)點(diǎn)后兩位) A數(shù)組的數(shù)據(jù): 33, 41, 53, 63 16, 32, 91, 70 42, 28, 42, 26 82,22,14,56
52、 #include double getsum(double array144) int m,n;double sum1=0;for (m=0;m4;m+)for (n=0;n4;n+) sum1=sum1+array1mn;return sum1; void main() double a144=33,41,53,63,16,32,91,70,42,28,42,26,82,22,14,56; double av1; av1=getsum(a1)/(4*4); printf(The average value of the array is %.2f n,av1); 另一個(gè)程序: #inclu
53、de double getsum(double * array1,int i,int j) int m,n;double sum1=0;for (m=0;mi;m+) for (n=0;nj;n+) sum1=sum1+*(array1+n+m*i);return sum1; void main() double a144=33,41,53,63,16,32,91,70,42,28,42,26,82,22,14,56; double * ap1; double av1; ap1=&a100; av1=getsum(ap1,4,4)/(4*4); printf(The average value
54、 of the array is %.2f n,av1); 11. 編寫(xiě)一個(gè)通用過(guò)程(函數(shù)或子程序),該過(guò)程可實(shí)現(xiàn)求二維整型數(shù)組(NN結(jié)構(gòu))的下三角各元素的平方根的和。編寫(xiě)主程序調(diào)用該過(guò)程,計(jì)算數(shù)組A的下三角元素的平方根的和,要求保留6位小數(shù)。 A數(shù)組的數(shù)據(jù): 2345567334 34748554764 5698568967 9854831259 9887744862 右下數(shù)組中0元素區(qū)即為下三角。 12540 34700 83000 60000 00 0 00 #include #include double getsum(double * array1,int i,int j) int
55、m,n;double sum1=0;for (m=0;mi;m+)for (n=j-m-1;nj;n+)sum1=sum1+sqrt(*(array1+n+m*i);return sum1; void main() double a155=23,45,56,73,34,34,74,85,54,764,56,98,56,89,67,98,54,83,12,59,98,87,74,48,62; double * ap1; double av1; ap1=&a100; av1=getsum(ap1,5,5)/(1+5)*5/2); printf(The result is %.6f n,av1); 12. 編寫(xiě)一個(gè)能夠計(jì)算二維數(shù)組所對(duì)應(yīng)矩陣的轉(zhuǎn)置矩陣的通用子函數(shù)。編寫(xiě)主程序調(diào)用以上子函數(shù),對(duì)于已知數(shù)組A(數(shù)據(jù)附后),輸出其對(duì)應(yīng)矩陣的轉(zhuǎn)置矩陣。A數(shù)組的數(shù)據(jù)如下:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 批量設(shè)備采購(gòu)合同
- 廉潔合同的終止與解除
- 個(gè)人安全共同守護(hù)
- 挖掘機(jī)使用合同文本
- 通風(fēng)與空調(diào)工程勞務(wù)分包契約
- 銷(xiāo)售合同必要
- 房地產(chǎn)中介合同范本
- 積極進(jìn)取上學(xué)保證書(shū)
- 標(biāo)準(zhǔn)化的民間借款合同
- 負(fù)責(zé)任的倉(cāng)庫(kù)保管承諾
- 天津市河?xùn)|區(qū)2022-2023學(xué)年七年級(jí)上學(xué)期期末地理試題
- JT-T-860.2-2013瀝青混合料改性添加劑第2部分:高黏度添加劑
- 江蘇開(kāi)放大學(xué)本科財(cái)務(wù)管理專(zhuān)業(yè)060111馬克思主義基本原理期末試卷
- 2024年4月自考00155中級(jí)財(cái)務(wù)會(huì)計(jì)試題及答案
- 商務(wù)英語(yǔ)寫(xiě)作1(山東聯(lián)盟)智慧樹(shù)知到期末考試答案章節(jié)答案2024年山東管理學(xué)院
- 細(xì)胞生物學(xué)智慧樹(shù)知到期末考試答案章節(jié)答案2024年中南民族大學(xué)
- 2024中國(guó)留學(xué)生歸國(guó)求職洞察報(bào)告
- 2024年全國(guó)人才流動(dòng)中心招聘事業(yè)編制人員3人歷年公開(kāi)引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(kù)(共500題)答案詳解版
- 中班音樂(lè)《小看戲》課件
- 電大財(cái)務(wù)大數(shù)據(jù)分析編程作業(yè)2
- 葡萄糖醛酸在藥物開(kāi)發(fā)中的應(yīng)用
評(píng)論
0/150
提交評(píng)論