计算机软件及应用C程序设计ch04-判定、分支和循环课件_第1页
计算机软件及应用C程序设计ch04-判定、分支和循环课件_第2页
计算机软件及应用C程序设计ch04-判定、分支和循环课件_第3页
计算机软件及应用C程序设计ch04-判定、分支和循环课件_第4页
计算机软件及应用C程序设计ch04-判定、分支和循环课件_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章判定、分支和循环4.1C语句概述C语句:以“;”作分隔符,编译后产生机器指令.C语句分类表达式语句:表达式加分号构成。空语句:;程序控制语句(9种):if()~else~switchfor()~while()~do~while()continuebreakgotoreturn分支循环辅助控制如total=total+limit;a=3;func();printf(“Hello,world!\n”);第四章判定、分支和循环4.1C语句概述空语句:;程序1复合语句:用{…}括起来的一组语句一般形式:

{[数据说明部分;]执行语句部分;}“}”后不加分号语法上和单一语句相同复合语句可嵌套复合语句:用{…}括起来的一组语句2三种基本结构顺序结构ABAB流程图N-S图三种基本结构ABAB流程图N-S图3PAB真假PBA真假选择结构kA1A2AiAnk=k2k=k1k=knk=ki......二分支选择结构多分支选择结构PAB真假PBA真假选择结构kA1A2AiAnk=k2k=k4循环结构当型循环结构直到型循环结构PA假真当P为真AAP真假A直到P为真注:A,B,A1….An可以是一个简单语句,也可以是一个基本结构循环结构当型循环结构直到型循环结构PA假真当P为真AAP真假54.2分支简单if语句(p111~115)格式:if(expression)statement执行过程: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执行过程:例

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执行过程功能:相当于条件语句,但不能取代一般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)优先级: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执行过程:

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一般形式:执行过程:switch(表达式){caseE1:语句组1;break;caseE2:语句组2;break;…….caseEn:语句组n;break;[default:语句组;break;]}switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase4.3switch语句(开关分支语句)p125switc22E1,E2,…En是常量表达式,且值必须互不相同语句标号作用,必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句……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循环概述C语言可实现循环的语句:用goto和if构成循环while语句do~while语句for语句goto语句一般格式p132-转移作用goto语句标号;….…..标号:语句;标号:语句;….…..goto语句标号;不能用整数作标号只能出现在goto所在函数内,且唯一只能加在可执行语句前面限制使用goto语句4.4循环goto语句标号;27例用if和goto语句构成循环,求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循环初值循环终值循环变量增值循环条件循环体例用if和goto语句构成循环,求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个男孩的身高和体重,统计身高超过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(表达式)

循环体语句;执行流程:expr循环体假(0)真(非0)whilewhile语句p147while(表达式)执行流程:ex32特点:先判断表达式,后执行循环体说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)循环体;特点:先判断表达式,后执行循环体33例用while循环求1+2+…+100/*sumof1to100*/#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体例用while循环求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

循环体语句;while(表达式);执行流程:do循环体expr假(0)真(非0)while特点:先执行循环体,后判断表达式do~while语句p150do执行流程:do循环体ex36expr循环体假(0)真(非0)循环体While循环至少执行一次循环体do~while可转化成while结构expr循环体假(0)真(非0)循环体While循环至少执行37例用do~while循环求1+2+…+100

/**/#include<stdio.h>main(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);printf("%d",sum);}例用do~while循环求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])

循环体语句;执行流程:expr2循环体假(0)真(非0)forexpr1expr3for语句p152for([expr1];[expr240for语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值){ 循环体语句;}expr1;while(expr2){ 循环体语句; expr3;}例用for循环求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类型任意,都可省略,但分号;不可省无限循环:for(;;)for语句可以转换成while结构for语句一般应用形式:for(循环变量赋初值;循环条件;循41“温故”逗号运算符p154例用for循环生成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循环生成10个随42逗号运算符和表达式形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式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,则出现列循环。例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循环的嵌套p156三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}内循环外循环内循环嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环向上跳转循环的嵌套p156(1)while()(2)do(48例循环嵌套,输出九九表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);}例循环嵌套,输出九九表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);内循环i<10printf假(0)真(非0)i=1j++j=1j<50下面这个例子既是循环语句的应用,也比较充分体现计算机的强大的逻辑运算能力——例有红、黄、兰、白、紫色的珠子分别放在5个包里。甲说:第二个包是紫色珠子,第四个包是黄色珠子.乙说:第一个包是红色珠子,第五个包是白色珠子.丙说:第三个包是白色珠子,第四个包是兰色珠子.丁说:第二个包是黄色珠子,第五个包是紫色珠子.每个人都说对一句,说错一句.各个包里的珠子分别是什么颜色的?编制求解程序.下面这个例子既是循环语句的应用,也比较充分体现计算机51

4.5辅助控制语句p159~165break语句p159功能:在循环语句和switch语句中,终止并跳出循环体或开关体break只能终止并跳出最近一层的结构break不能用于循环语句和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用到前面的例子(为解决列循环)却不方便:求1/(1-x)=1+x+x2+x3+……+xn,x<1,算到通项小于0.0001#include"stdio.h"/*comput57continue语句p163功能:结束本次循环,跳过循环体中一部分尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中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(1121³+=====--nFFFnFnFnnn例求Fibonacci数列:1,1,2,3,5,8,……61例判断m是否素数读入mk=mi=2当ikm被i整除真假用break结束循环i=i+1ik+1真假输出:m”是素数”输出:m”不是素数”例判断m是否素数读入mk=mi=2当ikm被i整除真62例简单密码系统ABCDEFGHIJKLMNOPQRSTUVWXYZ例如Hello,world!译成密码:Lipps,asvph!解码:例简单密码系统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第四章判定、分支和循环4.1C语句概述C语句:以“;”作分隔符,编译后产生机器指令.C语句分类表达式语句:表达式加分号构成。空语句:;程序控制语句(9种):if()~else~switchfor()~while()~do~while()continuebreakgotoreturn分支循环辅助控制如total=total+limit;a=3;func();printf(“Hello,world!\n”);第四章判定、分支和循环4.1C语句概述空语句:;程序68复合语句:用{…}括起来的一组语句一般形式:

{[数据说明部分;]执行语句部分;}“}”后不加分号语法上和单一语句相同复合语句可嵌套复合语句:用{…}括起来的一组语句69三种基本结构顺序结构ABAB流程图N-S图三种基本结构ABAB流程图N-S图70PAB真假PBA真假选择结构kA1A2AiAnk=k2k=k1k=knk=ki......二分支选择结构多分支选择结构PAB真假PBA真假选择结构kA1A2AiAnk=k2k=k71循环结构当型循环结构直到型循环结构PA假真当P为真AAP真假A直到P为真注:A,B,A1….An可以是一个简单语句,也可以是一个基本结构循环结构当型循环结构直到型循环结构PA假真当P为真AAP真假724.2分支简单if语句(p111~115)格式:if(expression)statement执行过程: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执行过程:例

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执行过程功能:相当于条件语句,但不能取代一般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)优先级: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执行过程:

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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论