下沙论坛

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

用新浪微博连接

一步搞定

QQ登录

QQ登录

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

笔试题好多不会做~郁闷

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2005-6-2 16:46:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目都是C/C++ ~郁闷啊。。。就学过C~~~谁会做教教偶啊。。写下答案6 t3 m: m, u" E- T0 R/ Y
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)4 J' }! f: v# T1 N, q& `
提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为:
$ m% {+ n# [' [7 c1 e    if ( n == 0 )! v. n+ \: t& n) w! y
    if ( n != 0 )
: @, G$ g- r& k0 F' H( ~- a以此类推。- f+ K6 v( o/ f9 E- k/ a
请写出 BOOL  flag 与“零值”比较的 if 语句:
! j& P4 ]0 k9 K4 h4 j
7 v* P# _/ U% h请写出 float  x 与“零值”比较的 if 语句:2 j- E& i# l- X

& y' z. Y0 n9 O' f& j- s请写出 char  *p 与“零值”比较的 if 语句:
+ q- ]! n: S% X" M2 o1 {$ j8 Y% Q8 D/ _) O+ V$ D5 I
二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)
$ G# [: X7 `. Z. U' p. H5 L" I, cchar  str[] = “Hello” ;
# a  t) E" y- xchar   *p = str ;3 G9 _) k, s4 p- g
int     n = 10;) v$ L+ u8 h, K1 e9 J
请计算
* _# n" ?2 N1 R. hsizeof (str ) =                 9 r5 u9 f7 E) h
sizeof ( p ) =                 
# x! J8 X" c7 }* {sizeof ( n ) =/ W# I) M' {: O$ d  B
void Func ( char str[100]): r% w& j2 U. ]! W5 @
{& S- V) k/ X& o2 e
请计算   _; K6 X4 x. e6 Q
sizeof( str ) =    : F' ^. H$ c& @
}
: u4 R' K: Y# S7 K3 K" x- Avoid *p = malloc( 100 );7 K4 ?, X3 `& v, E+ r
请计算
  i8 v' I1 f" }" `2 H- n( Dsizeof ( p ) =/ b& k! A" c# Z( k
