C語言程序設(shè)計(jì)-循環(huán)_第1頁
C語言程序設(shè)計(jì)-循環(huán)_第2頁
C語言程序設(shè)計(jì)-循環(huán)_第3頁
C語言程序設(shè)計(jì)-循環(huán)_第4頁
C語言程序設(shè)計(jì)-循環(huán)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語言程序設(shè)計(jì)循環(huán)結(jié)構(gòu)while循環(huán)結(jié)構(gòu)while(條件表達(dá)式){}循環(huán)條件循環(huán)體含義:只要表達(dá)式結(jié)果為"真",就執(zhí)行循環(huán)體內(nèi)的語句。執(zhí)行完循環(huán)體的語句后,再算一次表達(dá)式的值,只要結(jié)果為"真",就繼續(xù)執(zhí)行循環(huán)體語句。直至條件不滿足為止。if(條件表達(dá)式){}含義:只要表達(dá)式結(jié)果為"真",就執(zhí)行復(fù)合語句體。執(zhí)行完后結(jié)束if語句,執(zhí)行后面的內(nèi)容。

可能執(zhí)行很多次只執(zhí)行一次如何設(shè)定循環(huán)條件是保證while結(jié)構(gòu)正常工作的關(guān)鍵。#include<stdio.h>main(){

inti,sum;sum=0;i=1;while(i<=100){sum=sum+i;i=i+1;}

printf("Sum=%d",sum);}例:求1~100之和,即循環(huán)變量設(shè)定循環(huán)條件循環(huán)體開始定義變量i,sumi=1sum=0sum=sum+1用printf輸出sum結(jié)束i≤100?YNi++循環(huán)結(jié)構(gòu)條件表達(dá)式中的變量在循環(huán)體前設(shè)定初值,并在循環(huán)體內(nèi)發(fā)生改變,是循環(huán)有始有終的前提。注意事項(xiàng):如果循環(huán)體內(nèi)只有一條語句,則可以不用大括號(hào){};語法上并沒有要求一定要存在循環(huán)初始條件的設(shè)定,也沒有要求循環(huán)條件中的變量必須在循環(huán)體內(nèi)改變,但邏輯上要求有,否則將成為無效循環(huán)或死循環(huán)。循環(huán)變量在循環(huán)體內(nèi)的改變應(yīng)該有使循環(huán)條件不滿足的趨勢(shì)。例:讀程序,說明程序的功能。#include<stdio.h>main(){

intk,s,n;

scanf("%d",&n); s=1;k=1; while(k<=n/2) { s=s*(2*k-1); k++; } printf("%d\n",s);}n以內(nèi)所以奇數(shù)的乘積#include<stdio.h>main(){

intk,s,n1,n2

; scanf("%d,%d",&n1,&n2); s=0;i=n1; while(i<=n2) { if(i%2==0)s=s+i; i++; } printf("%d\n",s);}n1至n2間所有偶數(shù)之和例:計(jì)算兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)。#include<stdio.h>main(){

inti,max,min;

scanf("%d,%d",&max,&min); i=min; while(i>0) { if(max%i==0&&min%i==0)break; i--; }

printf("%d和%d的最大公約數(shù)是:%d\n",max,min,i); i=1; while(1) { if(min*i%max==0)break; i++; }

printf("%d和%d的最小共倍數(shù)是:%d\n",max,min,min*i);}分析:用試驗(yàn)的方法計(jì)算最大公約數(shù):

用1~min分別除max和min,看其余數(shù)是否同時(shí)為零;計(jì)算最小公倍數(shù):

用1~?分別乘以max和min,看其乘積是否相等。問題:計(jì)算最大公約數(shù)時(shí)如何設(shè)計(jì)循環(huán)的初始值和循環(huán)條件?計(jì)算最小公倍數(shù)時(shí)如何設(shè)定循環(huán)條件?do…while循環(huán)結(jié)構(gòu)do{

循環(huán)體}while(條件表達(dá)式)含義:執(zhí)行循環(huán)體內(nèi)的語句,只要表達(dá)式結(jié)果為"真",就反復(fù)執(zhí)行,直到條件不滿足為止。比較:

1.

do…while循環(huán)至少執(zhí)行一次循環(huán)體。2.while可能一次也不執(zhí)行循環(huán)體。3.兩者之間可以通過初始條件的設(shè)定相互轉(zhuǎn)化。while(條件表達(dá)式){}循環(huán)體例:判斷某個(gè)數(shù)是否是質(zhì)數(shù)。方法:根據(jù)定義,一個(gè)數(shù)如果只能被1和自身整除,則為質(zhì)數(shù)。#include<stdio.h>main(){

int

i,num; i=2;

scanf("%d",&num); do{ if(num%i==0)break; i++; }while(i<num); if(i<num)

printf("It'snotaprimenumber!"); else

printf("It'saprimenumber!");}開始輸入數(shù)字numi=2不是質(zhì)數(shù)結(jié)束i<numNYnum能被i整除i++YNi<numNY是質(zhì)數(shù)例:找出所有的水仙花數(shù)。

水仙花數(shù):153=13+53+33分析:窮舉搜索法對(duì)每個(gè)可能的數(shù)字進(jìn)行分解和計(jì)算,看其是否滿足水仙花數(shù)的條件。搜索范圍:100~999開始i=100分解i結(jié)束i<1000YY是水仙花?輸出NN#include<stdio.h>intmain(){ intn1,n2,n3,i; i=100; do{ n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; if(n1*n1*n1+n2*n2*n2+n3*n3*n3==i) printf("%d=%d+%d+%d\n",i,n1,n2,n3); i++; }while(i<1000);}for循環(huán)結(jié)構(gòu)for(初值表達(dá)式;循環(huán)條件;增量表達(dá)式){

循環(huán)體}含義:計(jì)算"初值表達(dá)式",作為循環(huán)變量的初始值設(shè)定;"循環(huán)條件"是否滿足?若滿足轉(zhuǎn)向步驟"3",否則轉(zhuǎn)向步驟"6";執(zhí)行循環(huán)體;計(jì)算"增量表達(dá)式",使循環(huán)變量變化,以趨于不滿足循環(huán)條件;執(zhí)行步驟"2";結(jié)束循環(huán),執(zhí)行后面的語句。初值表達(dá)式;while(循環(huán)條件){

增量表達(dá)式;}相當(dāng)于例:計(jì)算#include<stdio.h>main(){

int

i,n,sign; floate,pi;

scanf("%d",&n); pi=0.0;sign=1; for(i=1;i<n;i=i+1) { e=1.0/(2*i-1); pi=pi+sign*e; sign=-sign; }

printf("pi=%f\n",pi*4);}例:計(jì)算Fibonacci數(shù)列。

Fibonacci數(shù)列:1,1,2,3,5,8,13,21…開始輸入數(shù)列長(zhǎng)度:n循環(huán)初值:3循環(huán)條件:<n循環(huán)增量:1結(jié)束前兩個(gè)值:f1=1;f2=1;temp=f1+f2;f1=f2;f2=temp;輸出temp值循環(huán)體分析:1.初始值為1,1;2.后面的數(shù)字是前兩個(gè)數(shù)之和。#include<stdio.h>main(){

intf1,f2,temp,i,n;

scanf("%d",&n); f1=1;f2=1; printf("%d,%d",f1,f2);

for(i=3;i<=n;i++) { temp=f1+f2; f1=f2; f2=temp;

printf(",%d",temp); }}for循環(huán)的特點(diǎn)同時(shí)設(shè)定初值、循環(huán)條件、循環(huán)增量??梢詫?shí)現(xiàn)while結(jié)構(gòu)和do…while結(jié)構(gòu)。三種循環(huán)可以相互替代。作業(yè):P129,6.7P129,6.8for循環(huán)的不同形式標(biāo)準(zhǔn)for循環(huán):

for(初值表達(dá)式;條件表達(dá)式;增量表達(dá)式)省略初值表達(dá)式:主要用于無初始值設(shè)定或復(fù)雜初始化的情況。

for(;條件表達(dá)式;增量表達(dá)式)省略條件表達(dá)式:在循環(huán)體內(nèi)控制結(jié)束條件,主要用于多條件情況。

