計算機軟件及應用C程序設計ch04-判定、分支和循環(huán)課件_第1頁
計算機軟件及應用C程序設計ch04-判定、分支和循環(huán)課件_第2頁
計算機軟件及應用C程序設計ch04-判定、分支和循環(huán)課件_第3頁
計算機軟件及應用C程序設計ch04-判定、分支和循環(huán)課件_第4頁
計算機軟件及應用C程序設計ch04-判定、分支和循環(huán)課件_第5頁
已閱讀5頁,還剩129頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章判定、分支和循環(huán)4.1C語句概述C語句:以“;”作分隔符,編譯后產生機器指令.C語句分類表達式語句:表達式加分號構成??照Z句:;程序控制語句(9種):if()~else~switchfor()~while()~do~while()continuebreakgotoreturn分支循環(huán)輔助控制如total=total+limit;a=3;func();printf(“Hello,world!\n”);第四章判定、分支和循環(huán)4.1C語句概述空語句:;程序1復合語句:用{…}括起來的一組語句一般形式:

{[數據說明部分;]執(zhí)行語句部分;}“}”后不加分號語法上和單一語句相同復合語句可嵌套復合語句:用{…}括起來的一組語句2三種基本結構順序結構ABAB流程圖N-S圖三種基本結構ABAB流程圖N-S圖3PAB真假PBA真假選擇結構kA1A2AiAnk=k2k=k1k=knk=ki......二分支選擇結構多分支選擇結構PAB真假PBA真假選擇結構kA1A2AiAnk=k2k=k4循環(huán)結構當型循環(huán)結構直到型循環(huán)結構PA假真當P為真AAP真假A直到P為真注:A,B,A1….An可以是一個簡單語句,也可以是一個基本結構循環(huán)結構當型循環(huán)結構直到型循環(huán)結構PA假真當P為真AAP真假54.2分支簡單if語句(p111~115)格式:if(expression)statement執(zhí)行過程:exprstatement非0=0例:if(x>y)printf(“%d”,x);例讀入a,b,c,d四個整數,輸出(a+b)/(c-d)。

if(c-d!=0){ratio=(float)(a+b)/(c-d);printf(“Ratio=%f\n”,ratio);}4.2分支exprstatement非0=0例:if(x6/*absolutevalue*/#include<stdio.h>main(){intx,y;printf("Enteraninteger:");scanf("%d",&x);y=x;if(y<0)y=-y;printf("\ninteger:%d-->absolutevalue:%d\n",x,y);}例求一個數的絕對值運行:Enteraninteger:-12integer:-12--->absolutevalue:12abs(intn)labs(long)fabs(doublex)cabs(complexz)/*absolutevalue*/例求一個數的絕對7exprstatement1statement2非0=0if…else語句p115格式:if(expression)statement1elsestatement2執(zhí)行過程:例

if(c-d!=0){ratio=(float)(a+b)/(c-d);printf(“Ratio=%f\n”,ratio);}elseprintf(“c-diszero\n”);exprstatement1statement2非0=0if8例if(x>y)max=x;elsemax=y;轉為表達式: max=(x>y)?x:y這里引入了運算符——p129 條件運算符?:例if(x>y)max=x;轉為表達式:9條件運算符與表達式一般形式:expr1?expr2:expr3執(zhí)行過程功能:相當于條件語句,但不能取代一般if語句例if(a>b)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,a>b?a:b);例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);expr1取expr2值取expr3值非0=0例(a==b)?’Y’:’N’(x%2==1)?1:0(x>=0)?x:-x(c>=‘a’&&c<=‘z’)?c-’a’+’A’:c條件運算符可嵌套

如x>0?1:(x<0?-1:0)優(yōu)先級:13結合方向:自右向左

如a>b?a:c>d?c:da>b?a:(c>d?c:d)expr1、expr2、expr3類型可不同,表達式值取較高的類型例x?‘a’:‘b’//x=0,表達式值為‘b’;x?0,表達式值為‘a’x>y?1:1.5//x>y,值為1.0;x<y,值為1.5條件運算符與表達式例if(a>b)printf(“%10elseif梯狀p122格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0執(zhí)行過程:

