循环
while 语句
循环三要素:起点,终点,数据变化规律
for 与 while 的区别:从 structure 来说,for 比较严谨,while 比较自由
while 语句使用格式
|
|
break or continue
break:直接跳出循环,任意位置执行即直接跳出循环,无视后面的语句
continue:结束当次循环
|
|
do…while
|
|
该语句至少要被执行一次,而 while 语句可能一次都不会执行
循环嵌套
|
|
例题
- 斐波那契数列的前 20 项(a1=1; a2=1; an=an-1+an-2,n>=3),每行仅仅打印 5 个
if (i%5==0)printf('\n');
-
求两个数最大公约数/最小公倍数
最大公约数:能同时整除这两个数的最大数 25 15 —— 5
求解方法:辗转相除
1 2 3 4
28 % 6 = 4 != 0 6 % 4 = 2 != 0 4 % 2 = 0 // 此时 2 的值就是最大公约数
1 2 3 4 5 6 7 8 9 10
int m,n,r; int a=m,b=n; scanf("%d%*c%d",&m,&n); while(m%n!=0) { r = m%n; m = n; n = r; } printf("最大公约数=%d,最小公倍数=%d",n,a*b/n);
最小公倍数:两个数的乘积除以最大公约数
1 2 3 4
// 8和6 ,最大公约数 2 6*8/2 =48/2 =24
-
不定次数的输入🍮,从键盘输入,以 0 结束,ask input of valve
1 2 3 4 5 6 7 8 9 10 11
int n,a,i=1; float aver; scanf("%d",&a); aver = a; while(n!=0) { scanf("%d",&n); aver += n; i++; printf("%f",aver/i); // 注意这里似乎在输入结束后才会打印? }
-
从键盘输入字符以回车键结束,统计数字符号的个数
1 2 3 4 5 6 7
char n, int i=0; while((n=getchar())!='\n') { if(n>=48 && n<=57) i++; } printf("%d",i);
-
从键盘输入 n 求 1!+2!+3!+4!…+n!
1 2 3 4 5 6 7 8 9 10 11
int n,sum; int b; scanf("%d",&n); for (int i=1; i<=n; i++){ b = 1; for (int j=1; j<=i; j++){ b *= j; } sum += b; } printf("%d",sum);
-
输出 1-1000 之间完数,所有因子的和(不包括自身)等于该数
1 2 3 4 5 6 7
for (int i=1; i<1000; i++){ // 判断有效范围内数 sum = 0; // 因子之和 for (int j=1; i<i; j++){ // 求因子 if (i%j==0) sum+=j; } if(sum==i) printf("%d",i); }
-
输出 50-100 之间的素数,即只能被1个自身整除
1 2 3 4 5 6 7 8 9 10
for(int i=50; i<=100; i++){ int f = 0; // 设置机关 for(int j=2;j<i; j++){ // sqrt(1) | i/2 | i-1 if(i%j==0){ f++; break; } } if(f==0) printf("%d ",i); }
-
从键盘输入 m,k,输出比 m 大,但是最靠近 m 的 k 个素数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
int m,k; printf("input m,k:"); scanf("%d%*c%d",&m,&k); // 设置范围 for (int i=m+1,j=1; j<=k; i++) { int f = 0; // 无论在哪个位置被忘记初始化 for (int n=2; n<i; n++) { if (i%n==0){ f++; break; } } if(f==1){ printf("%d ",i); j++;vuvuvu } printf("\n"); }
-
从键盘输入一个整数,求这个整数的各位之和,计算这个整数的位数
1 2 3 4 5 6 7 8 9 10 11
int number; scanf("%d",&number); int i=0; // 计数,是多少位 int sum=0; // 各个位数求和 while(number!=0) { i++; sum += number%10; number /= 10; } printf("%d-%d",sum,i);
-
图形输出(行/列),外循环控制行,内循环控制列
1 2 3 4 5 6 7
int i,j; for (i=1; i<=7; i++){ for (j=1; j<i+1; j++){ printf("*"); } printf("\n"); }
1 2 3 4 5 6 7 8 9 10 11
// 打印三角形 int i,j; for (i=1; i<=6; i++){ for (j=5; j>=i; j--){ // for (j=1; j<=6-i; j++) printf(" "); } for (int k=1; k<=2*i-1; k++){ printf("*"); } printf("\n"); }
1 2 3 4 5 6 7 8 9 10 11 12 13
// 打印菱形 #include <math.h> int i,j,k; for (i=-4; i<=4; i++){ for (j=1; j<=abs(i); j++){ printf(" "); } for (k=1; k<=9-2*abs(i); k++){ printf("*"); } printf("\n"); }