for(初值表達(dá)式;;增量表達(dá)式)省略增量表達(dá)式:主要用于不確定循環(huán)增量的情況。

for(初值表達(dá)式;條件表達(dá)式;)以上各種省略情況可以組合出現(xiàn)。例如:

for(初值表達(dá)式;;)

for(;條件表達(dá)式;)

for(;;)不同類型for循環(huán)應(yīng)用舉例省略增量表達(dá)式:for(i=1;i<100;){……if(x>0)i=i+2;elsei=i+1;……}省略條件表達(dá)式:for(i=1;;i++){……if(x>0)break;……if(m<3&&y>0break;……}省略初值表達(dá)式:f1=1;f2=1;for(;f2<100;){……}注意:for循環(huán)應(yīng)用很靈活,是否需要省略某個(gè)表達(dá)式,完全根據(jù)題目的要求和解題的思路確定,沒有硬性規(guī)定。省略前兩個(gè)表達(dá)式的時(shí)候,分號(hào)不能省略。例:找出大于300的最小的水仙花數(shù)。 水仙花數(shù):153=13+53+33#include<stdio.h>intmain(){ intn1,n2,n3,i; for(

) { n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; if(n1*n1*n1+n2*n2*n2+n3*n3*n3==i){ printf("%d=%d+%d+%d\n",i,n1,n2,n3); break; } }}分析:循環(huán)初始值i=300;循環(huán)終值?結(jié)束條件?循環(huán)增量?i=300;;i++while(){ …… while() {……} ……}do(){ …… while() {……} ……}while()while(){ …… for() {……} ……}for(){ …… while() {……} ……}for(){ …… do {……}while() ……}do{ …… for() {……} ……}while()循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)包含另一個(gè)完整的循環(huán),稱為循環(huán)的嵌套。循環(huán)的嵌套說明:1.三種不同類型的循環(huán)可以任意嵌套;2.循環(huán)嵌套必須層次分明,不允許交叉嵌套。3.循環(huán)嵌套的層數(shù)沒有限制;4.為保證層次分明,建議按標(biāo)準(zhǔn)格式書寫程序。for(){ …… while() { …… for() { …… } } ……}多重循環(huán)的執(zhí)行次數(shù)sum=0;for(i=1;i<100;i++){for(j=1;j<50;j++){sum=sum+1;}}sum=0;for(i=1;i<100;i++){for(j=1;j<i;j++){sum=sum+1;}}sum=0;for(i=1;i<100;i++){for(j=1;j<50;j++){if(j%2==0)continue;sum=sum+1;}if(sum>500)break;}循環(huán)執(zhí)行次數(shù):99*49=4851循環(huán)執(zhí)行次數(shù):0+1+2+3+…99=4950循環(huán)執(zhí)行次數(shù):難以確定#include<stdio.h>main(){

int

col,line,num;

scanf("%d",&num); for(line=1;line<=num;line++) { for(col=1;col<=num-line;col++)

printf(""); for(col=1;col<=2*line-1;col++)

printf("*");

printf("\n"); }}例:打印三角形****************分析:屏幕顯示原則:只能在當(dāng)前光標(biāo)位置顯示。光標(biāo)不能向左回退,不能向上回退。逐行打印,每行打印若干空格和若干星號(hào)。打印若干行。計(jì)算:行數(shù):鍵盤輸入n。每行空格數(shù):

1→3 2→2 3→1

每行星號(hào)數(shù):

1→1 2→3 3→5

回車,右邊的空格不考慮。y=n-行號(hào)y=行號(hào)*2-1作業(yè):書上P130,6.14例題:用二分法求方程的根。

方程:r1r2xyy1<0y2>0r*=(r2+r1)/2y*>0r*=(r2+r1)/2y*<0#include<stdio.h>#include<math.h>intmain(){ floatr1,r2,rt,f1,f2,ft; do{

printf("Enterx1&x2:"); scanf("%f,%f",&r1,&r2); f1=2*r1*r1*r1-4*r1*r1+3*r1-6; f2=2*r2*r2*r2-4*r2*r2+3*r2-6; }while(f1*f2>0); do{ f1=2*r1*r1*r1-4*r1*r1+3*r1-6; f2=2*r2*r2*r2-4*r2*r2+3*r2-6;

rt=(r1+r2)/2; ft=2*rt*rt*rt-4*rt*rt+3*rt-6; if(ft*f1<0.0)r2=rt; elser1=rt; }while(fabs(ft)>1.0e-5);

