C语言分支和循环(上)

(写在前面:文中的概念解释为个人理解+课件所学,题目借用课件的,代码为笔者学习后所写)

(主要为记录学习过程所用)

目录

1. if语句
2. 关系操作符
3. 条件操作符
4. 逻辑操作符:&& , || , !
5. switch语句
6. while循环
7. for循环
8. do-while循环
9. break和continue语句
10. 循环的嵌套
11. goto语句

1.if语句

 1.1 if格式
if(表达式)
  printf("输出语句")

表达式成立则运行,表达式不成立不执行语句

在C语言中0表示假,非0表示真。

实例1:判断一个数是奇数还是偶数

int main()
{
	int a = 0;

	scanf("%d", &a);    //&表示将输入的数存储到a中
	if (a % 2 == 0)
		printf("a=%d为偶数", a);
	return 0;
}

如果我们给a赋值为偶数,那么输出结果如果图所示

1.2 else

如果我们输入的数不是偶数而是奇数,那么运行上述代码就不会输出结果,因此我们需要用到else语句来弥补这点

以下为else的具体用法

 if(表达式)
     输出语句1
 else
     输出语句2

 我们带入实例中查看

int main()
{
	int a = 0;

	scanf("%d", &a);
	if (a % 2 == 0)         //判断a除以2的模是否为0
		printf("a=%d为偶数", a);
	else
		printf("a=%d为奇数", a);
	return 0;
}

此时我们再输入一个奇数就会判断输出该数为奇数,从而形成了一个完整的体系。

实例2:根据一个人的年龄判断他是否成年

int main()
{
	int age = 0; //定义年龄age为0
	printf("请输入您的年龄:");
	scanf("%d", &age);
	if (age <= 18)      //对年龄进行判断如果小于18就输出语句1,相反输出语句2
		printf("未成年");     //语句1
	else
		printf("成年");       //语句2
	return 0;

}
1.3 分⽀中包含多条语句
int main()
{
	int age = 0; //定义年龄age为0
	printf("请输入您的年龄:");
	scanf("%d", &age);
	if (age >= 18)
		printf("成年\n");
	    printf("可以恋爱了\n");
	
	return 0;

}

我们再来运行以上代码

可以看到如果我们输入比18大的数,就会输出

如果我们输入比18小的数的话

虽然经过判断没有成年,从而没有输出“成年”这个结果。但是“可以恋爱仍然作为结果输出”,此时就存在缺陷,因为代码中的if这时只能控制一条语句,下面我们就来看一下如何用if控制这两条语句

我们需要用到{}这个符号        

int main()
{
	int age = 0; //定义年龄age为0
	printf("请输入您的年龄:");
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n");
		printf("可以恋爱了\n");
	}
	return 0;

}

这样用{}括起来后我们再输入比18小的数就没有语句输出了,我们就达到了用if控制两条语句的目的。

我们再来完善一下代码让其成为一个完整判断的程序

int main()
{
	int age = 0; //定义年龄age为0
	printf("请输入您的年龄:");
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n");
		printf("可以恋爱了\n");
	}
	else
	{
		printf("未成年\n");
		printf("不可以谈恋爱\n");
	}
	return 0;

}
1.4 嵌套if
if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断
实例1:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
int main() {
	int a = 0;
	scanf("%d", &a);
	if (a > 0)
		printf("输入的数字为正数");
	else if (a < 0)
		printf("输入的数字为负数");
	else
		printf("输入的数字为0");
	return 0;
}

第二个if else就为嵌套在前面一个else中的嵌套if语句。

实例2:输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:⾮正数。
int main() {
	int b = 0;
	scanf("%d", &b);
	if (b > 0)
	{
		if (b % 2 == 0)
			printf("该数为偶数");
		else
			printf("该数为奇数");
	}
	else
		printf("该数为非正数");
	return 0;
}

运行逻辑为,先根据输入的b的值进行大于0 小于0的判断

如果大于0,则进行嵌套里的奇偶性判断并输出,如果小于0则会绕过嵌套里的判断,直接输出该数为非正数。

练习:

输⼊⼀个⼈的年龄
如果年龄<18岁,打印"少年"
如果年龄在18岁⾄44岁打印"⻘年"
如果年龄在45岁⾄59岁打印"中⽼年"
如果年龄在60岁⾄89岁打印"⽼年"
如果90岁及以上打印"⽼寿星"
方法1
int main() {
	int age = 0;
	scanf("%d", &age);
	if (age <= 18)
		printf("少年");
	else if (age <= 44)
		printf("青年");
	else if (age <= 59)
		printf("中老年");
	else if (age <= 89)
		printf("老年");
	else
		printf("老寿星");
	return 0;
}

