[一篇读懂]C语言三讲:选择、循环


1. 选择if-else讲解

1 关系表达式与逻辑表达式

  • 算术运算符的优先级高于关系运算符、关系运算符的优先级高于逻辑与和逻辑或运算符、相同优先级的运算符从左至右进行结合等。

计算表达式的过程

计算表达式 5 > 3 & & 8 < 4 − ! 0 5>3\&\&8<4-!0 5>3&&8<4!0
1

2 if-else语句

  • if 判断条件(表达式)为真,就执行某个语句,反之不执行这个语句。
  • if 判断条件(表达式)为真,就执行某个语句,反之用else分支执行另一个语句。
    if
  • if后面不能加分号。
    如果有else分支语句,加分号导致编译不通过;
    如果没有else分支语句,加分号导致i无论取何值,都执行if语句。

【例】判断输入值是否大于0

#include <stdio.h>
//练习if与else
int main()
{
	int i;
	while (scanf("%d", &i))
	{
		if (i > 0)//不要在if后加分号
		{
			printf("i is bigger than 0\n");//为了避免加代码时出现问题 - 加大括号!
			//不加大括号的问题1:新加的语句不属于if语句!
			//不加大括号的问题2:悬空的else和那个if配对?
		}
		else
		{
			printf("i is not bigger than 0\n");
		}
	}
	return 0;
}
  • if 语句和else语句也可以多个同时使用(多分支语句)。
  • 无论有多少个if语句和else if语句,程序都只会执行其中的一个语句。
  • if语句支持多层嵌套。
    注意,使用if嵌套语句时,要考虑“悬空的else”问题。例如,
if(i > 1)
	if(i < 10)
		printf("i > 1 and i < 10\n");
	else 
		printf("no,they are not\n")
  • C语言中的else子句从属于最靠近它的不完整if语句。
  • 上例中的else子句从属于第二个if语句,如果想让它从属于第一个if语句,那么可以用一个花括号把第二个if语句包含在一个单独的代码块内:
if(i > 1)
{
	if(i < 10)
		printf("i > 1 and i < 10\n");
}
	else
		printf("no,they are not\n");
  • 在if语句中的语句列表前后加上花括号,可以防止不小心加了一句代码后,使实际未被包含的语句被包含在某个if语句中的错误。

2. 循环while,for讲解,continue,break讲解

1 while循环

  • 当while表达式的值非0时,执行while语句中的内嵌语句,从而实现语句多次执行的效果。。
  • 先判断表达式,后执行语句。
  • 为了避免程序进入死循环(不停地进行循环操作),在语句中需要有让表达式趋近于假的操作来使程序跳出循环。
    while
  • while后面不能加分号,程序会发生死循环。
  • while语句应使用花括号,可使程序更加清晰,避免向循环内添加语句时出错。

【例】计算1到100之间所有整数之和

#include <stdio.h>
//计算从1到100的和
int main()
{
	int i = 1, total = 0;
	//while后加分号 - 死循环
	//循环体内没有让while趋于假的操作 - 死循环
	while (i <= 100)//while后不能加分号 - 否则死循环
	{
		total = total + i;//把i加到total上
		i++;//i++即 - i=i+1 - 让语句趋于假
	}
	printf("total = %d\n", total);
	return 0;
}

2 for循环

  • for循环语句使用最为灵活,可用于循环次数已经确定的情况,也可用于循环次数不确定而只给出循环结束条件的情况。
  • for语句完全可以替代while循环语句。
for(表达式1;表达式2;表达式3) 语句;
  1. 先求解表达式1.
  2. 求解表达式2,若其值为真(值为非0),则先执行for语句中指定的内嵌语句,后执行第(3)步。若其值为假(值为0),则结束循环,转到第(5)步。
  3. 求解表达式3。
  4. 转回第(2)步继续执行。
  5. 循环结束,执行for语句下面的语句。
    for
  • for循环语句中必须且只能有两个分号。
  • for循环语句后加分号不会死循环,会结果不对。

