C程序设计与应用基础第三章重载习题答案

合集下载

c++程序设计原理与实践第三章课后答案

c++程序设计原理与实践第三章课后答案

“std_lib_facilities.h”这个头文件是《c++程序设计原理与实践》一直用到的头文件,要将此头文件放在你的文件目录中,下面我给出这个头文件://// This is a standard library support code to the chapters of the book// "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup//#ifndef STD_LIB_FACILITIES_GUARD#define STD_LIB_FACILITIES_GUARD 1#include <iostream>using namespace std;//------------------------------------------------------------------------------// The call to keep_window_open() is needed on some Windows machines to prevent// them from closing the window before you have a chance to read the output.inline void keep_window_open(){cin.get();}//------------------------------------------------------------------------------#endif // STD_LIB_FACILITIES_GUARD将上述代码拷贝到记事本中,把后缀.txt改为.h,放在你的根目录即可引用。

第三章对象,类型和值第6 题#include"std_lib_facilities.h"int main(){int a;int b;int c;int t;cout<<"请您输入三个数:\n";cin>>a>>b>>c;if(a>b)//如果a大于b,将a,b交换.{t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}cout<<a<<","<<b<<","<<c<<endl;}下面是vc6.0的运行结果:第7题#include <iostream>#include<string>using namespace std;//------------------------------------------------------------------------------int main(){cout << "请您输入三个字符串:\n";string first;string second;string third;string space;cin >> first >> second>>third; // 读入三个字符串。

C语言教材第三章课后部分习题答案

C语言教材第三章课后部分习题答案

C语言教材第三章课后部分习题答案( 第三版谭浩强)3.6写出以下程序运行的结果。

main(){char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);printf(“\t\b%c %c”,c4,c5);}解:aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabcAㄩN3.7要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。

因此,"China"应译为"Glmre"。

请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。

解:#include <stdio.h>main(){ char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); }运行结果:密码是Glmre3.9求下面算术表达式的值。

