c笔试题库之编程问答题 150200道.docx

上传人:b****4 文档编号:6797784 上传时间:2023-05-10 格式:DOCX 页数:30 大小:24.29KB
下载 相关 举报
c笔试题库之编程问答题 150200道.docx_第1页
第1页 / 共30页
c笔试题库之编程问答题 150200道.docx_第2页
第2页 / 共30页
c笔试题库之编程问答题 150200道.docx_第3页
第3页 / 共30页
c笔试题库之编程问答题 150200道.docx_第4页
第4页 / 共30页
c笔试题库之编程问答题 150200道.docx_第5页
第5页 / 共30页
c笔试题库之编程问答题 150200道.docx_第6页
第6页 / 共30页
c笔试题库之编程问答题 150200道.docx_第7页
第7页 / 共30页
c笔试题库之编程问答题 150200道.docx_第8页
第8页 / 共30页
c笔试题库之编程问答题 150200道.docx_第9页
第9页 / 共30页
c笔试题库之编程问答题 150200道.docx_第10页
第10页 / 共30页
c笔试题库之编程问答题 150200道.docx_第11页
第11页 / 共30页
c笔试题库之编程问答题 150200道.docx_第12页
第12页 / 共30页
c笔试题库之编程问答题 150200道.docx_第13页
第13页 / 共30页
c笔试题库之编程问答题 150200道.docx_第14页
第14页 / 共30页
c笔试题库之编程问答题 150200道.docx_第15页
第15页 / 共30页
c笔试题库之编程问答题 150200道.docx_第16页
第16页 / 共30页
c笔试题库之编程问答题 150200道.docx_第17页
第17页 / 共30页
c笔试题库之编程问答题 150200道.docx_第18页
第18页 / 共30页
c笔试题库之编程问答题 150200道.docx_第19页
第19页 / 共30页
c笔试题库之编程问答题 150200道.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c笔试题库之编程问答题 150200道.docx

《c笔试题库之编程问答题 150200道.docx》由会员分享,可在线阅读,更多相关《c笔试题库之编程问答题 150200道.docx(30页珍藏版)》请在冰点文库上搜索。

c笔试题库之编程问答题 150200道.docx

c笔试题库之编程问答题150200道

C++笔试题库之编程、问答题150~200道

151、写出判断ABCD四个表达式的是否正确,若正确,写出经过表达式中a的值

inta=4;

(A)a+=(a++);(B)a+=(++a);(C)(a++)+=a;(D)(++a)+=(a++);

a=?

答:

C错误,左侧不是一个有效变量,不能赋值,可改为(++a)+=a;

改后答案依次为9,10,10,11

152、某32位系统下,C++程序,请计算sizeof的值

charstr[]=“

char*p=str;

intn=10;

请计算

(1)sizeof(str)=?

(2)sizeof(p)=?

(3)sizeof(n)=?

voidFoo(charstr[100]){

请计算

sizeof(str)=?

(4)

}

void*p=malloc(100);

请计算

sizeof(p)=?

(5)

答:

(1)25

(2)4(3)4(4)4(5)4

153、回答下面的问题

(1).VoidGetMemory(char**p,intnum){

*p=(char*)malloc(num);

}

