第04章C語言流程控制課件_第1頁
第04章C語言流程控制課件_第2頁
第04章C語言流程控制課件_第3頁
第04章C語言流程控制課件_第4頁
第04章C語言流程控制課件_第5頁
已閱讀5頁,還剩85頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章C語言的流程控制李俊

計算機基礎教學部南京航空航天大學信息科學與技術學院2007.8本章內容4.1算法概述4.2C語言程序的結構和語句概述4.3選擇結構語句4.4循環(huán)結構語句4.5控制語句的應用舉例4.1.1算法及其效率程序的算法,就是使用程序解決問題的計算步驟。

程序算法規(guī)定了計算機程序的運行步驟,也保證了程序的運行可以取得正確的結果。程序=數(shù)據(jù)+算法不同的算法效率不同:采用優(yōu)秀的解題方法,合理安排計算步驟,以最少的計算步驟完成計算任務的方法我們稱為高效率算法。使用了比較笨拙的解題方法,通過較多的運算步驟來實現(xiàn)同樣的計算任務的計算方法我們稱為低效率算法。為了有效地進行解題,不僅需要保證算法正確,還要考慮算法的質量,選擇合適的算法。4.1算法概述4.1.2算法的設計原則

符合數(shù)學計算規(guī)則只有符合數(shù)學規(guī)則的計算步驟才可以被計算機正確執(zhí)行。保證結果確定如果一個算法對同一組數(shù)據(jù)進行多次計算,竟然獲得多個不同的結果,這種算法是不確定的,是無效的。保證算法的確定性,最重要的方面是排除程序中隨機數(shù)的產生(變量初始化)。程序能夠正常結束一個合理的算法應包含有限的操作步驟,而不能是無限的。4.1算法概述4.1.2算法的設計原則

合理的輸入

一個實際有效的程序中應該含有零個或者多個輸入(一般會在程序的算法中加入一個或者多個輸入

)。合理的輸出

一個有效的程序在設計算法時必須保證程序至少要有一個輸出。4.1算法概述4.1.3算法的表示工具

在實際應用中有四種表示方法來描述算法:(1)自然語言(2)流程圖(3)N-S圖(4)偽代碼

4.1算法概述自然語言就是人們日常生活中使用的語言。語法不嚴謹,容易造成誤解

1973年美國學者I.Nassi

和B.Shneideman提出的一種無流線的流程圖

流程圖是目前全球軟件開發(fā)領域使用最廣泛的算法表示工具,它通過一些嚴格定義圖形的組合來表示算法的步驟以及數(shù)據(jù)變化的走向。用圖形表示算法,直觀形象,易于理解。4.1.3算法的表示工具

流程圖符號

4.1算法概述起止框輸入輸出框判斷框流程線處理框連接點注釋框4.1算法概述4.1.3算法的表示工具

例:求的值。

求多項式的累乘積問題。

定義變量:M—累乘積

N—代表一項的分母算法:⑴M←1,N←1⑵M←M×⑶N←N+1⑷如果N≤100,轉⑵,否則,轉⑸

⑸輸出M的值

⑹結束循環(huán)算法描述:自然語言+偽代碼4.1算法概述4.1.3算法的表示工具

處理框流程線判斷框用N-S圖描述用流程圖描述

M←1N←1

M←M×

N←N+1

N>100

輸出M的值開始結束M←1N←1M←M×N←N+1輸出M的值N≤100TrueFalse4.1算法概述4.1.4結構化程序設計中基本結構的表示

結構化程序設計的基本結構有三種:順序結構、選擇結構和循環(huán)結構。

1、順序結構:先執(zhí)行A操作,再執(zhí)行B操作。AB(a)流程圖

(b)N-S圖ABA、B可以是一個簡單語句或一個基本結構4.1算法概述4.1.4結構化程序設計中基本結構的表示

2、選擇結構:C

(Condition)代表一個條件

C

TrueFalse

AB(a)流程圖

(b)N-S圖True

FalseCAB4.1算法概述4.1.4結構化程序設計中基本結構的表示

3、循環(huán)結構:(1)當(while)型循環(huán):當條件C成立時,反復執(zhí)行A操作,直到C為假時,才停止循環(huán)。CAFalseTrue(a)流程圖

(b)N-S圖先判斷,后執(zhí)行,有可能循環(huán)體一次都不執(zhí)行

當C為真

