goto语句循环
goto语句为无条件转向语句(无条件跳转),其语句标号用标识符表示,定名规则由字母、数字和下划线组成(同变量名定名规则)。不能用整数作标号,如label_1;loop等。一般在需要大大提高效率时使用。
int main(void)
{
int sum = 0;
int i;
i = 1;//循环变量初始化语句
loop:
if(i <= 100)//循环的执行条件语句
{
sum = sum + i;
++i;//使循环趋于结束的语句
goto loop;
}
printf("%d\n", sum);
return 0;
}
while语句循环
“当型”循环结构,表达式为非0时,执行while语句中的内嵌语句。
先判断表达式,后执行语句
int main(void)
{
int sum = 0;
int i;
i = 1;//循环变量初始化语句
while(i <= 100)//循环的执行条件语句
{
sum = sum + i;
++i;//使循环趋于结束的语句
}
printf("%d\n", sum);
return 0;
}
若循环体包含一个以上的语句,应用"{}"括起来,以复合语句形式出现。如果未加"{}",则while语句的范围只到while后面第一个“;”处结束。
do...while语句循环
先执行循环体,后判断循环条件是否成立
若表达式结果为非零(真)时,返回重新执行循环语句,反复进行,直到表达式的值为0时,循环结束。
int main(void)
{
int sum = 0;
int i;
i = 1;//循环变量初始化语句
do
{
sum = sum + i;
++i;//使循环趋于结束的语句
}while(i <= 100);//循环的执行条件语句,注意此处有(;)
printf("%d\n", sum);
return 0;
}
for语句循环
无论循环次数是否确定,只要给出循环结束条件均可使用,可以完全替代while语句。
for(循环变量初始化;循环的执行条件;循环趋于结束语句)
int main(void)
{
int sum = 0;
int i;
for(i = 1; i <= 100; ++i)//中间用(;)隔开
{
sum = sum + i;
}
printf("%d\n", sum);
return 0;
}
练习
1.输出水仙花数
int main(void)
{
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);
}
}
return 0;
}
2.输出1--10000之间所有的回文数
int main(void)
{
int i;
for(i = 1;i <= 10000;++i)
{
int n = 0;
int k = i;
while(k)
{
n = n * 10 + k % 10;
k /= 10;
}
if(n == i)
{
printf("%d,",i);
}
}
printf("\b \n");
return 0;
}
循环嵌套
例如:输出100以内的所有素数
int main(void)
{
int i;
for(i = 2;i <= 100;++i)
{
int n;
for(n = 2;n < i;++n)
{
if(i % n == 0)
{
break;
}
}
if(!(n < i))
{
printf("%d\n", i);
}
}
return 0;
}
比较:
(1)4种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不 提倡用goto型循环。
(2)在while循环和do…while循环中,只在while后面的括号内指定循环条件,因 此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i++,或i=i+ 1等)。 for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作 全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。
(3)用while和do…while循环时,循环变量初始化的操作应在while和dowhile 语句之前完成。而for语句可以在表达式1中实现循环变量的初始化
(4)while循环、do·while循环和for循环,可以用break语句跳出循环,用continue 语句结束本次循环。而对用goto语句和i语句构成的循环,不能用break语句和continue语句进行控制。