[IT認證]河南二級C語言培訓(xùn)課件_第1頁
[IT認證]河南二級C語言培訓(xùn)課件_第2頁
[IT認證]河南二級C語言培訓(xùn)課件_第3頁
[IT認證]河南二級C語言培訓(xùn)課件_第4頁
[IT認證]河南二級C語言培訓(xùn)課件_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、河南省計算機等級考試二級C培訓(xùn)講義yoyo電腦培訓(xùn)第一講:了解HNCRE-2C 河南省計算機等級考試中的二級C語言考試采用機試的形式,內(nèi)容包括二大部分:基礎(chǔ)知識部分和C語言部分,總分100分。基礎(chǔ)知識占30分,題型為選擇題,共30題,每題1分。C語言部分占70分,題型為編寫程序題,其中第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è)計方面的題。因

2、為我們的教材沒有講可視化設(shè)計方面的內(nèi)容,所以我們一般不選這個題;當(dāng)然,同學(xué)如果對可視化很有興趣,而且也掌握了這方面的知識和編程技術(shù),也可以選這個題。如果4個編程題都做了,只計算前3道編程題的分值。基礎(chǔ)知識的題一般同學(xué)最少也能拿到15分,而編程題則要求較嚴,要求程序必須能順利運行而且結(jié)果正確。我們的培訓(xùn)班緊扣編程題的內(nèi)容,仔細講解這些題的編寫方法,力求同學(xué)都能過關(guān)。1. 與數(shù)列有關(guān)的題 數(shù)列就是一組排列有序,變化有規(guī)律的數(shù)據(jù)。我們在數(shù)學(xué)中學(xué)過的等比數(shù)列、等差數(shù)列,以及我們前面講過的斐波拉契數(shù)列都是典型數(shù)列。對于有關(guān)數(shù)列的題目,關(guān)鍵在于發(fā)現(xiàn)數(shù)列變化的規(guī)律,以及找到用C語言的語句體現(xiàn)這種變化規(guī)律的方

