C语言分支和循环(上)

简介:

C语言是结构化的程序设计语言,包括顺序结构,分支结构以及循环结构。顺序结构就是从上到下以此执行,分支结构就是会选择一条支路执行下去,而循环结构会在相应的循环体中不断执行直到退出循环为止。C语言的执行逻辑就是从上到下以次执行(除非遇到分支或循环),分支和循环可以嵌套使用。本文将介绍分支的使用

分支语句

1 if else语句

1.1 if 
if ( 表达式 )
    语句

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。

判断一个数是否是素数,代码如下:

#include <stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num % 2 == 1)
        printf("%d 是奇数\n", num);
    return 0;
}

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

输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数

#include <stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num % 2 == 1)
        printf("%d 是奇数\n", num);
    else
        printf("%d 是偶数\n", num);
    return 0;
}
1.3 分支中包含多条语句

默认在 if 和 else 语句中默认都只控制⼀条语句

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if(age >= 18)
        printf("成年了\n");
        printf("可以谈恋爱了\n");
    return 0;
}

输⼊的值不管是>=18还是<18,"可以谈恋爱了"都会打印在屏幕上

if 语句只能控制⼀条语句,就是 printf("成年了\n"); ,if语句为真,则打印成年了,
if语句为假,则不打印,对于 printf("可以谈恋爱了\n"); 是独⽴存在的,不管if语句的条件的真
假,都会被执行。

代码修改如下:

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age >= 18)
    {
        printf("成年了\n");
        printf("可以谈恋爱了\n");
    }
    else
    {
        printf("好好学习\n");
    }
    return 0;
}

1.4 嵌套if else

在 if else 语句中, else 可以与另⼀个 if 语句连用,构成多重判断。

比如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。

代码如下:

#include <stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num == 0)
        printf("输⼊的数字是0\n");
    else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
        printf("输⼊的数字是正数\n");
    else
        printf("输⼊的数字是负数\n");
    return 0;
}

比如,输⼊⼀个⼈的年龄,如果年龄<18岁,打印"少年",如果年龄在18岁⾄44岁打印"⻘年",如果年龄在45岁⾄59岁打印"中⽼年",如果年龄在60岁⾄89岁打印"⽼年",如果90岁及以上打印"⽼寿星"。代码实现如下:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 90)
		printf("老寿星\n");
	else if (age >= 60)
		printf("老年\n");
	else if (age >= 45)
		printf("中老年\n");
	else if (age >= 18)
	{
		printf("青年\n");
	}
	else
		printf("少年\n");
	return 0;
}

1.5 悬空else问题

如果有多个 if 和 else语句(没有用花括号括起来的话) , else 总是跟最接近的 if 匹配
 

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
return 0;
}

很多人可能会认为输出haha,但***运行代码之后的结果是啥也没有***,如下图所示

这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近
的 if 匹配。为了实现效果可以将代码改成下面这样

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
	}
	else
	{
		printf("haha\n");
	}
	return 0;
}

可以看到这样写就可以将haha很好的打印出来,所以不要吝啬花括号{}的使用,这个不容易造成误解也便于理解。

2 switch case语句

C语言还提供了 switch 语句来实现分⽀结构。switch语句是⼀种特殊形式的if else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易用、可读性更好的形式。

switch (expression)
{
    case value1: statement
    case value2: statement
    default: statement
}

其中expression是整型表达式,value1以及value2都是整形常量或整形常量表达式。

例如:输入任意⼀个整数值,计算除2之后的余数:

#include<stdio.h>
int main()
{
    //输⼊任意⼀个整数值,计算除2之后的余数
    int a = 0;
    scanf("%d", &a);
    switch (a % 2)
    {
    case 0:
        printf("余数为%d", 0);
        break;
    case 1:
        printf("余数为%d", 1);
        break;

    }
    return 0;
}

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

如果没有break,则就会打印如下所示

switch 语句也是分支效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执行,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case2 中的语句。所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分支效果。
switch语句中的default
在使用switch 语句的时候,我们经常可能遇到⼀种情况,比如 switch 后的表达式中的值无法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入default子句例如,输入1-5,输出的是“工作日”,输入6-7,输出“休息日”

switch (expression) 
{
case value1: statement
case value2: statement
default: statement
}

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执行default 子句
 

#include <stdio.h>
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");
	}
	return 0;
}

在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要顺序是满足实际需求的就可以,不过通常是把 default 子句放在最后处理的。

# 总结:

本文主要介绍了if else的语法规则,一些基本用法和例子,还介绍了switch case的语法规则,一些基本用法以及例子,这两者也是可以嵌套使用的。如果有什么不足错误之处,欢迎大家批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值