A4.1算法概述4.1.4結構化程序設計中基本結構的表示

3、循環(huán)結構:(2)直到(until)型循環(huán):先執(zhí)行A操作,再判斷條件C,若為“假”重復執(zhí)行A,直到C為“真”停止先執(zhí)行,后判斷,循環(huán)體至少要被執(zhí)行一次

ACFalseTrue

A

直到C為真(a)流程圖

(b)N-S圖4.1算法概述4.1.4結構化程序設計中基本結構的表示

AB三種結構特點:⑴單入口、單出口。⑵每一部分都可能被執(zhí)行到。⑶沒有死循環(huán)。⑷A、B可能是一個更基本的結構。ACFalseTrueTrue

FalseCABCAFalseTrueC語言程序是由若干函數(shù)構成,而一個函數(shù)由若干語句構成。這些語句組合成三種基本結構以實現(xiàn)算法。參考圖4-8計算機程序運行的時候是將一條條的語句翻譯成機器指令,控制計算機產生計算的結果的。所以語句是計算機程序的基本組成單位。注意:在C語言程序中,任何執(zhí)行語句都必須寫在函數(shù)中,不允許出現(xiàn)不屬于函數(shù)的獨立執(zhí)行語句。4.2C語言程序的結構和語句概述語句分類:(5類)1.控制語句:控制語句的執(zhí)行流程,共9種。(1)if()…else…條件語句(2)switch多分支選擇語句(3)while()…當型循環(huán)語句(4)do…while()直到型循環(huán)語句(5)for()…當型循環(huán)語句(6)continue結束本次循環(huán)語句(7)break中止執(zhí)行switch或循環(huán)語句(8)goto轉向語句(9)return從函數(shù)中返回語句4.2C語言程序的結構和語句概述語句分類:(5類)2.函數(shù)調用語句:在函數(shù)調用的后面加上一個分號構成的一條語句,實現(xiàn)函數(shù)定義中規(guī)定的功能。

例:scanf("%d",&i);調用標準庫函數(shù)

a=maxx(x1,x2);調用自定義函數(shù)3.表達式語句:在一個表達式的后面加上一個分號構成的一條語句,實現(xiàn)表達式的計算功能。例:a=b+c/*賦值表達式*/a=b+c;/*賦值表達式語句*/4.2C語言程序的結構和語句概述4.2C語言程序的結構和語句概述例:{a=1;b=2;c=3;}三個簡單語句一個復合語句語句分類:(5類)4.空語句:;

只有一個分號,什么都不做。主要用于作被轉向點,或空循環(huán)體。5.復合語句:用{}把多條語句括起來構成復合語句,從語法上看成一條簡單語句。選擇結構

—判斷給定的條件,根據(jù)判斷的結果從給定的多組操作中選擇一組執(zhí)行。4.3.1if語句if語句的標準語法格式:if(<表達式>)語句1[else語句2]方括號中的內容是可選的?!罢Z句1”和“語句2”必須是一條語句。4.3選擇結構語句4.3.1if語句if語句有三種使用形式。4.3選擇結構語句1.

if(<表達式>)語句2.

if(<表達式>)語句1else語句2語句

表達式假真語句1表達式假真語句2不平衡if語句單選平衡if語句二中選一例4.1輸入三個數(shù)字,程序求出并輸出其中的最大值。#include<stdio.h>main(){floata,b,c,t;

printf("Pleaseinputthreenumbers:");

scanf("%f%f%f",&a,&b,&c);

t=a;if(t<b)t=b;if(t<c)t=c;

printf("TheMaximumnumberis:%f\n",t);}4.3選擇結構語句兩個獨立的不平衡if語句4.3選擇結構語句兩個獨立的平衡if語句例4.2輸入三個數(shù)字,程序求出并輸出其中的最大值。#include<stdio.h>main(){floata,b,c,t;

printf("Pleaseinputthreenumbers:");

scanf("%f%f%f",&a,&b,&c);

if(a<b)t=b;elset=a;

if(t<c)printf("TheMaximumnumberis:%f\n",c);elseprintf("TheMaximumnumberis:%f\n",t);}

4.3.1if語句3.組合的if語句4.3選擇結構語句基本格式:if(<表達式1>)語句1elseif(<表達式2>)語句2elseif(<表達式3>)語句3…elseif(<表達式n>)語句nelse語句n+1

對程序的一次執(zhí)行,只可能執(zhí)行語句1、語句2、

