0

我想问你关于 C++ 中的签名选项卡的问题。我有一个代码,其中生成上三角矩阵:

int main(int argc, char* argv[])
{
double **a,slad,aslad;
int i,k,n;

cout<<"podaj n"<<endl;
cin>>n;
a=new double *[n];

for(i=0;i<n;i++)
        a[i]=new double [n];
for(i=0;i<n;i++)
{
        for(k=0;k<n;k++)
                a[i][k]=2.0*rand()/RAND_MAX-1;
}
for(i=0;i<n;i++)
{
        for(k=0;k<n;k++)
        {
                printf("%10.5lf",a[i][k]);
                cout<<endl;
        }
}

/三角矩阵/

cout<<endl<<"Upper 1"<<endl;
for(i=0;i<n;i++)
{
        cout<<endl;
        for(k=i;k<n;k++)
                printf("%10.5lf",a[i][k]);
}

当它被编译时,我在开始时看到它没有标签。是否可以创建类似“i * / t”的东西 - 你知道......我想在每一行的开头添加适当数量的选项卡(它与行数相同 - i)

它应该看起来像:

1 2 3
  2 3
    3

不像现在这样:

1 2 3
2 3
3

你能给我一些建议吗?

4

3 回答 3

1

关于什么

cout<<endl<<"Upper 1"<<endl;
for(i=0;i<n;i++)
{
    cout<<endl;
    for (k = 0; k < i; k++)
         printf("\t");
    for(k=i;k<n;k++)
            printf("%10.5lf",a[i][k]);
}
于 2013-10-23T10:50:34.677 回答
1

您需要在字符之前打印制表符。如果您考虑一下,您需要的标签数量实际上与您所在的索引相同(首先您需要 0 个标签,接下来您需要 1 个,依此类推)。应将以下代码放在打印循环之前以实现此目的。

for(l=0;l<i;l++)
{
    printf("\t");
}
于 2013-10-23T11:00:11.693 回答
0

我会使用空格来缩进行:

const unsigned width = 10;
for (i = 0; i < n; i++) {
    printf("%*s", i*width, "");
    for (k = i; k < n; k++) {
        printf("%*.5lf", width, a[i][k]);
    }
    printf("\n");
}
于 2013-10-23T12:55:24.320 回答