(1)x+a%3*(int)(x+y)%2/4设x=2.5,a=7,y=4.7(2)(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5(1)2.5(2)3.53.10写出程序运行的结果。

main(){int i,j,m,n;i=8;j=10;m=++i;n=j++;printf(“%d,%d,%d,%d”,i,j,m,n);}解:9,11,9,103.12写出下面表达式运算后a的值,设原来a=12。

C语言程序设计(第3版)第3章习题参考答案

C语言程序设计(第3版)第3章习题参考答案

习题三参考答案(1)从键盘输入一个年份值,判断是否闰年。

设iYear为某一年份,iYear为闰年的条件为:iYear可以被4整除且不可以被100整除,或者iYear可以被400整除。

#include "Stdio.h"#include "Conio.h"int main(void){int iYear;printf("please input the year:");scanf("%d",&iYear);if(iYear%400==0||(iYear%4==0&&iYear%100!=0))printf("%d is leap",iYear);elseprintf("%d is not leap",iYear);getch();return 0;}(2)从键盘输入三个整数,按由小到大的顺序输出。

#include "stdio.h"main(){int i,j,k,max;scanf("%d%d%d",&i,&j,&k);max=i>j?i:j;max=max>k?max:k;printf("max=%d",max);getch();}(3)假设星期一至星期五每工作一小时的工资是20元,星期六和星期日每工作一小时的工资是平时的3倍,其中工资的4.5%是税金。

试编一程序从键盘输入星期序号(1,2,3,4,5,6,7,分别表示星期一至星期天)和工作小时数,计算该日的工资及应交税金。

#include "Stdio.h"#include "Conio.h"int main(void){int iWeek,iHours ;float fSalary,fTaxes;printf("please input the week number(1-7):");scanf("%d",&iWeek);printf("please input the work hours(1-12):");scanf("%d",&iHours);switch(iWeek){case 1:case 2:case 3:case 4:case 5:fSalary=20*iHours;fTaxes=fSalary*0.045;break;case 6:case 7:fSalary=3*20*iHours;fTaxes=fSalary*0.045;break;}printf("the salary is %f ,the taxes is %f",fSalary,fTaxes);getch();return 0;}(4)从键盘输入三角形的三条边长,判断是否构成三角形,如能则求出三角形的周长和面积并输出;如不能,输出不能构成三角形的信息。

C语言程序设计(第3版)第3章补充习题及答案

C语言程序设计(第3版)第3章补充习题及答案
char c=’A’;
x=(a&&b)&&(c<’B’);
执行该程序段后,x的值为( )
AtureB falseC 0D 1
(9)以下程序的输出结果是( )
main()
{
int a=0,i=1;
switch(i)
{
case 0:
case 3:a+=2;
case 1:
case 2:a+=3;
default:a+=5;
(2)下面程序的输出结果是
iX=3
iX>3

#include "stdio.h"
main()
{intiX=3;
switch(iX)
{case 1:
case 2:printf("iX<3\n");
case 3:printf("iX=3\n");
case 4:
case 5:printf("iX>3\n");
}
}
(3)以下程序的运行结果是iM=3,iN=4,iT=3。
#include "stdio.h"
main()
{int iM,iN,iT,iA=2,iB=3;
iM=(++iA==--iB)?––iA:++iB;
iN=++iA;
iT=iB;
printf("iM=%d,iN=%d,iT=%d\n",iM,iN,iT);
(4)对switch后括号内的表达式,叙述正确的是C。
A.只能是数字B.可以是浮点数
C.只能是整型数据或字符型数据D.以上叙述都不对

c语言第四版答案第三章,《C语言程序设计》课后习题答案(第三章)

c语言第四版答案第三章,《C语言程序设计》课后习题答案(第三章)

c语⾔第四版答案第三章,《C语⾔程序设计》课后习题答案(第三章)3.3 请写出下⾯程序的输出结果.结果:575 767.856400,-789.12396267.856400,-789.12396267.86,-789.12,67.856400,-789.123962,67.856400,-789.1239626.785640e+001,-7.89e+002A,65,101,411234567,4553207,d68765535,17777,ffff,-1COMPUTER, COM3.4 ⽤下⾯的scanf函数输⼊数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a',问在键盘上如何输⼊?main(){inta,b;floatx,y;charc1,c2;scanf("a=%d b=%d,&a,&b);scanf("x=%f y=%e",&x,&y);scanf("c1=%c c2=%c",&c1,&c2);}解:可按如下⽅式在键盘上输⼊:a=3 b=7x=8.5 y=71.82c1=A c2=a(说明:在边疆使⽤⼀个或多个scnaf函数时,第⼀个输⼊⾏末尾输⼊的"回车"被第⼆个scanf函数吸收,因此在第⼆\三个scanf函数的双引号后设⼀个空格以抵消上⾏⼊的"回车".如果没有这个空格,按上⾯输⼊数据会出错,读者⽬前对此只留有⼀初步概念即可,以后再进⼀步深⼊理解.)3.5 ⽤下⾯的scanf函数输⼊数据使a=10,b=20,c1='A',c2='a',x=1.5,y=-3.75,z=57.8,请问在键盘上如何输⼊数据?scanf("%5d%5d%c%c%f%f%*f%f",&a,&b,&c1,&c2,&y,&z);解:main(){inta,b;floatx,y,z;charc1,c2;scanf("%5d%5d%c%c%f%f",&a,&b,&c1,&c2,&x,&y,&z);}运⾏时输⼊:10 20Aa1.5 -3.75+1.5,67.8(注解:按%5d格式的要求输⼊a与b时,要先键⼊三个空格,⽽后再打⼊10与20。

c运算符的重载习题答案

c运算符的重载习题答案

1.概念填空题1.1运算符重载是对已有的运算符赋予多重含义,使同一个运算符在作用于不同类型对象时导致不同的行为。

运算符重载的实质是函数重载,是类的多态性特征。

1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。

但是这种类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。

类类型转换函数既没有参数,也不显式给出返回类型。

类类型函数中必须有return 表达式的语句返回函数值。

一个类可以定义多个类类型转换函数。

1.3运算符重载时其函数名由operator运算符构成。

成员函数重载双目运算符时,左操作数是对象,右操作数是函数参数。

2.简答题运算符重载的规则。

2.2简述重载单目运算符++、--,前置和后置时的差别。

2.3 C++中重运算符是否都可以重载?是否都可以重载成类的成员函数?是否都可以重载成类的友元函数?2.4 构造函数作为类型转换函数的条件是什么。

3.选择题3.1在下列运算符中,不能重载的是(B)A.!B. sizeofC. newD. delete3.2 不能用友员函数重载的是(A)。

A.=B.==C.<=D.++3.3下列函数中,不能重载运算符的函数是(B)。

A.成员函数B.构造函数C.普通函数D.友员函数3.4如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为(B)。

A.operator*(i.operator++(),k) B.operator*(operator++(i),k)C.i.operator++().operator*(k) D.k.operator*(operator++(i))3.5已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是(B )。

A.这是运算符-的重载运算符函数B.这个函数所重载的运算符是一个一元运算符C.这是一个成员函数D.这个函数不改变数据成员的值3.6在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。

c语言《程序设计基础》课后习题参考答案与解析

c语言《程序设计基础》课后习题参考答案与解析

《程序设计基础》习题参考答案与部分解析第1章 C 语言概述一、填空a) C源程序的基本单位是函数。

b) 一个C程序中至少应包括一个main函数。

c) 在C语言中,输出操作是有库函数printf( )函数完成。

二、单选题1、A2、C3、B解析:第1题答案:A 。

因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。

且到main函数结束。

第2题答案:C 。

因为main函数没有限制必须位于程序的最前面。

C程序书写自由,一行内可写几个语句。

在对一个C 程序进行编译的过程中,无法检查注释当中的拼写错误。

不过C语言本身并没有输入输出语句,输入输出是由函数完成的。

第3题答案:B。

因为一个C语言程序是由若干个函数组成的。

但至少包含一个main 函数,且main函数的位置不限。

三、编程题1、编写一个输出“Welcome to C!”信息的小程序。

解:程序如下#include “stdio.h”main( ){printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。

海伦公式为:S△= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。

*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。

*/printf(“area=%f\n”,s1);}第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A16、B 17 D解析:1. 答案:C。

