下沙论坛
标题: 笔试题好多不会做~郁闷 [打印本页]
作者: Robin 时间: 2005-6-2 16:46
标题: 笔试题好多不会做~郁闷
题目都是C/C++ ~郁闷啊。。。就学过C~~~谁会做教教偶啊。。写下答案- b2 h3 P; `# J4 ~4 a; ?" h
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)/ Q1 h: J5 T6 Q7 `4 E# d0 i
提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为:
3 M+ z' K) D2 i8 w+ ~ if ( n == 0 ), e1 W/ U% ]% \1 L
if ( n != 0 )
! c. G( ~, Z* [4 {( h+ O以此类推。
( B0 _; ^5 L" @请写出 BOOL flag 与“零值”比较的 if 语句:7 \+ v- O5 a$ O# \0 r
* M1 {6 f1 I8 t$ b/ F) m
请写出 float x 与“零值”比较的 if 语句:, G/ p* [# ]* F8 V9 L
- `$ r- L5 a. m/ I6 v7 Q
请写出 char *p 与“零值”比较的 if 语句:
) K0 o6 U& y! ^) C9 z
6 |' A0 z/ _5 D二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)5 C# _ F9 E3 k% ~4 W3 W
char str[] = “Hello” ;
$ @- L, [/ _" lchar *p = str ;% z r& ^# K/ I6 c7 ^2 x8 _( A
int n = 10;
- [+ C- z7 s' Y7 P4 `3 E6 g. j7 k请计算, Q: j* q$ ~6 ^; p* j: o) g* N
sizeof (str ) =
5 g6 v/ s2 \9 R2 fsizeof ( p ) =
+ @8 U3 S* }1 F$ x4 K9 ]+ |sizeof ( n ) =3 n2 ^: T- K9 g/ R, g) S
void Func ( char str[100])! B' l6 K$ _' v9 Y/ B7 W$ r
{
" V, A0 P! n( X* }: ?请计算 5 g; `, m9 [% Y; O0 b. G
sizeof( str ) = c5 r4 Q4 x" e6 t) @
}7 o9 a; e9 V3 M0 b
void *p = malloc( 100 );
; ~/ d. ~3 w4 D- O, T% K请计算
, ^, ?$ s: Q/ @6 ]/ V0 M' S1 qsizeof ( p ) =5 x6 u$ U( {; ?3 d! u
三、简答题(25分)
! H7 x- k6 f: j- D3 Q& O* o1、头文件中的 ifndef/define/endif 干什么用?
) T6 J6 M2 K- W2、#include 和 #include “filename.h” 有什么区别?
8 Q0 k1 Y4 X6 T5 }. G8 Q3、const 有什么用途?(请至少说明两种)
8 Y4 l4 ^! R! D/ [- U2 k4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?& V6 A9 @ |, {- x4 t" }: o+ r
四、有关内存的思考题(20分)
* K" s" b/ D% V/ f' A. Q6 o0 zvoid GetMemory(char *p)3 |6 L$ `- m4 r9 S ?
{
8 L3 s' }8 k; d9 c/ j% Up = (char *)malloc(100);; \2 l/ R8 }, u. Y, @2 X
} z# j2 c% @5 K
void Test(void)
+ c8 ~8 `) c9 N{
5 b z! u. W2 v8 [' y. y: M: Mchar *str = NULL;
6 I- L8 M. J/ u) v. I: tGetMemory(str);
, r' m/ D$ U4 m Q2 h5 |- c! ^strcpy(str, "hello world");- w) Z: P! Y" g; n5 X: u
printf(str);
; B0 s/ h0 r5 d}
9 S5 `+ E( h. y3 B请问运行Test函数会有什么样的结果?% e9 X. [0 o7 o
答:
* s2 c+ ]) O# I( S: R+ F4 y, J. a- `. t
# a" \! v$ f- mVoid GetMemory2(char **p, int num)' `4 s' K2 q% C x8 Q' W
{
1 {/ {3 y$ b1 f6 `7 F) u, A*p = (char *)malloc(num);
U8 M/ c* h2 d1 u9 d6 c}/ f3 V6 f$ K: @* g# G
void Test(void)7 z5 ] W+ t* V h" i; ]4 Z% x" I
{. e( y4 e5 N( Z
char *str = NULL;% ~5 V" C0 {; X& ^* y8 s
GetMemory(&str, 100);6 N- t! K) O; ^5 T
strcpy(str, "hello"); - x& m# M6 A9 {/ W$ A
printf(str);
m9 q- i0 {- V0 y2 M3 o2 k}
. a3 z- c8 U: u R7 L' K7 ^请问运行Test函数会有什么样的结果?; m' u3 b( A, Y+ h. c2 i$ M
答:' c I% u3 r6 j) o( c/ e X: [
char *GetMemory(void) m8 ~% T: d, ?& @( I; n& s
{ 7 M( V( ^% ?3 R3 O9 V+ ^
char p[] = "hello world";3 t6 S/ U+ l2 l. X- Q
return p;. y! }0 u2 H' J0 `5 }, C& `! w
}( k, Q1 X% o* t% j% G2 e3 W
void Test(void)
! i+ q0 n5 D! _1 A" g3 m{' D5 I3 Q0 Y P' U I8 z" x
char *str = NULL;! v! y ~, g6 n5 W5 |
str = GetMemory();0 Y; U3 o# m4 b1 y
printf(str);
. t# s# _. m$ D% U}% `& `) ~; }4 O, V. h! Z
请问运行Test函数会有什么样的结果?
2 S, T, ^; E0 H+ G! Y答:
4 r5 ~- l f6 K" j6 z% I% G6 _/ P+ F- a& b+ Y; A
void Test(void): o( f0 |. B4 Q0 K
{* n' F$ g# h2 t/ o$ v7 x* {( k
char *str = (char *) malloc(100);% X" D$ A+ ]& Y. H9 f& o
strcpy(str, “hello”);
' I9 V3 h- n; Sfree(str);
5 K! F9 Q- g6 l9 c7 Wif(str != NULL)
6 Q( ?7 k2 j/ t. v: v+ {/ y, u# e{4 Q* j/ D9 d& a& Z1 C( p5 m( g
strcpy(str, “world”);
: U' h- k. z- M( Q2 c' M7 Jprintf(str);
9 ?# g7 o0 L% M. N3 N2 j}
' J. ?$ Z6 i H2 W" J}
0 ?$ l/ [; Q9 K3 U6 Y* o' g7 X请问运行Test函数会有什么样的结果?
0 b# [) W b+ p& `答:- o2 p6 T( @1 q
+ w. [; j& Z- e0 ]- X
五、编写strcpy函数(10分)
4 \. T" J7 q; S( K* D9 f) f已知strcpy函数的原型是
. |; Y, d X& _ char *strcpy(char *strDest, const char *strSrc);' l: W' w3 F. L% n7 h1 Z
其中strDest是目的字符串,strSrc是源字符串。/ u2 C) {+ x2 A- M) K
(1)不调用C++/C的字符串库函数,请编写函数 strcpy5 M% h7 s g. g \+ e. u0 Z; Z; j
) W$ i( e3 T9 A7 o; O0 t, X% U
2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?$ V( s3 ~5 C% N8 |3 a4 v2 s! h
3 O* O: i& [$ H4 t
六、编写类String的构造函数、析构函数和赋值函数(25分)
" C' M, W7 N' D: x已知类String的原型为:
8 ^2 l4 N/ Q* [' G% ?8 L class String1 s$ g- j1 _* b! l
{
8 s$ \1 l0 Q/ x% x! m! D public:/ m8 P4 r8 Z7 z
String(const char *str = NULL); // 普通构造函数' P1 c6 Y0 g4 ?# m3 J' m7 K8 [# R
String(const String &other); // 拷贝构造函数! N, n3 f; y, k! H; _ ^4 W' I
~ String(void); // 析构函数
) @, ~" T; w3 G+ V, u! d9 R0 @ String & operate =(const String &other); // 赋值函数0 _# S l/ R! t3 I2 X
private:. |& f9 d$ W' ^. H/ d5 ?8 e. b
char *m_data; // 用于保存字符串/ q' T W' f( g5 i
};/ W C3 F" l) z- e/ ~" _
请编写String的上述4个函数。
作者: 游侠无极限 时间: 2005-6-2 18:59
软考的?
其实都是很基本的题目阿
作者: Robin 时间: 2005-6-2 21:59
以下是引用游侠无极限在2005-6-2 18:59:15的发言:+ I6 }4 B" l5 i+ M% X$ K1 o8 \9 Q
9 B* ]6 t \9 o* d
软考的?
+ ^' ~$ y, ]$ M. Q [
其实都是很基本的题目阿
; w8 N! V" n6 c" G
# @1 y c- K) Y# P2 A" Y/ j. Z5 ~# `% e8 O! U5 R, L
C有N年没看了。。大哥给几道答案吧
作者: Eagle 时间: 2005-6-3 10:54
都很简单啊,要比较0值你只要注意它的范围和精度就可以了。
sizeof除了第一个为6,其余的都应该为4,因为它们事实上都是在对指针进行sizeof操作,而不是指针指向的数据区。
作者: yzhlinux 时间: 2005-6-3 15:04
以下是引用Eagle在2005-6-3 10:54:17的发言:
: d7 ]2 ?9 f6 \/ u: q; N* }# o
" s C, e. B% }! I都很简单啊,要比较0值你只要注意它的范围和精度就可以了。
, M5 W$ F+ I9 J5 ^& _0 i
sizeof除了第一个为6,其余的都应该为4,因为它们事实上都是在对指针进行sizeof操作,而不是指针指向的数据区。
, M' H, a, L% Z/ q; O
7 v x6 s0 y( N0 U# M3 {
* Z0 @: y4 p/ w1 W3 Syes you are all right
) @+ G8 _/ C9 A$ p楼主这些题目实在太基础了,如果这些不会,需要去看基础的知识,推荐 C++ primer
作者: 游侠无极限 时间: 2005-6-3 19:14
三、简答题(25分)
. F0 }2 p5 f% |/ R1、头文件中的 ifndef/define/endif 干什么用?
( k% g9 A8 `/ r% i起码加上前缀(#)吧,其中 #ifnedf 就是说如果没有定义什么则……
; n1 g& f9 T( x4 L#define xxx yyy 就是把之后出现的yyy用xxx替换
/ n& c" } i+ t4 m y#endif 与#if系列配合使用
4 J' A- m0 z K8 p# s$ Q; g3 C2、#include 和 #include “filename.h” 有什么区别?
7 f8 d* O9 o+ N5 @1 K. K* Z% b这个玩笑闹大了…… 估计前是用是指先在系统指定的包含目录中查找文件,""是在当前目录中,当然可以使用绝对路径 $ O& E% T; n5 p
3、const 有什么用途?(请至少说明两种)
' a9 O5 _! l9 \/ v4 \限制变量不被修改,保证函数不修改变量 {4 ]3 c0 }* _9 s. ^/ G; W
4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?1 u4 A" F3 j. D6 i
指编译的时候使用C风格的函数名
* p8 ]- v7 c4 _9 _3 {1 D" ~, v( N1 K" C$ A# {
四、有关内存的思考题(20分)7 M# n7 z" ?5 {5 C
void GetMemory(char *p)
! M' D& r; H" ?: K* b5 ?% D$ f( b{
8 c# q* d# t7 Rp = (char *)malloc(100);
) z9 q8 o* z* F( ~5 F7 A0 p+ D0 @}
& m2 U6 Q+ {, c7 n" E& V0 ^' _void Test(void) " S8 g+ f, }, k) W6 V% |
{1 o! M7 s. w: o) d
char *str = NULL;
/ n- q9 ~2 x5 V7 H* oGetMemory(str); / d* O, B3 M$ W) O
strcpy(str, "hello world");" Q/ ^0 ~# k) t: c$ J" _
printf(str);
- X0 `" o6 ]* v7 C3 ^}
c- C* s2 k, g, {3 U7 L请问运行Test函数会有什么样的结果?
7 }% r8 N: w# j$ L答:错误,str没有正确指向申请的内存地址: t3 e# }9 u8 }' l. D
Void GetMemory2(char **p, int num)9 H! W2 _2 X' b- t
{
3 c! e a: _7 _& ?/ s) \*p = (char *)malloc(num);& v, D9 H- p; R' h1 N% S
}2 W5 l% k9 n' |6 A
void Test(void)
0 \7 ^& t; s/ J/ K8 B5 u5 I{
r1 H) [- f, t% J+ m' ichar *str = NULL;
" ]7 C3 v& X% q! k" pGetMemory(&str, 100);+ A# m. ?4 I* @6 [, b1 t+ o, H
strcpy(str, "hello"); & c; I/ f2 @2 E1 y7 Y/ M
printf(str);
1 T( J7 C' d! ~7 s: J}$ [8 c# }$ k; d" H/ u1 X- [
请问运行Test函数会有什么样的结果?
& F% l5 U0 ^, o! w2 o6 r" N: p& ]答:正确执行,打印出“Hello”
; F1 ]: {6 ?3 Xchar *GetMemory(void), M% M/ @* S9 b% ]* x; F( _
{ + h4 B6 `5 P* O" W; F$ H
char p[] = "hello world";
' w& z& ]- N, qreturn p;( y% U- i5 r& M( x9 ]
}
, m6 H- X0 W6 {! m; Qvoid Test(void)$ u5 G" X9 G% N4 `! o
{
; N0 L- m* V! S9 b+ M: K( u8 uchar *str = NULL;
/ P/ a1 i5 s( ^3 A0 {( g. Sstr = GetMemory();' m D9 A% ], L( ]+ J' Z' {# b
printf(str); n, r8 u! O1 ]9 j8 R/ ?7 P: f& o6 g
}
/ U3 e% k, o) D! Q5 |2 j请问运行Test函数会有什么样的结果?" e2 ^/ z4 @! @9 H
答:错误,str指向的内存地址已经被系统释放
; z ?7 o& a+ k% e J9 ]4 Dvoid Test(void)
. h/ _9 n* x& A* J5 S{/ R5 i) C" Z O# \ R; M
char *str = (char *) malloc(100);$ c; n% r; Q) L k& h: q! H% z
strcpy(str, “hello”); ) x! c" ^5 {$ u/ e4 R' G$ e
free(str); # w5 T- j2 S* ~0 i+ t5 k d" ]5 m
if(str != NULL)
. R4 H: @- i2 D6 Z8 a5 w4 I( E: |{' b2 d$ f) ~* W: S
strcpy(str, “world”);
* `% v. l- l0 S- a$ h9 I* W! ]" qprintf(str);
1 O/ }* ^0 n: [. H}4 s1 S. V( R/ p0 [- d3 N% V6 Q
}* O, \% q) T1 \( o; Z+ X; W
请问运行Test函数会有什么样的结果?) M; k! q. z& A' l1 |
答:错误,free函数不负责将str置0,故strcpy无法正确工作
( K% E, l$ J/ L4 L- U+ Q) p2 b6 @+ j! ~, f6 h7 k
五、编写strcpy函数(10分)% q) Q+ h* d* b, J5 u* U" Y
已知strcpy函数的原型是
, D" n4 w, H) |char *strcpy(char *strDest, const char *strSrc);- ]: ]6 ~7 x& N0 Y$ [: ~; H
其中strDest是目的字符串,strSrc是源字符串。
n: `2 J* ^6 q(1)不调用C++/C的字符串库函数,请编写函数 strcpy
+ b0 p+ x2 \3 M0 `char *strcpy(char *strDest, const char *strSrc)6 i1 _: f5 |( C, R3 R/ r$ t
{
, `( Z7 S" E0 F+ N if(strDest == NULL || strSrc == NULL) return 0;
& c: B% q9 |" Y: V1 T for(int i =0;(strDest[ I] = strSrc[I ]) != 0;i++);
& H; Z, V& K$ l( w. f9 q return strDest;
; k' C% E+ y7 L; _4 R0 X3 E}' w, R3 o$ ?; D& U1 ~ |
2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?4 R7 u Q1 W: @) v. B
这个倒真不知道,大概是利于编程; H2 S, m N% ]* J8 n
六、编写类String的构造函数、析构函数和赋值函数(25分)# i$ B' S+ P8 b% `
已知类String的原型为:
7 c/ q4 s; P& W5 C2 Cclass String8 P7 J/ _$ S) w! o( h( m4 t$ [ z
{
* F! W) }2 a! {. B" o- r public:
$ u3 x' C/ N, I4 l String(const char *str = NULL) // 普通构造函数, ^9 ~ a8 ~( d! m, Z4 v2 f: t! _
{! d/ v2 Q( ~! i+ b, o
if(str==NULL){
% `. P6 }' t5 h" h m_data = new char[1];
2 A7 Y! H, L w$ t/ g+ a- | m_data[0] = 0;& s( q/ F9 Z* d# M6 j X5 k2 o- J
}5 j% E4 w" O( ^. x% e( P t+ y& F
else5 I5 z1 n% e9 r* l, r
{
$ }+ N s9 |& N4 ^2 m9 a9 p+ _ m_data = new char[strlen(str) + 1];
# B: p# a% c1 R, j strcpy(m_data,str);
* Y$ I- {9 V4 N$ @) V4 b; c( [ }
; ^) Z; y' W s1 J9 x}
/ \8 ~' M) o3 X) L5 }, K8 N; X String(const String &other) // 拷贝构造函数 D% s; R' m3 @. w
{
$ S; D& M9 ]/ q# B. a2 y' `, K *this = other;
6 {3 ]- Y7 y) P1 o4 A$ @5 c- A}
# B& l9 P! Y1 e8 c) l! i2 Y5 ~ ~ String(void) // 析构函数
E: L# W; W) R. d{8 ?1 a- E" g4 v0 b: I# c }8 r8 D% E W
delete [] m_data;
* t7 M% d* o/ P! {. o# R% o' Q' G}
+ u a% d @% A3 D$ a String & operate =(const String &other) // 赋值函数" i- k3 O2 {8 q4 b
{
7 \! M. b) L1 @ a, l, i/ r m_data = new char[strlen(other.m_data) + 1];
9 a0 l2 L- @3 k strcpy(m_data,str);# `: y/ p( k2 S A
return *this;
" n/ B6 E, e0 q6 T# G8 T/ s; A}9 b1 q3 n+ _2 T" d% [" L
private:7 H( ~7 o1 h- k6 \4 _. @
char *m_data; // 用于保存字符串
* M3 N9 o( T+ Y$ h% n% Y: i};0 H# c& ]" G" N. u0 k; k# Z; i% \! K
请编写String的上述4个函数。* _: Y+ l: N" C% U
[此贴子已经被作者于2005-6-3 19:23:13编辑过]
' T7 D; J9 Q# V+ N: B$ d
作者: yzhlinux 时间: 2005-6-3 22:33
2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?1 X7 @6 X8 ?1 q5 q( J
这个倒真不知道,大概是利于编程
返回的是 strDest 指针,如果没有返回这个指针则说明函数执行失败(这个函数也是有可能失败的,比如溢出了,或者指针不可读等等)
作者: 游侠无极限 时间: 2005-6-3 23:06
不过只要有返回值就可以判断是否执行成功吧,比如bool,BOOL都可以
作者: 薄荷七星 时间: 2005-6-4 22:39
才初学C++,还没入门,只知道sizeof(p)的值~~
欢迎光临 下沙论坛 (http://bbs.xiasha.cn/) |
Powered by Discuz! X3.3 |