|  | 
 
 发表于 2024-2-12 21:55:55
|
显示全部楼层
   本楼为最佳答案 
| 
 非常抱歉,我之前的回答有误。是的,指令2的代码应该是指令3的。让我们来修复这个问题并添加指令3和指令4的代码。
 
 
 复制代码#include <stdio.h>
#include <stdlib.h>
int main() {
    int count1 = 0, count2 = 0;
    int M, N;
    int *matrix = NULL;
    int instruction;
    printf("=============================\n");
    printf("* 欢迎使用该程序,指令如下:*\n");
    printf("* 1. 生成一个 M*N 的矩阵     *\n");
    printf("* 2. 初始化矩阵              *\n");
    printf("* 3. 给矩阵中某个元素赋值    *\n");
    printf("* 4. 读取矩阵中某个元素      *\n");
    printf("* 5. 打印整个矩阵            *\n");
    printf("* 6. 结束程序                *\n");
    printf("=============================\n\n");
    do {
        printf("请输入指令:");
        scanf("%d", &instruction);
        count1++;
        if (instruction == 1) { // 指令1 - 生成矩阵
            count2++;
            if (count2 > 1) {
                printf("矩阵已存在,是否需要重新创建(Y/N)->");
                char choice;
                scanf(" %c", &choice);
                if (choice == 'Y' || choice == 'y') {
                    free(matrix);
                    count2 = 0;
                } else {
                    continue;
                }
            }
            printf("请输入矩阵的行数和列数(M N):");
            scanf("%d%d", &M, &N);
            matrix = (int *)malloc(M * N * sizeof(int));
            printf("成功生成 %d*%d 的矩阵!\n\n", M, N);
        } else if (instruction == 2) { // 指令2 - 初始化矩阵
            if (count2 == 0) {
                printf("矩阵未创建,请先生成一个矩阵!\n\n");
                continue;
            }
            int value;
            printf("请输入要用来初始化矩阵的值:");
            scanf("%d", &value);
            for (int i = 0; i < M * N; i++) {
                matrix[i] = value;
            }
            printf("矩阵初始化成功!\n\n");
        } else if (instruction == 3) { // 指令3 - 给矩阵中某个元素赋值
            if (count2 == 0) {
                printf("矩阵未创建,请先生成一个矩阵!\n\n");
                continue;
            }
            int row, col, value;
            printf("请输入要赋值的元素的行和列索引(行 列):");
            scanf("%d%d", &row, &col);
            if (row < 0 || row >= M || col < 0 || col >= N) {
                printf("输入的行和列索引超出矩阵范围,请重新输入!\n\n");
                continue;
            }
            printf("请输入要赋的值:");
            scanf("%d", &value);
            matrix[row * N + col] = value;
            printf("成功将矩阵中第 %d 行第 %d 列的元素赋值为 %d!\n\n", row, col, value);
        } else if (instruction == 4) { // 指令4 - 读取矩阵中某个元素
            if (count2 == 0) {
                printf("矩阵未创建,请先生成一个矩阵!\n\n");
                continue;
            }
            int row, col;
            printf("请输入要读取的元素的行和列索引(行 列):");
            scanf("%d%d", &row, &col);
            if (row < 0 || row >= M || col < 0 || col >= N) {
                printf("输入的行和列索引超出矩阵范围,请重新输入!\n\n");
                continue;
            }
            int value = matrix[row * N + col];
            printf("矩阵中第 %d 行第 %d 列的元素的值为:%d\n\n", row, col, value);
        } else if (instruction == 5) { // 指令5 - 打印整个矩阵
            if (count2 == 0) {
                printf("矩阵未创建,请先生成一个矩阵!\n\n");
                continue;
            }
            for (int i = 0; i < M; i++) {
                for (int j = 0; j < N; j++) {
                    printf("%d ", matrix[i * N + j]);
                }
                printf("\n");
            }
            printf("\n");
        } else if (instruction == 6) { // 指令6 - 结束程序
            free(matrix);
            printf("程序已结束,欢迎下次使用!\n");
            break;
        } else {
            printf("输入的指令无效,请重新输入!\n\n");
        }
    } while (1);
    return 0;
}
 这个修复后的代码中,我们添加了指令3和指令4的代码,可以分别用来给矩阵中某个元素赋值和读取矩阵中某个元素的值。希望这次的代码更符合您的期望,如果还有其他问题,请随时提问。
 
 以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
 | 
 |