【例】for循环语句实现计算1到100之间的所有整数之和

#include <stdio.h>

int main()
{
	int i, total;
	for (i = 1, total = 0; i <= 100; i++)//必须有两个分号 - 不能加分号 - 不会死循环,会结果不对
	{
		total += i;
	}
	printf("total = % d\n", total);
	return 0;
}
  • for循环的可读性要比while循环的好,能使用for循环时不要强制改为while循环。

3 continue语句

  • continue语句的作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行是否执行下一次循环的判断。
  • 当continue用于while和do while循环中时,注意不要跳过让循环趋近于假的语句。
    【例】对1到100之间的奇数进行求和
#include <stdio.h>
//for 循环实现从1加到100
//使用continue求奇数的和
int main()
{
	int i, total;
	for (i = 1, total = 0; i <= 100; i++)//for小括号后不要加分号
	{
		if(i % 2 == 0)
		{
			continue;//continue下面的代码均不会得到执行
		}
		total += i;
	}
	printf("total = %d\n", total);
	return 0;
}

4 break语句

  • break语句的作用是结束整个循环过程,不再判断执行循环的条件是否成立。
  • break语句也可用在while循环和do while循环中,起结束对应循环的作用。
    【例】break语句实例
#include <stdio.h>
//使用break跳出循环
int main()
{
	int i, total;
	for (i = 1, total = 0; i <= 100; i++)//for小括号后不要加分号
	{
		if (total > 2000)
		{
			break;//当和大于两千时,循环结束
		}
		total += i;
	}
	printf("total = %d,i = %d\n", total,i);
	return 0;
}

总结

1.1

  • 算术运算符的优先级高于关系运算符、关系运算符的优先级高于逻辑与和逻辑或运算符、相同优先级的运算符从左至右进行结合等。

1.2

  • if 判断条件(表达式)为真,就执行某个语句,反之不执行这个语句。

  • if 判断条件(表达式)为真,就执行某个语句,反之用else分支执行另一个语句。

  • if后面不能加分号。
    如果有else分支语句,加分号导致编译不通过;
    如果没有else分支语句,加分号导致i无论取何值,都执行if语句。

  • if 语句和else语句也可以多个同时使用(多分支语句)。

  • 无论有多少个if语句和else if语句,程序都只会执行其中的一个语句。

  • if语句支持多层嵌套。

  • C语言中的else子句从属于最靠近它的不完整if语句。

  • 在if语句中的语句列表前后加上花括号,可以防止不小心加了一句代码后,使实际未被包含的语句被包含在某个if语句中的错误。

2.1

  • 当while表达式的值非0时,执行while语句中的内嵌语句,从而实现语句多次执行的效果。。
  • 先判断表达式,后执行语句。
  • 为了避免程序进入死循环(不停地进行循环操作),在语句中需要有让表达式趋近于假的操作来使程序跳出循环。
  • while后面不能加分号,程序会发生死循环。
  • while语句应使用花括号,可使程序更加清晰,避免向循环内添加语句时出错。

2.2

  • for循环语句使用最为灵活,可用于循环次数已经确定的情况,也可用于循环次数不确定而只给出循环结束条件的情况。
  • for语句完全可以替代while循环语句,for循环的可读性要比while循环的好,能使用for循环时不要强制改为while循环。
  • for循环语句中必须且只能有两个分号。
  • for循环语句后加分号不会死循环,会结果不对。

2.3

  • continue语句的作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行是否执行下一次循环的判断。
  • 当continue用于while和do while循环中时,注意不要跳过让循环趋近于假的语句。

2.4

  • break语句的作用是结束整个循环过程,不再判断执行循环的条件是否成立。
  • break语句也可用在while循环和do while循环中,起结束对应循环的作用。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

H3T

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

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

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

打赏作者

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

抵扣说明:

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

余额充值