C的控制语句:循环

C的控制语句:循环

1、三种循环方式--->forwhiledo while

2、函数fabs()

3、编写有返回值的函数


三种循环方式

while

示例代码:

# include<stdio.h>

int main(void)
{
    long num; long sum = 0L; int status;

    printf("请输入一个整型整数进行求和");
    printf("(q 或者 quit 退出):");
    status = scanf("%ld", &num); // scanf()函数特性,如果scanf()函数接收到一个整数,会把该整数存入num当中,并且返回一个1赋值给status
    while (status == 1)
    {
        sum = sum + num;
        printf("请输入一个整型整数进行求和 (q 或者 quit 退出):");
        status = scanf("%ld", &num); // 如果用户输入的不是数字,scanf()函数读取失败,返回0,程序退出--->利用的scanf()的双重特性避免了循环过程中的程序交互输入问题
    }
    printf("这些整型整数的和是:%ld\n", sum);

    getchar();

    return 0;
}

变式:

# include<stdio.h>

int main(void)
{
    long num; long sum = 0L; int status;

    printf("请输入一个整型整数进行求和");
    printf("(q 或者 quit 退出):");
    while ((scanf("%ld", &num)) == 1)
    {
        sum = sum + num;
        printf("请输入一个整型整数进行求和 (q 或者 quit 退出):");
    }

    getchar();

    return 0;
}

注意:

每次循环都被称为一次迭代

循环终止条件:

# include<stdio.h>

int main(void)
{
    int n = 0;

    while (n < 7) // n < 7就是循环终止条件
    {
        printf("n = %d\n", n);
        n++;
        printf("Now n = %d\n", n);
    }
    printf("结束循环!");

    getchar();

    return 0;
}

注意:

# include<stdio.h>

int main(void)
{
    int n = 0;

    while (n < 3)
        printf("Now n = %d", n);
        n++; // 只有跟在循环条件后面的一条语句是循环语句,第二句开始就不是,所以n不会递增,while的循环条件一直为true
    printf("Down!");

    return 0;    
}
_Bool类型

注意:

bool 不是 c语言的关键字, 但是c99标准和c++把bool当作关键字

# include<stdio.h>
# include<stdbool.h> // 定义了Bool类型

int main(void)
{
    long num; long sum = 0L; _Bool input_is_good;

    printf("输入一个数");
    printf("q 或者 quit 退出:");
    input_is_good = (scanf("%ld", &num) == 1);

    while (input_is_good)
    {
        sum = sum + num;
        printf("输入一个数");
        printf("q 或者 quit 退出:");
        input_is_good = (scanf("%ld", &num) == 1);
    }

    printf("Down!");

    getchar();

    return 0;
}

For

/**
 * @Author: Lucifer
 * @Date: 4/16/2023, 4:40:59 PM
 * @LastEditors: Lucifer
 * @LastEditTime: 4/16/2023, 4:40:59 PM
 * Description: A case about for
 * Copyright: Copyright (©)}) 2023 Your Name. All rights reserved.
 */
# include<stdio.h>

int main(void)
{
    const int NUMBER = 22;
    int count;

    for (count = 1; count <= NUMBER; count++)
    {
        printf("Hello World!");
    }

    getchar();

    return 0;
}

字符代替数字作为测试条件和初始值:

# include<stdio.h>

int main(void)
{
    char ch;

    for (ch = 'a'; ch < 'z'; ch++) {
        printf("字符!!!");
    }

    getchar();

    return 0;
}

省略循环表达式写法:

/**
 * @Author: Lucifer
 * @Date: 4/16/2023, 5:26:45 PM
 * @LastEditors: Lucifer
 * @LastEditTime: 4/16/2023, 5:26:45 PM
 * Description: for循环当中省略表达式的写法
 * Copyright: Copyright (©)}) 2023 Your Name. All rights reserved.
 */
# include<stdio.h>

int main(void)
{
    int n, ans, time;
    ans = 2;
    time = 1;

    for (n = 3; ans <= 25;)
    {
        ans = ans * n;
        printf("循环次数: %d \n", time);
        time++;
    }

    printf("n = %d, ans = %d\n", n, ans * n);

    getchar();

    return 0;
}

逗号运算符运用在for循环中表达多种用法:

/**
 * @Author: Lucifer
 * @Date: 4/16/2023, 5:37:23 PM
 * @LastEditors: Lucifer
 * @LastEditTime: 4/16/2023, 5:37:23 PM
 * Description: ,运算符,在一个for循环中,每个条件表达式可以用,来表达多种条件
 * Copyright: Copyright (©)}) 2023 Your Name. All rights reserved.
 */
# include<stdio.h>

int main(void)
{
    const int FIRST_OZ = 46;
    const int NEXT_OZ = 20;
    int ounces, cost;

    printf("  ounces cost\n");
    for (ounces = 1, cost = FIRST_OZ; ounces <= 16; ounces++, cost += NEXT_OZ)
    {
        printf("%5d    $%4.2f\n", ounces, cost / 100.0);
    }

    getchar();

    return 0;
}

示例代码2:

/**
 * @Author: Lucifer
 * @Date: 4/16/2023, 7:41:35 PM
 * @LastEditors: Lucifer
 * @LastEditTime: 4/16/2023, 7:41:35 PM
 * Description: ZenO悖论
 * Copyright: Copyright (©)}) 2023 Your Name. All rights reserved.
 */
# include<stdio.h>

int main(void)
{
    int t_ct; // 项计数
    double time, power_of_2;
    int limit;

    printf("输入你想射几米:");
    scanf("%d", &limit);
    // 箭永远只会行进一半的路程
    for (time = 0, power_of_2 = 1, t_ct = 1; t_ct <= limit; t_ct++, power_of_2 *= 2.0)
    {
        time += 1.0 / power_of_2;
        printf("time = %f, 当terms = %d \n", time, t_ct);
    }

    getchar();
    getchar();

    return 0;
}

do...while

示例代码:

/**
 * @Author: Lucifer
 * @Date: 4/16/2023, 7:47:13 PM
 * @LastEditors: Lucifer
 * @LastEditTime: 4/16/2023, 7:47:13 PM
 * Description: 猜数字游戏
 * Copyright: Copyright (©)}) 2023 Your Name. All rights reserved.
 */
# include<stdio.h>

int main(void)
{
    const int secret_code = 13;
    int code_entered;

    do
    {
        printf("有一个内置的数,在10到20之间,猜猜是几?:\n");
        printf("请输入你猜的数:\n");
        scanf("%d", &code_entered);
        getchar();
    } while (code_entered != secret_code);

    printf("猜对了,游戏结束!");

    getchar();

    return 0;
}

特点:

do...while循环至少执行一次

嵌套循环

/**
 * @Author: Lucifer
 * @Date: 4/17/2023, 11:02:58 PM
 * @LastEditors: Lucifer
 * @LastEditTime: 4/17/2023, 11:02:58 PM
 * Description: c之嵌套循环
 * Copyright: Copyright (©)}) 2023 Your Name. All rights reserved.
 */
# include<stdio.h>
# define ROWS 6
# define CHARS 10

int main(void)
{
    int row;
    char ch;

    // 嵌套循环
    for (row = 0; row < ROWS; row++) // 外循环,执行五次
    {
        for (ch = 'A'; ch < ('A' + CHARS); ch++) // 内循环,执行10次,打印字符
        {
            printf("%c", ch);
        }
        printf("\n");
    }

    getchar();

    return 0;
}

嵌套循环变式:由外层循环的次数控制内层循环

/** 
 * @Author: Lucifer
 * @Date: 4/17/2023, 11:06:44 PM
 * @LastEditors: Lucifer
 * @LastEditTime: 4/17/2023, 11:06:44 PM
 * Description: 嵌套训话之外层循环控制内层循环
 * Copyright: Copyright (©)}) 2023 Your Name. All rights reserved.
 */
# include<stdio.h>

int main(void)
{
    const int ROWS = 6;
    const int CHARS = 6;
    int row;
    char ch;

    for (row = 0; row < ROWS; row++)
    {
        for (ch = ('A' + row); ch < ('A' + CHARS); ch++)
        {
            printf("%c", ch);
        }
        printf("\n");
    }

    getchar();
    
    return 0;
}

For循环中使用数组:

/**
 * @Author: Lucifer
 * @Date: 4/17/2023, 11:19:54 PM
 * @LastEditors: Lucifer
 * @LastEditTime: 4/17/2023, 11:19:54 PM
 * Description: 循环在数组当中的使用
 * Copyright: Copyright (©)}) 2023 Your Name. All rights reserved.
 */
# include<stdio.h>
# define SIZE 10
# define PAR 72

int main(void)
{
    int index, score[SIZE];
    int sum = 0;
    float average;

    // 输入十个数
    printf("请输入%d个数:\n", SIZE);
    for (index = 0; index < SIZE; index++)
        scanf("%d", &score[index]);
    printf("输入的十个数是:\n");
    for (index = 0; index < SIZE; index++)
        printf("%5d", score[index]);
    printf("\n");
    // 总数
    for (index = 0; index < SIZE; index++)
        sum += score[index];
    // 平均数
    average = (float)sum / SIZE;
    printf("总数%d, 平均数%.2f", sum, average);
    // 得分
    printf("%.0f\n", average - PAR);

    return 0;
}
posted @   俊king  阅读(115)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2021-04-16 4.16Java接口的作用
2021-04-16 4.16Java抽象方法和抽象类
2021-04-16 4.16Java游戏小项目之记时功能
2021-04-16 4.16Java游戏小项目之爆炸的实现
2021-04-16 完整的WSDL语法
2021-04-16 WSDL UDDI
2021-04-16 WSDL绑定
点击右上角即可分享
微信分享提示