下沙论坛

标题: 笔试题好多不会做~郁闷 [打印本页]

作者: 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 Q

sizeof除了第一个为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