C++程序设计基础课后答案 第三章

C++程序设计基础课后答案  第三章

3.1 阅读下列程序,写出执行结果1. #include <iostream.h>#include <math.h>int f( int ) ;void main(){ int i;for( i = 0; i < 3; i ++ )cout << f( i ) << endl;}int f( int a ){ int b = 0 , c = 1;b ++; c++;return ( a + pow( b, 2 ) + c );}2. void func(int a, int b, int c = 3, int d = 4 ); #include <iostream.h>void main(){ func( 10, 15, 20, 30 );func( 10, 11, 12 );func( 12, 12 );}void func( int a, int b, int c, int d ){ cout << a << '\t' << b << '\t' << c << '\t' << d << endl; }3.#include <iostream.h>void func( int, int, int * ) ;void main(){ int x, y, z;func( 5, 6, &x );func( 7, x, &y );func( x, y, &z );cout << x << " ," << y << ", "<< z << endl;}void func( int a , int b , int *c ){ b += a ; *c = b – a ; }4.#include <iostream.h>void func( int, int, int & );void main(){ int x=0 , y=1 , z=2;func( 1 , 2 , x );func( x + y , y , y );func( z , x + y , z );cout << x << " ," << y << ", "<< z << endl ;}void func( int a , int b , int &c ) { b += a ; c = b – a ; }5. #include <iostream.h>int f2( int, int );int f1( int a , int b ){ int c ;a += a ;b += b ;c = f2( a+b , b+1 );return c;}int f2( int a , int b ){ int c ;c = b % 2 ;return a + c;}void main(){ int a = 3 , b = 4;cout << f1( a , b ) << endl;}6. #include <iostream.h>int age( int n ){ int f;if( n == 1 ) f = 10 ;else f = age( n-1 ) + 2;return f ;}void main(){ cout << "age : " << age( 5 ) << endl; }7. #include <iostream.h>int f1( int a , int b ) { return a + b ; }int f2( int a , int b ) { return a - b ; }int f3( int( *t )( int , int ) , int a , int b ) { return ( *t )( a, b ) ; }void main(){ int ( *p )( int, int );p = f1 ;cout << f3( p, 4, 8 ) << endl;p = f2 ;cout << f3( p, 8, 4 ) << endl;}8.#include <iostream.h>int sub( int, int );int a = 1 ;void main(){ int m = 1, n = 2, f;f = sub( m, n );cout << a << '\t' << f << endl;f = sub( m, n ) ;cout << a << '\t' << f << endl;}int sub( int c, int d ){ static int m = 2, n = 5 ;cout << m << '\t' << n << '\t' << endl;a = ++ a ; c = m ++ ; d = n ++;return c + d ;}3.2 思考题1.函数的作用是什么?如何定义函数?什么叫函数原型?2.什么叫函数值的返回类型?什么叫函数的类型?如何通过指向函数的指针调用一个已经定义的函数?请写一个验证程序说明。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章重载1、请完成下列填空题1)在C++中,只能重载为类的成员函数的运算符是_=_、__[]__、__()__、__->__。

