编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛  
 
全能 ASP / PHP / ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
发新话题
打印

有两个题目不会,望大家帮忙!~

以下是引用kaikai在2005-1-20 20:02:04的发言: 大概这样几个吧 f(i){i&&(f(i/10),printf("%d\n",i));}main(){f(12345);} f(i){printf("%d\n",i),i>1&&f(i/10);}main(){f(12345);} f(char*s){printf(s),*s&&f(s+2);}main(){f("* * * * * * *\n");}
这几条程序各运用了哪些知识啊??? 请赐教~~~~

[此贴子已经被作者于2005-1-22 16:59:38编辑过]

--------------------------------------------------------- [glow=255,green,2]______[/glow] [glow=255,blue,2]—————[/glow]

TOP

纯种的C语言
九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东

TOP

看了KAIKAI的东西.总觉得他是高手来着.因为低手都不这么写啊.
世上本没有菜鸟,但高手多了,我们就成了菜鸟.

TOP

世上本没有高手,但菜鸟多了,他们就成了高手。  
(嘿,好玩,,在下可没有冒犯哪位的意思哦

[此贴子已经被作者于2005-1-23 22:07:21编辑过]


TOP

楼上的说得对,同感,低一级的叫高一级的高手,其实高手也有求人的时候,就会叫所求的人作高手,无限循环。

TOP

就是说这个有向图有可能出现环...
Have you visit acm.tongji.edu.cn lately?

TOP

初学者,应该认真点,若写的很短,那最好给个说明吧;
 老实点的程序如下:
#include<stdio.h>
main()
{
int i,j;
for(i=0;i<7;i++)
{
for(j=0;j<7-i;j++)
  printf("*");
  printf("\n");
}
  getch();}

TOP

大家說得有道理啊

TOP

哈哈,这两道题我正好也要做
你说我们是两条相交的平行线。多么让人感动,后来我才发现,其实我们是两条渐进线,无限接近却永远不会碰到一起。

TOP

那么就解释一下吧: // prob.1

f(i) { // 逻辑条件表达式 a && b 在 a 为真时才去检验b的值。 // 这里在 i 为真的时候,才去执行后面的部分。为真也就是不为 0 i && (f(i/10),printf("%d\n",i)); // 而后半部分是一个逗号表达式。以这种形式出现 a,b // 从左往右依次执行。逗号表达式的返回值为最右侧的值 b // 不过这里对这个值并不关心。 // 这里出现了递归,把i的值除10,其实就是十进制数中去掉个位数字 // 这里的调用次序是先递归,后输出, // 所以可以得到短的数字在前面,而整个数字在后面的效果

// i 值的判断其实是对递归调用的限制,由于递归时每次都除 10, // 可以预见最终这个整型参数将为 0,从而结束递归。 }

main() { f(12345); // 这里直接给最大的那个值。 }

// prob.2

f(i) { // 这里要注意 && 与逗号两个运算符的优先级,&&高,所以不必加括号 printf("%d\n",i), i>1&&f(i/10); // 同样是递归,这时是先输出数据再递归调用,所以得到长的数字在前面 // 与上面类似 i>1 用来做为递归调用的限制条件。 // 不同的是这里在i为 1 时就要结束递归,否则将输出0 // 这里其实有个问题,如果需要输出的是 23456 这个数,那么将得到一个多余的0 // 也就是与 1 比大小恰好是这个题的特例,正确的想法应该是 // i 这个数是否为 2 位数,也就是写成 i>9 }

main() { f(12345); }

// prob.3

f(char*s) { // 仍然是递归,所不同的是参数是一个字符串 printf(s), *s&&f(s+2); // 这里要特别小心,字符串是连续存储的一串字符,末尾有一个 '\0' 也就是数字 0。 // 由于 s 每次加 2 做 *s 这个判断有一定的危险, // 假如串的内容不是奇数个字符,那么在最后一次 s+2 时直接越过了 // 字符串的末尾 '\0',然后程序将继续递归直到偶然地遇到一个0。 // 安全的做法是在字符串末尾多加1个'\0' }

main() { f("* * * * * * *\n"); // 这里恰好是奇数个字符.不然得这么写"* * * *\n\0" // 除了天然的一个结束标志,还有你人为的一个字符。保证了 s+2 不可能一口气跳过这个'\0'区域 }

Have you visit acm.tongji.edu.cn lately?

TOP

发新话题