c程序設(shè)計9循環(huán)結(jié)構(gòu)程序設(shè)計2_第1頁
c程序設(shè)計9循環(huán)結(jié)構(gòu)程序設(shè)計2_第2頁
c程序設(shè)計9循環(huán)結(jié)構(gòu)程序設(shè)計2_第3頁
c程序設(shè)計9循環(huán)結(jié)構(gòu)程序設(shè)計2_第4頁
c程序設(shè)計9循環(huán)結(jié)構(gòu)程序設(shè)計2_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C程序設(shè)計授課教師孫向群循環(huán)結(jié)構(gòu)程序設(shè)計專業(yè)名稱:食品質(zhì)量與平安第5章

循環(huán)結(jié)構(gòu)程序設(shè)計5.1為什么需要循環(huán)控制5.2用while語句實現(xiàn)循環(huán)5.3用do---while語句實現(xiàn)循環(huán)5.4用for語句實現(xiàn)循環(huán)5.5循環(huán)的嵌套5.6幾種循環(huán)的比較5.7改變循環(huán)執(zhí)行的狀態(tài)5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕5.7改變循環(huán)執(zhí)行的狀態(tài)5.7.1用break語句提前終止循環(huán)5.7.2用continue語句提前結(jié)束本次循環(huán)5.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕5.7.1用break語句提前終止循環(huán)break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句。程序設(shè)計〔ProgramminginC〕ProgramminginC〕例5.4在全系1000學(xué)生中,征集慈善募捐,當(dāng)總數(shù)到達10萬元時就結(jié)束,統(tǒng)計此時捐款的人數(shù),以及平均每人捐款的數(shù)目。5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕編程思路:循環(huán)次數(shù)不確定,但最多循環(huán)1000次在循環(huán)體中累計捐款總數(shù)用if語句檢查是否到達10萬元如果到達就不再繼續(xù)執(zhí)行循環(huán),終止累加計算人均捐款數(shù)5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕編程思路:變量amount,用來存放捐款數(shù)變量total,用來存放累加后的總捐款數(shù)變量aver,用來存放人均捐款數(shù)定義符號常量SUM代表1000005.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}指定符號常量SUM代表1000005.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}應(yīng)該執(zhí)行1000次5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}到達10萬,提前結(jié)束循環(huán)5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}實際捐款人數(shù)5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}只能用于循環(huán)語句和switch語句之中,而不能單獨使用5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}5.7.1用break語句提前終止循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕5.7.2用continue語句提前結(jié)束本次循環(huán)有時并不希望終止整個循環(huán)的操作,而只希望提前結(jié)束本次循環(huán),而接著執(zhí)行下次循環(huán)。這時可以用continue語句程序設(shè)計〔ProgramminginC〕ProgramminginC〕例5.5要求輸出100~200之間的不能被3整除的數(shù)。編程思路:對100到200之間的每一個整數(shù)進行檢查如果不能被3整除,輸出,否那么不輸出無論是否輸出此數(shù),都要接著檢查下一個數(shù)(直到200為止)。5.7.2用continue語句提前結(jié)束本次循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕Nn=100n≤200Yn能被3整除Nn=n+1輸出nYfor(n=100;n<=200;n++){if(n%3==0)

continue;printf("%d",n);}5.7.2用continue語句提前結(jié)束本次循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕5.7.3break語句和continue語句的區(qū)別continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行break語句結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立程序設(shè)計〔ProgramminginC〕ProgramminginC〕N表達式1Y表達式2N……Y…………N表達式1Y表達式2NY…………break語句continue語句強行退出循環(huán)只結(jié)束本次循環(huán)程序設(shè)計〔ProgramminginC〕ProgramminginC〕例5.6輸出以下4*5的矩陣。123452468103691215481216205.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕解題思路:可以用循環(huán)的嵌套來處理此問題用外循環(huán)來輸出一行數(shù)據(jù)用內(nèi)循環(huán)來輸出一列數(shù)據(jù)按矩陣的格式(每行5個數(shù)據(jù))輸出5.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){inti,j,n=0;for(i=1;i<=4;i++)for(j=1;j<=5;j++,n++){if(n%5==0)printf(“\n〞); printf("%d\t",i*j);}printf("\n"); return0;}累計輸出數(shù)據(jù)的個數(shù)控制一行內(nèi)輸出5個數(shù)據(jù)5.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){inti,j,n=0;for(i=1;i<=4;i++)for(j=1;j<=5;j++,n++){if(n%5==0)printf(“\n〞); printf("%d\t",i*j);}printf("\n"); return0;}雙重循環(huán)5.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){inti,j,n=0;for(i=1;i<=4;i++)for(j=1;j<=5;j++,n++){if(n%5==0)printf(“\n〞); printf("%d\t",i*j);}printf("\n"); return0;}控制輸出4行5.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){inti,j,n=0;for(i=1;i<=4;i++)for(j=1;j<=5;j++,n++){if(n%5==0)printf(“\n〞); printf("%d\t",i*j);}printf("\n"); return0;}控制每行中輸出5個數(shù)據(jù)5.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){inti,j,n=0;for(i=1;i<=4;i++)for(j=1;j<=5;j++,n++){if(n%5==0)printf(“\n〞); printf("%d\t",i*j);}printf("\n"); return0;}i=1時j由1變到5i*j的值是1,2,3,4,55.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){inti,j,n=0;for(i=1;i<=4;i++)for(j=1;j<=5;j++,n++){if(n%5==0)printf(“\n〞); printf("%d\t",i*j);}printf("\n"); return0;}i=2時j也由1變到5i*j的值是2,4,6,8,10如何修改程序,不輸出第一行的空行?5.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){inti,j,n=0;for(i=1;i<=4;i++)for(j=1;j<=5;j++,n++){if(n%5==0)printf(“\n〞);

printf("%d\t",i*j);}printf("\n"); return0;}if(i==3&&j==1)break;遇到第3行第1列,終止內(nèi)循環(huán)5.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){inti,j,n=0;for(i=1;i<=4;i++)for(j=1;j<=5;j++,n++){if(n%5==0)printf(“\n〞);

printf("%d\t",i*j);}printf("\n"); return0;}if(i==3&&j==1)continue;原來第3行第1個數(shù)據(jù)3沒有輸出5.7.3break語句和continue語句的區(qū)別程序設(shè)計〔ProgramminginC〕ProgramminginC〕5.8循環(huán)程序舉例

