第3章 程序设计基本结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章程序设计基本结构3.1算法及算法描述方法3.2顺序结构3.3选择结构3.4循环结构3.5应用举例3.1算法及算法描述方法算法:编写程序的根本,针对不同问题找到适合表示该问题的算法是编程人员的根本要求算法需要具备以下特点:1.有穷性2.确定性3.可行性4.有0个或多个输入5.有一个或多个输出算法有以下几种常用的描述方法:1.用自然语言描述2.用流程图表示算法3.用代码表示算法例:求出三个整数中的最大数和最小数。(1)用自然语言描述算法(s1、s2……代表算法步骤)S1:输入三个整数a、b和c,定义两个变量max和min用于存放最大数和最小数;S2:比较a和b,如果a大于等于b,把a赋给max,b赋给min;否则a赋给min,b赋给max;S3:比较max和c,如果max小于c,则把c赋给max;S4:比较min和c,如果min大于c,则把c赋给min;S5:输出max作为最大数,输出min作为最小数。(2)用伪代码描述算法INPUTa,b,cIFa=bTHENmax=a,min=bELSEmax=b,min=aIFmaxcTHENmax=cIFmincTHENmin=cOUTPUTmax,minEND(3)用流程图描述算法结构化程序设计有三大基本结构:顺序结构、选择结构、循环结构。3.2顺序结构顺序结构程序是最简单的程序。由计算机硬件直接支持,自上而下顺序执行,无分支、无转移、无循环。其格式为:语句1;语句2;语句3;……语句n;程序执行时先执行语句1,然后执行语句2,接着执行语句3,……,最后执行语句n。例:输入一个三位数,依次输出该数百位,十位,个位数字。#includestdio.hvoidmain(){intnum,a,b,c;scanf(%d,&num);//允许用户从键盘输入一个三位整数,值赋给变量numa=num/100;//计算得到num的百位存入变量a中b=num/10%10;//计算得到num的十位存入变量b中c=num%10;//计算得到num的个位存入变量c中printf(百位:%d\n十位:%d\n个位:%d\n,a,b,c);}运行时,从键盘输入:456↙屏幕显示:百位:4十位:5个位:63.3选择结构(1)单分支if语句语句格式:if(表达式){语句}执行过程:例:输入任意两个整数num1、num2,求两个数中的最大值。#includestdio.hvoidmain(){intnum1,num2,max;printf(Pleaseinputtwonumbers:);//提示语,提示用户增加交互性scanf(%d,%d,&num1,&num2);//允许用户键入两个整数max=num1;if(maxnum2)//单分支if语句结构max=num2;printf(max=%d\n,max);}•if语句(有三种基本结构形式:单分支、双分支和多分支。)(2)双分支if语句语句的格式:if(表达式){语句1}else{语句2}执行过程:例:利用双分支结构实现求两个数中的最大值。#includestdio.hvoidmain(){intnum1,num2,max;printf(Pleaseinputtwonumbers:);//提示语,提示用户增加交互性scanf(%d,%d,&num1,&num2);//允许用户键入两个整数if(num1num2)max=num1;elsemax=num2;//双分支if语句结构printf(max=%d\n,max);}有if不一定有else有else一定有if(3)多分支if语句语句格式:if(表达式1){语句1}elseif(表达式2){语句2}elseif(表达式3){语句3}…elseif(表达式m){语句m}else{语句n}执行流程:例3.5有一函数:编一个程序,输入一个实型数x值后,输出y值。#includestdio.h#includemath.hvoidmain(){floatx,y;//定义两个实型变量x,yscanf(%f,&x);if(x0)y=sqrt(x);//数学函数sqrt()用来求开方elseif(x==0)y=1;elsey=sqrt(-x);//多分支if语句结构printf(x=%f,y=%f\n,x,y);}if语句的嵌套所谓if语句的嵌套,是指在if语句中又包含一个或多个if语句的情况。一般格式:if()if(){语句1}else{语句2}elseif(){语句3}else{语句4}其他格式:if(){if(){语句1}}else{语句2}规律:else总是与它最近的未曾配对的if配对。在实际编程中,为明确匹配关系,避免匹配错误,建议将内嵌的if语句,一律用花括号括起来,如以下形式:if(){if(){语句1}else{语句2}}else{if(){语句3}else{语句4}}书本例3.6便是使用if语句的嵌套形式实现的请问:else和哪个if配对???switch语句基本格式:switch(表达式){case常量表达式1:语句序列1case常量表达式2:语句序列2...case常量表达式n:语句序列ndefault:语句}执行流程:计算表达式的值,找到与某个case后面的常量表达式的值相等时,执行此case分支中的语句序列,然后继续执行下一个case分支对应的语句序列直至最后。若所有的case中的常量表达式的值都不能与表达式中的值相匹配,则执行default分支中的语句序列。说明:(1)关键字switch后面的表达式的值是整型或字符型。(2)关键字case后面的常量表达式的值也只能是整型或字符型,并且各case分支的常量表达式的值应各不相同。case与常量表达式之间一定要有空格分隔。(3)语句序列可以是多条语句,不需要像if语句用花括号括起。(4)当所有case的常量表达式都不能与表达式的值匹配时,执行default分支的语句。default分支不要求必须存在,程序员根据具体问题分析是否需要。若需要,在每个switch结构中default分支只能有一个。(5)各case及default分支的先后次序,不影响程序执行结果。(6)多个case也可以共用语句序列,此时不必重复书写,只需将共用语句序列的case情况连续书写,在其中最后一个case后书写语句序列即可。例:从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score90,等级为B;70≤score80,等级为C;60≤score70,等级为D;score60,等级为E。#includestdio.hvoidmain(){intscore;printf(Inputascore(0~100):);//提示语scanf(%d,&score);//允许用户键入成绩switch(score/10)//构造表达式score/10,把连续的数据离散化{case10:case9:printf(grade=A\n);//case10和case9共用语句case8:printf(grade=B\n);case7:printf(grade=C\n);case6:printf(grade=D\n);case5:case4:case3:case2:case1:case0:printf(grade=E\n);//case5到case0共用语句default:printf(END\n);}}程序运行情况如下:Inputascore(0~100):75↙grade=Cgrade=Dgrade=EENDWhy?如何解决?#includestdio.hvoidmain(){intscore;printf(Inputascore(0~100):);scanf(%d,&score);switch(score/10){case10:case9:printf(grade=A\n);break;case8:printf(grade=B\n);break;case7:printf(grade=C\n);break;case6:printf(grade=D\n);break;case5:case4:case3:case2:case1:case0:printf(grade=E\n);break;default:printf(END\n);}}程序运行情况如下:Inputascore(0~100):75↙grade=Cbreak语句的作用!!!break语句也称为间断语句,在此处,若执行break语句将跳出switch语句。3.4循环结构(while语句、do-while语句、for语句以及goto语句)(1)while语句语句格式:while(表达式)循环体;执行流程:例:编写程序,求1+2+3+…+100的值。#includestdio.hvoidmain(){inti,sum;//i代表加数,sum作为和,此时两个变量是随机值i=1;//i赋初值1sum=0;//sum赋初值0while(i=100)//循环结束条件i=100{sum=sum+I;i++;//大括号中的两条语句构成循环体}printf(sum=%d\n,sum);}程序运行后的输出结果为:sum=5050注意:(1)while后紧跟圆括号(2)表达式是循环控制条件,避免“死循环”(3)循环体若是多条语句,一定要用“{}”括起(2)do–while语句语句格式:do循环体while(表达式);执行流程:例:用do-while语句求1+2+3+…+100的值。#includestdio.hvoidmain(){inti,sum;i=1;//赋初值sum=0;//赋初值do{sum=sum+i;i++;}while(i=100);printf(sum=%d\n,sum);}程序运行后的输出结果为:sum=5050注意:(1)while后面的分号不要丢失(2)执行流程注意与while语句比较while语句等价??do-while语句(3)for语句语句格式:for(表达式1;表达式2;表达式3)循环体执行流程:例:用for语句求1+2+3+…+100的值。#includestdio.hvoidmain(){inti,sum;for(i=1,sum=0;i=100;i++)sum=sum+i;printf(sum=%d\n,sum);}程序运行后的输出结果为:sum=5050书本中列举了for语句中几种省略表达式的形式。这些等价形式虽然合法,但实际编程时还是提倡大家使用“经典格式”!(4)goto语句语句格式:goto语句标号;注意:关键字goto和语句标号之间用空格分隔,最后用分号结束。语句标号是任意合法的标识符(遵循标识符命名规则),当在标识符后面加一个冒号,如:“loop:”、“step1:”,该标识符就成了一个语句标号。执行过程:程序执行到goto语句时,程序无条件地转移到语句标号所标识的语句处,并从该语句继续执行。例:用goto语句求1+2+3+…+100的值。#includestdio.hvoidmain(){inti=1,sum=0;loop:sum+=i;//语句标号loop:i++;if(i=100)gotoloop;//若满足条件i=100,执行goto语句printf(%d\n,sum);}程序的运行情况是:5050初学者慎用!!(5)break语句和continue语句(用于循环体!)break语句语句格式:break;功能:前面提到用break语句可以跳出switch语句体,程序继续执行switch语句体后面的程序。在循环结构中,也可以用break语句跳出本层循环体,从而提前结束本层循环。例:#includestdio.hvoidmain(){inti=0;//赋初值0while(i20){i++;if(i%5==0)break;printf(%d,,i);}}结果:1,

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功