C语言笔试面试题整理.docx

上传人:b****6 文档编号:5607985 上传时间:2022-12-29 格式:DOCX 页数:23 大小:25.82KB
下载 相关 举报
C语言笔试面试题整理.docx_第1页
第1页 / 共23页
C语言笔试面试题整理.docx_第2页
第2页 / 共23页
C语言笔试面试题整理.docx_第3页
第3页 / 共23页
C语言笔试面试题整理.docx_第4页
第4页 / 共23页
C语言笔试面试题整理.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C语言笔试面试题整理.docx

《C语言笔试面试题整理.docx》由会员分享,可在线阅读,更多相关《C语言笔试面试题整理.docx(23页珍藏版)》请在冰豆网上搜索。

C语言笔试面试题整理.docx

C语言笔试面试题整理

现在的公司招聘,都要笔试面试.如果你不是那种编程功底非常深厚的人,又不好好准备一番,在笔试面试中往往会处于被动局面.虽然有些笔试题是故意为难我们,

有点钻牛角尖.但是很多笔试题面试题确实能够很好地看出我们的基础.在这里,我就略去那些钻牛角尖的题.从csdn论坛我近半年的收集中选出10道有代表性的题目,

难度基本上是逐渐加大.对数组,指针,数据结构,算法,字符串,文件操作等问题都有覆盖.主要以c语言的实现为主,也有c++的题.大家可以先做做这10道题,测试一下自己的水平.

1.下面这段代码的输出是多少(在32位机上).

char*p;

char*q[20];

char*m[20][20];

int(*n)[10];

structMyStruct

{

chardda;

doubledda1;

inttype;

};

MyStructk;

printf("%d%d%d%d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(k));

2.

(1)

chara[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}}};

for(inti=0;i<12;i++)

printf("%d",_______);

在空格处填上合适的语句,顺序打印出a中的数字

(2)

char**p,a[16][8];

问:

p=a是否会导致程序在以后出现问题?

为什么?

3.用递归方式,非递归方式写函数将一个字符串反转.

函数原型如下:

char*reverse(char*str);

4.strcpy函数和memcpy函数有什么区别?

它们各自使用时应该注意什么问题?

5.写一个函数将一个链表逆序.

一个单链表,不知道长度,写一个函数快速找到中间节点的位置.

写一个函数找出一个单向链表的倒数第n个节点的指针.(把能想到的最好算法写出).

6.用递归算法判断数组a[N]是否为一个递增数组。

7.

有一个文件(名为a.txt)如下,每行有4项,第一项是他们的名次,写一个c程序,将五个人的名字打印出来.并按名次排序后将5行数据仍然保存到a.txt中.使文件按名次排列每行.

 

2,07010188,0711,李镇豪,

1,07010154,0421,陈亦良,

3,07010194,0312,凌瑞松,

4,07010209,0351,罗安祥,

5,07010237,0961,黄世传,

8.写一个函数,判断一个unsignedchar字符有几位是1.

写一个函数判断计算机的字节存储顺序是升序(little-endian)还是降序(big-endian).

9.微软的笔试题.

ImplementastringclassinC++withbasicfunctionalitylikecomparison,concatenation,inputandoutput.Pleasealsoprovidesometestcasesandusingscenarios(samplecodeofusingthisclass).

PleasedonotuseMFC,STLandotherlibrariesinyourimplementation.

10.有个数组a[100]存放了100个数,这100个数取自1-99,且只有两个相同的数,剩下的98个数不同,写一个搜索算法找出相同的那个数的值.(注意空间效率时间效率尽可能要低).

这十道题还是能够看出自己的水平如何的.如果你能不假思索地做出这10道题,估计去国外大公司是没有问题了,呵呵.

答案我在整理中,以后陆续发布.................

下面有些题也不错,可以参考.

 

1.下面的代码输出是什么,为什么?

voidfoo(void)