2)利用成员函数对二元运算符重载,其左操作数为___This___,右操作数为___成员函数参数___。

3)单目运算符作为类成员函数重载时___没有___的参数;双目运算符作为___类成员函数___重载时需声明其右操作数,作为___友元函数___重载时需声明全部操作数。

4)设a和b是两个整型变量,a+b表示这两个变量的和:设c和d为浮点型变量,c+d也表示这两个变量的和。

这里的运算符+具有不同的用途,这是__运算符重载___的例子。

5)重载的运算符仍然保持其原来的优先级、___结合性___和___语法结构___。

6)C++中不能重载的运算符有、__*___、___::___、___?:___和___sizof___。

2、编程题1)字符串连接需要两个操作数,即两个要被连接的字符串。

请按照以平方式实现operator +操作:string1=string2+string3答案:#include <>#include <>class String{public:String(int size=80){length=size;buf=new char[length+1];*buf='\0';}String(char *s){length=strlen(s);buf=new char[length+1];strcpy(buf,s);}String(const String& str){length=strlen;buf=new char[length+1];strcpy(buf,;}~String(){delete[]buf;}String& operator =(const String& str){length=;strcpy(buf,;return *this;}void Print(){cout<<buf<<endl;}friend String operator +(const String& str1,const String& str2){String temp(strlen+strlen+1);strcpy,;strcat,;return temp;}private:char *buf;int length;};void main(){String str1,str2("Hello,"),str3("everyone!");str1=str2+str3;();}2)给th类:class Three-d{public:Three_d(int I,int j,int k){x=I;y=j;z=k;}.Three_d()){x=0;y=0;z=0;}V oid Get(int &I,int &j,int &k({I=x;j=y;k=z;}private:int x,y,z;};针对给出的类,重载"+"、"++"与"一"运算符(只重载前缀方式即可)。

答案:#include <>class Three_d{public:Three_d(int i,int j,int k){x=i;y=j;z=k;}Three_d(){x=0;y=0;z=0;}void Get(int &i,int &j,int &k){i=x;j=y;k=z;}void Print(){cout<<'('<<x<<','<<y<<','<<z<<')'<<endl;}Three_d& operator++(){x++;y++;z++;return *this;}Three_d& operator--(){x--;y--;z--;return *this;}friend Three_d operator + (Three_d& t1,Three_d& t2);private:int x,y,z;};Three_d operator +(Three_d& t1,Three_d& t2){return Three_d+,+,+;}void main(){Three_d obj1(1,2,3),obj2(13,12,11),obj3;++obj1;();--obj2;();obj3=obj1+obj2;();}3)开发多项式类Polynomial,多项式的每一项用数组表示,每项包含一个系数和一个指数。

例如:2x4的指数为4,系数为2。

试开发一个完整的Polynomial类,包括构造函数、析构函数、”get"函数和”set”函数,以及下述重载的运算符:①重载加法运算符+,将两个多项式相加;②重载减法运算符-,将两个多项式相减:③重载乘法运算符*,将两个多项式相乘:④重载加法赋值运算符+=,减法赋值运算符-=,以及乘法赋值运算符*=。

