选择结构.docx
- 文档编号:6436706
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:11
- 大小:18.36KB
选择结构.docx
《选择结构.docx》由会员分享,可在线阅读,更多相关《选择结构.docx(11页珍藏版)》请在冰豆网上搜索。
选择结构
针对字符型数据的专有输入输出函数:
1、输入函数
【格式】getchar()
【使用时必须和赋值号共同构成赋值语句,从而完成:
从键盘上读入一个字符到相应的变量中。
】
例如:
charx;
x=getchar();
/*此句与scanf(“%c”,&x);等价*/
【说明】此函数一次只能给一个字符型变量从键盘上获得值。
2、输出函数
【格式】putchar(一个字符型数据);
【说明】此函数一次只能输出一个字符型数据。
【注意:
凡是使用系统函数(库函数)时,一般必须加上相应的头文件,格式是:
在main()的前面加上
<格式一>#include<头文件名.h>
<格式二>#include"头文件名.h"
】
以上2个函数对应的头文件是stdio.h
在TC环境中,使用scanf和printf函数可以不加头文件。
求xy函数
pow(x,y)
【功能:
计算xy】
头文件:
math.h
当书写出系统函数后,却忘了它对应的头文件时,可将光标移动到该函数名下方,然后按Ctrl+F1,即可显示出头文件名。
选择结构
一、单分支选择语句
1.格式
if(表达式)语句
2.功能
当表达式的值为非0时,执行“语句”。
否则执行if之后的下一句。
而表达式非0即表示“条件成立”。
3.说明
(1)表达式可以是任意类型的表达式,但通常是关系或逻辑表达式。
也可以是数值型的常量或变量(它们是最简单的表达式)。
(2)“语句”可以是以分号结束的单个语句,也可以是一个复合语句。
不可以是多个语句。
(3)当在()后加一个分号,即为一个合法的空语句,其后想受if管辖的语句就不受管辖了。
4.举例
例1、任意读入两个整数,然后输出其中的较大者。
main()
{inta,b;
scanf(“%d%d”,&a,&b);
if(a>b)printf(“%d\n”,a);
if(b>=a)printf(“%d\n”,b);
}
例2、任意读入一个字符型数据,然后判断其是否为数字字符,若是则输出该字符及其ASCII码值。
main()
{charx;
scanf(“%c”,&x);
if(x>=’0’&&x<=’9’)/*字符型数可用ASCII码值比较大小*/
{printf(“%c\n”,x);
printf(“%d\n”,x);}
}
但此题有个遗憾,当读入的不是数字字符时,没有输出。
最好在最后加一句:
if(…)printf(“Isnot0~9\n”);
用系统函数(库函数):
isdigit(字符型数据)
含义是判断“字符型数据”是否为数字字符。
(是,则函数返回值为1;否则为0),使用时一定要加头文件“ctype.h”。
上题可以改写为:
#include“ctype.h”
main()
{charx;
scanf(“%c”,&x);
if(isdigit(x))/*还可以写成isdigit(x)!
=0*/
printf(“%c,%d\n”,x,x);
if(!
isdigit(x))printf(“Isnot0~9\n”);
}
【结论】两组逻辑等价式:
变量a格式
a取值
逻辑等价式
a
0或非0
a!
=0
!
a
0或非0
a==0
所谓“逻辑等价”就是,当某式子为非0(0)时,其逻辑等价式也为非0(0)。
二、双分支if语句
【格式】
if(表达式)
语句1
else
语句2
【功能】
【说明】
1.“语句1”和“语句2”可以分别是以分号结束的单个语句,也可以分别是一个复合语句。
都不可以是多个语句。
2.else子句不可以独立存在。
3.if…else是一个语句!
【改写上例】
main()
{inta,b;
scanf(“%d%d”,&a,&b);
if(a>b)
printf(“%d\n”,a);
else
printf(“%d\n”,b);
}
【最基本的算法】
再次改写上例:
main()
{inta,b;intt;
scanf(“%d%d”,&a,&b);
if(a
{t=a;a=b;b=t;}
printf(“%d\n”,a);
}
【两数(a、b)交换借助第三数(t):
t=a;a=b;b=t;】
【问题:
任意读入3个整数,然后输出其中的最大者。
】
三、多分支if语句
【格式】
if(表达式1)
语句1
elseif(表达式2)
语句2
……
else
语句n
【功能】
【注意】
(1)else和if之间有空格。
(2)最后一个else子句可以省。
【举例】
例1、洗照片:
快件1.2元/张,普件1元/张,慢件0.8元/张,请帮助收银员编写一个收银程序。
即求顾客应付款。
#include
main()
{intn;
floatcost;
charkm;/*K,M,P*/
printf("InputK-P-M:
\n");
km=getchar();
printf("Inputzhangshu:
\n");
scanf("%d",&n);
if(km=='K'||km=='k')
cost=1.2*n;
elseif(km=='P'||km=='p')
cost=1*n;
elseif(km=='M'||km=='m')
cost=0.8*n;
else
{printf("InputError!
\n");
exit(0);}
printf("cost=%.2f\n",cost);
}
【说明:
exit函数提前结束整个程序的执行,格式有两种“exit(0);”或“exit
(1);”。
】
例2、批发铅笔,批发量x支,
100≤x<300,打7折;
300≤x<500,打5折;
500≤x<1000,打4.5折;
x>=1000,打4折。
其余不
打折。
每支正价1元,求顾客应付款。
【法一】
#include
main()
{intx;
floatcost;
scanf("%d",&x);
if(x>=100&&x<300)
cost=1*x*0.7;
elseif(x>=300&&x<500)
cost=1*x*0.5;
elseif(x>=500&&x<1000)
cost=1*x*0.45;
elseif(x>=1000)
cost=1*x*0.4;
else
cost=1*x;
printf("Cost=%.2f\n",cost);
}
【法二:
让x的值从大到小或从小到大变化】
#include
main()
{intx;
floatcost;
scanf("%d",&x);
if(x>=1000)
cost=1*x*0.4;
elseif(x>=500)
cost=1*x*0.45;
elseif(x>=300)
cost=1*x*0.5;
elseif(x>=100)
cost=1*x*0.7;
else
cost=1*x;
printf("Cost=%.2f\n",cost);
}
【法三:
用单分支if,多个if语句】
main()
{intx;
floatcost;
scanf(“%d”,&x);
if(x>=1000)cost=x*0.4;
if(x>=500&&x<1000)
cost=x*0.45;
if(x>=300&&x<500)
cost=x*0.5;
if(x>=100&&x<300)
cost=x*0.7;
if(x<100)
cost=x;
printf(“%f\n”,cost);
}
四、多分支switch语句
【格式】
switch(表达式)
{case常量1:
语句1;break;
case常量2:
语句2;break;
case常量3:
语句3;break;
……
default:
语句n;
}
【说明】
(1)switch后的表达式通常是整型或字符型表达式;
(2)case后的常量必须是整型或字符型。
(3)“break;”语句只能出现在switch或循环语句中。
作用是跳出(中断)所在语句结构。
(4)“语句1;……语句n;”可以是若干语句,不必构成一个复合语句。
(5)default分支可以省略。
【功能】
【法四】
#include
main()
{intx;
floatcost;
scanf("%d",&x);
switch(x/100)
{case0:
cost=x;break;
case1:
case2:
cost=x*0.7;break;
case3:
case4:
cost=x*0.5;break;
case5:
case6:
case7:
case8:
case9:
cost=x*0.45;break;
default:
cost=x*0.4;
}
printf("cost=%.2f\n",cost);
}
例题:
任意读入一个成绩代码(A~E),然后输出对应的分数段。
(分数>=90,<=100:
A)
(80~89:
B)
(70~79:
C)
(60~69:
D)
(<60:
E)
main()
{intx;floatcost;
scanf("%d",&x);
switch(x/100)
{case0:
cost=x;break;
case1:
case2:
cost=x*0.7;break;
case3:
case4:
cost=x*0.5;break;
case5:
case6:
case7:
case8:
case9:
cost=x*0.45;break;
default:
cost=x*0.4;
}
printf("%f\n",cost);
}
【注意】
(1)两个(或以上)相邻分支的操作一样,则可将对应语句写在最后一个分支上。
(2)各分支位置可以不分先后(不好!
应试的)。
(3)如果前面的分支缺了break语句,则接着做下一个分支的语句,直到遇到break;或switch的}。
五、选择结构的嵌套
【法五】
main()
{intx;floatcost;
scanf("%d",&x);
if(x>=1000)
cost=x*0.4;
else
if(x>=500)
cost=x*0.45;
else
if(x>=300)
cost=x*0.5;
else
if(x>=100)
cost=x*0.7;
else
cost=x;
printf("%f\n",cost);
}
【注意】
(1)外选择语句必须完整地
包含内选择语句,请缩进书写。
(2)else总是和前面最近的
一个没有配对且有资格的if
配对。
例2、任意读入一个字符,
判断其是否为数字字符,若是,
进一步判断其是否为’5’,是
就输出该字符及其ASCII码值;
若不是数字字符,就输出
“Isnotdigit!
”。
#include
main()
{charx;
scanf("%c",&x);
if(x>='0'&&x<='9')
{if(x=='5')
printf("%c,%d\n",x,x);}
else
printf("Isnotdigit!
\n");
if(isdigit(x)&&x!
=’5’)
printf(“%c\n”,x);
}
【说明】用{}取消了内if的
配对资格!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 选择 结构