社区
C语言
帖子详情
who 调用 who 啊 ?
ZCH999999999
2009-02-18 02:19:50
int hanshu(int);
main()
{
int c;
c=getchar();
printf("%c",hanshu(c));
}
int hanshu(int x)
{
if(x!=EOF)
{
main();
return x;
}
}
请各位帮我解释一下执行的顺序,谁调用谁啊这是?谢谢
...全文
165
14
打赏
收藏
who 调用 who 啊 ?
int hanshu(int); main() { int c; c=getchar(); printf("%c",hanshu(c)); } int hanshu(int x) { if(x!=EOF) { main(); return x; } } 请各位帮我解释一下执行的顺序,谁调用谁啊这是?谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ZM27080401
2009-02-18
打赏
举报
回复
是个很有意思的程序,考察了很多东西啊,
第一个是递归,第二个是取字符函数,第三个是函数调用,第四个是字符输出,第五是形参和实参
int hanshu(int);
main()
{
int c;
c=getchar();
printf("%c",hanshu(c));
}
int hanshu(int x)
{
if(x!=52) /*输入参数到4结束 52是4的ascii码,10代表是换行符*/
{
main();
return x;
}
}
测试参数是 1,2,3,4 输入如下:
输入是:
1 回车 | ps:从main()启动调用hanshu,第一次
2 回车 | 将1压入栈底,当hanshu调用main()时,c=getchar()是不会产生输入中断的,
3 回车 | 紧跟着是把回去符压入栈的第二位,如此直到输入4时,栈也就压倒头了,而4后
4 回车 | 的回车没有进到栈里,但是在屏幕上有它的位置,那就是换行了。
4 回车 | 输出就是个递归出栈的过程了,由于形参X已经被改成4了,return出的第一个就是4
3 回车 | 第二字符是3后面的回车符,如此直到1,出栈完毕,栈底的最后一个字符是1,所以
2 回车 | 光标在1的后面
1光标1后面停住
总结是,输入8个字符,被压入7个,输出7个,main()是主调函数,整个程序构成了一个递归循环体,所以应当是main()为主调度函数,它能引起int 21h中断,这是我个人认为的,供LZ看看
qingyaoli
2009-02-18
打赏
举报
回复
这不会又是某公司面试题吧....
wlk
2009-02-18
打赏
举报
回复
喔,楼主那个强呀
cd_news
2009-02-18
打赏
举报
回复
学习了啊,这样也行!呵呵
whoisthisman
2009-02-18
打赏
举报
回复
[Quote=引用 9 楼 zmlovelx 的回复:]
printf("%c",hanshu(c));
关键在这一句,想要输出必须先调用hanshu(c)才能得到输出的值,而hanshu又要调用main
这样当遇到ctrl+z(EOF)时,才输出值,此时最后输出的值最先打印出来.从后往前依次输出.
[/Quote]
哦,果然,我不知道EOF是ctrl+z,太挫了
帅得不敢出门
2009-02-18
打赏
举报
回复
printf("%c",hanshu(c));
关键在这一句,想要输出必须先调用hanshu(c)才能得到输出的值,而hanshu又要调用main
这样当遇到ctrl+z(EOF)时,才输出值,此时最后输出的值最先打印出来.从后往前依次输出.
iambic
2009-02-18
打赏
举报
回复
哈哈,谁写的SB程序?
Dinelgua
2009-02-18
打赏
举报
回复
写的好
双函数递归调用
顺序如下
main->hanshu-main-hanshu.....->hanshu
跳出递归的条件是hanshu中的if(x!=EOF)
所以整个递归调用由main开始 hanshu结束 中间他俩结对出现互调
向下递归时获取输入 形成一个栈
递归结束条件满足时 将输入出栈并打印
完成了 正向输入 反向输出功能
赞
写的好
yuzl32
2009-02-18
打赏
举报
回复
main()->hanshu(int)->main()
whoisthisman
2009-02-18
打赏
举报
回复
好像是个死循环啊,不能输出的
ljmscsq
2009-02-18
打赏
举报
回复
这就类似一个递归的过程。
在执行printf("%c",hanshu(c)); 的时候
调用hanshu(c)函数,在c不是EOF的时候重新调用主函数
再执行printf("%c",hanshu(c));如此反复。
知道c为EOF递归结束,递归是倒推结果的。所以就从你最后
输入的字符开始从后往前显示结果。
redlives
2009-02-18
打赏
举报
回复
实际上是一个递归调用。
这样就好理解了
猫已经找不回了
2009-02-18
打赏
举报
回复
楼主干嘛呢?这样也可以?
ZCH999999999
2009-02-18
打赏
举报
回复
输出结果与输入顺序相反
Who lock me
当你使用Windows在删除硬盘中许多无用文件时,经常会遇到这样的提示:...选项,通过点击它,就可以看到谁在
调用
文件了,按下“结束进程”就可以将
调用
文件的程序关掉,然后你就可以轻松的删除任何不再需要的文件了。
Python基础学习(一) 字符串分割操作
分割–split(str=""[,num]) str ----分隔符,默认是所有空格,换行(\n),制表符(\t) num —分割数,默认为-1,即分割整个字符串;分割数为num+1 去除空格–strip([obj]) ..."
调用
一个方法,返回如下述 的列...
哈工大操作系统实验3 系统
调用
系统
调用
实验目的实验步骤写系统
调用
who.c更改 Makefile,将 who.c 与其他Linux代码编译链接到一起写
调用
who.c里面对用函数的API写 iam.c ,在里面
调用
API实验内容 实验目的 建立对系统
调用
接口的深入认识; ...
SQLServer中sp_Who、sp_Who2和sp_WhoIsActive介绍和查看监视运行
系统存储过程“sp_who”和“sp_who2”可以检查实例上所有正在运行的进程,但它们缺乏很多有助于性能监控和分析过程的有用信息,也显示了很多如系统进程等无用的信息。 为此,Adam Machanic(自 2004 年起成为 ...
sp_who_lock
https://blog.csdn.net/anewboyz/article/details/94730300 CREATE PROCEDURE [dbo].[sp_who_lock] AS BEGIN DECLARE @spid INT , @bl INT , @intTransactionCountOnEntry IN...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章