第六次作业和答案

This commit is contained in:
zhbaor 2020-11-21 22:37:53 +08:00
parent 9b8a1318db
commit f9992eecc9
3 changed files with 341 additions and 19 deletions

267
source/_posts/answer6.md Normal file
View file

@ -0,0 +1,267 @@
---
title: 第六次作业(答案)
date: 2020-11-20 17:40:16
tags:
---
# 冒泡排序
```C
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LEN 10
void swap(int a[], int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
void bubble_sort(int a[], int n)
{
int done = 0;
for (int i = 0; i < n - 1; ++i) {
if (done)
return;
done = 1;
for (int j = 0; j < n - 1 - i; ++j) {
if (a[j] > a[j + 1]) {
swap(a, j, j + 1);
done = 0;
}
}
}
}
void rand_array(int a[], int n)
{
for (int i = 0; i < n; ++i) {
int tmp = rand() % 20 + 1;
a[i] = tmp;
}
}
void print_array(int a[], int n)
{
for (int i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
printf("\n");
}
int main()
{
srand(time(0));
int a[LEN];
printf("使用随机数填充数组:\n");
rand_array(a, LEN);
print_array(a, LEN);
bubble_sort(a, LEN);
printf("排序过后的数组:\n");
print_array(a, LEN);
return 0;
}
```
# 矩阵乘法
```C
#include <stdio.h>
void input_matrix(double mat[][100], int *row, int *column)
{
printf("行:");
scanf("%d", row);
printf("列:");
scanf("%d", column);
printf("数据:\n");
for (int i = 0; i < *row; ++i) {
for (int j = 0; j < *column; ++j) {
scanf("%lf", &mat[i][j]);
}
}
}
void print_matrix(double mat[][100], int row, int column)
{
for (int i = 0; i < row; ++i) {
for (int j = 0; j < column; ++j) {
printf("%f ", mat[i][j]);
}
printf("\n");
}
}
void matrix_mul(double mat_a[][100], double mat_b[][100], double mat_c[][100],
int a_row, int a_column, int b_column)
{
for (int i = 0; i < a_row; ++i) {
for (int j = 0; j < b_column; ++j) {
mat_c[i][j] = 0;
for (int k = 0; k < a_column; ++k) {
mat_c[i][j] += mat_a[i][k] * mat_b[k][j];
}
}
}
}
int main()
{
double mat_a[100][100];
double mat_b[100][100];
double mat_c[100][100];
int a_row;
int a_column;
int b_row;
int b_column;
printf("请输入矩阵A:\n");
input_matrix(mat_a, &a_row, &a_column);
printf("请输入矩阵B:\n");
input_matrix(mat_b, &b_row, &b_column);
if (a_column != b_row) {
printf("A和B无法相乘!\n");
return 0;
}
matrix_mul(mat_a, mat_b, mat_c, a_row, a_column, b_column);
print_matrix(mat_c, a_row, b_column);
return 0;
}
```
# P166 T13
```C
#include <stdio.h>
#include <string.h>
void mystrcat(char a[], char b[])
{
int i = strlen(a) - 1;
for (int j = 0; b[j] != '\n'; ++i, ++j) {
a[i] = b[j];
}
a[i] = '\0';
}
int main()
{
printf("请输入第一个字符串,回车结束:\n");
char a[200];
fgets(a, 200, stdin);
printf("请输入第二个字符串,回车结束:\n");
char b[100];
fgets(b, 100, stdin);
mystrcat(a, b);
printf("连接之后的字符串是\n%s\n", a);
return 0;
}
```
# P216 T13
```C
#include <stdio.h>
double P(int n, double x)
{
if (n == 0) {
return 1;
} else if (n == 1) {
return x;
} else {
return ((2 * n - 1) * x - P(n - 1, x) - (n - 1) * P(n - 2, x)) / n;
}
}
int main()
{
printf("请输入x: ");
double x;
scanf("%lf", &x);
printf("请输入n: ");
int n;
scanf("%d", &n);
printf("P_n(x) = %lf\n", P(n, x));
return 0;
}
```
# P216 T14
```C
#include <stdio.h>
double score[5][3];
void Average_Student(void)
{
for (int i = 0; i < 5; ++i) {
double avg = 0;
for (int j = 0; j < 3; ++j) {
avg += score[i][j];
}
avg /= 3;
printf("第%d个学生的平均成绩是%f\n", i + 1, avg);
}
}
void Average_Lesson(void)
{
for (int i = 0; i < 3; ++i) {
double avg = 0;
for (int j = 0; j < 5; ++j) {
avg += score[j][i];
}
avg /= 5;
printf("第%d门课程的平均成绩是%f\n", i + 1, avg);
}
}
void Find_Max(void)
{
double max = score[0][0];
int max_i = 0, max_j = 0;
for (int i = 0; i < 5; ++i) {
for (int j = 0; j < 3; ++j) {
if (max < score[i][j]) {
max = score[i][j];
max_i = i;
max_j = j;
}
}
}
printf("成绩最高的是第%d个学生的第%d门课程的成绩。\n", max_i + 1, max_j + 1);
}
void Calc_Var(void)
{
double sum_xi = 0;
double sum_xi2 = 0;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 5; ++j) {
sum_xi2 += score[i][j];
sum_xi2 += score[i][j] * score[i][j];
}
}
double sigma = sum_xi2 / 15 - sum_xi * sum_xi / 225;
printf("方差是%f\n", sigma);
}
int main()
{
for (int i = 0; i < 5; ++i) {
for (int j = 0; j < 3; ++j) {
printf("请输入第%d个学生的第%d门成绩:", i + 1, j + 1);
scanf("%lf", &score[i][j]);
}
}
Average_Student();
Average_Lesson();
Find_Max();
Calc_Var();
return 0;
}
```

