版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGEPAGE71C程序設(shè)計基礎(chǔ)上機(jī)實驗指導(dǎo)書李文杰、李桂芝、魚濤編寫楊根興審定北京機(jī)械工業(yè)學(xué)院計算中心目次說明怎樣學(xué)習(xí)C語言實驗一C程序集成開發(fā)環(huán)境熟悉實驗二數(shù)據(jù)的輸入和輸出實驗三表達(dá)式的計算實驗四選擇結(jié)構(gòu)語句實驗五循環(huán)結(jié)構(gòu)語句實驗六數(shù)組應(yīng)用(一)實驗七數(shù)組應(yīng)用(二)實驗八函數(shù)及程序結(jié)構(gòu)(一)實驗九函數(shù)及程序結(jié)構(gòu)(二)實驗十指針的應(yīng)用說明C程序設(shè)計同其他程序設(shè)計一樣,使實踐性很強(qiáng)的課程。除了要聽好課,多看課外書外,還需大量的上機(jī)實踐才能更好地理解和掌握所學(xué)到的內(nèi)容。一般來說,上機(jī)和講課時間之比應(yīng)不少于1:1。但由于目前各校安排的教學(xué)時數(shù)限制,課內(nèi)時間將更多的精力用于講課上,課內(nèi)安排的上機(jī)時間相對較少,學(xué)生不要因此對上機(jī)的重要性有所誤解。學(xué)生應(yīng)在課外再花一定的時間進(jìn)行C語言的上機(jī)實踐,這樣才能學(xué)好該門課。上機(jī)實驗的目的有以下幾個方面:⑴驗證所編寫的程序的正確性。⑵進(jìn)一步理解教材和課堂授課中介紹的內(nèi)容⑶熟練地掌握C程序開發(fā)環(huán)境的使用,為今后開發(fā)大型軟件打好基礎(chǔ)。⑷學(xué)習(xí)和掌握一般程序的調(diào)試和測試方法。上機(jī)前應(yīng)充分做好以下準(zhǔn)備工作:⑴復(fù)習(xí)和掌握與本次實驗有關(guān)的教學(xué)內(nèi)容。⑵根據(jù)本次實驗的內(nèi)容,在紙上編寫好準(zhǔn)備上機(jī)調(diào)試的程序,并初步檢查無誤。⑶準(zhǔn)備好對程序進(jìn)行測試的數(shù)據(jù)。⑷對每種測試數(shù)據(jù),給出預(yù)期的程序運(yùn)行結(jié)果。⑸預(yù)習(xí)實驗步驟,對實驗步驟中提出的一些問題進(jìn)行思考。上機(jī)實驗后,應(yīng)及時寫出實驗報告,實驗報告應(yīng)包括以下內(nèi)容:⑴實驗?zāi)康暮蛢?nèi)容。⑵程序說明,包括程序結(jié)構(gòu)、各模塊的算法(N-S圖表示)。⑶打印出的調(diào)試正確的源程序。⑷打印出的程序運(yùn)行記錄(包括對不同測試數(shù)據(jù)的運(yùn)行結(jié)果)。⑸針對實驗步驟中提出的問題,寫出解決辦法及對運(yùn)行結(jié)果的分析。怎樣學(xué)習(xí)C語言很多同學(xué)對學(xué)習(xí)C語言感到很難,尤其是在各高校將C語言放在大學(xué)第一學(xué)年教學(xué)時經(jīng)常會考試不及格。究竟怎樣才能學(xué)好C語言?這里將我對C語言的理解給大家介紹一下,計算機(jī)語言挺枯燥的,如何提起興趣?首先要明確學(xué)習(xí)的目標(biāo),沒有明確的學(xué)習(xí)目標(biāo)就沒有學(xué)習(xí)動力。給自己定一個目標(biāo),比如這次一定通過課程考試,或者這個月學(xué)習(xí)完做個東西出來等等。其次,確定了目標(biāo)之后,要認(rèn)真去做,多上機(jī)操作實踐,遇到不懂的要多跟教師和其他同學(xué)交流,千萬不能放棄。當(dāng)自己編的一段小程序運(yùn)行通過,或攻下一道難題,自己就會獲得一種成就感,可能還會很興奮,也就漸漸有了興趣。最后,要把所學(xué)的知識運(yùn)用到實際問題當(dāng)中,這樣既可以鞏固所學(xué)的知識,不至于完學(xué)了就忘,還可以根據(jù)實際需要拓展知識面。這樣良性循環(huán),興趣也會越來越濃。學(xué)習(xí)計算機(jī)語言最好的方法是什么?答曰:讀程序。沒錯,讀程序是學(xué)習(xí)C語言入門最快,也是最好的方法。不要總是抱著書本逐行啃,而是學(xué)習(xí)它們的例程。學(xué)習(xí)完每一章,都要認(rèn)真體會這一章的所有概念,然后不放過這一章中提到的所有例程,仔細(xì)研讀程序,直到每一行都理解了,然后找?guī)讉€編程題目,最好是和例程類似的或一樣的,自己試圖寫出這段已經(jīng)讀懂的程序,不要以為例程你已經(jīng)讀懂了,你就可以寫出和它一樣的程序,絕對不一定,不相信你就試一試吧,如果寫不出來,也不要著急,回過頭來再繼續(xù)研究例程,想想自己為什么寫不出來,然后再去寫這段程序,反反復(fù)復(fù),直到你手到擒來為止。這一過程,就和我們學(xué)習(xí)任何其他語言比如英語和漢語一樣。我們大家都有體會,我們學(xué)習(xí)一門語言,都是從最基本的語法開始,然后學(xué)習(xí)一些字和詞,再來學(xué)習(xí)一些詞組或句子,然后再用詞組和句子組成一段話,表達(dá)一個簡單的意思,最后才是寫一篇文章或者是一本書,表達(dá)更復(fù)雜的思想。我們知道,在我們完成這一過程時,并不是像說得這么簡單。在我們能寫出一篇好的文章或者一本好書之前,我們可能需要閱讀大量的其他人寫的好文章或好書,有時我們還要把它們背下來;同樣的,在我們寫出一個好的程序或者軟件前,我們也需要閱讀大量的樣本例程或者軟件的源代碼,甚至要背一些好的程序代碼。寫程序的最高境界其實就是掌握各種解決問題的手段(數(shù)據(jù)結(jié)構(gòu))和解決問題的方法(算法)。?
那么怎樣才算精通程序設(shè)計呢?怎樣才能精通程序設(shè)計呢?舉個例子:你面前有10個人,找出一個叫“張三”的人,你該怎么辦?第一種方法:直接對這10個人問:“誰叫張三”。第2種方法:你挨個去問“你是不是張三?”,直到問到的這個人就是張三。第三種方法:你去挨個問一個人“你認(rèn)不認(rèn)識張三,指給我看”。不要小看這個問題,你說當(dāng)然會選第一種方法,沒錯恭喜你答對了,因為這個方法最快,效率最高,但是在程序設(shè)計中找到解決問題的最優(yōu)方法和你用的手段卻是考驗一個程序員程序設(shè)計水平的重要標(biāo)志,而且是不容易達(dá)到的。實驗一C程序集成開發(fā)環(huán)境熟悉一、實驗?zāi)康恼莆赵赩isualC++6.0集成開發(fā)環(huán)境下怎樣編輯、編譯、連接、執(zhí)行、修改和調(diào)試C語言程序。二、實驗內(nèi)容1.進(jìn)入可視化的C++6.0集成開發(fā)環(huán)境⑴啟動計算機(jī),進(jìn)入窗口環(huán)境操作界面。⑵鼠標(biāo)依次點擊“開始”→“程序”→“MicrosoftVisualStudio6.0”→“MicrosoftVisualC++6.0單擊此處來修改文件保存位置此處輸入源程序文件名⑶選擇“文件”(File)菜單中的“新建”(New)命令,在新建圖1單擊此處來修改文件保存位置此處輸入源程序文件名對話框中,選擇“文件”選項卡,再選擇“C++SourceFile”類型,按圖示操作后單擊對話框中的“確定”按鈕。(見圖1)⑷接著就會出現(xiàn)如圖2所示的VC界面。⑸在編輯窗口中,輸入如下內(nèi)容:#include"stdio.h"http://以上行對于本書中的例子沒有給出。望同學(xué)們對于所有的//程序都保留這樣一行。main(){ printf("Hello!這是我的FirstC程序.\n"); } ⑹選擇“編譯”菜單中的“編譯my_c1.cpp”命令,并在出現(xiàn)的對話框中選擇“是(Y)”結(jié)果如圖3。圖2編譯信息窗圖3編譯信息窗⑺選擇“編譯”菜單中的“構(gòu)件my_c1.exe”命令,構(gòu)建可執(zhí)行程序my_c1.exe,再選擇“編譯”菜單中的“!執(zhí)行my_c1.exe”命令。在出現(xiàn)的對話框中選擇“是(Y)”,結(jié)果屏幕如圖4所示。圖4圖中的黑色窗口為運(yùn)行結(jié)果窗口。按任意鍵就可返回編輯界面。⑻修改上述程序,將printf行括號中的雙引號去掉左邊的,重復(fù)⑹,可以看到圖5。其中的編譯信息窗顯示:鼠標(biāo)點擊滾動條,查看錯誤信息圖5鼠標(biāo)點擊滾動條,查看錯誤信息my_c1.obj-16error(s),1warning(s)可以看到由于一個雙引號的漏寫,導(dǎo)致出現(xiàn)16個語法錯誤,而實際上的錯誤只有一個,這是C編譯器的特點,當(dāng)它遇到錯誤時,會做出一些判斷或推測,有時這種推測判斷正確,有時也會錯誤。了解這一特點后,希望同學(xué)們在上機(jī)時,先去修改第一個錯誤,一般可以在修改一個錯誤后立即重新編譯,這樣可以快速減少錯誤的數(shù)目。下面請同學(xué)們用鼠標(biāo)點擊滾動條上的滑塊,查當(dāng)前錯誤所在的位置指示看第一條錯誤信息,并用鼠標(biāo)雙擊第一個錯誤信息。(圖6),當(dāng)前錯誤所在的位置指示錯誤的解釋錯誤所在的文件及行號圖6錯誤的解釋錯誤所在的文件及行號可以看到,C編譯器將Hello理解為了標(biāo)識符,而前面又沒有對Hello的說明,所以認(rèn)為它是未聲明的標(biāo)識符(undeclaredidentifier),這個錯誤在初學(xué)者的程序里非常多見,希望同學(xué)們記住它。將雙引號加上再重新編譯,就可恢復(fù)為無錯誤了。⑼修改上述程序,在#include“stdio.h”這一行的最左邊加兩個“/”,即使得這一行成為注釋(顯示為綠色),重復(fù)⑹,可以看到圖7所示的錯誤。相信同學(xué)們對其中的錯誤說明不難理解了,C編譯器說printf是未聲明的標(biāo)識符。原因是printf不是C語言的基本部分,它是定義在“stdio.h”中,這也就是我們?yōu)槭裁丛谇懊嬲f要在自己的程序前部加#include“stdio.h”的原因。⑽請先選擇“文件”菜單的“關(guān)閉工作區(qū)”命令,再按上面的步驟(3)~(5)操作將編輯窗口的程序更換為如下程序文本,依次引入下述錯誤,每引入一個錯誤,就對程序進(jìn)行編譯,記錄編譯器產(chǎn)生的錯誤信息,寫在實驗報告里。/*變量使用相關(guān)的語法問題*/#include"stdio.h"voidmain(){ inta=1,b=2,c=3;printf("Someoutput:%d%d%d\n",a,b,c,c);}①把第6行變量聲明語句的第一個逗號改為分號②把第7行printf()改為print()③去掉第7行中的第2個雙引號④把第7行中a,b,c,c改為a,b,c⑤去掉printf語句末尾的分號⑥去掉用于結(jié)束的花括號注意,在引入每一個錯誤并編譯后,開始引入下一個錯誤前將上一錯誤再改正。2.程序的調(diào)試手段作為程序員編寫程序,一個難以避免的工作就是對程序的調(diào)試。調(diào)試包括語法方面的,這一般通過編譯就可基本解決,比如在上述圖3中,細(xì)心的同學(xué)可能注意到在底部的編譯信息窗中,編譯報告中說:my_c1.obj-0error(s),1warning(s),意思是編譯過程中沒發(fā)現(xiàn)錯誤(0error(s)),但有一個不合規(guī)范的使用(1warning(s))。編程序應(yīng)最好是達(dá)到0error和0warning,但有時無法做到如此完美,只要達(dá)到0error就可以了。若不能做到0error,將不能產(chǎn)生機(jī)器語言程序,因而也就無法執(zhí)行程序。所以同學(xué)們在調(diào)試自己的程序時,必須是做到經(jīng)編譯后0error。好在編譯器對發(fā)現(xiàn)的錯誤都有一個比較正確的修改意見,同學(xué)們按意見修改后一般就可消除錯誤,只是修改意見是英文的,同學(xué)們需有一定的專業(yè)詞匯或者經(jīng)過一定時間與VC++的接觸,就可理解;另一類就是邏輯方面的,這類錯誤的消除相對麻煩。好在VC提供了非常豐富的調(diào)試手段,幫助我們分析錯誤,前提是程序已經(jīng)沒有語法錯誤,也就是說編譯已經(jīng)通過(0error(s))。下面我們了解一些常用的,為了便于說明,請先選擇“文件”菜單的“關(guān)閉工作區(qū)”命令,再按上面的步驟(3)~(5)操作將編輯窗口的程序更換為如下程序文本:#include"stdio.h"voidmain(){floati;floatsum;sum=1.0;i=2.0;while(i<=100){sum+=1/i;i=i+2;}printf("sum=%f\n",sum);}⑴打開調(diào)試器首先定位光標(biāo)到main函數(shù)的函數(shù)首部所在行,選“編譯”“開始調(diào)試”“Runtocursor”,出現(xiàn)如下圖8所示界面。在該界面中,“debug”菜單取代了“編譯”菜單。“debug”菜單的主要子菜單如下圖9。Go(去)………………連續(xù)執(zhí)行程序Restart……………不管程序運(yùn)行到何處,重新從頭開始執(zhí)行程序StopDebugging……停止調(diào)試器StepInto…………單步進(jìn)入語句內(nèi)執(zhí)行,如函數(shù)調(diào)用、復(fù)合語句內(nèi)等StepOver…………單步越過語句執(zhí)行,即一步執(zhí)行完函數(shù)調(diào)用或復(fù)合語句StepOut……………單步從語句的執(zhí)行中跳出。如從函數(shù)內(nèi)跳出或從復(fù)合語句中跳出。RuntoCursor……程序一次執(zhí)行到光標(biāo)所在位置暫停⑵在圖10左下角的小窗口中,可以觀察程序中用到的變量的取值情況。如果圖7程序中變量很多,可在右下角的窗口中設(shè)定一些特別關(guān)心的變量,并可設(shè)定幾組。例如,當(dāng)選擇了“stepinto”命令后,屏幕如下圖10所示,在重點變量觀察窗的Name列輸入i,然后單步執(zhí)行程序,觀察i的值Value變化情況。有關(guān)這方面的更多內(nèi)容,請參閱MicrosoftVisualC++6.0手冊。三、對上述實驗進(jìn)行總結(jié),將自己在這次實驗中所學(xué)到的C語言程序上機(jī)操作方法及步驟寫在實驗報告中。連續(xù)執(zhí)行程序連續(xù)執(zhí)行程序重新開始程序執(zhí)行單步進(jìn)入結(jié)構(gòu)內(nèi)執(zhí)行單步越過結(jié)構(gòu)執(zhí)行單步從結(jié)構(gòu)的執(zhí)行中跳出執(zhí)行到光標(biāo)處暫停停止調(diào)試器現(xiàn)有變量觀察窗重點變量觀察窗圖9圖10實驗二順序結(jié)構(gòu)程序設(shè)計一、實驗?zāi)康?.掌握scanf和printf的主要用法。2.掌握常用轉(zhuǎn)換控制符的用法。3.掌握賦值語句的用法。4.掌握算術(shù)運(yùn)算符的運(yùn)算規(guī)律。二、實驗內(nèi)容1.編輯如下程序并運(yùn)行,記錄程序的輸出結(jié)果,體會格式輸出的使用。#include"stdio.h"voidmain(){printf("%d\n",42);printf("%5d\n",42);printf("%f\n",123.45);printf("%12f\n",123.45);printf("%e\n",123.45);printf("%13e\n",123.45);printf("%g\n",123.45);printf("%8g\n",123.45);printf("%.5d\n",42);printf("%.0d\n",42);printf("%8.3f\n",123.45);printf("%8.1f\n",123.55);printf("%8.0f\n",123.55);printf("%g\n",123.56789);}2.編輯如下的程序,并上機(jī)運(yùn)行3次,在每次運(yùn)行提供輸入數(shù)據(jù)時分別采用數(shù)據(jù)之間插入空格、每輸入一個數(shù)據(jù)就按回車鍵、數(shù)據(jù)之間用TAB鍵分割,看結(jié)果有什么不同?#include"stdio.h"voidmain(){intx,y,t;printf("Enterx&y:\n");scanf("%d%d",&x,&y);printf("x=%dy=%d\n",x,y);t=x;x=y;y=t;printf("x=%dy=%d\n",x,y);}3.改錯題。下列程序多處有錯,請通過上機(jī)改正。使之符合下面的要求。#include"stdio.h"voidmain(){doublea,b,c,s,v;printf(Inputa,b,c:\n);scanf("%d%d%d",a,b,c);s=a*b;v=a*b*c;printf("a=%db=%dc=%d\n",a,b,c);printf("s=%f\n",s,"v=%d\n",v);}當(dāng)本程序運(yùn)行時,要求按如下方式顯示和輸入:Inputa,b,c:2.02.03.0(此處的2.02.03.0為用戶輸入的)a=2.000000b=2.000000c=3.000000s=4.000000v=12.0000004.編輯如下程序:/* 字符類型定義及使用*/#include"stdio.h"
voidmain()
{
charc1,c2;
c1='a';
c2=‘b’;
printf(“%c%c\n”,c1,c2);
}(1運(yùn)行此程序,記錄運(yùn)行結(jié)果。(2在最后增加一個語句:printf(“%d%d\n”,c1,c2);再運(yùn)行,并記錄分析結(jié)果。(3再將第5行charc1,c2;改為:intc1,c2;再使之運(yùn)行,并觀察記錄結(jié)果。(4再將第6、7行改為:
c1=a;/*不用單引號*/c2=b;再運(yùn)行,記錄分析其運(yùn)行結(jié)果。(5再將第6、7行改為:
c1=”a”;/*用雙引號*/
c2=”b”;再運(yùn)行,記錄分析其運(yùn)行結(jié)果。(6再將第6、7行改為:
c1=300;/*用大于255的整數(shù)*/c2=400;
再運(yùn)行,記錄分析其運(yùn)行結(jié)果。5.編輯如下程序:/* 自增自減運(yùn)算符*/#include"stdio.h"
voidmain()
{
inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}(1)運(yùn)行程序,記錄i、j、m、n各變量的值,分別作以下改動并運(yùn)行。
(2)將第7、8行改為下面所示,再運(yùn)行。
m=i++;
n=++j;記錄i、j、m、n各變量的值
(3)在(1)的基礎(chǔ)上,將printf語句改為:
printf(“%d,%d”,++i,++j);運(yùn)行程序,記錄i、j、m、n各變量的值。(4)再將printf語句改為:
printf(“%d,%d,%d,%d”,i,j,i++,j++);運(yùn)行程序,記錄i、j、m、n各變量的值。(5)再修改程序如下,運(yùn)行程序記錄i、j、m、n各變量的值。#include"stdio.h"
voidmain()
{
inti,j,m=0,n=0;
i=8;
j=10;
m+=i++;n-=--j;
printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);
}6.編程題。編寫程序,完成對于任意輸入的兩個整數(shù),求出它們的商和余數(shù)并進(jìn)行輸出。三、對上述實驗內(nèi)容進(jìn)行總結(jié),寫出實驗報告。實驗三表達(dá)式的計算一、實驗?zāi)康恼莆账阈g(shù)表達(dá)式、逗號表達(dá)式、賦值表達(dá)式的計算。特別注意運(yùn)算符%、/(整數(shù)的相除)、++和--運(yùn)算的規(guī)律。二、實驗內(nèi)容1.已知三角形的三邊a,b,c,求三角形面積的公式為:area=sqrt(s(s-a)(s-b)(s-c))其中:s=(a+b+c)/2,sqrt(x)表示x的平方根。要求編一程序,對任意輸入的a,b,c值,計算并輸出三角形的面積范圍。提示:sqrt是C的標(biāo)準(zhǔn)庫函數(shù),使用該函數(shù)應(yīng)將庫文件“math.h”包含到源文件中。另外注意三角形三邊的基本關(guān)系。2.對以下程序進(jìn)行分析,看程序的輸出結(jié)果應(yīng)是什么,然后上機(jī)運(yùn)行該程序看實際結(jié)果與你分析的有無不同,找出原因。#include"stdio.h"voidmain(){intx=1,y=2,t;floatm;t=x/y;m=x/y;printf("%d\t%8.3f\n",t,m);t=x/(float)y;m=x/(float)y;printf("%d\t%8.3f\n",t,m);t=(float)x/y;m=(float)x/y;printf("%d\t%8.3f\n",t,m);}3.編輯以下程序:對程序進(jìn)行分析,看程序的輸出結(jié)果在下列各種情況下應(yīng)是什么,然后上機(jī)運(yùn)行該程序看實際結(jié)果(寫在實驗報告里)與你分析的有無不同,找出原因。#include"stdio.h"voidmain(){intx,y,t;doublea;floatb;intc;scanf(“%d%d”,&x,&y);c=b=a=20/3;t=(x%y,x/y);printf("%d%d\n",x--,--y);printf("%d\n",t);printf("%d\n",(x=5*6,x*4,x+5));printf("%d%f%f\n",c,b,a);}⑴程序運(yùn)行時,在鍵盤上輸入203⑵程序運(yùn)行時,在鍵盤上輸入155三、對上述實驗進(jìn)行總結(jié),寫出實驗報告,把你通過本實驗掌握的內(nèi)容整理出來。實驗四選擇結(jié)構(gòu)程序設(shè)計(一)一、實驗?zāi)康?.掌握關(guān)系表達(dá)式和邏輯表達(dá)式的使用。
2.熟悉選擇結(jié)構(gòu)程序設(shè)計。
3.熟練使用if語句進(jìn)行程序設(shè)計。
4.使用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)。二、實驗內(nèi)容1.運(yùn)行以下程序,說明表達(dá)式值1和表達(dá)式值2的不同。#include"stdio.h"voidmain(){ inta=3,b=2,c=1,d=0; printf("表達(dá)式1=%d\n",d==a>b+c); printf("表達(dá)式2=%d\n",d=a>b+c);}2.以下程序的功能是:從鍵盤輸入一個字符型數(shù)據(jù),若輸入一個數(shù)字字符(‘0’-‘9#include"stdio.h"voidmain(){charc;scanf("%c",&c);if('0'<=c<='9')/*條件表達(dá)式*/{c=c-'0';printf("c=%d\n",c);}elseprintf("dataerror!\n");}實驗步驟:⑴上機(jī)調(diào)試以上程序;⑵輸入‘0’—‘9’之間的任何字符,驗證輸出結(jié)果是否和程序功能相符合;⑶輸入‘0’—‘9’之外的任何字符,例如,輸入字母’a’,驗證輸出結(jié)果是否和程序功能相符合;⑷將條件表達(dá)式if('0'<=c<='9')改為if('0'<=c&&c<='9'),重復(fù)2、3步驟。分析、比較以上的輸出結(jié)果,總結(jié)字符變量c的取值在‘0’-‘9’之間在C語言編程中的正確描述。3.if語句的第一種形式為基本形式if(表達(dá)式)語句;其語義是:如果表達(dá)式的值非零(為真),則執(zhí)行其后的語句,否則不執(zhí)行該語句。編程:輸入兩個整數(shù),輸出其中的大數(shù)。提示:輸入兩個數(shù)a,b。把a(bǔ)先賦予變量max,再用if語句判別max和b的大小,如max小于b,則把b賦予max。因此max中總是大數(shù),最后輸出max的值。4.if語句的第二種形式為if-else形式if(表達(dá)式)語句1;else語句2;其語義是:如果表達(dá)式的值非零(為真),則執(zhí)行語句1,否則執(zhí)行語句2。程序填空題。下列程序用于完成對輸入的整數(shù)判斷它是奇數(shù)還是偶數(shù),并給出相應(yīng)的提示。試完成它缺少的部分,并上機(jī)驗證。#include"stdio.h"voidmain(){intx;scanf("%d",&x);if()printf("x=%disEven\n",x);elseprintf("x=%disOdd\n",x);}編程:輸入兩個整數(shù),輸出其中的大數(shù)。提示:改用if-else語句判別a,b的大小,若a大,則輸出a,否則輸出b。5.if語句的第三種形式為if-else-if形式(嵌套的if)當(dāng)有多個分支選擇時,可采用if-else-if語句,其一般形式為:if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;elseif(表達(dá)式3)語句3;…elseif(表達(dá)式m)語句m;else語句n;其語義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個值為真時,則執(zhí)行其對應(yīng)的語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語句n。然后繼續(xù)執(zhí)行后續(xù)程序。編程:要求判別鍵盤輸入字符的類別??梢愿鶕?jù)輸入字符的ASCII碼來判別類型。由ASCII碼表可知ASCII值小于32的為控制字符。在“0”和“9”之間的為數(shù)字,在“A”和“Z”之間為大寫字母,在“a”和“z”之間為小寫字母,其余則為其它字符。這是一個多分支選擇的問題,用if-else-if語句編程,判斷輸入字符ASCII碼所在的范圍,分別給出不同的輸出。例如輸入為“g6.分析以下程序的運(yùn)行結(jié)果并上機(jī)調(diào)試。程序1:#include"stdio.h"voidmain(){ inta=3,b=4,c=5,d=0; if(a>b)d=a;else if(c>b)d=c;elsed=b; printf("d=%d\n",d);}程序2:#include"stdio.h"voidmain(){ inta=3,b=4,c=5,d=0; if(a>b)if(c>b)d=c;elsed=b; elsed=a; printf("d=%d\n",d);}程序3:#include"stdio.h"voidmain(){ inta=3,b=4,c=5,d=0; if(a>b)if(c>b)d=c;elsed=b; printf("d=%d\n",d);}程序4:
#include"stdio.h"voidmain(){ inta=3,b=4,c=5,d=0; if(a>b) {if(c>b)d=c;}elsed=b; printf("d=%d\n",d);}編程:比較鍵盤依次輸入的兩個數(shù)a和b的大小關(guān)系,并根據(jù)大小關(guān)系分別輸出1(若a>b)、0(若a=b)、-1(若a<b)。7.條件運(yùn)算符和條件表達(dá)式由條件運(yùn)算符組成條件表達(dá)式的一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3其求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為條件表達(dá)式的值,否則以表達(dá)式3的值作為整個條件表達(dá)式的值。用條件表達(dá)式對4中要求的輸出兩個數(shù)中的大數(shù)的程序重新編程。8.switch語句C語言還提供了另一種用于多分支選擇的switch語句,其一般形式為:switch(表達(dá)式){case常量表達(dá)式1:語句1;case常量表達(dá)式2:語句2;…case常量表達(dá)式n:語句n;default:語句n+1;}在switch語句中,“case常量表達(dá)式”只相當(dāng)于一個語句標(biāo)號,表達(dá)式的值和某標(biāo)號相等則轉(zhuǎn)向該標(biāo)號執(zhí)行,但不能在執(zhí)行完該標(biāo)號的語句后自動跳出整個switch語句。這是與前面介紹的if語句完全不同的,應(yīng)特別注意。程序分析題。分析以下程序,對分析的結(jié)果上機(jī)檢驗。#include"stdio.h"voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}//abccase2:a++;b++;break;}printf("a=%d,b=%d\n",a,b);}在程序中的//abc前面,}后面添加一個break;再次運(yùn)行該程序,程序結(jié)果有何變化?在實驗報告中對結(jié)果作出解釋。三、對上述實驗進(jìn)行總結(jié),寫出實驗報告,把你通過本實驗掌握的內(nèi)容整理出來。實驗五選擇結(jié)構(gòu)程序設(shè)計(二)一、實驗?zāi)康倪M(jìn)一步掌握選擇結(jié)構(gòu)程序設(shè)計,熟練運(yùn)用選擇語句編寫程序,提高調(diào)試和修改程序的能力。二、實驗內(nèi)容1.輸入三個整數(shù),輸出最大數(shù)和最小數(shù)。分析:首先比較輸入的a,b的大小,并把大數(shù)裝入max,小數(shù)裝入min中,然后再與c比較,若max小于c,則把c賦予max;如果c小于min,則把c賦予min。因此max內(nèi)總是最大數(shù),而min內(nèi)總是最小數(shù)。最后輸出max和min的值即可。2.有一函數(shù):y=xx<12x-11=<x<103x-11x>=10用scanf函數(shù)輸入x的值(分別為x<1,1—10,>=10三種情況),求y值。分析:y是一個分段表達(dá)式。要根據(jù)x的不同區(qū)間來計算y的值。所以應(yīng)使用if語句。3.編寫程序,輸入三角形三邊a、b、c,判斷a、b、c能否構(gòu)成三角形,若不能則輸出相應(yīng)的信息,若能則判斷組成的是等腰、等邊、直角還是一般三角形。實驗步驟與要求:(1)輸入一組數(shù)據(jù)3,4,8,觀察程序運(yùn)行結(jié)果,并與實驗二中程序2做比較(2)另外再輸入幾組數(shù)據(jù)進(jìn)行測試:3,4,53,3,33,3,5(3)如果程序有誤,可采用“單步跟蹤執(zhí)行”的調(diào)試方法,確定錯誤的出處。4.輸入某學(xué)生的成績,經(jīng)處理后給出學(xué)生的等級,等級分類如下:90分以上(包括90):A
80至90分(包括80):B
70至80分(包括70):C
60至70分(包括60):D
60分以下:E方法一:(用if語句的嵌套)分析:由題意知如果某學(xué)生成績在90分以上,等級為A;否則,如果成績大于80分,等級為B;否則,如果成績大于70分,等級為C;否則,如果成績大于60分為D;否則,如果成績小于60分,等級為E;但當(dāng)我們輸入成績時也可能輸錯,出現(xiàn)小于0或大于100,這時也要做處理,輸出出錯信息。因此,再用if嵌套前,應(yīng)先判斷輸入的成績是否在0~100之間。方法二:用switch語句分析:switch語句是用于處理多分支的語句。注意,case后的表達(dá)式必須是一個常量表達(dá)式,所以在以用switch語句之前,必須把0~100之間的成績分別化成相關(guān)的常量。所有A(除100以外),B,C,D類的成績的共同特點是十位數(shù)相同,此外都是E類。則由此可得把score除十取整,化為相應(yīng)的常數(shù)。輸入測試數(shù)據(jù),調(diào)試程序。測試數(shù)據(jù)要覆蓋所有路徑,注意臨界值,例如此題中得100分,60分,0分以及小于0和大于100的數(shù)據(jù)。5.編程設(shè)計一個簡單的計算器程序,要求根據(jù)用戶從鍵盤輸入的表達(dá)式:操作數(shù)1運(yùn)算符op操作數(shù)2計算表達(dá)式的值,指定的運(yùn)算符為加(+)、減(-)、乘(*)、除(/)用if及switch語句實現(xiàn)。程序運(yùn)行舉例:Pleaseentertheexpression:22.12+12.10屏幕提示鍵盤輸入屏幕提示鍵盤輸入22.12+12.10=34.22程序輸出程序輸出6.用scanf函數(shù)輸入一個年份year,計算這一年2月份的天數(shù)days,然后用輸出函數(shù)printf輸出days。實驗步驟與要求:
(1)有變量定義為整型。
(2)輸入前要加提示語句。
(3)輸出結(jié)果前要有必要的文字說明。
說明:
(1)閏年的條件是:year能被4整除但不能被100整除,或者year能被400整除。
(2)如果year是閏年,則2月份的天數(shù)為29天,不是閏年則為28天。[問題討論]對于多分支選擇結(jié)構(gòu)何時使用if語句的嵌套,何時使用switch語句?三、對上述實驗進(jìn)行總結(jié),寫出實驗報告,把你通過本實驗掌握的內(nèi)容整理出來。實驗六循環(huán)結(jié)構(gòu)程序設(shè)計(一)一、實驗?zāi)康?.熟練掌握三種循環(huán)語句的應(yīng)用。2.熟練掌握循環(huán)結(jié)構(gòu)的嵌套。3.掌握break和continue語句的使用。4.練習(xí)調(diào)試與修改程序。二、實驗內(nèi)容1.while語句while語句的一般形式為:while(表達(dá)式)語句;while語句的語義是:計算表達(dá)式的值,當(dāng)值為真(非0)時,執(zhí)行循環(huán)體語句。編程:求1-100的奇數(shù)和。提示:參考教材107頁,例6.2,循環(huán)變量的步長值為2。2.do-while語句do-while語句的一般形式為:do{語句;}while(表達(dá)式);do-while語句的語義是:先執(zhí)行循環(huán)體語句一次,再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。編程:求1—100的偶數(shù)和。3.for語句其一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)3)語句;for語句的語義是:⑴首先計算表達(dá)式1的值。⑵再計算表達(dá)式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,否則結(jié)束循環(huán)。⑶執(zhí)行循環(huán)體后再計算表達(dá)式3的值,轉(zhuǎn)回第2步重復(fù)執(zhí)行。下列程序用于輸出fibnocci數(shù)列的前20項,每行輸出5個。請?zhí)羁?。說明:fibnocci數(shù)列的前兩項均為1,以后各項等于其前兩項之和。#include"stdio.h"voidmain(){inti,f1,f2,f3,n;f1=1;f2=1;printf("\n%d%d",f1,f2);n=2;for(i=1;;i++){if()printf("\n");;printf("%d",f3);n++;f1=f2;f2=f3;}}編程:⑴用for語句計算s=3+33+333⑵求5!4.break/continue語句:while(表達(dá)式while(表達(dá)式1){…if(表達(dá)式2)break;…}while(表達(dá)式1){…if(表達(dá)式2)conitue;…}結(jié)束本次循環(huán)結(jié)束整個循環(huán)#include"stdio.h"voidmain(){#include"stdio.h"voidmain(){ inti,sum=0; for(i=1;i<=10;i++){if(i<=5)continue;sum=sum+i;}printf("sum=%5d\n",sum);}#include"stdio.h"voidmain(){ inti,sum=0; for(i=1;i<=10;i++){if(i>5)break;sum=sum+i;}printf("sum=%5d\n",sum);}編程:輸出100以內(nèi)能被7整除的數(shù)。
提示:對7~100的每一個數(shù)進(jìn)行測試,如該數(shù)不能被7整除,即模運(yùn)算不為0,則由continue語句轉(zhuǎn)去下一次循環(huán)。只有模運(yùn)算為0時,才能執(zhí)行后面的printf語句,輸出能被7整除的數(shù)。(參考教材115頁,例6.5)5.循環(huán)嵌套三種循環(huán)控制語句可以互相嵌套,即在一個循環(huán)體內(nèi)部又可以出現(xiàn)另一循環(huán)。輸出100以內(nèi)的素數(shù)。素數(shù)是只能被1和它本身整除的數(shù)。判斷素數(shù)的方法:用一個數(shù)分別去除2到這個數(shù)減1(或2到sqrt(這個數(shù))),如果能被整除,則表明此數(shù)不是素數(shù),反之是素數(shù)。#include"math.h"#include"stdio.h"voidmain(){intn,i;for(n=2;n<=100;n++){for(i=2;i<n;i++)if(n%i==0)break;if(i>=n)printf("%d\t",n);}}本程序中,第一層循環(huán)表示對2~100的數(shù)逐個判斷是否是素數(shù),在第二層循環(huán)中則對數(shù)n用2~n-1逐個去除,若某次除盡則跳出該層循環(huán),說明不是素數(shù)。如果在所有的數(shù)都是未除盡的情況下結(jié)束循環(huán),則為素數(shù),此時有i>=n,故可經(jīng)此判斷后輸出素數(shù)。然后轉(zhuǎn)入下一次大循環(huán)。編程:⑴求100-200之間的素數(shù),把它們按每行5個素數(shù)全部顯示出來,并給出素數(shù)的個數(shù)。
⑵輸出9*9口訣表。
提示:分行與列考慮,共9行9列,外循環(huán)控制行,內(nèi)循環(huán)控制列。
[內(nèi)容討論]
1.小結(jié)三種形式的循環(huán)使用的區(qū)別。
2.小結(jié)循環(huán)嵌套的規(guī)定和應(yīng)用三、對上述實驗進(jìn)行總結(jié),寫出實驗報告,把你通過本實驗掌握的內(nèi)容整理出來。實驗七循環(huán)結(jié)構(gòu)程序設(shè)計(二)一、實驗?zāi)康倪M(jìn)一步掌握循環(huán)結(jié)構(gòu)程序設(shè)計,熟練運(yùn)用循環(huán)語句編寫程序,提高調(diào)試和修改程序的能力。二、實驗內(nèi)容1.編程求1+2!+3!+...+20!的和。分析:此程序只是把累加變成了累乘2.求和值,直到最后一項的絕對值小于10-4為止。參考教材116頁,例6.63.輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。分析:計算兩個數(shù)的最大公約數(shù);首先,隨機(jī)輸入兩個數(shù)m,n(默認(rèn)m>n,若m<n,則交換m與n);其次,使k為m除以n的余數(shù),如果m能被n整除,則k值為0,n為這兩個數(shù)的最大公約數(shù),否則,使k代替n,n代替m,重復(fù)以上過程,直到k值為0。4.分析下面程序的運(yùn)行結(jié)果,然后上機(jī)運(yùn)行,進(jìn)一步體會continue語句和break語句。#include"stdio.h"
voidmain()
{intn;
while(1)
{printf("Enteranumber:");
scanf("%d",&n);
if(n%2==1)
{printf("Isaid");
continue;}
break;
}
printf("Thanks.Ineededthat!");
}5.打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個“水仙花數(shù)”,因為153=13+53+33。分析:利用for循環(huán)控制100—999個數(shù),每個數(shù)分解出個位,十位,百位。6.打印出以下圖形*****************************三、對上述實驗進(jìn)行總結(jié),寫出實驗報告,把你通過本實驗掌握的內(nèi)容整理出來。實驗八數(shù)組應(yīng)用(一)一、實驗?zāi)康恼莆找痪S數(shù)組的定義及初始化。掌握一維數(shù)組元素的引用及其應(yīng)用。二、實驗內(nèi)容閱讀下面程序,寫出程序運(yùn)行結(jié)果,并且上機(jī)進(jìn)行驗證。(1)#include“stdio.h”voidmain(){inti,n[4]={0,0,0,0};for(i=1;i<4;i++)
{if(i==3)break;n[i]=n[i-1]+1;}printf(“n[i-1]=%dn[i]=%d\n”,n[i-1],n[i]);}(2)#include"stdio.h"voidmain(){charch[]={'0','1','2','3','4','5','6','7','8','9'};inti=0,m=2,r,x=42;charb[80];while(x){r=x%m;x/=m;b[i++]=ch[r];}for(--i;i>=0;i--)printf("%c",b[i]);printf("\n");}2.程序填空(根據(jù)題意在空白處填入適當(dāng)?shù)膬?nèi)容,使程序變得完整。并上機(jī)進(jìn)行調(diào)試驗證)(1)程序說明:下列程序完成的是插入排序功能:數(shù)組a中存放一個遞增數(shù)列,輸入一個整數(shù)x,將它插入到數(shù)組中,使之仍為一個有序數(shù)列。#include"stdio.h"#defineN10voidmain(){inta[]={1,10,20,30,40,50,60,70,80,90},x,i,p;scanf("%d",&x);for(i=0,p=N;i<N;i++)if(x<a[i]){p=i;____________;}for(i=N-1;i>=p;___________)a[i+1]=a[i];_______________;printf("%d",x);for(i=0;i<=N;i++)printf("%5d",a[i]);printf("\n");}(2)程序說明:下面程序完成的是折半查找。A數(shù)組中存放的是n個由大到小已經(jīng)排好序的數(shù)列,從這n個數(shù)中查找x的值是否存在。其基本思想是:在查找范圍里,將x與處于中間位置上的數(shù)比較,如果相等,則查找成功,如果小于該元素,則在較小的一半元素里再進(jìn)行折半查找;如果x大于該元素,則在較大的一半元素里再進(jìn)行折半查找。變量top,bottom,mid分別指向查找范圍的頂部、底部和中間位置。#include"stdio.h"#definen10main(){inta[n],find;intx,i,top,bottom,mid;printf("inputthesortednumbers:\n");for(i=0;i<n;i++)scanf("%d",__________);printf("inputthenumbertofind:\n");scanf("%d",&x);find=0;top=0;bottom=n-1;if(x<=a[0]&&__________)while(!find&&top<=bottom){mid=_______________;if(x==a[mid]) {find=1; printf("x=%dposition=%d\n",x,mid);}elseif(_______________) bottom=mid-1; else top=mid+1;}if(__________)printf("thenumber%disnotinthetable",x);}3.程序設(shè)計(根據(jù)題意編寫程序并上機(jī)進(jìn)行調(diào)試)。(1)編寫程序完成如下功能:輸入10個數(shù)存入一維數(shù)組,然后再按逆序重新存放后輸出。(2)編寫程序完成如下功能:從鍵盤輸入兩個字符串ch2、ch1,然后將字符串ch2連接到字符串ch1的后面,并輸出連接后的字符串。(3)編寫程序完成如下功能:現(xiàn)有兩個已按升序排好的數(shù)組,將它們合并為一個升序排序的數(shù)組(歸并排序)。算法:兩個數(shù)組合并時,可為每個數(shù)組各安排一個指針,從第一個元素開始依次比較兩數(shù)組對應(yīng)元素,小的取下來順序放入新的數(shù)組,取下所指元素的指針后移,再比較,依此類推,直到其中一個數(shù)組的元素已全部放入新數(shù)組,再把另一數(shù)組余下的元素全部順序放入新數(shù)組,歸并完成。實驗九數(shù)組應(yīng)用(二)一、實驗?zāi)康恼莆斩S數(shù)組的定義和初始化。掌握二維數(shù)組元素的引用及其應(yīng)用。二、實驗內(nèi)容1.閱讀下面程序,寫出程序運(yùn)行結(jié)果,并且上機(jī)進(jìn)行驗證。(1)#include“stdio.h”voidmain(){inta[][3]={9,7,5,3,1,2,4,6,8};inti,j,s1=0,s2=0;for(i=0;i<3;i++)for(j=0;j<3;j++){if(i==j)s1=s1+a[i][j];if(i+j==2)s2=s2+a[i][j]}printf("s1=%ds2=%d",s1,s2);}(2)#include"stdio.h"voidmain(){intr[5]={1,2,3,4,5};inti,j,a[5][5];for(i=0;i<=4;i++){for(j=i;j<=4;j++) a[i][j]=r[j-i];for(j=0;j<i;j++) a[i][j]=r[i-j];}for(i=0;i<5;i++){for(j=0;j<5;j++) printf("%2d",a[i][j]);printf("\n");}}2.程序填空(根據(jù)題意在空白處填入適當(dāng)?shù)膬?nèi)容,使程序變得完整。并上機(jī)進(jìn)行調(diào)試驗證)(1)程序說明:下面程序分別輸出方陣中主對角線、副對角線上元素的和suml和sum2(主對角線為從矩陣的左上角至右下角的連線,副對角線為從矩陣的右上角至左下角的連線).
#include"stdio.h"#defineSIZE5voidmain(){inta[SIZE][SIZE],m,n,sum1,sum2;for(m=0;m<SIZE;m++)for(n=0;n<SIZE;n++) scanf("%d",&a[m][n]);sum1=sum2=________;for(m=0;m<SIZE;m++) { sum1=sum1+______; sum2=sum2+______; } printf("sum1=%dsum2=%d\n",sum1,sum2);}(2)程序說明:下面程序打印出如下所示的楊輝三角行(打印10行)。1121331464115101051…….#include"stdio.h"voidmain(){inti,j,a[10][10]={{1},{1,1}};for(i=2;i<10;i++) {a[i][0]=1;___________; for(j=0;j<i;j++) a[i][j]=a[i-1][j]+____________; }for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf("%4d",a[i][j]);___________; }}3.程序設(shè)計(根據(jù)題意編寫程序并上機(jī)進(jìn)行調(diào)試)。(1)設(shè)有一個3行5列的數(shù)組,編寫程序從鍵盤輸入數(shù)據(jù),并找出二維數(shù)組中最大元素的值及其行、列下標(biāo)。(2)已知A是一個3×4矩陣,B是一個4×5矩陣,編寫程序,從鍵盤輸入矩陣A、B的值,求A×B得到的新,并輸出矩陣C。(3)設(shè)某班有20個學(xué)生,每個學(xué)生選修了三門課,編寫程序,輸入20個學(xué)生三門課的成績,計算每個學(xué)生的平均成績,最后輸出每個學(xué)生三門課的成績及平均成績。實驗十函數(shù)應(yīng)用(一)一、實驗?zāi)康?.掌握函數(shù)的定義、函數(shù)的說明和調(diào)用。2.掌握函數(shù)的參數(shù)及其傳遞方式,函數(shù)值的正確返回。二、實驗內(nèi)容1.閱讀下面程序,寫出程序運(yùn)行結(jié)果,并且上機(jī)進(jìn)行驗證。(1)#include"stdio.h"intswap(inta,intb){intc,s;c=a;a=b;b=c;s=a+b;returns;}voidmain(){inta,b,s;a=3;b=4;s=swap(a,b);printf("a=%db=%ds=%d\n",a,b,s);}(2)#include"stdio.h"intfun(intnum){intk=1;do{k*=num%10;num/=10;while(num);return(k);}voidmain(){intn=26;printf("%d\n",fun(n));}2.程序填空(根據(jù)題意在空白處填入適當(dāng)?shù)膬?nèi)容,使程序變得完整。并上機(jī)進(jìn)行調(diào)試驗證)(1)程序說明:下面程序?qū)⑤斎氲氖M(jìn)制數(shù)n轉(zhuǎn)換為b進(jìn)制數(shù),并將轉(zhuǎn)換結(jié)果輸出。轉(zhuǎn)換的方法是:除b取余法。#include"stdio.h"voidtransfer(intm,intk){inta[20],i;for(i=0;m;i++){a[i]=;m/=k;}for(;i>=0;i--)printf("%d",a[i]);}voidmain(){intb,n;scanf("%d%d",);;}(2)程序說明:歌德巴赫猜想指出:任何一個充分大的偶數(shù)都可以表示為兩個素數(shù)之和,例如4=2+26=3+38=3+5…50=3+47。下面程序?qū)?-50之間的所有偶數(shù)用兩個素數(shù)之和表示,判斷一個整數(shù)是否為素數(shù)用函數(shù)prime完成。#include"stdio.h"intprime(intx){intk,flag=1;for(k=2;k<=x/2;k++)if(){flag=0;break;}return();}voidmain(){intm,n,k;for(m=4;m<=50;m++)for(n=2;n<m-1;n++)if(prime(n)&&) {printf("%d=%d+%d\n",)break;}}3.程序設(shè)計(根據(jù)題意編寫程序并上機(jī)進(jìn)行調(diào)試)。(1)編寫程序求組合數(shù),其中n,m由鍵盤輸入。要求設(shè)計一個函數(shù)fac(n)求某個正整數(shù)n的階乘。(2)孿生素數(shù)是指兩個相差為2的素數(shù)。例如3和5,5和7,11和13等。編寫程序輸出m對(m由鍵盤輸入)孿生素數(shù)。要求設(shè)計函數(shù)prime用于判斷某整數(shù)是否素數(shù)。(3)找出2~1000以內(nèi)的完全數(shù)。說明:完全數(shù)是一個自然數(shù),它等于除本身以外的所有因子之和,例如:6=1+2+3,6就是一個完全數(shù)。要求定義一個函數(shù)來判斷并輸出實驗十一函數(shù)應(yīng)用(二)一、實驗?zāi)康?.掌握函數(shù)的嵌套調(diào)用和遞歸調(diào)用2.掌握數(shù)組做函數(shù)參數(shù)的用法3.掌握全局變量和局部變量的用法。4.掌握變量的存儲類別。二、實驗內(nèi)容1.閱讀下面程序,寫出程序運(yùn)行結(jié)果,并且上機(jī)進(jìn)行驗證。(1)#include“stdio.h”inta=3,b=5,c;intf(intb){c=a+b;printf("%d%d%d\n",a,b,c);}voidmain(){inta=8;f(3);printf("%d%d%d\n",a,b,c);}(2)#include"stdio.h"voiddtob(intn){inti;if(n>1){i=n%2;dtob(n/2);}elsei=n;printf("%d",i);}voidmain(){inti=11;printf("%d->",i);dtob(i);printf("(2)\n");}(3)#include"stdio.h"intf1(intn){staticintf=1;f=f*n;return(f);}voidmain(){inti;for(i=1;i<=4;i++)printf("%5d",f1(i));}2.程序填空(根據(jù)題意在空白處填入適當(dāng)?shù)膬?nèi)容,使程序變得完整。并上機(jī)進(jìn)行調(diào)試驗證)(1)程序說明:用一個一維數(shù)組存放10個學(xué)生的成績,寫一個函數(shù)求出平均分、最高分和最低分。#include"stdio.h"floatmax=0;min=0;floataverage(floatscore[],intn){inti;floatave,sum=score[0];max=min=;for(i=1;i<n;i++){if(score[i]>max)max=score[i];elseif()min=score[i];sum=sum+score[i];}ave=sum/10;return;}voidmain(){floatave,score[10];inti;for(i=0;i<10;i++)scanf("%f",);ave=average()printf("max=%6.2fmin=%6.2faverage=%6.2f\n,max,min,ave);}(2)程序說明:在主函數(shù)中讀入一字符串,再讀入一字符,然后調(diào)用函數(shù)delete在字符串中查找并刪除該字符,最后輸出該字符串。#include"stdio.h"voiddelete(charp[],charch){inti=0,j;while(){if(p[i]==ch)for(j=i;j<;j++)p[i]=p[i+1];elsei++;}voidmain(){charp[80],ch;inti=0,j;scanf("%s",p);scanf("%c",&ch);delete();printf("%s",);}3.程序設(shè)計(根據(jù)題意編寫程序并上機(jī)進(jìn)行調(diào)試)。(1)程序說明:寫兩個函數(shù)分別求兩個整數(shù)的最大公約數(shù)和最小公倍數(shù),用主函數(shù)調(diào)用這兩個函數(shù),并輸出結(jié)果,兩個整數(shù)由鍵盤輸入。r=0r!=0r=0r!=0(2)程序說明:用遞歸函數(shù)將一個整數(shù)n轉(zhuǎn)換成字符串,例如,輸入568,應(yīng)輸出字符串“865”。n的位數(shù)不確定,可以是任意位數(shù)的整數(shù)。(3)程序說明:編寫程序?qū)?0個學(xué)生5門課的成績進(jìn)行處理,要求分別用函數(shù)實現(xiàn)如下幾個功能:=1\*GB3①輸入學(xué)生數(shù)據(jù);=2\*GB3②求每個學(xué)生的平均分;=3\*GB3③求每門課的平均分;=4\*GB3④輸出平均分最高的學(xué)生的成績;=5\*GB3⑤輸出學(xué)生成績表(包括每個學(xué)生的平均成績和每門課的平均成績)。實驗十二指針的應(yīng)用一、實驗?zāi)康恼莆罩羔樧兞康亩x和引用。二、實驗內(nèi)容1.編制如下程序,并上機(jī)調(diào)試運(yùn)行,最后在實驗報告上寫出運(yùn)行結(jié)果。使用指針作函數(shù)參數(shù),編寫用于交換兩個參數(shù)值的函數(shù)。調(diào)用該函數(shù)用于對從鍵盤輸入的兩個整數(shù)進(jìn)行交換。編寫一個函數(shù),用于對作為參數(shù)的數(shù)組中的元素求平均值,函數(shù)以指針方式進(jìn)行處理。平均值為函數(shù)的返回值。編寫一個函數(shù),用于對作為參數(shù)的數(shù)組中的元素求最大值,并將最大值從數(shù)組中刪除。函數(shù)的首部類似于下列形式:dele_max(int*,int*)其中第一個參數(shù)為指向數(shù)組的指針,第二個參數(shù)為指向數(shù)組長度變量的指針。因此調(diào)用數(shù)組時,使用如下形式:dele_max(a,&n);其中a為一數(shù)組名,n為存放a數(shù)組長度的變量。2.程序分析題。分析以下程序,對分析的結(jié)果上機(jī)檢驗。(1)下列程序使用指針操作數(shù)組有各種形式,體會其用法。#include“stdio.h”main(){inta[]={0,1,2,3,4},i,*p;for(i=0;i<=4;i++)printf("%d\t",a[i]);printf("\n");for(p=&a[0];p<=&a[4];p++)printf("%d\t",*p);printf("\n\n");for(p=&a[0],i=1;i<5;i++)printf("%d\t",p[i]);printf("\n");for(p=a,i=0;p+i<=a+4;p++,i++)printf("%d\t",*(p+i));printf("\n\n");for(p=a+4;p>=a;p--)printf("%d\t",*p);printf("\n");for(p=a+4,i=0;i<=4;i++)printf("%d\t",p[-i]);printf("\n");for(p=a+4;p>=a;p--)printf("%d\t",a[p-a]);printf("\n");}(2).#include"stdio.h"voidmain(){char*s2="aceg";*s2++;printf("%c\n",*s2);printf("%c\n",*(s2+1));printf("%c\n",*s2+1);}運(yùn)行以下程序,從鍵盤輸入MyBook,結(jié)果是什么?#include"stdio.h"charfun(char*s){if(*s<='Z'&&*s>='A')*s+=32;return(*s);}voidmain(){charc[80],*p;p=c;scanf("%s",p);while(*p){*p=fun(p);putchar(*p);p++;}printf("\n");}(4)#include"stdio.h"voidmain(){int*p,s[3][4],i,j,k=1;p=s[0];for(i=0;i<3;i++)for(j=0;j<4;j++)*p++=k++;p=s[0];for(i=0;i<3;i++)for(j=0;j<4;j++)printf((j%4)?"%4d":"\n%4d",*p++);}(5)#include"stdio.h"voidmain(){intnum[2][3],*p;intt,i,j,k=10;p=num[0];for(i=0;i<2;i++)for(j=0;j<3;j++){k++;*p=k;printf("k=%d\n",k);for(t=2;t<*p;t++){if(!(*p%t)){ j--; *p--;break;}}*p++;}p=num[0];for(i=0;i<2;i++)for(j=0;j<3;j++)printf((j%3)?"%4d":"\n%4d",*p++);}3。程序填空題下列程序的功能是在數(shù)組中同時查找最大元素下標(biāo)和最小元素下標(biāo),分別存放在main函數(shù)的變量max和min中,請?zhí)羁?include"stdio.h"voidfind(int*a,intn,int*max,int*min){inti;*max=*min=0;for(i=1;i<n;i++)if(a[i]>a[*max])________;elseif(a[i]<a[*min])________;}voidmain(){inta[]={5,8,7,6,2,7,3},max,min;find(________);printf("\n%d,%d\n",max,min);}。(2)以下程序調(diào)用invert函數(shù)按逆序重新放置a數(shù)組中的值,a數(shù)組中的值在main函數(shù)中讀入。#include"stdio.h"voidinvert(int*s,inti,intj){intt;if(i<j){t=*(s+i);*(s+i)=____;*(s+j)=t;invert(s,_____,j-1);}}voidmain(){inta[10],i;for(i=0;i<10;i++)scanf("%d",______);invert(a,0,10-1);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}實驗十三使用結(jié)構(gòu)和聯(lián)合進(jìn)行程序設(shè)計【實驗?zāi)康摹?.掌握結(jié)構(gòu)類型變量與數(shù)組的定義和使用。2.掌握使用結(jié)構(gòu)指針和結(jié)構(gòu)變量名使用結(jié)構(gòu)成員的方法。3.掌握鏈表的基本概念和操作。4.掌握聯(lián)合的概念與使用?!緦嶒瀮?nèi)容】1.編程實現(xiàn):從鍵盤輸入5個人的姓名、年齡和性別,然后輸出。要求:分別通過結(jié)構(gòu)指針和結(jié)構(gòu)變量名輸出信息。用函數(shù)data_in實現(xiàn)數(shù)據(jù)輸入,用函數(shù)data_pout
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東理工學(xué)院《免疫與病原生物學(xué)實驗Ⅲ》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東科技學(xué)院《幼兒園環(huán)境設(shè)計與布置》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東理工職業(yè)學(xué)院《辯證唯物主義與歷史唯物主義下》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東機(jī)電職業(yè)技術(shù)學(xué)院《生物藥物分析與檢測》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東行政職業(yè)學(xué)院《自動控制原理B》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工貿(mào)職業(yè)技術(shù)學(xué)院《物業(yè)管理概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工程職業(yè)技術(shù)學(xué)院《畫法幾何與陰影透視二》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東財貿(mào)職業(yè)學(xué)院《對外漢語教學(xué)方法與設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 《腦梗死診治》課件
- 《初中生物復(fù)習(xí)資料》課件
- 耕作學(xué)智慧樹知到期末考試答案章節(jié)答案2024年中國農(nóng)業(yè)大學(xué)
- 2024年中國消防救援學(xué)院第二批面向應(yīng)屆畢業(yè)生招聘28人歷年【重點基礎(chǔ)提升】模擬試題(共500題)附帶答案詳解
- 食品加工代工配方保密協(xié)議
- QCT1067.5-2023汽車電線束和電器設(shè)備用連接器第5部分:設(shè)備連接器(插座)的型式和尺寸
- (完整版)儀表選型
- T-CCAA 39-2022碳管理體系 要求
- 《YST 550-20xx 金屬熱噴涂層剪切強(qiáng)度的測定》-編制說明送審
- 2024-2030年中國氣槍行業(yè)市場深度分析及發(fā)展前景預(yù)測報告
- 數(shù)字化技術(shù)在促進(jìn)幼兒語言發(fā)展中的應(yīng)用
- 江西省上饒市2023-2024學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量測試物理試題(解析版)
- 提高感染性休克集束化治療達(dá)標(biāo)率
評論
0/150
提交評論