我在课堂上做了这个课程,我试图重新开始考试。该程序应该是一个数组[2] [10],并且应该按此顺序输出数字:
1 3 5 7 9 11 13 15 17 19
0 2 4 6 8 10 12 14 16 18
我真的迷失了,我真的可以使用任何帮助。
#include<iostream>
#include <string>
#include <cstring>
using namespace std;
void out(int n[2][10]);
void fillit(int n[2][10]);
int main(){
int nums[2][10];
fillit(nums);
out(nums);
}
void fillit(int n[2][10]){
n[0][0] = 1;
n[1][0] = 0;
for (int i = 1; i < 10; i++){
n[0][i] = n[0][i] + 2;
n[1][i] = n[0][i] + 2;
}
}
void out(int n[2][10]){
for (int r = 0; r <= 1; r++){
for (int c = 0; c <= 9; c++){
cout << n[r][c];
}
cout << endl;
}
}
更新我让程序成功填充数组,但现在我需要程序将第1行与第2行交换,然后输出新数组。即 0 2 4 6 8 10 12 14 16 18 1 3 5 7 9 11 13 15 17 19
答案 0 :(得分:2)
void fillit(int n[2][10]){
for (int i = 0; i < 10; i++){
n[0][i] = (i * 2 ) + 1;
n[1][i] = i * 2;
}
}
答案 1 :(得分:0)
#include<iostream>
#include <string>
#include <cstring>
using namespace std;
void out(int n[2][10]);
void fillit(int n[2][10]);
int main(){
int nums[2][10];
fillit(nums);
out(nums);
}
void fillit(int n[2][10]){
n[0][0] = 1;
n[1][0] = 0;
for (int i = 1; i < 10; i++){
n[0][i] = n[0][i-1] + 2;
n[1][i] = n[0][i-1] + 2;
}
}
void out(int n[2][10]){
for (int r = 0; r <= 1; r++){
for (int c = 0; c <= 9; c++){
cout << n[r][c];
}
cout << endl;
}
}
答案 2 :(得分:0)
这个怎么样,它更短?
int nums[2][10];
for (int i = 0; i < 20; i++)
{
nums[(i%2)^1][i/2] = i;
}
答案 3 :(得分:0)
我注意到第二个数组元素是偶数,第一个数组对应的元素是一个更大的(因而是奇数)...所以这个答案完成了 ONLY 的添加。可能更容易理解。
void fillit(int n[2][10])
{
int even = 0; // start value
for (size_t i = 0; i < 10; i++)
{
int odd = even + 1;
n[0][i] = odd;
n[1][i] = even;
even += 2;
}
}
我注意到你用C ++标记了这个问题。也许你应该试试矢量。
对于小向量,您只需在大括号中声明初始值,从而可以轻松定义矩阵限制[2]和[10]。在这个例子中,我使用易于识别的值初始化,因此您可以告诉2x10矩阵尚未填充。如果没有此init,则包含的值将是随机噪声。
std::vector<std::vector<int>> n {
{ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }, // row 1
{ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 } // row 2
// 1 2 3 4 5 6 7 8 9 10 <-- col
};
是的,您可以写入输出的目标值,但不需要fillit()。
要将2x10向量传递给fillIt(),请记住您需要将矩阵标记为参考。以下强调n [0]包含奇数,n [1]包含10个偶数。
// vector x vector v--reference
void fillIt(std::vector<std::vector<int>>& n)
{
int even = 0;
for (size_t c = 0; c < 10; ++c) // row major {
int odd = even + 1;
n[0][c] = odd;
n[1][c] = even;
even += 2;
}
}
对于测试,我建议只将2x10向量传递给新函数&#34; showIt()&#34;。
// do not modify--vvvvv do not copy--v
void vec2x10Show (const std::vector<std::vector<int>>& n)
{
// header
std::cout << "\nCOL->";
for (int i=0; i<10; ++i) std::cout << std::setw(3) << i+1 << " ";
std::cout << "\nr1: "; // r c
for (int c=0; c<10; ++c) std::cout << std::setw(3) << n[0][c] << " ";
std::cout << "\nr2: "; // r c
for (int c=0; c<10; ++c) std::cout << std::setw(3) << n[1][c] << " ";
std::cout << std::endl;
}
请注意硬编码的&#39; 10&#39;在每个循环中(一个幻数)。使用向量,这个幻数不是必需的,因为向量包含此信息(您的下一个分配)。