{

unsignedinta=6;

intb=-20;

(a+b>6)?

puts(">6"):

puts("<=6");//puts为打印函数

}

输出>6.

就是考察隐式转换.int型变量转化成unsignedint, b成了正数.

2.b)运行下面的函数会有什么结果?

为什么?

voidfoo(void)

{

charstring[10],str1[10];

inti;

for(i=0;i<10;i++)

{

str1[i]='a';

}

strcpy(string,str1);

printf("%s",string);

}

首先搞清strcpy函数的实现方法,

char*strcpy(char*strDest,constchar*strSrc)

{

 if((strDest == NULL) || (strSrc == NULL))

  throw"Invalidargument(s)";

 char*strDestCopy = strDest;

 while((*strDest++ = *strSrc++) !

= '\0');

 returnstrDestCopy;

}

由于str1末尾没有'\0’结束标志,所以strcpy不知道拷贝到何时结束.

printf函数,对于输出char*类型,顺序打印字符串中的字符直到遇到空字符('\0')或已打印了由精度指定的字符数为止.

下面是微软的两道笔试题....

3.ImplementastringclassinC++withbasicfunctionalitylikecomparison,concatenation,inputandoutput.Pleasealsoprovidesometestcasesandusingscenarios(samplecodeofusingthisclass).

PleasedonotuseMFC,STLandotherlibrariesinyourimplementation.

我的实现方案如下,这道题真地对c++的主要特性都进行了较好地考察.

String.h:

#ifndefSTRING_H

#defineSTRING_H

#include

usingnamespacestd;

classString{

public:

String();

String(intn,charc);

String(constchar*source);

String(constString&s);

//String&operator=(char*s);

String&operator=(constString&s);

~String();

char&operator[](inti){returna[i];}

constchar&operator[](inti)const{returna[i];}//对常量的索引.

String&operator+=(constString&s);

intlength();

friendistream&operator>>(istream&is,String&s);//搞清为什么将>>设置为友元函数的原因.

//friendbooloperator<(constString&left,constString&right);

friendbooloperator>(constString&left,constString&right);//下面三个运算符都没必要设成友元函数,这里是为了简单.

friendbooloperator==(constString&left,constString&right);

friendbooloperator!

=(constString&left,constString&right);

private:

char*a;

intsize;

};

#endif

 

String.cpp:

 

#include"String.h"

#include

#include

String:

:

String(){

a=newchar[1];

a[0]='\0';

size=0;

}

String:

:

String(intn,charc){

a=newchar[n+1];

memset(a,c,n);

a[n]='\0';

size=n;

}

String:

:

String(constchar*source){

if(source==NULL){

a=newchar[1];

a[0]='\0';

size=0;

}

else

{size=strlen(source);

a=newchar[size+1];

strcpy(a,source);

}

}

String:

:

String(constString&s){

size=strlen(s.a);//可以访问私有变量.

a=newchar[size+1];

//if(a==NULL)

strcpy(a,s.a);

}

String&String:

:

operator=(constString&s){

if(this==&s)

return*this;

else

{

delete[]a;

size=strlen(s.a);

a=newchar[size+1];

strcpy(a,s.a);

return*this;

}

}

String:

:

~String(){

delete[]a;//

}

String&String:

:

operator+=(constString&s){

intj=strlen(a);

intsize=j+strlen(s.a);

char*tmp=newchar[size+1];

strcpy(tmp,a);

strcpy(tmp+j,s.a);

delete[]a;

a=tmp;

return*this;

}

intString:

:

length(){

returnstrlen(a);

}

main.cpp:

#include

#include"String.h"

usingnamespacestd;

booloperator==(constString&left,constString&right)

{

inta=strcmp(left.a,right.a);

if(a==0)

returntrue;

else

returnfalse;

}

booloperator!

=(constString&left,constString&right)

{

return!

(left==right);

}

