专升本C语言学习--第五章 循环结构

第五章 循环结构

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;
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangpi_hero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值