填空:

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

对于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,则:

viod add(node* head, int a)

{  …

  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= ;

其中: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, int y)

{

if(x==)  return y+;

if(y==)  return f(x-, );

return f(x-, f(x, y-));

}

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

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

#include <stdio.h>
#include <unistd.h>
int main (int argc, char **argv)
{
int cnt=;
pid_t pid; if((pid=fork())==)
cnt++;
else
cnt--;
printf("\n%d\n", cnt); return ;
} /* ----- End of main() ----- */

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

结果:A和C

简答:

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

char change (char num)
{ char temp=num; temp &= 0x0f; temp = temp<<; num &= 0xf0; num = num>>; temp = (num|temp); return temp; } /* ----- End of change() ----- */

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

char *reverse (char *s)
{
  char *head = s;
  char *end = s;

/*end定位到字符串尾*/
#if 1
while (*(end + ) != '\0')
  ++end ;
#else
  while( *end )
    ++end;
  end--;
#endif while(end > head)
{
  char temp=*head;
  *head++ = *end;
  *end-- = temp;
} return s;
} /* ----- End of reverse() ----- */

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

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100 int insert_pos (char *src, char *dst, int pos)
{ char temp[MAX];
int loc=stlren(src);   if(pos < )
{
printf("position needs to big than or equal to 0\n");
return -;
}

/* 插入位置超过被插字节串长度 */
if(loc<=pos)
{
strcat(src, dst);
}
/*正常插入字符串中间*/
else
{
   memset(temp, , );
strcpy(temp, src+pos);
strcpy(src+pos, dst);
strcat(src, temp);
} return ; } /* ----- End of insert_pos() ----- */ int main (int argc, char **argv)
{
char a[]="abghij";
char b[]="cdef";
int pos; printf("position:\n");
scanf("%d", &pos); if( -==insert_pos(a, b, -) )
return -;
printf("%s\n", a); return ;
} /* ----- 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);
}

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

c语言笔试题(带答案)的更多相关文章

  1. Linux面试笔试题带答案【详解】

    一.填空题:1. 在Linux系统中,以 ,该文件属性是 目录.8. 前台起动的进程使用 Ctrl+c 终止.9. 静态路由设定后,若网络拓扑结构发生变化,需由系统管理员修改路由的设置.10. 网络管 ...

  2. 华为C语言笔试题集合

    ①华为笔试题搜集 1.static有什么用途?(请至少说明两种)     1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.     2) 在模块内(但在函数体外),一个被声明为 ...

  3. 精选30道Java笔试题附答案分析

    精选30道Java笔试题解答 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑 ...

  4. Java笔试题及答案

    1.下列不可作为java语言修饰符的是(D) A) a1 B) $1 C) _1 D) 11 答案:java标识符不能以数字开头,包含英文字母,数字,下划线以及$ 2.有一段java 应用程序,它的主 ...

  5. C,C++经典笔试题(答案)转自:http://blog.163.com/jianhuali0118@126/blog/static/377499702008230104125229/

    一.请填写BOOL , float, 指针变量 与“零值”比较的 if 语句.(10分) 请写出 BOOL   flag 与“零值”比较的 if 语句.(3分) 标准答案:      if ( fla ...

  6. 非常全的linux面试笔试题及答案

    一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点来标识.4. ...

  7. 数据库入门级面试题(带答案) 数据库简单面试题(带答案) MySQL面试题带答案

    数据库入门[mysql]   1.假设要按照分页(每页显示10条)的形式获取test表中的数据,在MySql数据库中,以下哪条语句是取第2页中的数据?(单选)   (难度A) A.select * f ...

  8. PHP笔试题及答案

    1.表单提交get和post有何区别? 答:get的方式是把数据在地址栏中发送,get传送的数据量较小,不能大于2KB.post传送的数据量较大,一般被默认为不受限制.但理论上,IIS4中最大量为80 ...

  9. Java经典面试笔试题及答案

    1.什么是对象序列化,为什么要使用? 所谓对象序列化就是把一个对象以二进制流的方式保存到硬盘上.好处:方便远程调用. 2.值传递与引用传递的区别? 所谓值传递就是把一个对象的值传给一个新的变量,但是系 ...

随机推荐

  1. Spring mvc4 + ActiveMQ 整合

    一.配置部分 二.代码部分 三.页面部分 四.Controller控制器 五.效果展示 六.加入监听器 七.最最重要的,别忘了打赏 一.配置部分 ActiveMQ的安装这就不说了,很简单, 这个例子采 ...

  2. linux 笔试题

    一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来 ...

  3. JAVA中关于数组的定义

    前些日子,有网友问:在JAVA中 int[] a 这样定义的数组和 int a[] 定义的数组有什么区别? 当时没有细看,直接回复说,在JAVA中,两者是一样的,没有区别. 回头仔细看时,还是稍有区别 ...

  4. Android对话框之dismiss和cancel和hide区别

    在我们看来两者效果都是一样的,其实看下源码就知道cancel肯定会去调dismiss的,如果调用的cancel的话就可以监听DialogInterface.OnCancelListener. /** ...

  5. an introduction to conditional random fields

    1.Structured prediction methods are essentially a combination of classification and graphical modeli ...

  6. VS2008简体中文正式版序列号-试用到期解决

    VS2008简体中文正式版序列号 VS2008简体中文正式版序列号 1.Visual Studio 2008 Professional Edition:XMQ2Y-4T3V6-XJ48Y-D3K2V- ...

  7. 8月11日嵌入式Linux开发免费项目体验邀您参与

    嵌入式Linux开发免费项目体验开课啦~~我们特意邀请到粤嵌金牌讲师和技术专家,为大家带来精彩有趣的嵌入式公开课,涉及到嵌入式学习.研发的方方面面.课堂中我们能体验到的不仅仅是最新资讯.技术体验,还有 ...

  8. ServiceStack.Redis 中关系操作的局限与bug

    redis是文档型的,nosql中难处理的是关系. 比如人可以发博客,博客可以有分类.按照传统sql中,用户表和分类表都是主表,博客表是从表,有用户的外键和分类的外键 如果使用文档型的思考方式. 为用 ...

  9. Understanding G1 GC Logs--转载

    原文地址:https://blogs.oracle.com/poonam/entry/understanding_g1_gc_logs Understanding G1 GC Logs By Poon ...

  10. HMM 自学教程(四)隐马尔科夫模型

    本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...