2022年大學(xué)計(jì)算機(jī)專業(yè)課程教學(xué)課件 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第1頁
2022年大學(xué)計(jì)算機(jī)專業(yè)課程教學(xué)課件 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第2頁
2022年大學(xué)計(jì)算機(jī)專業(yè)課程教學(xué)課件 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第3頁
2022年大學(xué)計(jì)算機(jī)專業(yè)課程教學(xué)課件 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第4頁
2022年大學(xué)計(jì)算機(jī)專業(yè)課程教學(xué)課件 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

循環(huán)的概念解決的問題C語言中的幾種循環(huán)的形式1、goto2、while(條件) {}3、do{}while(條件);4、for(表達(dá)式1;表達(dá)式2;表達(dá)式3) {}第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)前面例題中的問題a,b,c賦初值s=(a+b+c/2)S=開方(s*(s-a)*(s-b)*(s-c))輸出面積S三角形面積1、分析已知:三條邊求:面積量化1、分析已知:a,b,c求:S2、算法找:數(shù)學(xué)公式(P.83)變:變成程序的算法S1:得到三條邊的長度S2:計(jì)算三邊之和的一半(a+b+c)/2S3:計(jì)算機(jī)面積S=開方(s*(s-a)*(s-b)*(s-c))S4:輸出面積S5:結(jié)束3、流程圖4、程序#include"math.h"main(){doublea,b,c,s,S;printf("pleaseinputa,b,c:")scanf("%lf,%lf,%lf",&a,&b,&c)s=(a+b+c)/2;S=sqrt(s*(s-a)*(s-b)*(s-c));printf("Areais%lf",S);getch();}插入:如果不是三角形則S5a,b,c賦初值s=(a+b+c/2)S=開方(s*(s-a)*(s-b)*(s-c))輸出面積Sa+b<c||b+c<a||c+a<byn4、程序#include"math.h"main(){doublea,b,c,s,S;printf("pleaseinputa,b,c:")scanf("%lf,%lf,%lf",&a,&b,&c);If(a+b<c||b+c<a||c+a<b) {printf(“Notatrigle!”); exit(0); }Else{

s=(a+b+c)/2;S=sqrt(s*(s-a)*(s-b)*(s-c));printf("Areais%lf",S);}getch();}輸入三條邊直到是三角形則為止a,b,c賦初值s=(a+b+c/2)S=開方(s*(s-a)*(s-b)*(s-c))輸出面積S

直到a+b>c||b+c>a||c+a>bdo{printf("pleaseinputa,b,c:")scanf("%lf,%lf,%lf",&a,&b,&c);

If(a+b<c||b+c<a||c+a<b) printf(“Notatrigle!”);}while(a+b<c||b+c<a||c+a<b);

s=(a+b+c)/2;S=sqrt(s*(s-a)*(s-b)*(s-c));printf("Areais%lf",S);printf("pleaseinputa,b,c:")scanf("%lf,%lf,%lf",&a,&b,&c);while(a+b<c||b+c<a||c+a<b){printf(“Notatrigle!”);printf("pleaseinputa,b,c:")scanf("%lf,%lf,%lf",&a,&b,&c);}

s=(a+b+c)/2;S=sqrt(s*(s-a)*(s-b)*(s-c));printf("Areais%lf",S);printf("pleaseinputa,b,c:")scanf("%lf,%lf,%lf",&a,&b,&c);for(;a+b<c||b+c<a||c+a<b;){printf(“Notatrigle!”);printf("pleaseinputa,b,c:")scanf("%lf,%lf,%lf",&a,&b,&c);}

s=(a+b+c)/2;S=sqrt(s*(s-a)*(s-b)*(s-c));printf("Areais%lf",S);求一元二次方程的根4、程序#include“math.h"main(){floata,b,c,disc,x1,x2,p,q;printf("pleaseinputa,b,c:")scanf(“%f,%f,%f”,&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(“x1=%f,x2=%f\n",x1,x2);getch();}4、程序#include“math.h"main(){floata,b,c,disc,x1,x2,p,q;printf("pleaseinputa,b,c:")scanf(“%f,%f,%f”,&a,&b,&c);if(a<0){ printf(“Nota2equation!”); exit(0);}else{disc=b*b-4*a*c;If(disc<0){ printf(“notexitrealroot!”); exit(0);}p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(“x1=%f,x2=%f\n",x1,x2);}getch();}do{printf("pleaseinputa,b,c:")scanf(“%f,%f,%f”,&a,&b,&c);if(a<0)

