内容正文:
专题4:分支结构程序设计
《编程语言基础—C语言》课程
专题复习讲练测
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
考纲要求
一
掌握条件语句、条件表达式的格式及其使用方法
掌握多分支语句(switch)的格式及其使用方法
掌握分支结构程序设计在程序设计中的实际应用
知识点梳理
二
知识点梳理
二
1、if语句
(1)概述
if语句通常被称为选择语句或者分支语句,他不再局限于顺序结构的单一流程,而是用来对给定条件进行判断,根据其判定结果,从操作中选择其一。if语句用于实现分支结构,在C语言中,提供了三种形式的if语句。
(2)一般形式:if(表达式) 语句;
例如:if(x>y) printf(“%d”,x);
if语句的一般执行过程(如图所示):
知识点梳理
二
1、if语句
(3)说明:
执行if语句时,先对“表达式”进行求值,如果计算结果为非0(真),则执行其后的“语句”,否则跳过其后的“语句”。
“表达式”可以为任何类型的表达式,如下所示:
算数表达式:-3+‘D’ 值为:65 结果为“真”
赋值表达式:a=0 值为:0 结果为“假”
赋值表达式:a=5 值为:5 结果为“真”
知识点梳理
二
1、if语句
(3)说明:
“语句”可以是一条简单语句,也可以是用花括号{ }将几条语句括起来的一个复合语句。如下所示:
用“{ }”括起来的复合语句被看成是一条语句。在编写程序时,注意,if(a==b)不要写成if(a=b),这两种书写方式在编译时均为正确的表达式,不会出现编译出错的提示,但其结果完全不一样。
if(x<y)
x=x+1;
//简单语句 if(x<y)
{x=x+1;
y=y+1;
} //复合语句
知识点梳理
二
1、if语句
(4)if语句的实际应用
例题:输入一个成绩score,如果成绩大于等于60,则显示“通过!”,否则不显示。
程序如下:
#include <stdio.h>
main()
{int score;
printf(“输入一个成绩:”);
scanf(“%d”,&score);
if(score>=60)
printf(“通过!
”);}
知识点梳理
二
2、if……else语句
(1)一般形式:
if(表达式)
语句1;
else
语句2;
(2)执行过程如右图所示:
如果“表达式”计算结果值为真,则执行语句1,否则执行语句2,其中,语句1和语句2部分可以是简单语句或者复合语句。
知识点梳理
二
2、if……else语句
(3)复合语句
在if后面的“语句1”部分和else后面的“语句2”部分如果不止有一条语句,则应该用花括号“{}”将这几条语句括起来,成为一条复合语句。如以下程序应如何修改?
if(x>y)
printf(“较大者为:%d”,x);
x=x+1;
else
printf(“较大者为:%d”,y);
if(x>y)
{ printf(“较大者为:%d”,x);
x=x+1;}//花括号内为复合语句
else
printf(“较大者为:%d”,y);
知识点梳理
二
2、if……else语句
(4)if...else语句的应用
例题1:输入一个成绩score,如果成绩大于等于60,则显示“通过!”,否则显示“未通过,继续努力”。
程序如下:
#include <stdio.h>
main()
{int score;
printf(“输入一个成绩:”);
scanf(“%d”,&score);
if(score>=60)
printf(“通过!
”);
else
printf(“未通过,继续努力
”);}
知识点梳理
二
3、if……else if……else语句
(1)一般形式
if(表达式1) 语句1;
else if(表达式2) 语句2;
else if(表达式3) 语句3;
........
else if(表达式m) 语句m;
else 语句m+1;
(2)执行流程图如右图所示:
知识点梳理
二
3、if……else if……else语句
(3)示例:(如下图所示)
当满足第一个条件时,if块内的代码就会被执行,此时else if后面的条件就会被忽略,如果if条件不成立,程序会检查下一个else if条件,只有当前if及后续所有的else if都不满足时,才会执行else部分(若有else)。
每一个else if都是对前一个if结果的一种补充,不是并行关系。
知识点梳理
二
3、if……else if……else语句
(4)说明
①3种表达式的if语句中,在if后面都有表达式,一般为逻辑表达式或关系表达式,也可以是任意的数据类型(整型、实型、字符型、指针型数据)
例如:if(a==b&&x==y) printf(“a=b,x=y”);
if(3) printf(“OK”);
if(‘a’) printf(“%d”,’a’);
②在第二种、第三种形式的if语句中,在每个else前面有一个分号,整个语句结束处还有一个分号。这是由于分号是C语言中不可缺少的部分,这个分号是if语句中的内嵌语句所要求的,若无此分号,则出现语法错误。
知识点梳理
二
3、if……else if……else语句
(4)说明
③else子句不能作为语句单独使用,他必须是if语句的一部分,与if配对使用。
④在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。在else上面的花括号“{}”外面不需要加分号,因为“{}”内是一个完整的复合语句,不需要另外附加分号。
知识点梳理
二
4、if语句的嵌套
(1)定义:在if语句中又包含一个或者多个if语句称为if语句的嵌套。
(2)一般形式:
if(表达式)
if(表达式) 语句1;
else 语句2;
else
if(表达式) 语句3;
else 语句4;
(3)在if语句的嵌套中,else总是与它上面最近且未配对的if配对。
内嵌if
内嵌if
知识点梳理
二
4、if语句的嵌套
(4)应用
例1:
if(表达式)
if(表达式) 语句1;
else
if(表达式) 语句2;
else 语句3;
例2:
if(表达式)
{
if(表达式) 语句1;
}
else 语句2;
知识点梳理
二
4、if语句的嵌套
(4)应用
例3:
if(x>7)
if(x<13)
printf(“left!”);
else
printf(“right!”);
例4:
if(x>7)
{
if(x<13)
printf(“left!”);
}
else
printf(“right!”);
知识点梳理
二
4、if语句的嵌套
(5)实例
有一函数,如下图所示。编写一程序,输入一个x值,输出y值。
程序流程图如右图所示:
知识点梳理
二
4、if语句的嵌套
(5)实例
知识点梳理
二
5、条件语句
(1)概念:条件表达式要求有3个操作对象,称为三目(元)运算符,它是C语言中唯一的一个三目运算符,由“?”和“:”组成。
(2)一般形式:表达式1?表达式2:表达式3
(3)执行过程如图所示:
若表达式1的结果为真(或非0),则条件表达式的值等于表达式2的值;若表达式1的结果为假(或为0),则结果为表达式3的值。
例如:m=(x>y)? x:y ;
知识点梳理
二
5、条件语句
(4)注意事项
①条件运算符的优先级高于赋值运算符,低于关系运算符和算数运算符。
例:x>y?x:y-1 等价于 (x>y)?x:(y-1)
②条件运算符的结合性是“右结合性”,即自右向左,可以理解为先从右边开始加括号。
例:a==b?(c=0):a>b?(c=2):(c=-2)等价于a==b?(c=0):(a>b?(c=2):(c=-2))
③“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式,或者“函数表达式”
例:a>b?(a=100):(b=100)或a>b? printf(“%d”,a):printf(“%d”,b)
知识点梳理
二
6、多分支语句(swicth语句)
(1)一般形式
switch(表达式)
{case 常量表达式1:语句部分1;break;
case 常量表达式2:语句部分2;break;
...........
case 常量表达式n:语句部分n;break;
default: 语句部分n+1;
}
知识点梳理
二
6、多分支语句(swicth语句)
(2)说明
①switch后面括号内的“表达式”,其值可以是整型、字符型、枚举类型数据。
②当表达式的值与某一个case后面的常量表达式的值相等时,就执行case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值相匹配的,就执行default后面的语句。
③执行完一个case后面的语句后,流程控制转移到下一个case继续执行。
④“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。
⑤在执行switch语句时,根据switch后面的表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断,直到运行到最后或者遇到break语句。
知识点梳理
二
6、多分支语句(swicth语句)
(2)说明
⑥每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象,即对表达式的同一值,有两种或者多种执行方案。
⑦当switch语句中的每一句case后面均有break语句结束程序的话,那么各个case的出现次序不影响执行结果。
⑧多个case可以共用一组执行语句,如图所示:
知识点梳理
二
7、分支结构程序设计
例1:有3个整数a,b,c,由键盘输入,输出其中最大的数。使用if语句编写或者条件语句编写。
知识点梳理
二
7、分支结构程序设计
例2:有一个函数,如图所示。编写程序,输入x的值,输出y相应的值。
真题练讲
三
【答案】a=2,b=1
1.(2009年湖南高考真题)程序分析题。以下程序的输出结果为:____________
#include<conio.h>
#include "stdio.h"
main()
{
int x=1,a=0,b=0;
switch(x)
{
case 0: b++;
case 1: a++;
case 2: a++;b++; }
printf("a=%d,b=%d
",a,b);
getch();
}
真题练讲
三
【答案】2,2,2
2.(2009年湖南高考真题)程序分析题。以下程序的输出结果为:____________
#include<conio.h>
#include "stdio.h"
main()
{
int i=1,j=1,k=2;
if((j++||k++)&& i++)
printf(“%d,%d,%d
",i,j,k);
getch();
}
真题练讲
三
【答案】#&
3.(2009年湖南高考真题)程序分析题。以下程序的输出结果为:____________
#include <conio.h>
#include <stdio.h>
main()
{ int a=2,b=7,c=5;
switch(a>0)
{ case 1:switch(b<0)
{case 1:printf("@");break;
case 2:printf("!");break; }
case 0:switch(c==5)
{case 0:printf("*");break;
case 1:printf("#");break;
case 2:printf("$");break; }
default:printf("&"); }
printf("
");
getch(); }
真题练讲
三
【答案】46
4.(2012年湖南高考真题)阅读程序,写出运行结果:____________
#include <conio.h>
#include <stdio.h>
main()
{ int x=2,y=7,z=5;
switch(x>2){
case 1:switch(y>0){
case 1:printf("1");break;
case 2:printf("2");break;
}
case 0:switch(z==5){
case 0:printf("3");break;
case 1:printf("4");break;
default:printf("5");break;
}
default:printf("6");
}
getch();
}
真题练讲
三
【答案】(1)y:x (2)z:a
5.(2012年湖南高考真题)程序填空题。下面程序输出x,y,z三个数中的最大值。
#include<stdio.h>
main()
{
int x=3,y=7,z=6;
int a,b;
a=x<y? ________(1)________;
b=a<z? ________(2)________;
printf("%d",b);
}
真题练讲
三
【答案①a+b<c||a+c<b||b+c<a
②a*a+c*c==b*b||a*a+b*b==c*c||b*b+c*c==a*a
6.(2014年湖南高考真题)程序填空题。输入三角形的三边a、b、c,判断a、b、c能否构成三角形,如果能够构成三角形则判断为何种类型的三角形:等腰三角形、等边三角形、直角三角形、等腰直角二角形、一般三角形。说明:―般三角形:两条边长之和大于第三条边长;等腰三角形:两条边长相等;等边三角形:三条边长相等;直角三角形:两条边长的平方和等于第三条边长的平方。
#include <stdio.h>
#include<math.h>
main() {
float a,b,c;
printf(”请输入三角形边长");
scanf("%f%f%f',&a,&b,&c);
if(______①_______)
printf ("不能构成三角形
");
else if (_______②________)
if ((a=b)||(b=c)||(c=a))
printf("等腰直角三角形
");
else printf ("直角三角形
");
else if(_______③________) printf ("等边三角形
");
else if (______④_______) printf ("等腰三角形
");
else printf (一般三角形
"); }
③a==b&&b==c
④a==b&&a==c||a==b&&b==c
真题练讲
三
【答案】1,2,2
7.(2014年湖南高考真题)阅读程序,写出运行结果:___________
#include <conio.h>
#include <stdio.h>
main()
{
int i=0,j=1,z=2;
if((j++||z++)&&i++);
printf("%d,%d,%d
",i,j,z);
getch();
}
真题练讲
三
【答案】goodluck
8.(2014年湖南高考真题)阅读程序,写出运行结果:___________
#include <conio.h>
#include <stdio.h>
main()
{
int n='b';
switch(++n){
default :printf ("error");break;
case 'a':
case 'A':
case 'b':
case 'B':printf ("pass");break;
case 'c': case 'C':printf ("good");
case 'd': case 'D':printf ("luck");
}
getch();
}
限时练习
四
1.(2020年湖南高考真题)阅读程序,写出运行结果:___________
【答案】sum>6
#include <conio.h>
#include <stdio.h>
main()
{
unsigned int a=6;
int b=-20;
(a+b>6)? puts("sum>6"): puts("sum<=6");
getch();
}
限时练习
四
2.(2019年湖南省高考真题)单项选择题。已知“int w=1,x=2,y=3,z=4;”,则表达式“w>x?w:z>y? z:x”的值是( )
A.1
B.2
C.3
D.4
【答案】D
限时练习
四
【答案】①float d=1.0; ②s/100 ③default: ④s*=d;
3.(2023年湖南高考真题)程序填空题。一件衣服 80元,消费满300元,打九折;消费满500元,打八折。试编程实现以下功能:输入购买衣服件数,输出购买件数和需付金额(元)。
# include"stdio.h"
int main( )
{int s,n;
______①______
printf("n=");
scanf("%d",&n);
s=n*80;
switch(_____②_____)
{case 0: case 1: case 2: break;
case 3: case 4: d=0.9; break;
_____③_______ d=0.8;
}
______④_______
printf("n=%d,s=%d
",n,s);
return 0;
}
限时练习
四
4.(2022年湖南高考真题)阅读程序,写出运行结果:___________
【答案】sum<=10
#include <conio.h>
#include <stdio.h>
int main( )
{
signed char c=128;
int i=10;
(c+i>10)? puts("sum> 10"):puts("sum<=10");
getch();
}
限时练习
四
5.(2021年湖南高考真题)阅读程序,写出运行结果:___________
【答案】result=12
#include <conio.h>
#include <stdio.h>
main()
{int a =5,b=6,result =0;
result =(a>b)?(a>>1):(b<<1);
printf("result=%d
", result);
getch();
}
限时练习
四
6.(2024年湖南高考真题)程序填空题。如需对个人一次性劳务报酬征收所得税,假设:收入未超过800元,不纳税;收人超过800元、未超过5000元,减除800元后再按“应纳税额=(收入-800)x20%”纳税;收入超过5 000元,按“应纳税额=收入x(1-20%)x30%”纳税。编程实现以下功能:从键盘输入个人一次性取得的劳务报酬,根据上述计算方法,计算并输出应纳税额。
【答案】①float income,tax; ②scanf("%f", &income);
③income <=800 ④tax(income-800)*0.2;
# include<stdio.h>
int main( )
{
_____①_____
printf("Input Income=:");
_____②_____
if(_____③_____)
tax=0;
else if(income<=5000)
______④_______
else
tax=income *0.8*0.3;
print("tax=%.0f
",tax);
return 0;
}
限时练习
四
7.(2025年湖南高考真题)程序填空题。居民月用电量(度)采用阶梯计费方式。用电量C: 当0<C<=200时为第一阶梯,每度电0.58元;200<C<=500时为第二阶梯,每度电0.73元; 超过500的部分为第三阶梯,每度电0.92元。试编程实现以下功能: 输入月用电量C(整数),计算并输出需支付的电费(元)。
【答案】①float m1=200*0.58; ②scanf(“%d”,&c);
③m=c*0.58 ④default:
#include <stdio.h>
int main( ) {
int c;
float m;
______①______
float m2=300*0.73;
printf("C=");
______②______
if(c<0){
printf("error ! ");
return 1;}
else{
switch((c+99)/100){
case 0:
case l:
case 2:
______③______
break;
case 3:
case 4:
case 5:
m=m1+(c-200)*0.73;
break;
______④_______
m=m1+m2+(c-500)*0.92;
}
}
printf("m=%.2f",m);
return 0; }
限时练习
四
8.(2017年湖南高考真题)单项选择题。分析以下程序,下列说法正确的是( )
A.输出:****
B.输出: @@@@
C.不能通过编译,有语法错误
D.能通过编译,但不能连接
【答案】A
#include <stdio.h>
void main()
{
int x=3,a=3,b=3;
if(x=a+b)
printf("****");
else
printf("@@@@");
}
限时练习
四
9.(2017年湖南高考真题)程序填空题。从键盘上输入一个百分制成绩score,按下列原则输出其评分等级:score≥90,等级为A;
80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D; score<60,等级为E。请补全下列代码:
【答案】①char grede; ②&data ③default:grade=‘E’; ④grade
#include <stdio.h>
void main( )
{
int data;
_____①______//定义 grade字符变量
printf("请输入成绩:");
scanf("%d",_____②______);
switch(data/10)
{
case 10:
case 9:grade='A';break;
case 8:grade='B';break;
case 7:grade='C';break;
case 6:grade='D';break;
______③_______
}
printf("评分等级为:%c",_____④_____); }
限时练习
四
10.(2018年湖南一轮联考题)阅读程序,写出运行结果:___________
【答案】 3 4 5
#include <conio.h>
#include <stdio.h>
int main()
{
int i=2,j=3,k=4;
if(i++==2&&(++j==3||k++==3))
k++;
printf("%d %d %d
",i,j,k);
getch(); }
内容小结
五
内容小结
五
一、条件语句
• if语句:最基本的条件判断语句,格式为if(条件表达式),当条件表达式为真时,执行其后的语句。
• if...else语句:在if语句基础上,当if的条件不满足时,执行else后的语句,实现二选一的分支逻辑。
• if...else if...else语句:可实现多分支的条件判断,依次判断多个条件,满足某个条件就执行对应的语句,都不满足则执行else后的语句。
• if语句的嵌套:在if或else的语句块中,再包含if语句,用于处理更复杂的多层条件判断场景。
• 条件表达式:作为if等条件语句的判断依据,结果为真(非0)或假(0)。
二、多分支语句(switch语句)
用于处理多分支选择情况,格式为switch(表达式),根据表达式的值,匹配case后的值,执行对应的语句,若没有匹配的case,可执行default后的语句,常与break配合使用,避免分支穿透。
三、分支结构程序设计实例
通过实际的程序案例,如根据成绩判断等级(90及以上为优秀,80 - 89为良好等)、根据用户输入的选项执行不同操作等,来展示分支结构在解决实际问题中的应用。
把每一件简单的事做好就是不简单;把每一件平凡的事做好就是不平凡。
$