当前位置: 首页 > news >正文

速通C语言——(分支和循环)

引言

        总结了C语言中的分支结构(if、switch)循环结构(for、while、do-while)

介绍了三目操作符,逻辑操作符和break、continue、goto语句

 一、if语句

语法形式:

// 单分支
if (条件表达式) { 
    代码块; 
}

// 双分支
if (条件表达式) { 
    代码块1; 
} else { 
    代码块2; 
}

// 多分支
if (条件1) { 
    代码块1; 
} else if (条件2) { 
    代码块2; 
} else { 
    默认代码块; 
}

 执行流程:
 
计算条件表达式;
 
若条件为真(非0),执行对应代码块;
 
若为假(0),跳过或执行 else 部分

注意:

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。 

二、条件操作符(三目操作符) 

exp1 ? exp2 : exp3

        条件操作符的计算逻辑是:如果 exp1 为假, exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp3 计算,计算的结果是整个表达式的结果。 

 三、逻辑操作符(&&, ||, !)

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下⾯三个运算符。

        • ! :逻辑取反运算符(改变单个表达式的真假)。

        • && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。

        • || :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。

练习:闰年的判断:

判断闰年_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/a7bcbe3cb86f435d9617dfdd20a16714?tpId=290&tqId=39843&ru=/exam/oj

闰年判断的规则:

1. 能被4整除并且不能被100整除是闰年

2. 能被400整除是闰年

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int year = 0;
	scanf("%d", &year);
	if (year % 4 == 0 && year % 100 != 0)
		printf("是闰年\n");
	else if (year % 400 == 0)
		printf("是闰年\n");
	else
		printf("不是闰年\n");

}

也可以写简洁一点:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	
	int year = 0;
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
		printf("是闰年\n");
	else
		printf("不是闰年\n");
	return 0;
}

 四、短路

C语言逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。

如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

三、switch语句

switch (表达式) {
    case 常量表达式1: 语句块1; break;
    case 常量表达式2: 语句块2; break;
   ...
    default: 语句块n;
}

上面代码中,根据表达式不同的值,执行相应的case分支。如果找不到就执行default 分支。

注:

1. switch 后面的表达式必须是整型表达式

2. case 后的值,必须是整形常量表达式

3. case 和后边的数字之间必须有空格

4. 每⼀个 case 语句中的代码执行完成后,需要加上break ,才能跳出这个switch语句。

在 switch 语句中 default 子句有要求顺序吗? default 只能放在最后吗?

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

四、while循环 

while(表达式(条件))
{
    语句(循环体);
}

功能:条件为真时重复执行循环体。  
执行流程:  
1. 判断条件是否为真;  
2. 若为真,执行循环体并返回步骤1;  
3. 若为假,结束循环。  

练习:在屏幕上打印1~100的值

while的实践

练习:在屏幕上打印1~100的值

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	
	int i = 1;
	while (i <= 100)
	{
		printf("%d ", i);
		//i = i + 1;
		i++;
	}
	return 0;
}

五、for循环

for 循环是三种循环中使用最多的,for 循环的语法形式如下:

for(表达式1;表达式2;表达式3)
{

    语句;

}

表达式1:用于循环变量的初始化

表达式2:用于循环结束条件的判断  

表达式3:用于循环变量的调整

注意:表达式1,2,3可以不写东西,根据需要来设计 

练习:在屏幕上打印1~100的值

练习:在屏幕上打印1~100的值

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

练习:计算1~100之间3的倍数的数字之和 

练习:计算1~100之间3的倍数的数字之和

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	
	int i = 0;
	int sum = 0;
	for (i = 1; i <= 100; i++)
	{
		if (i % 3 == 0)
			sum += i; //只有一个语句时,可以不写大括号
	}
	printf("%d\n", sum);
	return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{

	//优化
	//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断
	int i = 0;
	int sum = 0;
	for (i = 3; i <= 100; i += 3)
	{
			sum += i; //只有一个语句时,可以不写大括号
	}
	printf("%d\n", sum);
	return 0;
}

