讲义

C++语言程序设计讲义

课后作业

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;
}
上次更新: 2024-10-19 10:01:51