……語句n中的一個語句語句1表達式1假真語句2表達式2表達式n語句n語句n+1假假真真…例4.3輸入三個數(shù)字,程序求出并輸出其中的最大值。#include<stdio.h>main(){floata,b,c;

printf("Pleaseinputthreenumbers:");

scanf("%f%f%f",&a,&b,&c);

if(a>=b&&a>=c)printf("TheMaximumnumberis:%f\n",a);elseif(b>=a&&b>=c)printf("TheMaximumnumberis:%f\n",b);elseprintf("TheMaximumnumberis:%f\n",c);}4.3選擇結構語句組合if語句的使用,一條語句例:輸入學生的分數(shù)x,根據(jù)成績的高低,輸出不同等級若x為:90~100分則輸出A80~89分則輸出B70~79分則輸出C60~69分則輸出D60分以下則輸出E4.3選擇結構語句#include<iostream.h>voidmain(){intx;

scanf(“%d”,&x);if(x>=90)printf(“A\n”);elseif(x>=80)printf(“B\n”)

;elseif(x>=70)printf(“C\n”)

;elseif(x>=60)printf(“D\n”)

;elseprintf(“E\n”)

;}注意:條件的寫法例4.4輸入百分制成績,將其轉換為五分制成績輸出。#include<stdio.h>main(){floatscore;

printf("Pleaseinputthescore:");

scanf("%f",&score);

if(score>=90)printf("Thegradeis:A\n");elseif(score>=80)printf("Thegradeis:B\n");elseif(score>=70)printf("Thegradeis:C\n");elseif(score>=60)printf("Thegradeis:D\n");elseprintf("Thegradeis:E\n");}4.3選擇結構語句組合if語句的使用,注意else的作用4.3.2if語句的嵌套使用4.3選擇結構語句if()if()語句1else語句2elseif()語句3else語句4內嵌平衡if語句內嵌平衡if語句內嵌的if-else語句為一條語句嵌套時,else總是與它上面(未曾配對的)最近的if配對4.3.2if語句的嵌套使用4.3選擇結構語句if()if()語句1

elseif()語句2else語句3內嵌不平衡if語句內嵌平衡if語句if()

{if()語句1}elseif()語句2else語句3

加花括號4.3.2if語句的嵌套使用4.3選擇結構語句

if(條件1)語句1elseif(條件2)語句2elseif(條件3)

語句3else語句4縮進書寫方式if(條件1)語句1elseif(條件2)語句2elseif(條件3)語句3else語句4組合if語句例4.5用嵌套的if語句解決數(shù)學問題#include<stdio.h>main(){floatx,y;

printf("Pleaseinputx:");

scanf("%f",&x);

if(x<10)y=-10;/*A*/elseif(x==10)y=5;/*B:內嵌if語句*/elsey=20;/*C*/

printf("y=%f\n",y);}4.3選擇結構語句y=-10 (x<10)5 (x=10)20 (x>10)

if(x<=10)

if(x<10)y=-10;elsey=5;elsey=20;

等價4.3.3條件運算符一般形式:<表達式1>

?<表達式2>

:<表達式3>運算原則:當表達式1為真時,執(zhí)行表達式2,結果作為整個表達式的值

當表達式1為假時,執(zhí)行表達式3,結果作為整個表達式的值4.3選擇結構語句if(a>b)max=a;elsemax=b;max=(a>b)?a:b;4.3.3條件運算符4.3選擇結構語句運算優(yōu)先級:比賦值運算符高,比算術、關系、邏輯運算符低結合性:自右向左例如有如下的條件運算符表達式:x=a>b?a:c<b?c:b;等價于:x=a>b?a:(c<b?c:b);在嵌套使用條件運算符時,應盡量使用括號將相關數(shù)據(jù)括起來,防止出現(xiàn)執(zhí)行和理解的錯誤。

C語言中唯一的三目運算符4.3.4switch語句(多分支選擇語句,開關語句)switch(<表達式>){case<常量表達式1>:語句序列1;[<break;>]case<常量表達式2>:語句序列2;……[<break;>]case<常量表達式n>:語句序列n;[<break;>][default:語句序列n+1;[<break;>]]}4.3選擇結構語句3.當表達式的值與所有常量表達式的值均不相等時,就執(zhí)行default后面的語句2.當表達式的值與某個常量表達式的值相等時,就執(zhí)行后面相應的語句1.整型表達式或字符型表達式例:根據(jù)五分制考試成績打印出分數(shù)等級chargrade;grade=getchar();/*輸入五分制成績*/switch(grade){case'A':printf("Excellent\n");/*優(yōu)*/case'B':printf("Good\n");/*良*/case'C':printf("Medium\n");/*中*/case'D':printf("Pass\n");/*及格*/default:printf("Fail\n");/*不及格*/}4.3選擇結構語句

