版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章
顺序与选择结构
程序设计4.1结构化程序设计4.1.1结构化程序设计思想的产生
结构化程序设计思想:围绕系统功能自顶向下,逐步细化和精化。细化过程:对系统功能逐层分解出许多易于理解和实现的、逻辑上相对独立的子功能,形成一棵功能树。
4.1.2
结构化程序设计的三种基本结构
(顺序结构)(选择结构)(循环结构)实例说明三种结构接通电源启动电脑玩游戏(顺序结构)抛硬币正面朝上上自习真看影碟假门没开真假按门铃(循环结构)(选择结构)1.控制语句––改变语句的执行顺序共有9种控制语句:
if()~else~(条件)
for()~(循环)
while()~(循环)
do~while(循环)4.2语句与分程序C程序的执行部分由执行语句构成,执行语句的种类主要有:控制语句、函数调用语句、表达式语句、空语句、复合语句(分程序)等。
continue(结束本次循环)
switch(多分支选择)
break(中止整个循环)
goto(转移)
return(函数返回)()表示条件,~表示语句2.函数调用语句3.表达式语句函数调用语句由函数名、实际参数以及分号构成。eg:printf(“hello");表达式加;如:i=i+1;i++;
x+y;
其函数调用也可理解为表达式语句.5.复合语句4.空语句
;任何事情都不做.用{}括起来的一系列语句。如:{z=x+y;t=z/100;printf("%f",t);}顺序结构流程图:表示ABAB先执行A,再执行B.4.3顺序结构程序设计特点:程序按语句从上到下的排列顺序依此执行,每条语句必须执行且只能执行一次,没有执行不到或执行多次的语句。顺序程序设计的步骤为:(1)用预处理命令包含文件或进行宏定义;(2)定义变量;(3)为变量赋初值(用输入函数或赋值语句);(4)计算;(5)输出结果(用输出函数)顺序程序设计的步骤顺序结构程序举例例4-1:已知圆柱体半径6米,高7米,求体积。分析:输入量:底面半径高输出量:体积假设:用变量r表示半径变量h表示高 变量s表示底面积变量v表示体积中间的处理过程:
s=PI*r*r;v=s*h;
都是实型数据例4-1程序流程:#include“stdio.h”#definePI3.14159main(){floatr,h,s,v;r=6;h=7;s=PI*r*r;v=s*h;
printf(“V=%f\n”,v);}整个程序的流程:定义4个实型变量r,h,v,s给半径r和高h赋值S=PI*r*r;V=s*h;输出体积v和侧面积s例4-2
输入三角形的三条边,求三角形的面积。分析:已知∶三角形的三条边a,b,c。
求解∶三角形的面积area。
计算公式∶设s=(a+b+c)/2area=开始给a,b,c赋值计算s=(a+b+c)/2计算area=结果输出结束#include<math.h>main(){floata,b,c,s,area;
scanf(“%f%f%f”,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“a=%fb=%fc=%fs=%f”,a,b,c,s);
printf(“area=%f”,area);}例4-3从键盘输入一个大写字母,要求改用小写字母输出。分析:已知∶字符变量c1为大写字母。求解∶将字符变量c2中放入相应的小写字母。计算公式∶c2=c1+32(小写改成大写字母?)开始计算c2=c1+32输出c1结束输入一大写字母放入c1中输出c2#include<stdio.h>main(){charc1,c2;c1=getchar();
/*键盘输入一个大写字母*/
printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}输入:A
输出:A,65
a,97
例4-4求ax2+bx+c=0的根,a,b,c由键盘输入,设b2-4ac>0#include<math.h>main(){floata,b,c,delta,x1,x2,p,q;
scanf("%f%f%f",&a,&b,&c);delta=b*b-4*a*c;p=-b/(2*a);q=sqrt(delta)/(2*a);x1=p+q;x2=p-q;printf(”x1=%fx2=%f",x1,x2);}运行情况:a=1,b=3,c=2x1=-1.000000x2=-2.0000004.4选择结构程序设计选择结构程序设计就是通过判断从两种或两种以上的可能中确定问题的解。书写语句之前,应首先确定要判断的是什么条件,以及当判断结果为不同的情况(“真”或“假”)时应该执行什么样的操作。1if的三种形式功能:
当表达式值非0时,执行语句A,否则不执行语句A.表达式语句A=00形式1
if(表达式)
语句A其流程图:4.4.2
if语句如:
intx;
scanf(“%d”,&x);if(x<0) x=-x;
printf(“%d”,x);如:
if(3)prinft("o.k");if('a')…1.表达式可以是逻辑、关系,甚至是算术表达式。
2.上述形式中的语句必须以分号结束
3.上述形式中的语句可以是由{}括起来的复合语句。此时,在{}外可以不用分号.注意的问题:形式2
if(表达式)
语句Aelse
语句B功能:
表达式为非0,
执行语句A
表达式为0,
执行语句B表达式语句A语句B0=0例:
if(x>y) printf("%d",x); elseprintf("%d",y);书写语句之前,应首先确定要判断的是什么条件,以及当判断结果为不同的情况(“真”或“假”)时应该执行什么样的操作。例4-5:编程求
x2+3x-1(x<=3)Y=x2-2x+5(x>3)显然,这应该是一个分支结构的程序。它要根据x的不同取值范围,求得不同的y。判断条件:x<=3吗?结构如下:如果x<=3那么y=x*x+3*x-1否则y=x*x-2*x+5用c语言表示:
if(x<=3)
y=x*x+3*x-1;else y=x*x-2*x+5;输入输出分析:输入:x输出:y变量类型:单精度实型流程图开始输入xX<=3?Y=x*x-2*x+5Y=x*x+3*x-1输出y结束YN程序4-5.c:Main(){ floatx,y;
printf(“inputx:”);
scanf(“%f”,&x); if(x<=3) y=x*x+3*x-1; else y=x*x-2*x+5;
printf(“y=%f”,y);}注意程序的书写采用缩进式,也称为锯齿形书写格式。例4-6:求最大或最小值main(){
inta,b,c,max;
printf("inputa,b,c=");
scanf("%d,%d,%d",&a,&b,&c); if(a>b) max=a; else max=b; if(c>max) max=c;
printf("maxis:%d\n",max);}这是一种常见的求最大最小值的方法。增加变量,通常取名为max或min,用于存放最大或最小值.把a,b的最大值放到max中如果c大于max,则把c放到max中练习:任意输入3个整数,找出最小的一个。main(){
inta,b,c,min;
printf("inputa,b,c=");
scanf("%d,%d,%d",&a,&b,&c); if(a<b) min=a; else min=b; if(c<min) min=c;
printf("minis:%d\n",min);}main(){
inta,b,c,t;
printf("inputa,b,c=");
scanf("%d,%d,%d",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5d%5d%5d\n",a,b,c);}满足条件,就需要执行多条语句,则必须用{}把这些语句括起来,成为复合语句例4-7:任意输入3个整数,按从小到大的顺序输出形式3
if(表达式1)语句1
elseif(表达式2)语句2elseif(表达式3)语句3……elseif(表达式n)语句nelse语句n+1下一条语句功能:按表达式的顺序进行判断,最早值为真的表达式n将引起相应语句n的执行,并且不再判断其他条件,跳转到下一条语句执行。若全部表达式为假,则执行语句n+1。流程:表达1表达2表达3表达n语句1语句2语句3语句n语句n+1语句1……0=0=0000例4-8
对学生成绩的判断:分数小于60是“不及格”,否则,小于70是“及格”;否则,小于80是“中”;否则,小于90是“良”,否则是“优秀”。用如下程序表示:#include"stdio.h"main(){intscore;scanf("%d",&score);if(score<60)printf("不及格");
elseif(score<70) printf("及格");
elseif(score<80) printf("中");
elseif(score<90) printf("良");
else
printf("优秀");}4.4.3.if语句的嵌套if(表达式1)内嵌ifelse内嵌注意:else与最近的if配对.一般形式在上述形式的if语句中,又可以是if语句–––称为嵌套。if(表达式2)语句1if(表达式3)语句3else语句2else语句4例:
if()if()语句2else语句3if(){if()语句1}
else…所以:必要时加{}.if()语句1else#include"math.h"main(){ floatx,y;
printf("inputx=");
scanf("%f",&x); if(x<=2) y=x*(x-3)+2.5; else if(x<=7) y=sqrt(7-x); else y=(x-5)/3;
printf("x=%7.3fy=%7.3f\n",x,y);}此处不需要写成X>2&&x<=7例4-9:分段函数
x*(x-3)+2.5(x<=2)y=(x<=7)(x-5)/3(x>7)如果x<=2那么
y=……..否则
如果x<=7
那么
y=……
否则
y=…….(隐含:x>2)(隐含:x>7)例4-10有一函数y=–1(x<0)0(x=0)1(x>0)编一程序,输入一个x值,输出y值。有以下几种写法,请判断哪些是正确的?程序1:
main(){intx,y;scanf("%d",&x);
if(x<0)y=–1;elseif(x==0)y=0;elsey=1;
printf("x=%d,y=%d\n",x,y);}程序2:将上面程序的if语句改为:
if(x>=0)if(x>0)y=1;elsey=0;elsey=–1;程序3:将上述if语句改为:
y=–1;if(x!=0)if(x>0)y=1;elsey=0;程序4:
y=0;if(x>=0)if(x>0)y=1;elsey=–1;switch语句
C语言中提供了switch语句用于直接实现多分支选择结构。switch语句的一般形式为:
switch(表达式)
{case常量表达式1:语句1;
case常量表达式2:语句2;
……case常量表达式n:语句n;
[default:语句组n+1;]}switch语句switch语句的执行过程为:先计算switch后面的表达式的值;然后使其顺次花括号内同各个case后的常量表达式的值相比较,若找到相等的常量表达式i,则执行该常量表达式冒号后的语句i;若找不到匹配的常量表达式,此时要考虑是否有default选项,若有,则执行default后面的语句直到结束;否则什么也不执行。switch语句在执行过程中,若遇到break语句,则跳出switch结构,将程序流程转向switch结构外的下一条语句执行;若没有break语句,则从该语句组为入口,依次执行其后的所有冒号后面的语句。【例4.9】用switch语句实现例4.8。main(){intscore,mark;
printf("\nEnterscore:");
scanf("%d",&score);mark=-1;if(score>=0&&score<=100) mark=score/10;switch语句switch(mark){case10:case9:printf("\nVerygood");break;/*成绩≥90*/case8:printf("\nGood");break;/*80≤成绩<90*/case7:case6:printf("\nPassed");break;/*60≤成绩<80*/case5:case4:case3:case2:case1:case0:printf("\nFailed");break;/*成绩<60*/
default:printf("\nEntererror!");/*处理错误的输入*/}}switch语句switch结构使用要注意以下几点:
switch后面表达式的类型,一般为整型、字符型或枚举类型(枚举类型将在以后的章节中介绍)。每个case后面常量表达式的值必须互不相同,即不允许对表达式的同一个值有两种或两种以上的处理方案。尽管各个case和default出现的次序不影响程序的执行结果,但是把default放在最后是一种良好的程序设计习惯。多个case可共有一组执行语句。case后面的常量表达仅起语句标号的作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行下去,不再进行判断。switch语句switch语句又称为开关语句。当仅需执行一个开关时,则在该case后面的语句中必须包含一个break语句,让其执行后跳出switch语句,否则会一直执行到最后,或遇到下一个case中的break语句为止。当case后面包含一条以上的执行语句时,可以不用花括号括起来,系统会自动识别并顺序执行所有语句。default是可选项。但良好的程序设计习惯是,在每个switch语句中,写上一条default语句来集中处理例外条件,从而防止一些条件没有被测试到。条件运算符格式:表达式1?表达式2:表达式3功能:先求表达式1的值,若表达式1的值为真,则表达式2的值为整个表达式的值,否则表达式3的值为整个表达式的值。Max=(a>b)?a:b;等价于:
if(a>b)max=a;elsemax=b;例4.5main(){ charch;
printf("input
ch=");
scanf("%c",&ch);
ch=ch>='a'&&ch<='z’?ch-32:ch;
printf("%c\n",ch);}判断字符ch是否是大写字母
ch>=‘A'&&ch<=‘Z’
选择结构程序设计举例【例4.10】求一元二次方程的根。#include"math.h"main(){floata,b,c,disc,x1,x2,rpart,ipart;
printf("\n\npleaseinputa,b,c:");
scanf("%f,%f,%f",&a,&b,&c);/*输入方程的系数*/
printf("Theequation");
if(fabs(a)<=1E-6)/*若a等于0,则不是一元二次方程*/ {printf("isnotquadratic");exit(0);}else{disc=b*b-4*a*c;
if(fabs(disc)<=1E-6)/*△=0时,有两个相等实根*/ {printf("hastwoequalroots:%8.4f",-b/(2*a));}elseif(disc>1E-6)/*△>0,有两个不等实根*/选择结构程序设计举例
{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);
printf("hastwodistinctrealroots:%8.4f,%8.4f",x1,x2);}else/*△<0,有两个共厄复根*/ {rpart=-b/(2*a);
ipart=sqrt(-disc)/(2*a);
printf("hastwocomplexroots:");printf("\n%8.4f+%8.4fi",rpart,ipart);printf("\n%8.4f-%8.4fi",rpart,ipart); }}}选择结构程序设计举例程序的运行情况如下:①
pleaseinputa,b,c:1,2,1Theequationhastwoequalroots:-1.0000②pleaseinputa,b,c:2,8,6Theequationhasdistinctrealroots:-1.0000,-3.000③pleaseinputa,b,c:1,2,3Theequationhastwocomplexroots:-1.0000+1.4141i-1.0000-1.4141i选择结构程序设计举例【例4.12】某商店售货,按购买货物的款数多少分别给予不同的优惠折扣:购货不足250元的,没有折扣;购货满250元,不足500元,折扣5%;购货满500元,不足1000元,折扣7.5%;购货满1000元,不足2000元,折扣10%;购货满2000元,折扣15%。①
用嵌套的if结构实现。选择结构程序设计举例选择结构程序设计举例main(){floatm,d,amount;printf("\nEnteryourmoneyforbuying:");scanf("%f",&m);if(m<250)d=0;elseif(m<500)d=5;elseif(m<1000)d=7.5;elseif(m<2000)d=10;elsed=15;amount=m*(1-d/100);printf("\namount=%6.2f",amount);}选择结构程序设计举例运行情况:Enteryourmoneyforbuying:680amount=629.00再运行:Enteryourmoneyforbuying:1350amount=1215.00②用switch结构实现。设置mark标记变量:mark=m/250,根据mark的值而确定相应的折扣。程序如下:main(){floatm,d,amount;
intmark;
printf("\nEnteryourmoneyforbuying:");
scanf("%f",&m);选择结构程序设计举例mark=m/250;switch(mark){case0:d=0;break;case1:d=5;break;case2:case3:d=7.5;break;case4:case5:case6:d=10;break;default:d=15;}if(d<0)print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《细胞免疫检测技术》课件
- 微课人力资源管理课程简介财经管理人力资源管理系
- n4护士述职报告
- 中小学水上交通安全知识
- 业务销售工作规划
- 低血糖的预防及应急预案
- 《公司法概论》课件
- 山东省枣庄市2024年中考化学真题【附答案】
- 医疗学术报告
- 数学学案:课堂导学“且”与“或”“非”(否定)
- 古诗文系列课件模板-山房春事二首
- 2024年上海市第二十七届初中物理竞赛初赛试题及答案
- 2011年认识实习报告
- 水务公司招聘笔试题库及答案
- 医疗垃圾分类与处理的人员培训与资质要求
- 审核的改进计划和措施
- 《旅游管理》专业调研报告
- 2024野生哺乳动物及栖息地调查技术规程
- 2024年中医药知识与技能竞赛题库附含答案
- 2023年6月大学生英语四级真题试卷及详细答案(三套)
- 高一选科指导课件
评论
0/150
提交评论