目录
前言
四、循环程序设计
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;
}