为了帮助你更好地学习,我将为你提供一个综合了多种可靠来源、经过仔细校对的答案集,并附上一些重要的学习建议。

重要声明与学习建议
- 请勿直接抄袭:代码答案只是参考,直接复制粘贴无法真正掌握编程,学习的核心在于理解思路、自己动手、调试错误。
- “为什么”比“是什么”更重要:在运行代码前,请务必先思考每一行代码的作用,以及为什么这样写,如果看不懂,请回头重读相关章节。
- 编译和调试是必备技能:使用
gcc(Linux/macOS) 或 Visual Studio / Dev-C++ (Windows) 等编译器自己编译并运行代码,遇到错误时,尝试根据编译器的错误提示去修正它,这是程序员最重要的能力之一。 - 动手修改和扩展:不要满足于只运行书上的例子,尝试修改一些参数、增加新的功能,看看会发生什么,修改循环的次数、改变变量的初始值等。
- 勤做练习:每章末尾的练习题是检验学习成果的最佳方式,即使没有答案,也一定要自己尝试完成。
各章习题答案精选
以下我将提供一些关键章节和经典习题的答案,并附上详细的注释。
第 2 章:C 语言编程的要素
习题 2.1:编写一个程序,在屏幕上显示 "This is a C program."
#include <stdio.h> // 引入标准输入输出库,提供 printf 函数
int main(void) // 程序的入口函数
{
// printf 函数用于在屏幕上输出文本
// \n 是一个转义字符,表示换行
printf("This is a C program.\n");
return 0; // main 函数的返回值,0 表示程序正常结束
}
习题 2.2:编写一个程序,调用 printf 函数在屏幕上显示以下内容:
Merry Christmas!
Happy New Year!
#include <stdio.h>
int main(void)
{
// 可以使用多个 printf 语句,每个语句末尾加上 \n 来换行
printf("Merry Christmas!\n");
printf("Happy New Year!\n");
return 0;
}
第 3 章:数据与数据类型
习题 3.1:如果变量 a 和 b 的类型为 int,它们的值分别为 5 和 10,请编写一个程序交换它们的值。

思路:直接赋值 a = b; b = a; 是错误的,这样 a 和 b 的值都会变成 10,需要借助一个临时变量。
#include <stdio.h>
int main(void)
{
int a = 5;
int b = 10;
int temp; // 声明一个临时变量 temp
printf("交换前: a = %d, b = %d\n", a, b);
// 交换过程
temp = a; // 将 a 的值 5 存入 temp
a = b; // 将 b 的值 10 赋给 a,a=10, b=10
b = temp; // 将 temp 中保存的 a 的旧值 5 赋给 b,a=10, b=5
printf("交换后: a = %d, b = %d\n", a, b);
return 0;
}
第 4 章:字符的输入与输出
习题 4.1:编写一个程序,读取用户从键盘输入的一个字符,然后显示该字符及其 ASCII 码。
#include <stdio.h>
int main(void)
{
char ch; // 声明一个字符型变量 ch
printf("请输入一个字符: ");
// getchar() 函数用于从键盘读取一个字符
// 赋值给 ch
ch = getchar();
// putchar() 函数用于在屏幕上输出一个字符
// %d 是格式化输出整数,这里输出 ch 的 ASCII 码
printf("你输入的字符是: %c\n", ch);
printf("它的 ASCII 码是: %d\n", ch);
return 0;
}
第 5 章:循环
习题 5.1:编写一个程序,计算 1 到 100 所有整数的和。
使用 for 循环
#include <stdio.h>
int main(void)
{
int sum = 0; // 用于存放累加和,初始值为 0
int i;
// for 循环:从 i=1 开始,每次循环 i 自增 1,直到 i <= 100 为止
for (i = 1; i <= 100; ++i)
{
sum = sum + i; // 将当前的 i 值加到 sum 上
}
printf("1 到 100 的和是: %d\n", sum);
return 0;
}
使用 while 循环
#include <stdio.h>
int main(void)
{
int sum = 0;
int i = 1; // while 循环需要手动初始化循环变量
while (i <= 100) // 只要 i 小于等于 100,就继续循环
{
sum += i; // sum += i 是 sum = sum + i 的简写
i++; // 循环变量 i 自增,否则会陷入死循环
}
printf("1 到 100 的和是: %d\n", sum);
return 0;
}
第 6 章:分支与跳转
习题 6.1:编写一个程序,要求用户输入一个整数,然后判断该数是奇数还是偶数。
#include <stdio.h>
int main(void)
{
int num;
printf("请输入一个整数: ");
scanf("%d", &num); // scanf 用于从键盘读取整数,&num 表示取 num 的内存地址
// 取模运算符 % 计算余数
// num 除以 2 的余数为 0,则是偶数
if (num % 2 == 0)
{
printf("%d 是一个偶数,\n", num);
}
else // 否则,就是奇数
{
printf("%d 是一个奇数,\n", num);
}
return 0;
}
第 7 章:基本数据类型
习题 7.1:计算一个圆的面积和周长,半径由用户输入。
#include <stdio.h>
// 定义一个宏 PI,值为 3.14159
#define PI 3.14159
int main(void)
{
double radius, area, circumference; // 使用 double 类型以获得更高精度
printf("请输入圆的半径: ");
scanf("%lf", &radius); // %lf 用于读取 double 类型
// 计算面积
area = PI * radius * radius;
// 计算周长
circumference = 2 * PI * radius;
printf("半径为 %.2f 的圆:\n", radius); // %.2f 表示输出浮点数,保留两位小数
printf(" 面积是: %.2f\n", area);
printf(" 周长是: %.2f\n", circumference);
return 0;
}
第 8 章:数组
习题 8.1:编写一个程序,声明一个包含 10 个元素的整型数组,用循环给数组赋值为 1 到 10,然后逆序输出数组中的所有元素。
#include <stdio.h>
#define SIZE 10 // 定义数组大小,便于修改
int main(void)
{
int arr[SIZE]; // 声明一个有 10 个元素的整型数组
int i;
// 用循环给数组赋值
for (i = 0; i < SIZE; ++i)
{
arr[i] = i + 1; // 数组索引从 0 开始,arr[0] = 1, arr[1] = 2, ...
}
// 逆序输出数组
printf("数组逆序输出为: ");
for (i = SIZE - 1; i >= 0; --i) // 从最后一个元素 (索引 9) 开始,循环到第一个元素 (索引 0)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
第 9 章:函数
习题 9.1:编写一个函数 is_even,用于判断一个整数是否为偶数,然后在 main 函数中调用它。
#include <stdio.h>
// 函数声明
// is_even 函数接收一个 int 类型的参数 num
// 返回一个 int 类型的值 (1 表示真/偶数, 0 表示假/奇数)
int is_even(int num);
int main(void)
{
int number;
printf("请输入一个整数: ");
scanf("%d", &number);
// 调用 is_even 函数,并将返回值作为 if 判断的条件
if (is_even(number))
{
printf("%d 是一个偶数,\n", number);
}
else
{
printf("%d 是一个奇数,\n", number);
}
return 0;
}
// 函数定义
int is_even(int num)
{
// 如果余数为 0,返回 1 (真);否则返回 0 (假)
// 在 C 语言中,非零值通常被视为真,零为假。
// 所以也可以直接写成: return (num % 2 == 0);
if (num % 2 == 0)
{
return 1;
}
else
{
return 0;
}
}
如何获取更多答案?
如果你需要更多章节的答案,可以尝试以下途径,但请务必结合我的学习建议来使用:
-
GitHub:在 GitHub 上搜索
C Primer Plus 5th Edition solutions或The C Programming Language 5th Edition solutions,有很多好心人会分享他们的练习答案,用户safespring和ryanchow1990都有比较完整的答案集。- 注意:查看这些仓库时,要关注
commit history,了解代码的修改过程,而不仅仅是最终的成品。
- 注意:查看这些仓库时,要关注
-
Stack Overflow:在 Stack Overflow 上搜索具体的问题,
"C Primer Plus Chapter 5 Exercise 5 solution",你很可能会找到高质量的讨论和代码示例。 -
学习社区和论坛:如 V2EX、CSDN、知乎等平台,也有很多学习者分享和讨论书中的习题。
祝你学习顺利,在 C 语言的世界里探索愉快!
