http://hi.baidu.com/g882/blog/item/5142211f3d1d2efae0fe0b94.html
1、
#include <stdio.h>
union
{
int i;
char x[2];
}a;
void main(){
a.x[0]=10;
a.x[1]=1;
printf("%d",a.i);
}
运行结果:266
3、路由器与交换机的区别:
4、进程与线程的差别
A、操作系统只调度进程,不调度线程
B、线程共享内存地址空间,进程不共享
C、线程间可以共享内存数据,但进程不可以
D、进程间可以通过IPC通信,但线程不可以
5、下面排序算法的时间复杂度不是nlogn的是
二分法插入排序 快速排序 归并排序 堆排序
6、字符串匹配
void getnext(char *s,int next[])
{
int i,j;
i=0;j=-1;next[0]=-1;
while(s[i]){
if( ?){
++i;++j;next[i]=j;
}
else ?
}
}
int kmp(char *m,char *s,int next[]){
int i,j;
i=0;j=0;
while(m[i]){
if(j==-1||m[i]==s[j]){
++i;++j;
if(s[j]=='\0')
return ?;
}
else
j=next[j];
}
return -1;
}
7、某工作有5道工序,某个工作不能在最后做,请问有多少种工作情况
8、内存中有3页,初始为空,页面走向为4,3,2,1,4,3,5,4,3,2,1,5,分别使用先进先出,最近最少使用,理想页面置换算法,请问缺页次数是多少?
10,9,8 9,10,8 10,9,7 9,10,7
9、TCP具有但UDP不具有的特点不包括:
A、对上层应用而言,收到数据包的顺序与对方发送的顺序一致
B、源IP、目的IP均相同的数据包经过同样的路由路径
C、传输过程中个别数据包丢失,接收端存在检测机制
D、传输数据前必须使用握手方式建立连接
10、
#include <stdio.h>
int func(int n)
{
if(n==0)
return 3;
else
return (func(n-2)+func(n-1));
}
void main(){
printf("%d\n",func(13));
}
运行结果:无结果
11、括号匹配的检验
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int Status;
typedef char SElemType;
typedef struct
{
SElemType *base,*top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)return FALSE;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return TRUE;
}
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)return FALSE;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*(S.top++)=e;
return TRUE;
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)return FALSE;
e=*(--S.top);
return TRUE;
}
Status Cmp(SElemType a,SElemType b)
{
if(a-b==1)return TRUE;
else if(a-b==2)return TRUE;
else return FALSE;
}
Status Check()
{
SqStack S;
SElemType ch,e;
InitStack(S);
while((ch=getchar())!='\n')
{
if(ch=='('||ch=='['||ch=='{')Push(S,ch);
else if(ch==')'||ch==']'||ch=='}')
{
if(!Pop(S,e))return FALSE;
if(!Cmp(ch,e))return FALSE;
}
}
if(S.top==S.base)return TRUE;
return FALSE;
}
void main()
{
printf("括号匹配的检验\n\n请输入括号:");
if(Check())printf("正确!");
else printf("错误!");
}
======
http://blog.csdn.net/liyzh_inspur/article/details/2972381
第一题:
#include <stdio.h>
union
{
int i;
char x[2];
}a;
void main()
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
}
答案:266
解析:
C语言中的联合体(UNION)的概念是,联合体中的多种数据类型共享同一个内存空间。就拿你举的例子来说:
在联合体a中定义了两种数据类型,字符数组x以及整形变量i.其中整形变量是16位的,数组大小为2的字符数组为8X2=16位。如此一来,编译器便会为联合体a在内存中开辟一个16位的空间,这个空间里存储联合体的数据,但是这个空间只有16位,它既是整形变量的数据,也是字符数组的数据。如果你的程序从字符数组的角度解析这个空间,那么它就是两个字符,如果你的程序从整型的角度解析这个空间,那么它就是一个整数。
以你的程序为例子,现在已经开辟了一个16位的空间,然后我们假定现在空间还没有被赋值,为:
00000000 00000000
那么在运行完代码
a.x[0] = 10;
a.x[1] = 1;
之后,16位的空间变为:
00001100 00000001
然后程序运行
printf("%d",a.i);
就是把联合体a当成一个整数来解析,而不是字符串数组。那么这样一来,程序就把这16位变成了一个完整的整数:
(00000001 00001100)二进制 = (266)十进制
注意,你可以看到程序在把16位弄成整数的时候把后面八位放在了前面,前面八位放在了后面。这个反序是计算机存储结构造成的,这个和联合体没有直接关系。如果感兴趣的话可以参考汇编语言。
就是这个道理。
第二题:
main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c/n", number.half.first, mumber.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x/n", number.i);
getch();
}
答案: AB
解析:
|
|