我不断收到细分错误。任何帮助,将不胜感激。我是学生,所以请放轻松我。谢谢。
背景: 我必须打印矩阵,所有元素的总和,显示上半部分,显示下半部分,打印中间行,打印中间列。 读入矩阵的尺寸,然后是N * M值。
#include <iostream>
#include <stdlib.h>
using namespace std;
void printMatrix(int** matrix, int n, int m)
{
cout << "Printed matrix: " << endl;
for(int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
cout << matrix[i][j] << "\t";
}
cout << endl;
}
};
void getSum(int** matrix, int n, int m)
{
int sum=0;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
sum += matrix[i][j];
}
}
cout << "The sum of all numbers is: " << sum << endl;
};
void printUpper(int** matrix, int n, int m)
{
if(n != m)
{
cout << "The matrix is not square.\n";
return;
}
cout << "The upper half of the array: \n";
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(j<i)
{
cout << "\t";
continue;
}
cout << matrix[i][j] << "\t";
}
cout << endl;
}
}
void printMiddleRow(int** matrix, int n, int m)
{
if(n%2==0)
{
cout << "Error! The number of rows is even. Cannnot print the middle.\n";
return;
}
cout << "The middle row: " << endl;
int mid = n/2;
for(int i=0; i<m; i++)
{
cout << matrix[mid][i] << "\t";
}
cout << endl;
};
void printMiddleCol(int** matrix, int n, int m)
{
if(m%2==0)
{
cout << "Error! The number of columns is even. Cannot print the middle.\n";
return;
}
cout << "The middle column: \n";
int mid = m/2;
for(int i=0; i<m; i++)
{
cout << matrix[i][mid] << "\t";
}
cout << endl;
};
int main(int argc, char* argv[])
{
if(argc<0)//checks to make sure user inputs dimensions of array
cout << "Error! More command line arguments are required.\n";
int n = atoi(argv[1]);
int m = atoi(argv[2]);
int** matrix = new int*[n];
for(int i=0; i<n; i++)
{
matrix[i] = new int[m];
}
int cur = 3;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
matrix[i][j] = atoi(argv[cur]);
cur++;
}
}
cout << "Please choose from the following options: \n";
cout << "1. Print the matrix.\n";
cout << "2. Sum all of the elements.\n";
cout << "3. Show the upper half.\n";
cout << "4. Show the middle row.\n";
cout << "5. Show the middle column.\n";
int choice;
cout << "Enter selection: ";
cin >> choice;
switch(choice)
{
case(1):
printMatrix(matrix, n, m);
break;
case(2):
getSum(matrix, n, m);
break;
case(3):
printUpper(matrix, n, m);
break;
case(4):
printMiddleRow(matrix, n, m);
break;
case(5):
printMiddleCol(matrix, n, m);
break;
default:
cout << "Invalid selection. Goodbye.\n";
}
return 0;
}
答案 0 :(得分:0)
在printMiddleCol函数中,&#34; for循环的范围&#34;给定0到m,它应该是0到n。请更正。