




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)四 程序設(shè)計(jì)-循環(huán)結(jié)構(gòu)程序設(shè)計(jì)4.1 實(shí)驗(yàn)要求與目的1. 理解循環(huán)條件、循環(huán)體以及循環(huán)的執(zhí)行過程2. 掌握及正確使用for、while和do-while語句實(shí)現(xiàn)循環(huán)程序設(shè)計(jì)3. 掌握break,continue語句正確使用4. 掌握雙循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)5. 掌握相關(guān)算法(累加、素?cái)?shù)、最值、窮舉法等)4.2 實(shí)驗(yàn)指導(dǎo)結(jié)構(gòu)化程序設(shè)計(jì)的三大結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。在實(shí)際生活中常說重復(fù)執(zhí)行某項(xiàng)工作多次,或重復(fù)執(zhí)行某項(xiàng)工作,達(dá)到某種要求為止。如果需要重復(fù)執(zhí)行某些操作,在程序設(shè)計(jì)就要用到循環(huán)結(jié)構(gòu)。C語言中提供了三種循環(huán)語句:for語句、while語句和do-while語句。1. for語句
2、是常用的一種循環(huán)語句,它的一般格式:for (表達(dá)式1; 表達(dá)式2; 表達(dá)式3)循環(huán)體語句 for循環(huán)語句的執(zhí)行過程:S1:計(jì)算表達(dá)式1的值;S2:計(jì)算表達(dá)式2的值,并判斷其值是真值(非0值),還是假值(0值)。若為真值,執(zhí)行步驟S3,反之執(zhí)行步驟S5;S3:執(zhí)行循環(huán)體語句;S4:計(jì)算表達(dá)式3的值;返回步驟S2;S5:結(jié)束循環(huán)(退出循環(huán));繼續(xù)執(zhí)行for 語句之后的后繼語句。2. while循環(huán)語句,它的一般格式:while ( 條件表達(dá)式 )循環(huán)體語句while循環(huán)語句的執(zhí)行過程:S1:計(jì)算條件表達(dá)式的值,并判斷其值是真值(非0值),還是假值(0值),若為真值,執(zhí)行步驟S2,否則執(zhí)行步驟S4
3、。S2:執(zhí)行循環(huán)體;S3:返回S1;S4:退出循環(huán),執(zhí)行while語句的后繼語句。3. do-while循環(huán)語句,它的一般格式:do 循環(huán)體語句while( 條件表達(dá)式 );do-while循環(huán)語句的執(zhí)行過程:S1:執(zhí)行循環(huán)體語句;S2:計(jì)算條件表達(dá)式的值,并判斷其值是真值(非0值),還是假值(0值),若為真值,返回執(zhí)行步驟S1,否則執(zhí)行步驟S3;S3:退出循環(huán),執(zhí)行do-while語句的后繼語句。循環(huán)結(jié)構(gòu)在程序設(shè)計(jì)時,需清楚四個部分,循環(huán)控制變量的初值、循環(huán)條件的判斷、循環(huán)體語句(需要重復(fù)操作的語句)和改變循環(huán)控制變量的變化值。【4.1】編程實(shí)現(xiàn),從鍵盤輸入10個整數(shù),求出它們的最大數(shù)。程序
4、文件名ex4_1.c。分析:在上次實(shí)驗(yàn),編程實(shí)現(xiàn)了求兩個整數(shù)的最大數(shù),現(xiàn)將問題擴(kuò)展到20個數(shù),算法思想是一樣的。求任意n個整數(shù)的最大(小)數(shù)的常用算法:定義兩個變量,一個變量max(min)存放最大(小)數(shù),另一個變量a存放輸入的一個整數(shù)。S1:首先對max賦初值。通常將輸入的第一個數(shù)賦給最大(?。?shù),即max=a(min=a);S2:輸入下一個數(shù),并賦給a;S3:max與a進(jìn)行比較,若a大于max的值,將a的值賦給max;S4:返回S2。依次循環(huán)(重復(fù)執(zhí)行),直到20個數(shù)都一一進(jìn)行了比較,max變量中最后存儲的數(shù)就是最大值。而重復(fù)進(jìn)行的“工作”,就是循環(huán)結(jié)構(gòu)的循環(huán)體。解決的兩個關(guān)鍵問題:1.
5、max的初值如何給定?常采用的方法是,把輸入的第一個數(shù)賦給max變量。2.采用循環(huán)結(jié)構(gòu)時,如何控制循環(huán)次數(shù)?因要從10個數(shù)中求最大值,但第一數(shù)已賦給max,因此max與剩下的9個數(shù)進(jìn)行比較,所以循環(huán)9次。本題已確定了循環(huán)次數(shù),通常采用for循環(huán)語句。編寫源程序一,程序文件名ex4_1.c。#includevoid main() int a,max,i; scanf(%d,&a); max=a; /*將輸入的第一個數(shù)作為最大數(shù)*/ for(i=1;i10;i+) /*循環(huán)9次*/ scanf(%d,&a); /*輸入待比較的數(shù)*/ if (maxa) max=a; /*輸入的數(shù)與max的值進(jìn)行比
6、較*/ printf(The max value is:%dn,max);輸入測試數(shù)據(jù):21 765 78 9 456 89 76 32 90 76程序運(yùn)行結(jié)果:The max value is:765循環(huán)結(jié)構(gòu)的三種循環(huán)語句可以相互轉(zhuǎn)換,也就是說選擇任意一種循環(huán)語句能實(shí)現(xiàn)的循環(huán)結(jié)構(gòu),同樣可以用其余兩種循環(huán)語句實(shí)現(xiàn)。即用for語句可以實(shí)現(xiàn)的循環(huán),用while或do-while同樣可以實(shí)現(xiàn)。當(dāng)給定了循環(huán)次數(shù),首選for循環(huán)語句,若循環(huán)次數(shù)不明確,需要通過某條件控制循環(huán)時,首選while或do-while循環(huán)語句。while語句與do-while語句的區(qū)別是,while是先判斷,后執(zhí)行,而do-wh
7、ile是先執(zhí)行,后判斷。編寫源程序二,程序文件名ex4_11.c。#includevoid main() int a,max,i; scanf(%d,&a); max=a; /*將輸入的第一個數(shù)作為最大數(shù)*/ i=2; /*前面已經(jīng)輸入過一個數(shù),因此i的初值從2開始*/ while (i=10) /*循環(huán)9次*/ scanf(%d,&a); if (maxa) max=a; i+; /*i為循環(huán)控制變量,統(tǒng)計(jì)輸入數(shù)的個數(shù)*/ printf(The max value is:%dn,max);編寫源程序三,程序文件名ex4_12.c:#includevoid main() int a,max,i
8、; scanf(%d,&a); max=a; i=2;do scanf(%d,&a); if (maxa) max=a; i+; while (i=10);printf(The max value is:%dn,max);小結(jié):1. 無論選擇哪種循環(huán)語句,循環(huán)體若由兩條以上的語句,必須用花括號括起來,組成一條復(fù)合語句。C程序約定,循環(huán)體默認(rèn)只有一條語句。2. 無論何種循環(huán)語句,其執(zhí)行特點(diǎn)是:循環(huán)條件為真,繼續(xù)執(zhí)行循環(huán)體,循環(huán)條件為假,退出循環(huán)。【4.2】編程實(shí)現(xiàn),判斷一個正整數(shù)是否是素?cái)?shù),若是輸出“YES”,否則輸出“No”。程序文件名ex4_2.c 。分析:所謂素?cái)?shù)(質(zhì)數(shù))就是除1和它本身之
9、外沒有其他因子的數(shù)。換句話說只能被 1和它本身整除的數(shù)就是素?cái)?shù)(質(zhì)數(shù))。判斷一個數(shù)是否是素?cái)?shù),可分兩步實(shí)現(xiàn):第1步,逐一驗(yàn)證除1和它本身之外數(shù)能否整除該數(shù)。若該數(shù)為m,則驗(yàn)證從2開始至m-1為止的所有數(shù)能否整除該數(shù)。第2步,得出結(jié)論。由第1步可知若其中有一個數(shù)能整除該數(shù),則該數(shù)不是素?cái)?shù),否則是素?cái)?shù)。將問題的所有可能的情況逐一驗(yàn)證,直到找到解或?qū)⑷靠赡艿那闆r都測試為止的算法,稱為窮舉法。窮舉法是程序設(shè)計(jì)中常用的算法之一。窮舉算法特點(diǎn)是算法簡單,但運(yùn)行時所花費(fèi)的時間量大。窮舉法在程序設(shè)計(jì)中,主要采用循環(huán)語句和選擇語句,循環(huán)語句用于控制窮舉所有可能的情況,也可以說是對所有可能進(jìn)行驗(yàn)證的范圍,而選擇
10、語句判斷當(dāng)前設(shè)定的條件是否滿足的狀態(tài)解。采用窮舉法編程實(shí)現(xiàn)判斷整數(shù)m是否是素?cái)?shù)。程序設(shè)計(jì)的循環(huán)語句控制驗(yàn)證范圍,1到m-1。選擇語句的條件就是判斷該數(shù)能否被1到m-1的數(shù)整除,若驗(yàn)證有一個數(shù)能整除該數(shù),就立刻中斷循環(huán)退出驗(yàn)證過程。由此循環(huán)語句退出,一種可能是所有的可能都驗(yàn)證完退出,即從2到m-1的所有數(shù)都驗(yàn)證完,沒有一個數(shù)能整除數(shù)m,其結(jié)論是數(shù)m是素?cái)?shù);另一種可能是其中一個數(shù)能整除該數(shù),則循環(huán)語句中斷退出,其結(jié)論是數(shù)m不是素?cái)?shù)。#include void main( ) int m,i; printf(Please enter a integern); scanf(%d,&m); for(i=
11、2;i=m-1;i+) if(m%i=0) break; if(im) printf(NOn); else printf(YESn);第一次運(yùn)行程序:輸入測試數(shù)據(jù):23程序運(yùn)行結(jié)果:YES第二次運(yùn)行程序:輸入測試數(shù)據(jù):145程序運(yùn)行結(jié)果:NO小結(jié):1. 驗(yàn)證m是否是素?cái)?shù)的范圍:2到m-1或2到m/2或2到。2. 在驗(yàn)證過程中,當(dāng)有一個數(shù)能整除數(shù)m,則其后的數(shù)就不必驗(yàn)證,可由break語句中斷該循環(huán)。 3. break 語句只能用在switch語句和循環(huán)語句,在循環(huán)語句中使用break語句時,通常和if語句連用,其含義是滿足某個條件時,退出循環(huán)。4. 當(dāng)循環(huán)退出時,循環(huán)控制變量i的值,決定了數(shù)m
12、到底是不是素?cái)?shù)。當(dāng)i=m時,m是素?cái)?shù)。5. 選擇結(jié)構(gòu)if-else可以有多種變數(shù),程序并非唯一的。如,if-else也可修改為:if(i=m) printf(YESn);else printf(NOn);【4.3】編程實(shí)現(xiàn):計(jì)算并輸出n(包括n)以內(nèi)能被5或9整除的所有自然數(shù)的倒數(shù)之和。程序文件名ex4_3.c。分析:本程序的關(guān)鍵問題求和,則采用累加算法,該算法采用循環(huán)結(jié)構(gòu)。算法思想,引入一個和變量sum,一個加數(shù)變量b,求和表達(dá)式為,sum=sum+b; 累加算法就是重復(fù)執(zhí)行求和表達(dá)式sum=sum+b的過程。細(xì)化問題,該求和表達(dá)式要執(zhí)行多少次,或滿足何條件就不再執(zhí)行;每次執(zhí)行時b如何變化。
13、具體問題具體分析。由題意,求自然數(shù)的倒數(shù)之和,倒數(shù)可考慮為1/i。循環(huán)次數(shù)為n。#include void main( ) int i,n; float sum=0.0; scanf(%d,&n); for(i=1;i=n;i+) if(i%5=0|i%9=0) sum+=1.0/i; printf(%f ,sum);輸入測試數(shù)據(jù):20程序運(yùn)行結(jié)果:s=0.583333小結(jié): 1. 求滿足能被5或9整除的所有自然數(shù)的條件表達(dá)式:i%5=0|i%9=0 2. 求分?jǐn)?shù)之和時,一定要考慮整型除整型的情況。源程序中變量i為整型,所以倒數(shù)1/i,在具體編程時可處理為1.0/i或1/(float)i的形式
14、?!?.4】編程實(shí)現(xiàn),計(jì)算的值。程序文件名:ex4_4.c。 分析:原題為求1+2!+10!。程序設(shè)計(jì)的核心是累加。觀察第n-1項(xiàng)與第n項(xiàng),可知第n-1項(xiàng)與第n項(xiàng)的關(guān)系為:n!=(n-1)!*n。由此該程序設(shè)計(jì),可采用遞推算法。遞推算法是計(jì)算機(jī)數(shù)值計(jì)算中的一個重要算法,算法思想是給定一個已知條件,根據(jù)前后項(xiàng)的關(guān)系,由前項(xiàng)推后項(xiàng)。假設(shè)變量t表示項(xiàng),t的初始值為1,則第n項(xiàng)的表達(dá)式為: t=t*n。 遞推算法,采用循環(huán)語句。#include void main() long i,n,sum=0,t=1; for(i=1;i=a&c=A&c=Z) c=c+32; putchar (c); 輸入測試數(shù)
15、據(jù):ABCd#$GTabc23程序運(yùn)行結(jié)果:abcD#$gtABC23小結(jié): 1. 循環(huán)條件表達(dá)式 (c=getchar()!=n,依據(jù)運(yùn)算符的優(yōu)先級,圓括號最優(yōu)先,先運(yùn)算c=getchar() ,從鍵盤上接收一個字符,賦予變量 c,然后再判斷變量 c的值是否不等于n,若是條件為真,執(zhí)行循環(huán)體,否則退出循環(huán)。 2. 循環(huán)條件表達(dá)式若修改為:c=getchar()!=n,關(guān)系運(yùn)算符優(yōu)先賦值運(yùn)算符,首先計(jì)算getchar()!=n,即當(dāng)從鍵盤接收的一個字符不等于回車符,返回值1,然后將1賦給字符變量c,數(shù)值既不是大寫字母也不是小寫字母,所以直接執(zhí)行putchar (c);輸出ASCII碼為1的字符
16、 。當(dāng)從鍵盤是接收的字符是回車符時,返回值0,條件為假,退出循環(huán)。 3. 若本題改為,從鍵盤輸入任意一串字符,以#號鍵結(jié)束時,while循環(huán)的循環(huán)條件表達(dá)式可修改為: (c=getchar()!=# ?!?.6】編程實(shí)現(xiàn),利用循環(huán)嵌套在屏幕上顯示如下圖形。程序文件名ex4_6.c。分析:打印圖形的程序設(shè)計(jì)的算法是將圖形看作是由行和列組成字符圖案,采用雙循環(huán)結(jié)構(gòu),外循環(huán)控制圖形的行數(shù),內(nèi)循環(huán)控制每一行輸出的字符。該圖形總共7行,第一行看上去只的一個“*”,但輸出時先要輸出6個空格,再輸出1個“*”,第二行先輸出5個空格,再輸出3個“*”,依次規(guī)律輸出每行的字符。每行應(yīng)由兩種字符組成的圖案,一個字
17、符是空格,一個字符是星號。因此,內(nèi)循環(huán)采用兩個并行循環(huán),第一個循環(huán)控制每行空格輸出的個數(shù),第二個循環(huán)控制每行“*”輸出的個數(shù)。由于每行的空格個數(shù)和“*”號數(shù)都不一樣,因此內(nèi)循環(huán)次數(shù)不是一個固定值,根據(jù)每行空格或“*”個數(shù)的規(guī)律設(shè)置內(nèi)循環(huán)的循環(huán)條件。若以第七行第一個“*”為坐標(biāo)原點(diǎn),則每行上空格的個數(shù)變化可設(shè)置為k6-i。用變量i表示行數(shù),用變量j表示每行上打印“*”的個數(shù),則每行上“*”的個數(shù)變化可設(shè)置j2*i+1。#include void main() int i,j,k; for (i=0;i7;i+) /*外循環(huán)控制圖形的行數(shù)*/ for (k=0;k6-i;k+) /*循環(huán)控制每行的
18、空格數(shù)*/ printf( ); for (j=0;j2*i+1;j+) /*循環(huán)控制每行的星號個數(shù)*/ printf(*); printf(n); /*每輸完一行圖形字符須換行*/ 小結(jié):1. 通常情況下圖形打印采用雙循環(huán)結(jié)構(gòu)。外循環(huán)控制圖形的行數(shù),內(nèi)循環(huán)控制每行的字符個數(shù)。內(nèi)循環(huán)的循環(huán)次數(shù)不是一個固定值,一般需要找出循環(huán)次數(shù)與外層循環(huán)控制變量之間的關(guān)系,以便確定內(nèi)層循環(huán)的次數(shù)。2. 外循環(huán)的循環(huán)體的最后一條語句通常是printf(n); 語句,控制每行的換行。3. 本程序使用了三個循環(huán)結(jié)構(gòu),其中第一個循環(huán)和第二、第三個循環(huán)是嵌套關(guān)系,而第二與第三個循環(huán)之間是并列關(guān)系。 循環(huán)嵌套編程時,內(nèi)外
19、循環(huán)的循環(huán)控制變量必須不相同,否則會出錯。但并行循環(huán)時循環(huán)控制變量可以相同,互不干涉。4.3 實(shí)驗(yàn)內(nèi)容4.3.1 夯實(shí)基礎(chǔ)【4.7】編程實(shí)現(xiàn),從鍵盤上輸入10個學(xué)生的成績,求平均成績、最高分和最低分。程序文件名ex4_7.c。 輸入測試數(shù)據(jù):34 56 87 90 87 65 78 87 96 69 程序運(yùn)行結(jié)果:max=96 min=34 avg=74.90【4.8】編程實(shí)現(xiàn),求 。程序文件名ex4_8.c。 程序的運(yùn)行結(jié)果為 47977.928968【4.9】編程實(shí)現(xiàn),計(jì)算。程序文件名ex4_9.c。【提示,在C語言中可調(diào)用log(n)求ln(n)?!?輸入測試數(shù)據(jù):20 程序的運(yùn)行結(jié)果為
20、 6.506583【4.10】編程實(shí)現(xiàn),求的值,其中a是一個數(shù)字。例如當(dāng)a為2,n為5時,計(jì)算,222222222222222的值?!疽?,a和n的值由鍵盤輸入。提示,可采用遞推算法?!砍绦蛭募鹐x4_10.c。輸入測試數(shù)據(jù):8 10 (其中a=8,n=10)程序運(yùn)行結(jié)果:1286608608 【4.11】編程實(shí)現(xiàn),輸入一行字符,分別統(tǒng)計(jì)出其中英文字母,空格,數(shù)字和其它字符的個數(shù)。程序文件名:ex4_11.c。輸入測試數(shù)據(jù):abcd !# 123 EFG 890 *&程序運(yùn)行結(jié)果:英文字符的個數(shù):7,空格的個數(shù):5, 數(shù)字字符的個數(shù):6,其它字符的個數(shù):6【4.12】編程實(shí)現(xiàn),求2100間的
21、所有素?cái)?shù)。程序文件名ex4_12.c。 程序運(yùn)行結(jié)果: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97【4.13】編程實(shí)現(xiàn),利用雙循環(huán)編程,輸出下列所示的圖形。程序文件名ex4_13.c。4.3.2 應(yīng)用提高【4.14】程序填空題。程序?qū)崿F(xiàn)的功能是譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收報(bào)人再按約定的規(guī)律將其譯回原文。請?zhí)羁?,填空時不得增行或刪行,也不得更改程序的結(jié)構(gòu),一條橫線上只能填寫一條語句!程序文件名ex4_14.c。例如,可以按如下規(guī)律將電文變成密碼:將字母A變成字母E,a變成e,即變成其后的第4個字母,W變成A,X變成B,Y變成C,Z變成D。字母按上述規(guī)律轉(zhuǎn)換,非字母字符不變。輸入測試數(shù)據(jù):Welcome to the country! 程序運(yùn)行結(jié)果:Aipgsqi xs xli gsyrxvc!#include void main() char c;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安裝防盜報(bào)警系統(tǒng)市場分析報(bào)告
- 操場場地租賃合同范本:適用于學(xué)校體育活動
- 水電費(fèi)精細(xì)化管理型廠房租賃合同范本及實(shí)施步驟
- 工業(yè)園區(qū)廠房抵押貸款合同
- 電子產(chǎn)品采購合同要素全面梳理
- 智能化車輛土方運(yùn)輸與現(xiàn)場施工管理合同
- 高新技術(shù)產(chǎn)業(yè)園區(qū)場地租賃合同終止及續(xù)約意向函
- 礦權(quán)質(zhì)押貸款合同
- 老人飲食護(hù)理課件
- 美術(shù)史介紹課件圖片模板
- 防靜電手環(huán)測試指導(dǎo)書
- GB/T 19806-2005塑料管材和管件聚乙烯電熔組件的擠壓剝離試驗(yàn)
- 社區(qū)工作者招聘考試筆試題庫大全(含答案詳解)
- 碼頭承包經(jīng)營合同
- DB37T2367-2022《回彈法檢測砌筑砂漿抗壓強(qiáng)度技術(shù)規(guī)程》
- 對生活飲用水的衛(wèi)生監(jiān)督
- 2022江蘇省中央財(cái)政補(bǔ)貼型奶牛養(yǎng)殖保險條款
- 樂山市口腔醫(yī)院門診牙科診所醫(yī)療機(jī)構(gòu)企業(yè)地址名單目錄
- WTO世界貿(mào)易組織概論期末復(fù)習(xí)題
- 外貿(mào)業(yè)務(wù)員KPI考核量表
- 智慧物業(yè)管理系統(tǒng)解決方案
評論
0/150
提交評論