如何在C ++中的单独列中显示结果

时间:2014-03-21 19:19:07

标签: c++

我正在编写一个用于数论证明的程序,但我在编写代码方面经验很少。

我想要做的是显示公式的所有结果:

                             Answer = sqrt [4*n]

其中; n = 1,2,3,4,5,6,7,...... 50

但我想在两组列中显示结果,即

  • 我希望第一列成为n的上半部分。因此,有50次迭代,第1列将包含数字0 - > 25。
  • 第二列应显示等式中的前25个答案。
  • 第3列有n的后半部分。即数字26-> 50
  • 第4列应显示n。
  • 的最后25个值的结果

我试图展示的一个例子是*:
*(忽略以下示例中的点,它们仅用于显示目的)

N:............回答:............ N:...........答案:

到目前为止,我已经使用了代码,但我无法弄清楚如何分割和显示上面显示的n值和Answer值。 我所能做的只是在两列中显示值,如下所示:

N:...........回答:

这是我到目前为止所得到的:

    #include <iostream> 
    #include <iomanip>
    #include <cmath> //preprocesser directives

    using namespace std; //avoids having to use std:: with cout/cin


    int main (int argc, char* argv[])


    {
        int n;
        float Ans;

        cout << setw(4) << "n:" <<  "\t\t" << setw(4) << "Answer:" << "\n" << endl;



    for (int n = 0; n<=50; n++)
    {
    Ans = sqrt ((4)*(n));   

    cout  << setw(4) << n <<  "\t\t" << setprecision(4) << setw(4) << Ans << endl;

    }    

    cout << "\n\nPress enter to end" << endl;

    cin.get(); 

    }                       

我真的不知道如何将它分成4个单独的列,但我知道\ t函数必须与它有关!??

任何帮助表示赞赏! 感谢

3 个答案:

答案 0 :(得分:1)

将for循环更改为:

for (int n = 1; n<=25; n++)
{   
    Ans = sqrt ((4)*(n));   
    cout  << setw(4) << n <<  "\t\t" << setprecision(4) << setw(4) << Ans << "\t\t";
    Ans = sqrt ((4)*(n + 25));   
    cout  << setw(4) << n + 25 <<  "\t\t" << setprecision(4) << setw(4) << Ans << endl;
}

答案 1 :(得分:0)

从1到25循环并在循环体中计算两个结果:一个用于n,另一个用于n + 25.

这是一个非常简单的可编辑和可运行的示例,向您展示基本概念:

#include <iostream>
#include <math.h>

int main()
{
    for (int n = 1; n <= 25; ++n)
    {
        std::cout << n << "\t" << sqrt(n) << "\t"
            << (n + 25) << "\t" << sqrt(n + 25) << "\n";
    }
}

这可能已足以满足您的需求。但是,请注意我使用了制表符。这很容易编写,但正确的输出取决于标签大小,即您可能会在某些显示或编辑器上得到错误对齐的列。

此问题的一个解决方案是创建HTML输出,使用<table>元素并让Web浏览器负责显示实际表:

#include <iostream>
#include <math.h>

int main()
{
    std::cout << "<table>\n"; // and other HTML stuff
    for (int n = 1; n <= 25; ++n)
    {
        std::cout << "<tr>";
        std::cout << "<td>" << n << "</td><td>" << sqrt(n) << "</td><td>"
            << (n + 25) << "</td><td>" << sqrt(n + 25);
        std::cout << "</tr>\n";
    }
    std::cout << "</table>\n";
}

如果你在Windows上,那么将其编译成例如output.exe,并按如下方式调用它来创建HTML文件:

output.exe >output.html 

如果你想要纯文本输出,事情会变得更难。您必须提前计算所有结果,将它们存储在std::vector中,将每个结果转换为std::string s,查看字符串的大小,选择最长的然后输出具有适当填充空格的所有项目。实际上,你必须为此学习很多新东西,这可能会导致一些或两个关于Stack Overflow的更具体的问题。

修改:您正在使用setw(4)。实际上,如果您对固定宽度感到满意,那么这是解决问题的另一种合理方法。

答案 2 :(得分:0)

此解决方案解决了您的问题,并且具有解决类似问题的优势,您必须将(x,y)对输出到四列表。你不会被锁定为增加1,2,3等的输入。

将其添加到文件顶部,其他包含

#include <vector>

将此添加到正文

cout << setw(4) << "n:" <<  "\t\t" << setw(4) << "Answer:" << "\n" << endl;

std::vector<double> inputs;
std::vector<double> answers;

for (int n = 0; n<=50; n++){
    inputs.push_back(n);  
    inputs.push_back(sqrt(4*n));
}
for (int n = 1; n<=25; n++){
    cout  << setw(4) << Inputs[n] <<  "\t\t" << setprecision(4) << setw(4) << Answers[n] << "\t\t" << setw(4) << Inputs[n+25] <<  "\t\t" << setprecision(4) << setw(4) << Answers[n+25] << endl;
}