#C语言基础归纳及例题(4)

本文详细介绍了C语言中的选择结构,包括if语句的四种形式及其使用示例,关系运算符和逻辑运算符,条件运算符以及switch语句的多分支选择结构。通过实例展示了如何用这些结构解决实际问题。
摘要由CSDN通过智能技术生成
                            选择结构程序设计

知识补充
C语言中的语句:表达式语句、复合语句、函数调用语句
控制语句:分支语句、循环语句、跳转语句

1.用if实现选择结构
①if语句的一般形式:
if(表达式)语句1
[else 语句2]
如果语句1为真,则执行语句1;若为假,则执行语句2
单个变量构成的表达式也是正确的
②if语句的其他形式1:没有else子句部分
if(表达式)语句1
③if语句的其他形式2:有else子句的部分
if(表达式)
语句1
else
语句2
④if语句的其他形式3:在else部分嵌套了多层的if语句
if(表达式) 语句1
else if (表达式2) 语句2
else if (表达式3) 语句3
… …
else if (表达式m) 语句m
else 语句m+1

【例如】

if (n>500) cost=0.15;
else if (n>300)  cost=0.10;
else if (n>100) cost=0.075;
else if (n>50) cost=0.05;
else                 cost=0;
就可以写成以下内容
if (n>500)
cost=0.15;
else
if(n>300)
cost=0.1;
else
if(n>100)
cost=0.075;
else
if(n>50)
cost=0.05;
else
cost=0;
【注意】整个if语句可写成多行,也可以写成一行;要注意分号和if语句的整体性

【例题1】
输入两个实数,按由小到大的顺序输出两个数
解题思路:只要做一次比较,然后进行一次交换即可,用if语句实现条件判断。
** 编写程序**:

#include <stdio.h>
int main()
{
    float a,b,t;
    scanf("%f,%f",&a,&b);
    if(a>b)
    {//将a,b的值互换
        t=a;
        a=b;
        b=t;
    }
    printf("%5.2f,%5.2f\n",a,b);
    return 0;
}

运行结果:

3.6,-3.2
-3.20,3.60

【例题2】
输入3个数a,b,c,要求按由小到大的顺序输出
解题思路:
解此题的算法比上一题稍微复杂一些。可以先用伪代码写出算法。
S1:if a>b,将a和b对换
S2:if a>c,将a和c对换
S3:if b>c,将b和c对换
S4:顺序输出a,b,c
编写程序

#include <stdio.h>
int main()
{
float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if (a>b)
{
t=a;  //借助变量t,实现变量a和变量b互换值
a=b;
b=t;
}   //互换后,a小于或等于b
if(a>c)
{
t=a;  //借助变量t,实现变量a和变量c互换值
a=c;
c=t;
}  //互换后,a小于或等于c
if(b>c) //还要
{
t=b;   //借助变量t,实现变量b和变量c互换值
b=c;
c=t;
}     //互换后,b小于或等于c
printf("%5.2f,%5.2f,%5.2f\n",a,b,c);  //顺序输出a,b,c的值
return 0;
}

运行结果

3,7,1
1.00,3.00,7.00

2.关系运算符和关系表达式

  • C语言提供6种关系运算符
    优先级相同(高):
    < (小于)
    <=(小于或等于)
    〉(大于)
    〉=(大于或等于)
    优先级相同(低):
    ==(等于)
    !=(不等于)
    要注意运算符的优先性
    运算符>关系运算符>赋值运算
    【举例】
c>a+b 等效于 c>(a+b)  关系运算符的优先级低于算术运算符
a>b==c 等效于 (a>b)==c 大于运算符>的优先级高于相等运算符==
a==b<c 等效于 a==(b<c)  小于运算符<的优先级高于等于运算符==
a=b>c 等效于  a=(b>c)   关系运算符的优先级高于赋值运算符
  • 关系表达式
    用关系运算符将两个数值或数值表达式连接起来的式子
    在C中,以1表示真,以0表示假

逻辑运算符和逻辑表达式
用逻辑运算符将关系表达式或其他逻辑量连接起来的式子

  • C逻辑运算符及其含义
运算符含义
&&
!
//

“&&”和“//”是双目(元)运算符,要求有两个运算对象
“!”是一目(元)运算符,只要求有一个运算对象
优先次序:!(非)→&&(与)→//(或)
【举例】

a>b&&(x>y) 可写成 a>b&&x>y
(a==b)//(x==y) 可写成 a==b//x==y
(!a)//(a>b) 可写成 !a//a>b
  • 逻辑运算符
    逻辑表达式的值应该是一个逻辑量“真”或“假”
    即逻辑运算及结果不是0就是1,不可能出现其他值
    【注意】
    在逻辑表达式的求解中,并不是所有逻辑运算符都被执行,只有在必须执行时才会继续
    ①a&&b&&c。只有a为真(非0)时,才需要判别b的值
    ②a//b//c。只要a为真(非0),就不必判断b和c。只有a为假,才判别b。a和b都假,才判别c。

条件运算符和条件表达式

if(a>b)
max=a;
else
max=b;
可以写成为 max=(a>b)?a:b
即如果(a>b)条件为真,则条件表达式的值等于a;否则取值b

1.条件运算符::和 ?必须一起使用
要求有3个操作对象,称为三目(元)运算符
2.条件表达式一般形式:表达式1?表达式2:表达式3
条件运算符优先于赋值运算符

用switch语句实现多分支选择结构
1.switch语句是多分支选择结构
2.switch语句的一般形式
switch (表达式)
{
case 常量1:语句1
case 常量2:语句2
… …
case 常量n:语句n
default: 语句n +1
}
【例题】
要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60 ~69分,D等为60分以下。成绩的等级由键盘输入。
解题思路:
这是一个多分支选择问题,根据百分制分数将学生成绩分为4个等级,如果用if语句来处理至少要用3层嵌套的if,进行3次检查。用switch语句,进行一次检查即可得到结果。
编写程序:

#include <stdio.h>
int main()
{
char grade;
scanf("%c",&grade);
printf("Your score:");
switch(grade)
{
case 'A':printf("85~100\n");break;
case 'B':printf("70~84\n");break;
case 'C':printf("60~69\n");break;
case 'D':printf("<60\n");break;
default: printf("enter data error!\n");
}
return 0;
}

运行结果:

A
Your score:85~100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值