剖析:循环结构

  生活中很多操作需要重复进行,比如统计50个数据是否过关等等。如果找到一个方法统计完一个数据后,再用这个方法一直去重复49次,过程显得非常冗长,在这种情况下,我们就可以引入一个新方法:循环结构  来解决重复的问题。

1.  while  循环

 while循环会先判断括号内的表达式,如果成立则进行下一步。其实while的用法和if相似,只是在if判断的基础上可以通过i++从而引入一个循环的判断

可以看出其实是等效的,下面是while的运行流程图

我们可以用这种方法判断一个数字的位数

注意,记得给变量赋值,而且需要给到一个停下的条件,不能让循环无限的进行下去

2.  for  循环

for循环的语句更简单,也更常用。for循环的一般形式是for(表达式1;表达式2;表达式3),表达式1一般是变量的定义,表达式2是判断条件,表达式3是循环的调整,比如我们输入100内3的倍数

相对与用其他的方法更简单明了,当然我用一些处理来使得数据看起来更舒服

3.  do while  循环

do while循环也是循环的一种,只不过他一般先进行程序,再判断循环条件是否成立

当然,这个方式的好处是,可以先执行程序,避免省略一些情况

4.  while 循环和do while 循环的比较

while循环是先判断再执行, do while先执行后判断。do while的不同体现在

在这里区别就很明显了,我要求数字要大于10才能打印haha,我输入了6当然不满足条件,while在判断的时候就发现这个命题为假,没有执行,而do while循环先不假思索得打印了haha,然后判断的时候才发现不成立。

5.  循环嵌套

循环嵌套的意思是在循环里面再添加一个循环,比如我打印数组的时候就需要用到这个

6.  break和continue的运用

break可以帮助我们终止进程,continue可以帮助我们跳过下一个进程。直接举例

如果我们引入break

我们就可以在中间i为6的时候终止循环

如果换成continue呢

则会变成跳过打印6的情况,这就是break和continue的运用

7.  素数判断

如果我们想求100到200内的素数,我们该怎么办呢

这时候我们就会想到素数的定义是没有因数,即不能为两个非0或者1的数相乘得到。那么我们可以通过一个循环,一个一个尝试,直到找到一个特例不符合素数的条件然后判断他不是素数

#include <stdio.h>
int main()
{
	int a = 0;
	for (a=100;a<=200;a++)
	{
	 	int b = 0;
	 	for(b=2;b<a;b++)
	 	{
			if (a%b==0)
	 	    {
	 	      	printf("%d\t",a);
	 	        break;
			}
	 	}	
	} 
	
	return 0;
}

通过这种方法我们可以找出所有的非素数

当然我们可以改进一下,如下

#include <stdio.h>
int main()
{
	int a = 0;
	
	for (a=100;a<=200;a++)
	{
	 	int c = 1;
		int b = 0;
	 	for(b=2;b<a;b++)
	 	{
			if (a%b==0)
	 	    {
	 	      	c = 0;
	 	        break;
			}
	 	}	
	    if (c==1)
	    {
	 	   printf("%d\t",a);
	    }
	} 
	
	return 0;
}

当我们进行这样的操作后,我开始假设一个变量c为1,如果我判断出这个数字为非素数,那我改变c为0,这样我在后面满足c=1的前提时就不会去打印非素数,剩下的全都是素数。

还有一个优化的方法,比如一个数为16,他为2*8   4*4   8*2,当我们判断的数大于4时就会产生重复,所以我们可以认为如果一个数不能被他的平方根整除,就是素数

#include <stdio.h>
#include <math.h>
int main()
{
	int a = 0;
	
	for (a=100;a<=200;a++)
	{
	 	int c = 1;
		int b = 0;
		int d = 0;
		d = sqrt(a);
	 	for(b=2;b<d;b++)
	 	{
			if (a%b==0)
	 	    {
	 	      	c = 0;
	 	        break;
			}
	 	}	
	    if (c==1)
	    {
	 	   printf("%d\t",a);
	    }
	} 
	
	return 0;
}

这样处理完会减少程序的循环与判断次数,让程序运行更快

8. goto语句

goto语句是一种更迅速跳出程序的方法。如果我们位于一个复杂的嵌套循环,一个break只能暂停当前程序,如果真的很复杂我们就需要一堆break,这样我们就可以引入goto语句,可以一步就跳转到外面

一旦我们判断完i为12,直接跳转到goto语句,更快更精确。

9.  迭代法

如果我们已知一个迭代公式,那么我们可以通过迭代的方法一直循环缩小差距,直到将误差降到目标值。

比如我们求平方根公式,他的迭代近似公式为X(n+1)=0.5*(Xn+a/Xn)

#include <stdio.h>
#include <math.h>
int main()
{
    float a = 0;
	float X0 = 0;	
	float X1 = 0;
	printf("输入数字:\n");
	scanf("%f",&a)	;
	X0=a/2;
	X1=(X0+a/X0)/2;
	do
	{
		X0=X1;
		X1=(X0+a/X0)/2;
	}	
	while (fabs(X0-X1)>=1e-5);
	printf("根号%5.2f的结果是%8.5f\n",a,X1);
	return 0;
} 

通过这个方法,我们得到

对照一下sqrt函数,通过不断的迭代,最终也能实现sqrt函数的效果。

   好了,文章到这边基本上介绍完了常量与变量,作者制作不易,希望能收获你的喜欢和关注 68ffdcfbee5143c49a83a0a878c54c78.png

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值