例5.7用

公式求

的近似值,直到發(fā)現(xiàn)某一項的絕對值小于10-6

為止(該項不累計加)。程序設(shè)計〔ProgramminginC〕ProgramminginC〕解題思路:求近似值的方法很多,此題是一種其他方法:5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕每項的分子都是1后一項的分母是前一項的分母加2第1項的符號為正,從第2項起,每一項的符號與前一項的符號相反5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕sign=1,pi=0,n=1,term=1當(dāng)term≥10-6pi=pi+termn=n+1sing=-signterm=sign/npi=pi*4輸出pi5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>#include<math.h>intmain(){intsign=1;doublepi=0,n=1,term=1;while(fabs(term)>=1e-6){pi=pi+term;n=n+2;sign=-sign;term=sign/n;}pi=pi*4;printf("pi=%10.8f\n",pi);return0;}求絕對值的函數(shù)只保證前5位小數(shù)是準(zhǔn)確的5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>#include<math.h>intmain(){intsign=1;doublepi=0,n=1,term=1;while(fabs(term)>=1e-6){pi=pi+term;n=n+2;sign=-sign;term=sign/n;}pi=pi*4;printf("pi=%10.8f\n",pi);return0;}改為1e-85.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕

例5.8求費波那西(Fibonacci)數(shù)列的前40個數(shù)。這個數(shù)列有如下特點:第1、2兩個數(shù)為1、1。從第3個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。即:5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕這是一個有趣的古典數(shù)學(xué)問題:有一對兔子,從出生后第3個月起每個月都生一對兔子。小兔子長到第3個月后每個月又生一對兔子。假設(shè)所有兔子都不死,問每個月的兔子總數(shù)為多少?5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕第幾個月小兔子對數(shù)中兔子對數(shù)老兔子對數(shù)兔子總數(shù)110012010131012411135212563238753513┇┇┇┇┇5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕輸出f1,f2Fori=1to38f3=f1+f2輸出f3f1=f2f2=f3f1=1,f2=15.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){intf1=1,f2=1,f3;inti;printf("%12d\n%12d\n",f1,f2);for(i=1;i<=38;i++){f3=f1+f2; printf("%12d\n",f3); f1=f2; f2=f3;}return0;}…代碼可改進5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){intf1=1,f2=1;inti;for(i=1;i<=20;i++){printf("%12d%12d",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}return0;}5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕例5.9輸入一個大于3的整數(shù)n,判定它是否素數(shù)(prime,又稱質(zhì)數(shù))。解題思路:讓n被i整除(i的值從2變到n-1)如果n能被2~(n-1)之中任何一個整數(shù)整除,那么表示n肯定不是素數(shù),不必再繼續(xù)被后面的整數(shù)除,因此,可以提前結(jié)束循環(huán)注意:此時i的值必然小于n5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕NNYn=i+1輸入ni=2i≤n-1Yn被i整除i≤a輸出不是素數(shù)Y輸出是素數(shù)N程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){intn,i;printf(“n=?");scanf("%d",&n);for(i=2;i<=n-1;i++)if(n%i==0)break;if(i<n)printf("%disnot\n",n);elseprintf("%dis\n",n);return0;}5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){intn,i;printf(“n=?");scanf("%d",&n);for(i=2;i<=n-1;i++)if(n%i==0)break;if(i<n)printf("%disnot\n",n);elseprintf("%dis\n",n);return0;}k=sqrt(n);5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){intn,i,k;printf(“n=?");scanf("%d",&n);for(i=2;i<=k;i++)if(n%i==0)break;if(i<n)printf("%disnot\n",n);elseprintf("%dis\n",n);return0;}k=sqrt(n);#include<math.h>5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕#include<stdio.h>intmain(){intn,i,k;printf(“n=?");scanf("%d",&n);for(i=2;i<=k;i++)if(n%i==0)break;if(i<=k)printf("%disnot\n",n);elseprintf("%dis\n",n);return0;}k=sqrt(n);#include<math.h>5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕

例5.10求100~200間的全部素數(shù)。解題思路:使用例5.9的算法在例5.9程序中只要增加一個外循環(huán),先后對100~200間的全部整數(shù)一一進行判定即可5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕……for(n=101;n<=200;n=n+2){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>=k+1) {printf("%d",n); m=m+1; } if(m%10==0)printf(“\n〞);}……只對奇數(shù)進行檢查控制每行輸出10個數(shù)據(jù)5.8循環(huán)程序舉例程序設(shè)計〔ProgramminginC〕ProgramminginC〕5.8循環(huán)程序舉例

例5.11譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收報人再按約定的規(guī)律將其譯回原文。ABCDEFG……WXYZ非字母字符保持原狀不變輸入一行字符,要求輸出其相應(yīng)的密碼程序設(shè)計〔ProgramminginC〕ProgramminginC〕解題思路:問題的關(guān)鍵有兩個:(1)決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應(yīng)改為哪個字符處理的方法是:輸入一個字符給字符變量c,先判定它是否字母(包括大小寫),假設(shè)不是字母,不改變c的值;假設(shè)是字母,那么還要檢查它是否’W’到’Z’的范圍內(nèi)(包括大小寫字母)。如不在此范圍內(nèi),那么使變量c的值改變?yōu)槠浜蟮?個字母。如果在’W’到’Z’的范圍內(nèi),那么應(yīng)將它轉(zhuǎn)換為A~D(或a~d)之一的字母。c=getchar();程序設(shè)計〔ProgramminginC〕ProgramminginC〕解題思路:問題的關(guān)鍵有兩個:(1)決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應(yīng)改為哪個字符處理的方法是:輸入一個字符給字符變量c,先判定它是否字母(包括大小寫),假設(shè)不是字母,不改變c的值;假設(shè)是字母,那么還要檢查它是否’W’到’Z’的范圍內(nèi)(包括大小寫字母)。如

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論