xp ? *xp : 0这个语句是不能被编译成条件传送语句的。因为如果是条件传送语句,那么不论xp为什么,*xp都会被计算。

我们要写一个和该功能完全一样的能编译成条件传送语句的函数。

于是,我们要想办法不使用*xp,而使用一个替代的指向0的非空指针。

int cread_alt(int *xp)
{
    int t = 0;
    int *p = xp?xp:&t;
    return *p;
}

 

 

6.23

设半径为r的磁盘总的磁道是K

如上图去除的部分x*r的磁道数为x*K

那么剩下的磁道数为 (1-x)*K

所以总容量为 2*pi*x*r*(1-x)*K (其中pi,r和K都是常数)

也就是对x*(1-x)进行判断

可以得出x = 0.5的时候取最大

 

6.24

 

6.26

可以由以下公式计算得出

 

10.6

Unix进程打开的描述符赋给了stdin(描述符0)、stdout(描述符1)和stderr(描述符2)。

open函数总是返回最低的未打开的描述符,所以第一次调用open函数会返回描述符3即是fd1=3

第二次调用open函数则会返回描述符4即是fd2=4

关闭fd2之后再打开fd2仍是4

 

8.9

解:如图中所画的坐标轴可以比较容易的看出

AB之间没有交集所以不是并行,而其他的有交集所以是并行。

 

 

8.11

解:

  ∵Fork()函数的作用是调用一次返回两次

  ∴当 i = 0 时,输出2个hello

     当 i = 1 时,输出2个hello

   当 i = 2 时,条件不满足跳出循环

  ∴输入4个hello

 

8.12

解:如图 定义一个doit()里包含了两个Fork(),返回4次所以输出4个hello

  main函数中调用了doit()函数所以又输出4个hello

  ∴最后一共输出8个hello

 

 

分数汇总:3+2+1+1+1+1+1+1+1 =12 =10分

posted on 2015-11-11 22:30  20135231  阅读(282)  评论(0编辑  收藏  举报