3、法。 例:編程序,計算并輸出下面數(shù)列前n項的和(設(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. 求方程根、求積分值等計算方面的題 例:在給定程序中,函數(shù)fun和funx的功能是用二分法求解方程2x3-4x2+3x

4、-6=0的一個根,并要求絕對誤差不超過0.001。例如:給m輸入-100,給n輸入90,則函數(shù)求得一個根值為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”(右擊,選擇“目標另存為”)中共有500個記錄,每個記錄是用以下格式表示的5項數(shù)據(jù)(各數(shù)據(jù)間以空格分開):學(xué)號姓名機試成績筆試成績平時成績nnnnnnnnnccccccnnnnnn (說明:n表示整型;c表示字符型;n的個數(shù)表示數(shù)據(jù)位數(shù)

6、,例如nn表示兩位整數(shù),c的個數(shù)表示字符位數(shù)) 求出前100人的筆試的平均成績。 程序如下: #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源程序文件的建立 打開Microsoft Visual C+ 6.0(簡稱VC6.0)的開發(fā)環(huán)境窗口,選用File(文件)菜單下

8、的New(新建)菜單項,這樣會打開一個New(新建)對話框,選擇其中的Files(文件)標簽頁,然后在該標簽頁左邊的文件類型列表中選中C+ Source File(C+源程序文件),并在右邊的File(文件名)輸入框中,輸入所要創(chuàng)建的程序文件的基本名和擴展名(.c或.cpp ),其中的擴展名(.c或.cpp)可以不輸入,VC6.0的開發(fā)環(huán)境會自動在其后加上“.cpp”這一擴展名。對于我們的考試范圍而言,.c和.cpp并沒有什么區(qū)別,但因為我們考的是二級c,而不是二級c+。所以好象用.c合適些。如果你想省事,讓系統(tǒng)在源程序文件主名后加上.cpp的擴展名,也什么錯。在文件名輸入框下面的Locati

9、on:(位置)輸入框中可以查看和改變所建立的程序文第二講:熟悉考試的軟件環(huán)境Microsoft Visual C+ 6.0件在電腦上的存放位置,還可以用該輸入框右邊的“省略號”按鈕選擇另一個位置來存放所要建立的程序。指定了文件的名稱和位置后,按下該對話框最下邊的OK(確定)按鈕,光標就進入VC6.0開發(fā)環(huán)境主窗口右邊的程序代碼輸入、編輯區(qū)域(主區(qū)域),你可以在這里將你所寫的程序代碼逐字逐行地輸入。 如果有一個已經(jīng)存在的C語言源程序文件,我們可以用“我的電腦”這一工具程序或“資源管理器”這一工具程序找到這個文件,雙擊它,就能在VC6.0的開發(fā)環(huán)境下的程序代碼輸入編輯區(qū)域(主區(qū)域)中打開它,并可以

10、進行修改、編輯、鏈接、運行。 如果VC6.0的開發(fā)環(huán)境已經(jīng)打開,我們還可以用其File(文件)菜單下的Open(打開)菜單項來打開一個“打開”對話框,并通過這一對話框打開一個機器上已有的文件。 無論是輸入了一個新程序文件的內(nèi)容,還是修改了一個舊程序文件的內(nèi)容后,都可以用菜單項或工具條上的按鈕來保存程序的內(nèi)容。或者是使用File(文件)菜單上的Save as(另存為)菜單項用一個另外的文件名稱來保存你所輸入或修改的程序。但一般情況下,我們無論是輸入了一個新文件的內(nèi)容還是修改了一個舊文件的內(nèi)容,我們都會先看看,這個程序能不能運行,運行結(jié)果對不對。這樣的話,我們就會對源程序文件進行編譯、鏈接、運行。

11、而在這個過程中,系統(tǒng)會對你的源程序文件進行保存。所以一個源程序文件運行通過后,其內(nèi)容已經(jīng)保存在電腦的盤上了。2. C程序文件的編譯、鏈接、運行 在輸入完一個新的程序文件的代碼或修改好一個舊的程序文件的代碼后,我們使用Build(創(chuàng)建)菜單下的Compile (編譯 某文件)菜單項來編譯它,編譯一個源程序時,VC6.0很可能會顯示一個這樣的提示框。這是系統(tǒng)告訴你要編譯一個源程序文件,這個源程序文件一定要在一個活動的項目或工程的工作空間中,而你還沒有為你的程序文件建立一個項目工作空間,所以系統(tǒng)要為你建立一個項目工作空間,問你愿意嗎,我們當(dāng)然選“是(Y)”以便系統(tǒng)為我們建立這個工作空間。如果是對一個

12、新程序文件的代碼進行編譯或是對一個已經(jīng)被改過的舊程序文件的代碼進行編譯,系統(tǒng)會顯示如下的信息框,問你是否要保存文件。 我們選“是(Y)”進行保存。如果程序代碼沒有語法錯誤,編譯就會順利通過,在VC6.0開發(fā)環(huán)境的左下邊顯示 XXXXXXX.obj - 0 error(s) 0 warning(s). 這里的“XXXXXXX”代表文件的基本名,它會與你給程序文件所起的基本名一致。而“.obj”是編譯后形成的一種不同于.c或.cpp的文件類型,我們稱之為目標代碼。目標代碼仍然不能直接運行,接下來我們使用Build(創(chuàng)建)菜單下的Build (鏈接 某文件)將目標代碼鏈接為可執(zhí)行文件。如果不出現(xiàn)錯誤

13、,鏈接通過后,VC6.0開發(fā)環(huán)境的左下邊顯示 XXXXXXX.exe - 0 error(s) 0 warning(s). 這里的“XXXXXXX”代表文件的基本名,它會與你給程序文件所起的基本名一致。而.exe就代表可執(zhí)行文件這種文件類型。最后,我們用Build(創(chuàng)建)菜單下的Execute (執(zhí)行 某文件)來執(zhí)行我們的程序。如果順利的話,我們會看到一個黑底色的窗口。其中顯示了我們想要看的內(nèi)容。 如果程序沒有錯誤,可以不一步一步地發(fā)指令進行編譯、鏈接、運行。也可使用“創(chuàng)建”菜單中的“運行”菜單項或工具欄中的運行圖標/快捷方式(?。┳屜到y(tǒng)自動連續(xù)地完成這三個步驟。3. C程序文件的調(diào)試 如果程

14、序代碼有錯誤,編譯就不能通過,在VC6.0開發(fā)環(huán)境的左下邊顯示 XXXXXXX.obj - n error(s) m warning(s). 表示機器發(fā)現(xiàn)了n個嚴重錯誤,m個不太嚴重的警告性的錯誤。如下圖所示: 其中error型的嚴重錯誤是必須改正的。我們將光標指向出錯提示信息處,閱讀出錯的大致原因,然后用光標雙擊錯誤文字行,系統(tǒng)就會在代碼輸入、編輯區(qū)域中出錯行的左邊顯示一個出錯標志,指示你進行修改。 大家在編譯和鏈接時發(fā)現(xiàn)的錯誤通常是語法錯誤,例如句尾缺了分號或變量沒有定義就給它賦值就會在編譯是被系統(tǒng)告知出錯,如果一個工程的工作空間里有兩個main()函數(shù),在鏈接時也會被VC告知有錯誤。一般

15、來說,語法錯誤相對好查找、糾正一些,因為VC有錯誤提示信息顯示在開發(fā)環(huán)境的下面。 另一類錯誤是語意錯誤或稱之為邏輯錯誤,是程序的算法不能滿足題目或任務(wù)的要求而產(chǎn)生的錯誤。如程序中出現(xiàn)了一個無限次執(zhí)行的循環(huán)體,或者是數(shù)學(xué)公式在輸入、編輯時寫錯了(比如把求圓的面積的公式3.14*r*r寫成了2*3.14*r),都會造成程序運行的結(jié)果不對。這種錯誤一般比較難定位和糾正,通常是通過仔細閱讀程序來找出出錯的原因并進行修正。 在調(diào)試程序時,如果懷疑某條語句是否必要,可能想把這條語句刪除掉以后,再試著運行一下程序。我們建議你不要直接在代碼中徹底刪掉它,如果這樣的話,假設(shè)這條語句不能少,我們還得重新輸入進出,

16、一個好的方法是先把它注釋掉。這樣在執(zhí)行時就不把它當(dāng)作一條可執(zhí)行的語句去執(zhí)行了,如果后來發(fā)現(xiàn)這條語句還得要,我們把注釋標志去掉即可。當(dāng)然,如果發(fā)現(xiàn)這條語句確實是多余,就可以把它徹底刪掉了。 在C程序中加注釋的方法有兩種,一種是在一行的行首加“/”,這種方式只能使其所在的一行成為注釋。還有一種方法是用“/*”和“*/”這兩個定界符把任意位置、任意長度的內(nèi)容變成注釋。 我們對程序代碼進行修改后,重新進行編譯、鏈接、運行。直到得到較滿意的結(jié)果。4. 編寫、運行多個程序時的注意事項 編寫、調(diào)試、運行好一個程序后,請先使用“文件”菜單下的“保存”菜單項予以保存。然后,使用“文件”菜單下的“關(guān)閉工作空間”,

17、將其所在項目工作空間關(guān)閉。接下來再使用“文件”菜單下的“新建”菜單項新建一個C+ source file。否則,兩個或多個程序文件的多個main()函數(shù)混在一個項目的工作空間中,會使你無法生成新程序的exe文件。 如果不小心將多個程序的多個main()函數(shù)混寫在一個項目中,在組建.exe文件時出現(xiàn)錯誤:_main already defined in XXX.obj。這時可以用以下方法解決它們之間的沖突: a.在VC開發(fā)環(huán)境窗口的左邊有一個工作空間觀察框,逐步點開其中的分枝結(jié)點,你會看到多個main()函數(shù)。 b.使用“工程”菜單下的“設(shè)置”菜單項,打開“工程設(shè)置”(Project setti

18、ngs)對話框,點開左邊列表框中的分枝結(jié)點,找到此前已經(jīng)調(diào)好和運行過的程序,選中它,再在右邊的常規(guī)標簽頁中點選“組建時排除文件X”可選項,單擊“確定”按鈕。這樣在組建.exe文件時就不包含其中的內(nèi)容,如果在工程中有多個在組建.exe文件時不想包含其內(nèi)容的文件,可以按上述步驟一一排除它們。這樣就能在組建.exe文件避免出現(xiàn)前述的錯誤了。5.使用scanf()函數(shù)的有關(guān)注意事項 在scanf()函數(shù)的格式串(第一個參數(shù))中,不能使用“n”要求光標換行;否則,輸入數(shù)據(jù)后按回車鍵無法返回程序繼續(xù)執(zhí)行。另外在格式串中使用%f或%lf格式符時不能指定實型數(shù)或雙精度數(shù)的精度,即不能使用形如%7.2f這樣的格

19、式符要求小數(shù)點后輸入兩位小數(shù);但是可以指定實型數(shù)在輸入時所占的總寬度(字符數(shù)),比如使用%7f是正確的。 在調(diào)試程序時,當(dāng)黃箭頭指向scanf()語句,使用Step Over方式執(zhí)行該語句時,會發(fā)現(xiàn)黃箭頭并不向下移動,這是因為scanf()語句執(zhí)行時,等著用戶到那個黑底色的窗口去輸入數(shù)據(jù),所以要點開黑底的窗口,在那里進行輸入,回車后才能回到調(diào)試界面接著進行調(diào)試。當(dāng)你不想再調(diào)試下去時,可以使用Stop Debuging菜單項/按鈕結(jié)束調(diào)試,回到對程序進行編輯的界面。第三講:從最簡單的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. 輸入一個任意正整數(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é)在上機時,輸入了書上第11頁例1-8的程序,發(fā)現(xiàn)編譯不能通過,原因是這個程序有一個自定義函數(shù)mul(),這個自定義函數(shù)沒有寫在main()函數(shù)的前面,而是寫在main()的后面,main()函數(shù)

22、中的第4條語句調(diào)用mul()時,因為在此前沒有發(fā)現(xiàn)對它的定義,不知道這是一個什么東西,所以報錯。 #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ù)中的聲明部分說明它的函數(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; 注意,在對函數(shù)的自變量進行說明時,如果有多個參數(shù),每個參數(shù)的類型都要分別說明,即使是相鄰的兩個參數(shù)的類型一樣,也要用兩個類型說明字說明,而不能象定義變量時那樣,讓多個變量名字共用一個類型說明字。 前面講過C程序中的每一條語句后面都要用分號(;)作為結(jié)束符,但有的同學(xué)發(fā)現(xiàn)有些句子后面沒有分號。確實有這種情況,如main()函數(shù)語句行和#include 語句行都沒有用分號結(jié)尾。我們告訴大家,你記住三點:(1)在以#號開頭的語句后面一定不用分號;(2)左大括號()的前面一條語句末尾,不要用分號;(3)書中40頁中的9種控制語句中1、2、3、5條控制語句中的這

25、幾個詞(與其后緊跟的一對小括號在一起)后一般不要用分號: if() else switch() while() 注:是while型循環(huán)的while(),不是dowhile型循環(huán)的while() for() 還有一條也要切記,程序代碼中所有的標點符號都要求是英文的標點符號(即所謂的半角標點符號,寬度占同樣字體字號的一個漢字的一半),如果用了中文的標點符號(即所謂的全角標點符號,寬度與同樣字體字號的一個漢字相同) ,就會出錯。5. 求一個任意的一元二次方程的根 程序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:由鍵盤輸入3個整數(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:由鍵盤輸入6個整數(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:由鍵盤輸入20個整數(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個整數(shù)存入數(shù)組,將最大的數(shù)放在數(shù)組的最前面的一個元素中,其它的數(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. 為一個數(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); 第四講:第一類題型的程序設(shè)計 1.編寫程序,計算出2000到9000之間所有能同時被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.編寫程序計算并輸出下面數(shù)列前n項的和,當(dāng)?shù)谝淮纬霈F(xiàn)和數(shù)的絕對值大于500時求和終止。 1*2*3,-2*3*4,3*4*5,-4*5*6, ,(-1)(n-1)*n*(n+1)*(n+2), (其中,表示冪運算) #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.編寫程序,求下面數(shù)列的和S,當(dāng)某項(即1/n!)的值小于0.001時求和終止并輸出s,該項參入求和。結(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.編寫程序,計算下面數(shù)列的和,當(dāng)?shù)谝淮纬霈F(xiàn)的和值能被7整

40、除時求和終止,輸出終止時是第幾項以及求和的結(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è)計一個子函數(shù):能產(chǎn)生Fibonacci序列的第i個數(shù)。用主函數(shù)調(diào)用這個函數(shù)并完成下列任務(wù):找出所有出現(xiàn)在15,35范圍內(nèi)是奇數(shù)的Fibo

41、nacci數(shù),統(tǒng)計這些奇數(shù)的個數(shù)。(Fibonacci序列數(shù)的規(guī)則:前兩項均為1,從第3項開始,每一項均為其前兩項的和,即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.編寫程序,用牛頓切線法求方程f(x)=2x+sinx-2.45=0在區(qū)間0,5上的近似實根r,迭代初值自選,精確到0.0001。提示:牛頓切線法的計算公式為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è)計一個函數(shù):判定任意正整數(shù)是否是素數(shù)。在主函數(shù)中調(diào)用這個函數(shù)并完成下列任務(wù):(1)統(tǒng)計1500,2500范圍內(nèi)的素數(shù)的個數(shù)m;(2)統(tǒng)計2500,3500范圍內(nèi)的素數(shù)的個數(shù)n;(3)輸出m,n范圍內(nèi)的所有素數(shù)的平均值。(素數(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è)計一個函數(shù):判定任意正整數(shù)是否是絕對素數(shù)。在主函數(shù)中調(diào)用這個函數(shù)并完成下列任務(wù):輸出10,99范圍內(nèi)的所有絕對素數(shù)的個數(shù)。 (一個素數(shù),當(dāng)它的數(shù)字位置對換

46、以后仍為素數(shù),這樣的數(shù)被稱為絕對素數(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ù)的另一種寫法 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. 編寫程序,用梯形法求一元函數(shù)f(x)=ln(x+1)+x/3(其中l(wèi)n為自然對數(shù)),在區(qū)間1,4上的積分近似值S,保留3位小數(shù)(小區(qū)間數(shù)n=20,此參數(shù)不能改動,否則影響答案)。程序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. 編寫程序,用矩形法求f(x)=sin(2x)+2x2-3,在區(qū)間0,3.1416上的積分近似值S,保留3位小數(shù)(小區(qū)間數(shù)n=25,此參數(shù)不能改動,否則影響答案)。 #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)實現(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. 編寫一個能夠計算二維數(shù)組各元素和的函數(shù)。編寫主程序調(diào)用以上過程,對于已知數(shù)組A(數(shù)據(jù)附后),輸出其各元素之和的平均值。(結(jié)果保留到小數(shù)點后兩位) 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); 另一個程序: #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. 編寫一個通用過程(函數(shù)或子程序),該過程可實現(xiàn)求二維整型數(shù)組(NN結(jié)構(gòu))的下三角各元素的平方根的和。編寫主程序調(diào)用該過程,計算數(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. 編寫一個能夠計算二維數(shù)組所對應(yīng)矩陣的轉(zhuǎn)置矩陣的通用子函數(shù)。編寫主程序調(diào)用以上子函數(shù),對于已知數(shù)組A(數(shù)據(jù)附后),輸出其對應(yīng)矩陣的轉(zhuǎn)置矩陣。A數(shù)組的數(shù)據(jù)如下:

溫馨提示

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

評論

0/150

提交評論