三、简答题(25分)! ?9 ^3 m" ]7 t$ s* [3 t
1、头文件中的 ifndef/define/endif 干什么用?
9 n5 g, z  }+ r6 x, f# T* b0 b# I& U2、#include     和  #include  “filename.h” 有什么区别?
, V5 Q# L& v" F. L( Q. d5 x3、const 有什么用途?(请至少说明两种)
/ S0 B) v8 c4 R; k. z; t& C4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
7 \+ Z( q0 B, S2 n5 d四、有关内存的思考题(20分)4 `, l# J2 M% H9 c) m1 o  M
void GetMemory(char *p)
6 T: }" s7 t/ Q4 K1 _0 F; J( K0 E{
3 Z; Z8 k* V( z  y# E/ Fp = (char *)malloc(100);5 l/ H8 r! v& U
}
' l4 B) ~- G9 r/ Z& ]/ o. Hvoid Test(void)
- _$ c7 e; d; E, H. f! f2 `{
1 r7 y. X2 Z$ V+ O1 D. \: |char *str = NULL;* T0 @4 Y& ?+ q) q  ]
GetMemory(str); 0 Z/ o- }" d& P9 _" {8 z8 a- f( d; r
strcpy(str, "hello world");: ]. @# s+ Z- u7 M
printf(str);
( i2 A& A5 D$ |2 F: U- j}1 z( @, ^, J4 Q5 X
请问运行Test函数会有什么样的结果?, x1 e+ n& k+ a+ L- N3 s% f) B
答:( v# T! `8 F) I, \. R7 u! G$ `
, V# _" j- a( v2 Z
Void GetMemory2(char **p, int num)
' F- H# C: ]' a. E6 f/ w{. ^. \1 {6 H; w- [  K& f3 K
*p = (char *)malloc(num);
7 A  Y. T  S: T* w}7 H0 C! u1 O) O3 L! k/ B: R  S# Q
void Test(void)
5 f5 D% v# Q2 V; [5 l2 o{  I0 r% K2 s( o, X4 Z
char *str = NULL;
$ W8 s$ k3 u' J) }7 I5 w* d3 fGetMemory(&str, 100);& Z3 ~* Q7 k8 k. {0 ?. A. L
strcpy(str, "hello"); 0 x  v3 ~2 F: h$ f& d
printf(str); 9 w. Y, `6 [+ R! Q( f0 B
}0 {+ U% U& |; S! u
请问运行Test函数会有什么样的结果?
* p' U; |  |$ I: ]1 x答:9 }2 s/ c! @1 t! O9 V, p6 `
char *GetMemory(void)
! p0 C; ^. q4 j. B" q: \{ 3 C$ |3 J+ \/ `3 f
char p[] = "hello world";2 `, c' M* T) B1 b4 Q3 U/ @7 V
return p;% }1 n3 i* B) G
}
# ]3 ~# |. S) L1 \3 \void Test(void)5 y' f2 m* i0 b! I& n6 q
{
9 V$ E' `( \8 t( w$ \5 I8 pchar *str = NULL;# s8 f9 R2 u: m+ }" B  u
str = GetMemory();' k! F3 o; D6 V8 m8 M3 z
printf(str);
) k- T! F( _! T; z}
6 z, ~" s. C$ z* u" [请问运行Test函数会有什么样的结果?& u$ ~9 n+ I. Y" p1 i* U9 y6 U* Z
答:, z) h4 }; D0 S6 X- G

! Z4 B9 \" A9 z' h& E* svoid Test(void)9 v& B$ F3 H. c% u* c. |+ D" `& p- s
{. D$ J2 y% N) |! g: e5 r
char *str = (char *) malloc(100);6 t# S! ~- |% Z
strcpy(str, “hello”);
) I+ H8 z/ ^& g4 }3 G' I) B2 Nfree(str);     
/ g9 t% \2 ?9 p% D& C8 g5 fif(str != NULL) 6 l5 ]3 i; s0 a
{
2 @1 M( P# j" H/ L strcpy(str, “world”);
8 E) O+ N) d1 D! Y$ t( pprintf(str);8 Q: w7 o: L" `8 a: ]
}3 r9 S8 D/ `& F9 o( i- L1 J! N6 s
}( V- o# W! {  {
请问运行Test函数会有什么样的结果?
) e4 [. O8 ^' m7 T答:5 N$ \' }6 _1 N  D
5 U% v+ W, n* ]  u/ w, w9 |5 H
五、编写strcpy函数(10分)6 }. z) z, _' K5 f9 g0 J
已知strcpy函数的原型是# R8 i/ A' R# m) o7 N1 [! S
char *strcpy(char *strDest, const char *strSrc);/ s& {% }  G1 l& a
其中strDest是目的字符串,strSrc是源字符串。8 P* I2 ]8 H: d
(1)不调用C++/C的字符串库函数,请编写函数 strcpy5 R  i# C0 N/ E# F. B
" n+ P" f  D+ }! i
2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?& R" K, k2 N6 @) V0 g

$ `7 @( k0 b$ P4 c1 y7 j8 J7 L% w" w1 s六、编写类String的构造函数、析构函数和赋值函数(25分)
- f8 N8 I  }# L) P% A) t) H; Y已知类String的原型为:
8 F4 H, Z4 |" L1 T# n class String; L% Y  B- G2 l: ?+ @& z# H: V4 q1 u
{
  `7 g4 z7 M* w# N   public:
1 {+ U3 S9 ?6 B/ q  String(const char *str = NULL); // 普通构造函数
3 B- t/ K' O) o4 g* f: ~* z  String(const String &other);     // 拷贝构造函数
. d3 k" h! l3 L) N8 w3 l8 i0 O  ~ String(void);         // 析构函数/ E& {; M' z2 [
  String & operate =(const String &other); // 赋值函数
1 c# p" P( ~5 O$ Q% ^9 V4 Z3 u   private:
/ Y& ^5 O# r: P0 c  char   *m_data;    // 用于保存字符串
$ H# C) W% a' }" `0 A" O };
7 j- P) l2 L+ ?) B8 ]# V1 c* N9 g 请编写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的发言:2 j4 n; k: r" ]+ h# ?- [8 \ # |8 n$ N4 X& I, p8 m% g

软考的?