方法2:

int main() {
	printf("请输入年龄:");
	int age = 0;
	scanf("%d", &age);
	if (age <= 18)
		printf("少年");
	else {
		if (age <= 44)
			printf("青年");
	
		else {
			if (age <= 59)
				printf("中年");

			else {
				if (age <= 89)
					printf("老年");

				else
				{
					printf("老寿星");
				}
			}
		}

	}

根据大括号可以更清晰的看出运行逻辑,注意括号要完成前后的对应。

1.5 悬空else问题
如果有多个 if else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
我们⾸先从下⾯代码开始
int main()
{
	int a = 1;
	int b = 2;
	if (a == 0)
		if (b == 0)
			printf("hehe\n");
	else
		printf("haha\n");
	return 0;
}
刚开始学习的时候,上来我们就对a进行判断,定义a=1不符合a=0的判断,认为直接输出else的语句“haha”,其实当我们真正运行起来的时候是什么也不输出的
这就是悬空 else 的问题,如果有多个 if else ,可以记住这样⼀条规则, else 总是跟最接近
if 匹配。
这个代码的运行逻辑:else是与嵌套中的if相匹配,所以如果第一个if判断错误,那么就不会进行嵌套中if的判断,那么else中的haha自然就不会输出。所以最终结果是什么也没有输出。
加个括号这样就好理解了
int main()
{
	int a = 1;
	int b = 2;
	if (a == 0)
	{
		if (b == 0)
			printf("haha\n");
	
		else
			printf("hehe\n");
	}
	return 0;
}

如果我们想要else与第一个if匹配进行判断,可以改为以下代码

int main()
{
	int a = 1;
	int b = 2;
	if (a == 0)
	{
		if (b == 0)
			printf("hehe\n");
	}
	else
		printf("haha\n");
	return 0;
}

这样我们再运行就会输出结果“haha”

2. 关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称
为“关系运算符”(relational operator),主要有下⾯6个。
> ⼤于运算符
< ⼩于运算符
>= ⼤于等于运算符
<= ⼩于等于运算符
== 相等运算符
!= 不相等运算符
例子:
a == b;
a != b;
a < b;
a > b;
a <= b;
a >= b;
关系表达式通常返回1表示真,假用0表示。⽐如, 20 > 12 返回 1 12 > 20 返回0
if (x == 3)
{
printf("x is 3.\n");
}

注意:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不⼩⼼写 出下⾯的代码,它可以运⾏,但很容易出现意料之外的结果

if (x = 3) ...
这个式⼦表⽰对变量 x 赋值 3 ,它的返 回值为 3 ,所以 if 判断总是为真。
同时也可以这样写把数字放到左边
if ( 3 == x ) ....

但如果是给x赋值的话这样写就会报错

if (3=x)....    //错误示例
另⼀个需要避免的错误是:多个关系运算符不宜连用
i<k<j //错误示范

因为代码从左向右运算,所以只会先判断i<k而不会对k和j进行判断,所以达不到我们的目的

应该写成

i<j && j<k
⽐如:我们输⼊⼀个年龄,如果年龄在18岁~36岁之间,我们输出⻘年
//错误示例
int main()
{
	int age = 0;
	printf("请输入年龄:");
	scanf("%d", &age);
	if (18 <= age <= 36)
		printf("青年");
	return 0;
}

这样我们输入10,也会输出青年

因为我们的10先和18进行比较,为假输出0,0接着与36进行比较为真,满足条件就会输出青年

正确写法应该如下所示:

int main()
{
	int age = 0;
	printf("请输入年龄");
	scanf("%d", &age);
	if (age >= 18 && age <= 36)
		printf("青年");
	return 0;
}

3. 条件操作符

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

exp1 为假, exp3 计算,计算的结果是整个表达式的结果。

使用条件操作符改造以下代码

#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
if (a > 5)
    b = 3;
 else
    b = -3;
  printf("%d\n", b);
return 0;
}

改造后:

#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
b = (a > 5 ? 3 : -3);
printf("%d\n", b);
return 0;
}

练习:使⽤条件表达式实现找两个数中较⼤值

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int m = (a > b ? a : b); //a>b相当于exp1 a相当于exp2 b相当于exp3
	printf("%d", m);
	return 0;
}

运行逻辑:首先输入a 和b 的值,对于a和b的大小进行判断,如果满足a>b则输出a的值,a<b则会输b的值。并把这个值赋给m进行输出。

4. 逻辑操作符:&& , || , !

! :逻辑取反运算符(改变单个表达式的真假)。
&& :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
|| :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
       
4.1 逻辑取反运算符 !
⽐如,我们有⼀个变量叫 flag ,如果flag为假,要做⼀个什么事情,就可以这样写代码:
int main() {
	int flag = 0;
	if (!flag)
		printf("do something\n");
	return 0;
}
4.2 逻辑与运算符

&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达 式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
⽐如:如果我们说⽉份是6⽉到8⽉,是夏天,那使⽤代码怎么体现呢
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month >= 6 && month <= 8);
	printf("%d月为夏天", month);
	return 0;
}
这⾥表达的意思就是month既要⼤于等于6,⼜要⼩于等于8,必须同时满⾜
4.3 逻辑或运算符

|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b ||
两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
⽐如:我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天,那么我们怎么使⽤代码体现呢?
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month == 12 || month == 1 || month == 2)
		printf("%d月为冬天", month);
	return 0;

}
4.4 练习:闰年的判断

闰年判断的规则:
1. 能被4整除并且不能被100整除是闰年
2. 能被400整除是闰年
代码1:
int main() {
	int year = 0;
	printf("请输入年份:");
	scanf("%d", &year);
	if (year % 4 == 0 && year % 100 != 0)
		printf("%d为闰年\n", year);
	else if (year % 400 == 0)
	    printf("%d为闰年\n", year);
	
	return 0;
}

代码2:

int main()
{
	int year = 0;
	printf("请输入年份:");
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 == 0) || (year % 400 == 0))
		printf("%d为闰年\n",year);
	else
		printf("%d为平年\n", year);
	return 0;
}
  
4.5 短路
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
对于&&操作符
if(month >= 3 && month <= 5)
表达式中&& 的左操作数是 month >= 3 ,右操作数是 month <= 5 ,当左操作数 month >= 3
结果是0的时候,即使不判断 month <= 5 ,整个表达式的结果也是0(不是春季)。
所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
对于||操作符号
if(month == 12 || month == 1 || month == 2)
如果month == 12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。
所以, || 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。
练习:阅读代码,计算代码输出的结果
#include <stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
printf("i=%d\n", i);
return 0;
}

我们首先对a++进行分析,a定义为0,a++为先用在加,所以在i的运算中a作为0带入,运算后a的值自加1变为a=1,由上文可知对于&&操作符,左边如果是0(假),右边操作数就不再进行运算,即b , c  ,d的值直接输出。因为后面的bc不再进行运算,所以i的值就等于由a带入的0。最终输出结果如下图所示:

PS:如果我们把a的值换成1那么输出的值会有什么变化

int main()
{
	int i = 0, a = 1, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
	printf("i = %d\n", i);
	return 0;
}

结果如图:

分析:首先a=1带入进i的运算,运算后a的值变为2。这时第一个&&操作符左边为真,继续进行右侧的运算,根据++b,先对b的值+1,所以b的值变为3。此时第二个&&左边为真,所以继续进行右侧对d的运算,d++带入4到i的运算中,也为真,所以i的值最后为1(真)。d的值再运算过后自动+1,输出d的结果为5,c保持不变为3。

总结:只要&&操作符左边不是0就继续进行右侧的运算,如果是0就不再进行右侧的运算。是0的话判断为假,直接输出结果0。根据&&操作符的预算法则:只有两侧都为真的时候才能判断整个的为真,输出1。左右任何一侧为假都会导致整体为假,输出结果0。

5. switch 语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。
switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重的
else if 改成更易⽤、可读性更好的形式。
switch (expression)
{
case value1: statement
case value2: statement
...
default: statement
}
上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀。
注:
• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式
5.1 if语句和switch语句的对⽐
练习:输⼊任意⼀个整数值,计算除3之后的余数
1.使用if语句完成
int main() {

	int b = 0;
	scanf("%d", &b);
	if (b % 3 == 0)
		printf("余数为0");
	if (b % 3 == 1)
		printf("余数为1");
	if (b % 3 == 2)
		printf("余数为2");
	return 0;
}
2.使⽤ switch 语句改写:
int main()
{
	int b = 0;
	scanf("%d", &b);
	switch (b % 3) {
	case 0:
		printf("余数为0");
	case 1:
		printf("余数为1");
	case 2:
		printf("余数为2");
	}
	return 0;
}

代码不会出现报错,但当我们输入3时就会出现以下情况

3种运算的结果都输出了,这是什么原因呢?

switch运算法则为从上往下依次顺下来,也是包含很多分支的。当我们输入3时得到的余数为0,程序此时不会结束,而是继续向下运行下面的分支,所以输出了多个结果。

那么这时我们就需要用一个指令来让程序运行完符合的分支后就自动退出,输出结果

5.2 switch语句中的break
switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。
当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
我们对上述的代码进行调整
int main()
{
	int b = 0;
	scanf("%d", &b);
	switch (b % 3) {
	case 0:
		printf("余数为0");
		break;
	case 1:
		printf("余数为1");
		break;
	case 2:
		printf("余数为2");
		break;
	}
	return 0;
}

这时我们输出的结果就正常了

上述的代码中,我们要注意的点有:
1. case 和后边的数字之间必须有空格
2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个 switch 语句。
练习:
输⼊⼀个1~7的数字,打印对应的星期⼏
例如:
输⼊:1 输出:星期⼀
输⼊:2 输出:星期⼆
输⼊:3 输出:星期三
输⼊:4 输出:星期四
输⼊:5 输出:星期五
输⼊:6 输出:星期六
输⼊:7 输出:星期天
int main()
{
	int day = 0;
	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;

	}
	return 0;
}
如果需求发⽣变化,变为:
1. 输⼊1~5,输出的是“⼯作⽇”;
2. 输⼊6~7,输出“休息⽇”
include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
  printf("⼯作⽇\n");
  break;
      case 6:
      case 7:
      printf("休息⽇\n");
      break;
}
return 0;
}
上⾯的练习中,我们发现应该根据实际的情况,来在代码中觉得是否使⽤ break ,或者在哪⾥使⽤
break ,才能正确完成实际的需求。
5.3 switch语句中的default

在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,比如 switch 后的表达式中的值⽆法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入
default ⼦句。
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执行default ⼦句。
就⽐如前⾯做的打印星期的练习,如果 day 的输⼊不是1~7的值,如果我们要提示:输⼊错误,则可以这样完成代码:
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
    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;
}
5.4 switch语句中的case和default的顺序问题
switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
不过我们通常是把 default 句放在最后处理的。

6. while循环

C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。
while 语句的语法结构和 if 语句⾮常相似。
6.1 if 和 while的对⽐
if(表达式)
语句;
while(表达式)
语句;//如果循环体想包含更多的语句,可以加上⼤括号

代码1

int main()
{
if(1)
printf("hehe\n"); //if后边条件满⾜,打印⼀次hehe
return 0;
}

代码2

int main()
{
while(1)
printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe
return 0;
}
6.2 while语句的执行流程

6.3 while 循环的实践
练习:在屏幕上打印 1~9 的值
参考代码:
int main()
{
	int i = 1;
	while(i <= 9)
	{
		printf(" %d ", i);
		i = i + 1;   //也可以写成i++

	}
	return 0;
}
6.4 练习

输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5
解析
1. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4
2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如            n=1234/10  得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。 
3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。
#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 while(n){
   printf("%d ", n % 10);
   n /= 10;
  }   
 return 0;
}

7. for循环

7.1 语法形式

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

for(表达式1; 表达式2; 表达式3)
语句;//如果循环体想包含更多的语句,可以加上⼤括号
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整
7.2 for循环的执行流程

7.3 for循环的实践
练习:在屏幕上打印1~10的值
参考代码:
int main() {
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		printf(" %d ", i);

	}
	return 0;
}

运行结果

7.4 练习

练习1:
计算1~100之间3的倍数的数字之和
参考代码:
 
int main()
{
	int i = 3;
	int sum = 0;
	for (i = 3; i <= 100; i += 3)
	{
	
		sum += i;
		printf("%d", sum );
	}
	return 0;
}

8. do-while 循环

8.1 语法形式
在循环语句中 do while 语句的使⽤最少,它的语法如下:
do
语句;
while(表达式);
while for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地方。

8.2 do while循环的实例
在屏幕上打印1~10的值
int main()
{
	int i = 1;
	do
	{
		printf(" %d ", i);
		i += 1;
	} while (i <= 10);
		return 0;
}

