3.分支结构

0.C程序设计结构

顺序结构
    一条一条指令执行;
    a = 3;
    b = 4;
    ..  
选择结构(分支结构)
    if
    switch  
循环结构
    if goto
    while
    do while
    for     

1.分支

  • 逻辑:程序中某段代码需要在满足某个条件时才能运行

  • 形式:

1. if语句
    语法:
        if(表达式)
            语句
    注意:         
        表达式:进行选择的条件,任意C语言中合法的表达式都可以
            语句: 在满足条件下要执行的语句或指令
                
        运行规则:假如(如果, if)“表达式”的值为非0(条件满足),则执行后面的“语句”
            
        "语句":☆
            单语句 :一个;号的语句
            复合语句:
                {}/if/for/while/do while/switch
        建议:
            不管if后面需要多少条语句,先都带上{}
​
eg:
    int a = 0;
    if(a++)
    {
        a++;
        a++;
    }
    printf("a = %d\n", a);
     
// 2.if-else 语句
语法:
    if (表达式)
         语句1
    else 
         语句2            
    注意:         
        表达式: 进行选择的条件,任意C语言中合法的表达式都可以
        语句(指令): 在满足条件下要执行的语句或指令
            
    运行规则:假如"表达式"的值为真(非0), 则执行“语句1”
        否则(else,否定前面的条件,表达式的值为0), 则执行“语句2”  
    "语句":☆
            单语句 :一个;号的语句
            复合语句:
                {}/if/for/while/do while/switch
        建议:
            不管if后面需要多少条语句,先都带上{}
​
​
//3. if-else if-else if ... else 
    语法:
        if (表达式1)
             语句1
        else if (表达式2)
            语句2
        else if (表达式3)
            语句3
            ....
        else if (表达式m)
            语句m
        else
                语句n     
        
    运行规则:假如"表达式1"的值为真(非0), 则执行“语句1”否则(else,否定前面的条件,看表达式2的值),如果 表达式2的值为真,则执行“语句2”    ,否则(else,否定前面的条件,看表达式3的值),如果 表达式2的值为真,则执行“语句3” ... 一直往下,直到表达式m的为假
        则执行语句n
        

  • 注意:

    1. 只要表达式的值为真(非0),则执行语句

    2. if语句可以单独使用,else语句不可以,else语句必须跟if语句配套使用

    3. 不管是if语句还是else语句,代码块是只带一条语句:可以是单语句可以是复合语句

    4. 如果只有一条执行语句,可以这样写:

    if(表达式)
        执行语句xxx;如果表达式为真,那么执行该语句

【练习】
  1. 从键盘输入两个整数a,b, 按从小到大的顺序输出

    //1. 获取数据并存储

    scanf

    //2. 比较

    运算符

    //3. 输出

    printf

    test1.c
    //1. 获取数据并存储
        int a,b;
        scanf("%d%d", &a, &b);
        if(a == b)
        {
            printf();
            //return 0;
        }
            
    //2. 比较
        if(a > b)
        {
            printf("%d %d\n", b, a);
        }
        else 
        {
            printf("%d %d\n", a, b);
        }
    ==> a > b ? printf("%d %d\n", b, a) : printf("%d %d\n", a, b);
    ​
    //=======================
    //1. 获取数据并存储
        int a,b;
        scanf("%d%d", &a, &b);
    ​
    //2. 比较
        if(a > b)
        {
           //交换
            int t = a;
            a = b;
            b = t;
        }
    ​
    //3. 输出
         printf("%d %d\n", a, b);

  2. 从键盘输入三个整数a,b,c,按从小到大的顺序输出

    //1. 获取数据并存储

    scanf

    //2. 比较

    运算符

    //3. 输出

    printf

        //1. 获取数据并存储
        int a,b,c;
        scanf("%d%d%d", &a, &b, &c);
    ​
        //2. 比较
        if(a < b)
        {
            if(a < c) // a < b && a < c
            {
                if()
            }
            else //  a < b && a > c
            {
                
            }
        }
        else
        {
            //a > b
        }
    ======================================================
        //1. 获取数据并存储
        int a,b,c;
        scanf("%d%d%d", &a, &b, &c);
        //2. 三数进行比教并按照规则相应存储
        if(a > b)
        {
            int t = a;
            a = b;
            b = t;
        }
        if(a > c)
        {
            int t = a;
            a = c;
            c = t;
        }// a一定是最小的
        if(b > c)
        {
            int t = b;
            b = c;
            c = t;
        }
    ​
        //3.输出
        printf("%d %d %d", a, b, c);
    ​
    ​
    ​

  3. 输入三个数a, b,c,判断由这三个数为边,能否组成一个三角形

    //1. 获取数据并存储

    scanf

    //2. 判断由这三个数为边,能否组成一个三角形

    //3. 输出

    printf

    //1. 获取数据并存储
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
    ​
    //2. 判断由这三个数为边,能否组成一个三角形
    // (1) :全部两边之和
    // (2) :全部两边之差‘
    //(3) : 一和一差
        if(a+b > c && a+c > b && b+c > a)
        {
            printf("Yes\n");
        }
        else
        {
             printf("No\n")
        }

  4. 从键盘输入一个字符,如果它是小写字母,则转换成大写字母,如果它是大写字母,则转换成小写字母,其他字符,不变,然后再输出它

    //1. 从键盘输入一个字符

    //2.转换

    //3.输出

    //1. 从键盘输入一个字符
    	char a;
    	scanf("%c", &a);
    //2.转换
    	if(a >= 'A' && a <= 'Z')//大写
        {
            a += 32;
        }
        else if(a >= 'a' && a <= 'z')//小写
        {
            a -= 32;
        }
    
    //3.输出
    	printf("a = %c\n", a);
    

  5. 制作一个简单的打分系统(满分制:100)

