C++面向对象程序设计习题集
编程题:用面向对象的程序设计方法编制如下程序。
1.
设计一个Bank类,实现银行某账号的资金往来账管理,包括建账号、存入、取出等。Bank类包括私有数据成员top(当前指针)、date(日期)、money(金额)、rest(余额)和sum(累计余额)。另有一个构造函数和3个成员函数bankinO(处理存入账)、bankout()(处理取出账)和disp( )(出明细账)。
【知识点】:2.2 2.3
【参考分】:25分
【难易度】:B
【答案】:
#include
#include
#include
const int Max=100;
class Bank
{
int top;
char date[Max][10];//日期
int money[Max];//金额
int rest[Max];//余额
static int sum;//累计余额
public:
Bank(){top=0;}
void bankin(char d[ ],int m)
{
strcpy(date[top],d);
money[top]=m;
sum=sum+m;
rest[top]=sum;
top++;
}
void bankout(char d[],int m)
{
strcpy(date[top],d);
money[top]=-m; //取出数用负数表示
sum=sum-m;
rest[top]=sum;
top++;
}
void disp()
{
int i;
cout<<"日期存入取出余额"< for(i=0;i { cout< if(money[i]<0) cout<<""< else cout< cout< }; int Bank::sum=0; void main() { Bank obj; obj.bankin("2005.2.5".1000); obj.bankin("2006.3.2",2000); obj.bankout("2007.4.1",500); obj.bankout("2007.10.5",800); obj.disp(); } 2. 编写一个程序,已有若干个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。 【知识点】:2.2 2.3 【参考分】:20分 【难易度】:B 【答案】: #include #include #include class Stud { int no; char name[10]; int deg; static int sum; static int num; public: Stud(int n,char na[],int d) { no=n;deg=d; strcpy(name,na); sum+=d; num++; } static double avg() { return sum/num; void disp() { cout< } }; int Stud::sum=0j int Stud::num=O; void main() { Stud s1(1,"Li",89),s2(2,"Chert",78),s3(3,"zheng",94); cout:<<"学号姓名成绩"< s1.disp(); s2.disp(); s3.disp(); cout<<"平均分="< } 3. 有10个单词存放在一维指针数组words中,编写一个程序,根据用户的输入找出所有与之从前向后匹配的单词和个数。 【知识点】:2.2 【参考分】:25分 【难易度】:B 【答案】:设计一个Word类,包含一个私有数据成员words、一个构造函数和一个公有成员函数lookup(),构造函数用于给words赋初值,lookup()用于找出所有与之从前向后匹配的单词和个数。程序如下: #include #include C1ass Word { char words[10][12]; public: Word() //构造函数给words赋初值 { strcpy(words[0],"elapse"); strcpy(words[1],"elucidate"); strcpy(words[2],"elude"); strcpy(words[3],"embody"); strcpy(words[4],"embrace"); strcpy(words[5],"embroider"); strcpy(words[6],"emrtge"); strcpy(words[7],"emphasize"); strcpy(words[8],"empower"); strcpy(words[9],"emulate"); void lookup(char s[ ]); }; void Word::lookup(char s[ ]) { char *w; int i,j,n=0; //n记录相匹配的单词个数 cout<<"匹配的单词:"< for(i=0;i<10;i++) //一个单词一个单词地匹配 { for(w=words[i],j=0;s[j]!='\0'&&*w!='\0'&&*w==s[j]; j++,w++); if(s[j]=='\0') //匹配成功 { n++; cout<<"\t"< } } cout<<"相匹配的单词个数:"< } void main() { Word obj; char str[20]; cout<<"输入单词:"; cin>>str; obj.lookup(str); } 4. 创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。把表示构造函数、changenameO、display()的函数原型放在类定义中,构造函数初始化每个成员,display()~数把完整的对象数据打印出来。其中的数据成员是保护的,函数是公共的。 【知识点】:2.2 2.3 3.1 【参考分】:20分 【难易度】:B 【答案】: #include #include class Employee { protected: char name[10]; //姓名 char street[20]; //街道地址 char city[10]; //市 char prov[10]; //省 char post[7]; //邮政编码 int no; //记录序号 public: Employee(char[],char[],char[],char[],char[],int); void changename(char str[]); void display(); }; Employee::Employee(char n[],char s[],char c[],char pl[],char p2[],int num) { strcpy(name,n); strcpy(Street,s); strcpy(city,c); Strcpy(prov,p1); strcpy(post,p2); no=num; } void Employee::changename(char n[]) { strcpy(name,n); } void Employee::display() { cout<<"输出记录"< cout<<"姓名:"< cout<<"街道地址:"< cout<<"市:"< tout<<"省:"< cout<<"邮政编码:"< } void main() { Employee obj1("王华","中华路15号","武汉市","湖北省","430070",1); Employee obj2("杨丽","天津路30号","南京市","江苏省","210020",2); obj1.display(); obj2.display(); } 5. 编写一个程序,已有若干个学生数据,这些数据包括学号、姓名、语文成绩、数学成绩和英语成绩,求各门课程的平均分。要求设计不同的成员函数求各门课程的平均分,并使用成员函数指针调用它们。 【知识点】:2.2 2.3 3.1 【参考分】:20分 【难易度】:C 【答案】:设计一个学生类student,包括no(学号)、name(姓名)、degl(语文成绩)、deg2(数学成绩)、deg3(英语成绩)数据成员和3个静态数据成员suml(累计语文总 分)、sum2(累计数学总分)、sum3(累计英语总分);另外有一个构造函数、3个求三门课程平均分的成员函数和一个disp( )成员函数。程序如下: #include #include #include const int N=4; class student { int no;//学号 char name[10];//姓名 int degl;//语文成绩 int deg2;//数学成绩 int deg3;//英语成绩 static int suml;//语文总分 statac int sum2;//数学总分 static int sum3;//英语总分 public: student(int n,char na[],int dl,int d2,int d3) { no=n; strcpy(name,na); degl=dl;deg2=d2;deg3=d3; suml+=degl;sum2+=deg2;sum3+=deg3; } double avgl(){return(suml*1.0)/N;} double avg2(){return(sum2*1.0)/N;} double avg3(){return(sum3*1.0)/N;}} void disp() { cout< < } }; int student::suml=0; int student::sum2=0; int student::sum3=0; void main() { double (student::*fp)(); //定义成员函数指针 student s1(1,"Li",67,89,90); student s2(2,"Na",67,89,90); student s3(3,"Zheng",67,89,90); student s4(4,"Chert",67,89,90); cout<<"输出结果"< cout<<"学号姓名语文数学英语"< s1.disp(); S2.disp(); S3.disp(); S4.disp(); fp=student::avgl; cout<<"语文平均分:"<<(S1.*fP)()< fp=student::avg2; cout<<"数学平均分:"<<(S1.*fp)()< fp=student::avg3; cout<<"英语平均分:"<<(S1.*fP)()< } 6. 编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求只输出成绩在80~89分数段的学生数据。 【知识点】:2.2 2.3 【参考分】:20分 【难易度】:B 【答案】:设计一个学生类Stud,包括no(学号)、name(姓名)和deg(成绩)数据成员,另有两个普通成员函数setdata()和disp(),前者用于设置对象数据,后者用于只输出成绩在80~89分数段的学生数据。在main()函数中定义了一个对象数组用于存储输入的学生数据。 程序如下: #include #include #include const int N=3; class Stud { int no; char name[10]; int deg; publiC: void setdata(int n,char na[],int d) { no=n;deg=d; strcpy(name,na); } void disp() { if(deg>=80&°<=89) cout< } }; void main() { Stud st[N]; int i,n,d; char na[10]; cout<<"输入学号姓名成绩"< for(i=0;i { cout<<"第"< cin>>n>>na>>d; St[i].Setdata(n,na,d); cout<<"输出数据"< cout<<"学号姓名成绩"< for(i=0;i st[i].disp( ); } 7. 编写一个程序统计学生成绩,其功能包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前70%的学生定为合格(PASS),而后30%的学生定为不及格(FAIL)。 【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:A 【答案】:设计一个类student,包含学生的姓名和成绩等数据,以及setname()、setdeg()、getname()和getdeg()等4个成员函数。设计一个类compute,包含两个私有数据成员,即学生人数ns和student类的对象数组na[],另有3个公共成员函数getdata( )、sort( )、disp( ),它们的功能分别用于数据获取、按成绩排序和输出数据。 程序如下: #include #include #include const int Max=10; class student { char name[10]; int deg; public: void setname(char na[]){strcpy(name,na);} char *getname(){return name;} void setdeg(int d){deg=d;} int getdeg(){return deg;} }; class compute { int ns; student na[Max]; public: void getdata(); void sort(); void disp(); }; void compute::getdata() { int i,tdeg; char tname[10]; cout<<"输入学生人数:"; cin>>ns; cout<<"输入学生姓名和成绩:"< for(i=O;i { cout<<"第"< cin>>tname>>tdeg; na[i].setname(tname); me[i].setdeg(tdeg); } } void compute::sort() { int i,j,pick; student temp; for(i=0;i { pick=i; for(j=i+1;j { if(na[J].getdeg()>na[pick].getdeg()) pick=j; } temp=na[i]; na[i]=na[pick]; na[pick]=temp; } } void compute::disp() { int cutoff,i; cout<<"输出结果"< cout<<" 姓名成绩合格否"< cout<<” ------- ---- ------”< cutoff=ns*7/10-1; for(i=0;i { cout< if(i<=cutoff) cout<<"PASS"< else cout<<"FAIL"< } } void main() { compute obj; obj.getdata(); obj.sort(); obj.disp() } 8. 编写一个程序,输入用户的姓名和电话号码,按姓名的词典顺序排列后,输出用户的姓名和电话号码。 【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:B 【答案】:设计一个类person,包含学生的姓名和电话号码等数据,以及semame()、setnum()、gemame()和gemum()等4个成员函数。设计一个类compute,包含一个私有数据成员,即person类的对象数组pn[],另有3个公共成员函数getdata()、sort()、disp(),它们的功能分别用于数据获取、按姓名的词典顺序排序和输出数据。程序如下: #include #include #include const int N=5; class person { char name[10]; char num[10]; public: void setname(char na[]){strcpy(name,na);} void setnum(char nu[]){strcpy(num,nu);) char *getname(){return name;} char *getnum(){return num;) }; class compute { person pn[N]; public: void getdata(); void getsort(); void outdata(); }; void compute::getdata() { int i; char na[10],nu[10]; cout<<"输入姓名和电话号码"< for (i=0; i { cout<<" 第"< cin>>na>>nu; pn[i].setname(na); pn[i].setnum(nu); } void compute::getsort() int i,j,k; person temp; for(i=0;i { k=i; for(j=i+1;j if(strcmp(pn[k].getname(),pn[j].getname())>0) k=j; temp=pn[k]; pn[k]=pn[i]; pn[i]=temp; } } void compute::outdata() { int i; cout<<"输出结果:"< cout<<" 姓名电话号码"< cout << " -------- --------" << endl; for(i=0;i cout< < } void main() { compute obj; obj.getdata(); obj.getsort(); obj.outdata(); } 9. 编写一个程序,输入n个学生的姓名和出生日期,并按年龄从大到小输出。【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:A 【答案】:设计一个结构体person,包含学生的姓名和出生日期等数据:设计一 个类compute,包含私有数据成员,即person结构体数组st[],另有3个私有成员函数daynum()、count day()、leap()和3个公共成员函数getdam()、sort()、disp(),它们的功能分别用于数据获取、按出生日期排序和输出数据,在实现过程中调用前面的3个私有成员函数。sort()成员函数按结构体数组元素的d成员排序,d存放的是该学生从1900年1月l日到出生日期的天数。程序如下: #include #include const int N=4; int count day(int,int,int,int); int leap(int); struct person { char name[10]; struct dates int year; int month; int day; }date; int d; //从1900.1.1到出生日的天数 }; class compute { struct person st[N]; int daynum(int,int,int,int,int,int); int count_day(int,int,int,int); bool leap(int); public: void getdata(); void sort(); void disp(); }; int compute::daynum(int s_year,int s_month,int s_day,int e_year, int e_month,int e_day) { int year,day,dayl,day2; if(s year { day=count_day(s_year,s_month,s_day,0); for(year=s_year+l;year if(leap(year)) day+=366L; else day+=365L; day+=count_day(e_year,e_month,e_day,1); } else if(s_year==e_year) { dayl=count_day(s_year,s_month,s_day,1); day2=count_day(e_year,e_month,e_day,1); day=day2-dayl; } else day=-1; return day; } int compute::count_day(int year,int month,int day,int flag) { staric int day_tab[2][12]={(31,28,31,30,31,30,3l,31,30,31,30,3l}, {31,29,31,30,31,30,31,31,30,31,30,31}}; //使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年int p,i,s; if(leap(year)) p=1; else p=0; if(flag) { s=day; for(i=1;i s+=day tab[p][i一1]; } else { s=day_tab[p][month]-day; for(i=month+1;i<=12;i++) s+=day_tab[P][i一1]; } return(s); } bool compute::leap(int year) { if(year%4==O&&year%100!=O||year%400==O) //是闰年 return true; else //不是闰年 return false; } void compute::sort() { int i,j; struct person temp; for(i=O;i for(j=0;j { if(st[j].d>st[j+1].d) { temp=st[j]; st[j]=st[j+1]; st[j+1]=temp; } } void compute::getdata() { int i; for(i=0;i { cout<<"输入第"< cin>>st[i].name; cout<<" 出生日期:"; cin>>st[i].date.year>>st[i].date.month>>st[i].date.day; st[i].d=daynum(1900,1,1,st[i].date.year, st[i].date.month,st[i].date.day); } } void compute::disp() { int i; cout<<"输出结果:"< cout<<" 姓名出生日期"< for(i=0;i cout< < } void main() { compute obj; obj.getdata(); obj.sort(); obj.disp(); } 10. 设计一个集合类Set,包括将集合置空、添加元素、判断元素是否在集合中、输出集合以及将集合中元素逆置,另外还有一个复制构造函数,并使用一些数据进行测试。 【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:B 【答案】:Set类包括私有数据data(存放集合元素)、Bum(集合中元素个数),一个缺省构造函数和复制构造函数Set(Set &s),另有成员函数setempty()(将集合置空)、issetempty()(判断集合是否为空)、ismemberof()(判断元素是否在集合中)、add()(添加元素)、disp()(输出集合)、reverse()(将集合中元素逆置)。其中,issetempty、ismemberof和disp函数设计为常成员函数。程序如下: #include const int Max=10; C1ass Set { int data[Max]; int num; public: Set(){num=0;} Set(Set &s); //对象引用作为参数 void setempty(){num=0;} bool issetempty()const; bool ismemberof(int n) const; int add(int n); void disp() const; void reverse(); }; Set::Set(Set &S) nUm=S.num; for(int i=0;i data[i]=s.data[i]; } bool Set::issetempty() const { return(num==0); } bool Set::ismemberof(int n) const { for(int i=0;i if(data[i]==n) return l; return 0; } int Set::add(int n) { if (ismemberof(n)) return 1; else if(num>Max) return 0; else { data[num++]=n; return 1; } } void Set::disp() const { cout<<"{"; for(int i=0;i cout< if(num>0) cout< cout<<"}" < } void Set::reverse() { int n=num/2; for(int i=0;i { int temp; temp=data[i]; data[i]=data[num-i-1]; data[num-i-1]=temp; } } void main() { Set A; cout<<"A是否为空:"; cout<<(A.issetempty()?"空":"非空")< cout<<"A:";A.disp(); Set B; for(int i=1;i<=8;i++) B.add(i); cout<<"B:";B.disp(); cout<<"5是否在B中:";cout< B.setempty(); for(int j=11; j<20;j++) B.add(j); Set C(B); cout<<"C:";C.disp(); C.reverse(); cout<<"C逆置"< cout<<"C:";C.disp(); } 11. 设计一个职工类Person,一个系有若干个职工,按职务分为系主任、室主任和职工,给出他们之间的领导关系。 【知识点】:2.2 【参考分】:25分 【难易度】:C 【答案】:类Person有姓名、职务和指向领导的指针等私有数据,以及两个构造函数和以下成员函数:setleader()设置当前职工的领导;getname()获取职工姓名;getleader()获取领导者对象指针:disp()输出姓名和职务。程序如下:#include #include #include class Person { char name[10]; char prof[10]; Person *1eader; public: Person(){strcpy(name,"\0");} Person(char n[],char P[]) { strcpy(name,n); strcpy(prof,P); leader=new Person; } void setleader(Person &p){leader=&p;} //对象引用作为参数 char *getname(){return name;) Person *getleader() { return leader; } void disp() { cout< } }; void main() { Person P[ ]={Person("王华","室主任"),Person("李明","职工"), Person("陈强","系主任"),Person("章城","职工"), Person("张伟","室主任"),Person("许源","职工")}; P[0].setleader(P[2]); P[1].setleader(P[0]); P[3].setleader(P[4]); P[4].setleader(P[2]); P[5].setleader(P[4]); cout<<”姓名职务领导姓名”< cout<<” ------ ------ --------”< for(int i=0;i<6;i++) { P[i].disp(); cout< } } 12. 需要求3个长方柱的体积,请编一个基于对象的程序。数据成员包括length(长)、width(宽)、height(高)。要求用成员函数实现以下功能: (1)由键盘分别输入3个长方柱的长、宽、高; (2)计算长方柱的体积; (3)输出3个长方柱的体积。 【知识点】:2.2 2.3 【参考分】:20分 【难易度】:C 【答案】: #include using namespace std; class Box {public: void get_value(); float volume(); void display(); public: float lengh; float width; float height; }; void Box::get_value() { cout<<"please input lengh, width,height:"; cin>>lengh; cin>>width; cin>>height; } float Box::volume() { return(lengh*width*height);} void Box::display() { cout< int main() {Box box1,box2,box3; box1.get_value(); cout<<"volmue of bax1 is "; box1.display(); box2.get_value(); cout<<"volmue of bax2 is "; box2.display(); box3.get_value(); cout<<"volmue of bax3 is "; box3.display(); return 0; } 13. 建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1、3、5个学生的数据。 【知识点】:3.2 【参考分】:20分 【难易度】:C 【答案】: #include using namespace std; class Student {public: Student(int n,float s):num(n),score(s){} void display(); private: int num; float score; }; void Student::display() {cout< int main() {Student stud[5]={ Student(101,78.5),Student(102,85.5),Student(103,98.5), Student(104,100.0),Student(105,95.5)}; Student *p=stud; for(int i=0;i<=2;p=p+2,i++) p->display(); return 0; } 14. 建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。 【知识点】:3.2 【参考分】:20分 【难易度】:C 【答案】: #include using namespace std; class Student {public: Student(int n,float s):num(n),score(s){} int num; float score; }; void main() {Student stud[5]={ Student(101,78.5),Student(102,85.5),Student(103,98.5), Student(104,100.0),Student(105,95.5)}; void max(Student* ); Student *p=&stud[0]; max(p); } void max(Student *arr) {float max_score=arr[0].score; int k=0; for(int i=1;i<5;i++) if(arr[i].score>max_score) {max_score=arr[i].score;k=i;} cout< } 15. 商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。现已知当天3个销货员的销售数量情况为: 销货员号(num) 销货件数(quantity) 销货单价(price) 101 5 23.5 102 12 24.56 103 100 21.5 请编程序,计算出当天此商品的总销售款sum以及每件商品的平均售价。要求用静态数据成员和静态成员函数。 【知识点】:2.2 3.5 【参考分】:30分 【难易度】:B 【答案】: #include using namespace std; class Product {public: Product(int n,int q,float p):num(n),quantity(q),price(p){}; void total(); static float average(); static void display(); private: int num; int quantity; 《面向对象程序设计C++》期末考试试卷(B) 一、单项选择题(每小题2分,共40分) 1、关于C++与C语言关系的描述中,()是错误的。 A.C语言是C++语言的一个子集B.C语言与C++语言是兼容的 C.C++语言对C语言进行了一些改进D.C++语言和C语言都是面向对象的 2、已知:int m=10; 下列表示引用的方法中,()是正确的。 A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m; 3、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z='*'); 下面函数调用中,不合法的是()。 A.testDefaulParam(5); B.testDefaulParam(5,8); C.testDefaulParam(5,'#'); D.testDefaulParam(0,0,'*'); 4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是()。 A.函数的返回值类型B.参数的类型C.函数名称D.参数个数 5、下列有关C++类的说法中,不正确的是()。 A.类是一种用户自定义的数据类型 B.只有类中的成员函数或类的友元函数才能存取类中的私有成员 C.在类中,如果不做特别说明,所有成员的访问权限均为私有的 D.在类中,如果不做特别说明,所有成员的访问权限均为公用的 6、已知X类,则当程序执行到语句X array[3];时,调用了()次构造函数。 A.0 B.1 C.2 D.3 7、有关析构函数的说法,不正确的是()。 A.析构函数有且仅有一个 B.析构函数和构造函数一样可以有形参 C.析构函数的功能是在系统释放对象之前作一些内存清理工作 D.析构函数无任何函数类型 一、填空题(每空1分,共14分) 1、观看以下程序: class point{ public: void show() {cout<<”point”< (A)指针(B)引用(C)枚举(D)结构 3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问。 (A)share (B)public (C)private (D)protected 4、关于构造函数,下列说法不正确的是()。 (A)构造函数名字和类名相同 (B)构造函数在创建对象时自动执行 (C)构造函数无任何函数返回类型 (D)构造函数有且只有一个 5、派生类可以访问其基类的()。 (A)公有成员(B)保护成员 (C)私有派生(D)公有和保护成员 6、下列关于运算符重载的描述中,错误的是()。 (A)运算符重载不可以改变操作数的个数 (B)运算符重载不可以改变运算符的功能 (C)运算符重载不可以改变结合方向 (D)运算符重载不可以改变运算优先级 7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是() (A)面向过程(B)面向对象(C)安全性(D)复用性 8、对于类中定义的成员,其隐含访问权限为()。 A.public B.protected C.private D.static 9、下面有关重载函数的说法中正确的是() (A)重载函数必须具有不同的返回值类型;(B)重载函数形参个数必须不同; (C)重载函数必须有不同的形参列表(D)重载函数名可以不同; 10、有如下的对类“CSample”的说明,其中()是错误的。 class CSample { A.int a=23; B.CSample(); public: C.CSample(int val); D.~ CSample(); 11、在int a=3,int *p=&a;中,*p的值是( ) A.变量a的地址值 B.无意义 C.变量p的地址值 D.3 12、每个类()构造函数。 (A)只能有一个(B)只可有公有的 1、以下正确的说法是( B ) (A) 用户若需要调用标准库函数,调用前必须重新定义 (B) 用户可以重新定义标准库函数,若如此,该函数将失去原有含义 (C) 系统根本不允许用户重新定义标准库函数 (D) 用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调 2、以下正确的函数声明形式是( A ) (A) double fun(int x, int y) (B) double fun(int x; int y) (C) double fun(int x, int y); (D) double fun(int x,y); 3、以下正确的函数形式是( D ) (A) double fun(int x, int y) { z=x+y; return z;} (B) fun(int x,y) { int z; return z;} (C) fun(x,y) { int x,y; double z; z=x+y; return z;} (D) double fun(int x, int y) { double z; z=x+y; return z;} 4、以下正确的说法是( A ) 在C语言中 (A) 实参和与其对应的形参各占用独立的存储单元 (B) 实参和与其对应的形参共占用一个存储单元 (C) 只有当实参和与其对应的形参同名时才共占用存储单元 (D) 形参是虚拟的,不占用存储单元 5、若调用一个函数,且此函数中没有return语句,则正确的说法是( A ) 该函数 (A) 没有返回值 (B) 返回若干个系统默认值 (C) 能返回一个用户所希望的函数值 (D) 返回一个不确定的值 6、以下不正确的说法是( B ) C语言规定 (A) 实参可以是常量、变量和表达式 (B) 形参可以是常量、变量和表达式 (C) 实参可以为任意类型 (D) 形参应与其对应的实参类型一致 7、以下正确的说法是( C ) (A) 定义函数时,形参的类型说明可以放在函数体内 (B) return后边的值不能为表达式 (C) 如果函数值的类型与返回值类型不一致,以函数值类型为准 (D) 如果形参与实参的类型不一致,以实参类型为准 8、C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( B ) (A) 地址传递 (B) 单向值传递 (C) 由实参传给形参,再由形参传回给实参 (D) 由用户指定传递方式 1 什么是面向对象程序设计,它与传统的结构式程序有什么不同。 面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会:这些对象具有足够的智能,能理解从其他对象接受的信息,并以适当的行为作出响应;允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法,将所模拟的现实世界中的事物直接映射到软件系统的解空间。 与传统的结构式程序设计相比,面向对象程序设计吸取了结构式程序设计的一切优点(自顶向下、逐步求精的设计原则)。而二者之间的最大差别表现在: ·面向对象程序采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结构式程序由于数据和过程分离引起的弊病。 · 面向对象程序是由类定义、对象(类实例)和对象之间的动态联系组成的。而结构式程序是由结构化的数据、过程的定义以及调用过程处理相应的数据组成的 2 用面向对象方法建立模型的思维过程是怎样的。 用面向对象方法建立拟建系统的模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段,其中:·知性思维是从感性材料中分解对象,抽象出一般规定,形成了对对象的普遍认识。·具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律,其目的是把握具体对象的多样性的统一和不同规定的综合。 3 解释以下概念: ①对象:在现实世界中,对象就是可以感觉到的实体。每个对象具有一个特定的名字以 区别于其他对象;具有一组状态用来描述它的某些特性;具有一组操作,每一个操作决定对象的一种功能或行为(为自身服务的操作和为其他对象提供服务的操作)。而在面向对象系统中,对象是可以标识的存储区域。每个对象的状态被保存在此区域中,而实现一类对象行为的操作(代码)被保存在另外相关的存储器区域中。 ②消息:消息是要求某个对象执行其某种功能操作(方法)的规格说明。因此,消息是 由消息的接收者、消息要求提供的操作(消息名)和必要的参数组成的。 ③类:在现实世界中,类是对一组具有共同特性(属性和行为)的客观对象的抽象。而 在面向对象系统中,类是由程序员自定义的具有特定结构和功能的类型,是一种代码共享的手段。 ④实例:任何一个对象都是该对象所属类的一个具体实例。 ⑤公有消息:是由对象外向对象发送的消息,用于激活该对象的某种方法。 ⑥私有消息:是由对象向自身发送的消息,用于内部操作;该类消息不能从对象外向该 对象发送。 ⑦消息序列:在面向对象系统中一个事件的发生总会有多个对象的多次相互作用才能完 成,使得这些对象能够相互作用的消息组成的序列被称为消息序列。 4 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。 一、单项选择题 1、下列哪个类型的对象是https://www.doczj.com/doc/c214262866.html,在非连接模式下处理数据内容的主要对象? (D ) A. Command B. Connection C. DataAdapter D. DataSet 2、枚举类型是一组命名的常量集合,所有整形都可以作为枚举类型的基本类 型, 如果类型省略,则定义为( A )。 A. int B. sbyte C. uint D. ulong 3、创建数据库连接使用的对象是( A )。 A. Connection B. Command C. DataReader D. DataSet 4、C#中导入某一命名空间的关键字是( A )。 A. using B. use C.import D. include 5、一般情况下,异常类存放在什么命名空间中?( B )。 A. 生成异常类所在的命名空间 B. System.Exception命名空 间 C. System.Diagnostics命名空间 D. System命名空间 6、若将数据库中的数据填充到数据集,应调用SqlDataAdapter的( C )方 法。 A. Open B. Close C. Fill D. Update 7、若将数据集中所作更改更新回数据库,应调用SqlAdapter的(A )方法。 A. Update B. Close C. Fill D. Open 8、在使用FileStream 打开一个文件时,通过使用FileMode 枚举类型的( A ) 成员,来指定操作系统打开一个现有文件并把文件读写指针定位在 文件尾部。 A. Append B. Create C. CreateNew D. Truncate 9、在菜单项File中,为将F设为助记符,应将该菜单项的Text属性设置为 (B )。 A. @File B.&File C. %File D._File 10、指定操作系统读取文件方式中的FileMode .Create的含义是( D)。 A. 打开现有文件 B. 指定操作系统应创建文件,如果文件存在,将出现异常 C. 打开现有文件,若文件不存在,出现异常 D. 指定操作系统应创建文件,如果文件存在,将被改写 11、枚举类型是一组命名的常量集合,所有整形都可以作为枚举类型的基本类 型,如果类型省略,则定义为( D )。 A. uint B. sbyte C. ulong D. int 12、当运行程序时,系统自动执行启动窗体的( C )事件。 A. Click B.DoubleClick C. Load D. Activated《面向对象程序设计C 》期末试卷及标准答案
c面向对象程序设计试题和答案(经典题目)
c语言试题及答案
什么是面向对象程序设计
c 试题及答案
《面向对象程序设计》答案