8.3 练习
输⼊⼀个正整数,计算这个整数是⼏位数?
例如:
输⼊:1234 输出:4
输⼊:12 输出:2
参考代码:
int main() {
	int i = 0;
	scanf("%d", &i);
	int cnt = 0;
	do {
		cnt++;
		i = i / 10;
	} while (i!= 0);  //当i不等于0的时候一直运行上述循环,直到i=0时停止运行
	printf("%d", cnt);
	return 0;
}

9. break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中 提供了 break continue 两个关键字,就是应⽤到循环中的。
break 的作⽤是⽤于永久的终⽌循环,只要 break 被执行,直接就会跳出循环,继续往后执 行。
continue 的作⽤是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有
所差异的。
9.1 while循环中的break和continue

1.break举例

#include <stdio.h>
int main()
{
   int i = 1;
   while(i <= 10)
{
     if(i == 5)
        break;//当i等于5后,就执⾏break,循环就终⽌了
      printf("%d ", i);
      i = i + 1;
    }
    return 0;
}
打印了1,2,3,4后,当i等于5的时候,循环在 break 的地⽅终⽌,不再打印,不再循环。
所以 break 的作⽤就是永久的终⽌循环,只要 break 被执行, break 外的第⼀层循环就终止了。
那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。
2.continue举例
continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏
下⼀次循环的判断。
上面的代码,如果把 break 换成 continue 会是什么结果呢?
int main() {
	int i = 1;
	while (i <= 10) {
		if (i == 5)
			continue;
              //当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
              //因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
			printf("%d", i);
		i += 1;
	}
	return 0;
}
continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,(以上代码中循环调整表达式为i +=1)可能会造成死循环。
9.2 for循环中的break和continue

1.break 举例

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

输出结果

2.continue举例

上面的代码,如果把 break 换成 continue 会是什么结果呢

int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
			printf("%d", i);
	}
	return 0;
}

运行结果

for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调
整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤
continue 来实现。
9.3 do while循环中的break和continue

do.while 语句中的 break continue 的作⽤和 while 循环中几乎⼀模⼀样。
#include <stdio.h>
int main()
{
   int i = 1;
   do
      {
        if(i == 5)
          break;
         printf("%d ", i);
       i = i + 1;
      }while(i <= 10);
   return 0;
}
#include <stdio.h>
int main()
{
   int i = 1;
       do
     {
       if(i == 5)
       continue;
         printf("%d ", i);
       i = i + 1;
      }while(i <= 10);
  return 0;
}

10. 循环的嵌套

10.1 练习

找出100~200之间的素数,并打印在屏幕上。注:素数⼜称质数,只能被1和本⾝整除的数字。

10.2 题目解析:
1. 要从100~200之间找出素数,首先得有100~200之间的数,这⾥可以使⽤循环解决。
2. 假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使用循环解决。
3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。
代码示例:
int main()
{
	int x = 0;
	for (x = 100; x <= 200; x++)  //通过循环一次输出100-200的数,作为被除数参与运算
	{
		int y = 0;
		int z = 0;
		for (y = 2; y <= x; y++)  //除去1之外,通过嵌套循环输出2-200的数,y作为除数参与运算
		{
			if (x % y == 0)
	          int z = 1; //定义如果符合x%y == 0那么z会变为1,直接通过break退出循环,
                         //该数不会作为结果输出
			    break;
		}
		if (z == 0)            //如果不符合x%y == 0,那么z仍然是0,继续向下运行

			printf(" %d ", x);  //输出结果符合z == 0时x的值,即是求得的素数

	}
	return 0;
}
int main() {
	
	int m = 100;
	
	while (m <= 200) {
		int b = 1;
		int n = 2;
		m++;
			
		while (n <= (m - 1)) {  //确定m除以n不为自身相除

			if (m% n == 0){   //不是素数
				
				b = 0;
				break;
			}
			else 
				n++;
							
		}
		if (b == 1)
			printf("%d ", m);
		
	}
	return 0;

}

两种代码最后结果是一样的:

11. goto 语句

goto 语句和跳转标号, goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。

#include <stdio.h>
int main()
{
   printf("hehe\n");
   goto next;
   printf("haha\n");
next:
    printf("跳过了haha的打印\n");
    return 0;
}

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

for(...)
 {
     for(...)
      {
        for(...)
         {
             if(disaster)
             goto error;
          }
       }
 }
    error:
                        //...
插入不了文本了就用这个代码框进行一个结尾吧。
完,2025.10.12 23:40:18
笔者:John Wick
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值