C语言 循环结构

循环结构
重复做一个同样的事情,在C语言中有4种循环结构
1)if 和 goto
2)while 循环
3)do while 循环
4)for 循环

1.goto循环 (一般不使用)
goto 跳转,goto XX 跳转到XX(行标识符)行,一般与if语句联用,if判断满足什么条件然后 (无条件)跳转。
语法 : goto 行标识符;
“行标识”: 标识符,用来标识一行。它一般是写在一行的最前面,行标识允许前面有空白字符。

loop : (行标识符)
sum = sum + i;
i = i + 1;
if(i <= 100)
{
	goto loop ;		//跳转到loop:的那一行
}

2.while 语句
while (表达式) 当表达式为非0时执行,当表达式为0时结束
{
语句;
}

int  i = 1;
int  sum = 0;
while (i <= 100)
{
	sum = sum + i;		注意先打两个括号防止忘记
	i++;				如果不打括号,循环到第一个;就会跳回去,不会执行后面的
} 

3.do while 循环
do 循环先执行后判断,至少执行1次。
{
语句; do 必须和 while 时成对的
}
while (表达式);

int n;   
scanf("%d", &n);   		//求n !
int sum = 1;
int i = 0;	
do
{
	i++;
	sum = sum * i;
}
while(i < n);
printf("sum == %d\n", sum);

4.for 循环
语法: for(表达式1;表达式2;表达式3)
{
语句;
}
先执行一次“表达式1”,然后判断“表达式2”的值,如果为非0,则执行“语句”,然后再跳到上面执行“表达式3 ,表达式可以省略,表达式2省略默认为1,死循环(一直循环)

#include <stdio.h>				//打印水仙花数      
int main()						//三位数(100 ~ 999),并且个位、十位、百位上面的数字的立方和等于其本身。
{
	int i;
	int a,b,c;	
	for(i = 100; i < 1000; i++)
	{
		a = i % 10;
		b = i /10 % 10;
		c = i / 100;		
		if(i == a*a*a + b*b*b + c*c*c)
		{
			printf("%d\n", i);
		}
	}
} 

5.break 和continue
break 跳出循环:

可使用在switch/ while / do...while/ for 
		(1) break用在switch中用来跳出它所属的switch语句
		(2) break用在循环体语句中,用来跳出它所属的那一层循环

continue: 结束当前循环继续

结束本次循环,继续下一次循环。
		continue只能够在循环体语句里面出现(while / do...while/ for

1.求 Sn = a + aa + aaa + … + aaaa…a (n个a)
n,a由用户输入。
如:
n = 5, a = 2
Sn = 2 + 22 + 222 + 2222 + 22222

#include <stdio.h>
int main()
{
	int Sn=0; 
	int n,a;
	scanf("%d%d",&n,&a);
	for(int i=1;i<=n;i++)
	{
		int temp=0;             //Sn中的各个数
		for(int j=1;j<=i;j++)
		{ 
			int temp2=a;         //temp的各个位数
			for(int k=1;k<j;k++)
			{
				temp2 = temp2*10;  
			}
			temp = temp+temp2;
		}
		printf("temp:%d\n",temp);
		Sn = temp+Sn;
	}
	printf("Sn的值为:%d \n",Sn);		
}

2. 连续的正整数之和。 一个正整数有可能被表示为
n(n >= 2)个连续的正整数之和.
如:
15 = 1+2+3+4+5
15 = 4+5+6
15 = 7+8
输入一个正整数,找出所有可能的序列(也有可能没有)

#include <stdio.h>
int main()
{
	int num;
	printf("请输入一个正整数");
	scanf("%d",&num);
	for(int i=1;i<num;i++)          //每次从i开始+
	{
		int sum=0;
		for(int j=i;j<num;j++)
		{
			sum = sum+j;
			if(sum==num)
			{	
				printf("%d = ",num);
				for(int k=i;k<=j;k++)   //用于输出累加数据
				{
					if(k==j)
					{
						printf("%d ",k);
					}
					else
					{
						printf("%d + ",k);
					}
				}
				printf("\n");
				break;                  //当满足条件是跳出循环
			}
		}
	}
}

3.1024的655次幂最后三位数是多少?

#include <stdio.h>
int main()
{
	int a=1;
	for(int i=1;i<=655;i++)     //最后三位数的值,只涉及到原数的最后三位,防止越界
	{
	    a=a*1024;
		a=a%1000;
	}
	printf("%03d\n",a);
}

4.求100000000!末尾有多少个0?

#include <stdio.h>
int main()
{
	int count=0;
	for(int i=1;i<100000000;i++)    //计算0只需要计算5的个数,一个5乘以偶数为一个0
	{
		for(int j=i;;)
		{
			if(j%5==0)
			{
				j=j/5;
				count++;
			}  
			else
			{
				break;
			}
		}
	}
	printf("%d\n",count);
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值