流程控制基本概念

  • 顺序结构:默认的流程结构,按照书写顺序从上到下的执行

  • 选择结构:对给定的条件进行判断,根据判断的结果来决定执行那一段代码

  • 循环结构:在给定条件成立的情况下,反复执行某一段代码

    选择结构 if

  • 第一种格式

    // 第一种结构
    /*
     if (条件表达式){
        代码块
     } // 如果条件表达式成立执行代码块
     */
    int age = 18;
    if (age >= 18){
        printf("你可以去上网吧了\n");
    }
    printf("end\n");
    
    if (age < 17){ // 条件满足执行代码块,不满足直接执行 end
        printf("你可以去上网吧了\n");
    }
    printf("end\n");
  • 第二种格式
    // 第二种结构
    /*
     if (条件表达式){ // 如果条件表达式成立执行代码块1
        代码块1
     }  else{       // 如果条件表达式不满足执行代码块 2
        代码块 2
     }
     */
    int age = 10;
    if(age >= 18){
        printf("你可以去上网吧了\n");
    }else{
        printf("小屁孩未满十八周岁,回家洗洗睡吧\n");
    }
  • 第三种格式
    // 第三种格式
    /*
     if (条件表达式){ // 如果条件表达式成立执行代码块1
        代码块1
     }
     else if(条件表达式 2) {       // 如果条件表达式2不满足执行代码块 2
        代码块 2
     }
     else if(条件表达式 3){          // 如果条件表达式2不满足执行代码块 2
     
     }
     else{                      // 如果前面的都没有满足,就会执行 else 中的代码块
     
     }
     // 只要条件表达式为真了,后面的 else if就不会执行了
     // 如果前面的都没有满足,就会执行 else 中的代码块
     // 众多的大括号只会执行一个
     // 如果执行到后面的d条件表达式,就代表掐面的表达式都不成功
     */
    int age = 6;
    if (age == 1){
        printf("该走路了");
    }else if (age == 6)
    {
        printf("该上学了");
    }else if(age == 18)
    {
        printf("你可以进入网吧了");
    }else{
        printf("你可以随便干一些事情了");
    }
  • 第五种格式 if 的嵌套使用
    // 第五种格式 if 中的嵌套
    /*
    if (条件表达式 1){
        代码块
        if (嵌套中的条件表达式 1-1){
            代码块
            if ( 嵌套中的条件表达式 1-1-1){
                 代码块
            }
        }
    }
    */
    int number = 0;
    if (number > 3){
        if (number < 10){
            printf("number 是在 3-10 之间的数字\n");
        }else{
            printf("number 是在大于 10的数字\n");
        }
    }else{
        printf("number 是在 小于 3 的数字\n");
    }
  • if 的练习题
    // if 练习
    /*
    // 从键盘c输入一个整数,判断是奇数还是偶数,偶数输出 yes,奇数c输出 no
    printf("请您输入一个整数,以回车结束\n");
    int number = 0;
    scanf("%i",&number);
    if (number % 2 == 0){
        printf("YES");
    }else{
        printf("NO");
    }
    */
   
 // 根据用户输入的 1-7 的整数,输出对应的星期几
    // 使用 else if 可以保证只执行一个代码块,执行后就不会继续往下执行,如果z使用多个 if,就是从上往下执行一个一个来
    int number = -1;
    printf("请输入一个1-7 的数字,我们将为您显示星期几");
    scanf("%i",&number);
    if(number > 7 || number < 1){
        printf("哪有这样的星期呢?\n");
    }
    if(number == 1){
        printf("星期一");
    }else if (number == 2)
    {
        printf("星期二");
    }else if (number == 3)
    {
        printf("星期三");
    }else if (number == 4)
    {
        printf("星期四");
    }else if (number == 5)
    {
        printf("星期五");
    }else if (number == 6)
    {
        printf("星期六");
    }else if (number == 7)
    {
        printf("星期日");
    }
    
    // 接收s用户输入的一个整数,根据月份输出对应的季节
    // 3-5春季,6-8 夏季,9-11 秋季,12,1,2 冬季
    printf("n请您输入一个1-12 之间的月份,以回车结束\n");
    int month = -1;
    scanf("%i",&month);
    if (month < 1 || month > 12){
        printf("一年就 12 个月,不会给你多发工资的\n");
    }else if (month >= 3 && month <= 5 )
    {
        printf("春季\n");
    }else if (month >= 6 && month <= 8 )
    {
        printf("夏季\n");
    }else if (month >= 9 && month <= 11 )
    {
        printf("秋季\n");
    }else{
        printf("冬季\n");
    }

