版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C程序設(shè)計(jì)基礎(chǔ)上機(jī)實(shí)驗(yàn)指導(dǎo)書李文杰、李桂芝、魚濤編寫
楊根興審定
北京機(jī)械工業(yè)學(xué)院計(jì)算中心目 次說明怎樣學(xué)習(xí)C語言實(shí)驗(yàn)一c程序集成開發(fā)環(huán)境熟悉實(shí)驗(yàn)二數(shù)據(jù)的輸入和輸出實(shí)驗(yàn)三表達(dá)式的計(jì)算實(shí)驗(yàn)四選擇結(jié)構(gòu)語句實(shí)驗(yàn)五循環(huán)結(jié)構(gòu)語句實(shí)驗(yàn)六數(shù)組應(yīng)用(一)實(shí)驗(yàn)七數(shù)組應(yīng)用(二)實(shí)驗(yàn)八函數(shù)及程序結(jié)構(gòu)(一)實(shí)驗(yàn)九函數(shù)及程序結(jié)構(gòu)(二)實(shí)驗(yàn)十指針的應(yīng)用C程序設(shè)計(jì)同其他程序設(shè)計(jì)一樣,使實(shí)踐性很強(qiáng)的課程。除了要聽好課,多看課外書外,還需大量的上機(jī)實(shí)踐才能更好地理解和掌握所學(xué)到的內(nèi)容。一般來說,上機(jī)和講課時(shí)間之比應(yīng)不少于1:1。但由于目前各校安排的教學(xué)時(shí)數(shù)限制,課內(nèi)時(shí)間將更多的精力用于講課上,課內(nèi)安排的上機(jī)時(shí)間相對(duì)較少,學(xué)生不要因此對(duì)上機(jī)的重要性有所誤解。學(xué)生應(yīng)在課外再花一定的時(shí)間進(jìn)行C語言的上機(jī)實(shí)踐,這樣才能學(xué)好該門課。上機(jī)實(shí)驗(yàn)的目的有以下幾個(gè)方面:⑴驗(yàn)證所編寫的程序的正確性。⑵進(jìn)一步理解教材和課堂授課中介紹的內(nèi)容⑶熟練地掌握C程序開發(fā)環(huán)境的使用,為今后開發(fā)大型軟件打好基礎(chǔ)。(4)學(xué)習(xí)和掌握一般程序的調(diào)試和測試方法。上機(jī)前應(yīng)充分做好以下準(zhǔn)備工作:⑴復(fù)習(xí)和掌握與本次實(shí)驗(yàn)有關(guān)的教學(xué)內(nèi)容。⑵根據(jù)本次實(shí)驗(yàn)的內(nèi)容,在紙上編寫好準(zhǔn)備上機(jī)調(diào)試的程序,并初步檢查無誤。⑶準(zhǔn)備好對(duì)程序進(jìn)行測試的數(shù)據(jù)。⑷對(duì)每種測試數(shù)據(jù),給出預(yù)期的程序運(yùn)行結(jié)果。⑸預(yù)習(xí)實(shí)驗(yàn)步驟,對(duì)實(shí)驗(yàn)步驟中提出的一些問題進(jìn)行思考。上機(jī)實(shí)驗(yàn)后,應(yīng)及時(shí)寫出實(shí)驗(yàn)報(bào)告,實(shí)驗(yàn)報(bào)告應(yīng)包括以下內(nèi)容:(1)實(shí)驗(yàn)?zāi)康暮蛢?nèi)容。⑵程序說明,包括程序結(jié)構(gòu)、各模塊的算法(N-S圖表示)。⑶打印出的調(diào)試正確的源程序。⑷打印出的程序運(yùn)行記錄(包括對(duì)不同測試數(shù)據(jù)的運(yùn)行結(jié)果)。⑸針對(duì)實(shí)驗(yàn)步驟中提出的問題,寫出解決辦法及對(duì)運(yùn)行結(jié)果的分析.怎樣學(xué)習(xí)C語言很多同學(xué)對(duì)學(xué)習(xí)C語言感到很難,尤其是在各高校將C語言放在大學(xué)第一學(xué)年教學(xué)時(shí)經(jīng)常會(huì)考試不及格。究竟怎樣才能學(xué)好C語言?這里將我對(duì)C語言的理解給大家介紹一下,計(jì)算機(jī)語言挺枯燥的,如何提起興趣?首先要明確學(xué)習(xí)的目標(biāo),沒有明確的學(xué)習(xí)目標(biāo)就沒有學(xué)習(xí)動(dòng)力。給自己定一個(gè)目標(biāo),比如這次一定通過課程考試,或者這個(gè)月學(xué)習(xí)完做個(gè)東西出來等等。其次,確定了目標(biāo)之后,要認(rèn)真去做,多上機(jī)操作實(shí)踐,遇到不懂的要多跟教師和其他同學(xué)交流,千萬不能放棄。當(dāng)自己編的一段小程序運(yùn)行通過,或攻下一道難題,自己就會(huì)獲得一種成就感,可能還會(huì)很興奮,也就漸漸有了興趣。最后,要把所學(xué)的知識(shí)運(yùn)用到實(shí)際問題當(dāng)中,這樣既可以鞏固所學(xué)的知識(shí),不至于完學(xué)了就忘,還可以根據(jù)實(shí)際需要拓展知識(shí)面。這樣良性循環(huán),興趣也會(huì)越來越濃。學(xué)習(xí)計(jì)算機(jī)語言最好的方法是什么?答曰:讀程序。沒錯(cuò),讀程序是學(xué)習(xí)c語言入門最快,也是最好的方法。不要總是抱著書本逐行啃,而是學(xué)習(xí)它們的例程。學(xué)習(xí)完每一章,都要認(rèn)真體會(huì)這一章的所有概念,然后不放過這一章中提到的所有例程,仔細(xì)研讀程序,直到每一行都理解了,然后找?guī)讉€(gè)編程題目,最好是和例程類似的或一樣的,自己試圖寫出這段已經(jīng)讀懂的程序,不要以為例程你已經(jīng)讀懂了,你就可以寫出和它一樣的程序,絕對(duì)不一定,不相信你就試一試吧,如果寫不出來,也不要著急,回過頭來再繼續(xù)研究例程,想想自己為什么寫不出來,然后再去寫這段程序,反反復(fù)復(fù),直到你手到擒來為止。這一過程,就和我們學(xué)習(xí)任何其他語言比如英語和漢語一樣。我們大家都有體會(huì),我們學(xué)習(xí)一門語言,都是從最基本的語法開始,然后學(xué)習(xí)一些字和詞,再來學(xué)習(xí)一些詞組或句子,然后再用詞組和句子組成一段話,表達(dá)一個(gè)簡單的意思,最后才是寫一篇文章或者是一本書,表達(dá)更復(fù)雜的思想.我們知道,在我們完成這一過程時(shí),并不是像說得這么簡單。在我們能寫出一篇好的文章或者一本好書之前,我們可能需要閱讀大量的其他人寫的好文章或好書,有時(shí)我們還要把它們背下來;同樣的,在我們寫出一個(gè)好的程序或者軟件前,我們也需要閱讀大量的樣本例程或者軟件的源代碼,甚至要背一些好的程序代碼。寫程序的最高境界其實(shí)就是掌握各種解決問題的手段(數(shù)據(jù)結(jié)構(gòu))和解決問題的方法(算法)。?那么怎樣才算精通程序設(shè)計(jì)呢?怎樣才能精通程序設(shè)計(jì)呢?舉個(gè)例子:你面前有10個(gè)人,找出一個(gè)叫“張三”的人,你該怎么辦?第一種方法:直接對(duì)這10個(gè)人問:“誰叫張三”.第2種方法:你挨個(gè)去問“你是不是張三?”,直到問到的這個(gè)人就是張三。第三種方法:你去挨個(gè)問一個(gè)人“你認(rèn)不認(rèn)識(shí)張三,指給我看”.不要小看這個(gè)問題,你說當(dāng)然會(huì)選第一種方法,沒錯(cuò)恭喜你答對(duì)了,因?yàn)檫@個(gè)方法最快,效率最高,但是在程序設(shè)計(jì)中找到解決問題的最優(yōu)方法和你用的手段卻是考驗(yàn)一個(gè)程序員程序設(shè)計(jì)水平的重要標(biāo)志,而且是不容易達(dá)到的。實(shí)驗(yàn)一C程序集成開發(fā)環(huán)境熟悉一、實(shí)驗(yàn)?zāi)康恼莆赵赩isualC++6.0集成開發(fā)環(huán)境下怎樣編輯、編譯、連接、執(zhí)行、修改和調(diào)試C語言程序。二、實(shí)驗(yàn)內(nèi)容1.進(jìn)入可視化的C++6.0集成開發(fā)環(huán)境⑴啟動(dòng)計(jì)算機(jī),進(jìn)入窗口環(huán)境操作界面。⑵鼠標(biāo)依次點(diǎn)擊“開始”-*“程序”-"MicrosoftVisualStudio6.0"―"MicrosoftVisualC++6.0”啟動(dòng)VC6.0集成開發(fā)環(huán)境。⑶選擇“文件”(File)菜單中的“新建”(New)命令,在新建圖1對(duì)話框中,選擇“文件”選項(xiàng)卡,再選擇“C++SourceFile”類型,按圖示操作后單擊對(duì)話框中的“確定”按鈕。(見圖1)(4)接著就會(huì)出現(xiàn)如圖2所示的VC界面。(5)在編輯窗口中,輸入如下內(nèi)容:
#includeHstdio.hn〃以上行對(duì)于本書中的例子沒有給出。望同學(xué)們對(duì)于所有的〃程序都保留這樣一行。main()(printf("Hello!這是我的FirstC程序.\n");}⑹選擇“編譯”菜單中的“編譯my_cl.cppM命令,并在出現(xiàn)的對(duì)話框中選擇“是(丫)”結(jié)果如圖3.圖2
⑺選擇“編譯”菜單中的“構(gòu)件my_cl.exe”命令,構(gòu)建可執(zhí)行程序my.cl.exe,再選擇"編譯"菜單中的"!執(zhí)行my_cl.exe”命令。在出現(xiàn)的對(duì)話框中選擇“是(Y)”,結(jié)果屏幕如圖4所示。圖4圖中的黑色窗口為運(yùn)行結(jié)果窗口。按任意鍵就可返回編輯界面。⑻修改上述程序,將printf行括號(hào)中的雙引號(hào)去掉左邊的,重復(fù)⑹,可以看到圖5。其中的編譯信息窗顯示:
my.cl.obj-16error(s),1warning(s)可以看到由于一個(gè)雙引號(hào)的漏寫,導(dǎo)致出現(xiàn)16個(gè)語法錯(cuò)誤,而實(shí)際上的錯(cuò)誤只有一個(gè),這是C編譯器的特點(diǎn),當(dāng)它遇到錯(cuò)誤時(shí),會(huì)做出一些判斷或推測,有時(shí)這種推測判斷正確,有時(shí)也會(huì)錯(cuò)誤。了解這一特點(diǎn)后,希望同學(xué)們?cè)谏蠙C(jī)時(shí),先去修改第一個(gè)錯(cuò)誤,一般可以在修改一個(gè)錯(cuò)誤后立即重新編譯,這樣可以快速減少錯(cuò)誤的數(shù)目。下面請(qǐng)同學(xué)們用鼠標(biāo)點(diǎn)擊滾動(dòng)條上的滑塊,查看第一條錯(cuò)誤信息,并用鼠標(biāo)雙擊第一個(gè)錯(cuò)誤信息。(圖6),圖6可以看到,C編譯器將Hello理解為了標(biāo)識(shí)符,而前面又沒有對(duì)Hello的說明,所以認(rèn)為它是未聲明的標(biāo)識(shí)符(undeclaredidentifier),這個(gè)錯(cuò)誤在初學(xué)者的程序里非常多見,希望同學(xué)們記住它。將雙引號(hào)加上再重新編譯,就可恢復(fù)為無錯(cuò)誤了.⑼修改上述程序,在#include“stdio.h”這一行的最左邊加兩個(gè)“/”,即使得這一行成為注釋(顯示為綠色),重復(fù)(6),可以看到圖7所示的錯(cuò)誤。相信同學(xué)們對(duì)其中的錯(cuò)誤說明不難理解了,C編譯器說printf是未聲明的標(biāo)識(shí)符。原因是printf不是C語言的基本部分,它是定義在“stdio.h”中,這也就是我們?yōu)槭裁丛谇懊嬲f要在自己的程序前部加#include“stdio.h”的原因。_(10)請(qǐng)先選擇“文件”棗’的“關(guān)閉工便區(qū)”命令,再按上面的步驟(3)~“錯(cuò)誤所在的文件及行號(hào)]呈[錯(cuò)誤的解釋]程序文本,依次引入下述錯(cuò)誤,每引 _/麗二器產(chǎn)生的錯(cuò)誤信息,寫在實(shí)驗(yàn)報(bào)/*變量使用相關(guān)的語法問題*/#includenstdio.hnvoidmain()inta=l,b=2,c=3;printf(HSomeoutput:%d%d%d\n'\a,b,c,c);)①把第6行變量聲明語句的第一個(gè)逗號(hào)改為分號(hào)②把第7行printf()改為print()③去掉第7行中的第2個(gè)雙引號(hào)④把第7行中a,b,c,c改為a,b,c⑤去掉printf語句末尾的分號(hào)⑥去掉用于結(jié)束的花括號(hào)注意,在引入每一個(gè)錯(cuò)誤并編譯后,開始引入下一個(gè)錯(cuò)誤前將上一錯(cuò)誤再改正。2.程序的調(diào)試手段作為程序員編寫程序,一個(gè)難以避免的工作就是對(duì)程序的調(diào)試。調(diào)試包括語法方面的,這一般通過編譯就可基本解決,比如在上述圖3中,細(xì)心的同學(xué)可能注意到在底部的編譯信息窗中,編譯報(bào)告中說:my-cl.obj-0error(s),1warning(s),意思是編譯過程中沒發(fā)現(xiàn)錯(cuò)誤(0error(s)),但有一個(gè)不合規(guī)范的使用(1warning(s))o編程序應(yīng)最好是達(dá)到0error和0warning,但有時(shí)無法做到如此完美,只要達(dá)到0error就可以了。若不能做到0error,將不能產(chǎn)生機(jī)器語言程序,因而也就無法執(zhí)行程序。所以同學(xué)們?cè)谡{(diào)試自己的程序時(shí),必須是做到經(jīng)編譯后0error。好在編譯器對(duì)發(fā)現(xiàn)的錯(cuò)誤都有一個(gè)比較正確的修改意見,同學(xué)們按意見修改后一般就可消除錯(cuò)誤,只是修改意見是英文的,同學(xué)們需有一定的專業(yè)詞匯或者經(jīng)過一定時(shí)間與VC++的接觸,就可理解;另一類就是邏輯方面的,這類錯(cuò)誤的消除相對(duì)麻煩。好在VC提供了非常豐富的調(diào)試手段,幫助我們分析錯(cuò)誤,前提是程序已經(jīng)沒有語法錯(cuò)誤,也就是說編譯已經(jīng)通過(0error(s))。下面我們了解一些常用的,為了便于說明,請(qǐng)先選擇“文件”菜單的“關(guān)閉工作區(qū)”命令,再按上面的步驟(3)~(5)操作將編輯窗口的程序更換為如下程序文本:#include"stdio.hnvoidmainOfloati;floatsum;sum=l.0;i=2.0;while(i<=100)(sum+=l/i;i=i+2;)printf("sum=%f\n",sum);}⑴打開調(diào)試器首先定位光標(biāo)到main函數(shù)的函數(shù)首部所在行,選“編譯”T“開始調(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左下角的小窗口中,可以觀察程序中用到的變量的取值情況。如果
程序中變量很多,可在右下角的窗口中設(shè)定一些特別關(guān)心的變量,并可設(shè)定幾組。例如,當(dāng)選擇了“stepinto”命令后,屏幕如下圖10所示,在重點(diǎn)變量觀察窗的Name列輸入i,然后單步執(zhí)行程序,觀察i的值Value變化情況。有關(guān)這方面的更多內(nèi)容,請(qǐng)參閱MicrosoftVisualC++6.0手冊(cè)。三、對(duì)上述實(shí)驗(yàn)進(jìn)行總結(jié),將自己在這次實(shí)驗(yàn)中所學(xué)到的C語言程序上機(jī)操作方法及步驟寫在實(shí)驗(yàn)報(bào)告中.中文(Wreak]St XA*0fl*國Q0 -?閨豈q|~ ~3m||Gl0bal1| 2]||AIIglobalmembers^jl?maln ?]||Gl0bal1| 2]||AIIglobalmembers^jl?maln ?]&,t"⑥Ready In3.Col1fif,砌@康UI'電子敬宴\口“4。卜|吃CW用我計(jì)菱屯上機(jī)手 -創(chuàng)天中文—-31PWr?"PilcMh| ).口.河V1818||Globals|連續(xù)執(zhí)行程序▲AJ2EJ幣:新開始程序執(zhí)行voidiuin(>步越過結(jié)構(gòu)執(zhí)行■hil9停止調(diào)試器執(zhí)行到光標(biāo)處暫停VatchiLWatch2Xfatch3\W?<cM/|RfC|COL|OVR|REA£Ln3.Cal1>口fHSI1819at爾D||Globals|連續(xù)執(zhí)行程序▲AJ2EJ幣:新開始程序執(zhí)行voidiuin(>步越過結(jié)構(gòu)執(zhí)行■hil9停止調(diào)試器執(zhí)行到光標(biāo)處暫停VatchiLWatch2Xfatch3\W?<cM/|RfC|COL|OVR|REA£Ln3.Cal1>口fHSI1819at爾D與口冏B,開獨(dú)|00 31'電kKJt—|:)口!用我汁曬上機(jī)*F麗4S??|?I.Mfloat1;F1O41s1.StafSta*QvarSt.OgtI4t??F?0sjuft+ro現(xiàn)有變量觀察窗單步進(jìn)入結(jié)構(gòu)內(nèi)執(zhí)行單步從結(jié)構(gòu)的執(zhí)行中跳出市點(diǎn)變量觀察窗atnciude“staio.h"voidiwln()suw*?1/i;prlntf(a*sua>V\n*'.suR);Jfloati;floatatnciude“staio.h"voidiwln()suw*?1/i;prlntf(a*sua>V\n*'.suR);Jfloati;floatsun;|SUR>1.?:i-2.e;while(i<-1M)Trhhtcblkhtch:X"atch:>XnteM[PerformsImmediateevaluationofvariablesandexprettloatInB.Col1開司gJ'電”吟。I?:eg用電i+at電上 |三道/Wi+aHi上| -創(chuàng)天中jp6。3,1《],[□' >?<i圖10實(shí)驗(yàn)二順序結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?掌握scanf和printf的主要用法。.掌握常用轉(zhuǎn)換控制符的用法。.掌握賦值語句的用法。.掌握算術(shù)運(yùn)算符的運(yùn)算規(guī)律。二、實(shí)驗(yàn)內(nèi)容.編輯如下程序并運(yùn)行,記錄程序的輸出結(jié)果,體會(huì)格式輸出的使用。#include"stdio.h"voidmain(){printf("%d\n",42);printf("%5d\n",42);printf("%f\n",123.45);printf("%12An",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.3t\n",123.45);printf("%8,1f\n",123.55);printf("%8.0f\n",123.55);printf("%g\n",123.56789);.編輯如下的程序,并上機(jī)運(yùn)行3次,在每次運(yùn)行提供輸入數(shù)據(jù)時(shí)分別采用數(shù)據(jù)之間插入空格、每輸入一個(gè)數(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);}.改錯(cuò)題。下列程序多處有錯(cuò),請(qǐng)通過上機(jī)改正。使之符合下面的要求。#include"stdio.h1'voidmain()(doublea,b,c,s,v;printf(Inputa,b,c:\n);scanf(n%d%d%d';a,b,c);s=a*b;v=a*b*c;printf(ua=%db=%dc=%d\nM,a,b,c);printf(ns=%i\n,,,s,nv=%d\nn,v);)當(dāng)本程序運(yùn)行時(shí),要求按如下方式顯示和輸入:Inputa,b,c:2.0 2.0 3.0 (此處的2.02.03.0為用戶輸入的)a=2.000000 b=2.000000 c=3.000000s=4.000000 v=12.000000.編輯如下程序:/*字符類型定義及使用*/include"stdio.h"voidmain(){charcl,c2;cl='a";c2='b';print”“%c%c\n",cl,c2);)(1運(yùn)行此程序,記錄運(yùn)行結(jié)果。(2在最后增加一個(gè)語句:printf("%d%d\n",cl,c2);再運(yùn)行,并記錄分析結(jié)果。(3再將第5行charcl,c2;改為:intcl,c2;再使之運(yùn)行,并觀察記錄結(jié)果。(4再將第6,7行改為:cl=a;/*不用單引號(hào)*/c2=b;再運(yùn)行,記錄分析其運(yùn)行結(jié)果。(5再將第6、7行改為:cl="a";/*用雙引號(hào)*/c2="b”;再運(yùn)行,記錄分析其運(yùn)行結(jié)果。(6再將第6、7行改為:cl=300;/*用大于255的整數(shù)*/c2=400;再運(yùn)行,記錄分析其運(yùn)行結(jié)果。.編輯如下程序:/*自增自減運(yùn)算符*/include"stdio.h"voidmain(){inti,j,m,n;=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d“,i,j,m,n);I(1)運(yùn)行程序,記錄i、j、m、n各變量的值,分別作以下改動(dòng)并運(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);}.編程題。編寫程序,完成對(duì)于任意輸入的兩個(gè)整數(shù),求出它們的商和余數(shù)并進(jìn)行輸出。三、對(duì)上述實(shí)驗(yàn)內(nèi)容進(jìn)行總結(jié),寫出實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)三表達(dá)式的計(jì)算一、實(shí)驗(yàn)?zāi)康?掌握算術(shù)表達(dá)式、逗號(hào)表達(dá)式、賦值表達(dá)式的計(jì)算..特別注意運(yùn)算符%、/(整數(shù)的相除)、++和-運(yùn)算的規(guī)律。二、實(shí)驗(yàn)內(nèi)容.已知三角形的三邊a,b,c,求三角形面積的公式為:area=sqrt(s(s-a)(s-b)(s-c))其中:s=(a+b+c)/2,sqrt(x)表示x的平方根。要求編一程序,對(duì)任意輸入的a,b,c值,計(jì)算并輸出三角形的面積范圍。提示:sqrt是C的標(biāo)準(zhǔn)庫函數(shù),使用該函數(shù)應(yīng)將庫文件“math.h”包含到源文件中。另外注意三角形三邊的基本關(guān)系。.對(duì)以下程序進(jìn)行分析,看程序的輸出結(jié)果應(yīng)是什么,然后上機(jī)運(yùn)行該程序看實(shí)際結(jié)果與你分析的有無不同,找出原因。#include"stdio.h"voidmain()(intx=l,y=2,t;floatm;t=x/y;m=x/y;printf(M%d\t%8.3f\nH,t,m);t=x/(float)y;m=x/(float)y;printf(1,%d\t%8.3f\n,,,t,m);t=(float)x/y;m=(float)x/y;printf("%d\t%8.3nn”,t,m);.編輯以下程序:對(duì)程序進(jìn)行分析,看程序的輸出結(jié)果在下列各種情況下應(yīng)是什么,然后上機(jī)運(yùn)行該程序看實(shí)際結(jié)果(寫在實(shí)驗(yàn)報(bào)告里)與你分析的有無不同,找出原因.#include"stdio.h"voidmain()(intx,y,t;doublea;floatb;intc;scanf(ti%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))y/printf("%d%f%f\n",c,b,a);}⑴程序運(yùn)行時(shí),在鍵盤上輸入203⑵程序運(yùn)行時(shí),在鍵盤上輸入155三、對(duì)上述實(shí)驗(yàn)進(jìn)行總結(jié),寫出實(shí)驗(yàn)報(bào)告,把你通過本實(shí)驗(yàn)掌握的內(nèi)容整理出來。實(shí)驗(yàn)四選擇結(jié)構(gòu)程序設(shè)計(jì)(一)一、實(shí)驗(yàn)?zāi)康?掌握關(guān)系表達(dá)式和邏輯表達(dá)式的使用。.熟悉選擇結(jié)構(gòu)程序設(shè)計(jì)。.熟練使用if語句進(jìn)行程序設(shè)計(jì)。.使用switch語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。二、實(shí)驗(yàn)內(nèi)容.運(yùn)行以下程序,說明表達(dá)式值1和表達(dá)式值2的不同。#includewstdio.h"voidmain0(inta=3,b=2,c=l,d=0;printf("表達(dá)式l=%d\n\d==a>b+c);〃==判斷兩邊是否相等printf("表達(dá)式2=%d\n",d=a>b+c);〃=用于賦值.以下程序的功能是:從鍵盤輸入一個(gè)字符型數(shù)據(jù),若輸入一個(gè)數(shù)字字符「0-9),則將其轉(zhuǎn)換成相應(yīng)的整數(shù)顯示出來;若輸入其它字符,則顯示出錯(cuò)信息。#include"stdio.h*voidmain(){charc;scanf(H%c",&c);if /*條件表達(dá)式*/{c=c~,O';printf(Mc=%d\nn,c);)elseprintf("dataerror!\n");}實(shí)驗(yàn)步驟:(1)上機(jī)調(diào)試以上程序;⑵輸入0—9之間的任何字符,驗(yàn)證輸出結(jié)果是否和程序功能相符合;(3)輸入0一夕之外的任何字符,例如,輸入字母,aJ,驗(yàn)證輸出結(jié)果是否和程序功能相符合;(4)將條件表達(dá)式if('0'<=c<='9')改為if('0'<=c&&c<='9'),重復(fù)2、3步驟。分析、比較以上的輸出結(jié)果,總結(jié)字符變量c的取值在,之間在C語言編程中的正確描述。if語句的第一種形式為基本形式if(表達(dá)式)語句;其語義是:如果表達(dá)式的值非零(為真),則執(zhí)行其后的語句,否則不執(zhí)行該語句。編程:輸入兩個(gè)整數(shù),輸出其中的大數(shù)。提示:輸入兩個(gè)數(shù)a,b.把a(bǔ)先賦予變量max,再用if語句判別max和b的大小,如max小于b,則把b賦予max。因此max中總是大數(shù),最后輸出max的值。#include"stdio.hwvoidmainO]inta,b,max;scanf("%d%d\4a,&b);if(a>b)max=a;e1semax=b;printf("兩者中的大數(shù)為:%d\n",max);}if語句的第二種形式為if-else形式if(表達(dá)式)語句1;else語句2;其語義是:如果表達(dá)式的值非零(為真),則執(zhí)行語句1,否則執(zhí)行語句2。程序填空題。下列程序用于完成對(duì)輸入的整數(shù)判斷它是奇數(shù)還是偶數(shù),并給出相應(yīng)的提示。試完成它缺少的部分,并上機(jī)驗(yàn)證。#includewstdio.hwvoidmain()intx;scanf("%dR,&x);if(x%2==0)printf(wx=%disEven'd",x);〃偶數(shù)elseprintf(nx=%disOdd\nw,x); 〃奇數(shù))編程:輸入兩個(gè)整數(shù),輸出其中的大數(shù)。提示:改用if-else語句判別a,b的大小,若a大,則輸出a,否則輸出b。if語句的第三種形式為if-else-if形式(嵌套的if)當(dāng)有多個(gè)分支選擇時(shí),可采用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)某個(gè)值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語句。然后跳到整個(gè)if語句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語句n。然后繼續(xù)執(zhí)行后續(xù)程序。編程:要求判別鍵盤輸入字符的類別.可以根據(jù)輸入字符的ASCII碼來判別類型。由ASCII碼表可知ASCII值小于32的為控制字符。在“0”和“9”之間的為數(shù)字,在“A”和“Z”之間為大寫字母,在“a”和“z”之間為小寫字母,其余則為其它字符。這是一個(gè)多分支選擇的問題,用if-else-if語句編程,判斷輸入字符ASCII碼所在的范圍,分別給出不同的輸出。例如輸入為“g”,輸出顯示它為小寫字符。在嵌套中要特別注意if和else的配對(duì)問題。為了避免二義性,C語言規(guī)定,else總是與它前面最近的if配對(duì)。#includewstdio.h"voidmain()printf("輸入一個(gè)字符:\n“);scanf&x);ifTxY32)printfL控制字符\n”);elseif('0'<=x&&x<='9,)printf("數(shù)字\n");elseif(y<=x&VZ,)printf("大寫字母\n");elseif('a'<=x&&x<iz,)printf("小寫字母\n");elseprintf("其他字符\n字;分析以下程序的運(yùn)行結(jié)果并上機(jī)調(diào)試。程序1:#includeHstdio.hHvoidmain0inta=3,b=4,c=5,d=0;if(a>b)d=a;elseif(c>b)d=c;elsed=b;printf("d=%d\nn,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(Hd=%d\nn,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(nd=%d\nn,d);程序4:#include"stdio.h"voidmain0(inta=3,b=4,c=5,d=0;if(a>b)(if(c>b)d=c;}elsed=b;printf(nd=%d\nM,d);)編程:比較鍵盤依次輸入的兩個(gè)數(shù)a和b的大小關(guān)系,并根據(jù)大小關(guān)系分別輸出1(若a>b)、0(若a=b)、T(若a<b)。#includenstdio.hffvoidmain0inta,b;prinlf("輸入兩個(gè)數(shù)a和b:\nn);scanf("%d%d\&a,&b);if(a>b)printf(Ml\nM);if(a<b)printf(w-l\nw);elseprintf(w0\nw);.條件運(yùn)算符和條件表達(dá)式由條件運(yùn)算符組成條件表達(dá)式的一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3其求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為條件表達(dá)式的值,否則以表達(dá)式3的值作為整個(gè)條件表達(dá)式的值。用條件表達(dá)式對(duì)4中要求的輸出兩個(gè)數(shù)中的大數(shù)的程序重新編程。#include"stdio.h"voidmain0inta,b;prinlf("輸入任意兩個(gè)數(shù)a和b:\n");scanf(n%d%dN,&a,ib);a>b?printf(M%d\nn,a):printf(M%d\nw,b);.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)于一個(gè)語句標(biāo)號(hào),表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語句后自動(dòng)跳出整個(gè)switch語句。這是與前面介紹的if語句完全不同的,應(yīng)特別注意。程序分析題。分析以下程序,對(duì)分析的結(jié)果上機(jī)檢驗(yàn)。#includewstdio.hHvoidmain()intx=l,y=0,a=0,b=0;switch(x)case1:switch(y)(case0:a++;break;b++;break;}break;//此處沒有break的時(shí)候繼續(xù)向下執(zhí)行,加上break后跳出switch循環(huán)a++;b++;break;)printf("a=%d,b=%d\nn,a,b);)在程序中的〃abc前面,}后面添加一個(gè)break;再次運(yùn)行該程序,程序結(jié)果有何變化?在實(shí)驗(yàn)報(bào)告中對(duì)結(jié)果作出解釋。三、對(duì)上述實(shí)驗(yàn)進(jìn)行總結(jié),寫出實(shí)驗(yàn)報(bào)告,把你通過本實(shí)驗(yàn)掌握的內(nèi)容整理出來。實(shí)驗(yàn)五選擇結(jié)構(gòu)程序設(shè)計(jì)(二)一、實(shí)驗(yàn)?zāi)康倪M(jìn)一步掌握選擇結(jié)構(gòu)程序設(shè)計(jì),熟練運(yùn)用選擇語句編寫程序,提高調(diào)試和修改程序的能力。二、實(shí)驗(yàn)內(nèi)容.輸入三個(gè)整數(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的值即可。#include"stdio.hwvoidmain()(inta,b,c,max,min;printf("輸入三個(gè)整數(shù):\n");scanf(M%d%d%d",&a,&b,&c);a>b?max=a:max=b;a>b?min=b:min=a;if(c>max)max=c;if(c<min)min=c;printf("三者中最大數(shù)為:%d\n最小數(shù)為:%d\n\max,min);}.有一函數(shù):rxx<ly=y2x-ll=<x<103x-llx>=10用scanf函數(shù)輸入x的值(分別為x<l,1—10,>=10三種情況),求y值。分析:y是一個(gè)分段表達(dá)式.要根據(jù)x的不同區(qū)間來計(jì)算y的值。所以應(yīng)使用if語句。#include"stdio.hwvoidmain()intx,y;printf("輸入x的值:n);scanf&x);if(x<l)y=x;if(l<=x&&x<10)y=(2*x-l);if(10<-x)y?(3*x-ll);prinlf("則y值為:%d\n",y);).編寫程序,輸入三角形三邊a、b、c,判斷a、b、c能否構(gòu)成三角形,若不能則輸出相應(yīng)的信息,若能則判斷組成的是等腰、等邊、直角還是一般三角形。實(shí)驗(yàn)步驟與要求:(1)輸入一組數(shù)據(jù)3,4,8,觀察程序運(yùn)行結(jié)果,并與實(shí)驗(yàn)二中程序2做比較(2)另外再輸入幾組數(shù)據(jù)進(jìn)行測試:4,53,33,5⑶如果程序有誤,可采用“單步跟蹤執(zhí)行”的調(diào)試方法,確定錯(cuò)誤的出處。#include"stdio.hMvoidmain0(inta,b,c,x;prinlf("輸入三角形的三個(gè)邊長:\nw);scanf(n%d%d%d",&a,&b,&c);if((a+b)>c&4(a+c)>b4&(b+c)>a)(if(a==b||b=c||a==c)if(a==b&&b==c&&b==c)x=l;elsex=2;)if((a*a+b*b)==c*c11(a*a+c*c)==b*b|I(b*b+c*c)==a*a)x=3;switch(x)(printf("等邊三角形\n");break;printf("等腰三角形\n");break;printf("直角三角形\n");break;default:printf?一般三角形\n");};);if(c>=(a+b)I|b>=(a+c)I|a>=(b+c))prinlf("不能構(gòu)成三角形\n");)4.輸入某學(xué)生的成績,經(jīng)處理后給出學(xué)生的等級(jí),等級(jí)分類如下:90分以上(包括90):A80至90分(包括80):B70至80分(包括70):C60至70分(包括60):D60分以下: E方法一:(用if語句的嵌套)分析:由題意知如果某學(xué)生成績?cè)?0分以上,等級(jí)為A;否則,如果成績大于80分,等級(jí)為B;否則,如果成績大于70分,等級(jí)為C;否則,如果成績大于60分為D;否則,如果成績小于60分,等級(jí)為E;但當(dāng)我們輸入成績時(shí)也可能輸錯(cuò),出現(xiàn)小于0或大于100,這時(shí)也斐做處理,輸出出錯(cuò)信息。因此,再用if嵌套前,應(yīng)先判斷輸入的成績是否在0一100之間。#includewstdio.h*voidmain()intx;prinif("請(qǐng)輸入成績:\n“);scanf("%dn,&x);if(x>100||0)x)printf("出錯(cuò)信息!\n*);elseif(x>=90)printf("等級(jí)為A\n");elseif(x>=80)printf("等級(jí)為B\n");elseif(XA70)printf("等級(jí)為C\n");elseif(x>=60)prinlf("等級(jí)為D\n");elseprintf("等級(jí)為E\n");)方法二:用switch語句分析:switch語句是用于處理多分支的語句。注意,case后的表達(dá)式必須是一個(gè)常量表達(dá)式,所以在以用switch語句之前,必須把0-100之間的成績分別化成相關(guān)的常量。所有A(除100以外),B,C,D類的成績的共同特點(diǎn)是十位數(shù)相同,此外都是E類。則由此可得把score除十取整,化為相應(yīng)的常數(shù)。輸入測試數(shù)據(jù),調(diào)試程序。測試數(shù)據(jù)要覆蓋所有路徑,注意臨界值,例如此題中得100分,60分,。分以及小于0和大于100的數(shù)據(jù)。#include°stdio.hw
voidmainOintx,k;printf("請(qǐng)輸入成績:\n");scanf("%d\&x);k=x/10;if(x>100||0>x)k=U;elseif(x==100)k=10;elseif(k>?0446>k)k=0;switch(k)(case11:printf(”出錯(cuò)信息!\n");break;case10:prinif("等級(jí)為A\n");break;case9:printf("等級(jí)為A\n");break;case8:printf("等級(jí)為B\n");break;case7:printf("等級(jí)為C\Z);break;case6:printf("等級(jí)為D\n");break;case0:printf("等級(jí)為E\n");break;.編程設(shè)計(jì)一個(gè)簡單的計(jì)算器程序,要求根據(jù)用戶從鍵盤輸入的表達(dá)式:操作數(shù)1運(yùn)算符OP操作數(shù)2計(jì)算表達(dá)式的值,指定的運(yùn)算符為加(+)、減(-)、乘(*)、除(/)用if及switch語句實(shí)現(xiàn)。程序運(yùn)行舉例:Pleaseentertheexpression:22.12+12.10屏幕W 22 (鍵盤輸入程序輸出voidmain0(floata,b,c;chart,k;printfCTleaseentertheexpression:\n");scanf("%f%cif(l+')c=a+b;elseif(t=z-z)c=a-b;elseif(t=='*')c=a*b;elseif(t==z/z)csa/b;printf("%f%c%f%c\n“,a,t,b,k,c);
.用scanf函數(shù)輸入一個(gè)年份year,計(jì)算這一年2月份的天數(shù)days,然后用輸出函數(shù)printf■輸出days。實(shí)驗(yàn)步驟與要求:⑴有變量定義為整型.⑵輸入前要加提示語句。⑶輸出結(jié)果前要有必要的文字說明。說明:⑴閏年的條件是:year能被4整除但不能被100整除,或者year能被400整除。⑵如果year是閏年,則2月份的天數(shù)為29天,不是閏年則為28天。#includeHstdio.hwvoidmain()(intx;prinlf("輸入年份:"”scanf("%dn,&x);if(x%4==0&&x%100!=0)printf(1?此年份為閏年,2月有29天!”);elseprinlfC?此年份不是閏年,2月有28天!”);}[問題討論]對(duì)于多分支選擇結(jié)構(gòu)何時(shí)使用if語句的嵌套,何時(shí)使用switch語句?三、對(duì)上述實(shí)驗(yàn)進(jìn)行總結(jié),寫出實(shí)驗(yàn)報(bào)告,把你通過本實(shí)驗(yàn)掌握的內(nèi)容整理出來。實(shí)驗(yàn)六循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(一)一、實(shí)驗(yàn)?zāi)康?熟練掌握三種循環(huán)語句的應(yīng)用。.熟練掌握循環(huán)結(jié)構(gòu)的嵌套。.掌握break和continue語句的使用。.練習(xí)調(diào)試與修改程序。二、實(shí)驗(yàn)內(nèi)容while語句while語句的一般形式為:while(表達(dá)式)語句;while語句的語義是:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí),執(zhí)行循環(huán)體語句。編程:求1-100的奇數(shù)和。提示:參考教材107頁,例6.2,循環(huán)變量的步長值為2。#include"stdio.hM#include"math.hnvoidmain0(inti-1;intsum-0;while(i<100)(sum=i+sum;i=i+2;};printC("l-100的奇數(shù)和為:%d\n",sum);).do-whi1e語句do-whi1e語句的一般形式為:do(語句;}while(表達(dá)式);do-while語句的語義是:先執(zhí)行循環(huán)體語句一次,再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。編程:求1—100的偶數(shù)和。#includenstdio.hRvoidtnain0(inti=0;intsum=0;do(sum=sum+i;i-i+2;}while(i<*100);printf("1T00的偶數(shù)和為:%d\nw,sum);)for語句其一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)3)語句;for語句的語義是:⑴首先計(jì)算表達(dá)式1的值。⑵再計(jì)算表達(dá)式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,否則結(jié)束循環(huán)。⑶執(zhí)行循環(huán)體后再計(jì)算表達(dá)式3的值,轉(zhuǎn)回第2步重復(fù)執(zhí)行。下列程序用于輸出fibnocci數(shù)列的前20項(xiàng),每行輸出5個(gè)。請(qǐng)?zhí)羁?。說明:fibnocci數(shù)列的前兩項(xiàng)均為1,以后各項(xiàng)等于其前兩項(xiàng)之和。#include"stdio.hMvoidmain(){inti,fl,f2,f3,n;fl=l;f2?l;printf(n\n%d%dn,fl,f2);n=2;forg;i<20 ;i++)(if(i%5==0 )printf(M\nn);C3=fl+f2;printf("%d n,f3);n++;fl=f2;f2=f3;};}編程:⑴用for語句計(jì)算s=3+33+333(2)求5!#includeMstdio.hn/?voidmain0 〃①(intnow,s,i;now=3;s=0;for(i=l;i<-3;i++)(s=s+now;now=now*10+3;)printf("%d\n",s);)*/voidmainO 〃②(intk,j=l,i,m;printf("輸入一個(gè)正整數(shù)k:");scanf("%d\4k);m=k;for(i?l;i<=m;i++)(j=k*j;k一;J;printf("則k!為:%d\n",j);
break/continue語句:while(表達(dá)式1)whilewhile(表達(dá)式1)if(表達(dá)式2)break;if(表達(dá)式2)conitue說明冊(cè)各程序的4voidmain()#include"stdio.h"結(jié)束整個(gè)循環(huán)運(yùn)行結(jié)果并總結(jié)Break和cont>#include"stdio?voidmain()if(表達(dá)式2)break;if(表達(dá)式2)conitue說明冊(cè)各程序的4voidmain()#include"stdio.h"結(jié)束整個(gè)循環(huán)運(yùn)行結(jié)果并總結(jié)Break和cont>#include"stdio?voidmain()inti,sum=0;for(i=1;i<=10;i++){if(i>5)break;sum=sum+i;}循環(huán):同用法。結(jié)束本次inti,sum=0;{if(i<=5)continue;sum=sum+i;}printf(Hprintf(Hsum=%5d\nM,sum);printf("sum=%5d\n",sum);//break是結(jié)束整個(gè)循環(huán)體,continue是結(jié)束單次循環(huán)比方說:while(x++<10)(if(x==3)(break;printf("%d\r\n",x);)結(jié)果是輸出12就退出了整個(gè)while循環(huán)但是如果使用continuewhile(x++<10){if(x==3)continue;
)printf("%d\r\n",x);}結(jié)果是:1245678910可見他僅僅是不輸出3,因?yàn)樗Y(jié)束了本次循環(huán)編程:輸出100以內(nèi)能被7整除的數(shù)。提示:對(duì)7~100的每一個(gè)數(shù)進(jìn)行測試,如該數(shù)不能被7整除,即模運(yùn)算不為0,則由continue語句轉(zhuǎn)去下一次循環(huán)。只有模運(yùn)算為0時(shí),才能執(zhí)行后面的printf語句,輸出能被7整除的數(shù)。(參考教材115頁,例6.5)循環(huán)嵌套三種循環(huán)控制語句可以互相嵌套,即在一個(gè)循環(huán)體內(nèi)部又可以出現(xiàn)另一循環(huán)。輸出100以內(nèi)的素?cái)?shù)。素?cái)?shù)是只能被1和它本身整除的數(shù)。判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到這個(gè)數(shù)減1(或2到sqrt(這個(gè)數(shù))),如果能被整除,則表明此數(shù)不是素?cái)?shù),反之是素?cái)?shù)。#include"math.hw#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)表示對(duì)2~100的數(shù)逐個(gè)判斷是否是素?cái)?shù),在第二層循環(huán)
中則對(duì)數(shù)n用2~n-l逐個(gè)去除,若某次除盡則跳出該層循環(huán),說明不是素?cái)?shù)。如果在所有的數(shù)都是未除盡的情況下結(jié)束循環(huán),則為素?cái)?shù),此時(shí)有i>=n,故可經(jīng)此判斷后輸出素?cái)?shù)。然后轉(zhuǎn)入下一次大循環(huán)。編程:⑴求100-200之間的素?cái)?shù),把它們按每行5個(gè)素?cái)?shù)全部顯示出來,并給出素?cái)?shù)的個(gè)數(shù)。⑵輸出9*9口訣表。提示:分行與列考慮,共9行9歹上外循環(huán)控制行,內(nèi)循環(huán)控制列。[內(nèi)容討論].小結(jié)三種形式的循環(huán)使用的區(qū)別..小結(jié)循環(huán)嵌套的規(guī)定和應(yīng)用三、對(duì)上述實(shí)驗(yàn)進(jìn)行總結(jié),寫出實(shí)驗(yàn)報(bào)告,把你通過本實(shí)驗(yàn)掌握的內(nèi)容整理出來。實(shí)驗(yàn)七循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(二)一、實(shí)驗(yàn)?zāi)康倪M(jìn)一步掌握循環(huán)結(jié)構(gòu)程序設(shè)計(jì),熟練運(yùn)用循環(huán)語句編寫程序,提高調(diào)試和修改程序的能力。二、實(shí)驗(yàn)內(nèi)容1.編程求l+2!+3!+...+20!的和。分析:此程序只是把累加變成了累乘2.求和值1-'+1—' ,直到最后一項(xiàng)的絕對(duì)值小于10-4為止。3579n參考教材116頁,例6.6.輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。分析:計(jì)算兩個(gè)數(shù)的最大公約數(shù);首先,隨機(jī)輸入兩個(gè)數(shù)m,n(默認(rèn)m>n,若m〈n,則交換m與n);其次,使k為m除以n的余數(shù),如果m能被n整除,則k值為0,n為這兩個(gè)數(shù)的最大公約數(shù),否則,使k代替n,n代替m,重復(fù)以上過程,直到k值為0。.分析下面程序的運(yùn)行結(jié)果,然后上機(jī)運(yùn)行,進(jìn)一步體會(huì)continue語句和break語句。#includeHstdio.hMvoidmain(){intn;while(1){printf('*Enteranumber:'*);scanf("%d",&n);if(n%2==l){printf(nIsaid");continue;}break;)printf("Thanks.Ineededthat!n);}.打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個(gè)“水仙花數(shù)”,因?yàn)?53=1、+5^+3、分析:利用for循環(huán)控制100—999個(gè)數(shù),每個(gè)數(shù)分解出個(gè)位,十位,百位。.打印出以下圖形**********************分析:先把圖形分成兩部分來看待,前四行一個(gè)規(guī)律,后三行一個(gè)規(guī)律。每一部分利用雙重for循環(huán),外循環(huán)控制行,內(nèi)循環(huán)控制列。內(nèi)循環(huán)又由兩個(gè)并列的for循環(huán),一個(gè)控制空格的輸出,一個(gè)控制星號(hào)的輸出。三、對(duì)上述實(shí)驗(yàn)進(jìn)行總結(jié),寫出實(shí)驗(yàn)報(bào)告,把你通過本實(shí)驗(yàn)掌握的內(nèi)容整理出來.實(shí)驗(yàn)八數(shù)組應(yīng)用(一)一、實(shí)驗(yàn)?zāi)康?掌握一維數(shù)組的定義及初始化。.掌握一維數(shù)組元素的引用及其應(yīng)用。二、實(shí)驗(yàn)內(nèi)容.閱讀下面程序,寫出程序運(yùn)行結(jié)果,并且上機(jī)進(jìn)行驗(yàn)證。^include"stdio.h"voidmain()(inti,n[4]={0,0,0,0};for(i=l;i<4;i++)(if(i==3)break;n[i]=n[i-l]+l;)printf(un[i-l]=%dn[i]=%d\n",n[i-l],n[i]);^include"stdio.h"voidmain()(charch[]={'O','T,'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)printfb[i]);printf("\n");.程序填空(根據(jù)題意在空白處填入適當(dāng)?shù)膬?nèi)容,使程序變得完整。并上機(jī)進(jìn)行調(diào)試驗(yàn)證)(1)程序說明:下列程序完成的是插入排序功能:數(shù)組a中存放一個(gè)遞增數(shù)列,輸入一個(gè)整數(shù)x,將它插入到數(shù)組中,使之仍為一個(gè)有序數(shù)列。#include"stdio.h"#defineN10
voidmain()(inta[]={l,10,20,30,40,50,60,70,80,90),x,i,p;scanf&x);for(i=0,p=N;i<N;i++)if(x<a[i])P=i;for(i=N-l;i>=p;)a[i+l]=a[i];printf('%d”,x);for(i=0;i<=N;i++)printf("%5d",a[i]);printf(〃\n");(2)程序說明:下面程序完成的是折半查找。A數(shù)組中存放的是n個(gè)由大到小已經(jīng)排好序的數(shù)列,從這n個(gè)數(shù)中查找x的值是否存在。其基本思想是:在查找范圍里,將x與處于中間位置上的數(shù)比較,如果相等,則查找成功,如果小于該元素,則在較小的一半元素里再進(jìn)行折半查找;如果x大于該元素,則在較大的一半元素里再進(jìn)行折半查找。變量top,bottom,mid分別指向查找范圍的頂部、底部和中間位置。#includeMstdio.hM#definen10main()(inta[n],find;intx,i,top,bottom,mid;printf(ninputthesortednumbers:\nH);TOC\o"1-5"\h\zfor(i=0;i<n;i++)scanf );printf(ninputthenumbertofind:\nn);scanf(H%d",&x);find=0;top=0;bottom=n-l;if(x<=a[0]&& )while(!find&&top<=bottom)(mid= ;if(x==a[mid])(find=l;printf(nx=%dposition=%d\nH,x,mid);}elseif( )bottom=mid-l;elsetop=mid+l;if( )printf("thenumber%disnotinthetable",x);).程序設(shè)計(jì)(根據(jù)題意編寫程序并上機(jī)進(jìn)行調(diào)試)。(1)編寫程序完成如下功能:輸入10個(gè)數(shù)存入一維數(shù)組,然后再按逆序重新存放后輸出。(2)編寫程序完成如下功能:從鍵盤輸入兩個(gè)字符串ch2、chi,然后將字符串ch2連接到字符串chi的后面,并輸出連接后的字符串。(3)編寫程序完成如下功能:現(xiàn)有兩個(gè)已按升序排好的數(shù)組,將它們合并為一個(gè)升序排序的數(shù)組(歸并排序)。算法:兩個(gè)數(shù)組合并時(shí),可為每個(gè)數(shù)組各安排一個(gè)指針,從第一個(gè)元素開始依次比較兩數(shù)組對(duì)應(yīng)元素,小的取下來順序放入新的數(shù)組,取下所指元素的指針后移,再比較,依此類推,直到其中一個(gè)數(shù)組的元素已全部放入新數(shù)組,再把另一數(shù)組余下的元素全部順序放入新數(shù)組,歸并完成。實(shí)驗(yàn)九數(shù)組應(yīng)用(二)一、實(shí)驗(yàn)?zāi)康?掌握二維數(shù)組的定義和初始化。.掌握二維數(shù)組元素的引用及其應(yīng)用。二、實(shí)驗(yàn)內(nèi)容.閱讀下面程序,寫出程序運(yùn)行結(jié)果,并且上機(jī)進(jìn)行驗(yàn)證。(1)#includettstdio.h”voidmain()(inta[][3]={9,7,5,3,1,2,4,6,8);inti,j,sl=0,s2=0;for(i=0;i<3;i++)for(j=0;j<3;j++)(if(i==j)sl-sl+a[i][j];if(i+j==2)s2=s2+a[i][j])printf(nsl=%ds2=%dn,si,s2);}(2)#includeMstdio.hMvoidmain()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");)}.程序填空(根據(jù)題意在空白處填入適當(dāng)?shù)膬?nèi)容,使程序變得完整。并上機(jī)進(jìn)行調(diào)試驗(yàn)證)(1)程序說明:下面程序分別輸出方陣中主對(duì)角線、副對(duì)角線上元素的和suml和sum2(主對(duì)角線為從矩陣的左上角至右下角的連線,副對(duì)角線為從矩陣的右上角至左下角的連線).#include"stdio.h"#defineSIZE5voidmain()(inta[SIZE][SIZE],m,n,suml,sum2;for(m=0;m<SIZE;m++)for(n=0;n<SIZE;n++)scanf("%d",&a[m][n]);TOC\o"1-5"\h\zsuml=sum2= ;for(m=0;m<SIZE;m++)(suml=suml+ ;sum2=sum2+ ;}printf("suml=%dsum2=%d\n",suml,sum2);)(2)程序說明:下面程序打印出如下所示的楊輝三角行(打印10行)。I1112113311464 1151010 51#include"stdio.hvoidmain()inti,j,a[10][10]={{l},{1,1}};for(i=2;i<10;i++)(a[i][0]=l; ;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ī)進(jìn)行調(diào)試)。(1)設(shè)有一個(gè)3行5列的數(shù)組,編寫程序從鍵盤輸入數(shù)據(jù),并找出二維數(shù)組中最大元素的值及其行、列下標(biāo).(2)已知A是一個(gè)3x4矩陣,B是一個(gè)4x5矩陣,編寫程序,從鍵盤輸入矩陣A、B的值,求AxB得到的新,并輸出矩陣C。(3)設(shè)某班有20個(gè)學(xué)生,每個(gè)學(xué)生選修了三門課,編寫程序,輸入20個(gè)學(xué)生三門課的成績,計(jì)算每個(gè)學(xué)生的平均成績,最后輸出每個(gè)學(xué)生三門課的成績及平均成績。實(shí)驗(yàn)十函數(shù)應(yīng)用(一)一、實(shí)驗(yàn)?zāi)康?掌握函數(shù)的定義、函數(shù)的說明和調(diào)用。.掌握函數(shù)的參數(shù)及其傳遞方式,函數(shù)值的正確返回。二、實(shí)驗(yàn)內(nèi)容.閱讀下面程序,寫出程序運(yùn)行結(jié)果,并且上機(jī)進(jìn)行驗(yàn)證。#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(na=%db=%ds=%d\nn,a,b,s);(2)#includeMstdio.hHintfun(intnum)(intk=l;do(k*=num%10;num/=10;while(num);return(k);}voidmain()(intn=26;printf(H%d\nn,fun(n));).程序填空(根據(jù)題意在空白處填入適當(dāng)?shù)膬?nèi)容,使程序變得完整。并上機(jī)進(jìn)行調(diào)試驗(yàn)證)(1)程序說明:下面程序?qū)⑤斎氲氖M(jìn)制數(shù)n轉(zhuǎn)換為b進(jìn)制數(shù),并將轉(zhuǎn)換結(jié)果輸出。轉(zhuǎn)換的方法是:除b取余法。#includenstdio.h"voidtransfer(intm,intk)(inta[20],i;for(i=0;m;i++){a[i]=;m/=k;)for(;i>=0;i―)printf(H%d",a[i]);)voidmain()(intb,n;scanf(n%d%dH,); ,)(2)程序說明:歌德巴赫猜想指出:任何一個(gè)充分大的偶數(shù)都可以表示為兩個(gè)素?cái)?shù)之和,例如4=2+26=3+38=3+5...50=3+47,下面程序?qū)?-50之間的所有偶數(shù)用兩個(gè)素?cái)?shù)之和表示,判斷一個(gè)整數(shù)是否為素?cái)?shù)用函數(shù)prime完成。#include"stdio.h"intprime(intx)(intk,flag=l;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-l;n++)if(prime(n)&&)(printf("%d=%d+%d\n",)break;)).程序設(shè)計(jì)(根據(jù)題意編寫程序并上機(jī)進(jìn)行調(diào)試)。(1)編寫程序求組合數(shù)C;= 其中n,m由鍵盤輸入。要求設(shè)計(jì)一個(gè)函數(shù)fac(n)求某個(gè)正整數(shù)n的階乘。(2)李生素?cái)?shù)是指兩個(gè)相差為2的素?cái)?shù)。例如3和5,5和7,11和13等。編寫程序輸出m對(duì)(m由鍵盤輸入)李生素?cái)?shù)。要求設(shè)計(jì)函數(shù)prime用于判斷某整數(shù)是否素?cái)?shù)。(3)找出2?1000以內(nèi)的完全數(shù)。說明:完全數(shù)是一個(gè)自然數(shù),它等于除本身以外的所有因子之和,例如:6=1+2+3,6就是一個(gè)完全數(shù)。要求定義一個(gè)函數(shù)來判斷并輸出實(shí)驗(yàn)十一函數(shù)應(yīng)用(二)一、實(shí)驗(yàn)?zāi)康?掌握函數(shù)的嵌套調(diào)用和遞歸調(diào)用.掌握數(shù)組做函數(shù)參數(shù)的用法.掌握全局變量和局部變量的用法。.掌握變量的存儲(chǔ)類別。二、實(shí)驗(yàn)內(nèi)容.閱讀下面程序,寫出程序運(yùn)行結(jié)果,并且上機(jī)進(jìn)行驗(yàn)證。#include“stdio.h"inta=3,b=5,c;intf(intb)(c=a+b;printf("%d%d%d\nu,a,b,c);)voidmain()(inta=8;M3);printf(H%d%d%d\nn,a,b,c);#includeT,stdio.hT,voiddtob(intn){inti;if(n>l){i=n%2;dtob(n/2);)elsei=n;printfC'%d\i);voidmain()inti=ll;printf("%d->n,i);dtob(i);printf("(2)\nH);}#include"stdio.h"intfl(intn)(staticintf=l;f=f*n;return(f);)voidmain0(inti;for(i=l;i<=4;i++)printf(n%5dM,fl(i));).程序填空(根據(jù)題意在空白處填入適當(dāng)?shù)膬?nèi)容,使程序變得完整。并上機(jī)進(jìn)行調(diào)試驗(yàn)證)(1)程序說明:用一個(gè)一維數(shù)組存放10個(gè)學(xué)生的成績,寫一個(gè)函數(shù)求出平均分、最高分和最低分。#include"stdio.hnfloatmax=0;min=0;floataverage(floatscore[],intn)(inti;floatave,sum=score[0];max=min=;for(i=l;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++)scanfC*%fn,);ave=average()printf(Hmax=%6.2fmin=%6.2faverage=%6.2f\n,max,min,ave);)(2)程序說明:在主函數(shù)中讀入一字符串,再讀入一字符,然后調(diào)用函數(shù)delete在字符串中查找并刪除該字符,最后輸出該字符串。#includenstdio.hMvoiddelete(charp[],charch)(inti=0,j;while()(if(p[i]==ch)for(j=i;j<;j++)p[i]=p[i+l];elsei++;)voidmain()(charp[80],ch;inti=0,j;scanf("%s",p);scanf("%c",&ch);delete();printf("%s",);}3.程序設(shè)計(jì)(根據(jù)題意編寫程序并上機(jī)進(jìn)行調(diào)試)。(1)程序說明:寫兩個(gè)函數(shù)分別求兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù),用主函數(shù)調(diào)用這兩個(gè)函數(shù),并輸出結(jié)果,兩個(gè)整數(shù)由鍵盤輸入。要求:求最大公約數(shù)用遞歸方法實(shí)現(xiàn),遞歸公式為(r=m%n):z、 \n' 匚。gcd(m,〃)7[gcd(n,r) r!=0(2)程序說明:用遞歸函數(shù)將一個(gè)整數(shù)n轉(zhuǎn)換成字符串,例如,輸入568,應(yīng)輸出字符串“865”。n的位數(shù)不確定,可以是任意位數(shù)的整數(shù)。(3)程序說明:編寫程序?qū)?0個(gè)學(xué)生5門課的成績進(jìn)行處理,要求分別用函數(shù)實(shí)現(xiàn)如下幾個(gè)功能:①輸入學(xué)生數(shù)據(jù);②求每個(gè)學(xué)生的平均分;③求每門課的平均分;④輸出平均分最高的學(xué)生的成績;⑤輸出學(xué)生成績表(包括每個(gè)學(xué)生的平均成績和每門課的平均成績)。實(shí)驗(yàn)十二指針的應(yīng)用一、實(shí)驗(yàn)?zāi)康恼莆罩羔樧兞康亩x和引用。二、實(shí)驗(yàn)內(nèi)容.編制如下程序,并上機(jī)調(diào)試運(yùn)行,最后在實(shí)驗(yàn)報(bào)告上寫出運(yùn)行結(jié)果。(1)使用指針作函數(shù)參數(shù),編寫用于交換兩個(gè)參數(shù)值的函數(shù)。調(diào)用該函數(shù)用于對(duì)從鍵盤輸入的兩個(gè)整數(shù)進(jìn)行交換。(2)編寫一個(gè)函數(shù),用于對(duì)作為參數(shù)的數(shù)組中的元素求平均值,函數(shù)以指針方式進(jìn)行處理。平均值為函數(shù)的返回值。(3)編寫一個(gè)函數(shù),用于對(duì)作為參數(shù)的數(shù)組中的元素求最大值,并將最大值從數(shù)組中刪除。函數(shù)的首部類似于下列形式:dele_max(int*,int*)其中第一個(gè)參數(shù)為指向數(shù)組的指針,第二個(gè)參數(shù)為指向數(shù)組長度變量的指針。因此調(diào)用數(shù)組時(shí),使用如下形式:dele_max(a,&n);其中a為一數(shù)組名,n為存放a數(shù)組長度的變量。.程序分析題。分析以下程序,對(duì)分析的結(jié)果上機(jī)檢驗(yàn)。(1)下列程序使用指針操作數(shù)組有各種形式,體會(huì)其用法。#include"stdio.h"main()(inta[]={0,1,2,3,4},i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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è)產(chǎn)品合同模板
- 樣才算正規(guī)購房合同模板
- 防水高壓注漿合同模板
- 屏幕采購合同模板
- 標(biāo)準(zhǔn)水果運(yùn)輸合同模板
- 虛假抵押車合同模板
- 裝修軟包合同模板
- 大廈房子出租合同模板
- 辦公場地租房合同模板
- (精心整理)課題最終成果簡介
- 服務(wù)質(zhì)量與顧客忠誠度關(guān)系之研究—以東森電視購物為例
- 結(jié)算單申請(qǐng)表
- 智慧消防系統(tǒng)詳細(xì)建設(shè)方案
- 西南交通大學(xué)鐵路車站及樞紐樞紐區(qū)段站課程設(shè)計(jì)說明書
- 上海市中小學(xué)生職業(yè)體驗(yàn)活動(dòng)項(xiàng)目申報(bào)表
- 1.天津市裝飾裝修定額說明、計(jì)算規(guī)則
- 對(duì)公客戶管理方案(修改版)
- 《政務(wù)禮儀》PPT課件.ppt
- 文身的危害PPT精選課件
- IFRS17保險(xiǎn)合同準(zhǔn)則評(píng)析及影響分析
評(píng)論
0/150
提交評(píng)論