当前位置: 代码迷 >> C语言 >> 请问这个程序怎么解释
  详细解决方案

请问这个程序怎么解释

热度:243   发布时间:2007-06-28 19:23:39.0
请问这个程序怎么解释

#include <stdio.h>
#include<conio.h>
main()
{ int i=1,sp=26;
while(i++<=26&&sp-->=1)
{
printf(" "+i),
printf("abcdefghijklmnopqrstuvwxyz"+sp),putchar('\n');
}
getch();
}

这个程序的结果大家可以自己运行看看,但是我不大明白的是两个printf语句后面为什么用逗号。我试了下,分号也可以运行。再就是这两个printf语句怎么理解啊?




上面的帖子是看见其他人发的``
我也看不懂``

最不明白的是+i和+sp什意思``而且为什么在他们前面没有",呢?

搜索更多相关的解决方案: 解释  

----------------解决方案--------------------------------------------------------
回复:(死了都要C)请问这个程序怎么解释
我也有同样疑问

密切关注
----------------解决方案--------------------------------------------------------
printf(" "+i)
其中" "字符串是以地址的形式计算和传递的

----------------解决方案--------------------------------------------------------

呵呵,比较有趣的程序
printf(" "+i),中
两个双引号中有26个空格,表示一个由26个空格组成的字符串。
" "是26个字母组成的字符串的首地址,第一轮时i为2
表示输出从第三个地址开始以后的字符,就是24个空格。
printf("abcdefghijklmnopqrstuvwxyz"+sp)这个语句同样理解,第一次输出的就是a所在的地址后25个,就是z
依次循环就得到运行的结果了~~~~

至于用逗号,只是使用的逗号表达式,在这里影响不大,换成分号结果一样

getch()是包含在头文件<conio.h>中的,<conio.h>是“通用输入输出库”,主要是文件和标准控制台的输入输出
不是标准库函数的头文件,用的很少~~~~~

总之平时大家还是不要写出这样的程序,能写出大家都看得懂的程序的程序员才是一个好的程序员,,呵呵


----------------解决方案--------------------------------------------------------

好办法,长见识了,C的指针就是厉害....


----------------解决方案--------------------------------------------------------
补充一下,原程序存在问题,最后一行不能对齐
应该将i定义为int i=0;
两次运行结果如下:
z
yz
xyz
wxyz
vwxyz
uvwxyz
tuvwxyz
stuvwxyz
rstuvwxyz
qrstuvwxyz
pqrstuvwxyz
opqrstuvwxyz
nopqrstuvwxyz
mnopqrstuvwxyz
lmnopqrstuvwxyz
klmnopqrstuvwxyz
jklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
hijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
defghijklmnopqrstuvwxyz
cdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

定义i=0;后
z
yz
xyz
wxyz
vwxyz
uvwxyz
tuvwxyz
stuvwxyz
rstuvwxyz
qrstuvwxyz
pqrstuvwxyz
opqrstuvwxyz
nopqrstuvwxyz
mnopqrstuvwxyz
lmnopqrstuvwxyz
klmnopqrstuvwxyz
jklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
hijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
defghijklmnopqrstuvwxyz
cdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

[此贴子已经被作者于2007-6-28 22:48:36编辑过]


----------------解决方案--------------------------------------------------------
呵呵, 第一次见过, 4楼分析得很好.
----------------解决方案--------------------------------------------------------
理解了,顶4楼的
----------------解决方案--------------------------------------------------------
int i=1,sp=26;
while(i++<=26&&sp-->=1)
不明白第一轮i怎么为2
i++不是先取i再自加的吗
----------------解决方案--------------------------------------------------------
4楼说的第一论i位是说while后面的{}一的i
这个时候的i已经是2了,因为在while里++了``
----------------解决方案--------------------------------------------------------
  相关解决方案