【初学者入门C语言】之选择结构语句(三)

个人主页:天寒雨落的博客_CSDN博客-c,CSDN竞赛,python领域博主
💬 刷题网站:蓝桥杯ACM训练系统 - C语言网 (dotcpp.com)

特别标注:该博主将长期更新c语言内容,初学c语言的友友们,关注博主不迷路!

目录

一、if语句

1.if语句

实例

2.if-else语句

实例

3. if-else if-else语句

实例

总结:

二、switch语句

1.一般形式

实例

2.省略式

实例

易错点:

三、if与switch语句混用

实例

四、总结


一、if语句

1.if语句

        if(条件表达式){

                代码

}

如果表达式为真则执行{}里的代码,如果不满足表达式的条件则跳过。

特别注意if条件表达式后面是没有;的

实例

请输入您的年龄,如果大于18,输出已成年

代码:

#include "stdio.h"

int main() {
	int age;
	scanf("%d", &age);

	if (age > 18) {
		printf("已成年!");
	}

	return 0;
}

#include "stdio.h"

int main() {
	int age;
	scanf("%d", &age);

	if (age > 18)
		printf("已成年!");

	return 0;
}

执行结果:

注意两个代码是等效的,因为if语句有两类写法,一种是带{},一种是不带{},带{}的如果满足if条件则执行{}里面的语句,不带{}的只有下面的一行代码属于if语句里的内容(注意这里判断一行语句并非是真正的行列里的一行而是依靠;区分的,每行语句以分号结尾) 。

相关报错:[错误] 非法字符 '\243' 在程序中

原因:有中文字符,可能是引号也可能是分号。

if条件语句的判断:

1.(数字)为真

2.(x=1;)语句(去掉分号即可“;”代表一个语句的结束)不能为条件表达式

3.(x=4,x-2)x=4,x-2的值为2,为真

4.('字母')字母对于的ascll码不为0就为真

5.a=4,b=4(a>3&&b<5)为真(如果不理解如何判断&&和||请看上一篇)

2.if-else语句

        if(条件表达式){

                语句序列1

}

else{

        语句序列2

}

如果表达式为真则执行{}里的语句序列1,如果不满足表达式的条件则执行else里的语句序列2

实例

请输入您的年龄,如果大于18,输出已成年,否则输出未成年

代码:

#include "stdio.h"

int main() {
	int age;
	scanf("%d", &age);

	if (age > 18)

	{

		printf("已成年!");
	} else {
		printf("未成年!");
	}

	return 0;
}

执行结果:

3. if-else if-else语句

        对于同类型的判断用else if就相当于if语句只是里面的条件不一样,所以前面加了一个else。如果执行了if语句或else if语句则后面的条件的else if语句不在执行。

实例

请输入您的年龄,如果小于12,输出儿童,如果大于18小于65,输出青年,否则输出老年

代码:

#include "stdio.h"

int main() {
	int age;
	scanf("%d", &age);

	if (age < 12) {
		printf("儿童!");
	} else if (age > 18 && age < 65) {
		printf("青年");
	} else {
		printf("老年!");
	}

	return 0;
}

执行结果:

注意c语言里不能直接写18<age<65,要把它分开写,写成age>18||age<65 ,因为它的执行结果是这样的,比如age为32,18<32为真的值为1,然后那这个1和65比较大小,1<65为真执行if语句,但是age为12,18<12为假的值为0,然后那这个0和65比较大小,0<65为真,执行if语句。不管输入什么这个条件都为真,都执行这个条件语句。

总结:

在if条件语句里只要不是0和false都为真都满足

二、switch语句

1.一般形式

switch(表达式){

        case 常量1:语句序列1;break;

        case 常量2:语句序列2;break;

        ......

        case 常量n:语句序列n;break;

        default:语句序列n+1;

}

计算表达式的值,并取整,那表达式取证的值与常量n进行等量判断,如果两个值相等则执行语句序列n,并跳出switch结构(因为语句序列n后面有break语句,break语句:各语句序列最后的break语句,用于跳出switch语句),default(可写可不写)相当于if语句里的else语句,若表达式的值与所有常量均不相等,则执行语句序列n+1,因为default是switch语句的最后一个部分所以后面不用加break了。

实例

输入一个数字输出对应的周几

#include "stdio.h"

int main() {
	int day;
	scanf("%d", &day);

	switch (day) {
		case 1:
			printf("周一!");
			break;

		case 2:
			printf("周二!");
			break;

		case 3:
			printf("周三!");
			break;

		case 4:
			printf("周四!");
			break;

		case 5:
			printf("周五!");
			break;

		case 6:
			printf("周六!");
			break;

		case 7:
			printf("周七!");
			break;

		default:
			printf("输入有效数字!");
	}

	return 0;
}

执行结果:

如果不加break语句的执行结果: 

2.省略式

      case 常量1:语句序列1;break;

      case 常量2:语句序列2;break;

      case 常量3:语句序列3;break;

      case 常量4:语句序列4;break;

如果语句序列1,语句序列2,语句序列3,语句序列4相等的话可以写成:

       case 常量1:

       case 常量2:

       case 常量3:

       case 常量4:语句序列4;break;

实例

输入月份,输出该月的天数

代码:

#include "stdio.h"

int main() {
	int month, day;
	printf("请输入月份:");
	scanf("%d", &month);

	switch (month) {
		case 2:
			day = 29;
			break;

		case 4:
		case 6:
		case 9:
		case 11:
			day = 30;
			break;

		default:
			day = 31;
	}

	printf("第%d月有%d天", month, day);
	return 0;
}

执行结果:

易错点:

1.case后面只能写成常量而不是范围也不能是小数不能包含变量,例如2~4,a~b,3.14,x+1等

2.case后面容易漏写break语句,如果没有加break语句,它就会把以下所有语句序列都执行一遍直到执行到break语句或default语句

三、if与switch语句混用

实例

输入年份和月份,输出该月的天数

代码:

#include "stdio.h"

int main() {
	int year, month, day;
	printf("请输入月份:");
	scanf("%d%d", &year, &month);

	switch (month) {
		case 2:
			day = 28;

			if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
				day = day + 1;
			}

			break;

		case 4:
		case 6:
		case 9:
		case 11:
			day = 30;
			break;

		default:
			day = 31;
	}

	printf("这个月有%d天", day);
	return 0;
}

执行结果:

四、总结

if语句的条件表达式比较直接,switch语句的表达式需要构造。switch的效率比if多,一般判断条件较多的时候用switch比如:分数,月份。较少的时候用if-else,switch只计算一次,if-else每一个条件都要计算。

各位C语言的初学者有问题随时都可以问我,随时为您解惑!!!

点赞👍+评论✏️+收藏⭐️是对博主最大的鼓励与支持!!!

  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 33
    评论
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天寒雨落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值