我正在自学 C++ 并从教科书中解决问题。到目前为止,我已经介绍了数据类型、声明、显示、赋值、交互式输入、选择(if-else)和重复(for/while 循环...)、函数和数组等基础知识。我没有对指针做过任何事情,但我知道它们是什么......
我遇到了这个问题:
真假测试的答案如下: TTFF T. 给定一个二维答案数组,其中每一行对应于一个测试提供的答案,编写一个接受二维数组和测试次数的函数作为参数并返回一个包含每个测试成绩的一维数组。(每个问题都值 5 分,因此最高可能分数为 25。)使用以下数据测试您的功能:
我的理解是 C++ 函数不能返回数组——至少这是我在这个论坛的其他帖子上读到的。这个对吗?如果是这样,他们如何期望你解决这个问题,因为我还没有涉及指针。我认为可能的唯一另一种方法是通过引用传入数组....但问题干只说函数有2个参数,所以我认为可能排除了该方法。该方法需要第三个参数,它是您修改的数组,因此它会隐式返回。
我有一些代码,但它不正确(只有我的 calcgrade 函数需要工作),我不确定如何继续前进。有人可以建议吗?谢谢!!
#include<iostream>
// Globals
const int NROW = 6, NCOL = 5;
bool answers[NCOL] = {1, 1, 0, 0, 1};
bool tests[][NCOL] = {1, 0, 1, 1, 1,
1, 1, 1, 1, 1,
1, 1, 0, 0, 1,
0, 1, 0, 0, 0,
0, 0, 0, 0, 0,
1, 1, 0, 1, 0};
int grade[NROW] = {0};
// Function Proto-Types
void display1(bool []);
void display2(bool [][NCOL]);
int calcgrade(bool [][NCOL], int NROW);
int main()
{
calcgrade(tests, NROW);
display2(tests);
return 0;
}
// Prints a 1D array
void display1(bool answers[])
{
// Display array of NCOL
for(int i = 0; i < NCOL; i++)
std::cout << std::boolalpha << answers[i] << std::endl;
return;
}
// Print 2d Array
void display2(bool answers[][NCOL])
{
// Display matrix: 6x5
for(int i = 0; i < NROW; i++)
{
for(int j= 0; j < NCOL; j++)
{
std::cout << std::boolalpha << answers[i][j] << std::endl;
}
std::cout << std::endl;
}
return;
}
int calcgrade(bool tests[][NCOL], int NROW)
{
for(int i = 0; i < NROW; i++)
{
for(int j = 0; j < NROW; j++)
{
if(tests[i][j]==answers[j])
grade[i] += 5;
}
printf("grade[%i] = %i", i, grade[i]);
}
return grade;
}