下沙论坛
标题: 笔试题好多不会做~郁闷 [打印本页]
作者: Robin 时间: 2005-6-2 16:46
标题: 笔试题好多不会做~郁闷
题目都是C/C++ ~郁闷啊。。。就学过C~~~谁会做教教偶啊。。写下答案6 L( S3 z+ c7 |% \4 P
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)
* i: B% x% d! s( {$ v. Z4 h1 {提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为:+ V2 o2 Q7 l& n" `% @( R$ j% u4 V
if ( n == 0 )
0 }# T# g: ^% V5 R: t' H if ( n != 0 )2 {. I' q! W7 n# h2 g
以此类推。5 q; z+ F+ Z0 G9 V4 E
请写出 BOOL flag 与“零值”比较的 if 语句:
0 p$ |4 o2 I; J' f8 r- e E Q6 Y$ i% D
请写出 float x 与“零值”比较的 if 语句:! ~& W( ?8 A7 A: o, V2 U
: D& G/ A3 o& E9 y1 ^
请写出 char *p 与“零值”比较的 if 语句:* f2 I/ W" C; E! A
5 R+ C& E& P4 l* c二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)
5 z7 }; H. Z. B' [" P6 tchar str[] = “Hello” ;
- f+ T, w' e2 h+ ?char *p = str ;
6 W. R6 b) ]% j2 i+ Pint n = 10;
3 |8 k" |; d2 ^3 R2 V请计算
# o. h( g& b- w& h8 Rsizeof (str ) =
! s4 M6 L: R: a. q, Bsizeof ( p ) = 5 S5 d- O2 ~3 m& s) C
sizeof ( n ) =* [* e4 J4 f- ^" y# R3 l
void Func ( char str[100])- O7 z& v- X' \1 `& T
{
3 y) ^; j4 I3 r p请计算 0 e# s! ?! v) x7 C' G* \$ I, v( a
sizeof( str ) = ! t) _+ W, C# S0 t1 u' O
}- H* _8 ?0 Z6 D, F
void *p = malloc( 100 );1 I3 r" n9 w4 z- ]# N8 `
请计算9 A3 V; ~2 y) Q6 P
sizeof ( p ) =
% c5 M5 S3 M( c. n4 R三、简答题(25分)
- h3 G6 f5 W3 o' Q8 k* T9 Y1、头文件中的 ifndef/define/endif 干什么用?9 }7 X6 l% f4 P W5 L9 ]( d
2、#include 和 #include “filename.h” 有什么区别?
- @6 r) F7 w# a3、const 有什么用途?(请至少说明两种)
4 j o/ \5 r2 f6 w6 F' i ~; n4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
* j/ Z9 f6 g( s* Y; O4 S四、有关内存的思考题(20分)
2 ] s# Q2 [: a/ y- Q7 t6 m/ Evoid GetMemory(char *p)
# j" u6 v1 p* g: A{+ V3 F5 `8 x8 C! D3 k0 B v% `& F$ F' R
p = (char *)malloc(100);
% e) F% Z' c: Q+ m+ d}# [8 r$ C/ _ S1 z$ k8 C
void Test(void)
, C6 }% |" o5 b$ E" R; G; q% p{
% L$ _2 d9 U p+ |9 Kchar *str = NULL;
! o6 e% U: h( M6 U( m5 a7 M1 a3 vGetMemory(str); $ G* U: u% b. x0 B$ v8 y
strcpy(str, "hello world");7 B& z/ w: s1 d" {/ D+ }
printf(str);* V5 ]: W0 R5 ], Y, D( y! C
}" h# I; o8 n) d. Y, E
请问运行Test函数会有什么样的结果?
! `8 Q8 i8 x: A. T5 I答:
# W, K* J0 {4 a' f3 I- c; v# K. z7 E+ L; | x
Void GetMemory2(char **p, int num)8 u# l( m) ]2 M" z0 i# f
{$ t, Y: `' K. p6 N ~
*p = (char *)malloc(num);9 R N3 x! t: d, C/ c) O
}& [- n9 E0 f. C" m b: O2 ]
void Test(void)$ w: {5 [; y& e0 ]
{! r4 ?& w3 G- n0 _
char *str = NULL;
# s& V: o, |; W" ^9 WGetMemory(&str, 100);
" e1 l' g. E0 h5 w$ lstrcpy(str, "hello");
3 z D+ N( g1 k1 `( Q+ O& iprintf(str); $ U7 V8 S, X4 C+ K
}
6 ?; m+ k. A+ b% c: G6 ?3 V, o请问运行Test函数会有什么样的结果?, C1 v; j$ `3 Z4 N" B9 A5 ]" ^' w
答:/ Y' F% n3 ?( y9 a: t
char *GetMemory(void). X; _7 Y+ J4 V+ x6 @9 S/ U1 z e
{ - F3 {8 _2 F. s. P' k1 ?
char p[] = "hello world";
; }7 s! F* L( M) {# Creturn p;2 R) M6 `0 }% I& N
}
9 v6 W0 `7 W- F$ Pvoid Test(void)" Q) B+ h# Z' @/ h# s' \
{
0 v, c/ |+ I( H0 v) {char *str = NULL;
) i) {( E% a" p6 [' }str = GetMemory(); K/ B# ?% H0 J9 h8 t
printf(str);
% i0 Y5 M' r0 _( k% x}7 z! o# C& _; {6 p8 h# U% { u
请问运行Test函数会有什么样的结果?9 P9 H X* q" _6 @. }, d
答:
1 K) O9 O1 ~* w/ D- z5 f) Y! `) z
' S* D- @- X4 L) t* Ivoid Test(void)
! G# i5 }& [0 V* T7 \{- \ c8 @* K4 S. O9 T* X
char *str = (char *) malloc(100);5 v* ^% {$ j1 {
strcpy(str, “hello”); / [9 a1 P8 d4 l0 n
free(str);
0 n2 p% s2 i& L' iif(str != NULL)
4 I/ J( N4 ]* K- z) j$ V{
& z! S! I/ e9 F. d: X strcpy(str, “world”);
- p7 ]5 r! J3 t1 f( zprintf(str);
* P) F& T$ `, o" p# S}% q$ b8 |+ @/ J" b5 [
}
) x# y/ n; h) |$ V( h4 y4 s" A8 Z请问运行Test函数会有什么样的结果?
& y8 c4 N# Z" Z# g答:; F4 Q! V! V# X3 {1 K4 l8 a- R
! i7 M+ W8 k* d( |. d6 }五、编写strcpy函数(10分)
' l( c: y9 Z& I6 R; f7 l* g1 D7 {已知strcpy函数的原型是
2 Y; f' P8 ]4 }/ B+ h char *strcpy(char *strDest, const char *strSrc);
1 g, ]) T2 o. J/ o- S6 \2 ` 其中strDest是目的字符串,strSrc是源字符串。
& a3 Q& I% G$ I, b: [+ }' u(1)不调用C++/C的字符串库函数,请编写函数 strcpy
. h' k# Q2 {! D% {2 t' P1 ^/ s
; K! o$ G: l+ ^! P; h( D2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?3 T' p) b: V6 g! t
% q8 i/ q1 M$ U: M. t% Z |' M六、编写类String的构造函数、析构函数和赋值函数(25分)
$ ?( t% c2 U4 t已知类String的原型为:
! e% _+ L1 e& c1 Q class String
! G8 O" G- k8 w4 v0 u/ ?9 h {
! l( }+ ^+ X* ^- { public:% z! h( k- W& q+ u6 u {6 u5 q
String(const char *str = NULL); // 普通构造函数
% E2 r: {, E. }- q String(const String &other); // 拷贝构造函数5 K* z6 s [) O
~ String(void); // 析构函数, H- K, g6 b& r4 [7 O6 G! c* H
String & operate =(const String &other); // 赋值函数" s9 v( J/ F2 I b6 i! K# T0 T! G
private:+ m9 O& r: Q, y
char *m_data; // 用于保存字符串$ N5 i2 b1 Q" P; O
};
" R2 A5 I2 o$ t5 M( u 请编写String的上述4个函数。
作者: 游侠无极限 时间: 2005-6-2 18:59
软考的?
其实都是很基本的题目阿
作者: Robin 时间: 2005-6-2 21:59
以下是引用游侠无极限在2005-6-2 18:59:15的发言:
- e- @3 x$ Z/ U& b ?
# W7 U: Y4 i) S Z. C软考的?
2 J. {' ]* P* ` ^, A: f/ u
其实都是很基本的题目阿
- [) N: t5 P, J& b$ y( J
2 _6 \% Z7 A9 P: ~; Z
' `! q( z; I& }7 V7 F
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的发言:
. f4 y( q5 G" e1 v' {# N T7 p5 D' \/ M7 y+ N
都很简单啊,要比较0值你只要注意它的范围和精度就可以了。
: z1 {4 T$ G- S; A0 E0 Qsizeof除了第一个为6,其余的都应该为4,因为它们事实上都是在对指针进行sizeof操作,而不是指针指向的数据区。
( f. `5 W) N+ X- B" w, P* y8 ~# G, J$ g" D! q9 Z
+ T& f( [6 q% t6 k, w0 K% u
yes you are all right & w( H9 i9 v/ r7 C7 L
楼主这些题目实在太基础了,如果这些不会,需要去看基础的知识,推荐 C++ primer
作者: 游侠无极限 时间: 2005-6-3 19:14
三、简答题(25分)
8 G' |9 b1 M! r/ u0 p6 a1、头文件中的 ifndef/define/endif 干什么用?
3 U/ V- Q9 ~5 T- O0 P起码加上前缀(#)吧,其中 #ifnedf 就是说如果没有定义什么则……
, q6 |0 F3 u2 G9 |, }+ k1 p. ~#define xxx yyy 就是把之后出现的yyy用xxx替换0 w' L& B. D! x
#endif 与#if系列配合使用1 O& P6 n' I' r5 ^" j
2、#include 和 #include “filename.h” 有什么区别?
* G# j: [; J, U( C这个玩笑闹大了…… 估计前是用是指先在系统指定的包含目录中查找文件,""是在当前目录中,当然可以使用绝对路径 3 x( q, ?1 q" V5 o
3、const 有什么用途?(请至少说明两种)
3 `; O; }* _/ J3 T限制变量不被修改,保证函数不修改变量
! z1 A, I" i, t4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
% j2 z# J7 [- p. P4 C5 a指编译的时候使用C风格的函数名# H2 n8 d& S$ W- v( W
: I3 t5 V" Z3 H' h! x6 l
四、有关内存的思考题(20分)& V& C8 K$ A y6 C8 g
void GetMemory(char *p)- l1 }1 x& ~9 X( ^, {2 }( H I0 j4 h
{
" @; i) U4 K, w/ v4 X6 \6 H1 Fp = (char *)malloc(100);! l# ] |; w P' n
}
/ Q7 W& z+ x0 E! {/ g, Y! zvoid Test(void) 2 n- L; K1 X' \& R
{
; h& F+ D* G: ]9 A: rchar *str = NULL;
9 k1 b+ S. S' S( @4 DGetMemory(str);
4 e9 i5 w7 ~5 Fstrcpy(str, "hello world");$ V- K' w, j# q! |5 @2 `
printf(str);
6 A4 @. t& n1 {. D}: u9 G7 M: ^+ o8 O" D
请问运行Test函数会有什么样的结果?
9 B5 n: C n1 }答:错误,str没有正确指向申请的内存地址
7 Z* m. s+ T% SVoid GetMemory2(char **p, int num)
# _1 r5 w' d$ g$ [" |{8 y; c8 [* W+ @
*p = (char *)malloc(num);
* I n! s4 @# M4 z" g/ e6 V4 `; ?; Z}" u( ]7 S( X$ V/ d9 s1 `( B
void Test(void)3 Q2 Z, a0 i. X0 ` T
{
( N' R o* R4 g$ R t. @char *str = NULL;
. M2 y6 n; ^$ L6 Y+ @: k* lGetMemory(&str, 100);8 W% L0 E; E+ e, [# S1 @5 G
strcpy(str, "hello"); & g/ u; D( ~& Q7 g4 \
printf(str);
U+ u, k4 u$ ]( ]9 `}) }2 C6 h2 w$ n9 M
请问运行Test函数会有什么样的结果?
/ p8 U6 G- S# p [4 p答:正确执行,打印出“Hello”7 W- n2 Y3 s1 v: q6 O+ O8 B
char *GetMemory(void)9 W! @; Y+ {9 T5 k$ ?+ ^0 \! f4 S0 Y
{
4 [0 |! g1 C6 s/ H4 t! }% b5 j0 Rchar p[] = "hello world";
' Y$ |7 c, d' m+ Yreturn p;/ B/ T: d# l S- A! x
}# a0 n/ C" n X- g# F2 \
void Test(void)
) S2 s+ X) j- }, Y" y1 Q0 b/ d{
0 Z! ]; S2 d- A, K4 }! Nchar *str = NULL;, A; C; Y1 O% ~/ u$ f9 q$ k D! J
str = GetMemory();
0 Z6 d, q9 b$ `2 u# o# G1 Mprintf(str);6 c3 H" E8 _# T) S: i
}. R: X. d- n' E) n+ O v! r9 D# C
请问运行Test函数会有什么样的结果?+ d& Z! _! I5 G/ v6 _% K5 Z
答:错误,str指向的内存地址已经被系统释放
, G2 J/ N3 K$ a" c) hvoid Test(void)( n* y+ _+ O5 [/ t5 U
{
1 _" V" P) E6 y. E2 achar *str = (char *) malloc(100);
7 ^7 G+ e- L9 \: B# \& Z, w dstrcpy(str, “hello”);
; T5 o7 b G/ r. n1 ifree(str); - b0 V3 l& r, Z# a+ ^
if(str != NULL) ( ~9 w8 T! z; F* F( V( d
{
: D N7 k @! l! }strcpy(str, “world”);
& e8 O" H, x9 i A. F& b- b) b1 ]printf(str);6 z; e9 M( i, W+ I
}' R o% A4 j/ s. f) t6 z
}7 Y1 T% _6 F4 m% A
请问运行Test函数会有什么样的结果?
+ {) t% V4 ?" r7 m& X! l, f% R) b答:错误,free函数不负责将str置0,故strcpy无法正确工作6 Y& d# b- y- |
# q, u4 b8 i/ Y& _/ d五、编写strcpy函数(10分)% }1 L$ f8 [- U9 H
已知strcpy函数的原型是; @8 R* p1 r5 E1 P# [9 c
char *strcpy(char *strDest, const char *strSrc);
0 l6 n( N1 \5 V& V2 x4 j6 _其中strDest是目的字符串,strSrc是源字符串。
W# P& c6 q1 k) x9 a! b(1)不调用C++/C的字符串库函数,请编写函数 strcpy0 U; w" P5 `3 O8 G
char *strcpy(char *strDest, const char *strSrc)
0 J& j; |1 a2 a& x' B; X, L{8 O* E/ B( ?- {5 x5 N. g. l& A
if(strDest == NULL || strSrc == NULL) return 0;0 v3 o! U+ q6 `" \ M
for(int i =0;(strDest[ I] = strSrc[I ]) != 0;i++);
5 y( h" p/ W" C return strDest;9 A6 p8 k9 j' Y. K- ~
}
6 J' @; E! {3 x4 o& ]2 `2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?6 k' A0 ?9 |: `" w+ x) |
这个倒真不知道,大概是利于编程
7 C# p3 e' F9 A) V六、编写类String的构造函数、析构函数和赋值函数(25分)9 d' h) v1 ~& s7 b3 g
已知类String的原型为:8 _9 l( \& T5 q) E" ^: D
class String/ D4 @$ @& n/ W' j# [
{7 k7 ~2 i# {- j& [$ w2 n, X g7 R
public:
; S6 P# |8 f; E4 d3 s- j( ?2 R4 p String(const char *str = NULL) // 普通构造函数
; z. t( o* P. _/ s5 y) f{
3 f+ N( l; D1 ~5 g if(str==NULL){
6 B# ?9 M- b7 @! o) J& ~ m_data = new char[1];
p7 T) e0 {; \2 A& ^, ?$ s m_data[0] = 0;" v4 N; W8 S B/ g. m1 s; s% C
}
; Z1 y p9 b0 Y, e# S! C else
5 h# h" Q9 `3 O- K8 m6 H {
* g. N7 u' l% B: ^6 ? m_data = new char[strlen(str) + 1];# s* v) j- |1 v2 ?3 G: z+ D2 }
strcpy(m_data,str);
. [- z6 T5 t" Y: O2 s' I% ^: E }9 f1 y+ J" T$ x- T' v+ q2 h) |
}- x, h) [0 [5 w; s* D
String(const String &other) // 拷贝构造函数3 F5 K' `# _% _0 r& M
{2 H/ `* B7 o; M4 ] h: H+ z
*this = other;
3 K; ]) S, @0 I# Z}( j* J3 `0 g$ _& ^: J. c) q% |3 p/ u, E
~ String(void) // 析构函数
6 a9 h |* S: W6 p" r( M% o{
, v! W; P& u, ?/ Z1 j delete [] m_data;
4 X* P7 V% j, A}
7 B( v# I" H* X String & operate =(const String &other) // 赋值函数
0 \: z6 q3 C6 U9 p( a% C# }* `{1 ]8 {. }% |" @ h- w, l) }5 {$ y
m_data = new char[strlen(other.m_data) + 1];# s' R, Y, w! |+ a6 s0 G) k, ~
strcpy(m_data,str);
2 X. q4 a9 ^) s5 t$ [# t% p- T: t return *this;
3 g+ C% q( I, R}) [4 f1 J' I. }5 G( n
private:
J3 e4 }) y3 m9 E" W. G# Y3 } char *m_data; // 用于保存字符串
; A0 ?" o& R: [+ ^};
$ l' j1 T$ p( Q! D请编写String的上述4个函数。
$ W E1 T% v) Q ][此贴子已经被作者于2005-6-3 19:23:13编辑过]
. `' G8 j3 s" g( N# G, c' {
作者: yzhlinux 时间: 2005-6-3 22:33
2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?
( E- r ]5 f4 N1 T; H5 s: H这个倒真不知道,大概是利于编程
返回的是 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 |