东南大学11级计算机科学基础II试卷A机试试卷
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息学院11级计算机科学基础II上机试卷A
(考试时间70分钟卷面成绩100分)
学号姓名机位号
说明:首先在Z盘建立一个以自己的学号命名的文件夹,用于存放上交的*.CPP文件和.dat文件,考试结束前根据机房要求,将这个文件夹传送到网络服务器上,注意:提交时只保留文件夹中的CPP文件和dat文件。
一、改错题(50分)
【要求】调试程序,修改其中的语法错误及逻辑错误(共10处)。
1)只能修改、不能增加或删除整条语句。
2)请在修改行的末尾用"注释符号//+序号"表示此行修改过,如//3
3)源程序以"学号f1.cpp"命名,存入自己学号命名的文件夹中。如04011011f1.cpp。
【含错误的源程序】
#include
#include
using namespace std;
#define day 3
class CGlasses
{ int ID;
string Name;
double *Price;
public:
CGlasses( int =0, string ="\0", double * =NULL );
CGlasses(CGlasses &);
~CGlasses();
void Rewrite( int ,string );
friend ostream& operator<<( ostream& out, CGlasses &obj )
{
out<<"ID: "< if(obj.Price) { for(int i=0;i out< out< } else out<<"No price were recorded.\n\n"; return cout; //错误2改为:return out; } }; CGlasses::CGlasses( int id, string name, double *p) : id(ID), Name(name) //错误4上一行改为:CGlasses::CGlasses( int id, string name, double *p) : ID(id), Name(name) { if ( !p )//错误5改为:if ( p ) { if ( Price=new double [day] ) for ( int i=0; i Price[ i ] = p[ i ]; else { cout<<"Memory allocation error\n!"; exit(1); } } else Price=p; } CGlasses::CGlasses( CGlasses obj )//错误6改为:CGlasses::CGlasses( CGlasses &obj ) { ID=obj.ID; Name=; if ( obj.Price ) { if ( Price=new double [day] ) for ( int i=0; i Price[ i ] = obj.Price[ i ]; else { cout<<"Memory allocation error\n!"; exit(1); } } else Price=obj.Price; } ~CGlasses() //错误7改为:CGlasses::~CGlasses() { cout<<"No. "< if ( Price ) delete Price; //错误8改为:if ( Price ) delete [] Price; } void CGlasses:: Rewrite( int id, string name ) { ID=id; Name=name; if ( !Price ) { Price=new double(day); //错误9改为:Price=new double[day]; if ( !Price ) { cout<<"Memory allocation error!\n"; exit(1); } } if ( Price ) { cout<<"please input "< for ( int i=0; i cin>>Price[ i ]; } } int main() { double plist[day]={70,85,78}; CGlasses glass(10,"Sun glasses",*plist); //错误10 上一行改为:CGlasses glass(10,"Sun glasses",plist); cout< CGlasses glass1( glass ); cout< glass1.Rewrite(11,"Hyperopic glasses"); cout< return 0; } 二、编程题(50分) 【注意】源程序以“学号f2.cpp”命名,存入自己学号文件夹。 【题目】文件“sin.dat”用于保存正弦函数值,生成公式是:y = sin(2*pi*f*t + thet) 公式(1) 其中:pi为圆周率(取值3.1415926), f为频率(单位:赫兹/Hz),t为时间(单位:秒/s)取值范围是0到tend,thet为初始相位(单位:弧度/rad)。该文件中已给数据存储格式如下: 1)前8个字节作为一个双精度实数表示信号频率f; 2)接着又是8个字节作为一个双精度实数表示信号结束时间tend; 3)然后还是8个字节作为一个双精度实数表示信号初始相位thet; 4)最后是4个字节作为一个整数表示需要生成的信号样值数n。 遵照公式(1) 均匀生成从时间0到tend的n个双精度实数的sin信号样值(C++求x正弦的标准库函数为double sin(double x)),即第一个信号样值是sin(thet),最后一个信号样值是sin(2*pi*f*tend + thet),共计n个。要求: 1)分别将以上4个从文件中得到的参数在屏幕输出,每行一个参数,格式为:参数名= 参数值例如:f = 100.2 2)将以上生成的n个值在屏幕上输出,每行5个,各值显示宽度为16; 3)将这n个双精度实数紧挨着前面的4个参数以二进制形式顺序保存在“sin.dat”文件中。 【注意】sin.bak为sin.dat的备份文件。 【参考答案】 //以下红颜色的为添加的代码 #include #include #include #include using namespace std; const double pi=3.1415926 ; int main() { fstream finout( "sin.dat" , ios::in | ios::out | ios::binary ); double f , tend , thet ; int n ;