|
附录B:C++/C试题
本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。
笔试时间90分钟。请考生认真答题,切勿轻视。
一、请填写BOOL ,float,指针变量与“零值”比较的if语句。(10分)
提示:这里“零值”可以是0,0.0 , FALSE或者“空指针”。例如int变量n与“零值”比较的if语句为:
if ( n == 0 )
if ( n != 0 )
以此类推。
请写出BOOL flag与“零值”比较的if语句:
请写出float x与“零值”比较的if语句:
请写出char *p与“零值”比较的if语句:
二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)
char str[] =“Hello”;
char *p = str ;int n = 10;请计算sizeof (str ) =
sizeof ( p ) =
sizeof ( n ) =
void Func ( char str[100]){请计算
sizeof( str ) = }
void *p = malloc( 100 );请计算sizeof ( p ) =
三、简答题(25分)
1、头文件中的ifndef/define/endif干什么用?
2、#include <filename.h>和#include“filename.h”有什么区别?
3、const有什么用途?(请至少说明两种)
4、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”声明?
5、请简述以下两个for循环的优缺点
//第一个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();}
优点:
缺点:
优点:
缺点:
四、有关内存的思考题(20分)
void GetMemory(char *p){
p = (char *)malloc(100);}void Test(void) {char *str = NULL;GetMemory(str); strcpy(str, "hello world");printf(str);}
请问运行Test函数会有什么样的结果?答:
char *GetMemory(void)
{ char p[] = "hello world";return p;}void Test(void){char *str = NULL;str = GetMemory(); printf(str);}
请问运行Test函数会有什么样的结果?答:
Void GetMemory2(char **p, int num){*p = (char *)malloc(num);}void Test(void){char *str =NULL;GetMemory(&str,100);strcpy(str,"hello"); printf(str); }请问运行Test函数会有什么样的结果?答:
void Test(void){char *str = (char *) malloc(100);
strcpy(str,“hello”);
free(str);
if(str!= NULL)
{
strcpy(str,“world”); printf(str);}}请问运行Test函数会有什么样的结果?答:
五、编写strcpy函数(10分)
已知strcpy函数的原型是
char*strcpy(char *strDest, const char *strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C的字符串库函数,请编写函数strcpy
(2)strcpy能把strSrc的内容复制到strDest,为什么还要char *类型的返回值?
六、编写类String的构造函数、析构函数和赋值函数(25分)
已知类String的原型为:
classString
{
public:
String(const char *str =NULL); //普通构造函数
String(const String&other); //拷贝构造函数
~String(void); //析构函数
String & operate =(constString &other); //赋值函数
private:
char *m_data; //用于保存字符串
};
请编写String的上述4个函数。
附录C:C++/C试题的答案与评分标准
一、请填写BOOL ,float,指针变量与“零值”比较的if语句。(10分)
请写出BOOL flag与“零值”比较的if语句。(3分)
标准答案:
if ( flag )
if ( !flag )
如下写法均属不良风格,不得分。
if(flag == TRUE)
if(flag == 1 )
if(flag == FALSE)
if (flag == 0)
请写出float x与“零值”比较的if语句。(4分)
标准答案示例:const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x<= EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
如下是错误的写法,不得分。
if(x == 0.0)
if(x != 0.0)
请写出char *p与“零值”比较的if语句。(3分)
标准答案:
if (p == NULL)
if (p != NULL)
如下写法均属不良风格,不得分。
if(p == 0)
if(p != 0)
if(p)
if (!)
二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)
char str[] =“Hello”;
char *p = str ;int n = 10;请计算sizeof (str ) = 6 (2分)
sizeof ( p ) = 4 (2分)
sizeof ( n ) = 4 (2分)
void Func ( char str[100]){请计算
sizeof( str ) = 4 (2分)}
void *p = malloc( 100 );请计算sizeof ( p ) = 4 (2分)
三、简答题(25分)
1、头文件中的ifndef/define/endif干什么用?(5分)
答:防止该头文件被重复引用。
2、#include <filename.h>和#include“filename.h”有什么区别?(5分)
答:对于#include <filename.h>
|