面试题目C语言答案1.docx
《面试题目C语言答案1.docx》由会员分享,可在线阅读,更多相关《面试题目C语言答案1.docx(25页珍藏版)》请在冰点文库上搜索。
面试题目C语言答案1
1、编写一段程序实现以下功能:
输入一个整数n;
A、如果n是一位整数,则输出n,否则将各个位上的数加起来得到结果n,
B、继续步骤A
例子:
输入n=45699
1、各位之和为4+5+6+9+9=33不是一位数,则n=33
2、继续各位之和为:
3+3=9;结果为一位数,得到最后结果为9
2、输入一个整数N,和一个整数M,则由1到N的各个整数围成一个圆,现要求你从1开始数到M并将第M个数从此列中去掉,并存入已给出的数组,继续从你取出的数的后一位从1开始数,再次数到M为止,从此列中去掉,并存入已给出的数组,一直这样数,直到剩余一个数,最后把你存入数组的数和最后一个数分别打印出来。
例子:
N=10,M=3;
A、12345678910
3、从1开始数数到M(3)则将3取出,并存入数组,剩余数为
B、1245678910
4、从下一位(4)作为1开始数,数到M(3)即6,则将6取出,并存入数组,剩余数为
C、124578910
(依此规律继续,直到剩余最后一个数为止)……………………
最后打印结果为:
从圆中一次取出的数据为:
3692718510
最后剩余的数位:
4
funA(int*x,inta,intb){
returna*b;
}
funB(int*x,inta,intb){
returna%b;
}
funC(int(*t)(),,intx,inty){
return(*t)(y,x);
}
Main(){
Intx,a,b;
A=9;
B=3;
X=funa(b,a);
X+=funC(funB,a,b);
Printf(“%d”,x);
}
求输出结果
下列哪种定义方式是错误的
Charw[2][40];w[1]=”string1”;
Char*w[2];w[1]=“string2”;
Charw[][40]=“string3”;
Charw[]=“string4”;
Java
求结果
PublicTest{
Publicvoiddo(){
StaticintI;
++I;
}
Publicstaticvoidmain(String[]args){
Testtest=newTest();
test.do();
system.out.println(i);
}
}
数据库的题目也有一些,比如某个数据库,三个值ABscore
要查找score的平均成绩,按B分组,如果分数相同,按B的降序显示,还要按平均Score的升序显示
5、内存和指针使用的理解
Linux系统(核心技术点)
1、进程有独立的地址空间
2、进程间通信的机制
3、描述OSI分层结构
———————————————————————————————————————
1、存储区有哪些,staticinta存在哪个区
2、二维数组指针定义,int指针定义,行指针定义,返回int型方法的指针带char型参数
3、合法的ip地址选择
4、在局部变量是否可以和全局变量同名
5、strcpy的实现
6、constchar*p,charconst*p,char*constp的区别
7、堆和栈的区别
8、heap和stack的区别
9、判断程序错误有一条程序printf(str);(str是char型)
10、写出程序运行结果里有一条程序x&=....(不知道&=是什么)
11、写出你接触过最复杂的数据处理
12、写了一个链表插入节点的方法
13、比较注重线程的操作
——————————————————————————————————————
单选题
1.以下程序的输出结果是_____a
Main()
{
Intn=4;
While(n--)
Printf(“%d”,--n);
}
a.)20b.)31c.)321d.)210
2.设有以下宏定义:
#defineN4
#defineY(n)((N+1)*n)/*这种定义在编程规范中是严格禁止的*/
则执行语句:
Y(5+1)为_____c
a.)30b.)28c.)26d.)24
3.enumENUM_A
{
X1
Y1
Z1=5
A1
B1
};
enumENUM_AenumA=Y1;
enumENUM_AenumB=B1;
请问enumA=( ); enumB=();b
a.)1,4b.)1,7c.)2,4d.)1,5
4.若有函数max(a,b),并且函数指针变量p已指向函数,当调用该函数时正确的调用方法:
______c
a.)(*p)max(a,b);b.)*pmax(a,b);c.)(*p)(a,b);d.)*p(a,b);
5.对栈S进行下列操作:
push
(1),push(5),pop(),push
(2),pop(),pop()。
则此时栈顶元素是______d
a.)1b.)2c.)0d.)不确定
6.在一个32位的操作系统中,设void*p=malloc(100)。
请问sizeof(p)的结果是___b_
a.)100b.)4c.)2d.)6
7.若已定义:
inta[9],*p=a,并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是_____c
a.)p+1b.)a+1c.)a++d.)++p
8.设有如下定义:
UnsignedlongpulArray[]={6,7,8,9,10}
Unsignedlong*pulPtr;
则下列程序段的输出结果为______d
{
pulPtr=pulArray;
*(pulPtr+2)+=2;
Printf(“%d,%d\n”,*pulPtr,*(pulPtr+2));
}
a.)8,10b.)6,8c.)7,9d.)6,10
9.以下程序运行后,输出结果是d(c)
Voidmain()
{
Char*szStr=”abcde”;
szStr+=2
printf(“%lu\n”,szStr);//printf(“%d\n”,*szStr);
return;
}
a.)cdeb.)字符c的ASCLL码值c.)字符c的地址d.)出错
10.给出以下定义:
C
CharX[]=”hello”;
CharY[]={‘h’,’e’,’l’,’l’,’o’};
则正确的叙述为______
a.)数组X和数组y等价b.)数组X和数组Y的长度相同
c.)数组X的长度大于数组Y的长度d.)数组X的长度小于数组Y的长度
11.在32位X86下,有下列程序
#include
{
Union
{
Intk;
Chari[2];
}*s,a;
S=&a;
s->i[0]=0x39;
s->i[1]=0x38;
printf(“%x\n”,a.k);
}
输出结果是______a(d)
a.)3839b.)3938c.)380039d.)不可预知
12.有如下函数定义:
UnsignedlongMyFunc(unsignedlongulKey)
{
return(((ulKey&0x000000ffUL)<<24)
|((ulKey&0x00000ff00UL)<<8)
|((ulKey&0x00ff0000UL)>>8)
|((ulKey&0xff000000UL)>>24)
}
MyFunc(0x12345678)的返回值_____c
a.)0x12345678b.)0x87654321c.)0x78563412d.)0x12563478
13.((a>b)?
a:
b)代表什么含义______b
a.)代表a,b之中较小的那个值b.)代表a,b之中较大的那个值
c.)代表a是否比b大d.)语法错误
14.某系统总线的一个总线周期包含3个时钟周期,每个总线周期可以传送32位数据。
若总线的时钟频率为33MHz,则总线带宽为_____MB/s。
d(33*32)/3=44
a.)11b.)22c.)33d.)44
15.如下定义,则s在内存中占多大空间______a
#pragmapack
(1)
Union
{
Struct
{
Unsignedcharaa:
4;
Unsignedcharab:
4;
}a;
Unsignedcharc;
Unsignedchard;
}s;
a.)1byteb.)2bytec.)3byted.)4byte
16.如下定义:
UniontagAAAA
{
Struct
{
CharucFirst;
ShortusSecond;
CharucThird;
}half_a;
Longli
}number;
在按1字节对齐情况下:
sizeof(uniontagAAAA)大小是____a
在按4字节对齐情况下:
sizeof(uniontagAAAA)大小是_____c
a.)4byteb.)6bytec.)8byted.)12byte
17.0x12345678在采用BigEndian中内存的排列顺序是__a___,在采用LittleEndian内存中的排列顺序是_c____(答案从左到右内存地址依次增加)
a.)12345678b.)34127856c.)78563412d.)56781234
18.关于静态变量,下面说法“不正确”的有_______a
a.)静态变量在堆栈中分配;
b.)静态变量的作用域一定是局部的,例如在一个文件内或一个函数内;
c.)静态变量可分为静态局部变量和静态全局变量;
d.)静态变量存在于数据段中;
19.下面正确的有_____a
a.)在中断中,不能同步获取信号量,但可以释放信号量;
b.)在中断中,可以使用系统调用sleep函数来等待一会儿;
c.)每一个进程有自己的独立地址空间,每一个线程也有自己的独立地址空间;
d.)CPU占有率为60%,意思是CPU有60%时间在运行指令;40%时间没有运行指令;
20.设有如下定义:
int(*ptr)();则以下叙述中正确的是_____c
a.)ptr是指向一维组数的指针变量;
b.)ptr是指向int型数据的指针变量;
c.)ptr是指向函数的指针,该函数返回一个int型数据;
d.)ptr是一个函数名,该函数的返回值是指向int型数据的指针;
21.在Windows95环境下,定义数组:
int**a[2][4];则数组a所占用的内存单位为_____b
a.)8字节b.)32字节c.)64字节d.)不能确定
22.由国际标准化组织(ISO)和国际电信联盟(ITU-T)共同提出的开放系统互连(OSI)参考模型中共有__b_层,参考模型的最高层则为___c__层。
a.)4b.)7c.)应用d.)会话
23.关于以太网中的ARP协议,描述错误的是_____a_
a.)根据IP地址查询其对应的MAC地址;
b.)根据MAC地址查询其对应的IP地址,便于IP通信;
c.)通过ARP协议产生的IP和MAC地址的映射,超时会淘汰;
d.)ARP请求中的MAC地址为广播地址;
24.关于TCP、UDP及其上层的应用,描述错误的是____b___
a.)TCP协议时面向连接的,UDP协议是面向无连接的;
b.)UDP不保证数据的可靠传送,而文件的传递时要求必须无错传送的,因而所有基于文件传递的应用都不能基于UDP,如TFTP;
c.)telnet是基于TCP的终端应用,连续输入的多个字符可能会被封装到一个TCP包中;
d.)在同一节点上,基于TCP和UDP的应用端口号可以重叠;
25、下面合法的IP地址是:
(c)。
A.129,1,150,115
B.211.260.218.244
C.192.168.192.1
D.24.128.12
改错题
1.请指出下面程序的错误
Unsignedchari=10;//inti=10;
Charb=100;
Char*p;
Voidf(void)
{
//p=&b;
While(--i>=0)
{
*(p++)=d;//(*p)++;//*p=d
}
}
2.下面函数要实现打印helloworld的功能,请问程序中有何错误?
Void*GetMemory(void)
{
Charstr[]=”helloworld”;//char*str=”helloworld”;
Returnstr;
}
VoidTest(void)
{
Char*str=NULL;
Str=(char*)GetMemory();
Printf(str);//printf(“%s”,str);
}
3.请问如下代码有什么错误
#defineMAX_SIZE1000
#defineNULL0//不要
#defineTRUE1
#defineFALSE0
StructXXX
{
Unsignedshorta;
Unsignedshortb;
};
Intdemo(structXXX*p,unsignedlongsize)
{
StructXXX*temp;
Temp=(structXXX*)malloc(sizeof(structXXX)*MAX_SIZE);
If(NULL==temp)
{
ReturnFALSE;
}
Memcpy(temp,p,sizeof(structXXX)*size);
。
。
。
(其他正常操作)
Free(temp);
//temp=NULL;
ReturnTRUE;
4.如下程序用于把“blue”字符串返回,请指出其中的错误:
Char*GetBLUE(void)
{
Char*pcColor;
Char*pcNewColor;
pcColor=”blue”;
pcNewColor=(char*)malloc(strlen(pColor));//pcNewColor=(char*)malloc(strlen(pColor)+1)
//memset(pcNewColor,0,strlen(pColor)+1);
strcpy(pcNewColor,pcColor);
returnpcNewColor;
}
5.请问如下程序段有什么错误
Main()
{
Unsignedlongi=0,*p,*p1;
P=(unsignedlong*)malloc(10000);//P=(unsignedlong*)malloc(10000*4)
P1=p;
For(i=0;i<9999;i++)
{
*p1=0x100;
P1++;
}
。
。
。
(其他操作)
free(p);
//p=NULL:
编程题
对称数判断问题
请编写一段程序,判断一个正整数是否为对称数(对称数即左右对称数字,如3、22、121、1331、34543等),不允许利用C语言将数字转换为字符串的库函数。
BOOLJudgeNumberSymmetry(unsignedlongulNumber)
排队队列问题
n个人,排成1对,(p1,p2,p3….pn)从第1个人开始从1报数,报数到3的人离开队列,队列里的下一个人继续从1开始报数,依次反复,当数到队列尾时,从队列头部继续报数,这样周而复始,直到队列剩一人。
给一个简单例子:
1,2,3,4,5,6,7,共7人
报数结果如下:
1,2,4,5,7,第一轮,3,6离开队列,7报数1,然后从队列头部继续报数,那么第1个人报数2,如此
1,4,5这样第二轮,位置2和位置7离开队列,并且从队列头部继续报数,第1个人报数1,因为对队列尾部的7恰好报数到3。
1,2这样第3轮,5淘汰,
然后开始位置1的人报数1,最后位置1正好报数3,于是离开队列,最后剩下的人是2。
这样给定7个人,原始位置2的人是剩下的人。
请实现一个简单程序,实现上述问题,程序输入n,输出那个最后剩下的人的原始位置。
———————————————————————————————————————
基础题
1.196.183.27.0要划分为2个网段,子网掩码是多少
2.A类网址最多可以包含多少个网络
3.栈的定义题目为英文,选择题
4.队列的定义题目为英文,选择题
5、
funA(int*x,inta,intb){
returna*b;
}
funB(int*x,inta,intb){
returna%b;
}
funC(int(*t)(),,intx,inty){
return(*t)(y,x);
}
Main(){
Intx,a,b;
A=9;
B=3;
X=funa(b,a);
X+=funC(funB,a,b);
Printf(“%d”,x);
}
求输出结果
6、
下列哪种定义方式是错误的
Charw[2][40];w[1]=”string1”;
Char*w[2];w[1]=“string2”;
Charw[][40]=“string3”;
Charw[]=“string4”;
Java
求结果
PublicTest{
Publicvoiddo(){
StaticintI;
++I;
}
Publicstaticvoidmain(String[]args){
Testtest=newTest();
test.do();
system.out.println(i);
}
}
7、数据库的题目也有一些,比如某个数据库,三个值ABscore
8、要查找score的平均成绩,按B分组,如果分数相同,按B的降序显示,还要按平均Score的升序显示
9、Arraylist和linklist的区别
10、方法重载和隐藏的区别
11、在不同版本下INT的大小会不会改变
12、关于GC内存回收系统什么时候回收资源
13、==和equal的区别
14、接口和抽象类的区别和优点
15、关键字
16、Static的用法
———————————————————————————————————————
题目1:
在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?
题目2:
Newdelete与mallocfree的联系与区别?
题目3:
static有什么用途?
题目4:
引用与指针有什么区别?
题目5:
请实现排序函数。
voidsort(intdata[],intsize)
{
}
题目6:
voidGetMemory(char*p)
{
p=(char*)malloc(100);
}
voidTest(void)
{
char*str=NULL;
GetMemory(str);
strcpy(str,"helloworld");
printf(str);
}
请问运行Test函数会有什么样的结果?
题目7:
已知strncmp函数的原型是
intstrncmp(char*str1,char*str2,intmaxlen);
比较字符串str1和str2的大小,如果str1小于str2,返回值就<0,反之如果str1大于str2,返回值就>0,如果str1等于str2,返回值就=0,maxlen指的是str1与str2的比较的字符数。
此函数功能即比较字符串str1和str2的前maxlen个字符。
不调用C++/C的字符串库函数,请编写函数实现
题目8:
查错,请找出如下API的错误。
/*函数功能,从传入的字符串查找某个特定字符0x47f1,如果找到,返回1,如果没找到,返回0*/
intFindSpecialString(char*pString)
{
chari=0;
chartmpString[5000];
memcpy(&tmpString,pString,sizeof(pString));
for(i=0;i<5000;i++)
{
if(0x47f1==tmpString[i])
{
return1;
}
}
}
——————————————————————————————————————
什么是预编译
何时需要预编译:
1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
char * const p;
char const * p
const char *p
上述三个有什么区别?
char * const p; //常量指针,p的值不可以修改
char const * p;//指向常量的指针,指向的常量值不可以改
const char *p; //和char const *p
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc";
char *str8 = "abc";
cout << ( str1 == str2 ) << endl;
cout << ( str3 == str4 ) << endl;
cout << ( str5 == str6 ) << endl;
cout << ( str7 == str8 ) << endl;
结果是:
0 0 1 1
解答:
str1,str2,str3,str4是数组变量,它们有各自的内存空间;
而str5,str6,str