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. PCB(Process 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. 在操作系统中, 线程 是调度和分派的基本单位,而 进程 是拥有资源的基本单位
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论