首页 > 其他分享 >第三章 循环

第三章 循环

时间:2024-02-16 11:12:04浏览次数:27  
标签:语句 10 第三章 int ++ while 循环

目录

前言

if语句可以判断条件是否满足,满足时才做相应的动作,而循环语句可以在满足条件时,不断地重复执行一些动作。

重复执行的语句(循环语句)可以多次执行其他语句,它检查一个逻辑条件是否满足,只在满足的时候执行它的循环体。

while语句是一个循环语句,它会首先判断一个条件是否满足,如果条件满足,则执行后面紧跟着的语句或语句括号,然后再次判断条件是否满足,如果条件满足则再次执行,直到条件不满足为止。后面紧跟的语句或语句括号,就是循环体。

do-while循环和while循环很像,唯一的区别是我们在循环体执行结束的时候才来判断条件。也就是说,无论如何,循环都会执行至少一遍,然后再来判断条件。与while循环相同的是,条件满足时执行循环,条件不满足时结束循环。

人VS计算机

人VS计算机

写程序一定要明确我们写的是步骤,一步一步地执行而不是表示关系

判断几位数

#include <stdio.h>

int main()
{
    int x = 0;
    int n = 1;

    scanf("%d", &x);

    if(x > 999){
        n = 4;
    }else if(x > 99){
        n = 3;
    }else if(x > 9){
        n = 2;
    }

    printf("%d\n", n);

    return 0;
}

上面这个程序是按照步骤执行的例子,而下面这个程序则表达的是一种关系执行的方式

#include <stdio.h>

int main()
{
    int x = 0;
    int n = 1;

    scanf("%d", &x);

    if(x > 999){
        n = 4;
    }

    if(x > 99){
        n = 3;
    }

    if(x > 9){
        n = 2;
    }
    
    printf("%d\n", n);

    return 0;
}
  • 这个程序同时还存在一个问题,当x等于100时,x即大于99也大于9,所以按照计算机的一步一步执行方式,这两个if语句都要执行,那么最终n等于2,输出结果为2。
  • 这个程序是大于号,所以要从高出往低处判断;如果是小于号则是从低处往高处判断。
  • 但是这个是一个4位数的整数,如果是任意一个整数呢?

重复的例子

数数

数数
划数
优化

#include <stdio.h>

int main()
{
    int x;
    int n = 0;

    scanf("%d", &x);

    n++;
    x /= 10;

    while(x > 0){
        n++;
        x /= 10;
    }

    printf("%d\n", n);

    return 0;
}

这个程序中将x /= 10;放在n++;之前也可以。

讨论

数数这个程序最多可以数到几位数?
最多可以数到10位数。

最多数到几位数

while循环

// if是一次性的
if(x > 0){
    x /= 10;
    n++;
}
// while是重复直到不满足条件
while(x > 0){
    x /= 10;
    n++;
}

while流程图

  • while语句中的循环体内要有改变条件的机会,否则容易进入死循环出不来
  • 程序有时候语法是正确的可以通过编译,但逻辑是错误的
// 死循环
#include <stdio.h>

int main()
{
    int x;
    int n = 0;

    scanf("%d", &x);

    n++;
    x /= 10;

    while(x > 0){
        n++;
        // x /= 10;
    }

    printf("%d\n", n);

    return 0;
}
  • 如果我们把while循环翻译作“当”,那么一个while循环的意思就是:当条件满足时,不断地重复循环体内的语句。
  • 循环执行之前判断是否继续循环,所以有可能循环一次也没有被执行;
  • 条件成立是循环继续的条件。

验证

// 去掉while之前的n++;与x /= 10;
#include <stdio.h>

int main()
{
    int x;
    int n = 0;

    scanf("%d", &x);

    // n++;
    // x /= 10;

    while(x > 0){
        n++;
        x /= 10;
    }

    printf("%d\n", n);

    return 0;
}

验证步骤1

列出表格

验证步骤2

例如上面的程序验证:

x n
0 0
0

调试

  • 在程序适当的位置插入printf来输出变量的内容,或者查看是否执行到这个地方
#include <stdio.h>

int main()
{
    int x;
    int n = 0;

    scanf("%d", &x);

    n++;
    x /= 10;

    while(x > 0){
        printf("x=%d", x);
        n++;
        x /= 10;
    }
    
    return 0;
}

do-while

不管三七二十一,先做循环体内的句子

  • 在执行完成一轮循环后再对条件进行检查,满足则继续循环,不满足则退出
do{

}while(循环条件);
// 这个分号一定要有,因为它代表while()这个语句结束,在C语言中`{}或者;`可以代表一个语句的结束
// 数数基于do-while的改进
#include <stdio.h>

int main()
{
    int x;
    int n = 0;

    scanf("%d", &x);

    do{
        x /= 10;
        n++;
    }while(x > 0);

    printf("%d\n", n);

    return 0;
}

运行结果

while与do-while的流程图

流程图

左边的是do-while, 右边的是while

for循环

阶乘例子

阶乘

// 基于while循环
#include <stdio.h>

int main()
{
    int n;
    int i = 1;
    int factor = 1;
    
    scanf("%d", &n);

    while(i <= n){
        factor *= i;
        i++;
    }

    printf("%d! = %d\n", n, factor);

    return 0;
}

