我在教自己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;
}
答案 0 :(得分:2)
尝试使用std::vector。
向量是表示可以改变大小的数组的序列容器。
你可以这样做:
vector<bool> function()
{
vector<bool> vec;
vec.push_back(true);
vec.push_back(false);
vec.push_back(true);
return vec;
}
答案 1 :(得分:1)
如果您将测试次数作为第二个参数传递,则表示您实际知道测试次数,因此您无需使用vector
。您可以返回动态分配的数组(使用new
或malloc
)。
代码如下所示:
int* calcgrade(bool tests[][NCOL], int NROW){
int* array = new int[NROW];
for(int i=0;i<NROW;i++)
array[i] = calculatedGrade;
return array;
}
答案 2 :(得分:0)
你可以:
struct
创建结构类型,在C++ Reference上阅读更多内容并返回/作为您类型的参数结构。答案 3 :(得分:0)
另一种方法是在主函数中创建Answer数组,然后将其与T / F数组一起传递给您的评分函数。然后,您的评分功能可以在Answer数组上运行,甚至不需要返回任何内容。
基本上,当你在函数中传递数组时,你实际上是将指针传递给数组,因此你可以对它们进行操作,好像它们是通过引用传递的(就像它们一样)。
半伪代码:
void getGrades( const int answerVector, int gradeVector ) {
// code that computes grades and stores them in gradeVector
}