关于 C 语言的一个问题,希望懂的可以回答一下(初学者拜谢)

2015-09-10 20:30:51 +08:00
 loveis0
int main (int argc, const char * argv[]) {
// for (int c = 0; c < 5; c++) {
// for (int n = 0; n < 3; n++) {
// printf (" ");
// }
// }
int count = 0;
for (int i = 1; i <= 9; i++) {
printf (" %c",count );
for (int j = 1; j <= i; j++) {
printf ("%c%i*%i=%i\t",count,j,i,i*j );
}
printf ("\n");
count++;
}
return 0;
}


代码在上面,但是敲了半天实在是琢磨不出来。

我想把 99 乘法表像以下这行代码这样实现出来,像一座山一样。

int main (int argc, const char * argv[]) {
// int count = 0;
for (int i = 0; i < 7; i++) {
for (int j=i; j < 7; j++) {
printf (" ");
}
for (int n=0; n <= i*2; n++) {
printf ("*");
}
printf ("\n");
// count++;
}
return 0;
}

因为我是初学者,所以搞不太懂哪里没做对,麻烦懂的人,亲切回答一下。。。
3660 次点击
所在节点    程序员
27 条回复
zodiac1111
2015-09-10 21:02:33 +08:00
我也不懂,但是代码如果格式化一下,应该会有更多人愿意看看.
vixvix
2015-09-10 21:43:37 +08:00
我试了试,能跑... 你出啥问题了?
loveis0
2015-09-10 22:10:21 +08:00
@vixvix 不是能不能跑的问题,我上面说了呀,想要代码 1 类似于代码 2 那样,输出成一个形状。。。。一座山那样。。。。就需要把最前面的空格,依次递减。。但是就是不知道怎么继续做了。。。
ho121
2015-09-10 22:19:04 +08:00
为什么是%c
CodeCaker
2015-09-10 22:20:33 +08:00
没具体看你的代码。你可以参考一下 printf ("%Ns", str );printf ("%-Ns", str );......这类格式。
CRVV
2015-09-10 22:23:52 +08:00
zonyitoo
2015-09-10 22:27:44 +08:00
完全没懂你到底要实现什么
sharpkingdom
2015-09-10 22:32:52 +08:00
#include <stdio.h>
int main (int argc, const char * argv[]) {

int count = 0;
int i = 1;
for (; i <= 9; i++) {
//printf (" %c",count );
int j = 1;
int k = 0;
for (;k<(9-i );k++){
printf (" ");
}
for (; j <= i; j++) {
printf ("%i%i*%i=%i ",count,j,i,i*j );
}
printf ("\n");
count++;
}
return 0;
}


你看上面代码的结果是不是你想要的。
我是在线编译调试的, https://ganquan.info/g++-compiler/
大家想编译的话可以使用上面的网址。
Strikeactor
2015-09-10 22:36:26 +08:00
你要不试试从最后一排开始算,算出一排存一排,最后一起输出
空格数累加,下层字符数减去上层字符数除二就是上层前面需要多加的空格
sharpkingdom
2015-09-10 22:39:05 +08:00
```c
#include <stdio.h>
int main (int argc, const char * argv[]) {

int count = 0;
int i = 1;
for (; i <= 9; i++) {
int j = 1;
int k = 0;
for (;k<(9-i );k++){
printf (" ");
}
for (; j <= i; j++) {
printf ("%i%i*%i=%2i ",count,j,i,i*j );
}
printf ("\n");
count++;
}
return 0;
}
```

上面这个版本貌似对齐了都。关键不在于什么空格依次递减,如何对齐我觉得是关键。
kokutou
2015-09-10 23:31:00 +08:00
@CRVV 吊吊吊。。。真的是好无聊啊。。。。
wezzard
2015-09-10 23:34:44 +08:00
想起一個笑話:「各位高手,我在網上找到一段 python 源代碼,格式已經丟失了,誰能幫我復原一下?」
loveis0
2015-09-10 23:40:10 +08:00
@sharpkingdom 已感谢!!!就是要的是这样的效果。不过每个方程前面多了一个数字=。=我才看到,现在去研究下怎么实现的。。。谢谢高手!!!
loveis0
2015-09-10 23:43:01 +08:00
@ho121 因为我是初学者不太懂,我以为空格这种符号要用%c ,因为%i 不是表示数字吗?
@CodeCaker 你楼下的那位 @sharpkingdom 同志看懂了我的代码,你可以复制下他的看看,应该可以明白我的意思。。。
@CRVV 我就是觉得有趣=。=谢谢
@Strikeactor 作为一个初学者,你光这样说我也不太懂。。。。
10iii
2015-09-10 23:45:53 +08:00
int main (int argc, const char * argv[]) {

int count = 0;
for (int i = 1; i <= 9; i++) {
for (int x = (9-count );x>0;x--) printf ("\t");
for (int j = 1; j <= i; j++) {
printf ("%i*%i=%i\t",j,i,i*j );
}
printf ("\n");
count++;
}
return 0;
}
loveis0
2015-09-10 23:45:55 +08:00
@sharpkingdom 谢谢,为了我无聊的想法,您辛苦了。要是方便的话可以请您代码每行上加一些注释吗?当然如果不方便就不浪费时间了。只不过我是初学者,很想知道您每一步的具体思维是怎么想的。
loveis0
2015-09-10 23:52:33 +08:00
@10iii 神了!!!就是这个!!完美!!!
loveis0
2015-09-10 23:55:16 +08:00
@10iii 求注释每一步的思维方式可以吗 QAQ 。。。当然如果不方便请随意。。。
10iii
2015-09-11 00:04:08 +08:00
每行输出前面空上一些格子就好了,算算好空个字符就行了,我用了 tab 偷懒,结果是在有些环境中打印出来的结果可能不是金字塔形,取决于环境对于 tab 的定义是几个空格。
loveis0
2015-09-11 00:12:24 +08:00
@10iii 恩好的我会好好研究下的。。。谢谢。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/219777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX