一.3C语言的分支与循环(1)

1.if语句
1.1if
if(表达式)//表达式:真:非0  假:0
   语句
表达式成立为真,则语句执行;表达式不成立为假,则语句不执行
输入一个数,判断是否为奇数
int main()
{
    int num = 0;
    scanf("%d", &num);
    if (num % 2 == 1)
        printf("%d是奇数\n", num);
    return 0;
}

1.2else
if (表达式)
    语句1;
else
    语句2;
输入一个数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数
}
输入一个年龄>=18岁就输出成年,否则就输出未成年
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age >= 18)
        printf("成年\n");
    else
        printf("未成年\n");
    return 0;
}


1.3分支包含多条语句
if (age >= 18)
{
    printf("成年\n");
    printf("可以谈恋爱");

}

1.4嵌套if
在if else语句中,else可以与另一个if语句连用,构成多重判断
例如:输入一个整数,判断输入的整数是零,还是正数或负数
例1:int main()
{
    int n = 0;
    scanf("%d", &n);
    if (n == 0)//判断
        printf("输入的值是0\n");
    else
    {
        if (n > 0)
            printf("输入的是正数\n");
        else
            printf("输入的是负数\n");
    }
    return 0;
}


例2:int main()
{
    int n = 0;
    scanf("%d", &n);
    if (n == 0)//判断
        printf("输入的值是0\n");
    else if (n > 0)
        printf("输入的是正数\n");
    else
        printf("输入的是负数\n");
    return 0;
}


输入一个年龄
如果<18岁打印少年
如果在18岁到44岁打印青年
如果在44岁到59岁打印中老年
如果在60岁到89岁打印老年
如果90岁以上打印老寿星
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
        printf("少年\n");
    else
    {
        if (age <= 44)
            printf("青年\n");
        else
        {
            if (age <= 59)
                printf("中老年\n");
            else
            {
                if (age <= 89);
                    printf("老年\n");
                else
                    printf("老寿星\n");
            }
        }
    }
    return 0;
}

1.5悬空else问题
如果有多个if和esle,可以记住这样一条规则,else总是跟最近的if匹配
int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)
        if (b == 2)
            printf("hehe\n");
        else
            printf("haha\n");
    return 0;
}

2.关系操作符
>大于
<小于 
>=大于等于 
<=小于等于 
==等于 
!=不等于
关系表达式通常返回0或1,表示真假
int main()
{
    int a = 6;
    printf("%d\n", a==6);
    printf("%d\n", a==5);
    return 0;
}


通常运用于if或while
int main()
{
    int x = 0;
    if (x == 3)
        printf("hehe"\n);
    return 0;
}


当我们拿一个变量和一个常亮比较是否相等的时候
int main()
{
    int x = 0;
    //if (x == 3)
        //printf("hehe"\n);
    if (3 == x)
        pritnf("hehe\n");
    return 0;
}


多个运算符不易连用:i<j<k
int main()
{
    int a = 0;
    int b = 20;
    int c = 5;
    if (a < b < c)//应用(a<b&&b<c)
        printf("hehe\n");
    else
        printf("haha\n");

    return 0;
}


我们输入一个年龄,如果在18~36岁之间,我们输出青年
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age >= 18&&age<=36)
        printf("青年\n");

    return 0;
}

3.条件操作符:也叫三目操作符
表达式1   ?  表达式2  :表达式3
表达式1如果结构为真,表达式2 计算,计算结果是整个表达式结果;如果表达式1为假,表达式3计算,
计算结果是整个表达式的结果。
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d", & a);
    if (a > 5)
        b = 3;
    else
        b = -3;
    b = (a > 5 ? 3 : -3);
    printf("%d\n", b);
    return 0;
}


练习2使用条件表达式实现找两个数中较大值
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d%d", &a, &b);
    int m = 0;
    m = (a > b ? a : b);
    printf("%d\n", m);
    return 0;
}

4.逻辑操作符:&& || !
!:逻辑取反运算符
&&:逻辑与运算符
||:逻辑或运算符
4.1逻辑取反运算符!
int main()
{
    int flag = 0;//需要初始化,如果一个变量不初始化,它的值的为随机值
    if (!flag)//一个全局变量不初始化,它的值是0
        printf("do some thing\n");
    return 0;
}
4.2逻辑与运算符
int main()
{
    int month = 0;
    scanf("%d", &month);
    if (month >= 3 && month <= 5)
        printf("春季\n");
    return 0;
}


4.3逻辑或运算符
int main()
{
    int month = 0;
    scanf("%d", &month);
    if (month == 12 || month == 1 || month == 2)
        printf("冬季\n");
    return 0;
}


输入一个年份,判断是否为闰年
判断闰年的规则:
1.能被4整除,并且不能被100整除
2.能被400整除是闰年
例1.int main()
{
    int year = 0;
    scanf("%d", &year);
    if (year % 4 == 0)
    {
        if (year % 100 != 0)
            printf("闰年\n");
    }
    if(year % 400 == 0)
        printf("闰年\n");
    return 0;
}
例2.int main()
{
    int year = 0;
    scanf("%d", &year);
    if((year % 4 == 0)&&(year % 100 !=0)||(year % 400 == 0))        
        printf("闰年\n");
    return 0;
}
例3.int main()
{
    int year = 0;
    scanf("%d", &year);
    if ((year % 4 == 0) && (year % 100 != 0))
        printf("闰年\n");
    else if(year % 400 == 0)
        printf("闰年\n");
    return 0;
}

4.5短路
c语言的逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右侧的表达式求值,这个顺序是保证的
,如果左边的表达式满足逻辑运算符条件,就不再对右边的表达式求值。这种情况叫“短路”
if (month >=3 && month <=5)
if (month ==12 || month ==1 ||month ==2)
像这种仅仅根据左边操作符的结果就能知道整个表达式结果,不再对右操作符进行计算的运算称为短路求值
总结:
&& 左边为假,右边无需计算,整体为假 
|| 左边为真,右边无需计算,整体为真
int main()
{
    int i = 0, a = 0, b = 2, c = 3, d = 4;
    i = a++ && ++b && d++;// a++ || ++b || d++ 1 3 3 4 1
    printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d);
    printf("i=%d", i);//
    return 0;
}


int main()
{
    int i = 0, a = 1, b = 2, c = 3, d = 4;
    i = a++  ++&&b && d++;// a++ || ++b || d++  //2 2 3 4 1 
    printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d);//2 3 3 5 1
    printf("i=%d", i);
    return 0;
}

5.switch语句
switch语句是一种特殊形式的if else结构,用于判断条件有多个结果的情况。它把多重的else if改成更易用、可读性更好的形式。
switch(表达式)
    case1 
    case2 
    case3
    default :
switch后的expression必须为整型常量表达式
case后的值,必须是整型常量表达式
int main()
{
    int n = 0;
    scanf("%d", &n);
    if (n % 3 == 0)
        printf("整除了,余数是0\n");
    else if ("n%3 == 0")
        printf("余数是1\n");
    else
        printf("余数是2\n");
    return 0;
}


int main()
{
    int n = 0;
    scanf("%d", &n);
    switch (n % 3)
    {
    case 0:
            printf("整除了,余数是0\n");
            break;
    case 1:
            printf("余数是1\n");
            break;
    case 2:
            printf("余数是2\n");
            break;
    }
    return 0;
}


注意:1.case和后边的数字之间必须有空格
2.每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句

5.2switch语句中的break
练习:输入一个1~7的数字,打印对应的星期几
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
        printf("星期一\n");
        break;
    case 2:
        printf("星期二\n");
        break;
    case 3:
        printf("星期三\n");
        break;
    case 4:
        printf("星期四\n");
        break;
    case 5:
        printf("星期五\n");
        break;
    case 6:
        printf("星期六\n");
        break;
    case 7:
        printf("星期天\n");
        break;
    }
    return 0;
}


需求发生改变:输入1~5,输出工作日
输入6~7,输出休息日
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n");
        break;
    case 6:
    case 7:
        printf("休息日\n");
        break;
    }
    return 0;
}

5.3switch语句中的 default
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n");
        break;
    case 6:
    case 7:
        printf("休息日\n");
        break;
    default:
        printf("输入错误\n");
        break;
    }
    return 0;
}


5.4switch语句中的case和default的顺序问题
没有明确的顺序要求
6.while循环6
6.1 if和while的区别
if (表达式)
    语句;
while (表达式)
    语句;
int main()
{
    if (1)
        printf("hehe\n");
    return 0;
}


6.2while语句的执行流程
首先上来就是执行判断表达式,表达式为0,循环直接结束;表达式的值不为0,则执行循环语句,语句
执行完后再继续判断,是否进行下一次判断。
6.3while循环的实战
练习:在屏幕上打印1~10
int main()
{
    int i = 1;
    while (i <= 10)
    {
        printf("%d", i);
        i++;
    }
    return 0;
}


6.4练习
int main()
{
    int n = 0;
    scanf("%d", &n);
    while (n)
    {
        printf("%d ", n % 10);//获取一个数的最低位
        n = n / 10;//去掉一个数的最低位
    }
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值