C语言学习顺序结构,选择结构

前言:C语言是一门“结构化”的程序设计语言

结构化指的就是:顺序结构,选择结构,循环结构

“语句”指的是用分号隔开的被称为语句

在C语言中,0为假,非0为真。

表达式包含“条件表达式”“逻辑表达式”

条件表达式例如:a>=5,a==5

逻辑表达式例如:a>=18 && a<=60 (a大于等于18且a小于等于60)

#include<stdio.h>
int main() {
    int a = 0;//这是一条语句
    ;//这是一条语句,被称为空语句
    return 0;//这是一条语句
}

1.顺序结构

“顺序结构”顾名思义指的是语句的执行顺序是由上至下的,是最简单的一种结构。

#include<stdio.h>
int main() {
    int a = 5;
    printf("a = %d\n", a);//a = 5
    int b = 6;
    printf("b = %d\n", b);//b = 6
    a = b;
    printf("转换后a = %d\n", a); //转换后a = 6
    //从上到下依次执行语句,这是顺序结构,通常作为程序的一部分
    return 0;
}

2.选择结构(分支结构)

当程序需要进行选择的时候,就会出现分支,不同的分支往往指向的结果不同,在进行选择的时候包含“if”语句和“switch”语句

(1)“ if ”语句

1.“ if ”语句有三种表达形式:

第一种:if

if(条件)语句---指的是如果条件为真就执行语句,如果为假就不执行该语句

#include<stdio.h>
int main() {
	int age = 25;
	if (age <= 18)
		printf("未成年\n");
	printf("成年人\n");//输出结果为:成年人
    //在该例中,条件判断的是年龄小于18岁,就输出未成年,但年龄初始化为25,所以直接跳过,执行下一语句
	return 0;
}

第二种:if-else

           if(条件)

              语句1

            else 语句2---指的是如果条件为真就执行第一条语句,否则就执行第二条语句

 

#include<stdio.h>
int main() {
	int age = 25;
	if (age <= 18)
		printf("未成年\n");
	else
	printf("成年人\n");//输出结果为成年人
	//在该例子中,进行判断时是年龄是否小于18岁,小于18岁输出未成年,否则输出成年人
	return 0;
}

第三种:if-else if

if(条件1) 

语句1

else if(条件2)

语句2

else if (条件3)

语句3

.......---指的是如果条件为真就执行第一条语句,否则就执行第二个判断式,如果为真就执行第二条语句,否则就执行第三个判断式,如果为真......

#include<stdio.h>
int main() {
	int age = 100;
	if (age <= 18)
		printf("未成年\n");
	else if(18<age && age<=60)
	    printf("成年人\n");
	else if(60<age && age<=90)
		printf("普通老人\n");
	else
		printf("长寿老人\n");//输出结果为长寿老人
	//年龄初始化为100岁,根据判断输出结果
	return 0;
}

2.为什么建议加上{}(代码块)

不加上的后果:

#include<stdio.h>
int main() {
	int age = 12;
	if (age <= 18) 
		printf("未成年\n");
	printf("童年");//此处会报错,因为在if语句无法匹配多个语句,只能识别一个
	else 
		printf("成年人\n");
	return 0;
}

在加上代码块后:

#include<stdio.h>
int main() {
	int age = 12;
	if (age <= 18) {
		printf("未成年\n");
		printf("童年\n");
	}
	else {
		printf("成年人\n");
	}
	return 0;
}

3.悬空else问题

#include<stdio.h>
int main() {
	int a = 10;
	if (a <= 5)
		if (a > 5)
			printf("hehe");
	else
		printf("haha");
	return 0;
}

在这个问题中由于没有加入代码块,可能会产生误解,大部分初学者会认为输出为“haha”,其实什么都不输出,原因是因为“else”是跟随最近的“if”而运行的

再加入代码块后会更加直观:

利用代码块也可以解决这类问题:

4.对表达式的一些补充

在C语言中,用“1”表示为真,“0”表示为假,当表达式出现表示范围的错误时,就会出现不易察觉的bug

#include<stdio.h>
int main() {
	int age = 100;
	if (age <= 18) {
		printf("未成年\n");
	}
	else if (18<age<=60){//关系表达式可知100大于18是真的,表示为“1”,1<=60,是正确的,所以输出结果为“成年人”
		printf("成年人\n");
	}
	else 
		printf("老人\n");
	return 0;
}

(2).“switch”语句

“switch”语句常用于多分支语句

switch(整型表达式){

语句项

}

语句项---

例如:case 整型常量表达式:

           语句;

整型表达式---只要是整型即可

整型常量表达式---既要是整型,又要是常量

1.关于“switch”中的“break”和“default”关键字

“break”是用于跳出“switch”语句的关键字

没有加上“break”的后果:

加上“break”后:

“default”关键字就是“默认”的意思,当输入的值与“case”所对应的值都不对应时,超出“case”的范围时,用到“default”关键字

2.”switch“比“if”更适合多分支

下面以输入1-7以输出星期1至星期日为例:

“if”语句:

#include<stdio.h>
int main() {
	int a = 0;
	scanf("%d",&a);
	if (1 == a) {
		printf("星期一\n");
	}
	else if (2 == a) {
		printf("星期二\n");
	}
	else if (3 == a) {
		printf("星期三\n");
	}
	else if (4 == a) {
		printf("星期四\n");
	}
	else if (5 == a) {
		printf("星期五\n");
	}
	else if (6 == a) {
		printf("星期六\n");
	}
	else if (7 == a) {
		printf("星期日\n");
	}
	else {
		printf("输入错误\n");
	}

	return 0;
}

“switch”语句:

#include<stdio.h>
int main() {
	int a = 0;
	scanf("%d",&a);
	switch (a) {
	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;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

虽然看上去“if”和“switch”差不多,但实际上不管复制粘贴还是逻辑简便方面“switch”都比“if”更好

3.case穿透

正常情况下:

#include<stdio.h>
int main() {
	int a = 0;
	scanf("%d", &a);
	switch (a) {
	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;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

在case穿透后:

#include<stdio.h>
int main() {
	int a = 0;
	scanf("%d", &a);
	switch (a) {
	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;
}

结果是一样的,很明显,case穿透更方便

posted @ 2022-06-04 11:05  浅影阿  阅读(406)  评论(0编辑  收藏  举报