voidTest(void){

char*str=NULL;

GetMemory(&str,100);

strcpy(str,“hello”);

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

输出“hello”

154、voidTest(void)

{

char*str=(char*)malloc(100);

strcpy(str,“hello”);

free(str);

if(str!

=NULL){

strcpy(str,“world”);

printf(str);

}

}

请问运行Test函数会有什么样的结果?

答:

输出“world”

155、char*GetMemory(void){

charp[]=“helloworld”;

returnp;

}

voidTest(void){

char*str=NULL;

str=GetMemory();

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

无效的指针,输出不确定

156、编写strcat函数

已知strcat函数的原型是char*strcat(char*strDest,constchar*strSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函数strcat

答:

VC源码:

char*__cdeclstrcat(char*dst,constchar*src)

{

char*cp=dst;

while(*cp)

cp++;

while(*cp++=*src++);

return(dst);

}

157、strcat能把strSrc的内容连接到strDest,为什么还要char*类型的返回值?

答:

方便赋值给其他变量

158、MFC中CString是类型安全类么?

答:

不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换

159.C++中什么数据分配在栈或堆中?

答:

栈:

存放局部变量,函数调用参数,函数返回值,函数返回地址。

由系统管理

堆:

程序运行时动态申请,new和malloc申请的内存就在堆上

160、函数模板与类模板有什么区别?

答:

函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化

必须由程序员在程序中显式地指定。

161、inti=10,j=10,k=3;k*=i+j;k最后的值是?

答:

60,此题考察优先级,实际写成:

k*=(i+j);,赋值运算符优先级最低

162、do……while和while……do有什么区别?

答、前一个循环一遍再判断,后一个判断以后再循环

163、请写出下列代码的输出内容

#include

main()

{

inta,b,c,d;

a=10;

b=a++;

c=++a;

d=10*a++;

printf(“b,c,d:

%d,%d,%d”,b,c,d);

return0;

}

答、10,12,120

164.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么?

答、函数名:

atol

功能:

把字符串转换成长整型数

用法:

longatol(constchar*nptr);

程序例:

#include

#include

intmain(void)

{

longl;

char*str=“98765432″;

l=atol(lstr);

printf(“string=%sinteger=%ld\n”,str,l);

return(0);

}

165.以下三条输出语句分别输出什么?

charstr1[]=“abc”;

charstr2[]=“abc”;

constcharstr3[]=“abc”;

constcharstr4[]=“abc”;

constchar*str5=“abc”;

constchar*str6=“abc”;

cout<<boolalpha<<(str1==str2)<<endl;//输出什么?

cout<<boolalpha<<(str3==str4)<<endl;//输出什么?

cout<<boolalpha<<(str5==str6)<<endl;//输出什么?

答:

分别输出false,false,true。

str1和str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区首地址,不等;str3和str4同上,只是按const语义,它们所指向的数据区不能修改。

str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。

166以下代码中的两个sizeof用法有问题吗?

voidUpperCase(charstr[])//将str中的小写字母转换成大写字母

{

for(size_ti=0;i<sizeof(str)/sizeof(str[0]);++i)

if(‘a’<=str[i]&&str[i]<=’z’)

str[i]-=(‘a’-'A’);

}

charstr[]=“aBcDe”;

cout<<“str字符长度为:

”<<sizeof(str)/sizeof(str[0])<<endl;

UpperCase(str);

cout<<str<<endl;

答:

函数内的sizeof有问题。

根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。

函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。

167非C++内建型别A和B,在哪几种情况下B能隐式转化为A?

答:

a.classB:

publicA{……}//B公有继承自A,可以是间接继承的

b.classB{operatorA();}//B实现了隐式转化为A的转化

c.classA{A(constB&);}//A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数

d.A&operator=(constA&);//赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

168.以下代码有什么问题?

structTest

{

Test(int){}

Test(){}

voidfun(){}

};

voidmain(void)

{

Testa

(1);

a.fun();

Testb();

b.fun();

}

答:

变量b定义出错。

按默认构造函数定义对象,不需要加括号。

169以下代码有什么问题?

cout<<(true?

1:

”1″)<<endl;

答:

三元表达式“?

:

”问号后面的两个操作数必须为同一类型。

170以下代码能够编译通过吗,为什么?

unsignedintconstsize1=2;

charstr1[size1];

unsignedinttemp=0;

cin>>temp;

unsignedintconstsize2=temp;

charstr2[size2];

答:

str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。

171.以下代码中的输出语句输出0吗,为什么?

structCLS

{

intm_i;

CLS(inti):

m_i(i){}

CLS()

{

CLS(0);

}

};

CLSobj;

cout<<obj.m_i<<endl;

答:

不能。

在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。

只有在生成对象时,初始化表达式才会随相应的构造函数一起调用。

172C++中的空类,默认产生哪些类成员函数?

答:

classEmpty

{

public:

Empty();//缺省构造函数

Empty(constEmpty&);//拷贝构造函数

~Empty();//析构函数

Empty&operator=(constEmpty&);//赋值运算符

Empty*operator&();//取址运算符

constEmpty*operator&()const;//取址运算符const

};

173以下两条输出语句分别输出什么?

floata=1.0f;

cout<<(int)a<<endl;

cout<<(int&)a<<endl;

cout<<boolalpha<<((int)a==(int&)a)<<endl;//输出什么?

floatb=0.0f;

cout<<(int)b<<endl;

cout<<(int&)b<<endl;

cout<<boolalpha<<((int)b==(int&)b)<<endl;//输出什么?

答:

分别输出false和true。

注意转换的应用。

(int)a实际上是以浮点数a为参数构造了一个整型数,该整数的值是1,(int&)a则是告诉编译器将a当作整数看(并没有做任何实质上的转换)。

因为1以整数形式存放和以浮点形式存放其内存数据是不一样的,因此两者不等。

对b的两种转换意义同上,但是0的整数形式和浮点形式其内存数据是一样的,因此在这种特殊情形下,两者相等(仅仅在数值意义上)。

注意,程序的输出会显示(int&)a=1065353216,这个值是怎么来的呢?

前面已经说了,1以浮点数形式存放在内存中,按ieee754规定,其内容为0x0000803F(已考虑字节反序)。

这也就是a这个变量所占据的内存单元的值。

当(int&)a出现时,它相当于告诉它的上下文:

“把这块地址当做整数看待!

不要管它原来是什么。

”这样,内容0x0000803F按整数解释,其值正好就是1065353216(十进制数)。

通过查看汇编代码可以证实“(int)a相当于重新构造了一个值等于a的整型数”之说,而(int&)的作用则仅仅是表达了一个类型信息,意义在于为cout<<及==选择正确的重载版

174、请简述以下两个for循环的优缺点(5分)

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

{

if(condition)

DoSomething();

else

DoOtherthing();

}

if(condition)

{

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

DoSomething();

}

else

{

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

DoOtherthing();

}

优点:

程序简洁

缺点:

多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

优点:

循环的效率高

缺点:

程序不简洁

175

voidGetMemory(char*p)

{

p=(char*)malloc(100);

}

voidTest(void)

{

char*str=NULL;

GetMemory(str);

strcpy(str,“helloworld”);

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

程序崩溃。

因为GetMemory并不能传递动态内存,

Test函数中的str一直都是NULL。

strcpy(str,“helloworld”);将使程序崩溃。

176

char*GetMemory(void)

{

charp[]=“helloworld”;

returnp;

}

voidTest(void)

{

char*str=NULL;

str=GetMemory();

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

可能是乱码。

因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原现的内容已经被清除,新内容不可知。

177

voidGetMemory2(char**p,intnum)

{

*p=(char*)malloc(num);

}

voidTest(void)

{

char*str=NULL;

GetMemory(&str,100);

strcpy(str,“hello”);

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

(1)能够输出hello

(2)内存泄漏

178

voidTest(void)

{

char*str=(char*)malloc(100);

strcpy(str,“hello”);

free(str);

if(str!

=NULL)

{

strcpy(str,“world”);

printf(str);

}

}

请问运行Test函数会有什么样的结果?

答:

篡改动态内存区的内容,后果难以预料,非常危险。

因为free(str);之后,str成为野指针,

if(str!

=NULL)语句不起作用。

179、请阅读以下一段程序,并给出答案。

classA

{

public:

A(){doSth();}

virtualvoiddoSth(){printf(“IamA”);}

};

classB:

publicA

{

public:

virtualvoiddoSth(){printf(“IamB”);}

};

Bb;

执行结果是什么?

为什么?

答:

执行结果是IamA

因为b对象构造时调用基类A的构造函数A(),得此结果。

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

答:

双向链表删除一个节点P

template<classtype>voidlist<type>:

:

delnode(intp)

{

intk=1;

listnode<type>*ptr,*t;

ptr=first;

while(ptr->next!

=NULL&&k!

=p)

{

ptr=ptr->next;

k++;

}

t=ptr->next;

cout<<”你已经将数据项“<<t->data<<”删除”<<endl;

ptr->next=ptr->next->next;

length–;

deletet;

}

在节点P后插入一个节点:

template<classtype>boollist<type>:

:

insert(typet,intp)

{

listnode<type>*ptr;

ptr=first;

intk=1;

while(ptr!

=NULL&&k<p)

{

ptr=ptr->next;

k++;

}

if(ptr==NULL&&k!

=p)

returnfalse;

else

{

listnode<type>*tp;

tp=newlistnode<type>;

tp->data=t;

tp->next=ptr->next;

ptr->next=tp;

length++;

returntrue;

}

}

181.完成下列程序

*

*.*.

*..*..*..

*…*…*…*…

*….*….*….*….*….

*…..*…..*…..*…..*…..*…..

*……*……*……*……*……*……*……

*…….*…….*…….*…….*…….*…….*…….*…….

#include<iostream>

usingnamespacestd;

constintn=8;

main()

{

inti;

intj;

intk;

for(i=n;i>=1;i–)

{

for(j=0;j<n-i+1;j++)

{

cout<<”*”;

for(k=1;k<n-i+1;k++)

{

cout<<”.”;

}

}

cout<<endl;

}

system(“pause”);

}

182完成程序,实现对数组的降序排序

#include<iostream>

usingnamespacestd;

voidsort(int*arr,intn);

intmain()

{

intarray[]={45,56,76,234,1,34,23,2,3};

sort(array,9);

for(inti=0;i<=8;i++)//曾经在这儿出界

cout<<array[i]<<”“;

cout<<endl;

system(“pause”);

}

voidsort(int*arr,intn)

{

inttemp;

for(inti=1;i<9;i++)

{

for(intk=0;k<9–i;k++)//曾经在这儿出界

{

if(arr[k]<arr[k+1])

{

temp=arr[k];

arr[k]=arr[k+1];

arr[k+1]=temp;

}

}

}

}

183.以下两条输出语句分别输出什么?

[C++难]

floata=1.0f;

cout<<(int)a<<endl;

cout<<(int&)a<<endl;

cout<<boolalpha<<((int)a==(int&)a)<<endl;//输出什么?

floatb=0.0f;

cout<<(int)b<<endl;

cout<<(int&)b<<endl;

cout<<boolalpha<<((int)b==(int&)b)<<endl;//输出什么?

1

1065353216

boolalpha0

0

0

boolalpha1

51.以下反向遍历array数组的方法有什么错误?

[STL易]

vectorarray;

array.push_back

(1);

array.push_back

(2);

array.push_back(3);

for(vector:

:

size_typei=array.size()-1;i>=0;–i)//反向遍历array数组

{

cout<<array[i]<<endl;

}

184写一个函数,完成内存之间的拷贝。

[考虑问题是否全面]

答:

void*mymemcpy(void*dest,constvoid*src,size_tcount)

{

char*pdest=static_cast<char*>(dest);

constchar*psrc=static_cast<constchar*>(s

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2