break;break;break;break;執(zhí)行完一個case后面語句后,流程轉下一個case繼續(xù)執(zhí)行。本例中,若grade的值等于‘A’,則將連續(xù)輸出:ExcellentGoodMediumPassFail加上break語句后,就可以實現(xiàn)執(zhí)行一個case后,終止switch語句

default后可以不加break語句switch語句中多個case共用一組執(zhí)行語句(建立數(shù)據(jù)范圍分支判斷)intx;…switch(x){case–2:case–1:printf("Negative\n");break;case0:printf("Zero\n");break;case1:case2:printf("Positiv\n");}4.3選擇結構語句

x的值為-2或-1時執(zhí)行同一組語句

x的值為1或2時執(zhí)行另外一組語句注意:1.在switch語句中,default分支可以放在任何位置。但是為了程序書寫和閱讀方便,一般將default分支寫在switch語句的最后一行。2.每個常量表達式的值都必須互不相同,否則當表達式的值與多個常量表達式的值都匹配時,計算機將無法決定到底該執(zhí)行哪一個常量表達式后面的語句序列。3.常量表達式必須是一個確定的字符類型或者整數(shù)類型的常量數(shù)值,而不能是浮點數(shù)或者變量表達式。4.switch語句雖然可以模擬組合的if語句,但是并不是與組合的if語句完全等價。switch語句只能處理字符類型和整數(shù)類型的條件判斷,而組合的if語句不但可以處理字符類型和整數(shù)類型的條件判斷,還可以對浮點數(shù)等其它的條件進行判斷。由此看來,組合的if語句的功能要遠遠大于switch語句。4.3選擇結構語句課堂練習:

4.3選擇結構語句i=2;switch(i){case1:i++;case2:i++;case3:i++;case4:i++;default:i++;}Printf(“%d\n”,i);輸出:?輸出:6例4.6:用switch語句解決公積金問題。根據(jù)輸入的收入金額求出并且輸出應該繳納的公積金。假設公積金繳納比例設置如下:收入<10002%比例1000<=收入<20003%比例2000<=收入<50004%比例5000<=收入<100005%比例10000<=收入6%比例繳納總金額:

fee=in*r%in收入r繳納比例的分子4.3選擇結構語句#include<stdio.h>main(){

intin,temp,r;floatfee;

printf("Pleaseinputyourincome:");

scanf("%d",&in);temp=in/1000;/*按照1000為單位進行區(qū)間劃分*/

switch(temp){case0:r=2;break;case1:r=3;break;4.3選擇結構語句case2:case3:case4:r=4;break;case5:case6:case7:case8:case9:r=5;break;default:r=6;}fee=in*r/100.0;

printf("Theaccumulationfundis:%f",fee);}4.3選擇結構語句只要計算的數(shù)據(jù)之間存在著規(guī)律性的變化,就可以使用循環(huán)結構來對其進行迭代計算。例如:4.4循環(huán)結構語句實現(xiàn)形式主要有以下四種:1.用goto語句和標號構成循環(huán)2.用while語句構成循環(huán)3.用for語句構成循環(huán)4.用do-while語句構成循環(huán)4.4.1goto語句及標號的使用一般形式:goto<語句標號>;語句標號:用標識符表示,命名規(guī)則與變量名相同。其作用是確定流程跳轉目標。goto

語句主要用途與if語句一起構成循環(huán)結構從循環(huán)體中跳轉到循環(huán)體外4.4循環(huán)結構語句例4.7用goto語句求解1到100的累加和s。#include<stdio.h>main(){

inti=1,m=0;loop:if(i<=100) { m+=i;i++;

gotoloop;/*跳轉到標號loop*/ }

printf("Thesumfrom1to100is:%d",m);}4.4循環(huán)結構語句由于在程序中大量使用goto跳轉命令會破壞結構化程序設計的原則