View file

@ -6,39 +6,45 @@ date: 2020-10-30 09:39:53
tags: tags:
--- ---
# 第六次作业
- [题目](/~zhaozuohong/homework6/)
- [答案](/~zhaozuohong/answer6/)
- [讲解](/~zhaozuohong/resources/Experiment6.pdf)
# 第一次大作业 # 第一次大作业
* [题目](/~zhaozuohong/big-homework1/) - [题目](/~zhaozuohong/big-homework1/)
* [答案](/~zhaozuohong/big-answer1/) - [答案](/~zhaozuohong/big-answer1/)
* [实验报告模板( $\rm \LaTeX$ )](/~zhaozuohong/template1/) - [实验报告模板( $\rm \LaTeX$ )](/~zhaozuohong/template1/)
# 第五次作业 # 第五次作业
* [题目](/~zhaozuohong/homework5/) - [题目](/~zhaozuohong/homework5/)
* [答案](/~zhaozuohong/answer5/) - [答案](/~zhaozuohong/answer5/)
* [讲解](/~zhaozuohong/resources/Experiment5.pdf) - [讲解](/~zhaozuohong/resources/Experiment5.pdf)
# 第四次作业 # 第四次作业
* [题目](/~zhaozuohong/homework4/) - [题目](/~zhaozuohong/homework4/)
* [答案](/~zhaozuohong/answer4/) - [答案](/~zhaozuohong/answer4/)
* [讲解](/~zhaozuohong/resources/Experiment4.pdf) - [讲解](/~zhaozuohong/resources/Experiment4.pdf)
# 第三次作业 # 第三次作业
* [题目](/~zhaozuohong/homework3/) - [题目](/~zhaozuohong/homework3/)
* [答案](/~zhaozuohong/answer3) - [答案](/~zhaozuohong/answer3)
* [测试数据](/~zhaozuohong/test3) - [测试数据](/~zhaozuohong/test3)
* [讲解](/~zhaozuohong/resources/Experiment3.pdf) - [讲解](/~zhaozuohong/resources/Experiment3.pdf)
# 第二次作业 # 第二次作业
* [题目](/~zhaozuohong/homework2/) - [题目](/~zhaozuohong/homework2/)
* [答案](/~zhaozuohong/answer2) - [答案](/~zhaozuohong/answer2)
* [讲解](/~zhaozuohong/resources/Experiment2.pptx) - [讲解](/~zhaozuohong/resources/Experiment2.pptx)
# 第一次作业 # 第一次作业
* [题目](/~zhaozuohong/homework1/) - [题目](/~zhaozuohong/homework1/)
* [答案](/~zhaozuohong/answer1) - [答案](/~zhaozuohong/answer1)
* [讲解](/~zhaozuohong/resources/Experiment1.pptx) - [讲解](/~zhaozuohong/resources/Experiment1.pptx)

View file

@ -0,0 +1,49 @@
---
title: 第六次作业(题目)
date: 2020-11-20 12:26:17
tags:
mathjax: true
---
# 冒泡排序
对 10 个伪随机数冒泡排序,伪随机数产生方法可参考上面习题指导第 127 页,注意冒泡排序排好了要能提前退出。
# 矩阵乘法
实现两个矩阵相乘。
# P166 T13
编一程序,将两个字符串连接起来,不要用`strcat`函数。
# P216 T13
用递归方法求 $n$ 阶勒让德多项式的值,递归公式为:
$$
\begin{equation*}
P_{n}(x) = \left \{
\begin{array}{ll}
1 & (n = 0) \\
x & (n = 1) \\
((2n-1) \times x P_{n-1}(x) - (n-1) \times P_{n-2}(x) ) / n & (n \geq 1)
\end{array}
\right .
\end{equation*}
$$
# P216 T14
输入 5 个学生 3 门课的成绩,分别用函数实现下列功能:
1. 计算每个学生的平均分;
2. 每门课的平均分;
3. 找出所有 15 个中最高的所对应的学生和课程;
4. 计算平均分方差。
$$
\begin{equation*}
\sigma = \frac{1}{n} \sum x_i^2 - \left ( \frac{\sum x_i}{n} \right ) ^2
\end{equation*}
$$