学习笔记 | C语言中的循环

165 阅读4分钟

今天学习C语言中的循环语句。

while 循环

语句结构

while(表达式)
    语句:

输出 1 2 3 ... 10

int main()
{
    int i = 1;
    while( i<= 10 )
    {
        printf("%d ",i);
        i++;
    }
    return 0;
}

执行结果

image-20231112222359322

输入一个正的整数,逆序打印这个整数的每一位

例如:

输入:1234,输出4321

输入:521,输出125

int main()
{
    int n = 0;
    scanf("%d",&n);
    
    while(n)
    {
        printf("%d ",n % 10);
        n = n / 10;
    }
    return 0;
}

执行结果

image-20231112223535323

for 循环

for 循环是三种循环中用的最多循环语句。

for(表达式1;表达式2;表达式3)
    语句;
  • 表达式1:用于循环变量的初始化
  • 表达式2:用于循环结束条件的判断
  • 表达式3:用于循环变量的调整

在屏幕上打印1 ~ 10

int main()
{
    int i = 0;
    for(i=1;i<=10;i++)
    {
        printf("%d ",i);
    }
    return 0;
}

执行结果

image-20231113204807915

while 和 for 的区别

image-20231113205030634

相比while循环,for循环结构体中三个部分非常集中,便于代码的维护。

计算 1 ~ 100之间3的倍数的数字之和

int main()
{
    int i = 0;
    int sum = 0;
    for(i = 1; i <= 100; i++)
    {
        if (i % 3 == 0)
        {
            sum += i;
        }
    }
    printf("%d", sum);
    return 0;
}

执行结果

image-20231113210016344

do while 循环

语句结构

do
    语句;
while(表达式);

这种结构,至少要被执行一次。

打印1~10

int main()
{
    int i = 1;
    do
    {
        printf("%d ",i);
        i++;
    } while(i<=10);
    return 0;
}

执行结果

image-20231113210454228

输入一个正整数,计算这个整数是几位数?

例如:

输入:1234 输出:4

输入:234 输出:3

int main()
{
    int n = 0;
    scanf("%d",&n);
    int cnt = 0;
    do
    {
        cnt++;
        n = n / 10;
    } while(n);
        printf("%d\n",cnt);
    return 0;
}

执行结果

image-20231113211014401

break 和 continue

break是终止循环

int main()
{
    int i = 1;
    while( i<= 10 )
    {
        if(i==5)
            break;
        printf("%d ",i);
        i++;
    }
    return 0;
}

执行结果

image-20231113214130790

continue跳过本次循环,直接去判断部分。

int main()
{
    int i = 1;
    while( i<= 10 )
    {
        if(i==5)
            continue;
        printf("%d ",i);
        i++;
    }
    return 0;
}

执行结果

image-20231113213216510

代码死循环。

调整一下代码,将i++放到continue的前面

int main()
{
    int i = 1;
    while( i<= 10 )
    {
        i++;
        if(i==5)
            continue;
        printf("%d ",i);
    }
    return 0;
}

执行结果

image-20231113213522387

for 循环中 break 和 continue

break跳出循环,与while中的效果一样

int main()
{
    int i = 0;
    for(i=1;i<=10;i++)
    {
        if(i==5)
            break;
        printf("%d ",i);
    }
    return 0;
}

执行结果

image-20231113213946592

continuefor循环中会跳到调整部分,而while则是跳到条件部分

int main()
{
    int i = 0;
    for(i=1;i<=10;i++)
    {
        if(i==5)
            continue;
        printf("%d ",i);
    }
    return 0;
}

执行结果

image-20231113214055441

区别如下

image-20231113214446242

do while中break和continue

break在三种循环中的效果都一样,直接跳出循环。

continue

int main()
{
    int i = 1;
    do
    {
        if(i==5)
            continue;
        printf("%d ",i);
        i++;
    } while(i<=10);
    return 0;
}

执行结果

image-20231113214803641

打印到4死循环,与while中的效果相似。

循环嵌套

找出 100 ~ 200 之间的素数,并打印到屏幕上。

注:素数又称质数,只能被1和本身整除的数字。

解题思路:

1、使用循环产生100~200之间的数字。

2、判断产生的数字是否是素数

  • 比如判断100是不是素数,可以用2~99与100整除,如果其中任何一个数字可以整除,说明100不是素数。
int main()
{
    int i = 0;
    for (i = 100; i <= 200; i++)
    {
        //判断 i 是否是素数
        //使用2 ~ i-1 / i
        //如果 i 被整除了,i就不是素数
        int j = 0;
        int flag = 1; //假设i为素数
        for (j = 2; j < i; j++)
        {
            if (i % j == 0)
            {
                flag = 0;
                break;
            }
        }
        if (flag == 1)
        {
            printf("%d ", i);
        }
    }
​
    return 0;
}

执行结果

image-20231113215807415

拓展思考

如果存在一个数字 i,可以用如下方式展示 i = a*b

那么ab中至少有一个数字是<= 根号i

#include <math.h>
​
int main()
{
    int i = 0;
    for (i = 100; i <= 200; i++)
    {
        //判断 i 是否是素数
        //使用2 ~ i-1 / i
        //如果 i 被整除了,i就不是素数
        int j = 0;
        int flag = 1; //假设i为素数
        for (j = 2; j < sqrt(i); j++) //优化内容
        {
            if (i % j == 0)
            {
                flag = 0;
                break;
            }
        }
        if (flag == 1)
        {
            printf("%d ", i);
        }
    }
​
    return 0;
}

goto语句

goto语句可以实现在同一个函数内跳转到设置好的标号处。

int main()
{
    printf("hehe");
    goto end;
    printf("haha");
    end;
    return 0;
}

执行结果

image-20231113221317542

goto可以在多层循环中,直接跳到某个循环中;break只能一层层跳出。