$ c' ~' a( h: i

其实都是很基本的题目阿

" i' p3 \- `! W, h" B2 Q6 V ; @" f2 h3 I6 Q- k5 u 5 J6 i+ b, ]/ d8 g$ L C有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的发言:' g: F; L: x9 p Z; r3 M + e5 J, L' n. P5 O* b& C

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

    # `% H' i$ D1 T% a7 ?% C8 ^

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

    4 b6 }( V% h# @! f# a5 x: w& V. e! { z. O: o 1 V U& A/ Y Myes you are all right ( ^; G" s2 G5 v$ @ 楼主这些题目实在太基础了,如果这些不会,需要去看基础的知识,推荐 C++ primer

    该用户从未签到

    6
    发表于 2005-6-3 19:14:00 | 只看该作者
    三、简答题(25分) - q8 M- L) w. [* ~1 q3 b, Q2 O1、头文件中的 ifndef/define/endif 干什么用?, J% J1 z0 S/ T, U+ ^$ ?# h 起码加上前缀(#)吧,其中 #ifnedf 就是说如果没有定义什么则…… # ]8 c) b. R: Y8 ]- L#define xxx yyy 就是把之后出现的yyy用xxx替换( b1 R. p D3 f9 c" k #endif 与#if系列配合使用 9 ]2 `( D3 t1 d( P6 T2、#include 和 #include “filename.h” 有什么区别? . t1 @# a) y/ i/ d; Q这个玩笑闹大了…… 估计前是用是指先在系统指定的包含目录中查找文件,""是在当前目录中,当然可以使用绝对路径 ) n# s' ?" o2 ~0 H. k E 3、const 有什么用途?(请至少说明两种) ; O* \' J" t. b+ |1 r0 D# k! f限制变量不被修改,保证函数不修改变量1 ^" _ I( Z1 \5 P5 h 4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明? * c) W. M4 d8 ?, @( D指编译的时候使用C风格的函数名; L$ n) @! _% T. `8 { B% }# l " ]. b$ U) M# J8 \- c8 x' L四、有关内存的思考题(20分) # I1 S+ H$ k- W: ? ?4 g/ G8 Lvoid GetMemory(char *p) " n8 K' V& I2 |2 D' B+ Z" n{ + A4 q U+ O- [& d2 Ep = (char *)malloc(100); o3 X# G5 W. W4 j4 c2 j } * ]" Z( X- u) ^5 { @4 ?void Test(void) 3 s2 Y3 M* K$ U v4 [: ^, { { ; r- N) p# E+ b& B+ d% R& x. Nchar *str = NULL; ; e) e' e! D) X) gGetMemory(str); / D' {7 {6 \; O0 h+ Q mstrcpy(str, "hello world"); $ A" g- \0 d- X9 W1 X6 m2 ^printf(str); & P1 [. u5 J; P: k) W+ B: m* k}7 j: M) | g7 R7 K+ w$ i. G! _ ^ 请问运行Test函数会有什么样的结果?" u9 c8 v7 A1 [2 N% v4 c 答:错误,str没有正确指向申请的内存地址 3 I/ a( h: }5 PVoid GetMemory2(char **p, int num)5 [: D9 c. E7 d: n5 G {' p. F: V2 t' Y& q *p = (char *)malloc(num);1 l2 u9 R; z4 e; N5 p a }6 r0 ^/ V. U) \/ b8 S void Test(void)4 Z u }$ O8 c {2 {8 d+ ]1 h1 s6 T char *str = NULL;% s! E/ }) A& x& |/ T' e9 B GetMemory(&str, 100);( j0 w! h8 u: j strcpy(str, "hello"); 0 Z9 }+ y7 k6 e3 S: Oprintf(str); / k& R) }8 |) \2 K8 a) q# o} 0 J; F* F3 b3 D$ w- _/ H1 c4 Q1 i请问运行Test函数会有什么样的结果? $ R$ ^* y0 o- {' w# H C- |答:正确执行,打印出“Hello”( I5 j3 {) S) j7 h$ T; W& s( t char *GetMemory(void)/ G& c7 F: f8 b, | { / t7 L5 u& S1 |" ]6 u2 o } char p[] = "hello world";+ V& |& V, M3 r! W. y4 G return p; # T1 [3 z9 n v5 M+ n' d$ \8 |1 U; l} % T8 l* h7 X; evoid Test(void)3 }) ~9 i- A! C { , W- t( S: ]# H, s+ ]char *str = NULL;1 ]' G8 f9 x5 {/ p; b5 S$ V' q0 B- U str = GetMemory(); + V6 o- C5 J3 q6 h$ F* w L/ v! }printf(str);( l+ }. a3 [5 j% Y# p& U }. V6 H& K( R# Y 请问运行Test函数会有什么样的结果?% y0 b# J4 H; a$ M$ ] 答:错误,str指向的内存地址已经被系统释放 5 Q; T1 ?7 }. y0 g* h5 q/ H7 jvoid Test(void)0 [( C) n+ T4 O( D( y& R# y6 R { 8 j7 v! |: \3 }! R1 _char *str = (char *) malloc(100); $ r3 ]8 G( |. R; D' astrcpy(str, “hello”); : ~0 @' D' F4 O; O# E- j free(str); - v2 S: J# L5 |5 d1 \1 w( Tif(str != NULL) 0 F1 Y& f3 p# x0 ?' K" x: @. u" P{ 7 B( e+ E G$ i4 V" _4 Z" `strcpy(str, “world”); # V( W8 {$ y4 _6 _7 J printf(str); + x4 H# P3 e9 @1 v5 @} " n! w3 K& i* N$ _8 z( Y' {} " P5 U! A1 u$ z1 Q3 \# v请问运行Test函数会有什么样的结果?" U+ i) L1 x: k; |6 U7 d 答:错误,free函数不负责将str置0,故strcpy无法正确工作: ]! t% }0 G0 t3 A' C- T7 [" E & R9 @1 v* m8 c: M: v 五、编写strcpy函数(10分) ' S, {- t! d* g# m+ {4 s+ g# Y已知strcpy函数的原型是 9 O+ `/ }" W1 |0 H bchar *strcpy(char *strDest, const char *strSrc); ( I4 f0 T5 R0 ]/ L2 z其中strDest是目的字符串,strSrc是源字符串。! h g O3 G- d7 i (1)不调用C++/C的字符串库函数,请编写函数 strcpy! |, ]$ A5 r6 C3 u char *strcpy(char *strDest, const char *strSrc) : \( r, W2 ~* U$ P9 ^" l{$ O" U+ N9 _4 J3 ?$ C6 X& ^# U. n if(strDest == NULL || strSrc == NULL) return 0;5 S, U( S; v; o for(int i =0;(strDest[ I] = strSrc[I ]) != 0;i++);! v, v$ W; T/ o/ N9 |* P, F% H! r return strDest;* Y0 ?: K6 ?: m0 X }6 G! y. P" e8 Q9 a6 Y 2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?3 i' z2 W- C8 ~7 { 这个倒真不知道,大概是利于编程 8 G) X$ e0 j1 K六、编写类String的构造函数、析构函数和赋值函数(25分) 6 {2 s- }/ l; Y已知类String的原型为: 6 V3 f# w$ e* T+ W! Sclass String$ F. i% D2 ^" ~ O( R9 C {/ q4 f2 n. q' x; x6 u public: & p% D1 K2 J8 r/ g3 k String(const char *str = NULL) // 普通构造函数 * `* L, e/ X" c& c{ : F1 `: g7 [( ]$ C: | if(str==NULL){3 `" Q1 X8 S C m_data = new char[1];1 O) t: ^. @3 O% o m_data[0] = 0;6 \" P) B4 F* q. b }2 c; P2 G: ?7 [" J' @ e else ( e( S+ J9 Z4 _, r7 X {2 s% |; d' l; A: v& ~ m_data = new char[strlen(str) + 1]; 5 v. O( b+ u2 I n d" H7 | strcpy(m_data,str);' S& d e% J' c% O' v) ]* u }. e2 g, |6 q! D. z$ o1 e4 K* \ }, B: v# `; Q" k5 W/ I7 i2 M String(const String &other) // 拷贝构造函数1 R" F& \/ B. L7 \# d { { " R f1 \2 ]* J% ?' T ^4 h *this = other; % Q. I' g+ ~4 R: M2 m( K) n8 k) V7 x}9 U) W( ?/ }1 V) u! M ~ String(void) // 析构函数 ) n. N3 u8 l7 u& `{ 9 t" x2 N3 m" M; }8 @ delete [] m_data;9 T- j) b# t, q& p d- B } % Z0 L* C a% p" t, ^2 a String & operate =(const String &other) // 赋值函数 2 d8 V- s6 O: x+ o{ . E4 r' J) T1 N/ R0 e m_data = new char[strlen(other.m_data) + 1]; ' U8 |4 u1 w& F' C. a1 i7 F% T6 p strcpy(m_data,str);9 }. p9 e. \# K. P return *this; 2 J2 g% F+ ^: T1 U( X: w" e} ( ]/ X- M: }$ m/ @! a$ u private:" T6 Y, l$ U8 ]8 Q+ P0 G char *m_data; // 用于保存字符串 8 Z# `' o$ [' [! d};+ W) r9 E% H( P 请编写String的上述4个函数。" N" J2 ~) o4 Z
    [此贴子已经被作者于2005-6-3 19:23:13编辑过]
    & z- T) q) }1 X
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

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

    2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?: Y y5 `' n, F2 t: M2 L 这个倒真不知道,大概是利于编程

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

    该用户从未签到

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

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

    该用户从未签到

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

    本版积分规则

    关闭

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

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