循環結構程序設計典型例題課件_第1頁
循環結構程序設計典型例題課件_第2頁
循環結構程序設計典型例題課件_第3頁
循環結構程序設計典型例題課件_第4頁
循環結構程序設計典型例題課件_第5頁
已閱讀5頁,還剩43頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1循環結構程序設計典型例題

例1在全系1000學生中,征集慈善募捐,當總數達到10萬元時就結束,統計此時捐款的人數,以及平均每人捐款的數目。1循環結構程序設計典型例題例1在全系1000學生中,征2編程思路:循環次數不確定,但最多循環1000次在循環體中累計捐款總數用if語句檢查是否達到10萬元如果達到就不再繼續執行循環,終止累加計算人均捐款數2編程思路:3編程思路:變量amount,用來存放捐款數變量total,用來存放累加后的總捐款數變量aver,用來存放人均捐款數定義符號常量SUM代表1000003編程思路:4#include<stdio.h>#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}指定符號常量SUM代表1000004#include<stdio.h>指定符號常量SUM代表5#include<stdio.h>#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}應該執行1000次5#include<stdio.h>應該執行1000次6#include<stdio.h>#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}達到10萬,提前結束循環6#include<stdio.h>達到10萬,提前結束循7#include<stdio.h>#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}實際捐款人數7#include<stdio.h>實際捐款人數8#include<stdio.h>#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}只能用于循環語句和switch語句之中,而不能單獨使用8#include<stdio.h>只能用于循環語句和sw9

例2要求輸出100~200之間的不能被3整除的數。編程思路:對100到200之間的每一個整數進行檢查如果不能被3整除,輸出,否則不輸出無論是否輸出此數,都要接著檢查下一個數(直到200為止)。9例2要求輸出100~200之間的不能被3整除的數。10Nn=100n≤200Yn能被3整除Nn=n+1輸出nYfor(n=100;n<=200;n++){if(n%3==0)

continue;printf("%d",n);}10Nn=100n≤200Yn能被3整除Nn=n+1輸出nY11*****break語句和continue語句的區別continue語句只結束本次循環,而不是終止整個循環的執行break語句結束整個循環過程,不再判斷執行循環的條件是否成立11*****break語句和continue語句的區別co12N表達式1Y表達式2N……Y…………N表達式1Y表達式2NY…………break語句continue語句強行退出循環只結束本次循環12N表達式1Y表達式2N……Y…………N表達式1Y表達式213例3輸出以下4*5的矩陣。1234524681036912154812162013例3輸出以下4*5的矩陣。14解題思路:可以用循環的嵌套來處理此問題用外循環來輸出一行數據用內循環來輸出一列數據按矩陣的格式(每行5個數據)輸出14解題思路:15#include<stdio.h>voidmain(){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"); }累計輸出數據的個數控制一行內輸出5個數據15#include<stdio.h>累計輸出數據的個數控16#include<stdio.h>voidmain(){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"); }雙重循環16#include<stdio.h>雙重循環17#include<stdio.h>voidmain(){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"); }控制輸出4行17#include<stdio.h>控制輸出4行18#include<stdio.h>voidmain(){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"); }控制每行中輸出5個數據18#include<stdio.h>控制每行中輸出5個數19#include<stdio.h>voidmain(){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"); }i=1時j由1變到5i*j的值是1,2,3,4,519#include<stdio.h>i=1時j由1變到520#include<stdio.h>voidmain(){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"); }i=2時j也由1變到5i*j的值是2,4,6,8,10如何修改程序,不輸出第一行的空行?20#include<stdio.h>i=2時j也由1變到21#include<stdio.h>voidmain(){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"); }if(i==3&&j==1)break;遇到第3行第1列,終止內循環21#include<stdio.h>if(i==3&22#include<stdio.h>voidmain(){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"); }if(i==3&&j==1)continue;原來第3行第1個數據3沒有輸出22#include<stdio.h>if(i==3&23

例4用

公式求

的近似值,直到發現某一項的絕對值小于10-6

