C语言笔试面试题整理.docx
《C语言笔试面试题整理.docx》由会员分享,可在线阅读,更多相关《C语言笔试面试题整理.docx(23页珍藏版)》请在冰豆网上搜索。
![C语言笔试面试题整理.docx](https://file1.bdocx.com/fileroot1/2022-12/29/470aef4e-8373-4fc3-aad3-fb88b6801764/470aef4e-8373-4fc3-aad3-fb88b68017641.gif)
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七层网络结构图
应用层
表示层
会话层
传输层
网络层
数据链路层