程序流程控制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.3种逻辑运算符:&&,||,! 3.写出下列表达式的等价式
表达式的值 0 1 0
知识盘点:
逻辑运算符的概念 逻辑运算符的优先级 逻辑表达式的概念
任务三 书写关系,逻辑表达式
1.写出判断一个字符是否是空白符('\t','\n',' ')的逻辑表达式:
(ch==' ')||(ch=='\n')||(ch=='\t')
grade
'B'
良好
'C'
及格
'D'
不及格
default
输入数据错误
(1)记录上机调试运行结果:
(2)说明该程序的功能是什么?
(3)思考:如果将程序段中的所有break语句去掉,输入字符'C',运行结果 是什么? 答:运行结果为:及格 不及格 输入数据错误!
知识盘点:
switch 语句的工作过程是:首先对 switch 语句括号中的表达式进行计算(本例中是 grade 变量) ,然后程序从上至下查找与表达式的值匹配的标号,以此为入口,程序跳到那一行第 一条语句处, 顺序往下执行. 若测试失败时, 即没有相匹配的标号, 这时如果有标号 default: , 那么程序就转到此处执行, 否则程序就跳出 switch 语句, 转而执行 switch 结构后面的语句. 一般而言,在多分支结构中总会出现"意外"情况,将其归入 default:标号作统一处理.若 只需考虑个别情况的处理,也可将各个情况分别写在各 case 标号后面,这样 default 标号 就可以省略. break 的作用:当程序执行 break 语句后,它就使程序流程跳出 switch 结构,并转而执行 switch 结构后面的第一条语句.如果程序中没有 break 语句,那么从匹配标号到 switch 结 构结束,中间所有的语句均被执行一次.
(4)题目:输入一个整数,如果该数为正,输出该数. 完成程序:
main() { int x; scanf("%d",&x); if (x>0) printf("%d",x); }
思考:如果要求x的绝对值,用if语句(第一 种形式)实现,该如何完成? main() {int x,y; scanf("%d",&x); if(x>=0) y=x; if(x<0) y=-x; printf("绝对值为:%d\n",y); }
结束
模块二 分支程序设计
能力目标:
根据实际问题,正确书写关系,逻辑表达式 , 正确认识分支结构的执行特点 运用if语句的3种形式及switch语句进行分支程序的 设计
任务一
认识关系运算符和关系表达式
3.完成下表:
表达式 表达式的值 -2 23 0 0 表达式的结果
真
1.观察C语言提供的6种关系运算符:>,>=,<,<= ,==, != 2.上机调试程序,记录运行结果
x>=1 0 y=3*x-10
if(表达式1) 语句1 else if(表达式2 ) 语句2
真
y=x
y=2*x-1
①对照上图形式在图内填空
假
表达式1
else if(表达式3)
语句3
假
else
假
表达式2 真 真
表达式3
语句4
语句1
语句2
真 语句3
语句4
(3)根据所得语句形式,填写程序,并记录上机调试结果.
(2)题目:有一个函数:
-1(x<0) 编程,输入一个x值, y= 0(x=0) 1(x>0)
输出y值. 请判断下列哪些写法是正确的?为什么?
写法1: main() { int x,y; scanf("%d",&x); if(x<0) y=-1; else if(x>0) y=1; else y=0; printf("x=%d,y=%d\n",x,y); } 原因:
请看题目:输入2个整数a,b,然后交 换a,b的值输出. 1.填写流程图
开始 输入a,b 输出交换前a,b的值 t=a;a=b;b=t; 输出交换后a,b的值
t=a;a=b;b=t; printf("交换后a=%d,b=%d\n",a,b); }
3.如果不借助中间变量t能使变量a,b的 值交换吗?如果能,该如何编程?
1.在该图中运用了哪些流程图框?
起止框,输入输出框,一般处理框 2.根据流程图,写出相应的C程序. main()
请观察下面的流程图
S=3.14*r*r 输出面积:s
{ float r,s; scanf("%f",&r);
结束
s=3.14*r*r; printf("s=%f\n",s); }
知识盘点:
#include"stdio.h" main() {char grade; printf("请输入成绩等级(A,B,C,D)\n"); grade=getchar(); switch(grade) { case'A':printf("优秀\n"); break; 'A' case'B':printf("良好\n");break; 优秀 case'C':printf("及格\n");break; case'D':printf("不及格\n");break; default:printf("输入数据错误!\n"); } }
请观察以下程序段和流程图,完成问题. 流程图:
假
x>7
程序段: if(x>7) if(x<13) printf("left!\n"); else printf("right!\n");
真
真 假
x<13 输出right!
真
输出left!
假
x>7
真 假
x<1 3 输出left! 输 出 right!
(1)判断以上2个流程图中,哪一个与程序段相吻合?为什么?
根据程序,画出流程图.
3.认识if…else语句(第二种形式)
(1)请观察下面的流程图: (2)if …else语句的形式: if(表达式)
真
x>0
假
语句1 else 语句2
y=x
y=-x (3)请填写流程图:
真 假
表达式
该流程图表示的意思是什么? 答:求x的绝对值. 语句1 语句2
知识盘点:
if …else语句构造了两路分支的选择结构,也是一种最基本的 选择结构.如果"表达式"计算为真,执行语句1;否则执行语 句2.其中"语句"部分可以是简单语句或者复合语句."表达 式"可以是关系表达式,逻辑表达式,也可以是算术表达式.
在写程序中,注意流程线的方向. 在程序中,正确定义变量. 顺序结构的执行特点:程序按照语句从上到下的 排列顺序依次执行,每条语句必须执行且只能执 行一次.
任务二
熟悉顺序程序
2.根据流程图,完成C程序. #include"stdio.h" main() {char ch1,ch2; printf("请输入一个大写字母:"); ch1=getchar(); ch2=ch1+32; printf("相应的小写字母为:"); putchar(ch2); } 3.如果输入的字符不是大字字母,这样的 转换还有意义吗?怎样才能避免输入 非大写字母? 答:这样的转换没有意义,如果要避 免输入非大写字母,可以在转换前加 一个是否是大写字线的判断.
输出"yes!"
结束
2.认识if语句(第一种形式)
(1)请观察下面的流程图: (3)归纳if语句的流程图:
表达式
x>0
x=x+1 语句 该图用if语句表示为:if(x>0) x=x+1;
(2)试写出if语句的一般形式:
if(表达式) 语句
知识盘点:
对"表达式"进行判断,如果计算结果为"真" ,那么执行"语句" , 否则跳过"语句" . 通常"表达式"是一个关系表达式,用于 2 个值进行比较,如 x>3 和 a<7 等;或者是一个逻辑表达式,用于表示若干条件成立或不成 立的关系,如 a&&b 等.但事实上, "表达式"的类型可以为任何类 型的表达式,如算术表达式等. "语句"可以是一条简单语句,也可以是用花括号将几条语句括起 来的一个复合语句.在{}外不需再加分号,整个 if 语句被看成一 条语句.
任务二
2.完成下表
表达式 (3<2)&&(7>5) (3<2)||(7>5) !(3>2)
认识逻辑运算符和逻辑表达式
x>y&&m>n a!=b||x==y !x||x>y x>7&&x+y!=20 3+2&&5>4||!0 等价于(x>y)&&(m>n) 等价于 (a!=b)||(x==y) 等价于 (!x)||(x>y) 等价于 (x>7)&&(x+y!=20) 等价于 (3+2)&&(5>4)||!0
知识盘点:
if…else…if语句是通过一连串的判断,来实现互斥分支, 它排列了一系列的操作,每一种操作是在相应的条件下才能执行. 该语句执行时,依次对各个条件进行判断,符合某一条件,则转 去执行该条件下的操作,其余部分被跳过;若无条件为真,就执 行最后一个else所指定的操作.
5.else与if的配对规则 . 与 的配对规则
请看题目:输入一个大写字母,转换 成小写字母输出. 1.填写流程图
开始 输入大写字母ch1 ch2=ch1+32
输出小写字母ch2 结束
任务三
设计顺序程序
2.根据流程图,写出C程序.
main() { int a,b,t; scanf("%d%d",&a,&b); printf("交换前a=%d,b=%d\n",a,b);
(3)题目:从键盘上输入两个整数x和y,若x2+y2大于10,则输出x2+y2个位 上的数字,否则输出两数之和. 请画出流程图: 由流程图的思路,填写程序. #include"stdio.h" main() {int x,y,s,l; printf("请输入2个整数:"); scanf("%d%d",&x,&y); s=x*x+y*y; if (s>10) {l=s%10; printf("%d",l); } else printf("%d",x+y); }
2.写出判断某一年是否为闰年的逻辑表达式. (1)分析: 闰年的条件是符合下列2个条件之一: 能被4整除,但不能被100整除; 能被400整除 (2)请分别写出2个条件的逻辑表达式:
year%4==0&&year%100!=0 year%400==0
( 3 )如果将2个逻辑表达式合并为一个式子,该如何写?
(year%4==0&&year%100!=0)||(year%400==0)
任务四 考察条件控制语句if语句
1.考察分支结构的执wenku.baidu.com特点
请观察下面的流程图:
开始 输入一个正整数x
该流程图中,根据其真假使流程 分支的判断条件是什么?
答:x%6==0
x%6==0
该流程图所表示的程序功能是 什么?
输出"no!" 答:判断一个正整数是否是6的倍数.
程序流程控制
C语言是一种结构化,模块化的通用程序设计语 言.通过对程序流程控制的学习,建立运用3种基本 3 结构(顺序结构,分支结构,选择结构)进行编程的 思想.
模块一 顺序程序设计
能力目标:
正确认识顺序结构的执行特点 根据流程图,写出相应的程序 进行顺序程序的设计
任务一
开始 输入半径:r
考察顺序结构的执行特点
#include"stdio.h" main() {int true,false; true=(1==1); false=(1==0); Printf("真=%d,假=%d\n",true,false);} 请记录运行结果: 真=1,假=0
-3+1 2+7*3 a=0 1==0
真
假 假
知识盘点:
关系运算的概念 关系运算的优先级 关系表达式的概念
正确.
写法2: if(x>=0) if(x>0) else else y=-1; y=1; y=0;
原因:
正确.
写法3: y=-1; if(x!=0) if(x>0) else y=1; y=0;
原因:
不正确.
任务五
考察switch语句
switch语句部分流程图:
1.请阅读下面的程序及流程图,完成问题.
4.认识if…else if语句 4.认识if else if语句 认识if else…if
(1)题目:输入一个数x,如果x<1,则y=x;如果x>=10,则y=3x10,否则,y=2x-1,输出y的值.
该题将面临几种选择? 答:3种选择.
(2)请观察下面的流程图,回答问题.
假
x<1
假 真
②根据上图,写出对应的语 句形式.
#include"stdio.h" main() { float x,y; printf("请输入x的值:"); scanf("%f",&x); if((x<1)
y=x;
请记录上机调试结果:
else if(x>=10) y=3*x-10; else
y=2*x-1;
printf("y的值为:%.2f\n",y);}
答:根据else与if的配对规则,第二个图与程序段相吻合. (2)写出该程序段的运行结果.
X的取值
运行结果
6 12 18
无结果
left! right!
6.if语句的嵌套
(1)按else与if的配对规则划分下列关系. if(条件1) if(条件2) 语句1 else 语句2 else if(条件3) 语句3 else 语句4