请求将C语言矩阵乘法的for循环代码改为while循环并简化
将C语言矩阵乘法的for循环版本改为while循环并简化
改动说明
原代码使用嵌套for循环实现矩阵乘法,下面是转换为while循环并简化后的版本,同时优化了代码结构和可读性:
修改后的代码
#include <stdio.h> // 封装输入矩阵的函数,避免重复代码 void inputMatrix(int matrix[10][10], int rows, int cols) { int i = 0; while (i < rows) { int j = 0; while (j < cols) { scanf("%d", &matrix[i][j]); j++; } i++; } } // 封装打印矩阵的函数 void printMatrix(int matrix[10][10], int rows, int cols) { int i = 0; while (i < rows) { int j = 0; while (j < cols) { printf("%d\t", matrix[i][j]); j++; } printf("\n"); i++; } } int main() { int a[10][10], b[10][10], mul[10][10]; int r, c; printf("输入矩阵的行数:"); scanf("%d", &r); printf("输入矩阵的列数:"); scanf("%d", &c); printf("输入第一个矩阵的元素:\n"); inputMatrix(a, r, c); printf("输入第二个矩阵的元素:\n"); inputMatrix(b, r, c); // 用while循环实现矩阵乘法 printf("矩阵相乘的结果:\n"); int i = 0; while (i < r) { int j = 0; while (j < c) { mul[i][j] = 0; int k = 0; while (k < c) { mul[i][j] += a[i][k] * b[k][j]; k++; } j++; } i++; } printMatrix(mul, r, c); return 0; }
关键改动点
- 循环转换:所有for循环均替换为while循环,逻辑完全等价——将循环变量的初始化移至循环外,变量递增操作放在循环体末尾。
- 代码简化:把重复的矩阵输入、打印逻辑封装成独立函数,减少代码冗余,让主函数逻辑更清晰。
- 冗余清理:移除了仅用于Windows清屏的
system("cls")和对应的stdlib.h依赖,提升代码跨平台性。 - 可读性优化:将循环变量声明到各自循环的作用域附近,同时把英文提示改为中文,更适合初学者理解。
额外提示(矩阵乘法的严谨性)
原代码默认两个矩阵都是r行c列,但矩阵乘法的正确规则是第一个矩阵的列数必须等于第二个矩阵的行数。如果要让代码更通用,可以修改输入逻辑,让用户分别输入两个矩阵的维度(比如第一个矩阵m行n列,第二个矩阵n行p列),结果矩阵为m行p列,这是进阶学习可以拓展的方向。
内容的提问来源于stack exchange,提问作者LORD MODH
相关产品推荐
相关产品推荐

