西安交大C++程序设计第十章作业
- 格式:doc
- 大小:613.50 KB
- 文档页数:43
西安交通大学实验报告课程__计算机程序设计__实验名称_课外实验题目__第 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没有非平凡因子!”而非仅仅输出空白则更好。
第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++集成开发环境的使用第 1 页共 12 页系别钱学森班_实验日期 201x 年 2 月 24日专业班级 _钱学森班____ 组别__________ 实验报告日期 201x 年 2 月 24日姓名 _ ___ __学号 21xxxxxxxx_ 报告退发 ( 订正、重做 ) 同组人_________________________________ 教师审批签字∙实验目的(1)掌握集成开发环境的使用方法;(2)了解C++程序的基本特点。
(3)掌握变量与常量的定义与使用方法;(4)掌握基本数据类型和表达式的使用方法,掌握C++的基本语句。
理解结构化和面向对象程序设计的基本思想和有关概念,掌握C++程序的基本框架和上机调试计算机程序的过程。
∙实验内容(-)实验题目一:编写一个计算三角形面积的程序。
1.要点分析1.begin2.输入底边长L和高H3.计算输出4.end2.程序源代码#include<iostream>using namespace std;int main(){int L,H,S;cout<<"请输入底边长和高后按回车键"<<endl;cin>>L>>H;S=(L+H)/2;cout<<"面积为:"<<S<<endl;return 0;}3.实验结果(二)输入长、宽、高(为实数),计算长方体的表面积和体积。
1.要点分析1.begin2.输入长宽高3.计算输出表面积和体积4.end2.程序源代码#include<iostream>using namespace std;int main(){int A,B,C,S,V;cout<<"请输入长方体的长宽高"<<endl;cin>>A>>B>>C;S=(2*((A*B)+(B*C)+(A*C)));V=(A*B*C);cout<<"S"<<"="<<S<<endl;cout<<"V"<<"="<<V<<endl;return 0;}3.实验结果(三)编写程序:实现整数拼接。
西安交通大学实验报告课程__计算机程序设计__实验名称__指针与函数__第 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);//递归函数用于计算x^kint main(){double x;int k;cout<<"请输入实数x:";cin>>x;cout<<"请输入正整数k:";cin>>k;while(k<=0)//判断输入的k是否满足要求,若否则提示输入错误并重新输入{cout<<"您的输入有误!请输入正整数:";cin>>k;}cout<<"计算结果是:"<<x<<"^"<<k<<"="<<yunsuan(x,k)<<endl;//输出运算结果return 0;}double yunsuan(double x,int k){if(k==1)//k=1时不再进行循环,输出值为xreturn x;else{double s=x*yunsuan(x,k-1);//对于k大于1的情况,进入下一循环return s;}}2.实验结果:(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,由此给出初值。
单选题(共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)。
《程序设计基础》在线作业以下程序段的输出结果是( )int a=1234;printf("%2d\n",a);A:12B:34C:1234D:提示出错、无结果正确选项:C若二维数组a有m列,则在a[i][j]前的元素个数为()。
A:j*m+IB:i*m+jC:i*m+j-1D:i*m+j+1正确选项:B函数的形式参数隐含的存储类型说明是()。
A:externB:staticC:registerD:auto正确选项:D若有以下的定:int t[3][2];能正确表示t数组元素地址的表达式是()。
A:&t[3][2]B:t[3]C:&t[1]D:t[2]正确选项:D以下叙述正确的是()。
A:在C程序中,main函数必须位于程序的最前面B:C程序的每行中只能写一条语句C:C语言本身没有输入输出语句D:在对一个C程序进行编译的过程中,可发现注释中的拼写错误正确选项:Cdouble x;scanf("%lf", 不可以赋值给x变量的常量是()。
A:123B:100000C:A'D:"abc"正确选项:D设有定义:int n=0,*p= n,**q= p,则下列选项中正确的赋值语句是( )A:p=1;B:*q=2;C:q=p;D:*p=5;正确选项:D下面程序的运行结果是#includemain(){ int y=10; do {y--;}while(--y); printf( %d\n ,y--);}A:-1B:1C:8D:0正确选项:D经过下列的语句 int j,a[10],*p;定义后,下列语句中合法的是()。
A:p=p+2;B:p=a[5];C:p=a[2]+2;D:p=正确选项:Aint a[10];合法的数组元素的最小下标值为()。
A:10B:9C:1D:0正确选项:D应用缓冲文件系统对文件进行读写操作,关闭文件的函数名为()。
西安交通大学实验报告课程__计算机程序设计__实验名称__多态性__第 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.源程序代码://shape类shape.h文件#ifndef SHAPE_H#define SHAPE_H#include<iostream>using namespace std;class Shape{public:virtual double Area()const{return 0.0;}//纯虚函数,在派生类中重载virtual double Volume() const=0;virtual void PrintShapeName() const=0;virtual void Print() const=0;};#endif//point.h点类#ifndef POINT_H#define POINT_H#include"shape.h"using namespace std;class Point:public Shape{int x,y;public:Point(int a=0,int b=0){SetPoint(a,b);}void SetPoint(int a,int b){x=a;y=b;}int GetX(){return x;}int GetY(){return y;}virtual double Volume() const{return 0.0;}virtual void PrintShapeName()const {cout<<"Point:";}virtual void Print()const{cout<<'['<<x<<","<<y<<']';}};#endif//circle.h圆类#ifndef CIRCLE_H#define CIRCLE_H#include<iostream>using namespace std;class Circle:public Point{double radius;public:Circle(int x=0,int y=0,double r=0.0):Point(x,y) {SetRadius(r);}void SetRadius(double r){radius=(r>=0?r:0);}double GetRadius() const{return radius;}virtual double Area() const{return 3.14159*radius*radius;}virtual double Volume() const{return 0.0;}virtual void PrintShapeName() const{cout<<"Circle:";}void Print() const{cout<<"Center=";Point::Print();cout<<";Radius="<<radius<<endl;}};#endif//rectangle.h矩形类#ifndef RECTANGULAR_H#define RECTANGULAR_H#include<iostream>using namespace std;class Rectangle:public Point{double length,width;public:Rectangle(int x=0,int y=0,double l=0.0,double w=0.0):Point(x,y) {SetLength(l);SetWidth(w);}void SetLength(double l){length=(l>=0?l:0);}void SetWidth(double w){width=(w>=0?w:0);}double GetLength() const{return length;}double GetWidth() const{return width;}virtual double Area() const{return length*width;}virtual double Volume() const{return 0.0;}virtual void Print() const{cout<<"Left Top Vertex=";Point::Print();cout<<";Length="<<length<<",Width="<<width<<endl;}virtual void PrintShapeName() const{cout<<"Rectangle:";}};#endif//cylinder.h圆柱体类#ifndef CYLINDER_H#define CYLINDER_H#include"circle.h"#include<iostream>;using namespace std;class Cylinder:public Circle{double height;public:Cylinder(int x=0,int y=0,double r=0,double h=0):Circle(x,y,r) {SetHeight(h);}void SetHeight(double h){height=(h>=0?h:0);}double GetHeight() const{return height;}double Volume() const{return Area()*height;}virtual void PrintShapeName() const{cout<<"Cylinder:";}void Print() const{Circle::Print();cout<<"Height="<<height<<endl;}};#endif//square.h正方形类,几乎跟矩形类一样而已#ifndef SQUARE_H#define Square_H#include"rectangle.h"#include<iostream>using namespace std;class Square:public Rectangle{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{return sidelength*sidelength;}virtual double Volume() const{return 0.0;}virtual void Print() const{cout<<"Left Top Vertex=";Point::Print();cout<<";Length="<<sidelength<<endl;}virtual void PrintShapeName() const{cout<<"Square:";}};#endifmain.h//要求:派生出圆柱类和正方形类,计算面积、体积#include<iostream>#include"shape.h"#include"point.h"#include"circle.h"#include"rectangle.h"#include"square.h"#include"cylinder.h"using namespace std;//为何系统报错提示要输入一个“;”在此句首void virtualViaPointer(const Shape*);void virtualViaReference(const Shape&);int main(){//创建point circle rectangular对象信息Point point(30,50);Circle circle(120,80,10.0);Rectangle rectangle(10,10,8.0,5.0);Square square(10,20,5.0);Cylinder cylinder(120,80,10.0,40.0);//输出point circle rectangular 对象信息point.PrintShapeName();point.Print();cout<<endl;circle.PrintShapeName();circle.Print();rectangle.PrintShapeName();rectangle.Print();square.PrintShapeName();square.Print();cylinder.PrintShapeName();cylinder.Print();//定义基类对象指针Shape *arrayOfShapes[5];//定义了个基类指针arrayOfShapes[0]=&point;arrayOfShapes[1]=&circle;arrayOfShapes[2]=&rectangle;arrayOfShapes[3]=□arrayOfShapes[4]=&cylinder;//通过基类对象指针访问派生类对象cout<<"Virtual function calls made off"<<"base-class pointers\n";for(int i=0;i<5;i++)virtualViaPointer(arrayOfShapes[i]);cout<<"Virtual function calls made off"<<"base-case references\n";for(int j=0;j<5;j++)virtualViaReference(*arrayOfShapes[j]);return 0;}//通过基类对象访问虚函数实现动态绑定void virtualViaPointer(const Shape*baseClassPtr){baseClassPtr->PrintShapeName();baseClassPtr->Print();cout<<"Area="<<baseClassPtr->Area();cout<<"\tVolume="<<baseClassPtr->Volume()<<endl; }//通过基类对象引用访问虚函数实现动态绑定void virtualViaReference(const Shape &baseClassRef) {baseClassRef.PrintShapeName();baseClassRef.Print();cout<<"Area="<<baseClassRef.Area();cout<<"\tVolume="<<baseClassRef.Volume()<<endl; }2.实验结果:(三)第三题:扩充实例编程中的日期类,为Date增加一个成员函数,可以判断日期是否为系统当前日期。