《循环》
1.while循环
- 如果我们把while翻译作“当”,那么⼀个while循环的意思就是:当条件满⾜时,不
断地重复循环体内的语句;
-
循环执⾏之前判断是否继续循环,所以有可能循环⼀次也没有被执⾏;
-
数数几位数
-
⼈对数字的计算能⼒⽐⽂字弱
-
计算机最不擅长的事就是看一眼就知道了
#include <stdio.h> int main() { int x; int count = 0; scanf("%d",&x); count++; x=x/10; while(x>0) { x=x/10; count++; } printf("%d",count); return 0; }
-
2.do-while循环
-
do-while循环和while循环很像,区别是在循环体执⾏结束的时候才来判断条件;
-
也就是说,⽆论如何,循环都会执⾏⾄少⼀遍,然后再来判断条件;
-
与while循环相同的是,条件满⾜时执⾏循环,条件不满⾜时结束循环;
-
数数几位数
#include <stdio.h> int main() { int x; int count = 0; scanf("%d",&x); do { count++; x=x/10; } while(x>0); printf("%d",count); return 0; }
小心while后面分号的存在
3.for循环
-
for循环像⼀个计数循环:设定⼀个计数器,初始化它,然后在计数器到达某值之前,重复执⾏循环体,⽽每执⾏⼀轮循环,计数器值以⼀定步进进⾏调整,⽐如加1或者减1
-
for ( count=10; count>0; count-- )就读成:“对于⼀开始的count=10,当count>0时,重复做循环体,每⼀轮循环做完循环体内语句后,使得count–。”
-
循环控制变量i只在循环⾥被使⽤了,在循环外⾯它没有任何⽤处。因此,我们可以
把变量i的定义写到for语句⾥⾯去。
-
for == while
for ( 初始动作; 条件; 每轮的动作 ) { 代码; }
初始动作 while(条件) { 代码; 每轮的动作; }
-
for中的每⼀个表达式都是可以省略的,for (; 条件; ) == while ( 条件 );
-
循环次数for ( i=0; i<n; i++ )则循环的次数是n,⽽循环结束以后,i的值是n;
-
循环的控制变量i,是选择从0开始还是从1开始,是判断i<n还是判断i<=n,对循环的次数,循环结束后变量的值都有影响;
4.三种循环的选择
- 如果有固定次数,⽤for;
- 如果必须执⾏⼀次,⽤do_while;
- 其他情况⽤while
5.tips
- 循环前可能用另一个变量保存原始值,后面使用;
- 计数通常从零开始;
- 做求和的程序时,记录结果的变量应该初始化为0;
- ⽽做求积的变量时,记录结果的变量应该初始化为1;
6.循环控制break vs continue
-
break: 跳出循环;
-
continue: 跳过循环这⼀轮剩下的语句进⼊下⼀轮;
-
break只能对它所在的那层循环做;
-
接⼒break跳出所有循环;
int main() { int x; int one, two, five; int exit = 0; scanf("%d", &x); for ( one = 1; one < x*10; one++ ) { for ( two = 1; two < x*10/2; two++ ) { for ( five = 1; five < x*10/5; 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 == 1 ) break; } if ( exit == 1 ) break; } return 0; }
-
goto跳出所有循环
#include <stdio.h> int main() { int x; int one, two, five; scanf("%d", &x); for ( one = 1; one < x*10; one++ ) { for ( two = 1; two < x*10/2; two++ ) { for ( five = 1; five < x*10/5; 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; }
7.嵌套的循环
循环⾥⾯还是循环
8.循环计算
-
猜数游戏
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(0)); int number = rand()%100+1; int count = 0; int a = 0; printf("我已经想好了一个1到100之间的数。"); do { printf("请猜这个1到100之间数∶ "); scanf("%d",&a); count ++; if ( a > number ) { printf("你猜的数大了。"); } else if ( a< number ) { printf("你猜的数小了。"); } } while (a != number); printf("太好了,你用了%d次就猜到了答案。\n",count); return 0; }
-
随机数
每次召唤rand()就得到⼀个随机的整数;
x % n 的结果是[0, n-1]的⼀个整数;
rand()%100+1得到[1,100]
-
整数的分解
- 对⼀个整数做%10的操作,就得到它的个位数;
- 对⼀个整数做/10的操作,就去掉了它的个位数;
- 然后再对第2部的结果做%10,就得到原来数的⼗位数了;
- 依此类推…
- 逆序
#include <stdio.h> int main() { int x; scanf("%d", &x); int digit; int ret = 0; while ( x > 0 ) { digit = x%10; printf("%d", digit); ret = ret*10 + digit; x /= 10; } return 0; }
-
正序
#include <stdio.h> int main() { int x; scanf("%d", &x); int mask = 1; int t = x; while ( t>9 ) { t /= 10; mask *=10; } printf("x=%d, mask=%d\n", x, mask); do { int d = x / mask; printf("%d", d); if ( mask > 9 ) { printf(" "); } x %= mask; mask /= 10; } while ( mask > 0 ); printf("\n"); return 0; }
-
素数运算
#include <stdio.h> int main() { int x; scanf("%d", &x); 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; }
-
最大公约数
#include <stdio.h> int main() { int a,b; int t; scanf("%d %d", &a, &b); int origa = a; int origb = b; while ( b != 0 ) { t = a%b; a = b; b = t; } printf("%d和%d的最大公约数是%d.\n", origa, origb, a); return 0; }