版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
习题1选择题1、最初的计算机编程语言是(A)。A、机器语言 B、汇编语言 C、高级语言 D、低级语言2、下列语言属于计算机低级语言的是(C)。A、C语言 B、Basic语言 C、汇编语言 D、C++语言3.下列语言不属于高级语言的是(B)。A、C语言 B、汇编语言 C、FORTRAN语言 D、C++语言4.下列不是面向对象程序设计的主要特征(A)。A、结构 B、继承 C、多态 D、封装5.C++语言对C语言做了很多改进,下列描述中,使得C语言发生了质变,从面向过程变成了面向对象(D)。A、增加了一些新的运算符 B、允许函数重载,并允许设置缺省参数C、规定函数说明必须用原型 D、引进了类和对象的概念6.对于C++的支持程序方式,下列说法正确的是(C)。A、C++只支持结构化程序设计 B、C++只支持面向对象程序设计C、C++既支持结构化程序设计又支持面向对象程序设计D、上述说法全不正确7.在C++中,源文件变为可执行程序需要编译、连接。下面关于它们的陈述正确的是(A)。A、编译程序把高级语言程序翻译成目标语言程序B、编译程序把源语言程序翻译为可执行程序C、连接程序是把源语言连接起来成为可执行程序D、编译程序直接把源语言翻译成机器语言8.在C++中,源文件变为可执行程序的正确顺序应该是(B)。A、编辑、连接、编译、执行 B、编辑、编译、连接、执行C、编译、编辑、连接、执行 D、编译、连接、编辑、执行9.关于C++主函数特性,下列叙述正确的是(D)。A、主函数在同一个C++文件中可以有两个 B、主函数类型必须是void类型C、主函数一定有返回值 D、每个C++程序都必须有一个main()函数10.下列程序中,注释有误的是(B)。A、cout<<”请输入两个数值:\n”;//提示输入数值B、cout<<”请输入两个数值:\n”;/*提示输入数值C、cout<<”请输入两个数值:\n”;/*提示输入数值*/D、cout<<”请输入两个数值:\n”;/*//提示输入数值*/上机题1.在屏幕上输出以下信息:WeclometoC++!参考程序:#include<iostream>usingnamespacestd;intmain(){cout<<”Weclome”<<endl;cout<<”to”<<endl;cout<<”C++!”<<endl;}2.在屏幕上打印出以下图形:**********************************************C++程序设计**********************************************参考程序:#include<iostream>usingnamespacestd;intmain(){cout<<”*************************************”<<endl;cout<<”*********C++程序设计*********”<<endl;cout<<”*************************************”<<endl;}3.调试以下程序,并改正错误。Usingnamespacestd#include<iostream>;Usingstd::endl;intmain()floatnum1,num2,num3;cin<<num1<<num2<<num3;cout>>“Theaverageis”>>setw(30)>>num1*num2*num3>>endl;}错误分析:关键字Using中包含了大写字母,应改为using;usingnamespacestd不是预处理指令,要以分号结尾;#include<iostream>;是预处理指令,不能以分号结尾,而且要作为程序的开头行;使用了usingnamespacestd,就不必单独使用std::endl;;intmain()后缺少左括号{;cin通常与提取操作符>>连用;cout通常与提取操作符<<连用;“Theaverageis”为中文引号,须改为英文引号;使用setw(30)必须包含头文件iomanip修改后的代码如下所示:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){floatnum1,num2,num3;cin>>num1>>num2>>num3;cout<<”Theaverageis”<<setw(30)<<num1*num2*num3<<endl;}习题2选择题1、最初的计算机编程语言是(A)。A、机器语言 B、汇编语言 C、高级语言 D、低级语言2、下列语言属于计算机低级语言的是(C)。A、C语言 B、Basic语言 C、汇编语言 D、C++语言3.下列语言不属于高级语言的是(B)。A、C语言 B、汇编语言 C、FORTRAN语言 D、C++语言4.下列不是面向对象程序设计的主要特征(A)。A、结构 B、继承 C、多态 D、封装5.C++语言对C语言做了很多改进,下列描述中,使得C语言发生了质变,从面向过程变成了面向对象(D)。A、增加了一些新的运算符 B、允许函数重载,并允许设置缺省参数C、规定函数说明必须用原型 D、引进了类和对象的概念6.对于C++的支持程序方式,下列说法正确的是(C)。A、C++只支持结构化程序设计 B、C++只支持面向对象程序设计C、C++既支持结构化程序设计又支持面向对象程序设计D、上述说法全不正确7.在C++中,源文件变为可执行程序需要编译、连接。下面关于它们的陈述正确的是(A)。A、编译程序把高级语言程序翻译成目标语言程序B、编译程序把源语言程序翻译为可执行程序C、连接程序是把源语言连接起来成为可执行程序D、编译程序直接把源语言翻译成机器语言8.在C++中,源文件变为可执行程序的正确顺序应该是(B)。A、编辑、连接、编译、执行 B、编辑、编译、连接、执行C、编译、编辑、连接、执行 D、编译、连接、编辑、执行9.关于C++主函数特性,下列叙述正确的是(D)。A、主函数在同一个C++文件中可以有两个 B、主函数类型必须是void类型C、主函数一定有返回值 D、每个C++程序都必须有一个main()函数10.下列程序中,注释有误的是(B)。A、cout<<”请输入两个数值:\n”;//提示输入数值B、cout<<”请输入两个数值:\n”;/*提示输入数值C、cout<<”请输入两个数值:\n”;/*提示输入数值*/D、cout<<”请输入两个数值:\n”;/*//提示输入数值*/上机题1.在屏幕上输出以下信息:WeclometoC++!参考程序:#include<iostream>usingnamespacestd;intmain(){cout<<”Weclome”<<endl;cout<<”to”<<endl;cout<<”C++!”<<endl;}2.在屏幕上打印出以下图形:**********************************************C++程序设计**********************************************参考程序:#include<iostream>usingnamespacestd;intmain(){cout<<”*************************************”<<endl;cout<<”*********C++程序设计*********”<<endl;cout<<”*************************************”<<endl;}3.调试以下程序,并改正错误。Usingnamespacestd#include<iostream>;Usingstd::endl;intmain()floatnum1,num2,num3;cin<<num1<<num2<<num3;cout>>“Theaverageis”>>setw(30)>>num1*num2*num3>>endl;}错误分析:关键字Using中包含了大写字母,应改为using;usingnamespacestd不是预处理指令,要以分号结尾;#include<iostream>;是预处理指令,不能以分号结尾,而且要作为程序的开头行;使用了usingnamespacestd,就不必单独使用std::endl;;intmain()后缺少左括号{;cin通常与提取操作符>>连用;cout通常与提取操作符<<连用;“Theaverageis”为中文引号,须改为英文引号;使用setw(30)必须包含头文件iomanip修改后的代码如下所示:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){floatnum1,num2,num3;cin>>num1>>num2>>num3;cout<<”Theaverageis”<<setw(30)<<num1*num2*num3<<endl;}习题3选择题1.在C++中,函数原型不能标识(D)A.函数的返回类型B.函数参数的个数C.函数参数类型D.函数的功能2.在参数传递过程中,对形参和实参的要求是(B)。A.函数定义时,形参一直占用存储空间B.实参可以是常量、变量或表达式C.形参可以是常量、变量或表达式D.形参和实参类型和个数都可以不同3.决定C++语言中函数的返回值类型的是(D)。A.return语句中的表达式类型B.调用该函数时系统随机产生的类型C.调用该函数时的主调用函数类型D.在定义该函数时所指定的数据类型4.设已定义i和k为int类型变量,则以下for循环语句(C)。for(i=0;i!=0;i++)cout<<"****n";A.判断循环结束的条件不合法B.是无限循环C.循环一次也不执行D.循环只执行一次5.执行以下程序段后,输出的结果为(C)inta=4,b=5,t=0;if(a>b)t=a;a=b;b=t;cout<<”a=”<<a<<”,b=”<<b<<endl;A.a=5,b=4B.a=4,b=5C.a=5,b=0D.语法错误上机题编写一个判断一个数是否是完数的函数,用main()函数调用。并求10—100以内的完数有哪些?#include<iostream>usingnamespacestd;//调用函数intisPerfectNum(intn)//判断n是否为完数,如果是,则返回1,否则返回0.{inti,s=0;for(i=1;i<n;i++)//遍历小于n的整数。if(n%i==0)//可以整除,为真因子。s+=i;//累加每个真因子到s上。if(s==n) return1;//符合完数条件,返回1。elsereturn0;//不是完数,返回0。}//主函数intmain(){for(inti=10;i<=100;i++) { if(isPerfectNum(i))//判断是否为完数,并输出结果。 cout<<i<<"是完数"<<endl; else cout<<i<<"不是完数"<<endl; } return0;}编写一个函数,求一个圆的面积。以半径为函数参数,返回值为函数的面积。用main()函数调用.#include<iostream>usingnamespacestd;//调用函数doublearea(doubler){return3.14*r*r;}//主函数intmain(){doubler;cout<<"请输入圆的半径r(cm):";cin>>r;cout<<"该圆的面积为:"<<area(r)<<"平方厘米"<<endl;return0;}3.输入一个8位二进制数,将其转换为十进制数输出。(可利用第1题的函数)例如:11012=1(23)+1(22)+0(21)+1(20)=1310所以,如果输入1101,则应输出13。#include<iostream>usingnamespacestd;//调用函数//计算x的n次方doublepower(doublex,intn);{inti;doubled=1;for(i=0;i<n;i++)d*=x;returnd;}//主函数intmain(){intvalue=0;charch;cout<<"请输入一个8位2进制的数:\n";for(inti=7;i>=0;i--){cin>>ch;if(ch=='1')value+=static_cast<int>(power(2,i));if(ch>'1'){cout<<"输入的值不符合要求"<<endl;break;}}cout<<"该数转化成10进制的数为:\n"<<value<<endl;;return0;}4.输入两个正整数m和n(1<m,n<1000000000),求其最大公约数和最小公倍数。/*#include<stdio.h>voidmain(){ inta,b,i,j,x,y; while(scanf("%d%d",&a,&b)!=EOF) { x=a;y=b; while(a!=b) { if(a>b)a-=b; if(a<b)b-=a; } i=a;j=x*y/i; printf("%d%d\n",i,j); }}*/#include<stdio.h>intfum(longintx,longinty);voidmain(){ longintx,y,m,n; while(scanf("%d%d",&x,&y)!=EOF) {m=fum(x,y); n=x*y/m; printf("%d%d\n",m,n); }}intfum(longintx,longinty){ intm; m=x<y?x:y; while(x%m!=0||y%m!=0) m--; returnm;}5.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。#include<iostream>usingnamespacestd;voidprime(inta){ if(a==1) cout<<"notprime"; elseif(a==2||a==3) cout<<"prime"; else for(inti=2;i<=a/2;i++) { if(a%i==0) { cout<<"notprime"; break; } elseif(i==a/2) cout<<"prime"; }}intmain(){ intn; cin>>n; prime(n); return0;}习题4选择题1、下列关于结构的语法错误的是(D)A、结构是由用户自定义的一种数据类型B、结构中可设定若干个不同数据类型的成员C、结构中成员的数据类型可以是另一个已定义的结构D、在定义结构时,可以为成员设置默认值2、设有以下说明,则下面不正确的叙述是(C)。union{inti;charc;floatf;}un;A、un所占的内存长度等于成员f的长度B、un的地址和它的成员地址都是同一地址C、un可以作为函数参数D、不能对un赋值,但可以在定义un时对它初始化3、下列对字符数组进行初始化的语句正确的是(A) A、chara[]="Hello";B、chara[][]={'H','e','l','l','o'}; C.chara[5]="Hello"; D、chara[2][5]={"Hello","World"};4、有定义如下:inta[5],*p;则下列描述错误的是(B) A、表达式p=p+1是合法的 B、表达式a=a+1是合法的 C、表达式p-a是合法的 D、表达式a+2是合法的5、设有说明:inta[][4]={1,2,3,4,5,6,7,8,9,10},*p=*(a+1);以下可得数值为9的表达式是(B) A、p+=3,*p++ B、p+=4,*(p++) C、p+=4,*++p D、p+=4,++*p填空题charst[20]="hello\0\t\\\";printf(%d%d\n",strlen(st),sizeof(st));则输出的内容是5,20。2、inta[5]={100,200,300,400,500},*p1=&a[0];则表达式(*p1)++的值是100执行以下程序后,y的值是10intmain(){ inta[4]={2,4,6};inty=0,*p=a; for(;*p++;)if(*p)y+=*p; cout<<y<<endl;}3、阅读下列程序intmain(){ inta[3][3]={1,0,2,2,2,0,0,1,0}; inti,j; for(i=0;i<3;i++) for(j=0;j<3;j++) { a[i][j]=a[a[i][j]][a[j][i]]; cout<<a[i][j]<<'\t'; } return0;}以上程序的运行结果为220002222。编程题1、编写程序定义一个结构体数据类型并说明一个结构体数据类型的数组,然后说明个结构体指针变量,通过指针变量输出该数组中各元素的值,要求输出结果如下所示:学号姓名数学C++1张三87982李四67823王刚54604刘丽100905陈军8895#include<iostream.h>#include<string.h>typedefstruct{ charNumber[12];//存放学生学号 charName[12];//存放学生姓名 //intEnglishScore;//存放学生英语成绩 intMathScore;//存放学生数学成绩 intCPPScore;}student;voidmain(){ intn=0; studentst[10];//说明一个Student的结构体变量数组 student*p; p=st; cout<<"请输入学生的人数内n="; cin>>n; for(inti=0;i<n;i++) { cout<<"请输入第"<<i+1<<"学生的学号:"; cin>>p->Number; cout<<"请输入第"<<i+1<<"学生的名字:"; cin>>p->Name; cout<<"请输入第"<<i+1<<"学生数学成绩:"; cin>>p->MathScore; cout<<"请输入第"<<i+1<<"学生c++成绩:"; cin>>p->CPPScore; p++;} cout<<endl; cout<<"学号"<<"姓名"<<"数学"<<"C++"<<endl; for(intj=0;j<n;j++)//输出成绩 { p--; cout<<p->Number<<""<<p->Name<<""<< p->MathScore<<""<<p->CPPScore<<endl; }}编写一个程序,实现将用户输入的一个字符串中所有字符’a’删除,并输出结果。#include<iostream>usingnamespacestd;#defineMAX1000
intmain(){ charsource[MAX]; chartemp[MAX]; inti,j,len; cout<<"请输入一个字符串:"<<endl; gets(source); len=strlen(source); for(i=0,j=0;i<len;i++) { if(source[i]=='a'||source[i]=='A') continue; temp[j++]=source[i]; } temp[j]='\0'; strcpy(source,temp); cout<<"删除c字符后的字符串:"<<endl; puts(source); return0;}3、从输入的一行字符串中求出最长英文单词长度及最长单词个数,并输出长度和个数,单词之间只能用一个或多个空格隔开。如输入字符串”Iamastudent”时,最长单词的长度为7,个数为1。而输入字符串”wordbodybooktry”时,最长单词的长度为4,个数为3,即有三个单词均为最长单词。#include<iostream.h>intlenofLongest(char*s,int&num){ intmaxlen=0,curlen=0; num=0;for(;*s!=’\0’;){ while(*s=='') s++;//跳过空格if(*s!='\0') {while(*s!=''&&*s) { curlen++; s++; }if(curlen>maxlen) {maxlen=curlen; num=1; }elseif(curlen==maxlen) num++;curlen=0;} } returnmaxlen;}intmain(){ charstr[256]; intnumber,len; cout<<"输入一个英文句子:"; cin.getline(str,256); len=lenofLongest(str,number); cout<<"str="<<str<<'\n'; cout<<"最长单词长度:"<<len<<"\n最长单词个数:"<<number<<endl; return0;}4、编写一个程序,寻找二维数组中每一行的最大值。#defineN5#defineM5voidmax(inta[N][M]){ inti,j,p; for(i=0;i<N;i++){ ; for(j=1;j<M;j++) if(a[i][p]<a[i][j]) ; cout<<i<<":"<<a[i][p]<<endl;}}习题5一、填空题面向对象的基本特征是:、、、。一个对象向另一个对象发出的服务请求称为。类定义的关键字是。类的数据成员通常表示类的,类的函数成员通常指对类数据的操作,又称为。类的访问限定符包括、和。类成员默认的访问方式是。在创建对象时由系统自动调用的函数称为,其访问属性应为,其名和相同。对象生命周期结束时,系统自动调用的函数称为。动态对象的创建通过使用关键字,建立对象时自动调用。动态对象撤销使用关键字,同时自动调用。类中所有对象共享的数据称为,使用关键字修饰,初始化只能在进行。答案:抽象封装继承多态消息class属性行为publicprotectedprivateprivate构造函数public类名析构函数new构造函数delete析构函数静态数据成员static类外二、选择题数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是(A)。A、类 B、对象 C、函数体 D、数据块下列说法中正确的是(B)。A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员有如下类定义:classA{ intb; public: A(inti=0):b(i){} voidsetValue(intn);};下列关于setValue成员函数的实现中,正确的是(B)。A、sample::setValue(intn){b=n;}B、voidA:setValue(intn){b=n;}C、voidsetValue(intn){b=n;}D、setValue(intn){b=n;}在下面的类定义中,错误的语句是(C)。classB{public:B(intf); //①~B();//②private: inta=4;//③public: B();//④};A、① B、② C、③ D、④关于构造函数的叙述,错误的是(C)。A、构造函数可以设置默认参数B、构造函数不能是内联函数构造函数的定义只能在类体内D、构造函数可以重载在下列函数原型中,可以作为类A拷贝构造函数的是(B)。A、voidA(A*s);B、A(A&s);C、A(A*s);D、A(As)下列函数中,不是类的成员函的是(D)。A、构造函数B、拷贝构造函数C、析构函数D、友元函数有如下类定义:classA{ inta;public: intgetRef()const{return&a;}//① intgetValue()const{returna;} //② voidset(intn)const{a=n;} //③ friendvoidshow(Aaa)const{cout<<a;} //④};其中的四个函数定义中正确的是(B)。A、 ① B、② C、③ D、④返回类型为int,return&a为地址②返回类型为int,return的a值③常函数不能修改成员④友元函数不能是常函数下列有关拷贝构造函数的说法中,错误的是(A)。拷贝构造函数可以有多个参数拷贝构造函数名与类名相同类中只有一个拷贝构造函数拷贝构造函数无返回值常成员必须在初始化列表中初始化②常函数不能修改成员④静态函数要通过对象访问成员有如下类定义:classTest{public: Test(){a=0;c=0;} //①常成员必须在初始化列表中初始化 intf(inta)const{this->a=a;} //②常函数不能修改成员 voidh(intb){Test::b=b;}; //③ staticintg(){returna;} //④静态函数要通过对象访问成员private: inta; staticintb; constintc;};intTest::b=0;在标注号码的行中,能被正确编译的是(C)。A、① B、② C、③ D、④三、简答题简单解释什么是面向对象程序设计的封装性、继承性、多态性。简单描述构造函数、析构函数的特点和性质。拷贝构造函数在什么哪些情况下需要定义?简述c++中this指针的特点和性质。友元关系有何性质?友元关系的优点和缺点各有哪些?答案:封装是将抽象得到的数据和行为放在一起,形成一个实体——对象,并尽可能隐蔽对象的内部细节。继承是指特殊类的对象拥有其一般类的全部属性与行为,被继承的类称为基类,通过继承得到的新类称为派生类。多态是指不同的对象收到相同的信息时时执行不同的操作。构造函数的特点:不需要用户来调用,定义对象时被自动执行。构造函数名与类名相同,无返回类型。构造函数可以访问类中所有成员,可以不带任何参数,可以带参数表和默认值。构造函数还可以重载,如果用户没有定义构造函数,系统会自动定义一个无参的默认构造函数。析构函数具有如下特点:析构函数名与类名相同,但在类名前加“~”字符。析构函数没有返回值,没有参数,不能被重载,一个类仅有一个析构函数。析构函数一般由用户自定义,对象消失时系统自动调用。如果用户没有定义析构函数,系统将自动生成一个不作任何工作的默认析构函数。3、以下三种情况会调用拷贝构造函数:当函数的形参为类的对象,将对象作为函数实参传递给函数的形参时。当函数的返回值是类的对象,创建临时对象时。当用类的一个对象初始化另外一个对象时。4、this指针的特点:
(1)this指针只能在成员函数中使用;(2)this指针在成员函数开始前构造,在成员函数结束后清除,生命周期和其他函数参数一样。(3)this指针会因编译器不同而有不同的放置位置。5、友元可以是另一个类的成员函数或者不属于任何一个类的普通函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元的性质:友元关系不能被继承,友元关系是单向的,不具有交换性。友元关系不具有传递性。四、写出程序程序执行结果。1、#include<iostream>usingnamespacestd;classC{ intn;public: C(intk):n(k){} intget(){returnn;} intget()const{returnn+1;}};intmain(){ Ca(5); constAAb(6); cout<<a.get()<<”,”<<b.get(); return0;}2、#include<iostream>usingnamespacestd;classTest{ private: staticintval; inta; public: staticintfunc(); voidsfunc(Test&r);};intTest::val=200;intTest::func(){ returnval++;}voidTest::sfunc(Test&r){ r.a=125; cout<<"Result3="<<r.a<<endl;}voidmain(){ cout<<"Result1="<<Test::func()<<endl; Testa; cout<<"Result2="<<a.func()<<endl; a.sfunc(a);}5,7Result1=200Result2=201Result3=125五、编程题定义一个立方体类Box,计算输出立方体的体积和面积。#include<iostream>usingnamespacestd;classBox{public: Box(intl,intw,inth) { length=l; width=w; height=h; } intArea() { inta=width*height*2+width*length*2+length*height*2; returna; } intVolume() { returnlength*width*height; }private: intlength;//长 intwidth;//宽 intheight;//高};voidmain(){ Boxb(5,3,5); cout<<"立方体的面积为:"<<b.Area()<<endl; cout<<"立方体的体积为:"<<b.Volume()<<endl;}定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并计算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,默认值为0,周长和面积在构造函数中生成)和拷贝构造函数。#include<iostream>usingnamespacestd;classCircle{public: Circle(intr=0) { radius=r; area=3.14*r*r; girth=2*3.14*r; } Circle(Circle&c) { radius=c.radius; area=c.area; girth=c.girth; } voidshow() { cout<<"半径为:"<<radius<<"\n周长为:"<<girth<<"\n面积为:"<<area<<endl; }private: doubleradius;//半径 doublearea;//面积 doublegirth;//周长};voidmain(){ Circlec(2); c.show();}设计一个人员类(Person)。数据成员包括身份证号(IdPerson)、姓名(Name)、性别(Sex)、生日(Birthday)和家庭住址(HomeAddress)。成员函数包括人员信息的录入和显示,还包括构造函数与拷贝构造函数。#include<iostream>usingnamespacestd;classPerson{public: Person(chara[],charb[],charc[],chard[]) { strcpy_s(ID,strlen(a)+1,a); strcpy_s(name,strlen(b)+1,b); strcpy_s(sex,strlen(c)+1,c); strcpy_s(address,strlen(d)+1,d); cout<<"调用构造函数"<<endl; } ~Person() { cout<<"调用析构函数"<<endl; } voidset(chara[],charb[],charc[],chard[]) { strcpy_s(ID,strlen(a)+1,a); strcpy_s(name,strlen(b)+1,b); strcpy_s(sex,strlen(c)+1,c); strcpy_s(address,strlen(d)+1,d); } voidshow() { cout<<"身份证号:"<<ID<<"\n姓名:"<<name<<"\n性别:"<<sex<<"\n家庭住址:"<<address<<endl; }private: charID[20];charname[20]; charsex[8]; charaddress[50];};voidmain(){ Persons("1002","Angle","女","北京市"); s.show(); s.set("1002","Angle","女","上海市"); s.show();}设计如下类:建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。设计三个类的相应的构造函数,完成初始化和对象赋值。设计Triangle类的成员函数,判断三条边是否能构成三角形,并计算和显示三角形面积。#include<iostream>#include<cmath>usingnamespacestd;classPoint{public: doublex; doubley; Point(doublea,doubleb) { x=a; y=b; cout<<"调用点构造函数"<<endl; }};classLine{public: Line(Pointn,Pointm):a(n),b(m) { cout<<"调用线段构造函数"<<endl; } doubleLength() { length=pow((a.x-b.x),2)+pow((a.y-b.y),2); length=sqrt(length); returnlength; }private: Pointa,b; doublelength;};classTriangle{private: doublearea; Linex1,x2,x3;public: Triangle(Linea1,Linea2,Linea3):x1(a1),x2(a2),x3(a3) { cout<<"调用三角形构造函数"<<endl; } voidArea() { //判断三条线段是否能构成三角形 if((x1.Length()+x2.Length())>x3.Length()&&(x2.Length()+x3.Length())>x1.Length()&&(x1.Length()+x3.Length())>x2.Length()) { doubles; s=(x1.Length()+x2.Length()+x3.Length())/2.0; area=s*(s-x1.Length())*(s-x2.Length())*(s-x3.Length()); area=sqrt(area); cout<<"三角形面积为:"<<area<<endl; } else cout<<"无法构成三角形!"<<endl; }};voidmain(){ Linea1(Point(0,0),Point(3,0)); Linea2(Point(3,0),Point(3,4)); Linea3(Point(0,0),Point(3,4)); Trianglet(a1,a2,a3); t.Area();}习题6二、程序分析题:1、请分析下面程序,指出一处错误,修改后给出运行结果:/*****************************************程序名:exesize_6.cpp说明:习题6代码示例2*****************************************/#include<iostream>usingnamespacestd;classA{public:A(inti){cout<<“constructingA”<<endl;}~A(){cout<<“destructingA”<<endl;}};classB{B(inti){cout<<“constructingB”<<i<<endl;}~B(){cout<<“destructingB”<<endl;}};classC:publicA,virtualpublicB{private:Bobjb;public:C(inti,intj,intk):A(i),B(j),objb(k){cout<<“constructingC”<<k<<endl;}~C(){cout<<“destructingC”<<endl;}};voidfunc(inti,intj,intk){Cobj(i,j,k);}intmain(){func(1,2,3);return0;}2、请画出程序中的一处错误,并说明原因:/*****************************************程序名:exesize_6.cpp说明:习题6代码示例3*****************************************/#include<iostream>usingnamespacestd;classA{public:voidfunc1(){cout<<“A.func1”<<endl;}};classB{public:voidfunc1(){cout<<“B.func1”<<endl;}voidfunc2(){cout<<“B.func2”<<endl;}};classC:publicA,publicB{public:voidfunc2(){cout<<“C.func2”<<endl;}voidfunc3(){func1();}};答案:1.第15行加public:2.第19行明确指明是调用哪个基类的func1(),如A::func1()习题7二、程序分析题1、请分析下面代码,给出运行结果:/*****************************************程序名:execise7.cpp说明:第7章习题示例代码1*****************************************/#include<iostream>usingnamespacestd;classA{public:virtualvoidf(){cout<<“1”;}};classB:publicA{public:B(){cout<<“2”;}};classC:publicB{public:virtualvoidf(){B::f();cout<<“3”;}};intmain(){Aobja,*pa;Bobjb;Cobjc;p=&objc;p->f();return0;}2、请读程序,并将下列程序补充完整:/*****************************************程序名:execise7.cpp说明:第7章习题示例代码1*****************************************/#include<iostream>usingnamespacestd;classBase{public:voidfunc(){cout<<“Base.func”<<endl;}};classDerived:publicBase{public:voidfunc(){cout<<“Derived.func”<<endl;}};intmain(){Base*p=newDerived;p->func();//运行输出Derived.funcdeletep;return0;}答案:1.22132.Virtual习题8二、程序分析题:1、根据含有函数模板和重载函数的代码判断主函数中各个max函数语句调用的是哪个函数,代码如下:/*****************************************程序名:exesize_8.cpp说明:习题8代码示例1*****************************************/template<typenameT>Tmax(Tx,Ty){return(x>y)?x:y;}intmax(intx,inty){return(x>y)?x:y;}intmain(){charch=5;intn=10;max(ch,ch);//调用max(n,n);//调用max(ch,n);//调用max(n,ch);//调用return0;}2、分析下列程序的运行结果/***程序名:exesize_8.cpp说明:习题8代码示例2***/template<typenameT>classTest{Tx;public:Test(){}Test(Tx){this->x=x;}Test<T>&operator+(Test<T>&Y){staticTest<T>temp;temp.x=x+Y.x;returntemp;}voidShow(){cout<<“x=”<<x;}};intmain(){Test<int>a(5.6),b(4.3);a=a+b;a.Show();return0;}答案:1.Tmax(Tx,Ty)intmax(intx,inty)intmax(intx,inty)编译器不同可能会报错intmax(intx,inty)编译器不同可能会报错2.x=9三、编程题1、设计一个栈的类模板,使栈可以是任意类型的数据。(栈是先入后出的存储结构)栈模板#include<iostream>usingnamespacestd;template<classT>classStack{private:intsize;inttop;T*space;public:Stack(int=5);~Stack(){delete[]space;}boolpush(constT&);Tpop();boolIsEmpty()const{returntop==size;}boolIsFull()const{returntop==0;}};template<classT>Stack<T>::Stack(intsize){this->size=size;space=newT[size];top=size;}template<classT>boolStack<T>::push(constT&element){if(!IsFull()){space[--top]=element;returntrue;} returnfalse;}template<classT>TStack<T>::pop(){returnspace[top++];}习题9选择题1.执行以下程序:char*s;cin>>s;cout<<s;若输入2345aabbcc↙则输出(D)。A、aabbcc B、2345aabbcc C、2345 D、输出乱码或出错2.磁盘上已存在某个文本文件,它的全路径文件名为e:\c++\test.txt,则下列语句中不能打开这个文件的是(C)。A、ifstreamifile;ifile.open(“e:\\c++\\test.txt”);B、ifstreamifile(“e:\\c++\\test.txt”);C、ifstreamifile(“e:\c++\test.txt”);D、ifstream*iFile=newifstream(“e:\\c++\\test.txt”);3.cout是I/O流库预定义的(B)。A、类B、对象C、包含文件D、常量4.下列关于输入流类成员函数getline()的描述中,错误的是(D)。A、该函数是C++标准库函数。B、该函数读取字符串时,输入达到最大限度便停止。C、该函数读取字符串时,遇到终止符便停止。D、该函数是用来读取键盘输入的字符串的。5.当要建立一个文件,并从其中读数据和向其中写数据时,应该建立下面哪种流类的对象(C)。A、ifstreamB、ofstreamC、fstreamD、ios6.关于read(char*s,intn)函数的下列描述中,(D)是对的。A、函数只能从键盘输入中获取字符串B、函数所获取的字符多少是不受限制的C、该函数只能用于文本文件的操作中D、该函数只能按规定读取所指定的字符数7.读文件最后一个字节(字符)的语句为(B)。A.myfile.seekg(1,ios::end); B.myfile.seekg(-1,ios::end); f=myfile.get();f=myfile.get();C.myfile.seekp(ios::end,0);D.myfileseekp(ios::end,1); f=myfile.get();f=myfile.get();填空题1.头文件iostream中定义了4个标准流对象cin,cout,cerr,clog。其中标准输入流对象为cin,与键盘连用,用于输入;cout为标准输出流对象,与显示器连用,用于输出。2.用标准输入流对象cin与提取操作符>>连用进行输入时,将空格与回车当作分隔符,使用get()成员函数进行输入时可以指定输入分隔符。3.若要在程序文件中进行标准输入输出操作,则必须在开始的#include命令中使用iostream.h或iostream头文件。4.类ios是所有基本流类的基类,它有子类stringstream,支持面向字符串的输入和输出,其作用是可以用于对同一个字符串的内容交替读写。5.设定、返回文件读指针位置的函数分别为seekg,tellg;设定、返回文件写指针位置的函数分别为seekp,tellp。上机题从键盘输入若干字符(每行长度不等),输入后把它们存储到一磁盘文件中,再从该文件中读入这些数据,并将其中的大写字母转换成小写字母后在显示屏上输出。#include<iostream>intmain(){inti,flag;charstr[80],c;FILE*fp;fp=fopen("text","w");flag=1;while(flag==1){cout<<"inputstring:"<<endl;gets(str);fprintf(fp,"%s",str);cout<<"continue?";c=getchar();if((c=='N')||(c=='n'))flag=0;getchar();}fclose(fp);fp=fopen("text","r");while(fscanf(fp,"%s",str)!=EOF){for(i=0;str[i]!='\0';i++)if((str[i]>='a')&&(str[i]<='z'))str[i]-=32;cout<<str<<endl;}fclose(fp);return0;}2.编写一程序,输出ASCII码值从10到100的ASCII码字符表,格式为每行8个。#include<iostream>usingnamespacestd;intmain(){ inti,l; for(i=10;i<101;i++){ cout<<char(i)<<""; l++; if(l%8==0)cout<<endl; } cout<<endl; return0;}定义一个Student类,其中含学号、姓名、性别、成绩、家庭住址数据成员。建立若干个Student类对象,将它们保存到文件content.dat中。然后显示文件中的内容。#include<iostream.h>#include<string.h>#include<fstream.h>//usingnamespacestd;classStudent{ charId[10]; charName[10]; intScore;public: Student(); Student(char*id,char*name,intscore); Student(Student&s); ~Student(); friendostream&operator<<(ostream&,Student&);};Student::Student(){ strcpy(Id,"00000000"); strcpy(Name,"noname"); Score=-1;}Student::Student(char*id,char*name,intscore){ strcpy(Id,id); strcpy(Name,name); Score=score;}Student::Student(Student&s){ strcpy(Id,s.Id); strcpy(Name,s.Name); Score=s.Score;}Student::~Student(){}ostream&operator<<(ostream&out,Student&stu){ out<<stu.Id<<'\t'<<stu.Name<<'\t'<<stu.Score<<endl; returnout;}习题10选择题1.下面程序段执行完毕后,cont的值是(C)stringstrings[]={"string","starting","strong","street","soft"};intcont=0;for(inti=0;i<strings.length;i++)if(strings[i].endsWith("ng"))cont++;A.、1B、2C、3D、42.定义字符串:Stringstr=“abcdefg”;则str.indexOf(‘d’)的结果是(C)A、'd'B、trueC、3D、43.下列关于字符串的使用中,错误的是(C)。A、Stringstr=newString("String"); B、Stringstr="String"+100; C、Stringstr=100; D、Stringstr=null;4.A、B为string类对象,下列表达式会出现编译错误的是(B)。A、A+=B B、A=B C、A-=B D、A[1]=B[1]编程题输入一个字符串,然后将每一个字符打印显示,重复打印一次。#include<iostream>#include<string.h>#include<stdlib.h>usingnamespacestd;voidprint_string(constchar*str){intlen=strlen(str);for(inti=0;i<len;i++){if(str[i]==0)break;cout<<str[i];}}intmain(){constchar*a="abcd";cout<<print_string(a)<<endl;return0;}给定字符串,去掉所有重复,如abcda返回abcd,或bcdeeeee,返回bcde。#include<iostream>usingnamespacestd;//删除字符串中所有重复的字符,例如google,删除重复字符后为golechar*deleteRepeatedChars(char*s){ if(s==NULL) returns; char*fast=s; char*slow=s; //char为一个字节,8位即能代表0-255 //使用哈希表思想,将字符的acsⅡ码作为下标,值为bool值(0或1)来代表是否重复了 boolarr[256]={0}; while(*fast!='\0') { //当不重复的时候,记录下slow if(arr[*fast]==0) { arr[*fast]=1; *slow=*fast; slow++; } fast++; } *slow='\0';//关键一步,截止字符串s returns; }intmain(){ charaa[7]={"sdsass"}; char*s=aa; cout<<deleteRepeatedChars(s)<<endl;}习题11填空题1、 三种STL容器适配器是 、和。答案:(1)stack(栈)(2)queue(队列)(3)priority_queue(优先级队列)2、成员函数end()通常得到容器的位置,而rend得到容器的位置。答案:(1)最后一个元素的后继位置(2)引用容器第一个元素的前导位置。实际上这是该容器前后反转之后的end()判断题1、适配器是不独立的,它依附于一个顺序容器上,它没有自己的构造函数和析构函数,而借用其实现类的对应函数。(√)2、返回布尔值的函数对象称为谓词(predicate),默认的是小于比较操作符“〉”。 ()3、 C++标准库中给出的泛型算法包括70余 种算法。主要包括以下几类:排序(sorting)、通用整序(ordering)算法、查找算法、删除和代替算法,每一类都有十种以上算法。(√)问答题简述STL中迭代子与C++指针的关系与异同点。答:迭代子包含内存地址的获得,是面向对象版本的指针。迭代子与指针有许多相同之处,但迭代子保存所操作的特定容器需要的状态信息,从而实现与每种容器类型相适应的迭代子。而且有些迭代子操作在所有容器中是一致的,这带来了很大的方便。如++运算符总是返回容器下一个元素的迭代子,就像数组指针++后指向下一个元素;间接引用符“*”,总是表示迭代子指向的容器元素,就像数组指针加*号后代表指针所指的元素。 迭代子在STL中起粘结剂的作用,用来将STL的各部分结合在一起。从本质上说,STL提供的所有算法都是模板,我们可以通过使用自己指定的迭代子来对这些模板实例化。 迭代子可以包括指针,但迭代子又不仅是一个指针。 2、顺序容器包括哪三种?它们各以什么数据结构为基础?各有哪些特点?答:C++标准模板库提供三种顺序容器:vector,list和deque。vector类和deque类是以数组为基础的,list类是以双向链表为基础的。矢量(vector)类提供了具有连续内存地址的数据结构。它和C/C++的数组一样通过下标运算符[ ]直接有效地访问矢量的任何元素。与数组不同,vector的内存用尽时,vector自动分配更大的连续内存区,将原先的元素复制到新的内存区,并释放旧的内存区。内存分配由分配子(allocator)完成。矢量可以用来实现队列、堆栈、列表和其他更复杂的结构。vector支持随机访问迭代子,具有最强的功能。vector的迭代子通常实现为vector元素的指针。列表(list)是由双向链表(doubly linked list)组成的。支持的迭代子类型为双向迭代子。双端队列(deque)(double-ended queue)类。双端队列允许在队列的两端进行操作。它是以顺序表为基础的,所以它能利用下标提供有效的索引访问,它支持随机访问迭代子。它放松了访问的限制,对象既可从队首进队,也可以从队尾进队,同样也可从任一端出队。而且除了可从队首和队尾移走对象外,也支持通过使用下标操作符“[ ]”进行访问。当要增加双端队列的存储空间时,可以在内存块中对deque两端分别进行分配。并且新分配的存储空间保存为指向这些块的指针数组,这样双端队列可以利用不连续内存空间。因此它的迭代子比vector的迭代子更加智能化。为双端队列分配的存储块,往往要等删除双端队列时才释放,它比重复分配(再分配和释放)更有效,但也更浪费内存。使用双端队列容器类来实现矢量容器类所能实现的各种数据结构要更灵活,方便。 3、关联容器有哪四种?简单介绍它们是怎样组成的?各有什么特点?答:四个关联容器为:集合(set),多重集合(multiset),映射(map)和多重映射(multimap)。集合和多重集合类提供了控制数值集合的操作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆清运垃圾合同范例
- 矛盾协商合同范例
- 专利-收益质押合同范例
- 投资股票合同范例
- 入股鞋店合同范例
- 光伏房顶租用合同范例
- 工装拆除合同范例
- 店面门窗合同范例
- 超市配送蔬菜合同范例
- 贷款法律合同范例
- 林黛玉进贾府-图文
- 四年级必读书目练习试题附答案
- 武汉大学2023年623法学基础考研真题(回忆版)
- 国家开放大学建筑结构试验形成性考核册答案
- 2023年辽宁省工程咨询集团有限责任公司校园招聘笔试题库及答案解析
- JT∕T 697.7-2022 交通信息基础数据元 第7部分:道路运输信息基础数据元
- 《上消化道出血诊疗指南》讲稿
- 《谜一样的男人》
- 【教学课件】选必中第一单元单元概览
- 髋关节置换术后护理ppt参考课件
- 印尼公司法中文版
评论
0/150
提交评论