為止(該項不累計加)。(教材P96例4.21)(教材P98例4.24)(教材P101例4.27)23例4用24解題思路:求近似值的方法很多,本題是一種其他方法:24解題思路:25每項的分子都是1后一項的分母是前一項的分母加2第1項的符號為正,從第2項起,每一項的符號與前一項的符號相反25每項的分子都是126#include<stdio.h>#include<math.h>voidmain(){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);}求絕對值的函數只保證前5位小數是準確的26#include<stdio.h>求絕對值的函數只保證27#include<stdio.h>#include<math.h>voidmain(){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);}改為1e-827#include<stdio.h>改為1e-828

例5求費波那西(Fibonacci)數列的前40個數。這個數列有如下特點:第1、2兩個數為1、1。從第3個數開始,該數是其前面兩個數之和。即:28例5求費波那西(Fibonacci)數列的前4029這是一個有趣的古典數學問題:有一對兔子,從出生后第3個月起每個月都生一對兔子。小兔子長到第3個月后每個月又生一對兔子。假設所有兔子都不死,問每個月的兔子總數為多少?29這是一個有趣的古典數學問題:30第幾個月小兔子對數中兔子對數老兔子對數兔子總數110012010131012411135212563238753513┇┇┇┇┇30第幾個月小兔子對數中兔子對數老兔子對數兔子總數1100131輸出f1,f2Fori=1to38f3=f1+f2輸出f3f1=f2f2=f3f1=1,f2=131輸出f1,f2Fori=1to38f3=f1+f232#include<stdio.h>voidmain(){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;}}…代碼可改進32#include<stdio.h>…代碼可改進33#include<stdio.h>voidmain(){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;}}33#include<stdio.h>34

例6輸入一個大于3的整數n,判定它是否素數(prime,又稱質數)。解題思路:讓n被i整除(i的值從2變到n-1)如果n能被2~(n-1)之中任何一個整數整除,則表示n肯定不是素數,不必再繼續被后面的整數除,因此,可以提前結束循環注意:此時i的值必然小于n34例6輸入一個大于3的整數n,判定它是否素數(pr35NNYn=i+1輸入ni=2i≤n-1Yn被i整除i≤a輸出不是素數Y輸出是素數N35NNYn=i+1輸入ni=2i≤n-1Yn被i整除i36#include<stdio.h>voidmain(){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);}36#include<stdio.h>37#include<stdio.h>voidmain(){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);}k=sqrt(n);37#include<stdio.h>k=sqrt(n);38#include<stdio.h>voidmain(){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);}k=sqrt(n);#include<math.h>38#include<stdio.h>k=sqrt(n);39#include<stdio.h>voidmain(){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);}k=sqrt(n);#include<math.h>39#include<stdio.h>k=sqrt(n);40

例7求100~200間的全部素數。解題思路:使用例5.9的算法在例5.9程序中只要增加一個外循環,先后對100~200間的全部整數一一進行判定即可40例7求100~200間的全部素數。41

……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”);}……只對奇數進行檢查控制每行輸出10個數據41……只對奇數進行檢查控制每行輸出10個數據42

例8譯密碼。為使電文保密,往往按一定規律將其轉換成密碼,收報人再按約定的規律將其譯回原文。ABCDEFG……WXYZ非字母字符保持原狀不變輸入一行字符,要求輸出其相應的密碼42例8譯密碼。為使電文保密,往往按一定規律將其轉換43解題思路:問題的關鍵有兩個:(1)決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應改為哪個字符處理的方法是:輸入一個字符給字符變量c,先判定它是否字母(包括大小寫),若不是字母,不改變c的值;若是字母,則還要檢查它是否’W’到’Z’的范圍內(包括大小寫字母)。如不在此范圍內,則使變量c的值改變為其后第4個字母。如果在’W’到’Z’的范圍內,則應將它轉換為A~D(或a~d)之一的字母。c=getchar();43解題思路:問題的關鍵有兩個:c=getchar();44解題思路:問題的關鍵有兩個:(1)決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應改為哪個字符處理的方法是:輸入一個字符給字符變量c,先判定它是否字母(包括大小寫),若不是字母,不改變c的值;若是字母,則還要檢查它是否’W’到’Z’的范圍內(包括大小寫字母)。如不在此范圍內,則使變量c的值改變為其后第4個字母。如果在’W’到’Z’的范圍內,則應將它轉換為A~D(或a~d)之一的字母。if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))44解題思路:問題的關鍵有兩個:if((c>='a'&&45解題思路:問題的關鍵有兩個:(1)決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應改為哪個字符處理的方法是:輸入一個字符給字符

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論