c语言链表与字符结合,【链表字符串面试题】面试问题:c语言笔试题(… - 看准网...

填空:

1,short int a[10]={123, 456, 789}; sizeof(a)=  20   ;short int *p=&a, 则sizeof(p)=  8

对于64位机来说,指针为8字节表示。其中

sizeof是一运算符,返回编译器为其分配的数组空间大小,不关心里面存了多少数据,sizeof几种情况:

数组——编译时分配的数组空间大小;

指针——存储该指针所用的空间大小(存储该指针的地址的长度,  是长整型);

类型——该类型所占的空间大小;

对象——对象的实际占用空间大小;

函数——函数的返回类型所占的空间大小。函数的返回类型不能  是void。strlen是一函数,只接受char*类型变量,返回字符串的实际长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符'\0',返回的长度大小不包括'\0'。

详细参考:strlen和sizeof的区别

2,给一整形变量n(32bit),把n的bit5(bit0开始)置1,其他不变:n |= (1<<5)

位操作之中时常用到与(&),或异(^),或(|),其中:

(1)与1相异或(^)运算将取反

(2)与1相或(|)运算将被置1

(3)与1相与(&)运算将保持不变

(4)取反运算符~,将数0-->1,1-->0

(5)右移(>>)  左移(<

3,int fun(int* x, int *y){……} 则:怎么用函数指针p调用fun?

void main()

{    int a=1,

b=2;

int

(*p)(int *, int *);

p=fun;  p(&a, &b);

}

函数指针,本质是指针,表示为 int (*p)(int *, int *)

指针函数,本质是函数,表示为 int *p(int *, int *)

4,定义一个宏,将内存的大小由MB转换为bit:#define

MB_TO_BIT(x) ((x)*1024*1024)ul

5,如图,p,q节点指向,插入q,则:

caf6103c97b3bd797d969e11febd3de2.png

viod add(node* head, inta)

{ …

node*p = head->next;

node*q = (node *)malloc(sizeof(node));

q->data =a;

q->next = p->next;

p->next=q;

}

技巧是不能够把p和后一节点先断开,否则将不能寻找到后一节点。

6,由char a=253; int b = a; int c = a&0xff; 则:b=-3 ,  c=253 ;

其中:a为有符号数,最高位是1,余下7位,范围-128~127,253表示为-3

7,用define实现,将整数x,y连接形成整数并除以y,如:F(12, 34, 56) = 1234/56,则:#define F(x,y,z) ((x)##(y)/(z));

注意:宏之中’#’  ‘##’区别,

(1)‘#’是把宏参数转换为字符串,如:

#define PSQR(x) printf(“ ”#x”=%d\n ”, ((x)*(x)))

则 y=5,PSQR(y)将输出 y=25;

x=2+4, PSQR(x)将输出 2+4=36

(2)’##’粘合剂,如:

#define XNAME(n)  x##(n) 则

XNAME(4)将表示为 x4

选择:

1,找不正确选择(A)

A, char a[8]={‘a’,’b’,’c’,}   B, char a[8]; a=”hello”;

C, char a[]=”abc”;          D, char a[8]={’a’,’b’,’c’,’\0’};

2,#define M(x, y, z)  x*y+z, 则a=1, b=2, c=3结果输出

M(a+b, b+c, c+a)=  (D)

A, 19   B,17  C,15  D,12

宏只是简单的替换,不会计算出a+b, b+c, c+a中的结果。所以M(a+b, b+c, c+a)=1+2*2+3+3+1。

需要改进为:#define M(x, y, z)  ((x)*(y)+(z))

3,由char aa=500; int bb=aa;则 printf(“%d\n”, bb+1)的结果(C)

A, 编译报错   B,245  C,-11  D,-1

由于char类型表示范围为-128~127,所以aa值为-12,所以bb+1=-11

4,char a[] = {’i’, ’n’, ’n’, ’\0’, ’s’}; char b[] = {’i’, ’n’, ’n’, ’s’ ,’\0’};

int x1=sizeof(a), int x2=strlen(a), int x3=sizeof(b), int x4=strlen(b)

问:X1=         X2=        X3=        X4=     ;(A)

A,5 3 5 4    B,5 5 5 5  C,5 5 6 5   D,3 3 5 5

sizeof计算出编译器为数组分配内存大小,strlen接受char*类型变量,遇到’\0’结束,计算数据实际存储的数据。

详细参考:strlen和sizeof的区别

5,函数递归,求f(2, 3)=  D

int f(int x, inty)

{if(x==0) return y+2;if(y==0) return f(x-1, 1);return f(x-1, f(x, y-1));

}

A,4   B,16  C, 31  D,61

5, 下列程序可能运行结果()(多选)

#include #include

int main (int argc, char **argv)

{int cnt=2;

pid_t pid;if((pid=fork())==0)

cnt++;elsecnt--;

printf("\n%d\n", cnt);return 0;

}/*----- End of main() -----*/

A,3     B,31     C,1      D,13

结果:A和C

简答:

1,用c变函数,实现一个字符高低位互换,比如0x3A-->0xA3

char change (charnum)

{char temp=num;

temp&= 0x0f;

temp= temp<<4;

num&= 0xf0;

num= num>>4;

temp= (num|temp);returntemp;

}/*----- End of change() -----*/

2,字符逆序存储,如abcdefgh->hgfedcba

char *reverse (char *s)

{char *head =s;char *end =s;

/*end定位到字符串尾*/

#if 1while (*(end + 1) != '\0')++end ;#else

while( *end )

++end;

end--;

#endif

while(end >head)

{chartemp=*head;*head++ = *end;*end-- =temp;

}returns;

}/*----- End of reverse() -----*/

详细参考:字符串面试题(一)字符串逆序

3,字符串s,t, 将t插入s,其中假设s有足够空间容纳t

#include #include#include

#define MAX 100

int insert_pos (char *src, char *dst, intpos)

{chartemp[MAX];int loc=stlren(src);if(pos < 0)

{

printf("position needs to big than or equal to 0\n");return -1;

}

/* 插入位置超过被插字节串长度 */if(loc<=pos)

{

strcat(src, dst);

}

/*正常插入字符串中间*/else{

memset(temp,0, 100);

strcpy(temp, src+pos);

strcpy(src+pos, dst);

strcat(src, temp);

}return 0;

}/*----- End of insert_pos() -----*/

int main (int argc, char **argv)

{char a[]="abghij";char b[]="cdef";intpos;

printf("position:\n");

scanf("%d", &pos);if( -1==insert_pos(a, b, -1) )return -1;

printf("%s\n", a);return 0;

}/*----- End of main() -----*/

4,单链表L,头指针为phead,判断其是否有环?

bool isExitsLoop(list *head)

{

list*slow = head, *fast =head;while ( fast && fast->next )

{

slow= slow->next;

fast= fast->next->next;if ( slow == fast ) break;

}return !(fast == NULL || fast->next ==NULL);

}

详细参考:判断单链表是否存在环及求环入口点

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值