下沙论坛

 找回密码
 注册论坛(EC通行证)

用新浪微博连接

一步搞定

QQ登录

QQ登录

下沙大学生网QQ群8(千人群)
群号:6490324 ,验证:下沙大学生网。
用手机发布本地信息严禁群发,各种宣传贴请发表在下沙信息版块有问必答,欢迎提问 提升会员等级,助你宣传
新会员必读 大学生的论坛下沙新生必读下沙币获得方法及使用
查看: 2381|回复: 8
打印 上一主题 下一主题

笔试题好多不会做~郁闷

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2005-6-2 16:46:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目都是C/C++ ~郁闷啊。。。就学过C~~~谁会做教教偶啊。。写下答案4 m, r1 u0 k1 o7 j! n1 t5 z: w& K
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)
, M3 Q6 p% f$ J0 _: t提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为:
1 r  U8 i% S8 n1 |( `    if ( n == 0 )2 z0 F7 R! {0 |# R2 d
    if ( n != 0 )
$ B6 ]. [% S1 s8 T  e+ Q以此类推。
+ q* D- \) O+ I5 N3 m  d* X请写出 BOOL  flag 与“零值”比较的 if 语句:
% A2 h9 \  h5 W8 Z6 n
/ Y* X9 A* U# ~" R7 R0 ?+ k请写出 float  x 与“零值”比较的 if 语句:, K; V9 e$ p( m# ]2 _$ t. g9 y. K

: V: t7 Y5 G, _/ @* H1 S2 I请写出 char  *p 与“零值”比较的 if 语句:
0 ^, R% F& H8 f
: u& h# ^; w& |  ]二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)! h% |$ \7 [. e$ [& L% U/ R
char  str[] = “Hello” ;
+ T6 O7 q4 e5 c% zchar   *p = str ;+ ]4 q# l. Z5 O) U4 v: Y, q& m7 A
int     n = 10;
5 u3 g' \% ?$ }& H2 r请计算4 f, K2 \2 R; t2 l" J9 U3 M. E7 @
sizeof (str ) =                 ) ~& d: l2 W/ f; w0 o5 Y
sizeof ( p ) =                 ! |! T: @& I4 Z8 e& H5 O9 ]
sizeof ( n ) =& N0 t+ G" s; z
void Func ( char str[100])- d3 [' s' [/ Z& T% r
{# z0 `+ }% g: i* \9 O: W, k
请计算   L( D; _* C! ?/ G2 V# Y
sizeof( str ) =   
7 F& \9 J' w7 n7 g3 R}
! l  F2 ]! G- A1 V' p! Kvoid *p = malloc( 100 );
: \( @4 A3 `( r2 }请计算/ W  p7 Z5 k8 b( j/ F
sizeof ( p ) =
" t, R$ s5 `' n% w: W+ E三、简答题(25分)
7 _0 |" n8 _- L* }; x6 @& f) N1、头文件中的 ifndef/define/endif 干什么用?
" ~8 ?: p6 j$ G2、#include     和  #include  “filename.h” 有什么区别?
( V2 E! w: [  B! M* p3 p3、const 有什么用途?(请至少说明两种)5 Q8 g" h& m( |4 c2 }2 |' e
4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
7 s% o7 h  |( r  W2 T% B: J% Q9 H四、有关内存的思考题(20分)% Z  H2 L, K, Q5 y
void GetMemory(char *p)
% B/ n5 s4 v: Y8 S+ M: J, _{
4 b' I2 J9 C& P  l- S  Wp = (char *)malloc(100);
/ l* U' @5 @6 u: r% Z% g/ a}
6 D( G$ c, [0 g6 e+ C9 B# Kvoid Test(void)
$ X8 h- H" H$ u{
, F6 b* ~; \, p  z' ?9 l( }2 Gchar *str = NULL;
: p- O5 z1 q  q$ M* ^- u9 E0 D! LGetMemory(str);
' I# u3 M  Y* t' gstrcpy(str, "hello world");
& T/ k% e$ v% D) ]. A+ Jprintf(str);. K; m+ ^' e2 u- P- U5 M
}
! `, M+ ^- u" s# B请问运行Test函数会有什么样的结果?4 P2 [  N1 R, Q' d
答:
* B! g0 b/ t* u$ L0 u0 X- ^
& F6 s: Y! a3 `+ S0 i2 {Void GetMemory2(char **p, int num)) y9 _. k% ^- @% h6 Q( I1 _
{
; d7 c: b7 v) l+ Z- d! c$ U1 M: z*p = (char *)malloc(num);3 |* i: t* Z* m4 Y7 r- h% Q( e! A
}
  P; V4 s( k" @+ _  H) a6 m2 fvoid Test(void)' r* Z' Z% H* V! W: R
{' h' M: }0 |- o, M7 M9 j  b9 P+ S9 e
char *str = NULL;- q% T, R8 g/ W2 ~$ s
GetMemory(&str, 100);
9 l. u8 ~1 V$ t1 rstrcpy(str, "hello"); * g* r: L/ J* [8 G2 {$ k9 P
printf(str);
2 g. r6 y1 G1 R6 `+ @# y}
1 r" l' j, f9 x2 }+ m# g请问运行Test函数会有什么样的结果?
! w5 r5 t5 c- M: @, H) p答:
7 |  |9 C: j8 Lchar *GetMemory(void)* ]& L) J5 u: K' k: m+ x
{
  E: y) ~8 U' v  c9 k$ \5 echar p[] = "hello world";
# c6 x. M- p7 x3 k- q& X0 wreturn p;4 j. V1 n+ \2 j* B: o' |
}
7 v2 V3 v/ J# u  C+ @) qvoid Test(void)( l) @$ X8 x: l, O9 G$ I
{  W  U, u" R. l
char *str = NULL;
" F. n" w2 n, astr = GetMemory();
4 {  W1 Y) f+ l, u printf(str);
$ Y1 ~2 K! f. c/ T5 F5 T* B}
$ ?; a8 X, ^* H% r/ y* i请问运行Test函数会有什么样的结果?
8 `) r$ @$ J& v: |5 i答:+ o; }" [9 R- z/ P7 g0 s1 t' R

' ?9 u+ o: w  a7 ~1 X$ |) p$ Dvoid Test(void)
+ O" w  I3 P3 O1 t- x{: n9 d& n: m$ V# a. x4 s
char *str = (char *) malloc(100);
  |$ G# R" k6 ]) T6 cstrcpy(str, “hello”);
4 Q% p! E1 H, o3 Dfree(str);     
1 \4 Y- P3 p5 U9 w5 r1 Cif(str != NULL)
+ ?4 H" A* p5 P8 l{1 Y' W1 k# z3 R
strcpy(str, “world”); ( Z3 v& G6 H# ?/ |; I0 U
printf(str);2 o7 r/ w7 B+ ^5 I
}) a0 Q1 g& o& ]( e' b
}/ I1 k2 R7 H: g, H% m. _
请问运行Test函数会有什么样的结果?$ }) r  ]4 I9 i' j) D2 t$ h) ^2 F
答:
/ u' x* R5 T$ a( j2 ?8 }0 r# U$ ]4 {& z- j9 {$ Y
五、编写strcpy函数(10分)
! T5 O4 b7 k! r/ Y! P0 O7 k( g已知strcpy函数的原型是% D/ o: o; L. a+ A& _
char *strcpy(char *strDest, const char *strSrc);& K' V$ Y  i- M+ M4 n( S
其中strDest是目的字符串,strSrc是源字符串。. ^3 d. P9 O, U" J
(1)不调用C++/C的字符串库函数,请编写函数 strcpy
4 f9 ^) U. ~; u  ^. l0 q% c+ X6 `- l8 `+ [9 T
2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?, F9 W* z& L- [/ N1 V7 ~( ~
* F! q( H3 p+ L" a* w
六、编写类String的构造函数、析构函数和赋值函数(25分)
- P4 Q) g+ H) {- T: u9 c. k已知类String的原型为:
7 R, ]+ `; o/ C class String0 R* l1 v- _! r4 v
{
3 [( D' H8 K4 R/ v   public:
( P9 g+ z5 ~) r2 Z" U* O  String(const char *str = NULL); // 普通构造函数
$ g5 M& M, a$ G+ u1 G% z$ N  String(const String &other);     // 拷贝构造函数
4 v' D" @/ q0 V  ~ String(void);         // 析构函数
  l& e- D( z. Q' U  String & operate =(const String &other); // 赋值函数
# W, e2 O' h/ K6 J) f   private:: I( _, m& P! {! R1 M: [
  char   *m_data;    // 用于保存字符串
) h6 L& i3 R' R4 W5 h8 O7 ^ };  U; |' V, E# w2 K6 G$ T' d& E2 y
请编写String的上述4个函数。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩 转发到微博

该用户从未签到

2
发表于 2005-6-2 18:59:00 | 只看该作者

软考的?

其实都是很基本的题目阿

该用户从未签到

3
 楼主| 发表于 2005-6-2 21:59:00 | 只看该作者
以下是引用游侠无极限在2005-6-2 18:59:15的发言:9 G! }! J/ \3 [2 D! J( n$ t 9 }* V, o$ D" N' \5 s/ P5 R. G

软考的?

& r( [0 v! B9 c1 O% A8 Z; b

其实都是很基本的题目阿

3 z q I2 S2 L- Z, t3 L8 N5 ]( n0 _" [3 Z7 Z + X0 U% V; a" z3 |$ NC有N年没看了。。大哥给几道答案吧

该用户从未签到

4
发表于 2005-6-3 10:54:00 | 只看该作者

都很简单啊,要比较0值你只要注意它的范围和精度就可以了。

sizeof除了第一个为6,其余的都应该为4,因为它们事实上都是在对指针进行sizeof操作,而不是指针指向的数据区。

  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    5
    发表于 2005-6-3 15:04:00 | 只看该作者
    以下是引用Eagle在2005-6-3 10:54:17的发言: * ~. T+ m4 B6 u ~% @ ! R6 x6 P5 E1 x( l3 k5 d

    都很简单啊,要比较0值你只要注意它的范围和精度就可以了。

    1 N f. ~% P6 t+ ~7 U

    sizeof除了第一个为6,其余的都应该为4,因为它们事实上都是在对指针进行sizeof操作,而不是指针指向的数据区。

    j8 |8 J) C' B* u; I2 Y $ ~8 E0 y' H. V1 d0 ~% r6 ] 7 e+ c s" Q8 O* G' j) ayes you are all right 3 c8 ?* w. F3 U1 T4 C 楼主这些题目实在太基础了,如果这些不会,需要去看基础的知识,推荐 C++ primer

    该用户从未签到

    6
    发表于 2005-6-3 19:14:00 | 只看该作者
    三、简答题(25分)# D/ p0 p* r' f. P/ @* t 1、头文件中的 ifndef/define/endif 干什么用? : P# Y. D8 S% h起码加上前缀(#)吧,其中 #ifnedf 就是说如果没有定义什么则……3 A6 e- h$ Z, F6 l #define xxx yyy 就是把之后出现的yyy用xxx替换! V9 B+ l, R$ q: [5 S$ s5 [6 T: A #endif 与#if系列配合使用) `% j& U/ W% F 2、#include 和 #include “filename.h” 有什么区别?& k5 Q! C1 v" t/ E$ c! K/ B. h 这个玩笑闹大了…… 估计前是用是指先在系统指定的包含目录中查找文件,""是在当前目录中,当然可以使用绝对路径 ' l+ M# X, B) l, r1 m# @3、const 有什么用途?(请至少说明两种); L! E }) a' ~: n. \7 Z 限制变量不被修改,保证函数不修改变量 ' J4 O6 {& u ~5 f9 i; Y5 q5 _4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?) C1 f+ `, J6 {' J 指编译的时候使用C风格的函数名 5 L9 C7 t, T) s; T6 L( D2 h% A ' b& L. X+ W+ |1 T. K5 L四、有关内存的思考题(20分)6 C/ j) A: [ e1 s+ W, E$ U3 h void GetMemory(char *p)4 Z/ u* b# L5 a3 _ {" r& c& h- ]2 @1 ?# r. e p = (char *)malloc(100);1 C1 t$ Q: u6 w }- l* O! L# V8 @4 x void Test(void) ) ~# s: B) J+ G1 q( c' q{0 E X v: t) O$ D6 \% ^1 r char *str = NULL; ! H* `: b/ W, z9 k5 @1 k6 M# P. `2 PGetMemory(str); # n& [3 t. q# D; Z; X strcpy(str, "hello world");" N! f$ m1 M. o! D printf(str);5 s) }. k" X% J }! w" q# i+ |$ Y2 S9 K* C, P( x4 U 请问运行Test函数会有什么样的结果? 2 z" W" T8 F5 a答:错误,str没有正确指向申请的内存地址 - Q8 p8 Z! m7 s6 Q" @, lVoid GetMemory2(char **p, int num) 0 v0 M" Q" `! B! d- H! s/ q9 g [. x+ ?{ $ W! ]% C c) \6 |. O$ R*p = (char *)malloc(num); ) p% f% M2 F. D S9 D( [} 9 _9 N5 `3 |: w- A* T0 s: Uvoid Test(void), |. o% a, } ~& P7 {* C {7 W) f, I4 C: ]' D1 x6 d5 i4 ^ char *str = NULL; 5 [8 `4 v3 ?: W7 y9 k& z3 LGetMemory(&str, 100);& y7 l# |+ [( f3 T strcpy(str, "hello"); 1 o0 Z5 S' ~8 b' e8 \" e- A# q printf(str); , O: @; D. a! S5 Q4 O& i$ l f. [}; X+ t5 Z% |% @1 l+ ] 请问运行Test函数会有什么样的结果?8 d, S. e" x4 g% R4 x 答:正确执行,打印出“Hello” ( y( E! c6 E9 ?# h. V6 kchar *GetMemory(void) ' p C. r6 w0 K i{ . U" v# _7 x3 {% k* G char p[] = "hello world";, {% F) x% g; v* q) g2 k- z return p; 6 f+ m7 P; D& _, g( l- S. z}" l# J, l* T8 I5 g v% H4 s) E, m void Test(void), ?+ v& ^) i( S6 q" K4 g- w {' R1 a8 }" @0 t4 }# c7 S char *str = NULL; & A+ h+ V- B: d' w2 Vstr = GetMemory(); 8 c$ @1 Z3 b! D! P- \, wprintf(str); y* E5 ^8 d6 ~2 f* z) d, k}! O& w" u3 ^6 G4 ^; a* M5 U 请问运行Test函数会有什么样的结果?* K- L- w$ o1 }) i! o2 W) I2 v# b 答:错误,str指向的内存地址已经被系统释放; l! j6 o/ V9 G' g7 q$ t8 Z void Test(void) # z0 h5 l4 R6 G2 N8 L{7 [: r- ^. F' [# Y. w1 m" Q char *str = (char *) malloc(100); 7 e8 Z% K1 j2 H' E1 j# ystrcpy(str, “hello”); 9 A4 c* g7 I2 h3 @+ I4 S free(str); + T$ T. Q" o1 [9 g, Sif(str != NULL) ) c# d6 U% q: [7 N9 R. i{8 m6 O5 H( ]) C: Z& _/ a strcpy(str, “world”); + U+ f( B9 Y6 d) ]: r6 p, [+ ~ printf(str);3 A7 R6 z0 o- e } 1 |. a6 r" i4 B4 e9 J} 3 X( ]5 `- j' Y7 P' C: P; n$ Q请问运行Test函数会有什么样的结果? # t: _7 X; S% \/ e+ b+ c3 F答:错误,free函数不负责将str置0,故strcpy无法正确工作 " O* G% E" t9 b- s3 l2 W6 X4 n1 `3 t5 @' m+ I1 R 五、编写strcpy函数(10分) 4 X9 q# T% R0 S7 C已知strcpy函数的原型是9 f9 y/ s3 N7 U4 ~1 |8 b, A2 N- o char *strcpy(char *strDest, const char *strSrc); / x& @. E5 ? E2 w# ~其中strDest是目的字符串,strSrc是源字符串。 8 F" m- L& I: I2 @5 B4 Y) p' g(1)不调用C++/C的字符串库函数,请编写函数 strcpy/ x: c5 S* U4 T9 j# | char *strcpy(char *strDest, const char *strSrc) 9 g$ u3 ^+ j3 \6 W3 @' I- Z{: V3 f+ h: L0 p+ h if(strDest == NULL || strSrc == NULL) return 0; 0 {! I! x! n! a" Y" k for(int i =0;(strDest[ I] = strSrc[I ]) != 0;i++);: }. a9 Y+ z& q% S& t) y return strDest; 6 H" O- w, i' |- j! N4 k4 q} 5 w2 e5 V- u0 j) r2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值? 4 p: U( W( A* T' ?3 L+ R; ^这个倒真不知道,大概是利于编程 M' B3 P5 [8 Y' ?. T- q 六、编写类String的构造函数、析构函数和赋值函数(25分)/ S: l/ \0 {2 F) v 已知类String的原型为:5 p+ g7 q( b" u8 S class String: B6 k6 R. o/ U { 0 h8 F% k% _5 b& e% x public: / w- f9 g5 W+ _( C) e String(const char *str = NULL) // 普通构造函数 : B+ G2 a. `, ?0 G3 I{ 8 g5 z" l% |6 |% [" a+ k. n# I if(str==NULL){ " N- `, Q8 ?1 z3 h8 Y m_data = new char[1]; $ C9 r3 g3 ^$ J5 ~& [6 t m_data[0] = 0; 6 C/ v# b# W- P3 Q } 1 U6 H6 d8 T6 [ else+ q* M, ~4 _4 N% ~ {# d& a5 g" E! C6 U. d; Y m_data = new char[strlen(str) + 1]; % R& F0 ?' Z7 | strcpy(m_data,str);( u2 o' n) z4 A" F. Z }. {" {" H' b8 }9 [- o) \ } y; e8 T# U2 H! g$ [' F, U String(const String &other) // 拷贝构造函数% ~' ?: j- l6 V8 m) j0 M {6 U: ~0 k+ a1 z, L7 Z *this = other;6 m- l9 y6 Z+ V3 D1 Q* r } ) ]7 g: X' Y! q2 M4 A: h ~ String(void) // 析构函数7 I: W2 C3 v- N {. T. z" v- I/ p* B { delete [] m_data;8 p4 l2 }. O! p5 S. Y }) m2 f9 R% r3 i7 Z( V String & operate =(const String &other) // 赋值函数 & U' G! W |3 p0 O1 f @{" j* w1 ~, g/ Z m_data = new char[strlen(other.m_data) + 1];& l$ h" M3 f% R8 j; r7 \# X& s strcpy(m_data,str);# N& F( p$ w. S9 F @4 A return *this; 6 \" Y) x K9 g" o* \, M* e& t}, y) s( u; i5 {! q/ A( ^7 V M6 v private:5 O7 o+ Y3 | V, a+ ` char *m_data; // 用于保存字符串" R! J. \, c; G" y$ z };. W, V3 R- a7 m, ?! H5 _/ i- ? 请编写String的上述4个函数。7 h& K; c+ x# r* P4 ]% S
    [此贴子已经被作者于2005-6-3 19:23:13编辑过]
    & @6 b+ `9 m- a
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    7
    发表于 2005-6-3 22:33:00 | 只看该作者

    2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值? / l( H3 G6 _9 t8 v* O& b8 p" J! h+ h这个倒真不知道,大概是利于编程

    返回的是 strDest 指针,如果没有返回这个指针则说明函数执行失败(这个函数也是有可能失败的,比如溢出了,或者指针不可读等等)

    该用户从未签到

    8
    发表于 2005-6-3 23:06:00 | 只看该作者

    不过只要有返回值就可以判断是否执行成功吧,比如bool,BOOL都可以

    该用户从未签到

    9
    发表于 2005-6-4 22:39:00 | 只看该作者
    才初学C++,还没入门,只知道sizeof(p)的值~~

    本版积分规则

    关闭

    下沙大学生网推荐上一条 /1 下一条

    快速回复 返回顶部 返回列表