| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1390 人关注过本帖
标题:有两个题目不会,望大家帮忙!~
只看楼主 加入收藏
寂静
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2004-10-16
收藏
得分:0 
以下是引用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]
2005-01-22 16:54
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
纯种的C语言

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-01-22 20:11
cdy3166
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2004-12-12
收藏
得分:0 
看了KAIKAI的东西.总觉得他是高手来着.因为低手都不这么写啊.

世上本没有菜鸟,但高手多了,我们就成了菜鸟.
2005-01-23 13:19
三少爷
Rank: 1
等 级:新手上路
帖 子:192
专家分:0
注 册:2004-4-29
收藏
得分:0 
世上本没有高手,但菜鸟多了,他们就成了高手。  
(嘿,好玩,,在下可没有冒犯哪位的意思哦

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



2005-01-23 22:02
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
楼上的说得对,同感,低一级的叫高一级的高手,其实高手也有求人的时候,就会叫所求的人作高手,无限循环。
2005-01-23 22:16
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
收藏
得分:0 
就是说这个有向图有可能出现环...

Have you visit acm.tongji. lately?
2005-01-23 22:56
lmr
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2004-12-9
收藏
得分:0 
初学者,应该认真点,若写的很短,那最好给个说明吧;
 老实点的程序如下:
#include<stdio.h>
main()
{
int i,j;
for(i=0;i<7;i++)
 {
 for(j=0;j<7-i;j++)
  printf("*");
  printf("\n");
 }
  getch();}

2005-01-25 14:59
fanzorro
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2004-12-24
收藏
得分:0 
大家說得有道理啊
2005-01-25 15:04
parakeet
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-1-25
收藏
得分:0 
哈哈,这两道题我正好也要做

你说我们是两条相交的平行线。多么让人感动,后来我才发现,其实我们是两条渐进线,无限接近却永远不会碰到一起。
2005-01-25 17:05
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
收藏
得分:0 

那么就解释一下吧: // 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. lately?
2005-01-25 19:42
快速回复:有两个题目不会,望大家帮忙!~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012050 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved