一、问答题
1. 存在如下三个类的定义,请问sizeof(A)、sizeof(B)、sizeof(C)分别等于多少?
class A
{
void FuncA();
};
class B
{
int a; char ch;
static int b;
virtual void FuncA();
};
class C
{
double d; char ch;
virtual void FuncA();
virtual void FuncB();
};
{
void FuncA();
};
class B
{
int a; char ch;
static int b;
virtual void FuncA();
};
class C
{
double d; char ch;
virtual void FuncA();
virtual void FuncB();
};
二、写出下列程序的运行结果
假设硬件平台是intel x86(little endian)
char *inet_ntoa(uint32_t in)
{
static char b[18];
register char *p;
p = (char *)∈
#define UC(b) (((int)b)&0xff)
(void) snprintf(b, sizeof(b),
"%d. %d. %d", UC(p[0]), UC(p[1]), UC(p[2]), UC(p[3]));
return (b);
}
int main()
{
printf("%s, %s", inet_ntoa(0x12345678), inet_ntoa(87654321));
}
{
static char b[18];
register char *p;
p = (char *)∈
#define UC(b) (((int)b)&0xff)
(void) snprintf(b, sizeof(b),
"%d. %d. %d", UC(p[0]), UC(p[1]), UC(p[2]), UC(p[3]));
return (b);
}
int main()
{
printf("%s, %s", inet_ntoa(0x12345678), inet_ntoa(87654321));
}
三、程序实现
1. 给出一行C语言表达式,判断给定的整数是否是一个2的幂。
解答:x&(x-1) ? false: true
2. 已知n(n>=2)个32位的无符号整数,求其中异或之后的值最大的那两个数。
3. 宽度优先遍历一棵二叉树。
4. 使用递归将一个链表逆序(例如A->B->C => C->B->A)。
5. 编写类String的构造函数、析构函数和赋值函数。已知类String的原型为:
class String
{
public:
String(const char *str==NULL); //普通构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String & operate=(const String &other); //赋值函数
private:
char *m_data; //用于保存字符串
}
{
public:
String(const char *str==NULL); //普通构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String & operate=(const String &other); //赋值函数
private:
char *m_data; //用于保存字符串
}
6. 从m个数中找出前n个大的数(m>n),写出你认为效率最高的方法。
7. M个同样的球放在N个同样的盒子里,不允许有的盒子空着不放,请编写程序计算共有多少种不同的分法?(用k表示)
5,1,1和1,5,1是同一种分法。
8. 在一个整数序列(用数组int a[N]表示,长度为int length)中求一个连续子序列,使该子序列的和最大,输出最大的和即可。例如,整数序列12 -13 1 2 23 -14 55 -2,最大连续子序列的和为67。
#include <stdio.h>
void main()
{
int x[]={12, -13, 1, 2, 23, -14, 55, -2};
int length = 8;
int max=-65535;
int i, j, sum=0;
for(i=0; i<length; i++)
{
sum=0;
for(j=i; j<length; j++)
{
sum+=x[j];
if(sum>max)
max=sum;
}
}
printf("%d",max);
}
void main()
{
int x[]={12, -13, 1, 2, 23, -14, 55, -2};
int length = 8;
int max=-65535;
int i, j, sum=0;
for(i=0; i<length; i++)
{
sum=0;
for(j=i; j<length; j++)
{
sum+=x[j];
if(sum>max)
max=sum;
}
}
printf("%d",max);
}
四、证明题
五、趣味题

浙公网安备 33010602011771号