C程序设计4选择结构程序设计知识点总结
本文为大一新生为期末考试复习所整理,不喜勿喷
教材C程序设计(第五版)谭浩强第四章
4.1选择结构和条件判断
C语言的两种选择语句:
if语句:用来实现两个分支的选择结构
switch语句:用来实现多分支的选择语句
【例4.1】
在例3.5的基础上对程序进行改进。题目要求解得方程的根。由键盘输入a,b,c。假设a,b,c的值任意,并不保证b*b-4ac>=0.需要在程序中进行判别,如果b*b-4ac>=0,就计算并输出方程的两个实根,如果b*b-4ac<0,就输出此方程无根的信息。
【例3.5】求ax*x+bx+c=0方程的根。a,b,c由键盘输入,设b*b-4ac>0.
编写程序:
![](https://img-blog.csdnimg.cn/img_convert/571ed1b5cf08004eb20f1b6e90655e22.png)
![](https://img-blog.csdnimg.cn/img_convert/3084e4f6cd3e9a448bba2120f67f97aa.png)
【说明】
在用scanf函数输入双精度实型数据时,不能用%f格式声明,而应该用%lf格式声明。l表示长浮点型,即双精度
4.2用if语句实现选择结构
4.2.1用if语句处理选择结构举例
【例4.2】
输入两个实数,按由小到大的顺序输出这两个数
编写程序:
![](https://img-blog.csdnimg.cn/img_convert/659317118c822f35a707d9af0317c793.png)
(类比:将两个杯子中的水互换)
【例4.3】
输入三个数a,b,c,要求按由小到大的顺序输出。
解题思路:
如果a>b,将a,b互换;如果a>c,将a,c互换;如果b>c,将b,c互换
编写程序:
![](https://img-blog.csdnimg.cn/img_convert/9c3dda58626461e890c3d8ae92eae9ea.png)
4.2.2if语句的一般形式
一般形式
if(表达式)语句1
【else 语句2】
最常用的有以下三种形式
(单分支控制)
if(表达式)语句1(无else子句部分)
【例1】
编写一个程序,可以输入年龄,如果大于十八,输出“年龄大于十八,要对自己的行为负责”,
![](https://img-blog.csdnimg.cn/img_convert/196612363c46a8ac9be2bb8a44599487.png)
(双分支控制)
if(表达式)(有else子句部分)
语句1
else
语句2
【例2】
编写一个程序,可以输入年龄,如果大于十八,输出“年龄大于十八,要对自己的行为负责”,否则输出“你还小”
![](https://img-blog.csdnimg.cn/img_convert/c09d9560f42681f2e576a0f50bb911cf.png)
【例3】
编写程序,声明两个double类型的变量并赋值,判断第一个数大于10.0,且第二个数小于20.0,打印两个数之和。
![](https://img-blog.csdnimg.cn/img_convert/0bb6bbf625d3c478c50a7a639d5e4629.png)
【例4】
判断一个年份是否为闰年。
闰年的条件是符合下面两者之一
能被4整除,不能被100整除
能被400整除
![](https://img-blog.csdnimg.cn/img_convert/d1d13ace2aef4f262c59358c1a49ce20.png)
![](https://img-blog.csdnimg.cn/img_convert/52244b1c813fae8214f20d25e4b65122.png)
(多分支)
if(表达式1)语句1(在else部分又嵌套了多层的if语句)
else if(表达式2)语句2
else if(表达式3)语句3
……
else if(表达式m)语句m
else 语句m+1
【注意】当条件表达式1成立时,执行语句1,若表达式1不成立,才去判断表达式2是否成立,若表达式2成立,则执行表达式2,若所有都不成立,则执行else【只能有一个执行入口】
【例5】
岳小鹏参加二级C考试,若成绩100分,奖励一辆车,成绩(80,99]时奖励苹果手机,成绩【60,80】时奖励零食,其他无奖励。
请从键盘输入岳小鹏的成绩加以判断输出提示。
![](https://img-blog.csdnimg.cn/img_convert/d2814bd7c6c485a50a8208164e192c0c.png)
【例6】
求方程的根。a,b,c分别为函数的参数,如果b*b-4ac>0,则有两个解,如果b*b-4ac=0,则有一个解,如果b*b-4ac<0,则无解。
![](https://img-blog.csdnimg.cn/img_convert/d045033c30c823878c71fd2c520079c1.png)
![](https://img-blog.csdnimg.cn/img_convert/49293c48d8d3e2df0127dae4c9e3a46d.png)
【例7】
男大当婚,女大当嫁。女方家长嫁女儿要提出条件:高:180cm以上;富:财富一千万以上;帅:是。条件从控制台输入。
若三个条件同时满足,则一定嫁;均不满足,则不嫁;三个条件有为真的情况,则嫁。
![](https://img-blog.csdnimg.cn/img_convert/50527ceacb2c2798256b77d1f18af4c0.png)
4.3关系运算符和关系表达式
在C语言中,比较符称为关系运算符
4.3.1关系运算符及其优先顺序
6种关系运算符
<
<=
>
>=
==
!=(不等于)
【关于优先次序】
算术运算符>关系运算符>赋值运算符
4.3.2关系表达式
用关系运算符将两个数值或数值表达式连接起来的式子
4.4逻辑运算符和逻辑表达式
4.4.1逻辑运算符及其优先顺序
&&逻辑与
||逻辑或
!逻辑非
【优先次序】
!>&&>||
逻辑非高于算数运算符
【注意】:只有是0的时候才为假。
4.4.2逻辑表达式
4.5条件运算符和条件表达式
条件运算符由两个符号(?和:)组成,必须一起使用。要求有三个操作对象,称为三目运算符。
是C语言中唯一的三目运算符
条件表达式的一般形式为
表达式1?表达式2:表达式3
例如
求两个数中较大值
编写程序:
#include<stdio.h>
int main( )
{
int a=10;
intb=20;
int max=a>b?a:b;
printf("\n max=%d",max);
}
【例4.4】
输入一个字符判断它是否为大写字母,如果是,将它转化成小写字母;如果不是,不转换。然后输出最后得到的字符。
编写程序:
![](https://img-blog.csdnimg.cn/img_convert/a19ab918e1d2b0d0b1cf1aa810a55b4e.png)
![](https://img-blog.csdnimg.cn/img_convert/6eb54633d1d2bde0554f44940dc55524.png)
4.6选择结构的嵌套
【例8】
参加百米运动会,如果用时8秒以内会进入决赛,否则将会被淘汰,并根据性别提示进入男子组和女子组,输入成绩和性别进行判断。
![](https://img-blog.csdnimg.cn/img_convert/36035b976979b0bdacfba79e036e2dc4.png)
【例4.5】
![](https://img-blog.csdnimg.cn/img_convert/2948a32933296de36cd0c3e8e87bccd5.jpeg)
编写程序:
独立if处理
![](https://img-blog.csdnimg.cn/img_convert/5805da043179ec15b42ae78d9865e5ce.png)
嵌套if处理
![](https://img-blog.csdnimg.cn/img_convert/0d7fa3677d7a51417d246aeae1ac29e5.png)
4.7用switch语句 实现多分支选择结构
switch语句是多分支选择语句
基本语法:
![](https://img-blog.csdnimg.cn/img_convert/04598336c777304fe2b743550939a1c8.png)
【注意事项】
(表达式)值的类型应为整数类型(包括字符型)
执行switch语句时,先计算switch后面的表达式的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句,如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句
default子句是可选的,当没有匹配的case时执行default
break语句用来执行完一个case分支后使程序跳出switch语句块
如果没有写break会执行下一个case语句块,直到遇到break或者执行到switch结尾,这个现象称为穿透
各个case标号出现次序不影响执行结果,例如可以先出现default标号,再出现case‘D’ case'B'
每一个case常量必须互不相同,否则就会出现互相矛盾的现象
【例4.6】
按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。成绩的等级由键盘输入。
编写程序:
![](https://img-blog.csdnimg.cn/img_convert/a19b5781f752a215ad48b7f98fcfc0d4.png)
4.8选择结构程序综合举例
见课本102页。
题目太繁琐。
【习题4.3】
![](https://img-blog.csdnimg.cn/img_convert/d4c06dc756596026bc3743896b882ac2.jpeg)
【注意】:只有是0的时候才为假。
0
1
1
没有xy的定义,无法计算
1
【习题4.6】
![](https://img-blog.csdnimg.cn/img_convert/272f8a78810204d4423dfba45370c2ee.jpeg)
编写程序:
![](https://img-blog.csdnimg.cn/img_convert/2c82224f98b955a2bdc8ae82dd969379.png)
【习题4.8】
给出一百分制成绩,要求输出成绩等级ABCDE,90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。
编写程序:
![](https://img-blog.csdnimg.cn/img_convert/e892d903f0d2e6ce1ec9cdb55f698a7e.png)
【习题4.9】
给一个不多于三位的正整数,要求:
求出他是几位数
分别输出每一个数字
按逆序输出各位数字,例如原数为321,应输出123
编写程序:
#include<stdio.h>
int main( )
{
int x,l1,l2,l3;
printf("请输入一个不多于三位的正整数");
scanf("%d",&x);
if(x<10)
{
printf("%d是一个1位数\n",x);
printf("个位数是%d\n",x);
}
else if(x<100&&x>=10)
{
printf("%d是一个两位数\n",x);
l1=x%10;
l2=(x-l1)/10;
printf("个位是%d,十位是%d\n",l1,l2);
printf("逆序输出:%d\n",l1*10+l2);
}
else if(x<1000&&x>=100)
{
printf("%d是一个三位数\n",x);
l1=(x%100)%10;
l2=((x-(x%100)%10)%100)/10;
l3=(x-(x%100))/100;
printf("个位是%d,十位是%d,百位是%d\n",l1,l2,l3);
printf("逆序输出:%d\n",l1*100+l2*10+l3);
}
else
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/09897dc654db44c9568e107c37980074.png)
萍萍子ing: 谢谢
CSDN-Ada助手: 推荐 C 技能树:https://edu.csdn.net/skill/c?utm_source=AI_act_c