ostream&operator<<(ostream&os,String&s){

intlength=s.length();

for(inti=0;i

//os<

os<

returnos;

}

 

Stringoperator+(constString&a,constString&b){

Stringtemp;

temp=a;

temp+=b;

returntemp;

}

booloperator<(constString&left,constString&right){

intj=0;

while((left[j]!

='\0')&&(right[j]!

='\0')){

if(left[j]

returntrue;

else

{

if(left[j]==right[j]){

j++;

continue;

}

else

returnfalse;

}

}

if((left[j]=='\0')&&(right[j]!

='\0'))

returntrue;

else

returnfalse;

}

booloperator>(constString&left,constString&right)

{inta=strcmp(left.a,right.a);

if(a>0)

returntrue;

else

returnfalse;

}

istream&operator>>(istream&is,String&s){

delete[]s.a;

s.a=newchar[20];

intm=20;

charc;

inti=0;

while(is.get(c)&&isspace(c));

if(is){

do{s.a[i]=c;

i++;

/*if(i>=20){

cout<<"Inputtoomuchcharacters!

"<

exit(-1);

}*/

if(i==m-1){

s.a[i]='\0';

char*b=newchar[m];

strcpy(b,s.a);

m=m*2;

s.a=newchar[m];

strcpy(s.a,b);

delete[]b;

}

}

while(is.get(c)&&!

isspace(c));

//如果读到空白,将其放回.

if(is)

is.unget();

}

s.size=i;

s.a[i]='\0';

returnis;

}

 

intmain(){

Stringa="abcd";

Stringb="www";

//Stringc(6,b);这么写不对.

Stringc(6,'l');

Stringd;

Stringe=a;//abcd

Stringf;

cin>>f;//需要输入...

Stringg;

g=a+b;//abcdwww

if(a

cout<<"a

else

cout<<"a>=b"<

if(e==a)

cout<<"e==a"<

else

cout<<"e!

=a"<

b+=a;

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

return0;

}

 

4.Implementasingle-directionlinkedlistsortingalgorithm.Pleasefirstdefinethedatastructureoflinkedlistandthenimplementthesortingalgorithm.

5.编写一个函数,返回两个字符串的最大公串!

例如,“adbccadebbca”和“edabccadece”,返回“ccade”

<<联想笔试题>>

1.设计函数intatoi(char*s)。

intatoi(constchar*nptr);

函数说明

atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。

返回值返回转换后的整型数。

#include

#include

intmyAtoi(constchar*s){

intresult=0;

intflag=1;

inti=0;

while(isspace(s[i]))

i++;

if(s[i]=='-'){

flag=-1;

i++;

}

if(s[i]=='+')

i++;

while(s[i]!

='\0'){

if((s[i]>'9')||(s[i]<'0'))

break;

intj=s[i]-'0';

result=10*result+j;

i++;

}

result=result*flag;

returnresult;

}

intmain(){

char*a="-1234def";

char*b="+1234";

inti=myAtoi(a);

intj=myAtoi(b);

printf("%d\n",i);

printf("%d",j);

return0;

}

  2.inti=(j=4,k=8,l=16,m=32);printf(“%d”,i);输出是多少?

  3.解释局部变量、全局变量和静态变量的含义。

  4.解释堆和栈的区别。

  5.论述含参数的宏与函数的优缺点。

<<普天C++笔试题>>

  1.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。

  2.写一个函数,将其中的\t都转换成4个空格。

  3.Windows程序的入口是哪里?

写出Windows消息机制的流程。

  4.如何定义和实现一个类的成员函数为回调函数?

  5.C++里面是不是所有的动作都是main()引起的?

如果不是,请举例。

  6.C++里面如何声明constvoidf(void)函数为C程序中的库函数?

  7.下列哪两个是等同的

  intb;

  Aconstint*a=&b;

  Bconst*inta=&b;

  Cconstint*consta=&b;

  Dintconst*consta=&b;

  8.内联函数在编译时是否做参数类型检查?

  voidg(base&b){

  b.play;

  }

  voidmain(){

  sons;

  g(s);

  return;

  }

<<华为笔试题>>

笔试内容包括:

  1。

技术试题:

系统windows/linux,网络基础,通信基础,数据库

  2。

能力试题:

根据两故事发表看法

  3。

英语作文

  筛选后进入面试。

 

  共有四轮面试:

  问题一:

两笔记本电脑连起来后拼不通,你觉得可能有哪些问题?

  问题二:

我们在南京,和深圳的网络是通的,但和北京的网络不通,你以怎样的顺序检查问题?

  问题三:

解释什么叫“透明”?

什么叫“网格”?

  问题四:

交换和路由的区别?

vlan的特点?

  问题五:

画一个积分电路和一个微分电路。

  问题六:

知道现在的路由器是第几代了吗?

 

问题一:

两笔记本电脑连起来后拼不通,你觉得可能有哪些问题?

  答:

首选想到是软件问题,软件问题首选查找是否安装有防火墙程序,如否则查看驱动程序有无问题,然后如果是WINDOWS的系统,再查看TCP/IP协议IP地址是否在一个子网,如果以上都无问题,则查看硬件,顺序是网卡--网线。

  问题二:

我们在南京,和深圳的网络是通的,但和北京的网络不通,你以怎样的顺序检查问题?

  答:

首选要知道三方的网络拓朴结构与设计规划,然后确定北京地区网络内部是否畅通,网络是否是新建立了,如果不是新建的网,首先要知道以前是否通,如通,则此次不通是在做过什么操作后不通的,确定后首先排除线路故障,然后再看双方连接的路由设置。

  问题三:

解释什么叫“透明”?

什么叫“网格”?

  答:

透明对用户来说是感觉不到的,也就是说不论对网络加了什么设备或软件,用户都感觉不到,这样的好处是简化了用户的操作复杂性。

网络的概念,是说通过无线或有线将多种服务综合连接到一起,让用户彼此之间可以交换信息。

  问题四:

交换和路由的区别?

vlan的特点?

  答:

交换和路由最大的区别在于交换是通过ASIC专用硬件处理数据,路由是通过CPU用软件的形式处理数据。

VLAN的特点为将一个物理网络从逻辑上划分出了多个广播域

  1.请你分别画出OSI的七层网络结构图和TCP/IP的五层结构图。

  2.请你详细地解释一下IP协议的定义,在哪个层上面?

主要有什么作用?

TCP与UDP呢?

  3.请问交换机和路由器各自的实现原理是什么?

分别在哪个层次上面实现的?

  4.请问C++的类和C里面的struct有什么区别?

  5.请讲一讲析构函数和虚函数的用法和作用。

  6.全局变量和局部变量有什么区别?

是怎么实现的?

操作系统和编译器是怎么知道的?

全局变量是在所有函数之外声明的变量,局部变量则是在函数体内声明的变量。

全局变量放在内存的全程数据区,局部变量在栈上申请。

全局数据区分为两部分全局数据区和静态数据区,静态数据区专门存放static变量。

static的全局变量只在该文件范围内可见,不能用extern声明为外部变量。

编译器会自动初始化全局变量。

全局变量的内存分配是静态的,位于PE文件在数据区,在main()前由C、C++运行期函数初始化,如果没有初值,会被初始化为0。

局部变量的内存分配是动态的,位于线程堆栈中。

如果没有初始化的,初值视当前内存内的值而定。

局部变量是在栈中,外部变量是放在数据段,手动分配malloc的才是放在堆中。

  7.8086是多少位的系统?

在数据总线上是怎么实现的?

8086是Intel的16位微处理器,有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据,内部数据总线都是按16位设计的,单外部数据总线只有8条。

1.请你分别画出OSI的七层网络结构图和TCP/IP的五层结构图。

答:

OSI七层网络结构图

应用层

表示层

会话层

传输层

网络层

数据链路层

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1