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

目录

前言

四、循环程序设计

[4.1 计算平均成绩------循环程序](#4.1 计算平均成绩——循环程序)

[4.1.1 后判断条件的循环](#4.1.1 后判断条件的循环)

[a. 语法](#a. 语法)

[b. 典例](#b. 典例)

[4.1.2 先判断条件的循环](#4.1.2 先判断条件的循环)

[a. 语法](#a. 语法)

[b. 典例](#b. 典例)

[4.1.3 for语句](#4.1.3 for语句)

[a. 语法](#a. 语法)

[b. 典例](#b. 典例)

[4.2 计算全班每人平均成绩---多重循环](#4.2 计算全班每人平均成绩—多重循环)

[4.2.1 打印100以内素数](#4.2.1 打印100以内素数)

[4.2.2 百钱百鸡问题](#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. 语法

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

cpp 复制代码
do {
    // 循环体
} while (condition);

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

b. 典例
cpp 复制代码
#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. 语法

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

cpp 复制代码
while (condition) {
    // 循环体
}
b. 典例
cpp 复制代码
#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语句通常用于已知循环次数的情况下。它的基本语法如下:

cpp 复制代码
for (initialization; condition; update) {
    // 循环体
}
  • initialization用于初始化循环变量;
  • condition用于判断循环是否继续执行;
  • update用于更新循环变量的值;
  • 在每次循环开始时,先执行`initialization`,然后判断`condition`的值是否为真,如果为真则执行循环体中的代码,然后执行`update`,再次判断条件,直到条件为假时结束循环。
b. 典例
cpp 复制代码
#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 计算全班每人平均成绩---多重循环

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

cpp 复制代码
#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以内的素数的实例。具体的例题内容可以根据上下文来确定。

cpp 复制代码
#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只鸡,问公鸡、母鸡和小鸡各有多少只?

cpp 复制代码
#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;
}
相关推荐
ChoSeitaku10 分钟前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
娅娅梨12 分钟前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++
DdddJMs__13516 分钟前
C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
c语言·leetcode·题解
汤米粥18 分钟前
小皮PHP连接数据库提示could not find driver
开发语言·php
冰淇淋烤布蕾21 分钟前
EasyExcel使用
java·开发语言·excel
拾荒的小海螺27 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
马剑威(威哥爱编程)1 小时前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
娃娃丢没有坏心思1 小时前
C++20 概念与约束(2)—— 初识概念与约束
c语言·c++·现代c++
白-胖-子1 小时前
【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-统计数字
开发语言·c++·算法·蓝桥杯·等考·13级
好睡凯1 小时前
c++写一个死锁并且自己解锁
开发语言·c++·算法