目录
——循环的计算和选择
——for循环
for(初始动作;条件;每轮的动作) {
}
注:for中的每一个表达式都是可以省省略的。
——循环次数
for ( i=0;i<n;i++ )
循环的次数是 n ,而循环结束以后,i的值是 n 。循环的控制变量 i ,是选择从0开始还是从1开始,是判断 i < n 还是判断 i <= n ,对循环的次数,循环结束后变量的值都有影响。
#include <stdio.h>
int main()
{
int i;
for ( i=0; i<5; i++) {
printf("i=%d", i);
}
printf("\n最后i=%d\n", i);
return 0;
}
for ( i=0; i<5; i++)
结果:i=5
for ( i=1; i<=5; i++)
结果:i=6
——for=while
for ( int i=1; i<=n; i++ ) {
fact *= i;
}
等于
int i=1;
while (i<=n) {
fact *= i;
i++;
}
for( ; 条件 ; ) = while ( 条件 )
——循环选择
1、如果有固定次数,用for。
2、如果必须执行一次,用do-while。
3、其他情况用while。
——循环控制
——判断素数
#include <stdio.h>
int main()
{
int x;
// scanf("%d", &x);
x = 6;
int i;
int isPrime = 1; // x是素数?
for ( i=2; i<x; i++) {
if ( x % i == 0) {
isPrime = 0;
break;
}
}
if ( isPrime == 1 ) {
printf("是素数\n");
} else {
printf("不是素数\n");
}
return 0;
}
——break和continue
break:跳出循环。
continue:跳出循环这一轮剩下的语句进入下一轮。
注:只能对它所在那层的循环做
——嵌套的循环
嵌套的循环:循环里面还是循环
——求100以内素数
#include <stdio.h>
int main()
{
int x;
// scanf("%d", &x);
x = 6;
for ( x = 2; x<100; x++ )
{
int i;
int isPrime = 1; // x是素数?
for ( i=2; i<x; i++) {
if ( x % i == 0) {
isPrime = 0;
break;
}
}
if ( isPrime == 1 ) {
printf("%d", x);
}
}
printf("\n");
return 0;
}
——求50个素数
#include <stdio.h>
int main()
{
int x;
// scanf("%d", &x);
x = 2;
int cnt = 0;
// for ( x = 2; x<100; x++ )
while ( cnt < 50 )
{
int i;
int isPrime = 1; // x是素数?
for ( i=2; i<x; i++) {
if ( x % i == 0) {
isPrime = 0;
break;
}
}
if ( isPrime == 1 ) {
printf("%d", x);
cnt ++;
}
x++;
}
printf("\n");
return 0;
}
或
// for ( x = 2; x<100; x++ )
// while ( cnt < 50 )
for ( x=2; cnt<50; x++ )
......
// x++;
——跳出嵌套循环
——凑硬币(接力break)
#include <stdio.h>
int main()
{
int x;
int one, two, five;
int exit = 0;
//scanf("%d", &x);
x = 2;
for ( one = 1; one < x*10; one++ ) {
for ( two = 1; two < x*10; two++ ) {
for ( five = 1; five < x*10; five++ ) {
if ( one + two*2 + five*5 == x*10 ) {
printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",
one, two, five, x);
exit = 1;
break;
}
}
if ( exit ) break;
}
if ( exit ==1 ) break;
}
return 0;
}
——goto
int x;
int one, two, five;
scanf("%d", &x);
x = 2;
for ( one = 1; one < x*10; one++ ) {
for ( two = 1; two < x*10; two++ ) {
for ( five = 1; five < x*10; five++ ) {
if ( one + two*2 + five*5 == x*10 ) {
printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",
one, two, five, x);
goto out;
}
}
}
}
out:
return 0;