跳转至

第四周 进一步的判断与循环

一、逻辑运算

1、bool型

#include <stdio.h>
#include <stdbool.h>        //需要该库

int main(void)
{
    bool b = 6 > 5;
    bool t = true;
    t = 2;
    printf("%d\n", b);
    return 0;
}

2、

运算符 描述 实例 结果
!a 如果a是true结果就是false,反之
&& a && b 如果a和b都是true则true
|| a || b 其中一者真为真

表达x∈(4,6) x>4 && x<6

表达x∈[4,6] x>=4 && x<=6

判断字符是否是大写字母 a>'A' && a<'Z'

优先级:!> && > ||

若左边即能产生结果,不进行右边的运算

3、条件运算符和逗号运算符

  • 条件运算符
if (count > 20)
    count = count - 10;
else
    count = count + 10;

/*相当于
count = (count > 20)? count - 10 : count + 10;

优先级:仅高于赋值运算符

  • 逗号运算符

优先级低于一切

结果是逗号后的

主要在for函数中使用

for (i=0,j=10;i<j;i++,j--)

二、嵌套if-else

  • 无花括号,else总是匹配最近的未匹配的if

三、多路分支

switch (控制表达式){     //表达式必须是int或char类型
    case 常量:        //必须是常量
        语句
        break;      //break结束
    case 常量:
        语句


    default:
        语句
}
  • 表达式必须是int类型
  • case是从这里开始语句,break结束语句
//switch-case
#include <stdio.h>
int main(void)
{
    int type;
    scanf("%d",&type);

    switch(type){
        case 1:
            printf("你好");
            break;
        case 2:
            printf("早上好");
            break;
        case 3:
            printf("晚上好");
            break;
        case 4:
            printf("再见");
            break;
        default:
            printf("啊?什么啊?");
    }
    return 0;
}

四、循环的例子

  1. 循环计算
//2的几次方
#include <stdio.h>
int main(void)
{
    int x,y = 0;
    scanf("%d",&x);
    for(;x > 1;x /= 2){
        y++;
    }
    /*
    do {
        y++;
        x /= 2;
    } while(x>1);
    */
    printf("%d",y);
    return 0;
}
  • 确定特殊的值

  • 算平均数

#include <stdio.h>
int main(void)
{
    int ave, sum, time, num;
    num = 0, sum = 0, time = 0;
    while (num != -1){
        scanf("%d",&num);
        sum = sum + num;
        time ++;
    }
    if (num = -1)
        sum++,time--;
    ave = sum / time;
    printf("%d %d",ave,time);

    return 0;
}
#include <stdio.h>
int main()
{
    int num, sum = 0, time = 0, ave;
    do{
        scanf("%d",&num);
        if (num != -1){
            sum += num;
            time ++;
        }
    } while (num != -1);
    ave = sum / time;
    printf("%d %d",ave,time);

    return 0;
}
#include <stdio.h>
int main()
{
    int num, sum = 0, time = 0, ave;
        scanf("%d",&num);
        while (num != -1){
            sum += num;
            time ++;
            scanf("%d",&num);
        }

    ave = sum / time;
    printf("%d %d",ave,time);

    return 0;
}
  1. 猜数

  2. 核心重点是循环的条件

  3. 人们往往会考虑循环终止的条件
  4. 实际写出程序之前,我们可以先用文字描述程序的思路
#include <stdio.h>
#include <stdlib.h>     //??????
#Inlcude <time.h>       //?????
int main(void)
{
    srand(time(0));     //?????
    int num = rand()%100+1;     //随机数
    int count = 0, a;
    do{
        scanf("%d",&a);
    if (a > num){
        printf("大了\n");
        count ++;}
    else if (a < num){
        printf("小了\n");
        count++;}
    }while (num != a);

    printf("猜中 %d",count);

    return 0;
}
  1. 整数求逆
#include <stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    int ret = 0;
    do{
        int num = a % 10;
        ret = ret * 10 + num;       //逻辑
        a /= 10;
    }while( a > 0);
    printf("%d",ret);
    return 0;
}

五、问题

  • 忘了大括号:每次都加上