3道简单的问题,也是一个大学研究生的入学考试题!

runorstop 2003-01-14 06:43:55
一:
#include <stdio.h>
main()
{
int status;
int tochild[2];
char *msg="what is this program doing";
char *argv[]={"/usr/bin/wc","-w",null};

pipe(tochild);

if ( fork()==0 )
{
close(tochild[1]);
dup2(tochild[0],0);
close(tochild[0]);

execv(argv[0],argv);
exit(1);
}

close(tochild[0]);
write(tochild[1],msg,strlen(msg));
close(tochild[1]);

wait(&status);
}

二:
int what(int x,int y)
{
printf("what(%d,%d)¥n",x,y);
if (y==0)
{
return x;
}
else {
return what(y,x%y);
}
}
main()
{
what(8,12);
}

三:
#include <stodio.h>
main()
{
int status;
char *argv[]={"/usr/bin/wc","-1","execwc.c",null};
if (fork()==0) {
execv(argv[0],argv);
exit(1);
}
wait(&status);
}

呵呵,一和三其实差不多,是两年的题。二却是两年都有的。

虽然说二比较简单,但一和三还是有点不懂,各位大大帮忙也解一解吧。^_^。
...全文
55 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
runorstop 2003-01-20
  • 打赏
  • 举报
回复
呵呵,结贴!
Cybergate 2003-01-20
  • 打赏
  • 举报
回复
唉,考研要考linux编程,完了,我只会DOS/Windows!!
xzhuang 2003-01-20
  • 打赏
  • 举报
回复
第二题确实是欧几里德求最大公约数的算法.而且确实也应当是/号.也叫辗转相除法
实际上就是我们小时候教的方法
runorstop 2003-01-18
  • 打赏
  • 举报
回复
up
runorstop 2003-01-18
  • 打赏
  • 举报
回复
glassshark(追赶蜗牛),问题简单是简单,但是你鱼渔什么都不留的就光说:简单。两个字,也太..........对不住你那四颗三角了吧,呵呵,大家助人为乐,看看第三题到底能不能直接得到答案。
grAmme 2003-01-18
  • 打赏
  • 举报
回复
我是初学者,问个笨问题,
char *msg="what is this program doing";
char *argv[]={"/usr/bin/wc","-w",null};
第一句话定义了一个字符型指针,指针应该是指向地址的,为什么能直接赋值呢?
应该是char a="what is this program doing";
char *msg=&a才对啊,
第二句是什么意思,请各位解一下好吗?谢谢了
hustlzh 2003-01-18
  • 打赏
  • 举报
回复
第二道题是用辗转相除法算最大公约数吧
glassshark 2003-01-18
  • 打赏
  • 举报
回复
简单.
runorstop 2003-01-17
  • 打赏
  • 举报
回复
不对吧,8和12不管顺序是什么他的最大公约数都是4

第二题应该是取余吧。这个东西虽然简单,但混起来确实是有些绕,谁能给出这个是求最大公约数的明确的理由来,别光说这是数学问题就完了,讲一讲为什么是求最大公约数而不是求余。

还有,第三题到底在不运行的情况下能不能从表面上看出结果,谁知道?请指教。
asvaboy1980 2003-01-17
  • 打赏
  • 举报
回复
gz
mycurious 2003-01-17
  • 打赏
  • 举报
回复
第二道题是求最大公约数的算法:
结果是:
what(8,12)
what(12,8)
what(8,4)
what(4,0)
(8,12)=4,即 8和12 的最大公约数是4
hyj122 2003-01-17
  • 打赏
  • 举报
回复
good!
hnjkserver 2003-01-17
  • 打赏
  • 举报
回复
楼上说的对,%就是取余,既然很多人都认为这是一个求最大公约数的问题,那我也不例外,但答案应该是(按 /n来处理)
what(8,12)
what(12,8)
what(8,4)
what(4,0)
patronlee 2003-01-17
  • 打赏
  • 举报
回复
%是取余!例8%12=8
runorstop 2003-01-17
  • 打赏
  • 举报
回复
up
runorstop 2003-01-17
  • 打赏
  • 举报
回复
up
runorstop 2003-01-16
  • 打赏
  • 举报
回复

runorstop 2003-01-16
  • 打赏
  • 举报
回复
谢谢xzhuang(胖头鱼),可我现在是没有实际运行的条件,而且我想知道第三题在不运行的情况下是否能得到确切答案,
char *argv[]={"/usr/bin/wc","-1","execWc.c",null}这行代码是不是返回execWc.c文件的line数目?
如果不运行的话,是否能得出答案。
xzhuang 2003-01-16
  • 打赏
  • 举报
回复
第二题诗欧几里德算法。求最大公约数。可以直接转为非递归来作。
第一题管道。他将子进程的0关掉(stdin),把管道的输出端用dup作为子进程的
标准输入。这样子进程将收到父进程的消息。原因在于管道有同步的机制,所以子进程如果读不到就被阻塞了。至于char *argv[]={"/usr/bin/wc","-w",null}
char *argv[]={"/usr/bin/wc","-1","execwc.c",null};
是什么意思。你到linux下man wc就知道了。应当是wc这个程序的参数。
runorstop 2003-01-16
  • 打赏
  • 举报
回复
呵呵,有人要扔鸡蛋了:

为什么第二个答案不是这样:
由 what(8,12)
what(y,x%y) x%y是求最大公约数是吧,8和12的最大公约数为4
==》what(12,4)

又 what(y,x%y) 12和4的还是4
==》what(4,4)

结果:what(8,12)¥nwhat(12,4)¥nwhat(4,4)。。。。。。。。。。。。

呵呵,我想是那里想错了,可,是什么地方出问题了呢?
加载更多回复(29)

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