看一个问题
	比如:求1-100以内所有整数的和!
		方法一: int sum = 1+2+3+···+100;
		
		方法二: int sum = 0;
					int i = 1;
					sum += i;
					i++;
					
					把上面两句执行100遍就行了。
					
上述的两句语句需要重复100遍,这样很不科学,我们能不能让计算机帮我们做重复的事情呢?
		可以!循环
		
循环的本质就是重复,所有重复的代码都可以用循环来实现,那么在c语言中,能够实现循环的语句有哪些?
	goto; for(); while(); do while();
	
1. goto 语句:
goto 去哪?
goto就是无条件跳转语句,让cpu到指定的地方去执行下一条语句
	语法:
		需要有一个行标识符,标定你要去的位置。一般写在某一行的最前面,同时还允许行标识符前面出现空白符(空格 tab)
		行标识符:
				goto 行标识符;
				
例子:用goto语句实现1-100的和:
		
		int main()
		{
			int sum = 0;
			int i = 1;
	loop:
			sum += i;
			i++;
			if(i <= 100)
			{	
				goto loop;
			}
			else
			{
				printf("sum = %d\n",sum);
				return 0;
			}
				
		}
	
练习:求1-100的所有3的倍数之和
		int main()
		{
			int sum = 0;
			int i = 1;
		loop:
			if(i <= 100)
			{
				if(i%3==0)
				{
					sum += i;
					i++;
					goto loop;
				}
				else
					i++;
					goto loop;
			}
			else
				printf("sum = %d\n",sum);
				return 0;
			
		}
		
		
注意事项:
	goto语句本身没有什么问题,但是goto语句过于灵活,是无条件跳转语句,会导致一个程序可读性变差
	建议限制使用goto语句
	
2. while 语句:
		语法:
			while(表达式)
			{
				语句1;
				语句2;
			}
			执行过程:
				先判断表达式的值是否为真,如果为真(非0),那么就执行语句,执行完while里面所有的语句以后,再次判断表达式的值是否为真,再执行语句,直到表达式的值为假,或者遇到break;才跳出循环。
				
						表达式:任意的合法表达式
						语句:单语句,复合语句
						
			练习:求1-100的整数和
			
			int main()
			{
				int sum = 0;
				int i = 1;
				while(i<=100)
				{
					sum += i;
					i++;
				}
				printf("sum = %d\n",sum);
				return 0;
			}
			
			练习2:用while循环实现输出将一个正整数逆序过来的值
				输入: 12345  987
				输出: 54321  789
				int main()
				{
					int data,m,n;
					scanf("%d", data);
					while(data)
					{
						m = data % 10;
						n = n * 10 + m;
						data /= 10;
					}
					printf("%d\n", n);
					return 0;
				}
3. do while 语句:
		语法:
		do
		{
			语句;
		}while(表达式);
		
	执行过程:无条件执行一次语句,再判断表达式的值,如果表达式的值为真(非0),就继续执行语句,执行完语句后再判断表达式的值,为真(非0),继续执行,直到表达式的值为假,才退出循环。
	
		和while()语句的区别:就是先无条件执行一次语句,执行完后,就是个while()语句。
			例子:
				求1-100的和
				
					int main()
					{
						int sum = 0;
						int i = 1;
						do
						{
							sum += i;
							i++;
						}while(i<=100)
						printf("sum = %d\n",sum);
						
					}
		
				求n的阶乘,n由键盘输入
				5! = 5*4*3*2*1
				
				int main()
				{
					int n,j=1;
					scanf("%d", &n);
					do
					{
						j *= n;
						n--;
					} while (n);

					printf("n! = %d", j);
					return 0;
				}
				
				
for 语句:
		语法:
			for(表达式1;表达式2;表达式3)
			{
				语句1;
				语句2;
			}
	执行过程:
			首先无条件执行表达式1,判断表达式2的值,如果为真(非0),就执行语句,执行完之后再执行表达式3
			到这里一次循环就结束了。
				从第二次循环开始:
					不再执行表达式1,直接判断表达式2为真(非0),就执行语句,再执行表达式3,直到判断表达式2的值为假(0)就跳出循环
			for的死循环怎么表示:for(;1;)  for(;;)
				
			for的三个表达式,都可以省略,其中如果第二个表达式为空,也意味着死循环。
				for(i=0;;i++)
	
		用for循环求1-1000的和:
		
		int main()
		{
			int sum = 0;
			int i;
			for(i=1;i<=1000;i++)
			{
				sum += i;
			}
			printf("sum = %d\n",sum);
			return 0;
		}
		
		打印100-1000的水仙花数:
		水仙花数:
			个位的立方 + 十位的立方 + 百位的立方等于其本身
			
			int main()
			{
				int a,b,c,i;
				
				
				for(i=100;i<1000;i++)
				{
					a = i%10;
					b = (i/10)%10;
					c = (i/100)%10;
					if(((a*a*a)+(b*b*b)+(c*c*c))==i)
						printf("%d\n",i);
				}
				return 0;
			}
	
break; 和 continue; :
		break语句只能在switch语句和循环语句(while;do while;for;)中使用
		作用:
			在switch语句中,用来跳出它所在的switch结构
			在循环语句中用来跳出它所在的循环
			
		continue语句只能用在循环(while;do while;for;)语句中
		作用:
			用来结束本次循环,开启下次循环
			
			
	例子:用continue语句,编程实现0-20内不是3的倍数
	
		int main()
		{
			int i; 
			for(i=0;i<20;i++)
			{
				if(i%3==0)
				continue;
				printf("%d\n",i);
			}
			return 0;
		}
		
	练习:
		用break判断一个数(2-100)是否为质数
		
		int main()
		{
			int i,n;
			for(i=2;i<=100;i++)
			{
				for(n=2;n<=i;n++)
				{
					if((n!=i)&& ((i%n)==0))
						break;
					else if((n!=i)&& ((i%n)!=0))
						continue;
					else
						printf("%d是质数!\n",i);
					
				}
			}
			return 0;
		}
			
	
	
	
	
	
	
	
	
	

逸一时,误一世