《C语言程序设计 谭浩强 第4版》:选择结果程序设计

一、条件判断

1、关系运算符和关系表达式 

x > 0
age >= 70
a + b > c
b * b - 4 * a * c > 0
'a' > 'v'

上面这些表达式称为 关系表达式 ,用来进行比较大小的符号称为 关系运算符 

1)关系运算符及其优先次序 

C 语言提供 6 种关系运算符: 

说明:

  • 关系运算符的优先级低于算术运算符
  • 关系运算符的优先级高于赋值运算符 

 

2)关系表达式 

用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称为 关系表达式 

C 语言没有提供逻辑型数据(C ++ 有逻辑型变量和逻辑性常量,以 True 表示“真”,以 False 表示 “假”) 

为了表示逻辑量,C 语言规定:对关系运算的结果,用数值 “1” 代表 “真”,以“0” 代表 “假” 

C 99 增加了逻辑型数据,用关键字 bool 定义逻辑型变量 

由于用了 1 和 0 代表真和假,而 1 和 0 又是数值,所以在 C 程序中还允许把关系运算的结果看作和其他数值型数据一样,可以参加数值运算,或把它赋值给数值型变量 

 

2、逻辑运算符和逻辑表达式 

1)逻辑运算符及其优先次序 

C 语言提供 3 种逻辑运算符: 

  • && (逻辑与)
  • || (逻辑或)
  • ! (逻辑非) 

&& 和 || 是 双目运算符 ,要求在运算符的两侧各有一个运算对象 

!是 一目运算符 ,只要求在右侧有一个运算对象 

 

优先次序:

  • ! > && > ||
  • && 、 || 低于关系运算符,! 高于算术运算符 

 

2)逻辑表达式 

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

C 语言编译系统在表示逻辑运算结果时,以数值 1 代表 “真”,以 0 代表 “假”,但在判断一个量是否为 “真” 时,以 0 代表 “假”,以非 0 代表 “真” 

实际上,逻辑运算符两侧的运算对象不但可以 0 和 1,或者 0 和 非 0 的整数,也可以是字符型(ASCII 码)、实型或指针型等。系统最终以 0 和 非0 来判定真假 

 

二、用 if 语句实现选择结构 

1、用 if 语句实现选择结构举例 

输入两个学生 a 和 b 的成绩,输出其中高的成绩 

#include <stdio.h>
int main(){
    float a,b,max;
    printf("Please enter a and b:");
    scanf("%f,%f",&a,&b);
    if(a > b) max = a;
    if(a < b) max = b;
    printf("max = %6.2f\n",max);
    return 0;
}

运行结果:
Please enter a and b:99,99.5
max = 99.50 

 

输入 3 个成绩 a,b,c,要求从高到低输出 

#include <stdio.h>
int main(){
    float a,b,c,t;
    printf("Please enter a,b,c:");
    scanf("%f,%f,%f",&a,&b,&c);
    if(a<b){
        t = a;
        a = b;
        b = t;
    }
    if(a < c){
        t = a;
        a = c;
        c = t;
    }
    if(b < c){
        t = b;
        b = c;
        c = t;
    }
    printf("%6.2f,%6.2f,%6.2f\n",a,b,c);
    return 0;
}

运行结果:
Please enter a and b:73.5,82.5,99
99.00,82.50,73.50 

 

2、if 语句的一般形式 

// 形式一
if(表达式)
    C 语句;

// 形式二
if(表达式)
    C 语句 1;
else
    C 语句 2;

3、if 语句使用的说明 

  • if 语句中在关键字后面都有一个表达式,一般为逻辑表达式或关系表达式
    • 表达式的类型不限于逻辑表达式,可以是任意的数值类型
  • if 语句中有内嵌语句,每个内嵌语句必须以分号结束
  • else 语句不能作为语句单独使用 ,它必须是 if 语句的一部分
  • 在 if 和 else 的后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用 {} 将几个语句括起来成为一个复合语句 
#include <stdio.h>
#include <math.h>
int main(){
    double a,b,c,s,area;
    printf("please enter a,b,c:");
    scanf("%lf,%lf,%lf",&a,&b,&c);
    if( a + b > c && b + c > a && c + a > b){
        s = 0.5 * (a + b + c);
        area = sqrt(s * (s - a) * (s - b) * (s - c));
        printf("area = %6.2f\n",area);
    } else
        printf("It is not a trilateral.\n");
    return 0;
}

运行结果:
please enter a,b,c:2,3,4
area = 2.90

please enter a,b,c:2,3,6
It is not a trilateral. 

 

