C++九九乘法表的问题

yucotang 2009-12-17 04:26:40
初学C++,写了个九九乘法表:
#include "iostream.h"
void main()
{
int i,j;
cout<<" *";
for(i=1;i<=9;i++)
cout<<" "<<i;
cout<<endl;
for(i=1;i<=9;i++)
{
cout<<" "<<i;
for(j=1;j<=i;j++)
cout<<" "<<i*j;
cout<<endl;
}
}


程序执行后得到的结果基本上是可以的,但是我就想能不能让第一行和第一列相应的数字做乘法的结果与第一行的的每个数字在同一条竖线上对齐?因为从第四列(第一行数字3对应下来的一列)开始乘法表中的结果就不在一条竖线上了。实现如下样式:
* 1 2 3 4 5 6 7 8 9
1 1
2 2 4
3 3 6 9
4 4 8 12 16
5 5 10 15 20 25
6 6 12 18 24 30
7 7 14 21 28 35 42 49
8 8 16 24 32 40 48 56 64
9 9 18 27 36 45 54 63 72 81
...全文
381 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArmStronger 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yucotang 的回复:]
引用 10 楼 cfz379945430 的回复:
引用 8 楼 cfz379945430 的回复:
引用 6 楼 yucotang 的回复:
非常感谢~
如果能够让各位对齐各位,十位对齐十位就更好了。。。

这个好办,把 ios::left改成 ios::right就好了

C/C++ codeint main()
{int i,j;
    cout < <setw(3) < <"*";for(i=1;i <=9;i++)
        cout < <setw(3) < <i;
    cout < <endl;for(i=1;i <=9;i++)
    {
        cout < <setw(3) < <setiosflags(ios::right) < <i;for(j=1;j <=i;j++)
       
            cout < <setw(3) < <setiosflags(ios::right) < <i*j;

        cout < <endl;
    }


   
    system("pause");return0;
}



单纯地把 ios::left改成 ios::right就 不行,但是这个可以。。。厉害!!

[/Quote]
这只是格式输出问题,没什么大不了的,呵呵
下班了,闪人!
yucotang 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cfz379945430 的回复:]
引用 8 楼 cfz379945430 的回复:
引用 6 楼 yucotang 的回复:
非常感谢~
如果能够让各位对齐各位,十位对齐十位就更好了。。。

这个好办,把 ios::left改成 ios::right就好了

C/C++ codeint main()
{int i,j;
cout<<setw(3)<<"*";for(i=1;i<=9;i++)
cout<<setw(3)<<i;
cout<<endl;for(i=1;i<=9;i++)
{
cout<<setw(3)<<setiosflags(ios::right)<<i;for(j=1;j<=i;j++)

cout<<setw(3)<<setiosflags(ios::right)<<i*j;

cout<<endl;
}



system("pause");return0;
}
[/Quote]


单纯地把 ios::left改成 ios::right就 不行,但是这个可以。。。厉害!!
yucotang 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gcc_gun 的回复:]
打印的时候每个数字后面加一个\t应该就可以了,但是你要一位数的和两位数的从中间对齐,这是不可能的,只能做到从左边对齐,后面么,爱谁长谁长。
[/Quote]

貌似这个是比较困难或不可能?
ArmStronger 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cfz379945430 的回复:]
引用 6 楼 yucotang 的回复:
非常感谢~
如果能够让各位对齐各位,十位对齐十位就更好了。。。

这个好办,把 ios::left改成 ios::right就好了
[/Quote]
int main() 
{
int i,j;
cout <<setw(3)<<"*";
for(i=1;i <=9;i++)
cout <<setw(3)<<i;
cout <<endl;
for(i=1;i <=9;i++)
{
cout<<setw(3)<<setiosflags(ios::right)<<i;
for(j=1;j <=i;j++)

cout<<setw(3)<<setiosflags(ios::right)<<i*j;

cout <<endl;
}



system("pause");
return 0;
}
yucotang 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cfz379945430 的回复:]
引用 6 楼 yucotang 的回复:
非常感谢~
如果能够让各位对齐各位,十位对齐十位就更好了。。。

这个好办,把 ios::left改成 ios::right就好了
[/Quote]

改了之后更有问题,你运行下看看就知道了。。。
ArmStronger 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yucotang 的回复:]
非常感谢~
如果能够让各位对齐各位,十位对齐十位就更好了。。。
[/Quote]
这个好办,把 ios::left改成 ios::right就好了
gcc_gun 2009-12-17
  • 打赏
  • 举报
回复
打印的时候每个数字后面加一个\t应该就可以了,但是你要一位数的和两位数的从中间对齐,这是不可能的,只能做到从左边对齐,后面么,爱谁长谁长。
yucotang 2009-12-17
  • 打赏
  • 举报
回复
非常感谢~
如果能够让各位对齐各位,十位对齐十位就更好了。。。
ArmStronger 2009-12-17
  • 打赏
  • 举报
回复
结果,不知道是不是这样

* 1 2 3 4 5 6 7 8 9
1 1
2 2 4
3 3 6 9
4 4 8 12 16
5 5 10 15 20 25
6 6 12 18 24 30 36
7 7 14 21 28 35 42 49
8 8 16 24 32 40 48 56 64
9 9 18 27 36 45 54 63 72 81
ArmStronger 2009-12-17
  • 打赏
  • 举报
回复
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
int i,j;
cout <<"*";
for(i=1;i <=9;i++)
cout <<setw(3)<<i;
cout <<endl;
for(i=1;i <=9;i++)
{
cout<<setw(3)<<setiosflags(ios::left)<<i;
for(j=1;j <=i;j++)

cout<<setw(3)<<setiosflags(ios::left)<<i*j;

cout <<endl;
}

return 0;
}
kuruby 2009-12-17
  • 打赏
  • 举报
回复
include <iostream.h>
using std::cout;
int main()
{
int i,j;
cout < <"*\t";
for(i=1;i <=9;i++)
cout < <i< <"\t" ;
cout < <endl;
for(i=1;i <=9;i++)
{
cout < <i< <"\t" ;
for(j=1;j <=i;j++)
cout < <i*j< <"\t" ;
cout < <endl;
}
return 0;
}
kuruby 2009-12-17
  • 打赏
  • 举报
回复
你可以使用“\t”
yucotang 2009-12-17
  • 打赏
  • 举报
回复
还是发现那个表不整齐,发帖的时候特意弄整齐了的,发出之后就不整齐了,郁闷。。。

64,650

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