printf(“Nota2equation!”);}while(a<0);改進(jìn)程序:main(){intscore;printf(“pleaseinputchengji:”);scanf(“%d”,&score);score=score/10;switch(score){case10:case9:printf(“\nA\n”);break;case8:printf(“\nB\n”);break;case7:printf(“\nC\n”);break;case6:printf(“\nD\n”);break;default:printf(“\nE\n”);}getch();}程序:main(){intscore;do{printf(“pleaseinputchengji:”);scanf(“%d”,&score);score=score/10;switch(score){case10:case9:printf(“\nA\n”);break;case8:printf(“\nB\n”);break;case7:printf(“\nC\n”);break;case6:printf(“\nD\n”);break;

default:printf(“\nE\n”);}getch();}while(score<0);}例子求1+2+3+…+100的和四段論1、分析:已知:1,2,3…100求:和2、算法:找:三種:直接連加、高斯算法、循環(huán)變:循環(huán)

直到i>100循環(huán)s1:使s=0s2:使i=1s3:s+i=>ss4:i+1=>is5:如果i不大于100,則重復(fù)執(zhí)行s3-s5,否則,結(jié)束s6:輸出s就是所要的和。3、流程圖s=0,i=1s+i=>si+1=>i輸出s當(dāng)i<100s=0,i=1s+i=>si+1=>i輸出s4、寫程序main(){ints,i;s=0;i=1;do{s=s+i;i=i+1;}while(i<=100);printf(“sumis%d\n”,s);getch();}main(){ints,i;s=0;i=1;while(i<=100){

s=s+i;i=i+1;}printf(“sumis%d\n”,s);getch();}main(){ints,i;s=0;i=1;for(;i<=100;){

s=s+i;i=i+1;}printf(“sumis%d\n”,s);getch();}變main(){ints,i;s=0;i=1;for(;i<=100;){

s=s+i;i=i+1;}printf(“sumis%d\n”,s);getch();}main(){ints,i;s=0;i=1;for(;i<=100;i=i+1;){

s=s+i;}printf(“sumis%d\n”,s);getch();}main(){ints,i;s=0;for(i=1;;i<=100;i=i+1;)s=s+i;printf(“sumis%d\n”,s);getch();}main(){ints,i;for(s=0,i=1;;i<=100;i=i+1;)s=s+i;printf(“sumis%d\n”,s);getch();}for() 的執(zhí)行過程for(i=1;i<=100;i=i+1;)s=s+i;幾種循環(huán)的比較P.114break、continue語句有選擇地求和main(){ints,i;s=0;i=1;while(i<=100){

s=s+i;i=i+1;}printf(“sumis%d\n”,s);getch();}if(i%5!=0)continue;main(){ints,i;s=0;i=1;while(i<=100){

s=s+i;i=i+1;}printf(“sumis%d\n”,s);getch();}if(s>32767)break;main(){ints,i;s=0;i=1;while(i<=100){

s=s+i;i=i+1;}printf(“sumis%d\n”,s);getch();}if(s>32767)break;if(i%5!=0)continue;任意個(gè)數(shù)main(){ints,i;intmax_range;printf(“pleaseinputmaxrange:”);scanf(“%d”,&max_range);s=0;i=1;while(i<=max_range){

s=s+i;i=i+1;}printf(“sumis%d\n”,s);getch();}if(s>32767)break;if(i%5!=0)continue;例5.6輸出以下4*5的矩陣。

12345246810369121548121620解題思路:可以用循環(huán)的嵌套來處理此問題用外循環(huán)來輸出一行數(shù)據(jù)用內(nèi)循環(huán)來輸出一列數(shù)據(jù)按矩陣的格式(每行5個(gè)數(shù)據(jù))輸出#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;}累計(jì)輸出數(shù)據(jù)的個(gè)數(shù)控制一行內(nèi)輸出5個(gè)數(shù)據(jù)#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)#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行#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個(gè)數(shù)據(jù)#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時(shí)j由1變到5i*j的值是1,2,3,4,5#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時(shí)j也由1變到5i*j的值是2,4,6,8,10如何修改程序,不輸出第一行的空行?#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)#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個(gè)數(shù)據(jù)3沒有輸出5.8循環(huán)程序舉例

