笔记目录
第五章 循环结构
while for
while结构
while(循环条件){
循环体
}
例:1+2+3+…+100=?
// 2020/11/01
// C while求累加
#include<stdio.h>
int main(){
int i=1,sum=0;
while(i<=100){
sum=sum+i;
i++;
}
printf("1+2+3+…+100=%d",sum);
return 0;
}
1.sum=0,i=1,1<=100. ok. sum=0+1. i=2—>
2.sum=1,i=2,2<=100. ok. sum=1+2. i=3—>
3.sum=3,i=3,3<=100. ok. sum=3+3. i=6—>
……
100.sum=4950,i=100,1<=100. ok. sum=4950+100. i=101—>
101.sum=5050,i=101,1<=100. false. sum=5050. break.
do…while结构
do{
循环体
}while(循环条件);
// 2020/11/01
// C do...while
#include<stdio.h>
int main(){
int sum=0;
int i=1;
do{
sum=sum+i;
i++;
}while(i<=100);
printf("sum=%d",sum);
return 0;
}
1.sum=0,i=1. sum=0+1,i=2. 2<=100. ok. —>
2.sum=1,i=2. sum=1+2,i=3. 3<=100. ok. —>
3.sum=3,i=3. sum=3+3,i=4. 6<=100. ok. —>
……
100.sum=4950,i=100. sum=4950+100,i=101. 101<=100. false. sum=5050. break.
while与do…while的区别
while语句:先进行条件判断,再进行循环体;
do…while语句:先无条件执行循环体,再进行条件判断。
// 2020/11/01
// C do...while与while的区别
#include <stdio.h>
int main() {
int i = 1;
int a = 0;
while (i < 1) {
a = 100;
i++;
}
printf("a=%d", a);
do {
a = 100;
i++;
} while (i < 1);
printf("a=%d", a);
return 0;
}
例:求程序的运行结果_____:
// 2020/11/01
// C
#include <stdio.h>
int main() {
int k = 5, n = 0;
while (k > 0) {
switch (k) {
default:
break;
case 1:
n += k;
case 2:
case 3:
n += k;
}
k--;
}
printf("%d", n);
return 0;
}
程序运行结果为: 7。
for循环
for(初值;循环条件;循环增量){
循环体
}
// 2020/11/01
// C for循环
#include<stdio.h>
int main(){
int sum=0;
for(int i=1;i<=100;i++){
sum=sum+i;
}
printf("sum=%d",sum);
return 0;
}
1.sum=0,i=1. 1<=100(ok). sum=0+1=1. i=2—>
2.sum=1,i=2. 2<=100(ok). sum=1+2=3. i=3—>
3.sum=3,i=3. 3<=100(ok). sum=3+3=6. i=4—>
……
100.sum=4950,i=100. 100<=100(ok). sum=4950+100=5050. i=101—>
101.sum=5050,i=101. 101<=100(false). sum=5050. break.
for循环的几种形式
1. 初值表达式为空。
for(;i<=100;i++)
2. 条件语句可以为空。
//循环会无限循环下去
for(int i=1;;i++)
3. 循环分量也可以为空。
//循环会无限循环下去
for(int i=0;i<=100;)
4. 初值、条件语句、循环增量可以同时不写。
//死循环,循环会无限循环下去
for(;;)
5. 初值表达式可以是多个表达式。
for(i=1,sum=0;i<=100;i++)
break关键字和continue关键字
break关键字:遇到break关键字,跳出整个循环。
// 2020/11/07
// C
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 5 == 0) {
break;
}
printf("i=%d\n", i);
}
return 0;
}
continue关键字:遇到continue关键字,跳出本次循环。
// 2020/11/07
// C
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 5 == 0) {
continue;
}
printf("i=%d\n", i);
}
return 0;
}
例如:要求输出100~200之间不能被3整除的数
// 2020/11/07
// C
#include <stdio.h>
int main() {
for (int i = 100; i <= 200; i++) {
if (i % 3 == 0) {
continue;
}
printf("i=%d\n", i);
}
return 0;
}
内循环中的break语句不可以结束整个外循环的执行。
例题:输出数列
// 2020/11/07
// C
#include <stdio.h>
int main() {
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 5; j++) {
printf("%d\t", i * j);
}
printf("\n");
}
return 0;
}
例题:水仙花数
// 2020/11/07
// C
#include <stdio.h>
int main() {
// int num=153;
// int a,b,c;
// a=num/100;
// b=num%100/10;
// c=num%100%10;
// printf("baiwei:%d\nshiwei:%d\ngewei:%d\n",a,b,c);
int b, s, g;
for (int i = 100; i <= 500; i++) {
b = i / 100;
s = i % 100 / 10;
g = i % 100 % 10;
if ((b * b * b + s * s * s + g * g * g) == i) {
printf("%d\n", i);
}
}
return 0;
}
例题:输入两个整数,求其最大公约数及最小公倍数
// 2020/11/07
// C
#include <stdio.h>
int main() {
int m, n, t, max, min;
printf("请输入:");
scanf("%d%d", &m, &n);
if (m > n) {
t = n;
} else {
t = m;
}
for (int i = t; i > 0; i--) {
if (m % i == 0 && n % i == 0) {
max = i;
printf("最大公约数:%d\n", max);
break;
}
}
printf("最小公倍数:%d\n", m * n / max);
return 0;
}
例题:求50!
// 2020/11/07
// C
#include <stdio.h>
int main() {
double num, t = 1;
double sum = 0;
printf("请输入:");
scanf("%lf", &num);
for (int i = 1; i <= num; i++) {
t = t * i;
sum = sum + t;
}
printf("%.0f!=%.15e\n", num, sum);
return 0;
}
求派的近似值
// 2020/11/07
// C
#include <math.h>
#include <stdio.h>
int main() {
double pi = 0;
int m = 1; //分子
double n = 1.0; //分母
double term = 1.0; //项
while (fabs(term) >= 1e-6) {
pi += term;
m = -m;
n += 2;
term = m / n;
}
pi *= 4;
printf("%.15f\n", pi);
return 0;
}
例题:斐波那契数列
// 2020/11/07
// C
#include <math.h>
#include <stdio.h>
int main() {
//斐波那契数列输出30项
int f1=1;
int f2=1;
printf("%d\n%d\n",f1,f2);
int f3;
for(int i=0;i<28;i++){
f3=f1+f2;
printf("%d\n",f3);
f1=f2;
f2=f3;
}
return 0;
}