版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章
选择结构程序设计内容提要:一,关系表达式与逻辑表达式二,选择结构控制语句(if语句,switch语句)数据结构+算法=程序描述数据地类型,组织形式描述对数据地操作步骤一,算法:计算机求解某一问题而采用地具体方法,步骤二,两大类计算机算法:数值运算算法,非数值运算算法(求数值解,成熟)(事务管理,广泛)三,算法地特:有穷,确定,输入,输出等四,算法描述:描述算法地方法有多种归纳为二大类:①文字②图形(符号)四.一算法地概念四.二算法地描述方法常用地算法描述方法:(一)带序号地自然语言描述易懂却不直观,不严格(二)流程图:灵活,自由,形象,直观,可表示任何算法输入/输出处理判断起止连接点流程线(三)N-S图(盒图):完全去掉了带箭头地流程线,算法地所有处理步骤都写在一个大矩形框(表示简单,符合结构化思想)(四)伪代码:用介于自然语言与计算机语言之间地文字及符号来描述算法(方便,易懂,便于向计算机语言过渡)例一:计算S=,写出其算法。自然语言描述:流程图描述:N-S图描述:伪代码描述:引例:计算函数值:需考虑:一)输入x二)判断x地值三)根据x地值计算y地值四)输出y地值显然二)三)顺序结构程序不能实现,须引入选择结构程序。#include<stdio.h>#include<math.h>voidmain(){floatx,y;printf("Enterx:");scanf("%f",&x);if(x!=零.零)y=sin(x)/x;elsey=一;printf("\nx=%五.二f\ty=%七.四f\n",x,y);}Enterx:二x=二.零零y=零.四五四六四.一条件判断---关系表达式关系运算:是对两个量行"比较运算"关系运算符:<,<=,>,>=,==,!=优先级别算术运算符,关系运算符,赋值运算符高低如:c>a+bc>(a+b)a==b<ca==(b<c)a=b<ca=(b<c)注意:"="与"=="不同高低关系表达式:用关系运算符将两个表达式(算术,字符表达式)连接起来地有意义地式子。如:x!=零‘a’==‘A’a*a+b*b<Y*Y注意:数值量比较---数字地大小字符量比较---ASCII地大小关系表达式地值:真(一)假(零)c>a+bc>(a+b)a==b<ca==(b<c)a=b<ca=(b<c)问:a=一,b=-五,c=‘a’时上面表达式地值结合规则:左结合四.一条件判断---逻辑表达式逻辑运算符:&&(与),||(或),!(非)优先级别:!&&||高低!(非)算术运算符关系运算符&&||赋值运算符高
低例:a>b&&b>c(a>b)&&(b>c)a!=b&&c!=零(a!=b)&&(c!=零)!a||a>b(!a)||(a>b)五>三&&二||!八<四-二((五>三)&&二)||((!八)<(四-二))逻辑量:当一个量(可以是基本类型地常量或变量)用作判断时,C编译系统认为:非零-----真,零-----假逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来地有意义地式子(单个逻辑量,关系表达式是逻辑表达式地特例)逻辑表达式地值:真(一),假(零)如:若a=四则!aa&&-五四||零零一一例一:a=三,b=二,c=一a>b&&b>c (a>b)&&(b>c)a!=b&&c!=零 (a!=b)&&(c!=零)!a||a>b (!a)||(a>b)五>三&&二||!八<四-二例二:判断某年year是否闰年?(闰年:能被四整除,但不能被一零零整除;或能被四零零整除)year%四==零&&year%一零零!=零||year%四零零==零练:写出C语言地表达式(一)|x|>二(二)x≤一+a并y≤b(三)地定义域abs(x)>二或x>二||x<-二x<=一+a&&y<=b(x>=二||x<=一)&&x!=零或(x-一)*(x-二)>=零&&x!=零写出表达式地值:(a=二,b=零,c=-二.五)a*b||c!b&&c零||a一&&!a/c一一一零说明(一)运算对象地数据类型:除整型外,也可以是实型,字符型等其它类型数据。(二)子表达式计算:只有在需要计算下一个子表达式才能求解时,才计算;否则,不再计算。①对于逻辑与运算,如果第一个对象被判定为"逻辑假",系统不再计算第二个对象(因为无论真假,都不影响整个表达式地结果)。②对于逻辑或运算,如果第一个对象被判定为"逻辑真",系统不再计算第二个对象。思考:假设n一=一,n二=二,n三=三,n四=四,x=一,y=一,求解表达式(x=n一>n二)&&(y=n三>n四)后,x,y地值?答案:x=零,y=一四.二if语句一,if语句地三种形式一)条件执行if(e)A-----A可为简单或复合语句如:if(a>零)printf("aispositive.\n");if(x>y){t=y;y=x;x=t;}二)分支选择if(e)AelseB当e为真值(非零)时执行A,否则执行B或后续语句。if(a>零)printf("Aispositive.\n");elseprintf("Aisnotpositive.\n");A或B都可以是单一语句,也可以是复合语句;else部分不能独立存在,即else前一定有一个";",它必定是if语句地一部分。注意:在C语言,表达式e地值为非零时,系统均按"真值"处理。如:if(‘a’)printf("O.K.");x=-五;if(x)printf("O.K.");y=零;if(y==零)printf("O.K.");y=零;if(y)printf("O.K.");读程序,写出它所完成地功能。#include<stdio.h>voidmain(){floatx,y;printf("Enterx:");scanf("%f",&x);if(x==零)y=一;elsey=(x*五+一)/x;printf("\nx=%四.一f\ty=%四.一f\n",x,y);}y=一;if(x!=零)y=(x*五+一)/x;问:若将y=一与if语句调换位置,程序结果会相同吗?例:任给a,b,c三个数,按从大到小地顺序输出。分析:一)对于任意两个数a,b:若a>b,则输出a,b;否则输出b,a。二)对于三个数,有六种可能:a>b>ca>c>bb>a>cb>c>ac>a>bc>b>a三)使用判断---换法若a<b,则换a与b若a<c,则换a与c,结果a最大若b<c,则换b与c,结果a>b>cabc五六七若a<b,则换a与babc六五七若a<c,则换a与c,结果a最大abc七五六若b<c,则换b与c,结果a>b>cabc七六五#include<stdio.h>voidmain(){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("%d,%d,%d",a,b,c);}三)elseif形式if(P一)S一elseif(P二)S二…..elseif(Pn-一)Sn-一elseSn系统从上到下地逐个判断条件P,一旦发现某条件Pi满足时,则执行与它有关地语句Si,并跳过其它剩余地阶梯。若所有条件均不满足,执行最后一个else语句或后续语句。下一语句P一S一真假P二S二真假Pn-一Sn-一真假Sn…………注意:else与最近地if相匹配。例根据成绩打印出等级。(零-五九:E六零-六九:D七零-七九:C八零-八九:B九零-一零零:A)算法分析:设成绩为score,假设取值在零-一零零之间,没有错误地输入。六零>score≥零E七零>score≥六零D八零>score≥七零C九零>score≥八零B一零零≥score≥九零A#include"stdio.h"voidmain(){intscore;printf("score=");scanf("%d",&score);if(score>=零&&score<六零)printf("gradeisE");if(score>=六零&&score<七零)printf("gradeisD");if(score>=七零&&score<八零)printf("gradeisC");if(score>=八零&&score<九零)printf("gradeisB");if(score>=九零)printf("gradeisA");}#include"stdio.h"voidmain(){intscore;printf("score=");scanf("%d",&score);if(score>=零&&score<六零)printf("gradeisE");elseif(score<=六九)printf("gradeisD");elseif(score<=七九)printf("gradeisC");elseif(score<=八九)printf("gradeisB");elseprintf("gradeisA");}注意条件地表示形式与顺序一#include"stdio.h"二voidmain()三{/*E:零-五九D:六零-六九C:七零-七九B:八零-八九A:九零-一零零*/四intscore;五printf("score=");六scanf("%d",&score);七if(score>=九零&&score<=一零零)八printf("gradeisA");九elseif(score>=八零)一零printf("gradeisB");一一elseif(score>=七零)一二printf("gradeisC");一三elseif(score>=六零)一四printf("gradeisD");一五else一六printf("gradeisE");}四.二if语句二,if语句地嵌套if(P一)if(P二)AelseBelseif(P三)CelseD#include<stdio.h>#include<math.h>voidmain(){floatx,y;printf("inputx:");scanf("%f",&x);if(x<-三.零)y=x-一.零;elseif(x>=-三.零&&x<=三.零)y=sqrt(九.零-x*x);elsey=log一零(x);printf("x=%零.一f\ty=%零.一f\n",x,y);}例:计算函数if(x<=三.零)……if(x<-三.零)y=x-一.零;if(x>=-三.零&&x<=三.零)y=sqrt(九.零-x*x);if(x>三)y=log一零(x);……例:计算函数二,if语句地嵌套比较:if(x)if(y)printf("一");elseprintf("二");if(x){if(y)printf("一");}elseprintf("二");由此看出:通过加"{}"可改变else地层位,从而改变程序地执行流程。二,if语句地嵌套if(x)if(y)printf("一");elseprintf("二");练一假定所有变量均已正确说明,下列程序段运行后x地值是。 a=b=c=零; x=三五; if(!a)x=-一; elseif(b); if(c)x=三; elsex=四;A)三四B)四C)三五D)三练二当a=一,b=三,c=五,d=四时,执行完下面程序段后x地值为。 if(a<b) if(c<d)x=一; else if(a<c)if(b<d)x=二;elsex=三;elsex=六; elsex=七;A)一B)二C)三D)六例:判断某年是否闰年。闰年:年份year能被四整除,但不能被一零零整除;或能被四零零整除if((year%四==零&&year%一零零!=零)||(year%四零零==零))leap=一;elseleap=零;四.二if语句三,条件运算符与条件表达式一.条件运算符:?与:/*唯一地三目运算符*/二.条件表达式:e一?e二:e三如:a>b?a:bx==零?一:sin(x)/x三.执行过程:一)计算e一二)e一值为非零(真),计算并返回e二地值否则计算并返回e三地值四.二if语句三,条件运算符与条件表达式四.运算顺序:高于赋值运算,低于算术,关系,逻辑运算如:y=x==零?一:sin(x)/x;五.条件运算符地结合方向是"右结合"如:a>b?a:c>d?c:d等价于:a>b?a:(c>d?c:d)例:读程序,写出程序完成地功能。#include<stdio.h>voidmain(){inta,b,max;printf("inputdatatoaandb:");scanf("%d,%d",&a,&b);max=a>b?a:b;printf("Themaxis%d\n",max);}printf("Themaxis%d\n",max=a>b?a:b);printf("Themaxis%d\n",a>b?a:b);找出a,b两个数地大数。例:任意输入一个字符,若是大写字母,将其转换成小写字母;如果不是,不转换。分析:判断一个字符ch是否为大写字母地方法ch>=‘A’&&ch<=‘Z’ch>=六五&&ch<=九零大写字母转换为小写字母地方法:ch+三二由前面地例子可以看出,对于二分支,并对同一变量赋值时用条件表达式最方便。ch=(ch>=‘A’&&ch<=‘Z’)?(ch+三二):ch;四.三开关语句开关语句又称为多分支选择语句,它比用嵌套地if语句实现多分支问题,程序结构清晰,易读。一,格式switch(e){casec一:语句一casec二:语句二……case:语句n[default:语句n+一]}其:表达式e可以是整型,字符型常量表达式ci需要与表达式e类型一致(整型与字符型通用)二,执行过程一.计算表达式e地值二.若与常量表达式ci值一致,则从语句i开始执行;直到遇到break语句或switch语句地"}"。三.若与任何常量表达式值均不一致时,则执行default语句或执行后续语句。注意:一)常量表达式ci仅起语句标号作用,不作求值判断;二)常量表达式地值需要是唯一地,没有先后次序;三)多个case语句可用一组执行语句。如:switch(x){case一:printf("statement一");break;case二:printf("statement二");break;default:printf("default");}如果case一,case二没有break;结果是什么?例:用switch语句评价学生地成绩
score>=九零优秀score>=八零良好score>=七零score>=六零及格score<六零不及格#include<stdio.h>voidmain(){intscore;printf("inputascore:");scanf("%d",&score);switch(score/一零){case一零:case九:printf("优秀\n");break;case八:printf("良好\n");break;case七:printf("\n");break;case六:printf("及格\n");break;default:printf("不及格\n");}}关键:如何表示表达式与常量,常量地取值与表达式有关。例运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:s<二五零km没有折扣二五零≤s<五零零2%折扣五零零≤s<一零零零5%折扣一零零零≤s<二零零零8%折扣二零零零≤s<三零零零一零%折扣三零零零≤s一五%折扣设每公里每吨货物地基本运费为p,货物重为w,距离为s,折扣为d,则总运费f地计算公式为:f=p*w*s*(1-d)int(s/二五零)零:d=零一:d=二二,三:d=五四~七:d=八八~一一:d=一零其它:d=一五#include<stdio.h>
voidmain()
{intc;
floatp,w,d,f,s;
scanf("%f,%f,%f",&p,&w,&s);
c=s/二五零;
switch(c){
case零:d=零;break;
case一:d=二;break;
case二:case三:d=五;break;
case四:case五:case六:case七:d=八;break;
case八:case九:case一零:
case一一:d=一零;break;
default:d=一五;}
f=p*w*s*(一-d/一零零.零);
printf("freight=%一五.四f\n",f);}上机一:编程实现:一,键盘输入一个整数a,判断它是偶数还是奇数并输出。二,P九五第五题#include<stdio.h>voidmain(){inta;printf("请输入一个整数:");scanf("%d",&a);if(a%二==零)printf("%d为偶数\n",a);elseprintf("%d为奇数\n",a);}#include<stdio.h>voidmain(){intx,y;printf("请输入x:");scanf("%d",&x);if(x<一)y=x;if(x>=一&&x<一零)y=二*x-一;if(x>=一零)y=三*x-一一;printf("y=%d\n",y);}上机二:一,请编程:根据右图函数关系,对输入地每个x值,计算相应地y值。xyx<零零零<x<=一零x一零<x<=二零一零二零<x<四零-零.五x+二零二,编程实现:设计一个简单地计算器,完成两个数地加减乘除。#include<stdio.h>voidmain(){ floatx,y; printf("请输入x地值:"); scanf("%f",&x); if(x<零)y=零; if(x>零&&x<=一零)y=x; if(x>一零&&x<=二零)y=一零; if(x>二零&&x<四零)y=-零.五*x+二零; printf("y=%f",y);}xyx<零零零<x<=一零x一零<x<=二零一零二零<x<四零-零.五x+二零上机二:编程实现:一,用switch语句设计一个简单地计算器,完成两个数地加减乘除。二,设面上一点M,其坐标为(x,y),M可能落在圆心为坐标原点半径为r地圆上,圆内或圆外,请输出该点地位置。#include<stdio.h>voidmain(){floatx,y,z,r=二;printf("请输入点地坐标:");scanf("(%f,%f)",&x,&y);z=x*x+y*y;if(z<r*r)printf("点在圆内\n");if(z==r*r)printf("点在圆上\n");if(z>r*r)printf("点在圆外\n");}#include<stdio.h>voidmain(){floatx,y,z;charop; printf("请输入需要计算地式子,如一+二:\n"); scanf("%f%c%f",&x,&op,&y); switch(op) { case'+':z=x+y;printf("%f+%f=%f\n",x,y,z);break;case'-':z=x-y;printf("%f-%f=%f\n",x,y,z);break;case'*':z=x*y;printf("%f*%f=%f\n",x,y,z);break; case'/':if(y!=零){z=x/y;printf("%f/%f=%f\n",x,y,z);} elseprintf("妳输入地除数为零,非法!\n"); break; default:printf("妳输入地式子有误!\n"); }}一.若从键盘上输入五,则程序地输出结果是。#include<stdio.h>voidmain(){intx;scanf("%d",&x);if(x++>五)printf("%d\n",x);elseprintf("%d\n",x--);}A.七 B.六 C.五 D.四二.下列程序地输出结果是。#include"stdio.h"voidmain(){intx=一,a=零,b=零;switch(x){case零:b++;case一:a++;case二:a++;b++;}printf("a=%d,b=%d\n",a,b);}A)a=二,b=一B)a=一,b=一C)a=一,b=零D)a=二,b=二三.若从
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新版通 用规范对设计影响交流分享
- 2025年抚顺师范高等专科学校高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 山西省孝义市高三上学期入学摸底考试语文试题(含答案)
- 沪教版(上海)七年级地理第一学期中国区域篇(上)1.2《台湾省》听课评课记录
- 中班幼儿系列活动策划方案五篇
- 2025年科学仪器行业技术革新与发展前景
- 钢材购销合同范文年
- 代偿协议与担保合同
- 跨境贸易线上支付服务合同
- 投资公司借款的合同样本
- 医保政策与健康管理培训计划
- 无人化农场项目可行性研究报告
- 2024届上海市金山区高三下学期二模英语试题(原卷版)
- 学生春节安全教育
- 2024-2025年校长在教研组长和备课组长会议上讲话
- 宏观利率篇:债券市场研究分析框架
- 桥梁顶升移位改造技术规范
- 六年级语文(上册)选择题集锦
- 《游戏界面设计专题实践》课件-知识点5:图标绘制准备与绘制步骤
- MOOC 材料科学基础-西安交通大学 中国大学慕课答案
- 复产复工试题含答案
评论
0/150
提交评论