21. 

struct A 

{ 

char t:4; 

char k:4; 

unsigned short i:8; 

unsigned long m; 

} 

sizeof(A)=?(不考虑边界对齐) 

7 

struct CELL             // Declare CELL bit field 

{ 

unsigned character : 8; // 00000000 ???????? 

unsigned foreground : 3; // 00000??? 00000000 

unsigned intensity : 1; // 0000?000 00000000 

unsigned background : 3; // 0???0000 00000000 

unsigned blink      : 1; // ?0000000 00000000 

} screen[25][80];       // Array of bit fields 

二、位结构 

位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构 

比按位运算符更加方便。 

位结构定义的一般形式为: 

struct位结构名{ 

数据类型 变量名: 整型常数; 

数据类型 变量名: 整型常数; 

} 位结构变量; 

其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整 

数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。 

变量名是选择项, 可以不命名, 这样规定是为了排列需要。 

例如: 下面定义了一个位结构。 

struct{ 

unsigned incon: 8; /*incon占用低字节的0~7共8位*/ 

unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4位*/ 

unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3位*/ 

unsigned blink: 1; /*blink占用高字节的第7位*/ 

}ch; 

位结构成员的访问与结构成员的访问相同。 

例如: 访问上例位结构中的bgcolor成员可写成: 

ch.bgcolor 

注意: 

1. 位结构中的成员可以定义为unsigned, 也可定义为signed, 但当成员长 

度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。 

2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针, 

如果是指针, 其成员访问方式同结构指针。 

3. 位结构总长度(位数), 是各个位成员定义的位数之和, 可以超过两个字 

节。 

4. 位结构成员可以与其它结构成员一起使用。 

例如: 

struct info{ 

char name[8]; 

int age; 

struct addr address; 

float pay; 

unsigned state: 1; 

unsigned pay: 1; 

}workers; 

上例的结构定义了关于一个工人的信息。其中有两个位结构成员, 每个位结 

构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工 

人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。 

————————————————————————- 

22.下面的函数实现在一个固定的数上加上一个数,有什么错误,改正 

int add_n(int n) 

{ 

static int i=100; 

i+=n; 

return i; 

} 

答: 

因为static使得i的值会保留上次的值。 

去掉static就可了 

————————————————————————- 

23.下面的代码有什么问题? 

class A 

{ 

public: 

A() { p=this; } 

~A() { if(p!=NULL) { delete p; p=NULL; } } 

A* p; 

}; 

答: 

会引起无限递归 

————————————————————————- 

24. 

union a { 

int a_int1; 

double a_double; 

int a_int2; 

}; 

typedef struct 

{ 

a a1; 

char y; 

} b; 

class c 

{ 

double c_double; 

b b1; 

a a2; 

}; 

输出cout<<sizeof(c)<<endl;的结果? 

答: 

VC6环境下得出的结果是32 

另: 

我(sun)在VC6.0+win2k下做过试验: 

short - 2 

int-4 

float-4 

double-8 

指针-4 

sizeof(union),以结构里面size最大的为union的size 

———————————————————————————- 

25.i最后等于多少? 

int i = 1; 

int j = i++; 

if((i>j++) && (i++ == j)) i+=j; 

答: 

i = 5 

————————————————————————- 

26. 

unsigned short array[]={1,2,3,4,5,6,7}; 

int i = 3; 

*(array + i) = ? 

答: 

4 

————————————————————————- 

27. 

class A 

{ 

virtual void func1(); 

void func2(); 

} 

Class B: class A 

{ 

void func1(){cout << “fun1 in class B” << endl;} 

virtual void func2(){cout << “fun2 in class B” << endl;} 

} 

A, A中的func1和B中的func2都是虚函数. 

B, A中的func1和B中的func2都不是虚函数. 

C, A中的func2是虚函数.,B中的func1不是虚函数. 

D, A中的func2不是虚函数,B中的func1是虚函数. 

答: 

A 

————————————————————————- 

28. 

数据库:抽出部门,平均工资,要求按部门的字符串顺序排序,不能含有”human resource”部门, 

employee结构如下:employee_id, employee_name, depart_id,depart_name,wage 

答: 

select depart_name, avg(wage) 

from employee 

where depart_name <> ‘human resource' 

group by depart_name 

order by depart_name 

————————————————————————- 

29. 

给定如下SQL数据库:Test(num INT(4)) 请用一条SQL语句返回num的最小值,但不许使用统计功能,如MIN,MAX等 

答: 

select top 1 num 

from Test 

order by num desc 

————————————————————————- 

30. 

输出下面程序结果。 

#include <iostream.h> 

class A 

{ 

public: 

virtual void print(void) 

{ 

cout<<”A::print()”<<endl; 

} 

}; 

class B:public A 

{ 

public: 

virtual void print(void) 

{ 

cout<<”B::print()”<<endl; 

}; 

}; 

class C:public B 

{ 

public: 

virtual void print(void) 

{ 

cout<<”C::print()”<<endl; 

} 

}; 

void print(A a) 

{ 

a.print(); 

} 

void main(void) 

{ 

A a, *pa,*pb,*pc; 

B b; 

C c; 

pa=&a; 

pb=&b; 

pc=&c; 

a.print(); 

b.print(); 

c.print(); 

pa->print(); 

pb->print(); 

pc->print(); 

print(a); 

print(b); 

print(c); 

} 

A: 

A::print() 

B::print() 

C::print() 

A::print() 

B::print() 

C::print() 

A::print() 

A::print() 

A::print()