4、使用嵌套的 if 语句实现多层条件判断 

有的选择结构中又包含一个或多个选择结构,这称为 选择结构的嵌套 

注意:
else 总是与它上面的最近的为匹配的 if 配对
如果 if 和 else 数目不一样,为实现程序设计者的企图,可以加大括号来确定配对关系 

 

三、利用 switch 语句实现多分支选择结构 

  • switch 后面括号内的“表达式”,可以是数值型或字符型类型数据
  • 当表达式的值与某一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语句,若所有的case 中的常量表达式的值都没有与表达式的值匹配的,就执行 default 后面的语句
  • 每一个 case 的常量表达式的值必须互不相同;否则就会出现互相矛盾的现象
  • 各个 case 和 default 的出现次序不影响执行结果
  • 执行完一个 case 后面的语句后,流程控制转移到下一个case继续执行。“case 常量表达式”只是起语句标号作用,并不是在该处进行条件判断
  • 可使用 break 语句结束当前分支
  • 多个 case 可以共用一组执行语句 

 

四、程序综合举例 

1、判断某一年是否闰年

#include <stdio.h>
int main(){
    int year,leap;
    printf("please enter a year:");
    scanf("%d",&year);
    if(year % 4 == 0){
        if(year % 100 == 0){
            if(year % 400 == 0){
                leap = 1;
            } else {
                leap = 0;
            }
        } else {
            leap = 1;
        }
    } else {
        leap = 0;
    }

    if(leap){
        printf("%d is ",year);
    } else {
        printf("%d is not ",year);
    }

    printf("a leap year.\n");
    return 0;
}

 

2、计算运费 

  

#include <stdio.h>
int main(){
    int c,s;
    double p,w,d,f;
    printf("请输入单价、重量和距离:");
    scanf("%lf,%lf,%d",&p,&w,%s);
    if(s >= 3000){
        c =12;
    }else {
        c = s / 250;
    }
    
    switch(c){
        case 0:
            d = 0;
            break;
        case 1:
            d = 2;
            break;
        case 2:
        case 3:
            d = 5;
            break;
        case 4:
        case 5:
        case 6:
        case 7:
            d = 8;
            break;
        case 8:
        case 9:
        case 10:
        case 11:
            d = 10;
            break;    
        case 12:
            d = 15:
            break;
    }
    f = p * w * s * (1 - d / 100.0);
    printf("运费:%10.2f元\n",f);
    return 0;
}

补充: 

条件表达式1 ? 条件表达式2 : 条件表达式3 : C 语言中唯一的三元(目)运算符 

条件表达式是一种特殊的选择结构 

 

一  叶  知  秋,奥  妙  玄  心

C++程序设计,谭浩强编著,清华大学出社。 课件制作:南京理工大学 陈清华 朱红 C语言的主要特点是: 1、C语言是一种结构化的程序设计语言,语言本身简洁、使用灵活方便。既适用于设计和编写大的系统程序,又适用于编写小的控制程序,也适用科学计算。 2、它既有高级语言的特点,又具有汇编语言的特点。运算符丰富,除了提供对数据的算术逻辑运算外,还提供了二进制的位运算。并且也提供了灵活的数据结构。用C语言编写的程序表述灵活方便,功能强大。用C语言开发的程序,其结构性好,目标程序质量高,程序执行效率高。 3、程序的可移植性好。用C语言在某一种型号的计算机上开发的程序,基本上可以不作修改,而直接移植到其它型号和不同档次的计算机上运行。 4、程序的语法结构不够严密,程序设计的自由度大。这对于比较精通C语言程序设计者来说,可以设计出高质量的非常通用的程序。但对于初学者来说,要能比较熟练运用C语言来编写程序,并不是一件容易的事情。与其它高级语言相比而言,调试程序比较困难。往往是编好程序输入计算机后,编译时容易通过,而在执行时还会出错。但只要对C语言的语法规则真正领会,编写程序及调试程序还是比较容易掌握的。 为了克服C语言本身存在的缺点,并保持C语言简洁、高效,与汇编语言接近的特点,1980年,贝尔实验室的Bjarne Stroustrup博士及其同事对C语言进行了改进和扩充,并把Simula 67中类的概念引入到C中。并在1983年由Rick Maseitti提议正式命名为C++(C Plus Plus)。后来,又把运算符的重载、引用、虚函数等功能加入到C++中,使C++的功能日趋完善。 当前用得较为广泛的C++有:VC++ (Visual C Plus Plus)、 BC++(Borland C Plus Plus)、AT&T C++等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qx_java_1024

祝老板生意兴隆,财源广进!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值