// 注意点在于冬季的判断,12,1,2,此时可以利用 else if 只会执行一个条件表达式的代码块的特点,开头排除掉大于 12,和小于 1 的数字,剩下的数字肯定会走到下面的判断中,春季,夏季,秋季都好弄.
    //键盘输入两个整数,判断大小后输出较大的内个数
    int num1 = -1,num2 = -1;
    printf("请输入两个整数,以回车结束\n");
    scanf("%i,%i",&num1,&num2);
    if (num1 > num2){
        printf("%i\n",num1);
    }else if(num1 < num2 )
    {
        printf("%i\n",num2);
    }else{
        printf("您输入的两个数相等\n");
    }
    
    // 但是使用三目运算符是不是更简单呢?
    int max = num1 > num2 ? num1 : num2;
    printf("您输入的两个数的最大值是:%i\n",max);
    // 这两种方式的对比,三目运算符可以快速的找出最大值,但是 if,else 可以找到这个最大值,而且还可以对此变量进一步的操作

    // 从键盘输入l三个数,输出最大的内个数
    int num1,num2,num3;
    printf("请输入a三个数,以逗号分割,回车结束");
    scanf("%i,%i,%i,",&num1,&num2,&num3);
    if (num1 > num2){
        if (num1 > num3){
            printf("最大值是:%i\n",num1);
        }
        else{
            printf("最大值是:%i\n",num3);
        }
    }else{
        if(num2 > num3){
            printf("最大值是:%i\n",num2);
        }
        else{
            printf("最大值是:%i\n",num3);
        }
    }
    // 判断大小,交换变量的值
    int num1,num2,num3;
    printf("请输入a三个数,以逗号分割,回车结束");
    scanf("%i,%i,%i,",&num1,&num2,&num3);
    if (num1 < num2){
        int temp = num1;
        num1 = num2;
        num2 = temp;
    }
    if (num1 < num3)
    {
        int temp = num1;
        num1 = num3;
        num3 = temp;
    }
    if (num2 < num3)
    {
        int temp = num2;
        num2 = num3;
        num3 = temp;
    }
    printf("%i,%i,%i,",num1,num2,num3);
  • if 的注意点

    • 任何数值都有真假性,非 0 既是真,
        if (1){
            printf("你好\n");
        }else{
            printf("走不到这里");
        }
    
    • if条件判断后面最好加上大括号(如果省略大括号只会执行离他最近的一条语句)
    if (1)
        printf("你好");
    printf("end");
    
    • If条件表达式没有加大括号,而且写了分号时,(分号也是一个语句)
    if(1);
    	printf("nihao");
    printf("end");
    // 此时只会执行 end,因为条件表达式后面有一个分号,分号是一个语句
    
    • 如果要在 if里面定义变量,那么必须要写上大括号,不然会报错
    if (1)
        int number = 20;  
    printf("%i\n",number); // 没有大括号此时是报错的,因为if 后面没有写大括号只会管离得最近的一条语句,而在后面有要打印 number 的值,在这个作用域中找不到 number 变量,
    printf("end");
    

石头剪刀布

    // 练习 石头剪刀布
    // 有两个玩家,我,电脑
    // 两个角色都可以出石头,剪刀,布
    int computerNum = arc4random_uniform(3); // 生成随机数
    int userNum;
    printf("请您输入石头,剪刀,布--石头:0,剪刀:1,布:2\n");
    scanf("%i",&userNum);
    printf("电脑出:%i,玩家出:%i\n",computerNum,userNum);
    if (userNum > 2 || userNum < 1){
        printf("玩家莫要作弊");
    }else if((userNum == 0 && computerNum == 1) ||
       (userNum == 1 && computerNum == 2) ||
       (userNum == 2 && computerNum == 0)){
        printf("玩家获胜");
    }else if ((userNum == 0 && computerNum == 2) ||
              (userNum == 1 && computerNum == 0) ||
              (userNum == 2 && computerNum == 1))
              {
                  printf("电脑获胜");
    }
    else{
        printf("平局");
    }
posted on 2020-05-17 00:01  python我学的很菜  阅读(627)  评论(0编辑  收藏  举报