例5.7用

公式求

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

為止(該項(xiàng)不累計(jì)加)。5.8循環(huán)程序舉例解題思路:求近似值的方法很多,本題是一種其他方法:5.8循環(huán)程序舉例每項(xiàng)的分子都是1后一項(xiàng)的分母是前一項(xiàng)的分母加2第1項(xiàng)的符號(hào)為正,從第2項(xiàng)起,每一項(xiàng)的符號(hào)與前一項(xiàng)的符號(hào)相反5.8循環(huán)程序舉例sign=1,pi=0,n=1,term=1當(dāng)term≥10-6pi=pi+termn=n+1sing=-signterm=sign/npi=pi*4輸出pi#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;}求絕對(duì)值的函數(shù)只保證前5位小數(shù)是準(zhǔn)確的#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-8

例5.8求費(fèi)波那西(Fibonacci)數(shù)列的前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1、2兩個(gè)數(shù)為1、1。從第3個(gè)數(shù)開始,該數(shù)是其前面兩個(gè)數(shù)之和。即:這是一個(gè)有趣的古典數(shù)學(xué)問題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子長到第3個(gè)月后每個(gè)月又生一對(duì)兔子。假設(shè)所有兔子都不死,問每個(gè)月的兔子總數(shù)為多少?第幾個(gè)月小兔子對(duì)數(shù)中兔子對(duì)數(shù)老兔子對(duì)數(shù)兔子總數(shù)110012010131012411135212563238753513┇┇┇┇┇輸出f1,f2Fori=1to38f3=f1+f2輸出f3f1=f2f2=f3f1=1,f2=1#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;}…代碼可改進(jìn)#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.9輸入一個(gè)大于3的整數(shù)n,判定它是否素?cái)?shù)(prime,又稱質(zhì)數(shù))。解題思路:讓n被i整除(i的值從2變到n-1)如果n能被2~(n-1)之中任何一個(gè)整數(shù)整除,則表示n肯定不是素?cái)?shù),不必再繼續(xù)被后面的整數(shù)除,因此,可以提前結(jié)束循環(huán)注意:此時(shí)i的值必然小于nNNYn=i+1輸入ni=2i≤n-1Yn被i整除i≤a輸出不是素?cái)?shù)Y輸出是素?cái)?shù)N#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;}#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);#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>#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.10求100~200間的全部素?cái)?shù)。解題思路:使用例5.9的算法在例5.9程序中只要增加一個(gè)外循環(huán),先后對(duì)100~200間的全部整數(shù)一一進(jìn)行判定即可

……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”);}……只對(duì)奇數(shù)進(jìn)行檢查控制每行輸出10個(gè)數(shù)據(jù)

例5.11譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收?qǐng)?bào)人再按約定的規(guī)律將其譯回原文。ABCDEFG……WXYZ非字母字符保持原狀不變輸入一行字符,要求輸出其相應(yīng)的密碼解題思路:問題的關(guān)鍵有兩個(gè):

(1)決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應(yīng)改為哪個(gè)字符處理的方法是:輸入一個(gè)字符給字符變量c,先判定它是否字母(包括大小寫),若不是字母,不改變c的值;若是字母,則還要檢查它是否’W’到’Z’的范圍內(nèi)(包括大小寫字母)。如不在此范圍內(nèi),則使變量c的值改變?yōu)槠浜蟮?個(gè)字母。如果在’W’到’Z’的范圍內(nèi),則應(yīng)將它轉(zhuǎn)換為A~D(或a~d)之一的字母。c=getchar();解題思路:問題的關(guān)鍵有兩個(gè):

(1)決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應(yīng)改為哪個(gè)字符處理的方法是:輸入一個(gè)字符給字符變量c,先判定它是否字母(包括大小寫),若不是字母,不改變c的值;若是字母,則還要檢查它是否’W’到’Z’的范圍內(nèi)(包括大小寫字母)。如不在此范圍內(nèi),則使變量c的值改變?yōu)槠浜蟮?個(gè)字母。如果在’W

溫馨提示

  • 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)論