1.改错题1. 使用VC6打开考生文件夹下的工程test18_1,此工程包含一个源程序文件test18_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
Enter x and y:
-4 -5
xoffset=1
yoffset=1
angle=45
radius=1.41421
源程序文件test18_1.cpp 清单如下:
#include <iostream.h>
#include <math.h>
class point
{
public:
void set(double ix,double iy)
{
x=ix;
y=iy;
}
double xoffset()
{
return x;
}
double yoffset()
{
return y;
}
double angle ( )
{
return (180/3.14159)*atan2(y,x);
}
/**************** found *******************/
inline radius ( )
{
return sqrt(x*x+y*y);
}
protected:
double x;
double y;
};
void main()
{
point p;
double x,y;
cout<<"Enter x and y:\n";
cin>>x>>y;
p.set(x,y);
/**************** found *******************/
p.x+=5;
p.y+=6;
/**************** found *******************/
cout<<"xoffset="<<p.xoffset()<<end1;
cout<<"yoffset="<<p.yoffset()<<end1;
cout<<"angle="<<p.angle()<<end1;
cout<<"radius="<<p.radius()<<end1;
(1) 错误:inline radius()
正确:inline double radius()
(2) 错误:p.x+=5;
p.y+=6;
正确:p.set((p.xoffset()+5),(p.yoffset()+6));
(3) 应在结尾处添加“}”
[解析]
(1)主要考查考生对于内联函数使用规则的掌握,虽然使用内联函数返回函数的值,但也要确定返回值的类型;
(2)主要考查考生对于对象访问类的数据成员的权限的掌握,对象不能直接访问类的私有或保护成员,只能通过类的公有成员函数去访问;
(3)主要考查考生对于主函数定义的掌握,该处缺少“}”,函数体的花括号一定是成对出现的。
2.简单应用题1. 编写函数fun(),该函数的功能是从字符串中删除指定的字符,同一字母的大、小写按不同字符处理。
例如:程序执行时输入字符串为turbo c and borland c++,从键盘上输入字符n,则输出后变为turbo c ad borlad c++。
如果输入的字符在字符串中不存在,则字符串照原样输出。
注意:部分源程序已存在文件test18_2.cpp中。
请勿改动主函数脚in和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
文件test18_2.cpp的内容如下:
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
void fun(char s[ ], int c)
{
}
void main ( )
{
static char str[ ]="turbo c and borland c++";
char ch;
cout<<"原始字符串:\n"<<str<<end1;
cout<<"输入一个字符:";
cin>>ch;
fun(str.ch);
cout<<"str="<<str<<end1;
}
void fun(char s[], int c)
{
int i=0;
char *p;
p=s;
while( *p)
{if( *p!=c)
{s[i]=*p;
i++;
}
p++;
}
s[i]='\0';
}
[解析] 本题考查用字符指针来控制字符数组中的元素。指针p初始化时应指向字符数组的首地址s,之后利用p逐个取得数组中的元素,然后用取得的字符逐个与要删除的字符进行比较,如果二者相同,则跳过该字符,去取下一个数组元素,这样最终得到的字符串中就把要删除的字符去掉了。最后不要忘记要手动地加上一个字符串结束标记‘\0’。
3.综合应用题1. 使用VC6打开考生文件夹下的工程test18_3,此工程包含一个源程序文件test18_3.cpp,其中定义了用于表示雇员的类 Employee,但类Employee的定义并不完整。请按要求完成下列操作,将类Employee的定义补充完整。
(1)补充类Employee的构造函数,请使用字符串函数将数据成员name,address,city,province和zipcode分别初始化为参数*nm,*addr,*city,*prov和*zip的值。请在注释“//**1**”之后添加适当的语句;
(2)完成类Employee的成员函数ChangeName(char * newName)的定义,将newName指向的内容赋值给数据成员name,请在注释“//**2**”之后添加适当的语句;
(3)完成类Employee的成员函数Display()的定义,先使用指针buffer动态申请一个char型的200单位大小的空间,然后使用字符串函数将数据成员name和address依次复制其中,最后返回该指针buffer,将请在注释“//**3**”之后添加适当的语句。输出结果如下:
王东建国路大街105号
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test18_3.cpp清单如下:
#include <iostream.h>
#include <string.h>
class Employee{
protected:
char name[20];
char address[100];
char city[20];
char province[20];
char zipcode[10];
public:
Employee(char *nm, char *addr,char *city, char *prov, char *zip);
void ChangeName(char *newName);
char *Display();
};
Employee::Employee(char *nm, char *adr, char *cit, char *prov, char *zip)
{
//**1**
strcpy(city, cit);
strcpy(province,prov);
strcpy(zipcode,zip);
}
void Employee::ChangeName(char * newName)
{
//**2**
}
char *Employee::Display()
{
//**3**
strcat(buffer, address);
return buffer;
}
void main()
{
Employee emp("李华","建国路大街105号","石家庄","河北","103400");
emp. ChangeName ("王东");
cout<<emp.Display()<<end1;
}
(1)
strcpy(name,nm);
strcpy(address,adr);
(2)
strcpy(name,newName);
(3)
char *buffer=new char[200];
strcpy(buffer,name);
[解析] 本题主要考查考生对于类的定义和字符串函数的灵活运用。算法如下:先使用strchr函数将名字中的空格找到,然后替换成为字符串结束标志,接着使用strcpy函数将被切断的字符串后面的部分复制到一个新的字符串newName中,再使用strcat函数连接“,”和原字符串的前半部分。