精华内容
下载资源
问答
  • 几种分支结构

    千次阅读 2020-01-04 10:18:15
    目录分支结构ifif elseif else-if elseswicth case 分支结构 if 语法结构 : if (表达式) { 条件成立时执行的代码 } 表达式可以是关系表达式、布尔类型的值、其他类型的值; var score = 0; if ...

    分支结构

    1、if

    语法结构 :

    if (表达式) {
    			条件成立时执行的代码
    		}
    

    表达式可以是关系表达式、布尔类型的值、其他类型的值;

    var score = 0;
    if (score < 60) {
        console.log("不合格");
         }//输出不合格
    var score = 0;
    if (score > 60) {
          console.log("合格");
         }//就不会输出合格
    

    if结构里面的{} 在条件成立时需要执行的代码只有一行时可以省略, 但是一般不要省略。

    var score = 0;
    if (score < 60) 
          console.log("不合格");//也会输出不合格
           
    

    2、if else

    这种结构用的最多。
    1.语法结构 :

    if(表达式) {
    			条件成立时执行的代码(代码1)
    		} else {
    			条件不成立时执行的代码(代码2)
    		}
    

    2.语法解析 :
    (1) 当表达式成立时, 执行代码1, 否则执行代码2;
    (2)if-else 是表示两个互斥的结构, 只满足其中一个 , 两个大括号的里面的代码不可能同时执行;
    (3) else 后面绝对不能接()。

    var score = 70;
    if (score < 60) {
            console.log("良好");
    } else {
            console.log("优秀");
    }//输出优秀
    

    3、if else-if else

    语法结构 :

    if(条件1) {
    			条件1成立时执行的代码
    		} else if (条件2) {
    			条件2成立时执行的代码
    		}
    		.......
    		else {
    			以上条件都不满足的时候, 执行的代码
    		}
    

    特点 :
    (1) if-else if 是做多条件判断的;
    (2) 所有大括号里面的代码只会执行一个。

    // 需求 : score > 90   优秀      score > 80 score <= 90  良好     score <= 80   score >= 60  及格  score < 60  差
            
            var score = prompt("请输入成绩");
            if(score > 90) {
                alert(" 优秀");
            } else if(score > 80) {  // score <= 90
                alert("良好");
            } else if (score >= 60) {
                alert("及格");
            } else if(score < 60 && score > 0) {
                alert("差");
            } else {
                alert("输入的分数错误");
            }
    

    4、swicth case

    这个主要用于固定值匹配,他的匹配规则为:匹配值必须是全等的(数据类型和数值都一样)。

        // 需求 : 1  c++     2  前端     3  java    4   C#     5  大数据
    
     var courseCode = +prompt("请输入课程编码");
    switch(courseCode) {
            case 1 : 
            	alert("c++");
            	break;
            case 2 : 
         		 alert("前端");
         		 break;
            case 3 : 
            	alert("java");
            	break;
            case 4 : 
            	alert("C#");
            	break;
            case 5 : 
            	alert("大数据");
            	break;
            default : 
            	alert("请输入正确的编号");
            	break;
        }
    

    break的作用 : 是用来结束switch-case语句的,可以不写;但是不写,会出现穿透现象。
    break只能用于switch语句和循环语句

    展开全文
  • if分支结构

    2020-04-16 21:20:52
    if分支结构 1. 代码运行过程中的常见结构 顺序结构 代码从上到下,从左至右执行,最基本原则。 分支结构 路上的风景不一样,向左走向右走结果不一样。 代码满足不同的条件,执行不同的结果 循环结构 吃饭,...

    if分支结构

    1. 代码运行过程中的常见结构

    顺序结构
    	代码从上到下,从左至右执行,最基本原则。
    
    分支结构
    	路上的风景不一样,向左走向右走结果不一样。
    	代码满足不同的条件,执行不同的结果
    
    循环结构
    	吃饭,睡觉,撸猫,辅导,上课
    	代码中存在需要多次执行的情况,这里会使用到循环结构
    

    2. 分支结构

    2.1 if 分支结构
    if (/* 条件判断 */) {
        // 语句体
    }
    /*
    执行流程:
    	当前程序运行到if结构时,首先执行条件判断,条件判断的结果是一个boolean类型,如果条件判断为true,执行语句体,为false,不能执行语句体。
    	最后都会执行到大括号之外
    */
    
    /* if 分支结构演示 */
    class Demo2 {
    	public static void main(String[] args) {
    		// 假设你兜里有10块钱
    		// int money = 10;
    		
    		// 假设你兜里有1块钱
    		int money = 10;
    		
    		// money > 5 是一个条件判断,结果是一个boolean
    		if (money >= 5) {
    			System.out.println("煎饼果子来一套");
    			money -= 5;
    			
    			System.out.println("余额 :" + money + "元");
    		}
    		
    		System.out.println("if大括号之外的代码~~~~");
    	}
    }
    
    /*
    1. 判断一个字符是不是大写英文字母
    */
    class Demo3 {
        public static void main(String[] args) {
            // 定义一个字符类型char 的变量
    		char ch = '我';
    		
    		/* 
    		代码结构安排的明明白白的!!!
    		*/
    		if (ch >= 'A' && ch <= 'Z') {
    			System.out.println("这里是一个大写字母!!!");
    		}
    		
    		System.out.println("大括号之外的语句!!!");	
        }
    }
    
    /*
    2. 判断一个字符是不是英文字符
    */
    class Demo4 {
    	public static void main(String[] args) {
    		// 判断字符,需要使用一个char类型变量
    		char ch = '1';
    		
    		/*
    		(ch >= 'A' && ch <= 'Z') 大写字母范围
    		(ch >= 'a' && ch <= 'z') 小写字母范围
    		*/
    		if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) {
    			System.out.println("这是一个英文字母");
    		}
    		
    		System.out.println("if 大括号之外的代码");
    	}
    }
    
    /*
    3. 判断一个年份是不是闰年
    	能被4整除但是不能被100整除,或者能被400整除
    */
    class Demo5 {
    	public static void main(String[] args) {
    		// 年份是一个整数,这里使用int类型
    		int year = 2009;
    		
    		/*
    		year % 4 == 0 && year % 100 != 0 || year % 400 == 0
    		*/
    		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
    			System.out.println("是闰年");
    		}
    	}
    }
    
    2.2 if else 分支结构
    /*
    if 分支结构中只能处理条件满足的情况,条件不满足没有任何的处理语句。
    
    if else分支结构。
    */
    if (/* 条件判断 */) {
        // true语句体
    } else {
        // false语句体
    }
    /*
    执行流程:
    	代码执行到if else结构运行,首先判断if之后的条件判断,如果条件判断为true,执行true语句体,如果条件判断为false,执行false语句体。
    	世界上最遥远的距离是我在if里,你在else里
    */
    
    /*
    1. 工资判断
    	月收入5000以上缴税
    	月收入5000以下不需要缴税
    */
    class Demo6 {
    	public static void main(String[] args) {
    		// 工资是一个浮点类型数据,这里使用double类型
    		double salary = 4999.0;
    		
    		/*
    		语句体:
    			大括号以内的内容,也可以称之为代码块
    		*/
    		if (salary > 5000) {
    			System.out.println("我为国家做贡献");
    		} else {
    			System.out.println("我会继续努力,为国家做贡献");
    		}
    	}
    }
    
    /*
    2. 是否有女朋友
    	有 true
    	没有 false
    */
    class Demo7 {
    	public static void main(String[] args) {
    		// 是否有女朋友就两种情况,true or false
    		boolean hasGirlFriend = false;
    		
    		/*
    		if () 小括号内需要的数据类型是boolean类型
    		hasGirlFriend 该变量就是一个boolean类型数据,可以直接用于
    		if 直接的判断
    		*/
    		if (hasGirlFriend) {
    			System.out.println("奶茶买一送一");
    		} else {
    			System.out.println("路见不平一声吼,你还没有女朋友");
    		}
    	}
    }
    
    /*
    3. 判断一个字符是不是数字字符
    */
    class Demo8 {
    	public static void main(String[] args) {
    		// 需要判定的是一个数字字符,这里需要char类型
    		char ch = '我';
    		
    		/*
    		这里操作判断的是一个字符类型数据
    		*/
    		if (ch >= '0' && ch <= '9') {
    			System.out.println("该字符是一个数字字符");
    		} else {
    			System.out.println("该字符不是一个数字字符");
    		}
    	}
    }
    
    2.3 if else if 分支结构
    学生成绩的等级划分:
    	90 ~ 100 秀儿
    	80 ~ 90 良儿
    	70 ~ 80 中儿
    	60 ~ 70 格儿
    	60 以下 让你爹穿着拖鞋来学校一趟
    
    用户购物VIP等级
    	100 ~ 1000 铜牌会员
    	1001 ~ 5000 银牌会员
    	5001 ~ 10000 金牌牌会员	
    	10001 ~ 50000 钻石会员	
    	50001  黑钻会员	
    
    if (/* 条件匹配1 */) {
        // 处理方式1
    } else if (/* 条件匹配2 */) {
        // 处理方式2
    } else if (/* 条件匹配3 */) {
        // 处理方式3
    } else {
        // 无匹配项最终处理方式
    }
    /*
    执行流程:
    	代码执行到if else if结构,从上至下,匹配if之后小括号里面的内容,条件匹配成功,执行对应的处理方式,结束分支结构运行。如果没有任何的一个条件匹配,执行else中的语句,也会终止条件匹配
    
    【注意】
    	else if个数不限制,可以有多个!!!
    */
    
    /*
    用户购物VIP等级
    	100 ~ 1000 铜牌会员
    	1001 ~ 5000 银牌会员
    	5001 ~ 10000 金牌牌会员	
    	10001 ~ 50000 钻石会员	
    	50001  黑钻会员	
    */
    class Demo9 {
    	public static void main(String[] args) {
    		// 用户的消费数据按照int类型考虑
    		int money = 50001;
    		
    		if (money >= 100 && money <= 1000) {
    			System.out.println("铜牌会员");
    		} else if (money > 1000 && money <= 5000) {
    			System.out.println("银牌会员");
    		} else if (money > 5000 && money <= 10000) {
    			System.out.println("金牌会员");
    		} else if (money > 10000 && money <= 50000) {
    			System.out.println("钻石会员");
    		} else if (money > 50000) {
    			System.out.println("黑钻会员");
    		} else {
    			System.out.println("非会员...");
    		}
    	}
    }
    
    /*
    学生成绩的等级划分:
    	90 ~ 100 秀儿
    	80 ~ 90 良儿
    	70 ~ 80 中儿
    	60 ~ 70 格儿
    	60 以下 让你爹穿着拖鞋来学校一趟
    */
    class Demo10 {
    	public static void main(String[] args) {
    		/*
    		成绩考虑存在0.5的情况,需要使用浮点类型数据
    		这里采用float类型
    		*/
    		float score = 59F;
    		
    		/* 成绩等级判断 */
    		if (score >= 90 && score <= 100) {
    			System.out.println("秀儿");
    		} else if (score >= 80) {
    			System.out.println("良儿");
    		} else if (score >= 70) {
    			System.out.println("中儿");
    		} else if (score >= 60) {
    			System.out.println("格儿");
    		} else {
    			System.out.println("让你爹穿着拖鞋来学校一趟");
    		} 
    	}
    }
    
    【补充知识点 Scanner 复制粘贴就可以了】
    	以上代码每一次的结果都是需要用户修改代码,保存,重新编译之后才可以进行执行结果。对于普通用户而言,该操作可行吗?
    	我们需要给程序提供一种方式,用于接受用户输入的数据!!!
    
    	Scanner是Java中提供的用于从控制台输入数据到代码中的一种方式,存在一些弊端,容易导致一些错误,这里只要求大家了解一些必要的方法。
    	【Scanner操作哪里需要沾哪里】
    	
    Scanner使用流程
    	1. 点技能点,Java程序本身是没有直接使用Scanner的能力,这里需要点技能点。
    	官网操作【导包】
    	固定格式:
    		import java.util.Scanner;
    		放在class代码上一行
    	
    	2. 需要得到一个Scanner的变量
    	固定格式:
    		Scanner sc = new Scanner(System.in);
    	
    	3. 选择执行对应的方法,从键盘上获取对应的数据
    		获取int类型 
    			int类型的变量 = sc.nextInt();
    		获取float类型 
    			float类型的变量 = sc.nextFloat();	
    		获取double类型
            	double类型的变量 = sc.nextDouble();
    		获取char类型 
    			char类型的变量 = sc.nextLine().charAt(0);
    
    【补充知识点 用户友好性提示】
    	代码运行需要站着用户的角度来思考问题。用户进行操作时,需要给予用户足够的提示和引导,告知用户当前操作如何完成,考虑代码的友好性!!!
    	用户粘性问题!!!用户提示!!!用户友好性!!!
    
    【补充知识点 用户输入数据合法性判断】
    	就算在提示中告知用户需要输入的数据范围是多少,但是用户在实际使用的过程中,依然存在输入错误的情况。需要对于用户输入的数据进行合法性判断,如果用户输入的内容符合我们的判断逻辑需求,进入数据处理过程。如果不符合要求,直接终止程序!!!
    
    /*
    学生成绩的等级划分:
    	90 ~ 100 秀儿
    	80 ~ 90 良儿
    	70 ~ 80 中儿
    	60 ~ 70 格儿
    	60 以下 让你爹穿着拖鞋来学校一趟
    */
    
    // 导包,让当前Java代码可以使用Scanner
    import java.util.Scanner;
    
    class Demo10 {
    	public static void main(String[] args) {
    		/*
    		成绩考虑存在0.5的情况,需要使用浮点类型数据
    		这里采用float类型,这里赋值一个初值
    		*/
    		float score = 0.0F;
    	
    		// 需要得到一个Scanner的变量
    		Scanner sc = new Scanner(System.in);
    		
    		/* 提示用户操作 */
    		System.out.println("请输入学生的成绩1 ~ 100:");
    		score = sc.nextFloat();
    		
    		/* 
    		验证用户输入数据的合法性 
    		如果用户输入的数据不合法,终止程序!!!
    		不合法: 输入数据 > 100 或者 < 0
    		*/
    		if (score > 100 || score < 0) {
    			System.out.println("输入数据不合法!!!");
    			// 程序退出
    			System.exit(0);
    		}
    		
    		/* 成绩等级判断 */
    		if (score >= 90 && score <= 100) {
    			System.out.println("秀儿");
    		} else if (score >= 80) {
    			System.out.println("良儿");
    		} else if (score >= 70) {
    			System.out.println("中儿");
    		} else if (score >= 60) {
    			System.out.println("格儿");
    		} else {
    			System.out.println("让你爹穿着拖鞋来学校一趟");
    		} 
    	}
    }
    

    3. 总结

    分支结构用于处理代码中出现的一些需要判断,并且按按条件处理的情况!!!
    	1. 条件约束考虑清楚
    	2. 处理的过程考虑清楚
    	3. 数据类型选择
    
    展开全文
  • C语言if分支结构

    2020-04-28 15:32:13
    文章目录一、关系运算符二、条件判断三、只使用if语句四、多个if ...在讲if条件分支结构之前,先了解关系运算(Relational Operators),用于判断条件,决定程序的流程。 关系 数学中的表示 C语言的表示 ...

    一、关系运算符

    在讲if条件分支结构之前,先了解关系运算(Relational
    Operators),用于判断条件,决定程序的流程。

    关系数学中的表示C语言的表示
    小于<<
    小于等于<=
    大于>>
    大于等于>=
    等于===
    不等于!=

    C语言的基本数据类型有char、int、double,我们暂时认为只有char和int适用于上述关系运算符,double和字符串(字符数组)的关系运算以后再讨论。

    注意了:

    1)“=”是赋值,“==”才是判断两个数是否相等,不能混用。

    2)C语言没有“之间”、“中间”、“之内”或“在某范围内”的关系运算符,例如年龄在25-30岁之间,只能表达为:年龄大于等于25岁 并且 年龄小于等于30岁

    二、条件判断

    在我们的生活中,不是全部的事情都按顺序进行的,需要根据客观条件做出判断和选择,例如超女选秀,限制了16岁才能参加,16岁以下是不能参加的。这时候程序就需要做出判断,判断报名者的年龄是否满16岁,并给出提示。

    在C语言中,使用if和else关键字对条件进行判断,先看下面的代码。

    示例(book20.c)

    /*
      *  程序名:book20.c,此程序演示条件分支控制语句if else的使用。
      *  作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main()
    {
      int    age=0;   // 定义一个整数变量age,存放用户输入的年龄
    
      printf("请输入您的年龄:");    // 提示用户输入
      scanf("%d",&age);              // 接受从键盘输入的年龄数据
    
      if (age >= 16)
      {
        // 如果用户已满18岁,执行这段代码
        printf("亲,您已成年,可以报名超女选秀,祝您好运!\n");
      }
      else
      {
        // 如果用户小于16岁,执行这段代码
        printf("这位童鞋,不好意思哦,等您16岁之后再来吧!\n");
      }
    }
    

    运行效果

    在这里插入图片描述

    这段代码中,age>=18是需要判断的条件,>=表示“大于等于”,等价于数学中的≥。

    if 和 else 是C语言的关键字,if就是“如果”,else就是“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。总结起来,if else的结构为:

      if (判断条件)
      {
        语句块1
      }
      else
      {
        语句块2
      }
    

    意思是,如果判断条件成立,那么执行语句块1,否则执行语句块2。其执行过程可表示为下图:

    在这里插入图片描述
    所谓语句块(Statement Block),就是由{}包围的一个或多个语句的集合。如果语句块中只有一条语句,也可以省略{ },例如:

     if (age >= 16)
        printf("亲,您已成年,可以报名超女选秀,祝您好运!\n");
      else
        printf("这位童鞋,不好意思哦,等您16岁之后再来吧!\n");
    

    或者

      if (age >= 16)  printf("亲,您已成年,可以报名超女选秀,祝您好运!\n");
      else  printf("这位童鞋,不好意思哦,等您16岁之后再来吧!\n");
    

    由于if else语句可以根据不同的情况执行不同的代码,所以也叫分支结构或选择结构,上面的代码中,就有两个分支。

    注意,不要在if (判断条件)后面加分号,以下是错误的,初学者容易犯这种错误。

      if (age >= 16);
    

    如果这么写,表示条件成立后,执行一条空语句。

    三、只使用if语句

    有的时候,我们需要在满足某种条件时进行一些操作,而不满足条件时就不进行任何操作,这个时候我们可以只使用if 语句。也就是说,if else 不必同时出现。

    单独使用 if 语句的形式为:

    if (判断条件)
      {
        语句块
      }
    

    意思是,如果判断条件成立就执行语句块,否则直接跳过。其执行过程可表示为下图:

    在这里插入图片描述

    例如超女选秀,被淘汰的超女,活动组织方给被淘汰的超女发放路费,标准是2000元/人,但是,节目的赞助方有个富二代,决定给颜值漂亮的超女多发500元。

    示例(book21.c)

    /*
      *  程序名:book21.c,此程序演示条件分支控制语句只有if没有else的情况。
      *  作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main()
    {
      int    yz=0;   // 定义一个整数变量存放超女的颜值:1-漂亮;2-一般
      int    money=2000;  // 发放路费的基本金额
    
      printf("请问超女的颜值(1-漂亮;2-一般):");
      scanf("%d",&yz);              // 接受用户从键盘输入的数据
    
      if (yz == 1)
      {
        // 如果超女颜值漂亮,多给500元的路费
        money=money+500;
      }
    
      printf("此超女发放金额为%d元。\n",money);
    }
    

    运行效果

    在这里插入图片描述

    四、多个if else语句

    if else 语句也可以多个同时使用,构成多个分支,形式如下:

     if (条件表达式一)
      {
        语句块一
      }
      else if (条件表达式二)
      {
        语句块二
      }
      else if (条件表达式三)
      {
        语句块三
      }
      else if (条件表达式n)
      {
        语句块n
      }
      else
      {
        全部的条件都不符时执行此语句块x
      }
    

    意思是,从上到下依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳出整个if else 语句之外继续执行其他代码。如果所有判断条件都不成立,则执行语句块x。

    也就是说,一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行。

    例如,使用多个 if else 语句判断输入的数字表达的星期数。

    示例(book22.c)

    /*
      *  程序名:book22.c,此程序演示条件分支控制语句有多个 if else的情况。
      *  作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main()
    {
      int    day=0;   // 定义一个整数变量用于接受键盘输入的数字
    
      printf("请输入0-6之间的数字:");    // 提示用户输入
      scanf("%d",&day);              // 接受用户从键盘输入的数据
      if (day == 0)
        printf("星期天\n");
      else if (day == 1)
        printf("星期一\n");
      else if (day == 2)
        printf("星期二\n");
      else if (day == 3)
        printf("星期三\n");
      else if (day == 4)
        printf("星期四\n");
      else if (day == 5)
        printf("星期五\n");
      else if (day == 6)
        printf("星期六\n");
      else
        printf("输入错误。\n");
    }
    

    运行效果

    在这里插入图片描述

    建议大家慎用 else if这种程序结构,因为这种程序结构容易把人搞晕,解决这类需求有其它更好的方法,例如后面章节中将要学习的switch比else if 更合适。

    五、if语句的嵌套

    if语句也可以嵌套使用,例如:

    示例(book23.c)

    /*
      *  程序名:book23.c,此程序演示条件分支控制语句有多个if嵌套的情况。
      *  作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main()
    {
      int a,b;   // 定义两个整数变量,用于比较大小
    
      printf("请输入两个数字:");    // 提示用户输入
      scanf("%d %d",&a,&b);              // 接受用户从键盘输入的数据
    
      if (a == b)      // 两个数相等的情况
      {
        printf("a(%d) 等于 (%d)\n",a,b);
      }
      else             // 两个数不相等的情况
      {
        if (a > b)     // a大于b的情况
        {
          printf("a(%d) 大于 b(%d)\n",a,b);
        }
        else           // 剩下的就是a小于b的情况了
        {
          printf("a(%d) 小于 b(%d)\n",a,b);
        }
      }
    }
    

    运行效果

    在这里插入图片描述

    六、保持良好的编程习惯

    if 语句嵌套时,要注意 if 和 else 的配对问题,C语言规定,else 总是与它前面最近的if配对。各位一定要保持良好的编程习惯,空格、缩进、对齐,{}成对的书写等,不良的代码习惯会把自己搞晕。

    七、逻辑运算符

    在日常生活中,要做出某个决定,需要判断的条件往往不止一个,需要判断多个条件,例如超女选秀,参与选秀的女孩子有以下基本数据:

    年龄:取值16-50岁。
    身高:取值150cm-190cm。
    身材:1-火辣;2-普通;3-飞机场。
    颜值:1-漂亮;2-一般;3-歪瓜裂枣。

    女神标准是:1)年龄25-30岁;2)身高165cm-175cm;3)身材火辣;4)颜值漂亮。

    大脑中的逻辑是这样的:年龄25-30岁 并且 身高165cm-175cm 并且 身材火辣 并且 颜值漂亮

    降低点要求吧,颜值可以选漂亮一般,如果是一般,整整容也不是个问题。

    于是逻辑修改为:年龄25-30岁 并且 身高165cm-175cm 并且 身材火辣并且(颜值漂亮 或者 颜值一般)。

    用C程序来表达大概如下:

      if ( (年龄 >= 25) 并且 (年龄 <= 30) )
      {
        if ( (身高 >= 165) 并且 (身高 <= 175) )
        {
          if (身材 == 火辣)
          {
            if ( (颜值 == 漂亮) 或者 (颜值 == 一般) )
            {
              printf("超女选秀合格,送往后宫。\n");
            }
          }
        }
      }
    

    C语言用“&&”表示“并且”,用“||”表示“或者”,官方用语就是逻辑运算符。

    代码修改如下:

     if ( (年龄 >= 25) && (年龄 <= 30) )
      {
        if ( (身高 >= 165) && (身高 <= 175) )
        {
          if (身材 == 火辣)
          {
            if ( (颜值 == 漂亮) || (颜值 == 一般) )
            {
              printf("超女选秀合格,送往后宫。\n");
            }
          }
        }
      }
    

    示例(book25.c)

    /*
      *  程序名:book25.c,此程序演示条件分支控制语句if与逻辑运算符。
      *  作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main()
    {
      int  age=0;        // 年龄
      int  height=0;     // 身高,单位:厘米cm
      int  sc=0;         // 身材,1-火辣;2-普通;3-飞机场。
      int  yz=0;         // 颜值,1-漂亮;2-一般;3-歪瓜裂枣。
    
      printf("请输入年龄、身高、身材(1-火辣;2-普通;3-飞机场):");
      scanf("%d %d %d",&age,&height,&sc);
      printf("请输入颜值(1-漂亮;2-一般;3-歪瓜裂枣):");
      scanf("%d",&yz);
    
      if ( (age >= 25) && (age <= 30) )    // 年龄在25-30之间
      {
        if ( (height >= 165) && (height <= 175) )  // 身高在165-175之间
        {
          if (sc == 1)    // 身材,1-火辣
          {
            if ( (yz == 1) || (yz == 2) )   // 颜值,1-漂亮或者2-一般
            {
              printf("超女选秀合格,送往后宫。\n"); return 0;
            }
          }
        }
      }
      printf("超女选秀不合格,发放五两银子后送回家。\n");
    }
    

    运行效果
    在这里插入图片描述

    八、逻辑表达式的书写

    在book25.c中,采用了if嵌套的方法,其实可以采用一个复杂的if逻辑表达式一次性完成全部的判断,采用括号、对齐、空格、换行有助于更清晰的表达复杂的逻辑表达式。

    示例(book26.c)

    /*
      *  程序名:book26.c,此程序演示条件分支控制语句if与逻辑运算符。
      *  作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main()
    {
      int  age=0;        // 年龄
      int  height=0;     // 身高,单位:厘米cm
      int  sc=0;         // 身材,1-火辣;2-普通;3-飞机场。
      int  yz=0;         // 颜值,1-漂亮;2-一般;3-歪瓜裂枣。
    
      printf("请输入年龄、身高、身材(1-火辣;2-普通;3-飞机场):");
      scanf("%d %d %d",&age,&height,&sc);
      printf("请输入颜值(1-漂亮;2-一般;3-歪瓜裂枣):");
      scanf("%d",&yz);}
    
      if ( ( (age >= 25) && (age <= 30)         ) &&     // 年龄在25-30之间
           ( (height >= 165) && (height <= 175) ) &&     // 身高在165-175之间
           ( (sc == 1)                          ) &&     // 身材,1-火辣
           ( (yz == 1) || (yz == 2)             ) )      // 颜值,1-漂亮或者2-一般
      {
        printf("超女选秀合格,送往后宫。\n");
      }
      else
      {
        printf("超女选秀不合格,发放五两银子后送回家。\n");
      }
    }
    

    book26.c采用一个if表达式就实现了全部逻辑的判断功能,效果与book25.c相同,如果实在理解不了,就采用book25.c中的表达方式吧,不急,慢慢来。

    九、不得不说的逻辑非

    逻辑运算符有三种,在上述的章节中,我们讲了&&和||,还有一个!没讲,在我看来,这个运算符就不应该存在,它很容易搞乱人的思维。

    大家可以先看看它是怎么回事,也可以写代码测试一下它的用法,然后就忘了它。

    !就是非,取相反的意思。

    例如:

    if  (age==25)         // 判断年龄是25岁
    

    等同

    if  (!(age!=25))        // 判断年龄不是25岁再取反
    

    这是吃饱了撑着。

    十、三目运算符

    三目运算符本来是运算符章节中的内容,我认为在本章节介绍更合适。

    三目运算符也叫三元运算符,这个运算符的符号是由一个问号和一个冒号组成。

    语法:

     表达式1 ? 表达式2 : 表达式3;
    

    语义:

    先执行表达式1,如果表达式1的结果如果为真,那么执行表达式2,并且这个整体的运算式的结果是表达式2的结果;如果表达式1的结果如果为假,执行表达式3,运算式的结果是表达式3的结果。

    int a,b,c;
    a=7;
    b=6;
    c=(a>b)?a:b;
    

    等同于

    if (a>b) c=a;
    else c=b;
    

    我不建议采用三目运算符,过于复杂的三目运算难以理解。

    比如判断year是不是闰年,是则返回1,不是返回0。

    year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0)
    

    晕了吧。

    十一、课后作业

    1)指出以下代码的错误。

    int a,b;
    a=30;
    b=20;
    if (a > b);
    {
      printf("a 大于 b\n");
    }
    if (a=b)
    {
      printf("a 等于 b\n");
    }
    

    2)写程序测试表达式的值

      int a,b,c;
    
      a=30;
      b=20;
    
      c=(a > b);
      printf("c=%d\n",c);
    
      c=(a < b);
      printf("c=%d\n",c);
      printf("c=%d\n",(a < b));
    
      c=(a=50);
      printf("c=%d\n",c);
    

    3)以下表达是什么意思?

    if (0) 是什么意思?

    if (1) 是什么意思?

    if (20) 是什么意思?

    4)以下表达是什么意思?

      35;    // 是什么意思?
    

    5)将超女选秀进行到底,在界面上输入超女数据后,按下列要求选出妃子、宫女和杂役。

    妃子:(1)年龄18-25岁;(2)身高165-178cm;(3)身材火辣;(4)颜值漂亮。

    宫女:(1)年龄18-30岁;(2)身高160-165cm;(3)身材火辣或者普通;(4)颜值一般。

    嬷嬷:(1)年龄35-40岁;(2)身高155-165cm;(3)身材普通或者飞机场;(4)颜值一般。

    十二、版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
    来源:C语言技术网(www.freecplus.net)
    作者:码农有道

    如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!
    如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

    展开全文
  • if语句可以构成分支结构,有3种形式;表达式中判断两个值是否相等用==,有多个语句时用{}括起来;当if语句中的执行语句又是if语句时,构成嵌套,else与if配对应该采取就近原则,一般情况下较少使用if语句的嵌套结构...

    一、关系运算符和表达式

    关系运算符:
    又叫比较运算符,在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。

    1.关系运算符及其优先顺序

    在C语言中有以下关系运算符:

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

    关系运算符都是双目运算符,其结合性均为左结合
    关系运算符的优先级低于算术运算符,高于赋值运算符
    在6个关系运算符中,前4个<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。

    2.关系表达式

    关系表达式的一般形式为:

    表达式 关系运算符  表达式
    

    例如:

    a+b > c-d
    x > 3/2
    'a'+1 < c
    -i-5*j == k+1
    

    这些都是合法的关系表达式。
    由于表达式也可以又是关系表达式,因此也允许出现嵌套的情况,例如a > (b>c)a != (c==d)等。
    关系表达式的值是真和假,用1和0表示。
    5 > 0的值为真,即为1;
    (a=3) > (b=5)中由于3 > 5不成立,故其值为假,即为0。

    C语言中,数值不为0时均为真,为0时才为假。

    练习如下:

    #include <stdio.h>
    
    int main() {
    	char c='k';
    	int i=1,j=2,k=3;
    	float x=3e+5,y=0.85;
    	printf("%d, %d\n",'a'+5<c,-i-2*j>=k+1);
    	printf("%d, %d\n",1<j<5,x-5.25<=x+y);
    	printf("%d, %d\n",i+j+k==-2*j,k==j==i+5);
    			
    	return 0;
    }
    

    打印:

    1, 0
    1, 1
    0, 0
    
    

    在上面代码中求出了各个关系表达式的值。
    其中,字符变量是以它对应的ASCII码参与运算的。
    对于含多个关系运算符的表达式,如k==j==i+5,根据运算符的左结合性,先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故整个表达式的值为0。

    二、逻辑运算符和表达式

    1.逻辑运算符及其优先顺序

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

    • && 与运算
    • || 或运算
    • ! 非运算

    与运算符&&和或运算符||均为双目运算符。具有左结合性
    非运算符!为单目运算符,具有右结合性
    3个逻辑运算符的优先级为!(非)> &&(与)> ||(或)
    逻辑运算符和其它常见运算符优先级的关系如下:
    逻辑运算符和其它常见运算符优先级的关系
    其中,&&和||低于关系运算符,!高于算术运算符。

    按照运算符的优先顺序可以得出:
    a>b && c>d等价于(a>b) && (c>d)
    !b==c || d<a等价于((!b)==c) || (d<a)
    a+b>c && x+y<b等价于((a+b)>c) && ((x+y)<b)

    2.逻辑运算的值

    逻辑运算的值也为真和假两种,用1和0来表示。
    其求值规则如下:

    • 与运算&&
      参与运算的两个量都为真时,结果才为真,否则为假。
      例如5>0 && 4>2,由于5>0为真,4>2也为真,相与的结果也为真。
    • 或运算||
      参与运算的两个量只要有一个为真,结果就为真,两个量都为假时,结果才为假。
      例如5>0 || 5>8,由于5>0为真,相或的结果也就为真。
    • 非运算!
      参与运算量为真时,结果为假;参与运算量为假时,结果为真。
      例如!(5>0)的结果为假。

    虽然C程序在编译并给出逻辑运算值时,以1代表真、0代表假,但反过来在判断一个量是为真还是为假时,以0代表假,以非0的数值作为真。
    例如由于5和3均为非0,因此5&&3的值为真,即为1;
    又如5||0的值为真,即为1。

    3.逻辑表达式

    逻辑表达式的一般形式为:

    表达式  逻辑运算符  表达式
    

    其中的表达式可以又是逻辑表达式,从而形成嵌套。
    例如(a&&b) && c,根据逻辑运算符的左结合性,表达式也可写为a && b && c

    逻辑表达式的值是式中各种逻辑运算的最后值,以1和0分别代表真和假。

    练习如下:

    #include <stdio.h>
    
    int main() {
    	char c = 'k';
    	int i = 1, j = 2, k = 3;
    	float x = 3e5, y = 0.85;
    	printf("%d, %d\n", !x*!y, !!!x);
    	printf("%d, %d\n", x||i&&j-3, i<j&&x<y);
    	printf("%d, %d\n", i==5&&c&&(j=8), x+y||i+j+k);
    	
    	return 0;
    }
    

    打印:

    0, 0
    1, 0
    0, 1
    
    

    三、if条件语句

    用if语句可以构成分支结构,它根据给定的条件进行判断,以决定执行某个分支程序段。

    1.if语句的3种形式

    第一种形式:

    if(表达式) 语句
    

    这也是基本形式,其语义是:
    如果表达式的值为真,则执行其后的语句,否则不执行该语句。
    其执行过程如下:
    if语句第一种形式

    练习:

    #include <stdio.h>
    
    int main() {
    	int a, b, max;
    	printf("Input two numbers:\n");
    	scanf("%d%d", &a, &b);
    	max = a;
    	if(a < b){
    		max = b;
    	}
    	printf("max=%d\n", max);
    	
    	return 0;
    }
    

    打印:

    Input two numbers:
    3 5
    max=5
    
    

    如果if语句成立执行的语句有多条,必须加大括号{},只有1条时,可以直接跟在后面不加大括号,但是为了养成良好的习惯,还是建议加上大括号,所以不用管if语句后的语句有多少条,都加上大括号,后面的else、switch等语句也相同。

    第二种形式(if-else):

    if(表达式)  
        语句1;
    else 
        语句2;
    

    执行过程图示如下:
    if语句第二种形式

    练习如下:

    #include <stdio.h>
    
    int main() {
    	int a, b, max;
    	printf("Input two numbers:\n");
    	scanf("%d%d", &a, &b);
    	if(a > b){
    		printf("max=%d\n", a);
    	}
    	else{
    		printf("max=%d\n", b);
    	}
    		
    	return 0;
    }
    

    打印:

    Input two numbers:
    5 3
    max=5
    
    

    第三种形式(if-else-if):

    if (表达式1)
        语句1;
    else if(表达式2)
        语句2;
    else if(表达式3)
        语句3;
    else if(表达式m)
        语句m;
    else
        语句n;
    

    前二种形式的if语句一般都用于两个分支的情况,当有多个分支选择时,可采用if-else-if语句。
    其执行过程如下:
    if语句第三种形式

    练习如下:

    #include <stdio.h>
    
    int main() {
    	char c;
    	c = getchar();
    	if(c < 32){
    		printf("This is a control character\n");
    	}
    	else if(c >= '0' && c <= '9'){
    		printf("This is a digit\n");
    	}
    	else if( c >= 'A' && c <= 'Z'){
    		printf("This is an uppercase letter\n");
    	}
    	else if(c >= 'a' && c <= 'z'){
    		printf("This is a Lowercase letter\n");
    	}
    	else{
    		printf("This is an other character\n");
    	}
    		
    	return 0;
    }
    

    打印:

    5
    This is a digit
    
    

    2.if语句的注意事项

    (1)在3种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。
    例如:

    if(a=5) 语句;
    if(b) 语句;
    

    这些都是允许的,只要表达式的值为非0,即为真。

    当if语句中的表达式是关系运算符表达式、判断两个值是否相等时,应该用 ==,而不是 =,举例说明如下:
    if(a == b)(假设b为常量)语句中,只有a等于b时,才会执行if后面的语句,但是if(a = b)语句,只有b为0时,才为假,不执行其后的语句,否则都会执行后面的语句,因为给a赋值不为0时,赋值表达式的值就等于给a赋的值,表达式的值不为0时即为真。

    练习如下:

    #include <stdio.h>
    
    int main() {
    	int a;
    	a = 2;
    	if(a == 3){
    		printf("a equals 3!!!\n");
    	}
    	else{
    		printf("a is %d\n", a);
    	}
    		
    	return 0;
    }
    

    打印:

    a is 2
    
    

    但是此时如果把if语句中的表达式改为a = 3,即如下:

    #include <stdio.h>
    
    int main() {
    	int a;
    	a = 2;
    	if(a = 3){
    		printf("a equals 3!!!\n");
    	}
    	else{
    		printf("a is %d\n", a);
    	}
    		
    	return 0;
    }
    

    打印:

    a equals 3!!!
    
    

    显然,此时出现了错误,明明给a赋值为2,打印结果却说a等于3;
    除此之外,现在的很多编译器在编译if(a = 3)时可能会有警告。

    如果在写代码时容易忽略,可以将 == 两边的值交换,例如if(3 == a),这种情况下,如果少写了一个等号,程序编译时就会报错,以提示修改。

    (2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。

    (3)在if语句的3种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。同时要注意在}之后不能再加分号。
    例如:

    if(a>b)
    {
        a++;
        b++;
    }
    else
    {
        a=0;
        b=10;
    }
    

    此时如果需要在if、else语句等后面加入新的语句,也会更方便,不容易出错。

    练习:

    写一个程序完成下列功能:
    1、输入一个分数score
    2、score<60 输出 E
    3、60 <=score <70 输出 D
    4、75 <=score <80 输出 C
    5、80 <=score <90 输出 B
    5、90 <=score 输出 A

    代码如下:

    #include <stdio.h>
    
    int main() {
    	int score;
    	printf("Input a score:\n");
    	scanf("%d", &score);
    	if(score < 60){
    		printf("F");
    	}
    	else if(score >= 60 && score < 70){
    		printf("D");
    	}
    	else if(score >= 70 && score < 80){
    		printf("C");
    	}
    	else if(score >= 80 && score < 90){
    		printf("B");
    	}
    	else{
    		printf("A");
    	}
    		
    	return 0;
    }
    

    打印:

    Input a score:
    75
    C
    

    练习:
    输入三个数a、b、c,要求按由小到大的顺序输出。
    实现思路:

    if a>b 将a和b对换;
    if a>c 将a和c对换;
    if b>c 将b和c对换。

    代码如下:

    #include <stdio.h>
    
    int main() {
    	int a, b, c, temp;
    	printf("Input 3 numbers:\n");
    	scanf("%d%d%d", &a, &b, &c);
    	if(a > b){
    		temp = a;
    		a = b;
    		b = temp;
    	}
    	if(a > c){
    		temp = a;
    		a = c;
    		c = temp;
    	}
    	if(b > c){
    		temp = b;
    		b = c;
    		c = temp;
    	}
    	printf("a=%d, b=%d, c=%d", a, b, c);
    		
    	return 0;
    }
    

    打印:

    Input 3 numbers:
    32 21 54
    a=21, b=32, c=54
    

    练习:
    输入三个整数,输出最大数和最小数。
    代码如下:

    #include <stdio.h>
    
    int main() {
    	int a, b, c, max, min;
    	printf("Input 3 numbers:\n");
    	scanf("%d%d%d", &a, &b, &c);
    	if(a > b){
    		max = a;
    		min = b;
    	}	
    	else{
    		max = b;
    		min = a;
    	}
    	if(max < c){
    		max = c;
    	}
    	else if(min > c){
    		min = c;
    	}
    
    	printf("max=%d, min=%d", max, min);
    		
    	return 0;
    }
    

    打印:

    Input 3 numbers:
    3 5 4
    max=5, min=3
    

    练习:
    一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,求出该数是多少。
    代码如下:

    #include <stdio.h>
    #include <math.h>
    
    int main() {
    	long x, y, i;
    	for(i = 1;i <= 100000;i++){
    		x = sqrt(i + 100);
    		y = sqrt(i + 268);
    		if(x * x == i + 100 && y * y == i +268){
    			printf("%ld\n", i);
    		}
    	}
    			
    	return 0;
    }
    

    打印:

    21
    261
    1581
    
    

    此例中用到的for语句是循环,会在后面讲到。

    3.if语句的嵌套

    当if语句中的执行语句又是if语句时,则构成了if语句嵌套的情形。
    其一般形式可表示如下:

    if(表达式)  
        if语句;
    

    或者为

    if(表达式)  
        if语句;
    else  
        if语句;
    

    在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。
    例如:

    if (表达式1)
    if (表达式2)
        语句1;
    else 
        语句2;
    

    其中的else应该与哪一个if配对呢?
    为了避免这种二义性,C语言规定,else总是与它前面最近的if配对,即采用就近原则,因此对上述例子应理解如下:

    if (表达式1)
        if (表达式2)
            语句1;
        else
            语句2;
    

    练习如下:

    #include <stdio.h>
    
    int main() {
    	int a, b;
    	printf("Please input A, B:\n");
    	scanf("%d%d", &a, &b);
    	if(a != b){
    		if(a > b){
    			printf("a > b");
    		}
    		else{
    			printf("a < b");
    		}
    	}
    	else{
            printf("a = b");
        }
    		
    	return 0;
    }
    

    打印:

    Please input A, B:
    23 32
    a < b
    

    采用嵌套结构实质上是为了进行多分支选择。
    在上例中有三种选择即A>B、A<B和A=B,这种问题用if-else-if语句也可以完成,而且程序更加清晰,如下:

    #include <stdio.h>
    
    int main() {
    	int a,b;
        printf("please input A,B:\n");
        scanf("%d%d",&a,&b);
        if(a==b)
            printf("A=B\n");
        else if(a>b)
            printf("A>B\n");
        else
            printf("A<B\n");
    		
    	return 0;
    }
    

    因此,在一般情况下较少使用if语句的嵌套结构,以使程序更便于阅读理解。

    四、条件运算符和条件表达式

    1.基本概念

    条件运算符为?和:,它是一个三目运算符,也是C语言中唯一一个三目运算符,即有三个参与运算的量。

    由条件运算符组成条件表达式的一般形式为:

    表达式1?表达式2:表达式3
    

    其求值规则为:
    如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。

    条件表达式经常用于赋值语句中。
    例如条件语句:

    if(a>b)  max=a;
    else max=b;
    

    可用条件表达式写为max=(a>b)?a:b;
    执行该语句的语义是:如a>b为真,则把a赋予max,否则把b赋予max。

    2.注意事项

    (1)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符
    因此max=(a>b)?a:b可以去掉括号写为max=a>b?a:b

    (2)条件运算符?和:是一对运算符,不能分开单独使用

    (3)条件运算符的结合方向是自右至左
    例如,a>b?a:c>d?c:d应理解为a>b?a:(c>d?c:d)
    这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。

    练习如下:

    #include <stdio.h>
    
    int main() {
    	int a, b, max;
    	printf("Input two numbers:\n");
    	scanf("%d%d", &a, &b);
    	printf("max=%d", a>b?a:b);
    		
    	return 0;
    }
    

    打印:

    Input two numbers:
    35 53
    max=53
    

    显然,和之前使用if-else语句的效果是一样的。

    练习:
    输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,则不转换。然后输出最后得到的字符。
    代码如下:

    #include <stdio.h>
    
    int main() {
    	char c, d;
    	printf("Input a character:\n");
    	scanf("%c", &c);
    	d = (c >= 'A' && c <= 'Z')?c + 32:c;
    	printf("d=%c", d);
    		
    	return 0;
    }
    

    打印:

    Input a character:
    F
    d=f
    

    五、switch语句

    1.基本概念

    C语言还提供了另一种用于多分支选择的switch语句,其一般形式为:

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

    其语义是:
    计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。
    如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
    表达式的值可以是int、char和枚举型中的一种。

    练习如下:

    #include <stdio.h>
    
    int main() {
    	int a;
    	printf("Input a integer number:\n");
    	scanf("%d", &a);
    	switch(a){
    		case 1: printf("Monday\n");
    		case 2: printf("Tuesday\n");
    		case 3: printf("Wednesday\n");
    		case 4: printf("Thursday\n");
    		case 5: printf("Friday\n");
    		case 6: printf("Saaturday\n");
    		case 7: printf("Sunday\n");
    		default:printf("Error\n");		
    	}
    		
    	return 0;
    }
    

    打印:

    Input a integer number:
    3
    Wednesday
    Thursday
    Friday
    Saaturday
    Sunday
    Error
    
    

    显然,当输入3时,将星期三及以后的所有都打印出来,这显然不是我们想要的,我们需要的是输入3只打印出Wednesday即可,此时需要使用break,用于跳出switch语句。
    break语句只有关键字break,没有参数,当匹配到一个条件时,执行完该语句后即退出switch语句。
    改进如下:

    #include <stdio.h>
    
    int main() {
    	int a;
    	printf("Input a integer number:\n");
    	scanf("%d", &a);
    	switch(a){
    		case 1: printf("Monday\n");break;
    		case 2: printf("Tuesday\n");break;
    		case 3: printf("Wednesday\n");break;
    		case 4: printf("Thursday\n");break;
    		case 5: printf("Friday\n");break;
    		case 6: printf("Saaturday\n");break;
    		case 7: printf("Sunday\n");break;
    		default:printf("Error\n");		
    	}
    		
    	return 0;
    }
    

    打印:

    Input a integer number:
    3
    Wednesday
    
    

    switch中的值除了变量,还可以是表达式,如switch(a + 2)

    2.注意事项

    (1)在case后的各常量表达式的值不能相同,否则会出现错误。
    (2)在case后,允许有多个语句,可以不用{}括起来,但是建议使用括号包含,使代码结构更美观;如果在case语句中声明变量,此时必须加{},因为switch中的所有case语句在同一个作用域,所以在某个case下面声明变量的话,其他case语句也能访问到,这样就会导致错误、编译不能通过,加上{}的作用是限定作用域,让局部变量只在某个作用域有效。
    (3)各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
    (4)default子句可以省略不用。

    练习:
    计算器程序,用户输入运算数和四则运算符,输出计算结果。
    代码如下:

    #include <stdio.h>
    
    int main() {
    	double a, b;
    	char c;
    	printf("Input an expression(a+(-*/)b)):\n");
    	scanf("%lf%c%lf", &a, &c, &b);
    	switch(c){
    		case '+':{
    			printf("%lf+%lf=%lf", a, b, a + b);
    			break;
    		}
    		case '-':{
    			printf("%lf-%lf=%lf", a, b, a - b);
    			break;
    		}
    		case '*':{
    			printf("%lf*%lf=%lf", a, b, a * b);
    			break;
    		}
    		case '/':{
    			printf("%lf/%lf=%lf", a, b, a / b);
    			break;
    		}
    	}
    			
    	return 0;
    }
    

    打印:

    Input an expression(a+(-*/)b)):
    3.2/2.3
    3.200000/2.300000=1.391304
    

    练习:
    输入一个年份,并判断是否为闰年。
    实现思路:
    判断闰年的条件:能被4整除、但不能被100整除或者能被400整除的年份都是闰年。
    代码如下:

    #include <stdio.h>
    
    int main() {
    	int year, leap; // leap是判断闰年的标志,值为1表示闰年,为0表示非闰年
    	printf("Input a year:\n");
    	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 a leap year", year);
    	}
    	else{
    		printf("%d is not a leap year", year);
    	}
    			
    	return 0;
    }
    

    打印:

    Input a year:
    1900
    1900 is not a leap year
    

    代码也可以简化如下:

    #include <stdio.h>
    
    int main() {
    	int year, leap;
    	printf("Input a year:\n");
    	scanf("%d", &year);
    	if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
    		leap = 1;
    	}
    	else{
    		leap = 0;
    	}
    	if(leap){
    		printf("%d is a leap year", year);
    	}
    	else{
    		printf("%d is not a leap year", year);
    	}
    			
    	return 0;
    }
    

    练习:
    运输公司对用户计算运费。

    路程(s)越远,每公里运费越低。标准如下:
    s < 250 没有折扣
    250 <= s < 500 2%折扣
    500 <= s < 1000 5%折扣
    1000 <= s < 2000 8%折扣
    2000 <= s < 3000 10%折扣
    3000 <= s 15%折扣
    设每公里每吨货物的基本运费为p,货物重为w,距离为s,
    折扣为d,则总运费f的计算公式为:
    f=p * w * s * (1 - d)
    代码如下:

    #include <stdio.h>
    
    int main() {
    	int c, s;
    	double p, w, d, f;
    	printf("Input fee p, weight w, distance s:\n");
    	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("Pay is %15.2f", f);
    			
    	return 0;
    }
    

    打印:

    Input fee p, weight w, distance s:
    20, 3000, 500
    Pay is     28500000.00
    

    除了用switch语句,也可以用if语句实现。

    练习:
    输入某年某月某日,判断这一天是这一年的第几天。
    代码如下:

    #include <stdio.h>
    #include <math.h>
    
    int main() {
    	int day, month, year, sum, leap;
    	printf("Input a date(xxxx-xx-xx):\n");
    	scanf("%d-%d-%d", &year, &month, &day);
    	switch(month){
    		case 1:{
    			sum = 0;
    			break;
    		}
    		case 2:{
    			sum = 31;
    			break;
    		}
    		case 3:{
    			sum = 59;
    			break;
    		}
    		case 4:{
    			sum = 90;
    			break;
    		}
    		case 5:{
    			sum = 120;
    			break;
    		}
    		case 6:{
    			sum = 151;
    			break;
    		}
    		case 7:{
    			sum = 181;
    			break;
    		}
    		case 8:{
    			sum = 212;
    			break;
    		}
    		case 9:{
    			sum = 243;
    			break;
    		}
    		case 10:{
    			sum = 273;
    			break;
    		}
    		case 11:{
    			sum = 304;
    			break;
    		}
    		case 12:{
    			sum = 334;
    			break;
    		}
    		default:{
    			printf("Input Error!!!");
    			break;
    		}
    	}
    	sum += day;
    	if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0){
    		leap = 1;
    	}
    	else{
    		leap = 0;
    	}
    	if(month > 2 && leap){
    		sum++;
    	}
    	printf("sum of days is %d", sum);
    			
    	return 0;
    }
    

    打印:

    Input a date(xxxx-xx-xx):
    2020-4-21
    sum of days is 112
    
    展开全文
  • 4.1.顺序结构:秉承从上到下,从做到右的运行规则,如下图: [](javascript:void(0)???? #顺序结构 xiaoming = "我很帅。" xiaoliu = "小明你的确很帅,但是不能当饭吃啊!...print("小明说:"+xiaoming,...4.2.分支
  • 一个 if 语句后可跟一个可选的 else 语句,else 语句在布尔表达式为 false 时执行。语法: --------------------------------------------------------------------- if(boolean_expression) { /* 如果布尔表达式为真...
  • 1.哪个选项是实现多路分支的最佳控制结构?(5.0分) A、if B、if-elif-else C、try D、if-else 2. 关于程序的控制结构,哪个选项的描述是错误的?(5.0分) A、流程图可以用来展示程序结构 B、顺序结构有一个入口 C...
  • 2.2 分支结构-if语句

    2016-06-11 10:23:47
    if语句是实现分支结构的常用分支语句之一,另外还有条件运算符、switch语句等。 if语句的功能是:根据给定条件,选择程序执行方向。 if语句的基本格式 “if语句”又称条件语句,其基本格式为:  if(表达式)...
  • python:分支结构之分段函数

    千次阅读 2020-08-16 09:45:02
    本题目要求计算下列分段函数f(x)的值(x为从键盘输入的一个任意实数): 输入格式: 输入在一行中给出实数 x。 输出格式: 在一行中按“f(x)=result”的格式输出,其中x与result都保留两位小数。 输入样例: 0.76 输出...
  • 第四章分支结构实验

    2019-04-11 17:48:00
    第四章 分支结构实验 第二次实验报告 实验项目: 1、if语句的应用 2、switch/case语句的应用 3、switch/case语句嵌套if语句的应用 4、switch/case语句的嵌套应用 5、分析程序 姓名:徐溢璠 实验地点:教学楼...
  • 分支结构和循环结构

    2019-02-28 17:54:32
    一、分支结构  当需要在程序进行条件判断来决定是否执行后面代码的场合中,可以使用分支结构。  (1)if :如果成立则执行下列语句 如果不成立则不执行语句  (2)if else :  if{ 语句一 } else{ 语句二} 代表 ...
  • (C语言)实验3 分支结构程序设计

    千次阅读 2020-04-09 23:17:58
    3、理解C语言程序的顺序结构、分支结构、循环结构以及if…else、for语句的使用。 【实验要求】 1、实验共5题每题20分,共100分; 2、实验需在截至日期前提交实验平台,截止日上传答案,同学互...
  • 分支结构实验

    2019-07-09 13:04:00
    第四章 分支结构实验 C程序设计实验报告 实验项目: 1、if语句的应用 2、switch/case语句的应用 3、switch/case语句嵌套if语句的应用 4、switch/case结构的嵌套应用 5、分析程序 姓名:陈建清 实验地点: ...
  • 分支结构程序设计 第一课 关系运算符 1 C++中六种关系运算符:>(大于),<(小于),>=(大于或等于),<=(小于或等于),==(等于), !=(不等于)。 2 关系表达:由关系表达式连接起来的表达式。 关系...
  • 分支结构if else if

    2020-04-18 21:00:36
    1. 分支结构if else if 1.1代码运行过程中的常见结构 顺序结构: 代码从上到下,从左至右执行,最基本原则。 分支结构: 代码满足不同的条件,执行不同的结果。 循环结构: 代码中存在需要多次执行的情况,这里...
  • 1. 任务描述 计算分段函数的值并输出(x取整型即可) x &amp;gt;= 1 时,y = x-1; x &amp;lt; 1 时,y = -x +1 。 2. 代码实现 /* *Copyright(c)2019,yafangma@126.com ...*问题描述:计算分...
  • import math a=int(input("第一条边:")) b=int(input("第二条边:")) c=int(input("第三条边:")) if (a < b): t=a a=b b=t if (a < c): t=a a=c c=t if (b < c): ... s=math.sqr.
  • 分支结构程序设计总结 1.c++中的关系运算符:>(大于),(小于),>=(大于或等于),<=(小于或等于),(等于),!=(不等于)。 2.由关系运算符连接起来的表达式称为关系表达式。 3.关系表达式的结构是一个逻辑值“真”...
  • 分支结构 if语句分支结构的语法形式如下: if条件表达式: 语句/语句块 其中 1、条件表达式:可以是逻辑表达式,关系表达式,算术表达式等等。 2、语句/语句块:可以是一条语句,也可以是多条语句,多条语句...
  • 1.在c++中,提供了六种关系运算符,包括>,<,>=,<=,==,!=(其中等于是两个等号,赋值是一个等号)。 2.在c++中 通常用0表示假,1表示真。..."请分别写出下列表达式的值 1)x+y&...
  • 用格式控制(在输出格式控制方面,C语言功能很强,但用分支实现的方法,可以作为一次思维训练) #include int main ( ) { int h, m ; printf ( "输入小时和分钟" ); scanf( " %d %d " , &h, & m ); ...
  • 问题及描述: /* * Copyright (c) 2014, 烟台大学计算机... * All rights reserved. * 文件名称:test.cpp * 作 者:李尚泽 * 完成日期:2014年10月21日 * 版 本 号:v1.0 ... * 问题描述:计算函数的值。...=x<...
  • 用switch语句构成多分支结构求解

    千次阅读 2013-10-23 17:15:17
    /* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 作 者: 高古尊 * 完成日期:2013 年10月23日 * 版 本 号:v1.0 * 问题描述:计算分段函数的值。...#include
  • 实验三 分支结构程序设计

    千次阅读 2019-04-28 21:24:25
    实验三 分支结构程序设计 1.有下列函数,写一段程序,用cin语句输入x的值,求y的值 x (x<1) y= 2x-1 (1<=x<10) 3x-11 (x>=10) #include <iostream> using namespace std; int main() {...
  • } } 多分支结构本质上是二分支结构或单分支结构间的组合。 如果if或else下面的代码块里只有一行语句,我们可以省略“{}”,如下面的代码: #include void main() { int a = 1; if(a > 0) printf("a是正数"); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,319
精华内容 5,327
关键字:

下列是分支结构的语句是