【速过C primer plus】第六章

本文详细解析了C语言中的循环结构,包括while、for和do-while循环,重点讨论了递增递减运算符在循环条件判断中的影响。同时介绍了其他赋值运算符和逗号运算符的使用,强调了它们的运算顺序和结果。通过实例展示了这些运算符在实际编程中的应用和可能产生的误解。
摘要由CSDN通过智能技术生成

【速过C primer plus】第六章

一、循环条件框的递增递减判断

1)while

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	int x = 10;
	while (--x>0)
		printf("%d",x);
}
//输出:987654321

​ 前缀递增递减符,符合标准循环变量的运算方式(符合直觉,输出的循环变量和实际判定时的循环变量相等)。

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	int x = 10;
	while (x-->0)
		printf("%d",x);
}
//输出:9876543210

​ 后缀递增递减符,不符合直觉计算,对运算方式进行分析:

​ ①条件框可以变为:int b=x并且保证b>0

​ ②所以在循环进行中,b的取值应该为:10、9、8、7、6、5、4、3、2、1→跳出

​ 总结:x会先给条件框赋值,判断完成后进行x=x-1,所以在printf中会输出0,输出的循环变量总是比判定时的循环变量小于1。后缀递增递减符会导致循环多进行一次

2)for

对于for循环,递减递增符有两个位置可以放置:增减框和条件框。

增减框

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	for (int x = 10; x >0;x--)
		printf("%d", x);
}
//输出:10987654321

​ 增减框无论前缀还是后缀都不会影响输出结果,即增减框是单独进行的,前后缀不会影响计算顺序

条件框

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	for (int x = 10; x-- >0;)
		printf("%d", x);
}
//输出:9876543210

​ 条件框中的运算结果和while循环中完全一样,前后缀输出值也是一样的。

​ **※注意:**for循环第一次进行判定时,不会进行增减框运算,所以导致了增减框中输出了10;在其他放置方式中第一次运算判定框结束后,增减一定进行过了,所以导致无法输出10。

3)do-while

include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	int x = 10;
	do {
		printf("%d", x);
	} while (--x > 0);
}
//输出:10987654321

​ 前缀增减符时,判定时的循环变量总是比输出时的循环变量小1。

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	int x = 10;
	do {
		printf("%d", x);
	} while (x-- > 0);
}
//输出:109876543210

​ 后缀增减符时,判定时的循环变量和输出的循环变量相等,最符合直觉

​ do-while是一个少用的循环语句,它的优势在于他会先进行一次语句然后再判定循环是否需要进行。劣势在于do-while不符合直觉计算,并且是唯一一个需要添加;的循环语句,注意千万不要忘记在结尾加上这个了。

​ 总结:对于while和for这种端循环的方式,前缀递增递减符可以保证在进行判定的循环变量和进入循环体的循环变量相等;对于do-while这种尾循环方式,后缀递增递减符可以保证进入循环体的变量和进行判定时的循环变量相等。判定框中最好就不要用递增递减符,判定运算可以放在循环体中更好控制。

二、冷门运算符:其他赋值运算符与逗号运算符

1)其他赋值运算符

​ 以+=为例,运算顺序可以写成,A+=B可以拆分成A=A+(B),前缀符号不会改变后面算式的运算顺序

2)逗号运算符

​ 逗号运算符可以连接多重语句,每条语句都会运行:

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	int x;
	scanf("%d", &x), printf("结果为%d",x);
}
//输出:
//2
//结果为2

​ 逗号运算符的计算结果为逗号右边的值:

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	int x;
	x = (1,2);
	printf("%d",x);
}
//输出:2

※逗号运算符的运算优先级低于等号,导致你没加括号的时候等于前面的值,所以写逗号运算符必须要配合等号

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	int x;
	x = 1,2;
	printf("%d",x);
}
//输出:1

​ 复杂情况下的逗号运算符:

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	int x,y,z;
	x =(y=3,(z=++y+2)+5);
	printf("%d",x);
}
//输出:11

​ 虽然逗号运算符的运算结果是右值,但是在运算时还是会从左到右按优先级进行运算。这个算式解释为:y=3,然后进行y++和y+2,然后y+5,z=y,最后x=z。

​ 多重逗号运算符:

#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
	int x,y;
	x = (1, (2, 3), (y=7,8));
	printf("%d和%d",x,y);
}
//输出:8和7

​ 特别注意逗号运算符的优先级是低于等号的,所以很容易出现违背直觉的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值