C基础笔试题及答案
C基础笔试题及答案
在C++中函数可以使用缺省参数。下面就由范文网小编为大家介绍一下C++基础笔试题及答案的文章,欢迎阅读。
C++基础笔试题及答案篇1
1.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;
答:char *strcpy(char *strDest, const char *strSrc)
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest == strSrc)
returnstrDest ;
char *tempptr = strDest ;
while( (*strDest++ = *strSrc++) != ‘’);
returntempptr ;
}
2. 头文件中的ifndef/define/endif的作用?
答:防止该头文件被重复引用。
3. #i nclude与#i nclude “file.h”的区别?
答:前者编译器从标准库路径开始搜索file.h,而后者编译器从用户的工作路径开始搜索file.h。
4. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern“C”?
答:extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,其声明的函数和变量可以在本模块或其它模块中使用。
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。
5. 面向对象的三个基本特征,并简单叙述之?
答:1)封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public)
2)继承:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。
3)多态:允许将子类类型的指针赋值给父类类型的指针。
6. 重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?
答:从定义上来说:
重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
重写:是指子类重新定义复类虚函数的方法。
从实现原理上来说:
重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。
重写:当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。
7. 多态的作用?
答:主要是两个:1)隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;2)接口重用,为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。
8. 分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。
答:BOOL :if ( !a ) or if(a)
int :if ( a ==0)
float :const EXPRESSION EXP = 0.000001
if ( a < EXP && a >-EXP)
pointer : if ( a != NULL) or if(a == NULL)
9. 请说出const与#define 相比,有何优点?
答案:1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。
10.简述数组与指针的区别?
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。
(1)修改内容上的差别
char a = “hello”;
a[0] = ‘X’;
char *p = “world”; // 注意p 指向常量字符串
p[0] = ‘X’; // 编译器不能发现该错误,运行时错误
(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
char a = “hello world”;
char *p = a;
cout< cout< 计算数组和指针的内存容量
voidFunc(char a[100])
{
cout< }
C++基础笔试题及答案篇2
1.变量的声明和定义有什么区别?
答:声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器,后面的引用都按声明的格式。定义其实包含了声明的意思,同时要分配内存空间。
2. 解释堆和栈的区别。
答:堆(heap)——一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。速度比较慢,而且容易产生内存碎片,不过用起来最方便。
栈(stack)——由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。由系统自动分配,速度较快。但程序员是无法控制的。
3. const的作用是什么?
答:(1)可以定义const常量
(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
4. 下列哪两个是等同的
int b;
A constint* a = &b; //指向常量的指针,不能通过指针改变b,但指针的地址可以改变。
B const* int a = &b;// 指针的地址不可以改变,但可以通过指针改变b的值
C constint* const a = &b; //指针指向的值,和指针本身的地址都不能改变
D intconst* const a = &b;//与c相同
5. 完成程序,实现对数组的降序排序
#include
void sort(int array );
int main
{
int array={45,56,76,234,1,34,23,2,3}; //数字任//意给出
sort( array );
return 0;
}
void sort( int array )
{____________________________________
inti,j,k;
for(i=1;i<=7;i++) { if(array[i]>array[i-1])
{
k=ARRAY[i];
j=i-1;
do
{
array[j+1]=array[j];
j– ;
}
while(k>array[j]&&j>=0);
array[j+1]=k;
}
}
—————————————————–
}
6. int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 输出是多少?
答:相当于 i=j=4;i=k=8;i=l=16;i=m=32; 故最后i=32;
7. 请简述以下两个for循环的优缺点(5分)
1)for (i=0; i {
if (condition)
DoSomething;
else
DoOtherthing;
}
2)if (condition)
{
for (i=0; i DoSomething;
}
else
{
for (i=0; i 0)
{
*psTo++ = *psFrom++;
}
returnpvTo;
}
8 .C++里面如何声明const void f(void)函数为C程序中的库函数?
答:在该函数前添加extern “C”声明。由于编译后的名字不同,C++程序不能直接调用C 函数。
9. 请写出下面代码在 32 位平台上的运行结果,并说明sizeof的性质:
#include
#include
int main(void)
{
char a[30];
char *b = (char *)malloc(20 * sizeof(char));
printf(“%d\n”, sizeof(a));
printf(“%d\n”, sizeof(b));
printf(“%d\n”, sizeof(a[3]));
printf(“%d\n”, sizeof(b+3));
printf(“%d\n”, sizeof(*(b+4)));
return 0 ;
}
答:在32位系统下(如WIN32),指针长度为32位。a是一个有30个元素的字符型数组;b是一个字符串指针;a[3]是字符型;b+3是指针;*(b+4)是字符型。
因此输出: 30、4、1、4、1
C++基础笔试题及答案篇3
1. C++中,关键字struct和class的区别仅仅在于:
struct定义的类的缺省成员为公有的,而class定义的类的缺省成员为私有的;
2. 头文件的作用是什么?
答:1)通过头文件来调用库功能。2)头文件能加强类型安全检查。
3. C++函数中值的传递方式有哪几种?
答:C++函数的三种传递方式为:值传递、指针传递和引用传递。
4. 内存的分配方式的分配方式有几种?
答:1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。
2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
5. 设计函数intatoi(char *s)。
答:intatoi (char *s)
{
int i = 0,sum = 0,sign; //输入的数前面可能还有空格或制表符应加判断
while(*s==”||*s==’\t’)
{
i++;
}
sign = (*s==’-')?-1:1;
if(*s==’-'|| *s==’+')
{
i++;
}
while(*s!=’\0′)
{
sum = *s-’0′+sum*10;
i++;
}
return sign*sum;
}
6. 编写strcat函数(6分)
已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C 的字符串库函数,请编写函数strcat
答:
char * __cdeclstrcat(char * dst, const char * src)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return(dst ); /* return dst */
}
(2)strcat能把strSrc的内容连接到strDest,为什么还要char * 类型的返回值?
答:方便赋值给其他变量。
7. MFC中CString是类型安全类么?
答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换
8.函数模板与类模板有什么区别?
答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。
9. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
答:#define MIN(A,B) ((A) <= (B) ? (A) : (B)) 宏的副作用(与某些函数的混淆):least = MIN(*p++, b)。宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:
((*p++) <= (b) ? (*p++) : (*p++))
10. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
答:while(1)或者for(;;)