if(value>1000)takeoff=0.25;elseif(value>800)takeoff=0.2;elseif(value>600)takeoff=0.15;elseif(value>400)takeoff=0.1;elsetakeoff=0;elseif梯狀p122if(expr1)11例百分制成績轉換為五級制p122

80to100Honours60to79FirstDivision50to59SecondDivision40to49ThirdDivision0to39Fail例累進電費p124例百分制成績轉換為五級制p12212例根據稅前收入計算稅后收入速算扣除額/02512537513753375637510375153752000元起征0%不超過500的5%超過500~2000的部分10%超過2000~5000的部分15%超過5000~20000的部分20%超過20000~40000的部分25%超過40000~60000的部分30%超過60000~80000的部分35%超過80000~100000的部分40%超過100000的部分45%Actual=(Income-Base)*對應稅率-對應速算扣除額如Income=8000500*5%1500*10%3000*15%(8000-7000)*20%=(8000-2000)*20%-5000*20%例根據稅前收入計算稅后收入速算扣除額/0251213如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);例考慮下面程序的輸出結果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!if后面的表達式類型任意語句可以是復合語句if(x)if(x!=0)if(!x)if(x==0)如:if(a==b&&x==y)printf(“a=14/*Beequalornot*/#include<stdio.h>main(){inta,b;printf("Enterintegera:");scanf("%d",&a);printf("Enterintegerb:");scanf("%d",&b);if(a==b)printf("a==b\n");elseprintf("a!=b\n");}例輸入兩個數并判斷兩數相等否運行:Enterintegera:12

Enterintegerb:12a==b運行:Enterintegera:12

Enterintegerb:9a!=b/*Beequalornot*/例輸入兩個數并判斷兩15/*chartype*/#include<stdio.h>main(){charc;printf("Enteracharacter:");c=getchar();if(c<0x20)printf("Thecharacterisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thecharacterisadigit\n");elseif(c>='A'&&c<='Z')printf("Thecharacterisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thecharacterisalowerletter\n");elseprintf("Thecharacterisothercharacter\n");}例判斷輸入字符種類運行:Enteracharacter:Thecharacterisacontrolcharacter運行:Enteracharacter:8Thecharacterisadigit運行:Enteracharacter:DThecharacterisacapitalletter運行:Enteracharacter:hThecharacterisalowerletter運行:Enteracharacter:F1Thecharacterisothercharacter#include"ctype.h"iscntrl()isalpha()isdigit()ispunct()isprint()islower()isupper()isalnum()/*chartype*/例判斷輸入字符種類運行:Ent16if語句嵌套p118一般形式:if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4內嵌if內嵌ifif(expr1)if(expr2)statement1elsestatement2內嵌ifif(expr1)if(expr2)statement1elsestatement3

內嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4內嵌ifif語句嵌套p118if(expr1)內嵌if內嵌ifi17例輸入兩數并判斷其大小關系/*GreaterorLess*/#include<stdio.h>main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");}運行:Enterintegerx,y:12,23X<Y

Enterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Y例輸入兩數并判斷其大小關系/*GreaterorLes18if~else配對原則:缺省{}時,else總是和它上面離它最近的未配對的if配對if(……)if(……)if(……)else…...else…...else…...if~else配對原則:缺省{}時,else總是和19例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);實現if~else正確配對方法:加{}例:if(a==b)修改:if(a==b)實現if20例考慮下面程序輸出結果:main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;printf(“%d”,x);}結果:-1例考慮下面程序輸出結果:結果:-1214.3switch語句(開關分支語句)p125一般形式:執(zhí)行過程:switch(表達式){caseE1:語句組1;break;caseE2:語句組2;break;…….caseEn:語句組n;break;[default:語句組;break;]}switch表達式語句組1語句組2語句組n語句組…...E1E2Endefaultcase4.3switch語句(開關分支語句)p125switc22E1,E2,…En是常量表達式,且值必須互不相同語句標號作用,必須用break跳出case后可包含多個可執(zhí)行語句,且不必加{}switch可嵌套多個case可共用一組執(zhí)行語句……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..switch(m){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}運行結果:m為5時,輸出:Verygood!Good!Pass!Fail!dataerror!……switch(m)運行結果:m為5時,輸出:23例voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}運行結果:a=2,b=1例voidmain()運行結果:a=2,b=124/*SelectLabel*/#include<stdio.h>main(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}}例根據輸入字母輸出字符串/*SelectLabel*/例根據輸入字母輸出字符串25例百分制成績轉換為五級制p12280to100Honours60to79FirstDivision50to59SecondDivision40to49ThirdDivision0to39Fail用SwitchStatement.例百分制成績轉換為五級制p122264.4循環(huán)概述C語言可實現循環(huán)的語句:用goto和if構成循環(huán)while語句do~while語句for語句goto語句一般格式p132-轉移作用goto語句標號;….…..標號:語句;標號:語句;….…..goto語句標號;不能用整數作標號只能出現在goto所在函數內,且唯一只能加在可執(zhí)行語句前面限制使用goto語句4.4循環(huán)goto語句標號;27例用if和goto語句構成循環(huán),求1+2+…+100/*loopusinggotostatement*/#include<stdio.h>main(){inti,sum=0;i=1;loop:if(i<=100){sum+=i; i++; gotoloop;}printf("%d",sum);}sum=0+1sum==1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體例用if和goto語句構成循環(huán),求1+2+…+100/28例從鍵盤輸入一組數據,以0結束輸入,求數據和/*sumofdata*/#include<stdio.h>main(){ intnumber,sum=0;read_loop:scanf("%d",&number); if(!number)gotoprint_sum; sum+=number; gotoread_loop;print_sum:printf("Thetotalsumis%d\n",sum);}例輸入10個男孩的身高和體重,統(tǒng)計身高超過170體重少于50公斤的人數。例從鍵盤輸入一組數據,以0結束輸入,求數據和/*sum29例pp135RANGEofNumbers:Asurveyofthecomputermacketshowthatpersonalcomputersaresoldatvaryingcostsbythevendors.Thefollowingisthelistofcosts(inhundreds)quotedbysomevendors:35.00,40.50,25.00,31.25,68.15,47.00,26.65,29.00,53.45,62.50Determinetheaveragecostandtherangeofvalues.例pp135RANGEofNumbers:30例pp136Pay-BillCalculations:Amanufacturingcompanyhasclassifieditsexecutivesintofourlevelsforthebenefitofcertainperks.Thelevelsandcorrespondingperksareshownbelow:PerksLevel------------------------------------------------------------------ConveyanceEntertainmentallowanceallowance11000500275020035001004250----Anexecutive’sgrosssalaryincludesbasicpay,houserentallowanceat25%ofbasicpayandotherperks.Incometaxiswithheldfromthesalaryonapercentagebasisasfollows:

GrosssalaryTaxrateGross<=2000Notaxdeduction2000<Gross<=40003%4000<Gross<=50005%Gross>50008%Writeaprogramthatwillreadanexecutive’sjobnumber,levelnumber,andbasicpayandthencomputerthenetsalaryafterwithholdingincometax.Theproblemisdetailedintheprogram.例pp136Pay-BillCalculations:31while語句p147一般形式:while(表達式)

循環(huán)體語句;執(zhí)行流程:expr循環(huán)體假(0)真(非0)whilewhile語句p147while(表達式)執(zhí)行流程:ex32特點:先判斷表達式,后執(zhí)行循環(huán)體說明:循環(huán)體有可能一次也不執(zhí)行循環(huán)體可為任意類型語句下列情況,退出while循環(huán)條件表達式不成立(為零)循環(huán)體內遇break,return,goto無限循環(huán):while(1)循環(huán)體;特點:先判斷表達式,后執(zhí)行循環(huán)體33例用while循環(huán)求1+2+…+100/*sumof1to100*/#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體例用while循環(huán)求1+2+…+100/*sumof34例顯示1~10的平方/*squareofeverynumber*/#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}運行結果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100例顯示1~10的平方/*squareofeveryn35do~while語句p150一般形式:do

循環(huán)體語句;while(表達式);執(zhí)行流程:do循環(huán)體expr假(0)真(非0)while特點:先執(zhí)行循環(huán)體,后判斷表達式do~while語句p150do執(zhí)行流程:do循環(huán)體ex36expr循環(huán)體假(0)真(非0)循環(huán)體While循環(huán)至少執(zhí)行一次循環(huán)體do~while可轉化成while結構expr循環(huán)體假(0)真(非0)循環(huán)體While循環(huán)至少執(zhí)行37例用do~while循環(huán)求1+2+…+100

/**/#include<stdio.h>main(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);printf("%d",sum);}例用do~while循環(huán)求1+2+…+100/**/38例while和do~while比較#include<stdio.h>main(){inti,sum=0;scanf("%d",&i);do{sum+=i; i++;}while(i<=10);printf("%d",sum);}#include<stdio.h>main(){inti,sum=0;scanf("%d",&i);while(i<=10){sum+=i; i++;}printf("%d",sum);}例while和do~while比較#include<s39for語句p152一般形式:for([expr1];[expr2];[expr3])

循環(huán)體語句;執(zhí)行流程:expr2循環(huán)體假(0)真(非0)forexpr1expr3for語句p152for([expr1];[expr240for語句一般應用形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值){ 循環(huán)體語句;}expr1;while(expr2){ 循環(huán)體語句; expr3;}例用for循環(huán)求1+2+…+100

#include<stdio.h>main(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}for語句中expr1,expr2,expr3類型任意,都可省略,但分號;不可省無限循環(huán):for(;;)for語句可以轉換成while結構for語句一般應用形式:for(循環(huán)變量賦初值;循環(huán)條件;循41“溫故”逗號運算符p154例用for循環(huán)生成10個隨機數并累加

#include<stdio.h>#include<time.h>#include<stdlib.h>main(){inti,tmp,sum=0;/*Seedtherandom-numbergeneratorwithcurrenttimesothatthenumberswillbedifferenteverytimewerun.*/srand((unsigned)time(NULL));for(i=1;i<=10;i++){tmp=rand();sum+=tmp;}printf("%d\n\n",sum);}#include<stdio.h>#include<time.h>#include<stdlib.h>main(){inti,sum;srand((unsigned)time(NULL));for(sum=0,i=1;i<=100;i++)sum+=rand();printf("%d\n\n",sum);}

各人各次運行結果不一“溫故”逗號運算符p154例用for循環(huán)生成10個隨42逗號運算符和表達式形式:表達式1,表達式2,……表達式n結合性:從左向右優(yōu)先級:15逗號表達式的值:等于表達式n的值用途:常用于循環(huán)for語句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);//a=15,表達式值60//a=15,表達式值20//賦值表達式,表達式值18,x=18//逗號表達式,表達式值18,x=3//1,2,3//3,2,3例:#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}運行結果:x=3逗號運算符和表達式例a=3*5,a*4//a=15,表43例:#include<stdio.h>main(){inti;for(i=0;i<10;i++)putchar(‘a’+i);}運行結果:abcdefghij例:#include<stdio.h>main(){inti=0;for(;i<10;i++)putchar(‘a’+i);}例:#include<stdio.h>main(){inti=0;for(;i<10;)putchar(‘a’+(i++));}例:#include<stdio.h>main(){inti=0;for(;i<10;putchar(‘a’+i),i++);}靈活應用for語句例:#include<stdio.h>運行結果:abcdef44main(){inti,j,k;for(i=0,j=100;i<=j;i++,j--){k=i+j; printf("%d+%d=%d\n",i,j,k);}}#include<stdio.h>main(){charc;for(;(c=getchar())!='\n';)printf("%c",c);}#include<stdio.h>main(){inti,c;for(i=0;(c=getchar())!='\n';i+=3) printf("%c",i+c);}main()#include<stdio.h>#includ45例p161求1/(1-x)=1+x+x2+x3+……+xn,x<1,算到通項小于0.0001#include"stdio.h"intmain(){ floatsum=1,x,term; printf("Inputthevalueofx:"); scanf("%f",&x); term=x; for(;term>=0.0001;) { sum+=term; term*=x; } printf("term=%.5f,Sum=%.5f\n\n",term,sum); return0;}這個例子若x的值超過1,則出現列循環(huán)。例p161求1/(1-x)=1+x+x2+x3+……+xn46例梯形法求數值積分0yxaa+ha+iha+(i+1)hbf(x));1;1()*(*))()((**5.0)())()((2)))1(()((2)))1(()((21110++-<==++=+=+++=++++=++++=-=??-=-=iniihiafhssbfafhsihafhbfafhhiafihafhShiafihafhsnabhninii迭代:例梯形法求數值積分0yxaa+ha+iha+(i+1)h47循環(huán)的嵌套p156三種循環(huán)可互相嵌套,層數不限外層循環(huán)可包含兩個以上內循環(huán),但不能相互交叉嵌套循環(huán)的執(zhí)行流程(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}內循環(huán)外循環(huán)內循環(huán)嵌套循環(huán)的跳轉禁止:從外層跳入內層跳入同層的另一循環(huán)向上跳轉循環(huán)的嵌套p156(1)while()(2)do(48例循環(huán)嵌套,輸出九九表p1511234567891234567892468101214161836912151821242791827364554637281……………..ij/*MultiplicationTable*/#include<stdio.h>main(){inti,j;for(i=1;i<10;i++)printf("%4d",i);printf("\n---------------------------------------\n");for(i=1;i<10;i++)for(j=1;j<10;j++) printf((j==9)?"%4d\n":"%4d",i*j);}例循環(huán)嵌套,輸出九九表p1511234567891249i<10printf假(0)真(非0)i=1j++j=1j<10真(非0)假(0)i++for(i=1;i<10;i++)for(j=1;j<10;j++)printf((j==9)?"%4d\n":"%4d",i*j);內循環(huán)i<10printf假(0)真(非0)i=1j++j=1j<50下面這個例子既是循環(huán)語句的應用,也比較充分體現計算機的強大的邏輯運算能力——例有紅、黃、蘭、白、紫色的珠子分別放在5個包里。甲說:第二個包是紫色珠子,第四個包是黃色珠子.乙說:第一個包是紅色珠子,第五個包是白色珠子.丙說:第三個包是白色珠子,第四個包是蘭色珠子.丁說:第二個包是黃色珠子,第五個包是紫色珠子.每個人都說對一句,說錯一句.各個包里的珠子分別是什么顏色的?編制求解程序.下面這個例子既是循環(huán)語句的應用,也比較充分體現計算機51

4.5輔助控制語句p159~165break語句p159功能:在循環(huán)語句和switch語句中,終止并跳出循環(huán)體或開關體break只能終止并跳出最近一層的結構break不能用于循環(huán)語句和switch語句之外的任何其它語句之中4.5輔助控制語句p159~165break只能終止并52

expr……break;……假(0)真(非0)whiledo……break;…...expr假(0)真(非0)while

expr……假(0)真(非0)whiledo……expr假53expr2……break;…...假(0)真(非0)forexpr1expr3switchexpr語句組1break;語句組2break;語句組nbreak;語句組break;…...const1const2constndefaultcaseexpr2……假(0)真(非0)forexpr1expr3s54例break舉例:輸出圓面積,面積大于100時停止#definePI3.14159main(){intr;floatarea;for(r=1;r<=10;r++){area=PI*r*r;if(area>100) break;printf("r=%d,area=%.2f\n",r,area);}}例break舉例:輸出圓面積,面積大于100時停止#de55例break舉例:小寫字母轉換成大寫字母,直至輸入非字母字符#include<stdio.h>main(){inti,j;charc;while(1){c=getchar(); if(c>='a'&&c<='z') putchar(c-'a'+'A'); else break;}}例break舉例:小寫字母轉換成大寫字母,直至輸入非字母56#include"stdio.h"/*compute1/(1-x)*/intmain(){ floatsum,x,term; intn; printf("Inputthevalueofx:"); scanf("%f",&x); for(term=1,sum=0,n=1;n<100;n++) { if(term<0.0001)gotooutput; sum+=term; term*=x; } printf("NotReachtheDesireAccuracy!\n\n"); gotoend;output: printf("ExitfromLoop\n"); printf("term=%.5f,Sum=%.5f\n\n",term,sum);end: return0;}break用到前面的例子(為解決列循環(huán))卻不方便:求1/(1-x)=1+x+x2+x3+……+xn,x<1,算到通項小于0.0001#include"stdio.h"/*comput57continue語句p163功能:結束本次循環(huán),跳過循環(huán)體中一部分尚未執(zhí)行的語句,進行下一次是否執(zhí)行循環(huán)體的判斷僅用于循環(huán)語句中expr……continue;……假(0)真(非0)while真(非0)do……continue;…...expr假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3continue語句p163expr……假(0)真(非0)58例求輸入的十個整數中正數的個數及其平均值/*usingcontinuestatement*/#include<stdio.h>main(){inti,num=0,a;floatsum=0;for(i=0;i<10;i++){scanf("%d",&a); if(a<=0)continue; num++; sum+=a;}printf("%dplusinteger'ssum:%6.0f\n",num,sum);printf("Meanvalue:%6.2f\n",sum/num);}例求輸入的十個整數中正數的個數及其平均值/*using59程序舉例t=1,pi=0,n=1.0,s=1當|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4輸出pi分子:1,-1,1,-1…分母:1,3,5,7,...為止最后一項的絕對值小于的近似值,直到公式求例用61071513114-+-+-?ppLL程序舉例t=1,pi=0,n=1.0,s=1當|t|1e-60例求Fibonacci數列:1,1,2,3,5,8,……的前40個數f1=1,f2=1fori=1to20輸出f1,f2f1=f1+f2f2=f2+f11534233159710946750255142293524578241578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155)3()2(12)1(11213+=====--nFFFnFnFnnn例求Fibonacci數列:1,1,2,3,5,8,……61例判斷m是否素數讀入mk=mi=2當ikm被i整除真假用break結束循環(huán)i=i+1ik+1真假輸出:m”是素數”輸出:m”不是素數”例判斷m是否素數讀入mk=mi=2當ikm被i整除真62例簡單密碼系統(tǒng)ABCDEFGHIJKLMNOPQRSTUVWXYZ例如Hello,world!譯成密碼:Lipps,asvph!解碼:例簡單密碼系統(tǒng)ABCDEFGHIJKLMNOPQRSTU63例pp168BonomialCoeffcientsareusedinthestudyofbonomialdistributions.ItisgivenbyB(m,x)=m!/(x!(m-x)!),m>=xAtableofbonomialCoeffcientsisrequiredtobeprintedasfollows:Mx012345678910----------------------------------------------------------------------------011112121313314146415151010516161520156171721353521718182856705628819193684126126843691101104512021025221012045101ProblemAnalysis:B(m,0)=1;B(m,x)=B(m,x-1)[(m-x+1)/x],x=1,2,3,...,mB(0,0)=1;例pp168BonomialCoeffcientsar64例pp169Inanorganization,theemployeesaregroupedaccordingtotheirbasicpayforpurposeofcertainperks.Thepay-rangeandthenumberofemployeesineachgroupareasfollows:GROUPPAY-RANGENUMBEROFEMPLOYEES175030002333001-45003544501-6000205above600011Drawahistogramtohighlightthegroupsizes.例pp16965例pp171MinimumCost:ThecostofoperationofaunitconsistsoftwocomponentsC1andC2whichcanbeexpressedasfunctionsofaparameterpasfollows: C1=30-8p C2=10+p2Theparameterprangesfrom0to10.Determinethevalueofpwithanaccuracyof+0.1wherethecostofoperationwouldbeminimum.

ProblemAnalysis: Totalcost=C1+C2=40-8p+p2Thecostis40whenp=0,and33whenp=1and60whenp=10.Thecost,therefore,decreasesfirstandthenincreases.例pp171MinimumCost:66例pp172PlottingofTwoFunctions: y1=exp(-ax) y2=exp(-ax2/2)xvaryingfrom0to5.0ProgramAnalysis:Initiallywhenx=0,y1=y2=1andthegraphsstartfromthesamepoint.Thecurvescrosswhentheyareagainequalatx=2.0.Theprogramshouldhaveappropriatebranchstatementstoprintthegraphpointsatthefollowingthreecondition: 1. y1>y2 2. y1<y2 3. y1=y2Thefunctionsy1andy2arenormalizedandconvertedtointgersasfollows:y1=50exp(-ax)+0.5y2=50exp(-ax2/2)+0.5例pp172PlottingofTwoFuncti67第四章判定、分支和循環(huán)4.1C語句概述C語句:以“;”作分隔符,編譯后產生機器指令.C語句分類表達式語句:表達式加分號構成??照Z句:;程序控制語句(9種):if()~else~switchfor()~while()~do~while()continuebreakgotoreturn分支循環(huán)輔助控制如total=total+limit;a=3;func();printf(“Hello,world!\n”);第四章判定、分支和循環(huán)4.1C語句概述空語句:;程序68復合語句:用{…}括起來的一組語句一般形式:

{[數據說明部分;]執(zhí)行語句部分;}“}”后不加分號語法上和單一語句相同復合語句可嵌套復合語句:用{…}括起來的一組語句69三種基本結構順序結構ABAB流程圖N-S圖三種基本結構ABAB流程圖N-S圖70PAB真假PBA真假選擇結構kA1A2AiAnk=k2k=k1k=knk=ki......二分支選擇結構多分支選擇結構PAB真假PBA真假選擇結構kA1A2AiAnk=k2k=k71循環(huán)結構當型循環(huán)結構直到型循環(huán)結構PA假真當P為真AAP真假A直到P為真注:A,B,A1….An可以是一個簡單語句,也可以是一個基本結構循環(huán)結構當型循環(huán)結構直到型循環(huán)結構PA假真當P為真AAP真假724.2分支簡單if語句(p111~115)格式:if(expression)statement執(zhí)行過程:exprstatement非0=0例:if(x>y)printf(“%d”,x);例讀入a,b,c,d四個整數,輸出(a+b)/(c-d)。

