循环结构
重复做一个同样的事情,在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);
}