六、do-while循环

在循环语句中do-while 语句的使用最少,它的语法如下:

do
{
    语句(循环体);
}
while(表达式);

注意:

1. while后面有个分号

2. do-while循环会先执行一遍循环体,再进行判断,表达式为真,就会进行下一次,表达式为假,则不再继续循环体

  练习:在屏幕上打印1~100的值

 练习:在屏幕上打印1~100的值

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{

	int i = 1;
	do
	{
		printf("%d ", i);
		i++;
	} while (i <= 100);

	return 0;
}

  练习:输入一个正整数,计算这个整数是几位数。

 练习:输入一个正整数,计算这个整数是几位数。

例如:

输入:1234 输出 4

输入:12 输出:2

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	int cnt = 0;
	do
	{
		cnt++;
		n = n / 10; //可以删除最后一位
	} while (n);//当n == 0时循环结束
	printf("%d\n", cnt);
	return 0;
}

这里并非必须使用do-while语句,但是这个代码比较适合使用do-while循环,因为n即使是0,也是一位数,要统计位数的。

七、break和continue语句

在循环执行的过程中,如果某些状况发⽣的时候,需要提前终止循环,这是非常常见的现象。

C语言中 提供了 break 和 continue 两个关键字,就是应用到循环中的。

• break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。 • continue 的作用是跳过本次循环中continue后面的代码。

自己多敲代码多试试。

八、goto语句

C语言提供了一种非常特别的语法,就是goto语句和跳转标号goto语句可以实现在同一个函数内跳转到设置好的标记处。

例如:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	printf("hehe\n");
	goto next; //next 就是跳转标号
	printf("haha\n");

next:
	printf("跳过了haha的打印\n");

	return 0;
}

 直接跳过了打印haha的这段语句。

注意:goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以建议是能不用尽量不去使用;但是 goto 语句也不是一无是处,在多层循环的代码中,如果想快速跳出,使用 goto 就非常的方便了。

	for (...)
	{
		for (...)
		{
			for (...)
			{
				if (...)
				{
					goto error;
				}
			}
		}
	}
error:
	//....

        本来 for 循环想提前退出得使用break ,⼀个 break 只能跳出一层for循环,如果3层循环嵌套就得使用3个break才能跳出循环,所以这种情况下使用goto语句就会更加快捷

相关文章:

  • conda 安装软件报错 Found conflicts! Looking for incompatible packages.
  • 快速使用PPASR V3版不能语音识别框架
  • Docker Compose国内镜像一键部署dify
  • 【前端面试题】Vu3常见的面试题
  • 【网络】poll 与epoll(原理、工作模式LT、ET)
  • Windows 图形显示驱动开发-WDDM 3.2-可调性改进
  • [论文阅读]Trustworthiness in Retrieval-Augmented Generation Systems: A Survey
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-7.3.2使用GraphQL封装查询接口
  • 2-003:MySQL 三层 B+ 树能存多少数据?
  • torch.distributions.categorical.Categorical 介绍
  • 智慧停车小程序:实时车位查询、导航与费用结算一体化
  • Datawhale AI + 办公 笔记2
  • linux自启动服务
  • 使用 Tesseract 进行 OCR 识别的详细指南
  • Linux开发工具----vim
  • Room数据库的使用
  • STM32Cubemx-H7-7-OLED屏幕
  • 【Python】【数据分析】Python 数据分析与可视化:全面指南
  • 【Python 2D绘图】Matplotlib绘图(统计图表)
  • 【冯诺依曼:到底有什么重大贡献 关键字摘抄】
  • 家庭医生可提前5天预约三甲医院号源,上海常住人口签约率达45%,
  • 上百家单位展示AI+教育的实践与成果,上海教育博览会开幕
  • 韧性十足的中国外贸企业:“不倒翁”被摁下去,还会再弹起来
  • 丹麦外交大臣拉斯穆森将访华
  • 澎湃·镜相第二届非虚构写作大赛初选入围名单公示
  • 经常口干口渴的人,要当心这些病