a)1and8
b)8and4
c)4and8
d)8and1
第一个选C;
虽然传入的是short类型,但是short类型的构造函数被生命被explicit,也就是只能显示类型转换,不能使用隐式类型转换。
第二个选A;
第一个是指针加减,按照的是指向地址类型的加减,只跟类型位置有关,q和p指向的数据类型以实际数据类型来算差一个位置,因此是1。
而第二个加减是实际指针值得加减,在内存中一个double类型占据8个字节,因此是8
c/c++某大公司的两道笔试题(含参考答案)
1.一群人围成一圈,123的报数,报3者出列,求最后一个人。
2.利用链表实现将两个有序队列A和B合并到有序队列H中,不准增加其他空间。
请提供全一点的程序
第一题:
//kickout.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include“stdafx.h”
#include“malloc.h”
#include“stdio.h”
intmain()
{
intm,n;
intkickouts=0;
int*p=NULL;
inti,j;
i=j=0;
printf(“Pleaseinputm,n:
”);
scanf(“%d,%d”,&m,&n);
while(n<1)
{
printf("ndoen'tless0,retryn:
");
scanf("%d",&n);
}
p=(int*)malloc(m*sizeof(int));
for(i=0;i
p[i]=1;
i=0;
while
(1)
{
i=i%m;
if(p[i++])j++;
if(j==n)
{
p[i-1]=0;
j=0;
kickouts++;
}
if(kickouts==m-1)
break;
}
for(i=0;i
if(p[i])printf("%d\n",i+1);
return0;
}
2、升序还是降序?
以升序为例:
while(a!
=NULL&&b!
=NULL)
{
if(a->datadata)
{
h->data=a->data;
a=a->next;
}
elseif(a->data==b->data)
{
h->data=a->data;
a=a->next;
b=b->next;
}
else
{
h->data=b->data;
b=b->next
}
h=h->next;
}
if(a==NULL)
{
while(b!
=NULL)
{
h->data=b->data;
h=h->next;
b=b->next;
}
}
else
{
while(a!
=NULL)
{
h->data=a->next;
h=h->next;
a=a->next;
}
}
C语言面试题
1。
编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。
char*search(char*cpSource,charch)
{
char*cpTemp=NULL,*cpDest=NULL;
intiTemp,iCount=0;
while(*cpSource)
{
if(*cpSource==ch)
{
iTemp=0;
cpTemp=cpSource;
while(*cpSource==ch)
++iTemp,++cpSource;
if(iTemp>iCount)
iCount=iTemp,cpDest=cpTemp;
if(!
*cpSource)
break;
}
++cpSource;
}
returncpDest;
}
2。
请编写一个C函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。
intsearch(char*cpSource,intn,charch)
{
inti;
for(i=0;i
returni;
}
一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?
将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。
#include
voidfoo(intm,intn)
{
printf(“m=%d,n=%d\n”,m,n);
}
intmain()
{
intb=3;
foo(b+=3,++b);
printf(“b=%d\n”,b);
return0;
}
输出:
m=7,n=4,b=7(VC6.0)
这种方式和编译器中得函数调用关系相关即先后入栈顺序。
不过不同
编译器得处理不同。
也是因为C标准中对这种方式说明为未定义,所以
各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。
因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理
这样得函数,其次看函数得调用方式,不同得调用方式,可能产生不同得
结果。
最后是看编译器优化。
2.写一函数,实现删除字符串str1中含有的字符串str2.
第二个就是利用一个KMP匹配算法找到str2然后删除(用链表实现的话,便捷于数组)
/*雅虎笔试题(字符串操作)
给定字符串A和B,输出A和B中的最大公共子串。
比如A=”aocdfe”B=”pmcdfa”则输出”cdf”
*/
//Author:
azhen
#include
#include
#include
char*commanstring(charshortstring[],charlongstring[])
{
inti,j;
char*substring=malloc(256);
if(strstr(longstring,shortstring)!
=NULL)//如果……,那么返回shortstring
returnshortstring;
for(i=strlen(shortstring)-1;i>0;i–)//否则,开始循环计算
{
for(j=0;j<=strlen(shortstring)-i;j++){
memcpy(substring,&shortstring[j],i);
substring[i]='\0';
if(strstr(longstring,substring)!
=NULL)
returnsubstring;
}
}
returnNULL;
}
main()
{
char*str1=malloc(256);
char*str2=malloc(256);
char*comman=NULL;
gets(str1);
gets(str2);
if(strlen(str1)>strlen(str2))//将短的字符串放前面
comman=commanstring(str2,str1);
else
comman=commanstring(str1,str2);
printf(“thelongestcommanstringis:
%s\n”,comman);
}
11.写一个函数比较两个字符串str1和str2的大小,若相等返回0,若str1大于
str2返回1,若str1小于str2返回-1
intstrcmp(constchar*src,constchar*dst)
{
intret=0;
while(!
(ret=*(unsignedchar*)src–*(unsignedchar*)dst)&&*dst)
{
++src;
++dst;
}
if(ret<0)
ret=-1;
elseif(ret>0)
ret=1;
return(ret);
}
3,求1000!
的未尾有几个0(用素数相乘的方法来做,如72=2*2*2*3*3);
求出1->1000里,能被5整除的数的个数n1,能被25整除的数的个数n2,能被125整除的数的个数n3,
能被625整除的数的个数n4.
1000!
末尾的零的个数=n1+n2+n3+n4;
#include
#defineNUM1000
intfind5(intnum){
intret=0;
while(num%5==0){
num/=5;
ret++;
}
returnret;
}
intmain(){
intresult=0;
inti;
for(i=5;i<=NUM;i+=5)
{
result+=find5(i);
}
printf(”thetotalzeronumberis%d\n”,result);
return0;
}
用C语言写个函数,完成去掉字符串左边的空格,把右边的空格用0填充。
调用之,然后打印出来。
C语言基础笔试题
1、C语言程序的基本单位是____A)程序行B)语句C)函数D)字符、C、1
2、C语言程序的三种基本结构是____A、顺序结构,选择结构,循环结构B、递归结构,循环结构,转移结构C、嵌套结构,递归结构,顺序结构D、循环结构,转移结构,顺序结构、A、1
3、C语言规定,程序中各函数之间A)既允许直接递归调用也允许间接递归调用B)不允许直接递归调用也不允许间接递归调用C)允许直接递归调用不允许间接递归调用D)不允许直接递归调用允许间接递归调用、A、1
4、C语言中可处理的文件类型是()A)文本文件和数据文件B)文本文件和二进制文件C)数据文件和二进制文件D)数据代码文件、B、1
5、C语言可执行程序的开始执行点是()A)程序中第一条可执行语句B)程序中第一个函数C)程序中的main函数D)包含文件中的第一个函数、C、1
6、C语言提供的合法的数据类型关键字是A)doubleB)shortC)integerD)char、B、1
7、C语言中,运算对象必须是整型数的运算符是A)%B)\C)%和\D)**、A、1
8、C语言中函数返回值的类型是由()决定。
A)return语句中的表达式类型B)调用函数的主调函数类型C)调用函数时临时D)定义函数时所指定的函数类型、D、1
9、C语言中数组名作为参数传递给函数,作为实在参数的数组名被处理为_____。
A、该数组的长度。
B、该数组的元素个数。
C、该数组中各元素的值。
D、该数组的首地址。
、D、1
10、C语言中数组下标的下限是________。
A、1B、0C、视具体情况D、无固定下限、B、1
11、C语言中提供的合法关键字是____A、swithB、cherC、caseD、default、D、1
12、C语言中文件的存取方式是________。
A、顺序存取B、随机存取C、顺序存取、随机存取均可D、顺序存取、随机存取均不可、C、1
13、C语言中最简单的数据类型包括A)整型、实型、逻辑型B)整型、实型、字符型C)整型、字符型、逻辑型D)整型、实型、逻辑型、字符型、B、1
14、sizeof(float)是()A)一种函数调用B)一个不合法的表示形式C)一个整型表达式D)一个浮点表达式、C、1
15、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是A)inputx,y,z;B)scanf(“%d%d%d”,&x,&y,&z);C)scanf(“%d%d%d”,x,y,z);D)read(“%d%d%d”,&x,&y,&z);、B、1
16、表达式:
10!
=9的值是A)trueB)非零值C)0D)1、D、1
17、表示关系x<=y<=z的c语言表达式为A)(X<=Y)&&(Y<=Z)B)(X<=Y)AND(Y<=Z)C)(X<=Y<=Z)D)(X<=Y)&(Y<=Z)、A、1
18、程序片段:
在TC20中,inti=65536;printf("%d",i);的输出结果是____A)65536B)0C)有语法错误,无输出结果D)-1、B、1
19、当调用函数时,实参是一个数组名,则向函数传送的是____A)数组的长度B)数组的首地址C)数组每一个元素的地址D)数组每个元素中的值、B、1
20、对嵌套子程序调用说法正确的是____。
A、外层子程序可以调用所有的内层子程序B、内层了程序只可以调用包含本身的外层子程序,不可以隔层调用C、外分程序必须能完全套住内分程序D、以上说法均不正确、C、1
21、对于基类型相同的两个指针变量之间,不能进行的运算是A)
22、合法的C语言中,合法的长整型常数是A)'\t'B)"A"C)65D)A、A、1
23、假定int类型变量占用两个字节,其有定义:
intx[10]={0,2,4};,则数组x在内存中所占字节数是A)3B)6C)10D)20、D、1
24、假定有以下变量定义:
intk=7,x=12;则能使值为3的表达式是Ax%=(k%=5)Bx%=(k-k%5)Cx%=k-k%5D(x%=k)-(k%=5)、D、1
25、请读程序片段(字符串内没有空格):
printf("%d",strlen("ATS012\1\\"));的输出结果是A)11B)10C)9D)8、C、1
26、请选出合法的C语言赋值语句A)a=b=58B)i++;C)a=58,b=58D)k=int(a+b);、B、1
27、若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是A)-3B)9C)-12D)6、C、1
28、若int类型占两个字节,则以下语句输出为________。
intk=-1;printf("%d,u%",k,k);A、-1,-1B、-1,65536C、-1,32768D、-1,65535、D、1
29、若变量a是int类型,并执行了语句:
a=‘A'+1、6;,则正确的叙述是A)a的值是字符CB)a的值是浮点型C)不允许字符型和浮点型相加D)a的值是字符‘A’的ASCII值加上1。
、D、1
30、若变量已正确说明为float类型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋于10、0,b赋予22、0,c赋予33、0,不正确的输入形式是:
A)10B)10、0,22、0,33、02233C)10、0D)102222、033、033、B、1
31、若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为A)a<>0B)!
aC)a=0D)a、B、1
32、若已定义x和y为double类型,则表达式:
x=1,y=x+3/2的值是A)1B)2C)2、0D)2、5、C、1
33、若有定义:
inta=8,b=5,c;,执行语句c=a/b+0、4;后,c的值为A)1、4B)1C)2、0D)2、B、1
34、若有定义:
intx,y;chara,b,c;并有以下输入数据(此处代表换行符,/u代表空格):
1u2AuBuC则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是A)scanf(“x=%dy+%d”,&x,&y);a=getchar();b=getchar();c=getchar();B)scanf(“%d%d”,&x,&y);a=getchar();b=getchar();c=getchar();C)scanf(“%d%d%c%c%c,&x,&y,&a,&b,&c);D)scanf(“%d%d%c%c%c%c%c%c:
&x,&y,&a,&a,&b,&b,&c,&c);、D、1
35、若有定义和语句:
chars[10]:
s=”abcd”;printf(“%s”,s);则结果是(以下u代表空格)A)输出abcdB)输出aC)输出abcduuuuuD)编译不通过、D、1
36、若有以下程序段,intc1=1,c2=2,c3;c3=1、0/c2*c1;则执行后,c3中的值是A)0B)0、5C)1D)2、A、1
37、若有以下定义:
chara;intb;floatc;doubled;则表达式a*b+d-c值的类型为A)floatB)intC)charD)double、D、1
38、若有以下定义和语句charc1=’b',c2=’e';printf(“%d,%c”,c2-c1,c2-’a'+”A”);则输出结果是:
A)2,MB)3,EC)2,ED)输出项与对应的格式控制不一致,输出结果不确定、B、1
39、若有以下函数调用语句:
fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是A)3B)4C)5D)6、A、1
40、若执行下面的程序时从键盘上输入3和4,则输出是____A)14B)16C)18D)20main(){inta,b,s;scanf(“%d%d”,&a,&b);s=a;if(a、B、1
41、若执行下面的程序时从键盘上输入5,则输出是A)7B)6C)5D)4main(){intx;scanf(“%d”,&x);if(x++>5)printf(“%d”,x);elseprintf(“%d”,x–);}、B、1
42、若执行以下程序时从键盘上输入9,则输出结果是A)11B)10C)9D)8main(){intn;scanf(“%d”,&n);if(n++、B、1
43、设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为____A)0B)1C)2D)3、C、1
44、设inta=12,则执行完语句a+=a-=a*a后,a的值是A)552B)264C)144D)-264、D、1
45、设intb=2;表达式(b>>2)/(b>>1)的值是A)0B)2C)4D)8、A、1
46、设a,b和c都是int型变量,且a=3,b=4,c=5,则下列表达式中,值为0的表达式是________A)’a'&&’b’B)a<=bC)a||b+c&&b-cD)!
((a
47、设x、y、z和k都是int型变量,则执行表达式:
x=(y=4,z=16,k=32)后,x的值为A4B16C32D52、C、1
48、设x=3,y=-4,z=6,写出表达式的结果。
!
(x>y)+(y!
=z)||(x+y)&&(y-z)A、0B、1C、-1D、6、B、1
49、设x和y均为int型变量,则以下语句:
x+=y;y=x-y;y=x-y;x-=y;的功能是A、把x和y按从大到小排列B、把x和y按从小到大排列C、无确定结果D、交换x和y中的值、D、1
50、设有intx=11;则表达式(x++*1/3)的值是A)3B)4C)11D)12、A、1
南京-四达荣合C/C++笔试题
一:
填空:
2.inti=10,j=10,k=3,k/=i+j,k=___________.
3.现有函数Setattr(inta,intb,intc).已知b无初始值,a的初始值等于1,c的初始值等于0,那么此函数的声明形式为:
___________________.
4.在C中,预编译定义的关键字是__________,常量定义的关键字是:
_____________.
5.在C中,检测字符串长度的函数是:
______________,拷贝字符串的函数是:
_________,
比较两个字符串的函数是:
______________,连接字符串的函数是:
___________,使用这些函数需调用的头文件是:
________________.
6.已知字符串char[]topic=“hello,hellohellomoney!
”,sizeof(topic)=_________,strlen(topic)=___________.
二:
问答题:
1.main函数的参数argc和argv的作用是什么?
如何获得某个应用程序的第三个命令行参数.
2.if(n==10)—1.
if(10==n)—2
哪一种写法是正确的,为什么?
3.-1.constchar*p;
-2.charconst*p;
-3.char*constp;
-4constchar*constp;
请描述一下以上四种写法的区别.
三:
分析题:
考点:
函数的按值传递及引用传递.
多态(基类指针指向派生类对象,基类引用指向派生类对象).
函数重载,
静态成员(静态方法).
四.编程题.
1.已知字符串操作函数中有字符串拷贝函数strcpy().现有自定义字符串拷贝函数Strcpy的声明:
char*Strcpy(char