课后作业
chao_smile 2024/3/9
# 第十六课
# 1. 编写一个程序,该程序首先要求用户输入一个正整数 n
,然后动态分配一个整型数组(指针实现)
,数组大小为 n
。接下来,程序要求用户依次输入 n
个整数,并将这些整数存储到动态分配的数组中。最后,程序输出这些整数的平均值
- ✅
- 历史解析
- 整体题解思路正确,本题主要考查指针与数组的创建赋值以及使用,没有问题💯
# 2. 编写一个程序,实现字符串逆序的功能。程序要求用户输入一个字符串,然后使用指针逆序该字符串,并输出逆序后的结果
- ✅
- 历史解析
- 整体题解思路正确,本题主要考查指针与字符数组的创建赋值以及使用,没有问题💯
# 3. 编写一个程序,要求用户输入一个字符串,然后定义一个函数,接收该字符串和一个子串作为参数,统计子串在字符串中出现的次数,并使用指针实现。在主函数中调用该函数并输出结果
- ✅
- 历史解析
- 整体题解思路正确,本题主要考查指针与字符数组的创建赋值以及使用,没有问题💯
# 4. 编写一个程序,其中包含两个函数:一个函数用于对两个整数进行加法运算,另一个函数用于对两个整数进行乘法运算。然后,编写一个函数,该函数接受一个操作符('+'或'*')和两个整数作为参数,并根据操作符选择调用加法函数或乘法函数。最后,编写一个主函数,演示如何使用函数指针数组来实现此功能
- ✅
- 历史解析
- 整体题解思路正确,本题主要考查指针与函数的传值以及使用,没有问题💯
# 5. 编写一个程序,定义一个二维整数数组 matrix
,表示一个 3x3
的矩阵。然后,编写以下功能的函数:
- 打印矩阵的元素。
- 计算并输出矩阵中每行元素的和。
- 计算并输出矩阵对角线元素的和。
- 将矩阵中每个元素的值加 1 并输出。
- 要求使用指针来操作二维数组,并将矩阵作为参数传递给函数。
小提示
#include <iostream>
using namespace std;
const int ROWS = 3;
const int COLS = 3;
// 打印矩阵的元素
void printMatrix(int (*matrix)[COLS]) {
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLS; ++j) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
int main() {
int matrix[ROWS][COLS] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
cout << "矩阵信息:" << endl;
printMatrix(matrix);
return 0;
}
int (*matrix)[COLS]
是一个指向数组的指针。这种语法通常用于声明指向二维数组的指针。在这种情况下,matrix
是一个指针,指向一个数组,该数组的每个元素都是一个包含 COLS
个整数的一维数组。
(*matrix)
表示matrix
是一个指针,可以通过解引用来访问指向的值。[COLS]
表示该指针指向的数组的列数。
因此,int (*matrix)[COLS]
声明了一个指针,指向一个包含 COLS
列的整数数组。
❌
历史解析
- 计算对角线元素的和这里有问题,计算的方式不正确。对角线元素的索引应该是相同的,应该是
matrix[0][0] + matrix[1][1] + matrix[2][2]
,而不是matrix[0][2] + matrix[0][1] + matrix[0][3]
- 题目要求:将矩阵中每个元素的值加
1
并输出,你是直接输出时展示的+1
而不是将数组值+1
后展示
- 计算对角线元素的和这里有问题,计算的方式不正确。对角线元素的索引应该是相同的,应该是
参考答案
#include <iostream>
using namespace std;
const int ROWS = 3;
const int COLS = 3;
// 打印矩阵的元素
void printMatrix(int (*matrix)[COLS]) {
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLS; ++j) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
// 输出每行元素的和
cout << "每行元素的和:" << endl;
for (int i = 0; i < ROWS; ++i) {
int rowSum = 0; // 重置每行的和
for (int j = 0; j < COLS; ++j) {
rowSum += matrix[i][j];
}
cout << "第 " << i + 1 << " 行的和为:" << rowSum << endl;
}
// 输出对角线元素的和
int diagonalSum = 0;
for (int i = 0; i < ROWS; ++i) {
diagonalSum += matrix[i][i]; // 对角线元素索引相同
}
cout << "对角线元素的和为:" << diagonalSum << endl;
// 将矩阵中每个元素的值加 1 并输出
cout << "增加后的矩阵:" << endl;
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLS; ++j) {
matrix[i][j] += 1; // 增加元素值
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
int main() {
int matrix[ROWS][COLS] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
cout << "矩阵信息:" << endl;
printMatrix(matrix);
return 0;
}