一、
已知类string的原型为
class String
{
public:
String(const char *str = NULL); //普通构造函数
String(const String &); //拷贝构造函数
~String(void); //析构函数
String & operator = (const String &); //赋值构造函数
private:
char * m_data; //用于保存字符串
};
请编写String的上述4个函数。
答案:
// String 的析构函数
String::~String(void) // 3 分
{
delete [] m_data;
// 由于m_data 是内部数据类型,也可以写成delete m_data;
}
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1]; // 若能加NULL 判断则更好
*m_data = ‘{post.content}’;
}
else
{
int length = strlen(str);
m_data = new char[length+1]; // 若能加NULL 判断则更好
strcpy(m_data, str);
}
}
// 拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加NULL 判断则更好
strcpy(m_data, other.m_data);
}
// 赋值函数
String & String:operate =(const String &other)
{
// (1) 检查自赋值
if(this == &other)
return *this;
// (2) 释放原有的内存资源
delete [] m_data;
// (3)分配新的内存资源,并复制内容
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加NULL 判断则更好
strcpy(m_data, other.m_data);
// (4)返回本对象的引用
return *this;
}
二:改错题,只能在原来的基础上增加代码,不能删除代码
#include
#include
void foo(int age,char *b)
{
b = (char *)malloc(64);
sprintf(b,”Your Age is %d”,age);
}
int main()
{
char *f;
foo(23,f);
printf(“%sn”,f);
}
答案
#include
#include
void foo(int age,char **b)
{
*b = (char *)malloc(64);
sprintf(*b,”Your Age is %d”,age);
}
int main()
{
char **f;
foo(23,f);
printf(“%sn”,**f);
return 0;
}
请问该程序用的是进程方式还是线程方式,并说明进程与线程的区别:
请问该程序输出什么结果?
无参考答案
四、constant pointer points for String
pointer points for constant string
答案:
1、constant pointer points for String,指向字符串的静态指针,即该指针只能指向该字符串,但字符串内容可以改变;
2、pointer points for constant string,指向静态字符串的指针,字符串内容不得改变,但指针可以移动。
五、下面等价的是:
A int i=0
if(i)
{
printf(“hello,world”);
}
B int i=1;
int j=2;
if(i==1 || j==2)
{
printf(“hello,world”);
}
C Boolean b1=true;
Boolean b2=true;
if(b1==b2)
{
printf(“hello,world”);
}
D int i=1;
int j=2;
if(i==1 &| j==2)
{
printf(“hello,world”);
}
个人不太明白&| 的含义,对此题保持沉默,欢迎大家给出答案。
六、排序二叉树插入一个节点或双向链表的实现
四~六为IBM面试题。
七、指针++的含义和用法
答案:
根据指针所指向的类型,移向下一个单元。如:字符串指针++,意为指向下一个元素。
八、stack 和heap的分配,rt-os的特点、同步的方式
九、怎样避免内存泄漏的问题
答案:
动态分配的内存使用完毕之后及时回收。
十、编程实现十进制数转化为十六进制输出,不准用任何已经定义的库函数,比方说String ,Math。int toHex(int )
参考答案:
#include
void main()
{
int n,i=0;
char glam[17]=”0123456789ABCDEF”; //定义字符表
char hex[20]=””; //用于存储转换之后的十六进制数
printf(“please enter n(dec):n”);
scanf(“%d”,&n);
do{
hex[i++]=glam[n%16];
n=n/16;
}while(n>0);
printf(hex);
}
十一、编程实现大于100的两个数值相乘的结果输出,同样不准使用任何已定义函数,Math,string,convert等。比方说12345*32534677 ,输入为两个string int toPlus(12345′,’32434677′) 输出为一个长型的
大数相乘原理。模仿人手工列竖式。result[i+j]+=a[ i]*b[j]%10;result[i+j+1]+=result[i+j]/10;
十二、int delete(node * head)
{
free(head);
head=head->link;
return(0);
}
指出程序的错误,并且写出正确的程序
参考答案:
错误:首先释放了head,再使用时已经不起作用。应使用临时指针变量。
int delete(node * head)
{
node *temp=head->link;
free(head);
head=temp;
return(0);
}
十三、写一个程序可以算出字节在计算机中的存储是由大到小还是有小到大。
十四、一段程序,写出输出结果
#include
class A
{
public:
void virtual print(){cout<<"A::print()"<
ab->print();
ac->print();
print(a);
print(b);
print(c);
}
答案:
A::print()”
B::print()”
C::print()”
A::print()”
B::print()”
B::print()”
A::print()”
A::print()”
A::print()”
十五、给两个变量,如何找出一个带环单链表中是什么地方出现环的。(答案参考expert C programming)。
先判断有环,步长为1的指针和步长为2的指针重合的地方就是环内的一个节点。
以此节点为起点的指针和指向头节点的指针均以步长1一起走,重合的地方就是环出现的节点。
十~十五为MS笔试题。
十六、写一个带参数宏get_struct_addr_from_member_addr(p, stru, m),
能够根据任意结构实体的某一个成员的地址,算出该结构实体的地址,其中参数p是指向该
成员的指针,stru是该结构体,m是该成员。(SUN试题)
return (struct stru*)(p – ( (int)&((struct stru *)0)->p));
十七、给一个函数
int main(){
int i, n=20;
for(i=0;i<n;i--)
printf("-");
return 0;
}
要求替换、增加或者减少一个字符,使该程序可以打出20个“-”号,并要求写出三种解法
。(sun试题)
参考:
1。i-- 换成 n--
2。i<N 换成 -i<N
十八、解释 typedef char (*FUNC)(int, char*)的含义
参考答案:
一个函数指针,函数有两个参数,int ,char*,返回值为char型。
十九、问#include<abc.h> 和#include "abc.h"的区别,#define MAX_NUM 10 和 const int
MAX_NUM=10区别
参考答案:
#include<abc.h>,从标准库函数中开始搜索;#include "abc.h",从用户工作路径开始搜索,搜索不到,再到库函数中搜索。
#define MAX_NUM 10 ,没有数据类型,编译器不进行类型检查,直接替换;
const int MAX_NUM=10,为int型静态变量。
二十、问用什么方法可以避免一些潜在错误,比如if( myvar = 3)这一类编程规范的问题?
用 if( 3 = myvar)就可以在编译时报错
十六~二十为SUN笔试题。
二十一、用状态机实现10010码的探测,如x=1001001000 z=0000100100(输出)
二十二、给一个数组src[10]排序,用两种方法,并比较
二十三、c / c++ 的不同
新的注释风格,变量作用域,函数重载,操作符重载,缺省参数,按引用传送,内
联函数、模版等。
二十四、run time environemnt 的应用领域,并给予解释
二十五、使用代码或者宏将十进制转化为十六进制格式
二十六、实时嵌入系统中,两个任务同时访问RS232c port,设计一个共有的子窜转发……
二十七、多任务实施系统中,一个任务有多少种状态?描述一个系统怎么工作
二十八、选择题:char *p,*q="i am",*g="Chanese!"
strcpy(p,q);
strcat(p,g);
printf("%s",p);
a.i am b.i amChanese! c.i am Chanese! d都不是
二十九、对优先级抢占调度法和时间片轮转调度法的理解
三十、哈息表查找的优缺点,并列出你所知道的哈希函数构造法
三十一、有两个无序链表A1和A2,写出程序把A1和A2合并成一个递增的链表。
三十二、a++, ++a中a的值是先加还是后加的
三十三、函数栈中分配空间与全局堆中分配空间的区别和联系
三十四、函数体内 static声明的变量的特殊意义
三十五、Struct xxx xx[20] 这个是预先申请了内存么?
参考答案:是的,struct xxx xx[20]确实已经申请了内存,而struct xxx *xx[20]则不
是事先申请内存,仅表示申明一下,后者需要malloc申请内存。
三十六、char * p;
p = “ss”;
for (; *p != 0 ; p++)
*p = 0
问此时p的值是多少?
参考答案:char * 的分配是在静态区,当作常量对待,赋值后就不可以修改,这是字符
串的用法,如果指向数组就另当别论。
这个程序的错误,首先字符串结束要比较' '而不是0,另外p指向const string不能
赋值。
三十七、char *string;
string = “I am ok”
这个语句有问题么? 没有?
三十八、关于实现swap的方法:
int p=1, q=2;
swap(&p , &q);
下面三个函数 ,哪个是正确的?(参考答案:1)
1、void swap (int *p, *q) {
int temp;
temp = *p;
*p = *q;
*q = temp
}
2、void swap(int *p, *q) {
int *temp;
*temp = *p;
*p = *q;
*q = *temp;
}
3、void swap(int*p, *q) {
int *temp;
temp = p;
p = q;
p = temp;
}
4、main() {
swap(a, b);
}
swap (int p, int q) {
int temp;
temp = p;
p = q;
q = temp;
}
三十九、全局变量被static变量重载,进行分析。
有如下C程序:
#include
int i = 0;
int func();
void main(){
int rst = 0;
rst = func() + i ;
rst += func() + i ;
printf(“%d”, rst);
}
int func() {
static i ;
i++;
return i;
}
参考:其实并不是全局变量被static重载,在函数内如果定义了i,那么,全局变量i
就不起作用了,什么意思,就是说如果i在函数内部定义了,那么函数内部使用的i
是函数自己定义的,而不是全局变量的i。
这里static是一个迷惑,其实不用static,含意也是一样的,只是每次函数里的i的值不能保存了。
全局变量不初始化,那么int的值为0,局部变量不初始化,那么其值不知。
四十、关于typedef和*相组合定义东西
四十一、关于union的使用,比如:
#include
#include
void main() {
union xxx {
struct xx {
long int x;
int y;
} p;
int z;
} a;
a.p.x = 5;
a.p.y = 6;
a.z = 7;
printf(“%d”, a.p.x + a.p.y);
}
打印出来的结果是什么?
参考:结果为13,解释为:
由于union是联合,那么只能存在一个值,所以z的值始终和p.x的值相等
union的存储空间有最大那个单元决定,所以当对p.z赋值时,p.y的值并没有丢失。
四十二、long int i = -2;
那么(int)i的值是多少?
参考:仍然时-2,因为i用补码表示为 fffe 去掉高位,符号位不变,那么应该是fe所以
依然是-2。
三十~四十二为华为/华3的笔试题。―_________―!
四十三、类定义的构造函数提供缺省值与不提供缺省值,有何区别?
四十四、C++主要特性包含哪些?什么是虚函数,主要用处是什么?
四十五、5分钟之内写一个排序算法。
四十六、new/delete对象时,使用堆还是堆栈?
四十三~四十六为朗讯笔试题。
四十七、程序执行的时候怎么分配内存空间,每个部分的作用?
四十八、实时操作系统,在RS-232上面,如何设计才可以保证两个任务送出的命令字符串严格同步?
四十九、实时操作系统中运行多个任务,写出任务可能存在的状态,状态之间的转化,以及转化条件?
四十七~四十九为威盛考题