分支循环语句(下)

书接上回

1.while循环:与if一样,while后面的括号也表示0或1,首先执行括号内的表达式,表达式不为0,就是真,就进行下面的语句,语句结束后表达式进行判断,如果表达式结果为真,就继续执行,如果为假,就跳出循环,直接结束。

流程图:

//打印1—10
include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i++;//i+以产生数字1—10,直到i=11不满足条件
	}
    return 0;
}

 其中i=1为初始化部分,i<=10为判断部分,i++为调整部分,这三个部分共同构成while循环,但是随着代码的增多或者复杂,这三个部分会比较分散,不太容易操作,因此就有了for循环的出现。

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

#include <stdio.h>
//打印1—10
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
    return 0;
}

第一步初始化 ,让i=1,第二步判断,判断i是否小于10,小于就为真,为真走下面的语句,执行完后走表达式3,让i++,变成2,再判断是否小于10,以此类推,直到最后i++完成之后变成11,再判断,大于10为假,就跳出循环,结束了。

3.do-while循环

while和for都是先判断,条件满足再循环,而do-while循环是先执行循环体内的语句,再执行while后面的表达式,为真就进行下一次,为假则不再循环。 

//打印1—10
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}

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

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int count = 0;
	do
	{
		count++;
		n = n / 10;
	} while (n);
	printf("%d\n", count);
	return 0;
}

4.break和continue:在循环执行的过程中,如果发生某些情况需要提前终止循环,C语言提供了break和continue两个关键字去提前终止循环。

break的作用是永久终止循环,只要break执行,就直接跳出循环,继续往后执行。 

continue的作用是跳过本次循环continue后面的代码,在for循环和while循环中是由差异的。 

include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
        if(i==5)
        break;
		printf("%d ", i);
		i++;//i+以产生数字1—10,直到i=11不满足条件
	}
    return 0;
}

当i==5的时候,执行break,跳出循环,只打印1 2 3 4 。如果将break换成continue,结果会变成死循环,光标一直在闪,因为当i==5时,执行continue然后跳过后面的代码,i++被跳过了,循环重新执行 ,但是i没有变停在了5这里,所以continue会一直执行。

#include <stdio.h>
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

 与while不同的是,执行continue跳过之后的代码,然后又回到调整部分即i++,然后就会接着打印。

5.循环的嵌套:可以将前面所讲的三种循环进行嵌套以解决更加复杂的问题,实现更加复杂的功能。

例:打印出100-200之间的素数(只能被1和它本身整除的数)

分析:首先需要产生100-200之间的数,然后再进行判断。

关于如何进行判断:拿2~i-1之间的数字去试除,如果这些数字中有任何一个数字能整除i,那么i就不是素数,反之为素数。即先产生2~i-1之间的数,然后去试除i。

#include <stdio.h>
int main()
{
	int i = 0;
	int count = 0;//计数素数个数
	for (i = 100; i < 200; i++)
	{
		//判断i是否为素数
		//产生2—i-1之间的数
		int flag = 1;//假设i是素数,当发现i%j==0,就让flag=0来标记它是素数
		int j = 0;
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d", count);
	return 0;
}

优化:其实没有必要拿2—i-1之间全部数字去除。假如存在数字m=a*b ,那么a和b中至少有一个数字<=(m)^1/2。例如16=4*4=2*8,如果16可以被2整除那么16会被“另一边”的8给整除了,这个“另一边”的分界线就是4也就是(16)^1/2。 那么代码就可以改进为:

#include <stdio.h>
#include <math.h>
int main()
{
	int i = 0;
	int count = 0;//计数素数个数
	for (i = 100; i < 200; i++)
	{
		//判断i是否为素数
		//产生2—i-1之间的数
		int flag = 1;//假设i是素数,当发现i%j==0,就让flag=0来标记它是素数
		int j = 0;
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d", count);
	return 0;
}

其中sqrt()是一个库函数,表示开平方。

还有一个细节就是偶数(除了2)是不会为素数的 ,所以就可以把代码再改进为:

#include <stdio.h>
#include <math.h>
int main()
{
	int i = 0;
	int count = 0;//计数素数个数
	for (i = 101; i < 200; i+=2)
	{
		//判断i是否为素数
		//产生2—i-1之间的数
		int flag = 1;//假设i是素数,当发现i%j==0,就让flag=0来标记它是素数
		int j = 0;
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d", count);
	return 0;
}

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

#include <stdio.h>
int main()
{
	printf("hehe\n");
	goto next;
	printf("haha\n");
next:
	printf("heihei\n");
	return 0;
}

 另外,next只是随便起的名字,可以自己起名字,只是一个标签。goto语句不要随便使用,会打乱程序的执行流程。在多层循环的代码中,如果想想快速跳出使用goto就会方便许多。

OK以上就是分支循环语句的一些基本内容了,拜拜了各位。 

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值