答案仅供参考
一、改错题
1. 找出以下两处逻辑错误(非编程规范)并改正 char* getErrorString(int errcode) { char errorString[] = \
char errorString2[] = \ switch(errcode) { case 1:
return errorString; case 2:
return errorString2; default:
return NULL; } }
void printErrorString(int errcode) { char *errorString = getErrorString(errcode); printf(\ }
case1和case2返回了两个局部变量指针,而局部变量在函数结束后将自动释放。 改正:将字符数组改为指针
char *errorString= \
char *errorString2 = \
2. 以下是输出“welcome home”的程序,找出逻辑错误(非编程规范)并改正 const int MAX_STR_SIZE = 12; int main(int argc, char *argv[]) {
char str[MAX_STR_SIZE];
strcpy(str,\ printf(\ return 0; }
“welcome home”字符串应该是13个字节,而str字符数组只能存储12个字符 改正: const int MAX_STR_SIZE = 13; 二、程序填空题
1. 写出String类的构造函数,析构函数和赋值函数 class String
{ public:
String(const char *str = NULL);
精选文库
String(const String &other); ~String();
String& operator =(const String &other); private:
char *m_data;
};
String::~String() { (1)delete [] m_data;
}
String::String(const char *str) { if( (2)str==NULL ) { m_data = (3)new char; *m_data = 0; } else { int length = (4)strlen(str); m_data = new char[length+1]; strcpy(m_data, str); }
}
String& String::operator =(const String &other) { if( (5) this == other) { return (6)*this; }
(7) delete [] m_data;
int length = strlen( (8)other ); m_data = new char[length+1]; (9)strcpy(m_data,other.m_data) return (10)*this;
}
2. 一个计算到指定年份有多少个“黑色星期五”(当月的13号并且是星期五)的程序,具体忘了。
三、编程题
1. 实现以下函数,把给定string中的‘[’和‘]’替换成‘(’和‘)’
std::string replace(std::string &str) {
for(int i = 0; i < str.size();i++) — 2
{
if(str[i]=='[') {
str[i]='('; }
if(str[i]==']') {
str[i]=')'; } }
return str; }
2. 实现函数,使数字num按B进制输出
int main(int argc, char *argv[]) {
long num = 134; int B = 8; func(num, B); return 0; }
例如134按2进制输出10000110,按8进制输出206,按十六进制输出86
void func(long num,int B) {
int a[100] ={0};
int count=0; while(num>0) {
a[count++]=num%B; //保存余数 num=num/B; }
for(int i = count - 1; i >=0; i--) //逆序输出 {
if(a[i]>=10)//十六进制要特殊处理 {
printf(\ } else {
printf(\ } }
printf(\
}
— 精选文库
3
— 精选文库
4
软通动力笔试(带参考答案)