,該命令要限制使用4.4.2while語句一般形式:while(<表達式>)<語句>4.4循環(huán)結構語句當表達式為真(非0)值時,執(zhí)行while語句中的內嵌語句。語句

表達式假真先判斷表達式后執(zhí)行語句例4.8用while語句求解1到100的累加和s。#include<stdio.h>main(){

inti=1,sum=0;

while(i<=100)/*循環(huán)體是一個復合語句*/

{

sum+=i; i++;

}

printf("Thesumfrom1to100is:%d\n",sum);}4.4循環(huán)結構語句循環(huán)體循環(huán)體包含一個以上的語句時,應該用大括號括起來在循環(huán)體內應有使循環(huán)趨于結束的語句累加計算中的累加和變量一般初始化為0,累乘計算中的累乘積變量一般初始化為1。4.4.3for語句一般形式:for([<初始化表達式>];[<條件表達式>];[<修正表達式>])<語句>相當于“當型”循環(huán)首先執(zhí)行<初始化表達式>完成變量的初始化,然后進行<條件表達式>的計算。如果條件表達式的計算結果為真(非0值),則執(zhí)行<語句>,然后執(zhí)行<修正表達式>,修改相關的循環(huán)變量,轉到<條件表達式>,繼續(xù)下一次循環(huán);如果<條件表達式>的計算結果為假(0值),則結束循環(huán)語句的執(zhí)行。4.4循環(huán)結構語句4.4.3for語句4.4循環(huán)結構語句語句

條件表達式假真修正表達式初始化表達式

初始化表達式;while(條件表達式){

語句;

修正表達式;};4.4.3for語句for語句與while語句的對應舉例:4.4循環(huán)結構語句for(i=1;i<=100;i++)sum=sum+i;

i=1;while(i<=100){sum=sum+i;i++;}例4.9用for語句求解累加和s。#include<stdio.h>main(){

intsum=0,i;

for(i=1;i<=100;i++)sum+=i;

printf("Thesumfrom1to100is:%d\n",sum);}4.4循環(huán)結構語句4.4.3for語句注意事項:

1.“初始化表達式”可省略,初始化移至循環(huán)體前

i=1;for(;i<=100;i++)sum=sum+i;2.“條件表達式”可省略,做“永真”處理,循環(huán)無終止地進行。

for(i=1;;i++)sum=sum+i;4.4循環(huán)結構語句分號不能省略分號不能省略4.4.3for語句3.“修正表達式”可省略,“修正”移至循環(huán)體內for(i=1;i<=100;){sum=sum+i;i++;}4.“循環(huán)體”可為空,將循環(huán)體中應做的工作,放在“修正表達式”中。

for(i=1;i<=100;sum=sum+i,i++);4.4循環(huán)結構語句循環(huán)變量在循環(huán)體內變化4.4.3for語句5.三個“表達式”和“語句”都可省略,無限循環(huán)for(;;);6.“初始化表達式”和“修正表達式”可以是一個以上的表達式

for(sum=0,i=1;i<=100;i++,j--)sum=sum+i;

for(i=1;i<=100;i++,i++)sum=sum+i;4.4循環(huán)結構語句while(1);

4.4.4do-while語句一般形式:do<語句>/*循環(huán)體*/while(<表達式>);4.4循環(huán)結構語句

先執(zhí)行指定的內嵌語句,然后判斷表達式。語句

表達式假真先執(zhí)行語句然后再判斷表達式4.4.4do-while語句例4.10用do-while語句求解1到100的累加和s。#include<stdio.h>main(){

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

printf("Thesumfrom1to100is:%d\n",sum);}

4.4循環(huán)結構語句4.4.4do-while語句

while和do-while循環(huán)比較4.4循環(huán)結構語句main(){inti,sum=0;

scanf("%d",&i);

while(i<=5){sum+=i;i++;}

printf("%d",sum);

}main(){inti,sum=0;

scanf("%d",&i);

do{sum+=i;i++;}while(i<=5);

printf("%d",sum);}

程序運行過程60程序運行過程66程序運行過程115程序運行過程1154.4.5break語句和continue語句break語句一般形式:break;

作用:1.break語句可以使流程跳出switch結構2.break語句可以用來從循環(huán)體內跳出循環(huán)體,即提前結束循環(huán),接著執(zhí)行循環(huán)下面的語句。4.4循環(huán)結構語句4.4.5break語句和continue語句break語句例子:

inti;for(i=1;;i++){

printf("%d",i);

if(i>=10)break;}4.4循環(huán)結構語句當變量i的值等于10時,跳出循環(huán)體,不再執(zhí)行其余幾次循環(huán)4.4.5break語句和continue語句continue語句一般形式:continue;

作用:結束本次循環(huán),即跳過循環(huán)體下面未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。for(n=100;n<=200;n++){if(n%3==0)

continue;

printf(“%d\n”,n);}4.4循環(huán)結構語句當n能被3整除時,跳出本次循環(huán),不再執(zhí)行printf

語句,但是還要繼續(xù)循環(huán)判斷本程序的功能是打印出100~200之間不能被3整除的整數(shù)4.4.5break語句和continue語句

break和continue語句比較4.4循環(huán)結構語句for(i=1;i<=4;i++){x=i*i;

if(x==9)break;

printf("%d\n",x);}printf("i=%d\n",i);

for(i=1;i<=4;i++){x=i*i;

if(x==9)continue;printf("%d\n",x);}printf("i=%d\n",i);

輸出:

14i=3輸出:

1416i=5例4.11用循環(huán)語句求兩個數(shù)的最大公約數(shù)和最小公倍數(shù)。#include<stdio.h>main(){

intx,y,i,k;

printf("Pleaseinputtwointegers:");

scanf("%d%d",&x,&y); k=x<y?x:y;/*取兩數(shù)中的小數(shù)*/

for(i=k;i>=1;i--)/*A行,求最大公約數(shù)*/

if(x%i==0&&y%i==0) break;4.4循環(huán)結構語句

printf("GreatestCommonDivisor:%d\n",i);

k=x>y?x:y;/*取兩數(shù)中的大數(shù)*/

for(i=k;i<=x*y;i++)/*B行,求最小公倍數(shù)*/

if(i%x==0&&i%y==0) break;

printf("LowestCommonMultiple:%d\n",i);}4.4循環(huán)結構語句4.4.6循環(huán)的嵌套嵌套:一個循環(huán)體內包含另一個完整的循環(huán)結構多層循環(huán):內嵌的循環(huán)體內又嵌套循環(huán)結構前述的三種循環(huán)都可以互相嵌套

4.4循環(huán)結構語句三重循環(huán)雙重循環(huán)例4.12用循環(huán)嵌套技術輸出99乘法表#include<stdio.h>main(){

inti,j;

printf("Multiplicationtable:\n");

for(i=1;i<=9;i++)/*外循環(huán)控制輸出的行數(shù)*/{

for(j=1;j<=i;j++)/*內循環(huán)*/

printf("%d*%d=%d\t",i,j,i*j);

printf("\n");}}4.4循環(huán)結構語句例4.13求解一元二次方程ax2+bx+c=0的根。在求解的過程中有幾種情況需要考慮:1.a=0,則表達式不是一元二次方程,解為2.b2-4ac=0,有兩個相等的實數(shù)根3.b2-4ac>0,有兩個不相等的實數(shù)根4.b2-4ac<0,有兩個共軛的復數(shù)根4.5控制語句應用舉例#include<stdio.h>#include<math.h>main(){ floata,b,c,disc,x1,x2,real,image;

printf("Pleaseinputthreerealnumbers:");

scanf("%f%f%f",&a,&b,&c);

printf("Theequation"); if(fabs(a)<=1e-7)/*a==0。處理第1種情況。*/

printf("isnotquadratic,solutionis%.2f\n",-c/b);4.5控制語句應用舉例else

{/*處理2、3、4三種情況*/ disc=b*b-4*a*c; if(fabs(disc)<=1e-7)/*disc==0*/

printf("isquadratic,solutionis:%.2f\n",-b/(2*a)); elseif(disc>1e-7)/*disc>0*/ {x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a);

printf("hasdistinctrealroots:%.2fand%.2f\n",x1,x2); }4.5控制語句應用舉例else/*disc<0*/

