1. ia 写出float x 与“零值”比较的if语句。
if (x < 0.000001 && x > -0.000001)
说明:一个浮点数在存储时只能保证的有效数字是7位,我们应当避免在C语言中将一个很大的数和一个很小的数直接相加或者相减,否则就会丢失“小的数”,比如:
#include <stdio.h>
void main(void)
{
  float a=1.3,b=0.3;
  printf("%.18f",a+b);
  getch();
}
2. 已知一颗树的后序遍历结果为:CEFHDGIBA,中序遍历结果为:HCFEAGDBI,则前序遍历为:  AHFCEBGDI 
三种顺序TLR(根左右)、LTR(左根右)和LRT(左右根)根据根访问的位置不同分别被称为前序遍历、中序遍历和后序遍历。
前序遍历的规律是:输出根结点,输出左子树,输出右子树; 
中序遍历的规律是:输出左子树,输出根结点,输出右子树;
后序遍历的规律是:输出左子树,输出右子树,输出根结点
AHFCEBGDI
   
3. 编写一个整数拆分的算法,即把一个数拆分为若干个质数(也称素数)相乘,如果被拆分数为30,则结果为:    2*3*5         
素数:只能被1或自身整除的整数。
从2到Sqrt(这个数)去除这个数,如果有任何一个除得开就不是素数,否则就继续判断
int prime(int n)
{
int m;
    for(m=2;m<=sqrt(n);m++)
      if(n%m==0)  return 0;
return 1;
}
4. 计算n的值      7         
int i = 5, n = 0;
while (i)
{
    switch(i)
    {
    defualt:
        break;
    case 1:
        n += i;
    case 2:
    case 3:
        n += i;
    }
sizeof结构体大小
    i--;
}
要注意当i=3时 n=3;当i=2时 n=5;当i=1时 n加了两次1所以为7
5. 一个有关sizeof的问题,针对字节对齐,环境使用的gcc version 3.2.2编译器(32位x86平台)为例。
13.1
struct A{
char a;
char b;
char c;
};
sizeof(struct A)值是  3 
一共三个字节,因为是四字节对齐所以占3个字节。
13.2
struct B {
int a;
char b;
short c;
};
sizeof(strcut B)值是  8   
结构体B中包含了4字节长度的int一个,1字节长度的char一个和2字节长度的short型数据一个。所以A用到的空间应该是7字节。但是因为编译器要对数据成员在空间上进行对齐。 所以使用sizeof(strcut A)值为8。
13.3
struct C {
char b;
int a;
short c;
};
sizeof(struct C)的值是  12 
这时候同样是总共7个字节的变量,但是sizeof(struct B)的值却是12,因为b+a 已经超过32,编译无法合并在一个空间,干脆分配了4个byte空间.
13.4
#progma pack (2)
struct D {
char b;
int a;
short c;
};
sizeof(struct D)值是  8 
双字节对齐
现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但为为了CPU访问数据的快速,通常都要求数据存放的地址是有一定规律的.比如在32位CPU上,一般要求变量地址都是基于4位,这样可以保证CPU用一次的读写周期就可以读取变量.不按4位对齐,如果变量刚好跨4位的吗,这样需要CPU两个读写周期.效率自然低下.因此,在现代的编译器都会自动把复合数据定义按4位对齐,以保证CPU以最快速度读取。
6. Union,enum类型编译器下sizeof()后是多少,结构体和共用体的区别?
因为枚举也是一个基本的数据类型, enum的类型大小和int相同,在VC中占4个字节,所以不管它有多少个枚举变量,大小都不会改变.
给定一个32位变量uwNum = 0x123456,求它除64的商uwDiv和余数uwM od。
uwDiv = uwNum / 64
uwMod = uwNum % 64
蔽高16~20位 = 0x00123456 & 0xffe0ffff
对24~31位取反 = (((uwNum >> 24) ^ 0xff) << 24) | (uwNum & 0x00ffffff)         
7. 网络七层结构从底到高的顺序:物理层数据链路层网络层传输层会话层表示层应用层
8. 定义一个宏,不用>、<、if等比较两参数的大小 #define MAX(a,b)               
9. 行为的一个规则叫做程序,程序在CPU上执行时所发生的活动称为进程
10. 进程的三个状态:执行状态就绪状态阻塞状态
11. PCBProcess Control Block 进程控制块)是系统感知进程存在的唯一标志
进程控制块PCB,线程控制块TCB
进程控制块 PCB (Process Control Block)
存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息多少也不一样,通常PCB应包含如下一些信息。
1、进程标识符 name:
  每个进程都必须有一个唯一的标识符,可以是字符串,也可以是一个数字。UNIX系统中就是一个整型数。在进程创建时由系统赋予。
2、进程当前状态 status:
  说明进程当前所处的状态。为了管理的方便,系统设计时会将相同的状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列等等。
3、进程相应的程序和数据地址,以便把PCB与其程序和数据联系起来。
4、进程资源清单。列出所拥有的除CPU外的资源记录,如拥有的I/O设备,打开的文件列表等。
5、进程优先级 priority:
  进程的优先级反映进程的紧迫程序,通常由用户指定和系统设置。UNIX系统采用用户设置和系统计算相结合的方式确定进程的优先级 。
6、CPU现场保护区 cpustatus:
  当进程因某种原因不能继续占用CPU时(等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续运行。
7、进程同步与通信机制 用于实现进程间互斥、同步和通信所需的信号量等。
8、进程所在队列PCB的链接字    根据进程所处的现行状态,进程相应的PCB参加到不同队列中。PCB链接字指出该进程所在队列中下一个进程PCB的首地址。
9、与进程有关的其他信息。 如进程记账信息,进程占用CPU的时间等。
12. 在操作系统中, 线程 是调度和分派的基本单位,而 进程 是拥有资源的基本单位