if(c-d!=0){ratio=(float)(a+b)/(c-d);printf(“Ratio=%f\n”,ratio);}4.2分支exprstatement非0=0例:if(x73/*absolutevalue*/#include<stdio.h>main(){intx,y;printf("Enteraninteger:");scanf("%d",&x);y=x;if(y<0)y=-y;printf("\ninteger:%d-->absolutevalue:%d\n",x,y);}例求一個數的絕對值運行:Enteraninteger:-12integer:-12--->absolutevalue:12abs(intn)labs(long)fabs(doublex)cabs(complexz)/*absolutevalue*/例求一個數的絕對74exprstatement1statement2非0=0if…else語句p115格式:if(expression)statement1elsestatement2執(zhí)行過程:例

if(c-d!=0){ratio=(float)(a+b)/(c-d);printf(“Ratio=%f\n”,ratio);}elseprintf(“c-diszero\n”);exprstatement1statement2非0=0if75例if(x>y)max=x;elsemax=y;轉為表達式: max=(x>y)?x:y這里引入了運算符——p129 條件運算符?:例if(x>y)max=x;轉為表達式:76條件運算符與表達式一般形式:expr1?expr2:expr3執(zhí)行過程功能:相當于條件語句,但不能取代一般if語句例if(a>b)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,a>b?a:b);例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);expr1取expr2值取expr3值非0=0例(a==b)?’Y’:’N’(x%2==1)?1:0(x>=0)?x:-x(c>=‘a’&&c<=‘z’)?c-’a’+’A’:c條件運算符可嵌套

如x>0?1:(x<0?-1:0)優(yōu)先級:13結合方向:自右向左

如a>b?a:c>d?c:da>b?a:(c>d?c:d)expr1、expr2、expr3類型可不同,表達式值取較高的類型例x?‘a’:‘b’//x=0,表達式值為‘b’;x?0,表達式值為‘a’x>y?1:1.5//x>y,值為1.0;x<y,值為1.5條件運算符與表達式例if(a>b)printf(“%77elseif梯狀p122格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0執(zhí)行過程:

if(value>1000)takeoff=0.25;elseif(value>800)takeoff=0.2;elseif(value>600)takeoff=0.15;elseif(value>400)takeoff=0.1;elsetakeoff=0;elseif梯狀p122if(expr1)78例百分制成績轉換為五級制p122

80to100Honours60to79FirstDivision50to59Seco

溫馨提示

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

評論

0/150

提交評論