西安交大C++程序设计第十章作业
西安交大C++10
int main() { mobile m,*p1; mobilegsm gsm; mobilecdma cdma; m=gsm; m.showinfo(); m=cdma; m.showinfo(); p1=&gsm; p1->showinfo(); p1=&cdma; p1->showinfo(); mobile &p4=gsm; p4.showinfo(); mobile &p5=cdma; p5.showinfo(); return 0; }
//基类对象指针p1,基类对象m
//用gsm类对象给mobile类对象赋值 //用cdma类对象给mobile类对象赋值 //用gsm类对象地址给mobile类对象赋值 //用cdma类对象地址给mobile类对象赋值 //以gsm类对象初始化mobile类引用 //以cdma类对象初始化mobile类引用
派生类对象替换基类对象
#include <iostream> using namespace std; class Pet //基类 {public: void Speak() { cout<<"How does a pet speak ?"<<endl; } }; class Cat : public Pet //派生类 {public: void Speak() { cout<<"miao!miao!"<<endl; } }; class Dog : public Pet //派生类 {public: void Speak() { cout<<"wang!wang!"<<endl; } }; int main() { Pet *p1, *p2, *p3,obj; //基类对象指针p1, 基类对象obj Dog dog1; Cat cat1; obj = dog1; //用Dog类对象给Pet类对象赋值 obj.Speak(); p1 = &cat1; //用Cat类对象地址给基类指针赋值 p1->Speak(); p1 = &dog1; //用Dog类对象地址给基类指针赋值 p1->Speak(); p2=new Cat; //动态生成Cat类对象 p2->Speak(); p3=new Dog; //动态生成Dog类对象 p3->Speak(); Pet &p4 = cat1; //以Cat类对象初始化Pet类引用 p4 .Speak(); return 0; }
大学C 程序设计教程 - 西安交通大学共25页文档
语句序列可以是一个语句,也可以是复合语句结构(分程序)
6
分程序
{ <局部数据变量说明部分> <执行语句段>
}
▪ 分程序在语法上是一个整体,相当于一个语句。 ▪ 分程序中也可以再嵌套新的分程序,用以构成更加复杂
的控制结构。
7
选择结构(之二)
▪ 多路(开关)选择语句 :
switch(整数表达式)
{ case 数值1: 语句序列1; …... case 数值n: 语句序列n; [default : 语句序列n+1;]
条件?
不成立
9
循环结构(之二)
▪ for语句用来实现计数循环: for (<表达式1>; <表达式2>; <表达式3>)
<循环体>
10
C++数据类型的分类
11
类型不同的数据之间的混合算术运算
▪ 不同类型的数据在参加运算之前会自动转换成 相同的类型, 然后再进行运算。
▪ 转换规则
• 转换的原则是由低级向高级转换 char -> int -> float -> double
化)处理,最后到求解域中只是比较简单的编程问题。
20
基本思想和方法
▪ 基本思想
• 从问题本身开始,经过逐步求精,将解决问题的步骤分解为由 基本程序结构模块组成的结构化程序框图,据此编写程序。
▪ 基本方法
• 从题目本身开始, 找出解决问题的基本思路, 将其用结构化框 图(可能是非常粗糙)表示。
• 对框图中的比较抽象的、用文字描述的模块进一步分析细化, 结果仍用结构化框图表示。
23
结束语
西安交大C++程序设计课外测验作业
西安交通大学实验报告课程__计算机程序设计__实验名称_课外实验题目__第 1 页共 19 页系别___ _______ 实验日期 2014 年 4月 3日专业班级____组别_____________ 实验报告日期 2014 年4 月 5日姓名___ _____学号_ _报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的复习巩固本阶段所学的知识,包括数组的使用、函数的使用、循环语句和条件语句的使用等。
二、实验内容(一)第一题:1、编写一个程序,计算m~n范围内的每个正整数的全部素因子。
其中的m和n由键盘输入。
评分标准:(1)程序框架完整,代码规范;(20%)(2)数据类型的定义和使用方法正确;(20%)(3)程序控制结构使用正确;(20%)(4)算法正确,清晰合理;(20%)(5)运行结果正确,输入和输出格式如下所示。
(20%)请输入m和n:15 1815的非平凡因子:3 516的非平凡因子:2 4 817的非平凡因子:18的非平凡因子:2 3 6 91.源程序代码:#include<iostream>using namespace std;void suyinzi(int x);int main(){int m,n;cout<<"请输入正整数m和n(m<=n):";cin>>m>>n;while(m>n){cout<<"您输入有误,m应该小于等于n,请重新输入:";cin>>m>>n;}for(int j=m;j<=n;j++)//对于范围内的正整数逐一判断寻找因子{suyinzi(j);}return 0;}void suyinzi(int x)//寻找并输出x的所有非平凡因子{cout<<x<<"的非平凡因子为:";for(int i=2;i<=x/2;i++){if(x%i==0){cout<<i<<" ";}}cout<<endl;}2.实验结果:3.问题分析:此题简单,但当该数没有非平凡因子时,如能够输出:“x没有非平凡因子!”而非仅仅输出空白则更好。
《大学C++程序设计教程》课后习题-西安交通大学
第1章 C++语言简介1.在计算机上调试运行本章的所有例题,熟悉实验环境和方法。
2.仿照例1-3,编写一个计算矩形面积的程序。
3.乘法计算器程序:可以根据例1-4自行改编。
4.修改例1-5的生日卡程序,使其能够输入和显示日期。
5.使用梯形法计算下式定积分的值。
⎰-+11sin dx e x x积分区域等分数可取为200,并将计算结果和手算结果相比较。
提示:e x 用math.h 中得库函数exp(x)表示。
第2章 控制结构1.编写计算阶乘 n!的程序。
2.编写程序求斐波那契数列的第n 项和前n 项之和。
斐波那契数列是形如0, 1, 1, 2, 3, 5, 8, 13, ...其通项为:F 0 = 0;F 1 = 1;F n = F n -1+F n -2。
3.编程求 ...)12()!(2)!2(...5423132arcsin 221252++++⋅⋅⋅⋅+⋅+≈+n n x n x x x x n n ,其中1<x 。
提示:结束条件可用 ε<u ,其中u 为通项。
4.求解猴子吃桃问题。
猴子在第一天摘下若干个桃子,当即就吃了一半,又感觉不过瘾,于是就多吃了一个。
以后每天如此,到第10天时,就只剩下了一个桃子。
请编程计算第一天猴子摘的桃子个数。
5.用弦截法求一元方程0)(=x f 在区间[]10,x x 之间的一个根。
提示:考虑当区间[]10,x x 足够小,在此区间中方程0)(=x f 仅有一个单根的情况,如图2.14所示。
图2.14 弦截法求方程的解此时如)(0x f 和)(1x f 异号,则可用两点间直线公式求出x 2:)()()(0101002x f x f x f x x x x ---= 然后用x 2代入原式求出f (x 2),判断f (x 2)与f (x 1)和f (x 0)中的哪一个同号,就用x 2和f (x 2)代替之,即如果f (x 2)和f (x 0)同号,就用x 2和f (x 2)代替x 0和f (x 0),反之用x 2和f (x 2)代替x 1和f (x 1),然后再继续上述过程直至|x 2-x 0|或|x 2-x 1|小于给定的误差控制值。
西安交大C程序设计作业
西安交大C程序设计作业文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]西安交通大学实验报告课程__计算机程序设计__实验名称__指针与函数__第 1 页共 25 页系别____ _______ 实验日期 2014 年 4月 18日专业班级__ ____组别_____________ 实验报告日期 2014 年 4 月 19日姓名___ _______学号_ _报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的学会使用递归函数和函数重载,进一步熟练动态分配等指针使用方法。
二、实验内容(一)第一题:1、(必做题)使用递归算法编写如下程序:对于任意给定的实数 X 和整数k( k>0) ,计算 Xk 。
1.源程序代码:#include<iostream>using namespace std;double yunsuan(double x,int k);验结果:(1)输入X正实数:(2)输入X正整数:(3)输入x为负数:(4)输入k为负数:3.问题分析:该函数的循环方式是:x^k=x*x^(k-1).设f(x,k)=x^k,那么就有f(x,k)=f(x,k-1)*x.而其结束递归的条件是k=1,此时有f(x,1)=x,由此给出初值。
(二)第二题:使用递归算法编写求斐波那契数列的第 n 项的函数,并编出主函数进行验证。
1.源程序代码:#include<iostream>using namespace std;int fib(int n)验结果:(1)输入项数正确(0或正整数):(2)输入项数有误(负数):3.问题分析:该题的递归方式:第n项为之前两项之和,即:fib(n)=fib(n-1)+fib(n-2),由此递归至fib(1)和fib(2)时结束递归,而fib(1)和fib(2)已知。
西南交通大学计算机程序设计基础C++实验报告10
实验 10 实验报告教学班级:___ ___ 学生学号:_____xxxxxx_____ 学生姓名:______x x x_____实验日期:___6.15___ 实验地点:____x7407________(机房)指导教师签名:_____________ 实验成绩:______________一、实验目的1.掌握二维数值型数组的使用方法;2.掌握求解一些经典问题的常用算法。
二、实验任务1.设有一个元素皆为整数的n*n阶矩阵,键盘输入矩阵的阶n及矩阵的元素,且找出其主对角线上元素的最大值及其所在的行号。
程序输出参考如下:2.已知有const int M=100; int x[M][M],m;要求:将按照如下规律自动生成的数据存放x数组中,并输出如下图所示三角。
3.编写程序,输入数字n(n<10),输出n层正方形图案。
正方形图案最外层是第一层,依次往内,每层用的数字和层数相同。
程序输出参考如下:4.编写程序,要求输入某班N名同学的序号及3门课成绩,计算每位同学的平均成绩以及每门课的平均成绩(学号为3位整数,成绩也为整数,课程名称为:科目1、科目2、科目3)。
程序输出参考如下:三、实验结果(源程序+ 注释+ 运行界面截图)(要求:(1)提供源程序;(2)源程序包含必要的注释,包括:在程序头部给出本程序功能的注释、所定义变量的用途注释、程序块的功能注释、子函数的功能注释等;(3)运行结果的窗口截图,程序运行结果中输出的第一行内容必须为:程序作者的学号和姓名。
)1.#include <iostream>using namespace std;int main(){cout<<"xxxxxxxxx"<<endl;int i,j,b=0,h=0,a[100][100],n;cout<<"请输入矩阵的阶:";cin>>n;cout<<"请输入一个"<<n<<"*"<<n<<"矩阵,每个数之间用空格间隔,每行输入完成后按回车"<<endl;for (i=1;i<=n;i++)//输入储存数据{for(j=1;j<=n;j++)cin>>a[i][j];}for(i=1;i<=n;i++)//对对角线上的数据进行大小判断{for(j=1;j<=n;j++){if(i==j){if(a[i][j]>b){b=a[i][j];//保存比较后较大的数h=i;//记录比较后较大数的行数}}}}cout<<"对角线上最大的数为:"<<b<<",行号为:"<<h<<endl;system ("pause");return 0;}2.#include <iostream>#include <iomanip>using namespace std;int main(){cout<<"xxxxxxxxx"<<endl;const int M=100; int x[M][M]={0},m;cout<<"请输入m值:";cin>>m;int t=m,i,j,p=m;int h=0;for(j=0;j<m;j++){for(i=0;i<=j;i++){cout<<setw(3)<<t<<setw(6)<<" ";x[i][j]=t;t=t+p;p--;if (j==i){cout<<endl;t=m-h-1;h++;}}p=m;}cout<<"========================================"<<endl;cout<<setw(12)<<" "<<setw(3)<<x[0][0]<<endl;cout<<setw(9)<<" "<<setw(3)<<x[0][1]<<setw(3)<<" "<<setw(3)<<x[1][1]<<endl;cout<<setw(6)<<" "<<setw(3)<<x[0][2]<<setw(3)<<" "<<setw(3)<<x[1][2]<<setw(3)<<" "<<setw(3)<<x[2][2]<<endl;cout<<setw(3)<<" "<<setw(3)<<x[0][3]<<setw(3)<<" "<<setw(3)<<x[1][3]<<setw(3)<<" "<<setw(3)<<x[2][3]<<setw(3)<<" "<<setw(3)<<x[3][3]<<endl;cout<<setw(3)<<x[0][4]<<setw(3)<<" "<<setw(3)<<x[1][4]<<setw(3)<<" "<<setw(3)<<x[2][4]<<setw(3)<<" "<<setw(3)<<x[3][4]<<setw(3)<<" "<<setw(3)<<x[4][4]<<endl;system ("pause");return 0;}3. #include <iostream>using namespace std;int main(){cout<<"xxxxxxxxx"<<endl;int a[100][100],b[100][100],i,j,k,h,n,m;cout<<"请输入正方形层数;";cin>>n;m=2*n-1;for(i=0,k=0;i<n,k<n;i++,k++) //输入保留左上四分之一正方形数据{for(j=0,h=0;j<n,h<n;j++,h++){if(i<j)a[i][j]=i+1;elsea[i][j]=j+1;b[k][h]=a[i][j];}}for(i=0,k=0;i<n,k<n;i++,k++) //将坐上四分之一正方形复制到右上角四分之一正方形{for(j=m-1,h=0;j>=n;j--,h++)a[i][j]=b[k][h];}for(i=m-1,k=0;i>=n,k<n;i--,k++)//复制到左下角四分之一正方形{for(j=0,h=0;j<n,h<n;j++,h++)a[i][j]=b[k][h];}for(i=m-1,k=0;i>=n,k<n;i--,k++)//复制到右下角四分之一正方形{for(j=m-1,h=0;j>=n,h<n;j--,h++)a[i][j]=b[k][h];}for(i=0;i<m;i++)//输出矩阵{for(j=0;j<m;j++){cout<<a[i][j]<<" ";}cout<<endl;}system("pause");return 0;}4.#include <iostream>using namespace std;int main(){cout<<"xxxxxxxxx"<<endl;int a[100][100],i,j,N,m,n;cout<<"请按下列顺序输入:"<<endl;cout<<"学号"<<" "<<"科目1"<<" "<<"科目2"<<" "<<"科目3"<<endl;N=3;m=0;n=0;for(i=0;i<N;i++)//输入同学的学号成绩{for(j=0;j<4;j++){cin>>a[i][j];}}for(i=0;i<N;i++)//计算某同学平均分{for(j=1;j<4;j++)m+=a[i][j];n=m/3;m=0;cout<<"学号为"<<a[i][0]<<"的同学的平均分为:"<<n<<endl;}for(j=1;j<4;j++)//计算某科目平均分{for(i=0;i<N;i++)m+=a[i][j];n=m/3;m=0;cout<<"科目"<<j<<"的平均分为:"<<n<<endl;}system("pause");return 0;}。
程序设计基础试题(西安交大)
五.编程题(40 %)
1)设有3x3矩阵
编写程序求解矩阵 ,即矩阵B为矩阵A及其转置阵AT之和。
2)编写程序求小于1000回文数。所谓回文数是指对一个数n,从左向右和从右向左读是相同的。
3)计算并输出一元二次方程的根,要求从键盘输入ax2+bx+c = 0的三个实数系数,计算该方程的实数根并输出。假定方程一定有两个实根(b2-4ac>=0)。要求必须用函数来计算方程的根。注:求平方根的函数是sqrt,包含在头文件math.h中。
西西西西安安安安交交交交通通通通大大大大学学学学考考考考试试试试题题专业班号专业班号专业班号期中期中期中期末期末期末语言规定函数返回值的类型是由语言规定函数返回值的类型是由语言规定函数返回值的类型是由returnreturnreturn语句中的表达式类型所决定语句中的表达式类型所决定语句中的表达式类型所决定调用该函数时的主调函数类型所决定调用该函数时的主调函数类型所决定调用该函数时的主调函数类型所决定调用函数时系统临时决定调用函数时系统临时决定调用函数时系统临时决定在定义该函数时所指定的函数类型所决定在定义该函数时所指定的函数类型所决定在定义该函数时所指定的函数类型所决定简单变量做实参时它与对应形参之间的数据传递方式是简单变量做实参时它与对应形参之间的数据传递方式是简单变量做实参时它与对应形参之间的数据传递方式是地址传递地址传递地址传递单向值传递单向值传递单向值传递由实参传给形参再由形参传回给实参由实参传给形参再由形参传回给实参由实参传给形参再由形参传回给实参由用户指定传递方式由用户指定传递方式由用户指定传递方式下述对下述对下述对cc语言字符数组的描述中错误的是语言字符数组的描述中错误的是语言字符数组的描述中错误的是字将数组可以存放字符串字将数组可以存放字符串字将数组可以存放字符串字符数组的字符串可以整体输入输出字符数组的字符串可以整体输入输出字符数组的字符串可以整体输入输出可以在赋值语句中通过赋值运算将可以在赋值语句中通过赋值运算将可以在赋值语句中通过赋值运算将对字符数组整体赋值对字符数组整体赋值对字符数组整体赋值不可以用关系运算符对字符数组中的字将串进行比较不可以用关系运算符对字符数组中的字将串进行比较不可以用关系运算符对字符数组中的字将串进行比较对两个数组对两个数组对两个数组aa做以下初始化做以下初始化做以下初始化
西安交通大学《程序设计基础》作业考核试题
单选题(共30 道试题,共60 分。
)得分:521. 若有说明int a[3][4];则a数组元素的非法引用是(D)。
A. a[0][2*1]B. a[1][3]C. a[4-2][0]D. a[0][4]满分:2 分得分:22. 函数rewind的作用是(A)。
A. 使位置指针重新返回文件的开头B. 将位置指针指向文件中所要求的特定位置C. 使位置指针指向文件的末尾D. 使位置指针自动移至下一个字符位置满分:2 分得分:23. 结构体类型的定义允许嵌套是指(C)。
A. 成员是已经或正在定义的结构体型B. 成员可以重名C. 结构体型可以派生D. 定义多个结构体型满分:2 分得分:04. 下面有关for循环的正确描述是(D)。
A. for循环只能用于循环次数已经确定的情况B. for循环是先执行循环循环体语句,后判断表达式C. 在for循环中,不能用break语句跳出循环体D. for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来满分:2 分得分:25. C语言中,定义结构体的保留字是(B)。
A. unionB. structC. enumD. typedef满分:2 分得分:26. 以下运算符中,优先级最高的运算符是(C)。
A. ||B. %C. !D. ==满分:2 分得分:27. 以下叙述中错误的是(D)。
A. 二进制文件打开后可以先读文件的末尾,而顺序文件不可以B. 在程序结束时,应当用fclose函数关闭已打开的文件C. 在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据D. 不可以用FILE定义指向二进制文件的文件指针满分:2 分得分:28. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(B)。
A. 地址传递B. 单向值传递C. 由实参传给形参,再由形参传回实参D. 传递方式由用户指定满分:2 分得分:29. 若k为int型变量,则以下程序段的执行结果是(B)。
西安交大C 程序设计第十章作业
_ 报 告 退 发 ( 订正 、 重做 )
同 组 人_________________________________ 教 师 审 批 签 字
一、实验目的
理解掌握多态的使用方法,学会用虚函数。
二、实验内容
(一)第一题:定义一个类 Base,该类含有虚函数 display,然
后定义它的两个派生类 FirstB 和 SecondB,这两个派生类均含有
double sidelength; public:
Square(int x=0,int y=0,double s=0.0):Rectangle(x,y) {
Seta(s); } void Seta(double s) {
sidelength=s; } virtual double Area() const {
virtual void display() {
cout<<"sound!sound!sound!"; } }; class FirstB:public Base
{ public:
void virtual display() {
cout<<"miao!miao!miao!"; } }; class SecondB:public Base { public: void virtual display() {
#endif
//square.h正方形类,几乎跟矩形类一样而已
#ifndef SQUARE_H #define Square_H #include"rectangle.h" #include<iostream> using namespace std; class Square:public Rectangle {
西安交大C 程序设计 作业
西安交通大学实验报告课程__计算机程序设计__实验名称_____函数______第 1 页共 18 页系别____ _______ 实验日期 2014 年 3月 28日专业班级____组别_____________ 实验报告日期 2014 年 3 月 29日姓名___ _______学号_ _报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的掌握函数的概念,使用函数的优越性,定义函数的方法以及调用函数的方法。
二、实验内容(一)第一题:编写字符串反转函数mystrrev(),该函数的功能是将指定字符串中的字符顺序颠倒排列。
然后再编写主函数验证之。
1.源程序代码:#include<iostream>#include<cstring>using namespace std;void mystrrev(char string[]);验结果:由于函数中有“for(int i=0;i<m/2;i++)”的语句,为避免该循环条件不准确,对奇数和偶数个的字符均进行了检测,并有对含空格和符号的字符串的检测:(1)奇数:(2)偶数:(3)含空格字符串:3.问题分析:(1)起初没有用“.get”,不够全面;(2)如果一直执行到i=m的话,就等于反转两次又回到了原来的字符串顺序,因而要考虑只执行一半,而由于字符串长度有奇偶的问题,所以容易错误;(3)第一次编写时,没有写string[m]='\0';这使得输出结果混乱。
(二)第二题:编写一组求数组中最大元素和最小元素的函数。
其函数原型为:int imax(int array[],int count);int imin(int array[],int count);1.源程序代码:#include<iostream>using namespace std;int imax(int array[],int count);验结果:3.问题分析:(1)起初误将:cout<<"最大值为:"<<imax(num,n)<<endl;cout<<"最小值为:"<<imin(num,n)<<endl;写成imin、imax,不能执行。
西安交大C++11
cin.get() 与 cin.getline() 的比较
cin.get(字符数组, 字符个数n, 终止字符) cin.getline(字符指针, 字符个数n, 终止字符) 相同之处:
从输入流提取n-1个字符放入数组, 函数返回值是非0值. 若遇到文件结束符,则返回值为0. 当读到终止字符时, cin.getline()——将指针移到终止字符之后。 cin.get() ——将指针移到终止字符处。 则下次继续读取时的位置就不同。
【例10-2】利用多个参数的get函数读取两个字符串 #include<iostream> enter a sentence: Xi'an Jiaotong University|Shanghai Jiaotong using namespace std; University int main() Xi'an Jiaotong University Shanghai Jiaotong University { char ch[80]; cout<<"enter a sentence:"<<endl; cin.get(ch,70,'|'); cout<<ch<<endl; cin.ignore(1); cin.get(ch,70); cout<<ch<<endl; return 0; }
istream类的get函数
读取一个字符, 不跳过空白字符
int get();
istream& get( char& rch );
istream& get( char* pch, int nCount, char delim = '\n' );
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安交通大学实验报告课程__计算机程序设计__实验名称__多态性__第 1 页共 44 页系别____ ______ 实验日期 2014 年 5 月 31 日专业班级__ ____组别_____________ 实验报告日期 2014 年 5 月 31 日姓名___ _____学号_ _ 报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的理解掌握多态的使用方法,学会用虚函数。
二、实验内容(一)第一题:定义一个类Base,该类含有虚函数display,然后定义它的两个派生类FirstB和SecondB,这两个派生类均含有公有成员函数display,在主程序中,定义指向基类Base的指针变量ptr,并分别定义Base、FirstB、Second的对象b1、f1、s1,让ptr分别指向b1、f1、s1的起始地址,然后指向执行这些对象的成员函数display。
1.源程序代码:#include<iostream>using namespace std;class Base{public:virtual void display(){cout<<"sound!sound!sound!";}};class FirstB:public Base{public:void virtual display(){cout<<"miao!miao!miao!";}};class SecondB:public Base{public:void virtual display(){cout<<"wang!wang!wang!";}};int main(){Base *ptr;Base b1;FirstB f1;SecondB s1;cout<<"指向基类Base:\t";ptr=&b1;ptr->display();cout<<"\n指向派生类FirstBase:\t";ptr=&f1;ptr->display();cout<<"\n指向派生类SecondB:\t";ptr=&s1;ptr->display();cout<<endl;return 0;}2.实验结果:(二)第二题:扩充例10-5,从中派生一个正方形类和圆柱体类,写一个测试程序,输出正方形的面积和圆柱体的体积。
1.源程序代码:验结果:(三)第三题:扩充实例编程中的日期类,为Date增加一个成员函数,可以判断日期是否为系统当前日期。
从键盘输入你的生日,如果今天是你的生日则显示:“Harry Birthday!”否则显示“还有**天是你的生日”或者“你的生日已经过去了** 天,距离明年生日还有**天”。
1.源程序代码:<<endl;cout<<"Please input your birthday:";int a,b;cin>>a>>b;Date birthday(a,b);(birthday);cout<<endl;return 0;}2.实验结果:四、第四题:完成上一章实验第5题红颜色的函数功能:5、采用继承方式定义一个三层生日蛋糕类,不论基类还是派生类都至少包含 5 个函数:构造函数、设置数据成员函数、求蛋糕体积、运算符 > 重载函数、输出生日祝词与蛋糕形状函数。
并编写主函数测试各成员函数。
继承方式如下:首先定义圆柱体形状蛋糕类,只有 3 个数据成员,半径、高、生日祝词。
然后派生出圆柱体 _ 方柱体蛋糕类,即在圆柱体形状上增加方柱体形状。
假定方柱体的正方形面积小于圆柱体的圆形面积,注意方柱体的高与正方形的边长不一定相等。
再用圆柱体 _ 方柱体蛋糕类派生出圆柱体 _ 方柱体 _ 菱形体蛋糕类,即在方柱体形状上增加菱形柱体形状。
假定菱形柱体的菱形面积小于方柱体的正方形面积。
提示:①?运算符 > 重载指两个蛋糕对象的体积大小。
?②基类和派生类数据成员不能定义为 public 。
③设置数据成员函数、求蛋糕体积、求蛋糕表面积函数、输出生日祝词与蛋糕形状函数均为同名重载函数,例如分别采用函数名为 init() 、 volume() 、 area() 、 output() 。
程序运行参考图如下:(红颜色的功能下一章实验完成)1.源程序代码:验结果:五、第五题:(必做题)定义一个一元二次方程类,通过继承方式定义一元三次方程类,再继承定义一元四次方程类。
类中至少包含构造函数、求根函数、运算符 + 重载函数、运算符 - 重载函数、运算符==重载函数、输出方程的函数等6 个函数,并编写主函数测试各成员函数。
提示:①两个一元三次方程对应相加仍然是一个一元三次方程;②求根方法采用迭代方法,迭代公式为:Xn+1=Xn -F(Xn)/F ’ (Xn) ,结束迭代的条件|F(Xn+1)|<10-7 与|Xn+1-Xn|<10-7 同时成立;③一元三次方程的一般形式如下:F(X)=AX3+BX2+CX+D=0 。
输出方程格式为: A*X^3+B*X^2+C*X+D=0 ;④两个一元三次方程对应相加和对应相减仍然是一元三次方程。
⑤假定类中的方程系数能求解出实根。
不考虑方程存在虚根和无根的情况。
求根函数应该有一个参数,该参数指明迭代初值。
例如方程 2X3-4X2+3x-6 = 0 在附近的根。
又例如方程X3+12X2+48X+64=0 在附近的根。
例如方程X4-10X3+35X2-50x+24=0在附近的根。
又例如方程X4+12X3+54X2+108X+81=0在附近的根。
因此类中数据成员除了系数外,还应考虑迭代初值作为数据成员。
1.源程序代码:#include<iostream>#include<cmath>using namespace std;class Equation2{protected:double A,B,C;double X0;public:Equation2(double a=1,double b=1,double c=1,double x0={Set(a,b,c,x0);}void Set(double a,double b,double c,double x0){A=a;B=b;C=c;X0=x0;}double root(){double X=X0;double temp;do{temp=X;X=X-((A*X*X+B*X+C)/(2*A*X+B));}while(fabs(X)>=10e-7||fabs(temp-X)>=10e-7);return X;}Equation2 operator +(Equation2 eq2){A=A+;B=B+;C=C+;return *this;}Equation2 operator -(Equation2 eq2){A=;B=;C=;return *this;}Equation2 operator ==(Equation2 eq2){if(A/==B/&&B/==C/cout<<"YES!";elsecout<<"NO!";return *this;}void Print(){cout<<A<<"X^2+"<<B<<"X+"<<C<<"=0";}};class Equation3:public Equation2{protected:double D;public:Equation3(double a=1,double b=1,double c=1,double d=1,double x0= {Set(a,b,c,d,x0);}void Set(double a,double b,double c,double d,double x0){Equation2::Set(a,b,c,x0);D=d;}double root(){double X=X0;double temp;do{temp=X;X=X-((A*X*X*X+B*X*X+C*X+D)/(3*A*X*X+2*B*X+C));}while(fabs(X)>=10e-7||fabs(temp-X)>=10e-7);return X;Equation3 operator +(Equation3 eq3){A=A+;B=B+;C=C+;D=D+;return *this;}Equation3 operator -(Equation3 eq3){A=;B=;C=;D=;return *this;}Equation3 operator ==(Equation3 eq3){if(A/==B/&&B/==C/&&C/==D/cout<<"YES!";elsecout<<"NO!";return *this;}void Print(){cout<<A<<"X^3+"<<B<<"X^2+"<<C<<"X+"<<D<<"=0";}};class Equation4:public Equation3{protected:double E;public:Equation4(double a=1,double b=1,double c=1,double d=1,doublee=1,double x0={Set(a,b,c,d,e,x0);}void Set(double a,double b,double c,double d,double e,double x0) {Equation3::Set(a,b,c,d,x0);E=e;double root(){double X=X0;double temp;do{temp=X;X=X-((A*X*X*X*X+B*X*X*X+C*X*X+D*X+E)/(4*A*X*X*X+3*B*X*X+2*C*X+D)) ;}while(fabs(X)>=10e-7||fabs(temp-X)>=10e-7);return X;}Equation4 operator +(Equation4 eq4){A=A+;B=B+;C=C+;D=D+;E=E+;return *this;}Equation4 operator -(Equation4 eq4){A=;B=;C=;D=;E=;return *this;}Equation4 operator ==(Equation4 eq4){if(A/==B/&&B/==C/&&C/==D/&&D/==E/cout<<"YES!";elsecout<<"NO!";return *this;}void Print(){cout<<A<<"X^4+"<<B<<"X^3+"<<C<<"X^2+"<<D<<"X+"<<E<<"=0";}};int main(){Equation2 equation2(2,3,4,,equation21;Equation3 equation3(2,3,4,5,,equation31;Equation4 equation4(2,3,4,5,6,,equation41;cout<<"方程为:\n";();cout<<endl;();cout<<endl;();cout<<endl;cout<<"测试根:\n二次:";cout<<();cout<<"\n三次:";cout<<();cout<<"\n四次:";cout<<();cout<<"测试加法:\n二次:";equation2+equation21;();cout<<"\n三次:";equation3+equation31;();cout<<"\n四次:";equation4+equation41;();cout<<"\n测试减法:\n二次:";equation2-equation21;();cout<<"\n三次:";equation3-equation31;();cout<<"\n四次:";equation4-equation41;();return 0;}2.实验结果:六、第六题:给自定义虚数类增加运算符*、/、++、--、==重载,注意++和--分前置和后置两种情况,编写主函数加以测试。