答案:#include <>#include <>class Polynomial{public:Polynomial();Polynomial operator+(const Polynomial&)const;Polynomial operator-(const Polynomial&)const;Polynomial operator*(const Polynomial&);Polynomial& operator+=(const Polynomial&);Polynomial& operator-=(const Polynomial&);Polynomial& operator*=(const Polynomial&);void EnterTerms();void PrintPolynomial( )const;private:int exponents[100];int coefficients[100];void polynomialCombine(Polynomial&);};Polynomial::Polynomial(){for(int i=0;i<100;i++){coefficients[i]=0;exponents[i]=0;}}void Polynomial::PrintPolynomial() const{int start;bool zero=false;if(coefficients[0]){cout<<coefficients[0];start=1;zero=true;}else{if(coefficients[1]){cout<<coefficients[1]<<'x'; //常量不存在,输出指数为1的项if((exponents[1]!=0)&&(exponents[1]!=1))cout<<'^'<<exponents[1];zero=true;}start=2;}for(int x=start;x<100;x++) //输出其他各项if(coefficients[x]!=0){cout<<setiosflags(ios::showpos)<<coefficients[x]<<resetiosflags(ios::showpos)<<'x';if((exponents[x]!=0)&&(exponents[x]!=1))cout<<'^'<<exponents[x];zero=true;}if(!zero) //多项式为空cout<<'0';cout<<endl;}Polynomial Polynomial::operator+(const Polynomial& r) const{Polynomial temp;bool exponentExists;[0]=coefficients[0]+[0]; //计算常量之和for(int s=1;(s<100)&&[s]!=0);s++){[s]=[s];[s]=[s];}for(int x=1;x<100;x++) //计算其他各项之和{exponentExists=false;for(int t=1;(t<100)&&(!exponentExists);t++)if(exponents[x]==[t]){[t]+=coefficients[x];exponentExists=true;}if(!exponentExists){[s]=exponents[x];[s]+=coefficients[x];s++;}}return temp;}Polynomial &Polynomial::operator+=(const Polynomial &r){*this=*this+r;return *this;}Polynomial Polynomial::operator-(const Polynomial &r)const {Polynomial temp;bool exponentExists;[0]=coefficients[0][0];for(int s=1;(s<100)&&(exponents[s]!=0);s++){[s]=coefficients[s];[s]=exponents[s];}for(int x=1;x<100;x++){exponentExists=false;for(int t=1;(t<100)&&(!exponentExists);t++)if[x]==[t]){[t]-=coefficients[x];exponentExists=true;}if(!exponentExists){[s]=[x];[s]-=[x];s++;}}return temp;}Polynomial &Polynomial::operator-=(const Polynomial& r) {*this=*this-r;return *this;}Polynomial Polynomial::operator*(const Polynomial& r) {Polynomial temp;int s=1;for(int x=0;(x<100)&&(x==0||coefficients[x]!=0);x++) for(int y=0;(y<100)&&(y==0||[y]!=0);y++)if(coefficients[x]*[y])if((exponents[x]==0)&&[y]==0))[0]+=coefficients[x]*[y];else{[s]= coefficients[x]*[y];[s]=exponents[x]+[y];s++;}polynomialCombine(temp); //合并同类项return temp;}void Polynomial::polynomialCombine(Polynomial& w) {Polynomial temp=w;int exp;for(int x=0;x<100;x++){[x]=0;[x]=0;}for(x=1;x<100;x++){exp=[x];for(int y=x+1;y<100;y++)if(exp==[y]){[x]+=[y];[y]=0;[y]=0;}}w=temp;}Polynomial &Polynomial::operator*=(const Polynomial& r) {*this=*this*r;return *this;}void Polynomial::EnterTerms(){bool found=false;int numberOfTerms,c,e;cout<<"Enter number of polynomial terms:";cin>>numberOfTerms;for(int n=1;n<=numberOfTerms;n++){cout<<"Enter coefficient:";cin>>c;cout<<"Enter exponent:";cin>>e;if(c!=0){if(e==0){coefficients[0]+=c;continue;}for(int term=1;(term<100)&&(coefficients[term]!=0);term++)if(e==exponents[term]){coefficients[term]+=c;exponents[term]=e;found=true;}if(!found){coefficients[term]+=c;exponents[term]=e;}}}}void main(){Polynomial a,b,c,t;();();cout<<endl<<"First polynomial is:";();cout<<endl<<"Second polynomial is:";();cout<<endl<<"Adding the polynomials yields:";c=a+b;();cout<<endl<<"+=the polynomials yields:";t=a;a+=b;();cout<<endl<<"Subtracting the polynomials yields:";a=t;();cout<<endl<<"-=the polynomials yields:";a-=b;();cout<<endl<<"Multiplying the polynomials yields:";a=t;c=a*b;();cout<<endl<<"*=the polynomials yields:";a*=b;();cout<<endl;}4)C++在运行期间不会自动检查数组是否越界。

相关文档
最新文档