【重拾C语言】四、循环程序设计(后判断条件循环、先判断条件循环、多重循环;典例:计算平均成绩、打印素数、百钱百鸡问题)

news/2024/7/24 10:16:46 标签: c语言, 开发语言

目录

前言

四、循环程序设计

4.1 计算平均成绩——循环程序

4.1.1 后判断条件的循环        

a. 语法

b. 典例

4.1.2 先判断条件的循环

a. 语法

b. 典例

4.1.3 for语句

a. 语法

b. 典例

4.2 计算全班每人平均成绩—多重循环

4.2.1 打印100以内素数

4.2.2 百钱百鸡问题 


前言

ChatGPT

        C语言是一种通用的、过程式的计算机编程语言,由贝尔实验室的Dennis Ritchie在20世纪70年代初开发。它被设计成一种简单、高效和可移植的语言,用于系统级编程和应用程序开发。

以下是C语言的一些主要特点:

1. 结构化编程:C语言支持结构化编程,它提供了顺序执行、条件语句(如if-else和switch)和循环结构(如for和while),使程序更易于阅读、理解和维护。

2. 中级语言:C语言同时具备高级语言和低级语言的特点。它提供了丰富的控制结构和操作符,可以直接访问内存和硬件,并且允许程序员进行底层的操作,如位操作和指针运算。

3. 可移植性:C语言编写的程序具有很高的可移植性,因为它的语法和特性在不同的计算机系统上基本保持一致。这使得程序可以在不同的平台上进行编译和执行,而无需对代码进行太多的修改。

4. 强大的标准库:C语言提供了一个丰富的标准库,其中包含了各种函数和工具,用于处理输入输出、字符串操作、内存管理、数学运算等。这些函数可以提高程序开发的效率,并且可以跨平台使用。

5. 面向系统编程:由于C语言具有直接访问内存和硬件的能力,它经常用于开发操作系统、嵌入式系统和驱动程序等底层软件。C语言还提供了位操作和指针等特性,使得程序员可以更好地控制系统资源。

6. 扩展性:C语言允许程序员编写自定义的函数和库,以扩展语言的功能。这使得C语言非常适合大型项目的开发,可以将代码组织成模块化的结构,并通过函数调用进行复用。

        尽管C语言相对较为底层,但它仍然是一种非常重要和广泛应用的编程语言。它为程序员提供了强大的控制能力和性能优势,并且在各种领域,如系统编程、嵌入式开发、游戏开发等方面都得到了广泛应用。许多现代编程语言,如C++、Java和Python,都受到了C语言的影响,并在其基础上进行了扩展和改进。

四、循环程序设计

4.1 计算平均成绩——循环程序

C 有三种不同的重复性语句:

  • do-while 语句── 后判断条件的循环
  • while 语句── 先判断条件的循环
  • for 语句── 先判断条件的循环

4.1.1 后判断条件的循环        

a. 语法

        后判断条件的循环是指在循环体内先执行一次循环,然后再检查循环条件是否满足。如果条件为真,则继续执行循环,直到条件为假时结束循环。它的基本语法如下:

do {
    // 循环体
} while (condition);

        do-while循环保证循环体至少执行一次,即使条件一开始就为假。

b. 典例
#include <stdio.h>

int main() {
    int total = 0;  // 总分
    int count = 0;  // 人数
    int grade;      // 成绩

    printf("请输入成绩,输入负数表示结束输入:\n");

    do {
        printf("请输入成绩:");
        scanf("%d", &grade);

        if (grade >= 0) {
            total += grade;
            count++;
        }
    } while (grade >= 0);

    if (count > 0) {
        float average = (float) total / count;
        printf("平均成绩为:%.2f\n", average);
    } else {
        printf("没有输入成绩!\n");
    }

    return 0;
}

4.1.2 先判断条件的循环

a. 语法

        先判断条件的循环是指在循环体内先检查循环条件是否满足,如果条件为真,则执行循环体,然后再重新检查条件。只有在条件为假时才结束循环。它的基本语法如下:

while (condition) {
    // 循环体
}

b. 典例
#include <stdio.h>

int main() {
    int total = 0;  // 总分
    int count = 0;  // 人数
    int grade;      // 成绩

    printf("请输入成绩,输入负数表示结束输入:\n");

    while (1) {
        printf("请输入成绩:");
        scanf("%d", &grade);

        if (grade < 0) {
            break;
        }

        total += grade;
        count++;
    }

    if (count > 0) {
        float average = (float) total / count;
        printf("平均成绩为:%.2f\n", average);
    } else {
        printf("没有输入成绩!\n");
    }

    return 0;
}

4.1.3 for语句

a. 语法

        for语句是一种常用的循环结构,它可以在指定的条件满足时执行循环体。for语句通常用于已知循环次数的情况下。它的基本语法如下:

for (initialization; condition; update) {
    // 循环体
}
  • initialization用于初始化循环变量;
  • condition用于判断循环是否继续执行;
  • update用于更新循环变量的值;
  • 在每次循环开始时,先执行`initialization`,然后判断`condition`的值是否为真,如果为真则执行循环体中的代码,然后执行`update`,再次判断条件,直到条件为假时结束循环。
b. 典例
#include <stdio.h>

int main() {
    int count = 0;
    int total = 0;
    int score = 0;

    printf("请输入学生的成绩(输入负数表示结束):\n");

    for (;;) {
        printf("请输入成绩:");
        scanf("%d", &score);

        if (score < 0) {
            break;
        }

        total += score;
        count++;
    }

    if (count > 0) {
        float average = (float) total / count;
        printf("平均成绩为:%.2f\n", average);
    } else {
        printf("未输入有效成绩!\n");
    }

    return 0;
}

