[英]2d Arrays in C++
好的,我有这个程序,我在处理它时遇到了麻烦。 在addRows和subtractRows函数中,程序冻结,并且总和也不正确。 可以看看这个并指出我的错误吗? 谢谢。
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
const int ROW1MAX = 100;
const int COL1MAX = 100;
const int ROW2MAX = 100;
const int COL2MAX = 100;
void inputInfo(double[][COL1MAX], int , int );
void addRows(double AR[][COL2MAX], int ROW1, int RW2);
void subtractRows(double array[][COL2MAX], int RW1, int RW2);
void addColumns(double ar[][COL2MAX], int COL1, int COL2);
void subtractColumns(double RAY[][COL2MAX], int CL1, int CL2);
void printAry(int ary[ROW1MAX][COL1MAX]);
//void copyAry(double RR[][COL2MAX], int RZ, int CZ);
void rowLargestNumber(double RY[100][100], int RS, int COS);
void columnLargestNumber(double XC[100][100], int X, int Y);
void rowSmallestNumber(double BK[100][100], int RB, int CB);
void columnSmallestNumber(double QU[100][100], int ROWB, int COLB);
void replace(double VW[100][100], int D, int H);
void printAry(double GH[100][100], int A, int B);
int rows;
int colm;
double ary1[ROW1MAX][COL1MAX];
double ary2[ROW2MAX][COL2MAX];
ofstream jfOutputFile;
int main()
{
jfOutputFile.open("2D_Array_Stuff");
inputInfo(ary1, ROW1MAX, COL1MAX);
addRows(ary1, ROW1MAX, ROW1MAX);
subtractRows(ary1, ROW1MAX, ROW1MAX);
addColumns(ary1, COL1MAX, COL1MAX);
subtractColumns(ary1, COL1MAX, COL1MAX);
//copyAry(ary1, ROW1MAX, COL1MAX);
rowLargestNumber(ary2, ROW2MAX, COL2MAX);
columnLargestNumber(ary2, ROW2MAX, COL2MAX);
rowSmallestNumber(ary2, ROW2MAX, COL2MAX);
columnSmallestNumber(ary2, ROW2MAX, COL2MAX);
replace(ary2, ROW2MAX, COL2MAX);
printAry(ary2, ROW2MAX, COL2MAX);
jfOutputFile.close();
return 0;
}
void inputInfo(double inputInfo[][COL2MAX], int ROW1MAX, int COL1MAX)
{
cout << "How many rows are in your first array?: ";
cin >> ROW1MAX;
cout << "How many columns are in your first array?: ";
cin >> COL1MAX;
cout << "\nEnter the information for each row and column:\n";
for (rows = 0; rows < ROW1MAX; rows++)
{
for (colm = 0; colm < COL1MAX; colm++)
{
cout << "Row " << (rows + 1);
cout << ", Column " << (colm + 1)<< " : ";
cin >> inputInfo[rows][colm];
}
}
cout << "\nThe first array is: \n";
cout<<endl;
printAry(inputInfo, ROW1MAX, COL1MAX);
addRows(inputInfo, ROW1MAX, ROW1MAX);
subtractRows(inputInfo, ROW1MAX, ROW1MAX);
addColumns(inputInfo, COL1MAX, COL1MAX);
subtractColumns(inputInfo, COL1MAX, COL1MAX);
}
void addRows(double addRows[][COL2MAX], int row1, int row2)
{
double rowSum1 = 0;
double rowSum2 = 0;
for(colm = 0; colm < COL1MAX; colm++)
{
rowSum1 = rowSum1 + addRows[row1][colm];
cout<<rowSum1<<endl;
}
for(colm = 0; colm < COL1MAX; colm++)
{
rowSum2 = rowSum2 + addRows[row2+4][colm];
}
cout << "\nthe sum of two rows is: " << rowSum1 + rowSum2 << ".\n";
for (int r = 0; r < ROW1MAX; r++)
{
rowSum1 = 0;
for (int c = 0; c < colm; c++)
rowSum1 += addRows[r][c];
}
}
void subtractRows(double subRows[][COL2MAX], int rows1, int rows2)
{
int rowDif1 = 0;
int rowDif2 = 0;
for(colm = 0; colm < COL1MAX; colm++)
{
rowDif1 = rowDif1 - subRows[rows1][colm];
}
for(colm = 0; colm < COL1MAX; colm++)
{
rowDif2 = rowDif2 - subRows[rows2][colm];
}
int subRowSum = rowDif2 - rowDif1;
cout << "\nThe difference between two rows is: " << subRowSum << ".\n";
}
void addColumns(double addCols[][COL2MAX], int colm1, int colm2)
{
double colSum1;
double colSum2;
colSum1 = 0;colSum2=0;
for(rows = 0; rows < ROW1MAX; rows++)
{
colSum1 = colSum1 + addCols[rows][colm1];
}
for(rows = 0; rows < ROW1MAX; colm++)
{
colSum2 = colSum2 + addCols[rows][colm2];
}
cout << "\nThe sum of 2 columns is: " << colSum1 + colSum2 << ".\n";
}
void subtractColumns(double subCols[][COL2MAX], int colm1, int colm2)
{
double colDif1;
double colDif2;
colDif1 = 0;
colDif2 = 0;
for(rows = 0; rows < ROW1MAX; rows++)
{
colDif1 = colDif1 - subCols[rows][colm1];
}
for(rows = 0; rows < ROW1MAX; rows++)
{
colDif2 = colDif2 - subCols[rows][colm2];
}
cout << "\nThe difference between 2 columns is: " << colDif2 - colDif1 << ".\n";
}
void copyAry(double copyAry[100][100], int RA, int CB)
{
for (rows = 0; rows < RA; rows++)
{
for (colm = 0; colm < CB; colm++)
{
copyAry[RA][CB] = ary2[ROW2MAX][COL2MAX];
}
}
cout << "\nThe copied array is:\n" << ary2[ROW2MAX][COL2MAX] << ".\n";
}
void rowLargestNumber(double rowLgstNum[100][100], int RS, int COS)
{
double highest;
for (int rw = 0; rw < RS; rw++)
{
highest = rowLgstNum[rw][0];
for (int clm = 0; clm < COS; clm++)
{
if ( rowLgstNum[rw][clm] > highest)
{
highest = rowLgstNum[rw][clm];
}
}
}
cout << "The highest number in Row " << ROW2MAX << "is " << highest << ".\n";
}
void columnLargestNumber(double colLgstNum[100][100], int X, int Y)
{
double HIGH;
for (int CM = 1; CM < Y; CM++)
{
HIGH = colLgstNum[0][CM];
for (int RW = 0; RW < X; RW++)
{
if ( colLgstNum[RW][CM] > HIGH)
{
HIGH = colLgstNum[RW][CM];
}
}
}
cout << "The highest number in Column " << COL2MAX << "is " << HIGH << ".\n";
}
void rowSmallestNumber(double rowSmstNum[100][100], int RB, int CB)
{
double lowest;
for (int rx = 1; rx < RB; rx++)
{
lowest = rowSmstNum[rx][0];
for (int cx = 0; cx < CB; cx++)
{
if ( rowSmstNum[rx][cx] < lowest)
{
lowest = rowSmstNum[rx][cx];
}
}
}
cout << "The lowest number in Row " << ROW2MAX << "is " << lowest << ".\n";
}
void columnSmallestNumber(double colSmstNum[100][100], int ROWB, int COLB)
{
double LOW;
for (int CN = 0; CN < COLB; CN++)
{
LOW = colSmstNum[0][CN];
for (int rH = 0; rH < ROWB; rH++)
{
if ( colSmstNum[rH][0] < LOW)
{
LOW = colSmstNum[rH][CN];
}
}
cout << "The lowest number in Column " << COL2MAX << "is " << LOW << ".\n";
}
}
void replace(double replace[100][100], int D, int H)
{
for (int f = 0; f < D; f++)
{
for (int c = 0; c < H; c++)
{
replace[1][1] = 100;
}
}
}
void printAry(double prtAry[ROW1MAX][COL1MAX], int A, int B)
{
for (int a = 0; a < A; a++)
{
for (int b = 0; b < B; b++)
{
cout << prtAry[a][b] << " ";
if(b==B)
{
cout<<endl;
}
}
}
cout << "\n";
}
这里有一些问题。 首先,切勿为变量使用与您的方法/函数相同的名称。 当我们将“ addRows”同时视为变量和函数时,这很令人困惑。
专门针对您的问题,为什么addRows失败,您将数组声明为ROW1MAX,但尝试访问行ROW1MAX。 在声明(创建数组的位置)中,指定多少行 。 当您实际访问数组时,它是一个基于0的索引。 因此,具有5行的数组将具有行0、1、2、3和4。没有5。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.