printf("x=%6.2f\n",rt);}無限循環(huán),直至輸入的猜測(cè)區(qū)間內(nèi)有根存在。do{

rt=(r1+r2)/2; ft=2*rt*rt*rt-4*rt*rt+3*rt-6; if(ft*f1<0.0){r2=rt;f2=ft;} else{r1=rt;f1=ft;}}while(fabs(ft)>1.0e-5);continue和break語句continue

無條件結(jié)束本次循環(huán),跳到循環(huán)起始語句,開始下一次循環(huán)。break

無條件跳出循環(huán),執(zhí)行循環(huán)后面的語句。for(){ …… continue; ……}while(){ …… break; ……}注意:break語句只能跳出它所在的那層循環(huán),不存在跳出所有循環(huán)的break。例:用continue語句改寫尋找水仙花數(shù)的程序。#include<stdio.h>intmain(){ intn1,n2,n3,i,t; i=100; do{ n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; t=n1*n1*n1+n2*n2*n2+n3*n3*n3; if(t==i) printf("%d=%d+%d+%d\n",i,n1,n2,n3); i++; }while(i<1000);}if(t!=i){i++;continue;}printf(……);#include<stdio.h>intmain(){ intn1,n2,n3,i,t; i=999; do{ n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; t=n1*n1*n1+n2*n2*n2+n3*n3*n3; if(t==i) printf("%d=%d+%d+%d\n",i,n1,n2,n3); i--; }while(i>100);}例:找出最大的水仙花數(shù)。if(t==i){

printf(……);

break;}i--;程序的調(diào)試方法與技巧構(gòu)建(build)

編譯系統(tǒng)進(jìn)行基本的語法檢查,并報(bào)告error和warning,只有消除語法錯(cuò)誤的程序才可能運(yùn)行。斷點(diǎn)設(shè)置

在程序的某行設(shè)置斷點(diǎn)后,程序運(yùn)行到該行時(shí)會(huì)暫停,可以查看變量的當(dāng)前值,也可以修改變量值。沒有語法錯(cuò)誤的程序不一定能正常執(zhí)行,也不一定能實(shí)現(xiàn)正確的功能,可能存在大量的邏輯錯(cuò)誤,軟件調(diào)試工作占到軟件編制工作的80%。VC開發(fā)環(huán)境提供了“斷點(diǎn)設(shè)置”和“單步跟蹤”功能,為軟件的調(diào)試提供了方便的工具。在光標(biāo)所在行設(shè)置斷點(diǎn)。可以根據(jù)需要設(shè)置多個(gè)斷點(diǎn)。斷點(diǎn)標(biāo)記在調(diào)試狀態(tài)下執(zhí)行程序彈出執(zhí)行窗口,等待鍵入數(shù)據(jù)箭頭表明當(dāng)前程序暫停的位置(即將要執(zhí)行的語句)。變量(Variables)窗口中顯示程序用到的變量及其當(dāng)前值。再次按F5,程序執(zhí)行到新的斷點(diǎn),并再次暫停。變量值發(fā)生了變化,并用紅色顯著地標(biāo)識(shí)出來。再次按F5,程序隨著循環(huán)的執(zhí)行再次停到了第一個(gè)斷點(diǎn)的位置。變量窗口不但可以顯示變量值,還可以動(dòng)態(tài)地修改。當(dāng)不再需要斷點(diǎn)時(shí),可隨時(shí)將光標(biāo)放在斷點(diǎn)行,按F9取消斷點(diǎn)。當(dāng)找到錯(cuò)誤的原因時(shí),可按shift+F5中斷程序的調(diào)試,返回到源程序窗口進(jìn)行修改。程序的調(diào)試方法與技巧單步跟蹤

“單步跟蹤”可以逐行執(zhí)行程序,每執(zhí)行一條語句后都會(huì)暫停,相當(dāng)于在每條語句上都設(shè)置了斷點(diǎn)。將光標(biāo)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論