chapter 2 分支结构


大学C语言程序设计

chapter 2 分支结构

1. 三大结构的认识

编程语言的三大结构:

  1. 顺序结构:从上至下,从左至右的执行;
  2. 分支结构(选择结构):满足条件就执行:if, switch;
  3. 循环结构:满足条件就一直执行,直到不满足时退出:for, while。

学习分支结构前,我们需要了解一个概念:什么叫条件?

条件:在这里是一个关系表达式,或者是一个布尔类型的变量,其结果表示成立与否,那么它就只有两种结果:成立(true),不成立(false),而在计算机中成立用 '!0' 代替, 不成立用 '0' 代替。

当然布尔类型在C99并不存在,而在C++中是存在的,这里作为对条件这一概念的认识。

bool flag = true;// 1
bool flag = false;// 0

不过C99之前,人们也时常用 int 来表示布尔类型,毕竟它可以赋值为 1 and 0.

int flag=1;
int flag=0;

2. 关系表达式

等于 不等于 大于 小于 大于等于 小于等于
== != > < >= <=

3. 逻辑表达式

符号 名字 使用格式 备注 样例 样例
&& 逻辑与 a&&b 同真为真 1&&1=1 1&&0=0
|| 逻辑或 a||b 同假为假 1||0=1 0||0=0
! 逻辑非 !a 非假即真,非真即假 !0=1 !1=0
& 按位与 a&b 同真为真 1&0=0 1100 & 1001=1000
| 按位或 a|b 同假为假 1|0=1 1100 | 1001=1101
~ 按位取反 ~a 非假即真,非真即假 ~1=0 ~1010=0101

4. if语句

if(flag){} 、 if(flag)else{} 、if(flag){} else if(flag){} else{}、....
if...else...
bool flag = true;
布尔类型,只有两种格式:true, false
也可以记作1和0,0表示false, 非0表示true

bool flag = true;
if(flag){  //如果flag为真,就执行{}中的内容,否则不执行
    //
}

bool flag=0;
if(flag){  //如果flag为真,就执行{}中的内容,否则不执行
    //
}else{   //如果if不执行,就执行else{}中的内容
    //
}

bool flag=0;
if(flag){//如果flag为真,就执行{}中的内容,否则不执行
    //
}else if(flag){//如果前面没有if执行,并且满足现在if的条件,就执行else{}中的内容
    //
}else if(flag){//如果前面没有if执行,并且满足现在if的条件,就执行else{}中的内容
    //
}else{ //如果没有任何一个if执行,就执行else{}中的内容
    //
}

5. if案例练习

【题目描述】输入一个整数,判断其是奇数还是偶数

输入样例:10
输出样例:10是偶数

#include<stdio.h>
int main(){
    int n;  scanf("%d", &n);
    if(n%2==0){    //判断两个数相等用双等于; 奇偶数的判断还可以使用(n&1)
        printf("%d是偶数", n);
    }else{
        printf("%d是奇数", n);
    }
    return 0;
}

【题目描述】输入年份year,输出该年份是否为闰年。
判断闰年的方法:年份能被4整除但不能被100整除或者年份能被400整除的称为闰年。

输入样例:2020
输出样例:2020是闰年

输入样例:2021
输出样例:2021不是闰年

#include<stdio.h>
int main(){
    int year; scanf("%d", &year);
    bool flag = (year%4==0 && year%100!=0)||(year%400==0);
    if(flag){
        printf("%d是闰年", year);
    }else{
        printf("%d不是闰年", year);
    }
    return 0;
}

6. 条件表达式

格式:<表达式1>?<表达式2>:<表达式3>
条件表达式要求有三个操作对象,"?"和":"一起出现在条件表达式中,称三目(元)运算符,它是C++中唯一的一个三目运算符。
条件表达式的运算规则:
(1)计算表达式1的值。
(2)若表达式1的值为真(或非0),则只计算表达式2,并将其结果作为整个表达式的值。
(3)反之,若表达式1 的值为假(或为0),则只计算表达式3,并将其结果作为整个表达式的值。

举例:求a,b的最大值

int maxn = a>b ? a:b;

举例:求a,b的最小值

int maxn = a<b ? a:b;

7. switch

本质上 switch 和 if 是相通的,满足条件就执行。

int main() {
    int num; scanf("%d", &num);
    switch(num) {
        case  -1: printf("-1\n");   break; //退出
        case   1: printf("1\n");    break;
        case   0: printf("0\n");    break;
        default: //如果前面没有case执行,就执行
            printf("ERROR\n");    break;
    }
    return 0;
}

【题目描述】根据输入的表示星期几的数字,对应输出它的英文名称。
1、星期一:Monday
2、星期二:Tuesday
3、星期三:Wednesday
4、星期四:Thursday
5、星期五:Friday
6、星期六:Saturday
7、星期日:Sunday
错误输入请输出:input error!

输入格式:输入的表示星期几的数字。
输出格式:对应输出它的英文名称。

输入样例:1
输出样例:Monday

#include<stdio.h>
int main(){
    int n; scanf("%d", &n);
    switch(n){
        case 1: printf("Monday");    break;
        case 2: printf("Tuesday");   break;
        case 3: printf("Wednesday"); break;
        case 4: printf("Thursday");  break;
        case 5: printf("Friday");    break;
        case 6: printf("Saturday");  break;
        case 7: printf("Sunday");    break;
        default: printf("input error!"); break;
    }
    return 0;
}

【题目描述】一个最简单的计算器,支持 +, -, *, / 四种运算。

仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。然而:

输入格式:输入三个参数,其中第 1、2 个参数为整数,第 3 个参数为操作符(+,-,*,/)。
输出格式:输出只有一行,一个整数,为 a 操作符 b 的运算结果。然而:

  1. 如果出现除数为0的情况,则输出:Divided by zero!
  2. 如果除数不为0,则保留2位小数。
  3. 如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!

输入样例1:1 2 +
输出样例1:3

输入样例2:1 2 /
输出样例2:0.5

#include<stdio.h>
int main(){
    int a,b; char c;
    scanf("%d %d %c", &a, &b, &c);//由于使用到字符输入,所以加空格区分 
    switch(c){
        case '+': printf("%d", a+b); break;
        case '-': printf("%d", a-b); break;
        case '*': printf("%d", a*b); break;
        case '/': {
            if(b==0) printf("Divided by zero!");
            else printf("%.2lf", (double)a/b);
            break;
        }  // {}是一个整体
        default: printf("Invalid operator!"); break;
    }
    return 0;
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM