一、为什么分享谭浩强第五版C程序设计课后习题答案
谭浩强教授的《C程序设计》是许多计算机专业学生必修的课程,但是在学习过程中我们不仅需要理解基本概念和语法,还需要通过解决问题来加深理解。而课本上的习题虽然提供了很好的训练,但是答案却不在课本上,对于学生来说,找不到答案的状况很常见。因此,我想通过分享谭浩强第五版C程序设计课后习题的答案,希望可以帮助到更多的学生。
当然,我并不是鼓励大家只“抄答案”,而是提供参考。在自己思考并尝试后,再对照着答案进行比对,加深对于知识点和程序设计的理解。
二、简单题目示例
下面是一些简单的例子,它们将帮助大家了解问题的难度:
1. 显示字符
#include <stdio.h>
int main()
{
printf("你好!\n");
return 0;
}
上述程序实现了显示“你好!”这一字符串的功能。其中: printf 函数用于输出内容, \n 表示换行。
2. 水仙花数
题目描述:水仙花数是指一个三位数,它的各位数字立方和等于该数本身。例如,153 是一个水仙花数,因为 153 = 1^3 + 5^3 + 3^3。
#include <stdio.h>
int main()
{
int i;
int x, y, z;
for (i = 100; i <= 999; i++)
{
x = i / 100;
y = i % 100 / 10;
z = i % 10;
if (i == x * x * x + y * y * y + z * z * z)
printf("%d ", i);
}
return 0;
}
上述程序使用循环来枚举所有的三位数,然后判断是否为水仙花数,最后输出满足条件的数目。
3. 判断素数
题目描述:判断输入的正整数是否为素数(即质数)。素数指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数。
#include <stdio.h>
#include <math.h>
int main()
{
int n;
int i;
printf("请输入一个正整数:");
scanf("%d", &n);
if (n <= 1)
{
printf("%d 不是素数\n", n);
return 0;
}
int is_prime = 1;
for (i = 2; i <= sqrt(n); i++)
{
if (n % i == 0)
{
is_prime = 0;
break;
}
}
if (is_prime == 1)
printf("%d 是素数\n", n);
else
printf("%d 不是素数\n", n);
return 0;
}
上述程序读入一个正整数,然后从 2 到 n-1 逐一判断是否为 n 的因数。如果有,则 n 不是素数;否则,n 就是素数。
三、难度递增的题目示例
下面是一些逐渐增加难度的题目示例,它们将帮助大家更好地巩固各种语法知识点并提高编程技巧。
1. 统计平均数和方差
题目描述:输入若干个数,计算它们的平均数和方差。其中,方差用以下公式计算:
variance = (sum(x_i ^ 2) – n * mean ^ 2) / n
#include <stdio.h>
#include <math.h>
int main()
{
int n;
double x_i;
double sum_x_i = 0.0;
double sum_x_i_2 = 0.0;
double mean;
double variance;
printf("请输入若干个数:");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%lf", &x_i);
sum_x_i += x_i;
sum_x_i_2 += x_i * x_i;
}
mean = sum_x_i / n;
variance = (sum_x_i_2 - n * mean * mean) / n;
printf("平均数:%f\n方差:%f\n", mean, variance);
return 0;
}
上述程序通过循环读入若干个数,计算它们的平均数和方差。
2. 排序
题目描述:输入一组整数,从小到大排序并输出。
#include <stdio.h>
int main()
{
int n;
printf("请输入数的个数:");
scanf("%d", &n);
int arr[n];
printf("请输入这些数:");
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
printf("排序后的数:");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
上述程序通过选择排序的算法,对输入的数进行排序。具体来说,每次找到最小的数,并将其放到前面。
3. 矩阵乘法
题目描述:输入两个矩阵,求它们的乘积。
#include <stdio.h>
int main()
{
int row1, col1, row2, col2;
printf("请输入第一个矩阵的行数和列数:");
scanf("%d%d", &row1, &col1);
printf("请输入第二个矩阵的行数和列数:");
scanf("%d%d", &row2, &col2);
if (col1 != row2)
{
printf("两个矩阵无法相乘!\n");
return 0;
}
int mat1[row1][col1], mat2[row2][col2];
printf("请输入第一个矩阵中的元素:");
for (int i = 0; i < row1; i++)
{
for (int j = 0; j < col1; j++)
scanf("%d", &mat1[i][j]);
}
printf("请输入第二个矩阵中的元素:");
for (int i = 0; i < row2; i++)
{
for (int j = 0; j < col2; j++)
scanf("%d", &mat2[i][j]);
}
int product[row1][col2];
for (int i = 0; i < row1; i++)
{
for (int j = 0; j < col2; j++)
{
product[i][j] = 0;
for (int k = 0; k < col1; k++)
product[i][j] += mat1[i][k] * mat2[k][j];
}
}
printf("两个矩阵的乘积为:\n");
for (int i = 0; i < row1; i++)
{
for (int j = 0; j < col2; j++)
printf("%d ", product[i][j]);
printf("\n");
}
return 0;
}
上述程序读入两个矩阵,然后通过双重循环进行矩阵乘法运算,并输出乘积结果。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/270455.html
微信扫一扫
支付宝扫一扫