60分以下:评级为D

60-80分 : 评级为C

80-90分 : 评级为B

90-100分: 评级为A

不在0-100范围内:错误

 

=====================

注意:

(1) 语句: C语言中的指令。
	表达式语句: 表达式 + ;
		a = 3   -> 表达式
		a = 3;  -> 赋值语句
	if语句: 分支语句
	循环语句:
		while
		do while
		for
	goto语句
	return 语句
	switch 语句
	...
	
	====》 语句只能存在函数内部(除定义语句)

(2) 条件:

	并列条件: 会一一判断它们
	if (条件1)
	{}
	if (条件2)
	{}
	...
		
	互斥条件: 有你没我,有我没你
	if (条件1)
	{}
	else
	{	//条件2 => !条件1
	}

(3) if语句的嵌套:
	“条件里面分条件”
	在if语句中又包含一个或多个if语句称为if语句的嵌套		
		if (xxxx)
			if() 语句1
			else 语句2
		else
			if() 语句3
			else 语句4
				
	关键: else匹配问题else总是与它上面的、最近的、同级的(找准范围)、
		未配对的if语句配对。
		 else 与 if 之间不能夹杂外部语句
switch 语句
  • 逻辑:根据不同的条件执行不同的代码片段

  • 语法:

    switch (表达式) { case 常量表达式1: 语句1 case 常量表达式2: 语句2 ... case 常量表达式n: 语句n default: 语句m }

    ===

    运行规则: switch语句:拿“表达式”的值,和case后面的“常量表达式”作匹配,一旦匹配成功,则从那个case后面的语句执行,直到遇到break或switch结束,如果没有一个case匹配成功,则匹配default.

int a = 3;
switch (a)
{
    case 1:
        语句1
    case 2:
        语句2
    case 3:
        语句n
    default:
        语句m
}

注意:
	case与case中间的语句可以是任意条语句
	case与case中间相当于有一个隐藏的{}
    	
  • 要点解析

    1. switch(n)语句中的n必须是一个整型表达式,即switch判断的数据必须是整型或者字符

    2. case语句只能带整型常量,包括普通整型或字符

    3. break语句的作用是跳出所属的switch语句,没有break程序会略过case往下执行

    4. default语句不是必须的,一般放在最后面(因此不需要break)

    5. 各个case和defalut出现的次序不影响匹配结果(永远先匹配case再default) 一旦匹配成功,就从此处往下执行

    6. “语句”可以省略,意思是说,多个case可以共用一组语句(执行的是相同的代码)

    7. case后面的常量不能出现重复

#include <stdio.h>
int main()
{
	int a = 3;
	int x = 1;
	switch (a)
	{
		case 3:		
			switch(x)
			{
				case 1:
					x++;
				case 2:
					x++;
				case 3:
					x += 3;
					break;
			}
			a++;
			//break;
		case 1:
		case 2:
			a+=6;
		default:
			a++;
			break;
	}
	printf("a = %d, x = %d\n", a, x);
}

练习:

  1. 制作一个简单的打分系统(满分制:100) //用switch

60分以下:评级为D

60-80分 : 评级为C

80-90分 : 评级为B

90-100分: 评级为A

不在0-100范围内:错误

 

2.计算加盟费 用switch

小张加盟一家餐饮企业,在每个季度结束后,小张必须向总部缴纳加盟费,加盟费与营业额的提成关系如下:

营业额 提成系数

0<=n<10w 0.1

10<=n<20w 0.075

20<=n<40w 0.05

40<=n<60w 0.03

60<=n<100w 0.015

n >= 100w 0.01

请输入小张的营业额,然后求出它需要的提交的加盟费

 

=================================================================================

  1. 企业发放的奖金根据企业的当年利润决定。 当利润I低于或等于100000元时,奖金可提成10%; 利润大于100000元,小于200000元(100000<I≤200000)时, 低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%; 利润大于200000元,小于400000元(200000<I≤400000)时, 低于200000元的部分仍按上述办法提成(下同),高于200000元的部分按5%提成。 利润大于400000元,小于600000元(400000<I≤600000)时, 高于400000元的部分按3%提成。 利润大于600000元,小于1000000元(600000<I≤1000000)时, 高于600000的部分按1.5%提成; 利润大于1000000元(I>1000000)时, 超过1000000元的部分按1%提成。从键盘输入当年利润I,求应发放奖金总数。 要求:

    用switch语句编程序。

  2. 输入一个日期(ymd),求该日期至当年末有多少天? (作业)

 

如何让VScode 远程连接Ubuntu

  1. 保证Ubuntu 上面安装了远程服务器

    sudo apt install openssh-server

  2. 操作VScode

    安装插件 Remote-ssh

  3. 开始远程连接

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值