专题五 选择结构

5.1 C语言的版式和语句

5.1.1C语言的版式

1.举一个简单的例子进行分析:

要求:写一段求两整数之积的程序。
下面展示一些 内联代码片

#include<stdio.h>//预处理
int multiply(int x,int y);//函数声明(关于函数的部分,在后面的章节会细讲,在此就不赘述)
void main()//函数定义
{
int x,y;
int mul;//变量说明
scanf("%d%d",&x,&y);//数据的输入
mul=multiply(x,y);//执行部分
printf("mul=%d",mul);//信息输出
}
int multiply(int x,int y)
{
int z;
z=x*y;
return z;
}

2.编写的C语言程序一般应包含如下几个部分。

(1)注释部分:格式为注环内容声成者/生平内容”。在面数的最上期,一般福应有一段注杯信息,主要说明函数的功能,输入、输山及其限制。

(2)预处理模块、全局变量说明等(这个在后面的节中会单细介细)

(3)函数定义部分:包括函数返回值的类型,函数名及参数求。于只有一个主面数故取名main():由于无近回值故类型为void. 在无参数输入时,main()内参数表为空。

(4)变量说明部分:对所用的变正进行说明。

(5)数据输入部分:对变量赋初值,可直接或问接输入,有些是在第(4)部分完成

(对变量直接初始化。例如: int i=-0; )

(6)执行部分:一般是对程序算法用程序化的设计方法进行描述,

(7)信息输出部分:根据所main要的数据进行结果输出。

5.1.2 C语言基本语句

  1. 空语句:只有1个分号的语句,写成: ;,1条语句的最后一股用分号结束,分号是1条语句结束的标志。

2.表达式语句:任意一个表达式后加1个分号构成的1条语句。如: m=0是1个赋值表达式,赋给变量m,且整个表达式有值(为0).而m=0:是1个赋值语句,表示执行l个赋值过程,

3.函数调用语句:由1个函数调用语句加1个分号构成。

如: printf(“this is bn example.\n”);

4.控制语句
条件控制语句 循环控侧语句 辅助控制语句
if语句 while语句 break 语句
switch 语句 do-while语句 continue语句
for语句 goto 语句
returm语句

内联语句,条件控制语句和循环控制语句中均可再含有语句,一段把包含在条件控制语句和循环控制语句中的语句称为内嵌语句。

s.复合语句:若将顺序执行的语句序列用大括号括起来,就构成C语言的复合语句,在逻辑上视复合语句为1个单一语句块,它也能用作其它结构的成分语句。程序中通常用复合语句描述顾序结构。

5.2 if语句

5.2.1 if语句标准形式

1.单分支的if语句
(1)格式:
if(表达式)
内嵌语句
(2)说明:
a) 若内嵌语句中没有强制性的语句 (如: goto、 continue、 break 等),则执行内嵌语句后可外的下一条语句,
b)在C 语言中,if语句中的条件是用表达式来反应的,并且只关心表达式的值是0还是非0.非0就认为是条件满足,执行内嵌语句。
c)注意以下几种情况的区别
✧若有if(a>b);a++;b++;, 其内嵌语句是空语句
:,a++;b++;是if的后续语句。语句if(a>b);不论是否为真,都会执行a++;和b++;语句。
✧若有if(a>b){a++;b++;} ,则a++;b++;是其内嵌语句。当a>b时,语句都会执行。
✧若有if(a>b)a++;b++ ;则a++;是其内嵌语句,而b++;是if的后续语句。
2.双分支的if语句

(1)其一般形式为:
if(表达式)
{
语句1;
}
else
{
语句2;
}
(2)if后面圆括号中的表达式一般是关系表达式,它表示分支的条件,这些会在后面的学习中遇到,这里举一个常见的例子。

if(a>=0)
{
printf("hey,boy");
}
else
{
printf("hey,guy");
}

Backspad

偶尔题目中也会出现些赋值语句。 如:if(a=5)这个很容易让做题者认为是对是否等于5进行判新,然而实际上,这个是一个赋值请句.无论如何,if中的条件都成立。都可以执行后面的内嵌语句。如

void main()
{
inta=O;
if(a=5)
printf("%d",a);
else printf("%d",a*a);
}
输出结果为: 5

3.嵌套的if语句一般形式如下:

if (表达式1)

语句1:

else if (表达式2)
语句2:
...
else

语句n;

例如 if(number>500) cost=0.15;
else if(number>300) cost=0.10;
else if(number>100) cost=0.075;
else if(number>50) cost=0.05;

说明:(1) 在if嵌套结构中,每个else总要与它前面的if对应,不能出现没有对应if的else,else总是与它前面最接近的且没有匹配的if(表达式)相配对。

(2)若不希望与最近的if语句配对,可用大括号把该if语句括起来。

5.2.2 if语句典型例题