for循环

// 基于for循环
#include <stdio.h>

int main()
{
    int n;
    int i;
    int factor = 1;

    scanf("%d", &n);
    // C99 for(int i=1; i<=n; i++)
    for(i=1; i<=n; i++){
        factor *= i;
    }

    printf("%d! = %d\n", n, factor);

    return 0;
}
  • 第一个条件是初始条件
  • 第二个条件是循环条件
  • 第三个条件是每轮循环要做的动作
  • for循环也可以省去一个条件,写成for(; i<=n; i++){}

for循环很怪吗?
for循环不符合人类的语言逻辑,不易理解,因此就造成了第一次接触语言的人觉得for循环很怪。而现代程序设计理念更强调与人类语言的逻辑统一性,所以在新兴的python语言中祛除掉了C中的for循环逻辑。但由于for循环抽象程度高,所以在掌握语言基础后,其表现逻辑更为简洁易于回溯反而更方便使用。 Python语言就没有for循环的另一个原因是Python里没有累加器。

for循环
for循环与while循环

for循环的计数

for循环计数

  • for(i=0; i<n; i++), 最终i=n, 一共5轮循环
  • for(i=1; i<=n; i++), 最终i=n, 一共5轮循环
#include <stdio.h>

int main()
{
    int i;
    int n = 5;

    for(i=0; i<n; i++){
        printf("i=%d ", i);
    }

    printf("\ni=%d\n", i);

    return 0;
}
#include <stdio.h>

int main()
{
    int i;
    int n = 5;

    for(i=1; i<=n; i++){
        printf("i=%d ", i);
    }

    printf("\ni=%d\n", i);

    return 0;
}

运行结果

三种循环的选择与比较

三种循环

  • 左边是for循环,中间是while循环,右边是do-while循环

如何选择

标签:语句,10,第三章,int,++,while,循环
From: https://www.cnblogs.com/ChangJianhui-080910T/p/18016982

相关文章

  • 写一个计算器加减乘除能循环接收
    需求写一个计算器加减乘除能循环接收代码实现packagecom.jichu.Method;importjava.util.Scanner;publicclassDemo07{publicstaticvoidmain(String[]args){//写一个计算器加减乘除能循环接收Scannerscanner=newScanner(System.in);......
  • Dowhile循环
    publicclassdowhille{publicstaticvoidmain(String[]args){/*do{代码语句}while(布尔表达式)*///do....while循环至少会执行一次inti=0;intsum=0;do{sum=sum+i;......
  • For循环
    publicclassFor01{publicstaticvoidmain(String[]args){/*for(初始化;布尔表达式;更新){代码语句}*/inta=1;//初始化条件while(a<=100){//条件判断System.out.println(a);a+=2;//a=a+2更......
  • For循环练习
    publicclassFor02{publicstaticvoidmain(String[]args){//计算0到100之间的奇数和、偶数和intoddSum=0;intevenSum=0;for(inti=0;i<=100;i++){if(i%2!=0){//奇数oddSum+=i;//o......
  • While循环
    publicclassWhile{publicstaticvoidmain(String[]args){/*while(布尔表达式){循环内容}*///输出1-100inti=0;while(i<100){i++;System.out.println(i);//......
  • 《程序时怎样跑起来的》第三章观后感
    计算机作为现代科技的重要组成部分,广泛应用于各个领域。在计算机中进行小数运算是其常见的任务之一,但在实际应用中,我们常常会遇到小数运算出错的情况。这是由于多种原因导致的,本文将在第三章中探讨这些问题以及其原因。计算机进行小数运算时出错的原因之一是浮点数精度问题。计算......
  • 《系统是怎样跑起来的》第三章读后感
    本章主要讲述了计算机系统的基本架构,包括硬件、操作系统和应用软件三个层次。通过这一章,我明白了计算机系统是如何协同工作的,以及如何有效地利用这些组件来满足我们日常的需求。首先,作者介绍了计算机硬件的基本组成,包括CPU、内存、硬盘、显卡等。这些硬件部件为整个系统......
  • 《程序是怎样跑起来的》第三章读后感
    第三章主要讲解了计算机在处理二进制、十进制以及小数运算时的原理和可能遇到的问题。在这之前,我们了解到计算机内部是以二进制形式存储数据,但读完第三章后,我对二进制有了更深入的理解,例如二进制与十进制、十六进制之间的转换方式:将二进制数转换为十进制,就是按照位权展开相加;而从......
  • 通达信筹码循环指标公式源码副图
    {股票指标}VUR1:=(CAPITAL*(2*(O+L)/2+(H+C)/2+L+3*(C+L)/2)/7);VUR2:=(SMA(AMOUNT,8,1)/1000);VUR3:=Ema((C+L)/2*3,3);VUR4:=(VUR2*(C+L)/2*3/VUR3)/10;VUR5:=(VUR2*(O+L)/2*3/VUR3)/10;VUR6:=(VUR2*(H+C)/2*3/VUR3)/10;VUR7:=(VUR2*L*3/VUR3)/10;VUR8:=(2*VUR5+VUR6......
  • 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
    需求用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个代码实现packagecom.jichu.struct;publicclassForDemo02{publicstaticvoidmain(String[]args){//用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个的需求for(......