{ real=-b/(2*a); image=sqrt(-disc)/(2*a);

printf("hascomplexroots:\n"); printf("%.2f+%.2fi\n",real,image); printf("%.2f-%.2fi\n",real,image); } }}4.5控制語句應用舉例運行程序四次,結果分別如下:(1)Pleaseinputthreerealnumbers:02-3<Enter>Theequationisnotquadratic,solutionis1.50(2)Pleaseinputthreerealnumbers:144<Enter>Theequationisnotquadratic,solutionis:-2.00(3)Pleaseinputthreerealnumbers:241<Enter>Theequationhasdistinctrealroots:-0.29and-1.71(4)Pleaseinputthreerealnumbers:221<Enter>Theequationhascomplexroots:-0.50+0.50i-0.50-0.50i4.5控制語句應用舉例例4.14輸入一個int型整數(shù)num,逆向輸出其各位數(shù)字,同時求出其位數(shù)以及各位數(shù)字之和。#include<stdio.h>main(){

intnum,sum=0,k,i=0;

scanf("%d",&num);

4.5控制語句應用舉例while(num>0)

{

k=num%10; printf("%d",k); sum+=k; i++;

num=num/10; } printf("\nsum=%d\n",sum);/*各位數(shù)字之和*/ printf("digitnumber=%d\n",i);/*num的位數(shù)*/}4.5控制語句應用舉例循環(huán)分解法如果輸入的數(shù)據(jù)是8953,則程序的運行結果是:

8953<Enter>3598sum=25digitnumber=44.5控制語句應用舉例例4.15使用循環(huán)語句,對cos(x)多項式求和。cos(x)的多項式求和公式為:

#include<stdio.h>#include<math.h>main(){

inti;doublex,t,value;4.5控制語句應用舉例

printf("Pleaseinputx:");

scanf("%lf",&x);value=1;t=1;i=1;

while((fabs(t))>=1e-9){ t=t*(-1)*x*x/((2*i)*(2*i-1));/*通項的值*/ value=value+t; i++;}

printf("cos(x)=%lf\n",value);}4.5控制語句應用舉例注意:●循環(huán)結束條件。例4.16使用循環(huán)語句求解1!+2!+…+20!#include<stdio.h>main(){doublesum,t;

inti;sum=0; t=1;/*初始化*/

for(i=1;i<=20;i++){t=t*i;/*計算每一個階乘*/sum=sum+t;}printf("sum=%lf

\n",sum);}

4.5控制語句應用舉例例4.17使用循環(huán)語句求解Fibonacci數(shù)列的前40項。數(shù)學公式如下:

4.5控制語句應用舉例1n=1時1n=2時Fn-1+Fn-2n>2時Fn=#include<stdio.h>main(){longf1,f2;

inti;f1=1; f2=1;

for(i=1;i<=20;i++){printf("%12ld%12ld",f1,f2);if(i%2==0)printf(“\n”);/*逢4換行*/f1=f1+f2;/*求后2項數(shù)據(jù)*/f2=f2+f1;}}4.5控制語句應用舉例例4.18輸入一個整數(shù)x,判斷其是否為素數(shù)。

素數(shù):即質數(shù),是只能被1和其自身整除的數(shù)。

算法:取整數(shù)x,試探2到之間的整數(shù)去整除x,如果除盡為非素數(shù),如果除不盡則為素數(shù)。

證明:設x不是一個素數(shù),那么x就應當有一個不小于2的因子m,即x可以分解為:x=()2=m×n,其中m和n為x的兩個約數(shù),顯然m和n都是大于或等于2的整數(shù)。假設m是m與n兩個數(shù)中比較小的一個整數(shù),可以推出:()2=m.n≥m2≥22,由前提條件“x是一個正整數(shù)”可得:≥m≥2。故我們可以得到一個結論:若正整數(shù)x不是一個素數(shù),那么在2~

之間必有一個約數(shù)。4.5控制語句應用舉例#include<stdio.h>#include<math.h>main(){

intx,b,i;

printf("Pleaseinputaintegernumber:");

scanf("%d",&x); b=sqrt(x);

4.5控制語句應用舉例

for(i=2;i<=b;i++)/*循環(huán)變量i的變化范圍是:2~b*/

if(x%i==0)break;/*A*/

if(i>=b+1)/*B*/

printf("%disaprimenumber\n",x); else

printf("%disnotaprimenumber\n",x);}4.5控制語句應用舉例例4.19使用循環(huán)語句求解300~500之間的所有素數(shù)#include<stdio.h>#include<math.h>main(){

intm,k,i,n=0;/*n是計數(shù)器*/for(m=301;m<=500;m=m+2)/*取奇數(shù)*/{k=sqrt(m);for(i=2;i<=k;i++)/*A*/if(m%i==0)break;

4.5控制語句應用舉例 if

溫馨提示

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

評論

0/150

提交評論