4.2 计算全班每人平均成绩—多重循环

        在这一部分中,你可以学习如何使用多重循环结构来计算全班每个人的平均成绩。多重循环是指在循环体内包含另一个或多个循环结构。

#include <stdio.h>

int main() {
    int numStudents, numCourses;
    printf("请输入学生人数:");
    scanf("%d", &numStudents);
    printf("请输入课程数:");
    scanf("%d", &numCourses);

    int scores[numStudents][numCourses];

    // 输入每个学生的成绩
    for (int i = 0; i < numStudents; i++) {
        printf("请输入第 %d 个学生的成绩:\n", i + 1);
        for (int j = 0; j < numCourses; j++) {
            printf("请输入第 %d 门课程的成绩:", j + 1);
            scanf("%d", &scores[i][j]);
        }
    }

    // 计算每个学生的平均成绩
    for (int i = 0; i < numStudents; i++) {
        int sum = 0;
        for (int j = 0; j < numCourses; j++) {
            sum += scores[i][j];
        }
        float average = (float)sum / numCourses;
        printf("第 %d 个学生的平均成绩为:%.2f\n", i + 1, average);
    }

    return 0;
}

4.2.1 打印100以内素数

        这个例题可能是关于如何使用循环打印出100以内的素数的实例。具体的例题内容可以根据上下文来确定。

#include <stdio.h>

int main() {
    printf("100以内的素数有:\n");

    for (int i = 2; i <= 100; i++) {
        int isPrime = 1;

        for (int j = 2; j < i; j++) {
            if (i % j == 0) {
                isPrime = 0;
                break;
            }
        }

        if (isPrime == 1) {
            printf("%d ", i);
        }
    }

    printf("\n");

    return 0;
}

4.2.2 百钱百鸡问题 

        百钱百鸡问题是一个经典的数学问题,它可以通过穷举法解决。问题的描述如下:假设有100个钱和100只鸡,其中公鸡每只5钱,母鸡每只3钱,小鸡三只1钱。现在要用100钱买100只鸡,问公鸡、母鸡和小鸡各有多少只?

#include <stdio.h>

int main() {
    printf("公鸡数量\t母鸡数量\t小鸡数量\n");

    for (int x = 0; x <= 20; x++) {
        for (int y = 0; y <= 33; y++) {
            int z = 100 - x - y;
            if (5 * x + 3 * y + z / 3 == 100 && z % 3 == 0) {
                printf("%d\t\t%d\t\t%d\n", x, y, z);
            }
        }
    }

    return 0;
}


http://www.niftyadmin.cn/n/5066629.html

相关文章

js中的call() apply() bind()的用法

call() apply() bind() 都是用来重定义this这个对象的,不能改变箭头函数中的this指向 bind方法多了一个括号&#xff0c;bind返回的是一个新的函数&#xff0c;必须调用才能够执行 <!DOCTYPE html> <html lang"en"><head><meta charset"…

黑马程序员 MySQL数据库入门到精通——进阶篇(2)

黑马程序员 MySQL数据库入门到精通——进阶篇&#xff08;2&#xff09; 1. SQL优化1.1 插入数据1.2 主键优化1.3 order by优化1.4 group by优化1.5 limit优化1.6 count优化1.7 update优化 2. 视图2.1 视图-介绍及基本语法2.2 视图-检查选项(cascaded)2.3 视图-检查选项(local)…

springboot 集成 PageHelper 分页失效

前言 项目启动初期&#xff0c;在集成mybatis的分页插件&#xff0c;自定义封装了一个分页的工具类&#xff0c;方便后期项目的扩展。部分的代码如下&#xff1a; /*** 分页查询* 进行count计算** param pageNum 页数* param pageSize 每页数量* param supplier 查询操作* re…

Python之json的dump和dumps方法

一&#xff0c;dumps 将字典转换为字符串 info_dcit {foo1:a, foo2:b, foo3:c, } data_dumps json.dumps(info_dcit, indent4) print(data_dumps) # data_dumps: <class str>data_dumps: {"foo1": "a","foo2": "b","…

力扣 -- 377. 组合总和 Ⅳ

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int combinationSum4(vector<int>& nums, int target) {int nnums.size();vector<double> dp(target1);//初始化dp[0]1;//填表for(int i1;i<target;i){for(int j0;j<n;j){//填表if(…

云原生定义整理

云原生定义整理 Pivotal 是云原生应用的提出者&#xff0c;并推出了 Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架&#xff0c;成为云原生应用架构中先驱者和探路者。 Pivotal最初的定义 Pivotal公司的Matt Stine在2015年写了一本叫做<<迁移到云…

接口自动化中如何完成接口加密与解密?

加密是一种限制对网络上传输数据的访问权的技术。将密文还原为原始明文的过程称为解密&#xff0c;它是加密的反向处理。在接口开发中使用加密、解密技术&#xff0c;可以防止机密数据被泄露或篡改。在接口自动化测试过程中&#xff0c;如果要验证加密接口响应值正确性的话&…

计算机网络(文章链接汇总)

参考引用 计算机网络微课堂-湖科大教书匠计算机网络&#xff08;第7版&#xff09;-谢希仁 计算机网络&#xff08;一&#xff09;&#xff1a;概述计算机网络&#xff08;二&#xff09;&#xff1a;物理层计算机网络&#xff08;三&#xff09;&#xff1a;数据链路层计算机网…