if 条件语句可以用来表示符号函数
y=
1 x>0
0 x=0
-1 x<0
程序可以写成:

#include  
void main()
{
int x,y;
scanf("%d",&x);//注意输入函数的格式
if(x>0) y=1;//判断x,来决定y的值是取1、0还是-1
else if(x==0)
y=0;
else if(x<0)
y=-1;
}

5.3switch 语句

5.3.1 switch 语句标准形式

1.if语句只有两个分支可供选择。 虽然可以用嵌套的if语句来实现多分支选择,但是当在处理分支较多企鹅复杂的情况时, switch语句的优越性就能体现出来。适当地使用swich语句可能会让程序大大优化,使结构更加清晰。
其一般形式为:

swich (表达式)
{
case常量表达式1;

语句1:

case常量表达式2;

语句2:

case常量表达式B;

语句n:

default:

语句n+l;
}

2 switch后面的表达式可以是数值型也可以是字符型表达式case后面的常量表达式只能是整型常量、字符常量或符号常量组成的表达式。

说明:

a) case 后面的常量表达式中不能有变量或函数;

b) case 执行语句末尼若没有"break:”,则执行完该部分后继续执行之后的case的执行语句:c)若switch中表达式的值不是整数则自动取整;

d)每个常量表达式的值必须互不相同;

e) case 和default后的语句可以是单条谓句,也可以是复合语句(仅在这里的复合语句可以不用大括号括起来);

n常量表达式后的语句可缺省,使多个case共用一组执行语句:

g)某个常量表达式一且匹配将执行其后的所有语句,不再判别是否与其它常量表达式相匹配;
h)若缺省defaualt项,当所有常量表达式都不匹配时,则不执行任一条语句, 直接执行该结构的下一条语句;

1)若结构含有defult项,该项可以置于case之间(即default项可以不是结构的最后项).同f一样,default 后case中的语句都将被执行;

J)switch语句的判断选择是没有优先级的,if 条件语句判断是有优先级的。

5.3.2 switch 语句典型例题

1.用switch语句可以用来表示函数y=
x+1 0<=x<2
x+2 2<=x<4
x+3 4<=x<6
x+4 6<=x<8

#include<stdio.h>
void main()
{
float x,y ;
scanf"%f" ,&x);
switch((int)x)//由于前面定义了float型的变量x,所以这里需要强制转换为int型,但是x的值并不会发生变化
{
case O:
case 1:
y=x+1;//如果两条case语句后面执行的指的指令相同,可以采用如上形式,将两条语句合并。
break;
case 3:
y=x+2;
break;
case 4:
case 5
y=x+3;
break;
case 6:
case 7:
y=x+4;
break;
default:break;//这里的defult后而执行的是空语句,可视为不进行任何操作。
}
}

2.给某班的学生的一次考试成绩分等级,其中,i表示学生成绩,grade表示等级: 90分以上为A,到90分之间为B, 60到70之间为C,60分以下的得D.

#include<stdio.h>
void main()
{
int i;
char grade;
scanf("%d",&i);
if(i>=90)
grade='A;
else if(i>=70)
grade='B';
else if(i>=60)
grade='C';
else 
grade='D';
printf("%c",grade);
}

可以看出,用else语句编写的程序用了很多if语句的嵌套,错综复杂,下面来看下用switch编写的程序。

#include<stdio.h>
void main()
{
int i;
char grade;
scanf("%d",&i);
switch(i/10)  //由于i本就是int型.所以这里不用强制转换
{
case 9;
grade='A';
break;
case 8:
case 7:
grade='B';
break;
case6:
grade='C;
break;
default:
grade='D';
printf("%c",grade);
}

由上面的代码可以看出,虽然比用if-else 语句编写程序要长一些, 但是条理更加清晰,

3.用switch编写一个简单的四则运算程序

#include<stdio.h>
int main()
{
{double a,b.c;
char op;
scanf("%lf%c%lf",&a,&op,&b);
switch(op)
{case '+': c=a+b; break;
case'-':c=a-b; break;
casc '*':c=a*b; break;
case'/': if(b) c=a/b;  //C语言中的"/"和数学运算中的“chu”一样,被除数不能为0
else {printf("除数不能为0!n"); return 0;}

default: (print("未知的运算符!\n"); return 0;}
}
printf("%g%c%g\n",a,op,b,c);
return 0;
}

5.4 对break 的简单讨论

  1. break语句通常用在循环语句和switch 语句中。当break语句用于开关语句switch 中时,可使程序路switch而执行switch以后的语句;如果没有break语句,则会从当前的case语句组一直向下运行,直到把每条都运行结束,往往这并不是我们所需要的结果。

2.当break语句用于do-while、for、while循环语句中时,可使程序终止该层循环而执行外层循环或循环面的语句,通常break语句总是与 if语句联在一起。印满足条件时便跳出循环。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值