CPP上机实验题目(2011版)
- 格式:doc
- 大小:85.00 KB
- 文档页数:14
1、打开proj1.cpp,函数的功能是返回所给字符串中大写字母的个数,删除程序代码里面的下划线,并补充相应的代码。
(注意:不要改动其它代码,不得增行或删行,也不得更改程序的结构)(15分)#include "iostream.h"int fun(char s[]){ int i,c=0;for(i=0;s[i]!='\0';i++)if(____________________) //删除下划线并填入答案c++;return c;}解:s[i]>=’A’&&s[i]<=’Z’2、打开proj1.cpp,程序的功能是统计一个字符串包含英文字母的个数,在两条星线间填入相应的内容,使得程序完成该功能。
(注意:不要改动其它代码,不得更改程序的结构)(15分)#include "iostream.h"#include "stdio.h"void main(){ char text[200]; i nt n=0;cout<<"输入一个字符串:"<<endl;gets(text);//**********两条星线间填入相应的内容*******//**********两条星线间填入相应的内容*******cout<<"英文字母的个数是:"<<n<<endl;}解:int i=0;for(i=0;text[i]!='\0';i++)if(text[i]>='A'&&text[i]<='z')n++;3、打开proj1.cpp,将数组b中的字符串复制到数组a中,在两条星线间填入相应的内容,使得程序完成该功能。
(注意:不要改动其它代码,不得更改程序的结构)(15分)#include "iostream.h"void main(){ char a[100],b[]="Y ou are a student."; int i=0;for( ; a[i]!='\0';i++)//*************两条星线之间填入相应的内容***********//*************两条星线之间填入相应的内容***********cout<<a<<endl;}解:{a[i]=b[i];if(b[i+1]=='\0')break;}a[i+1]='\0';4、打开proj1.cpp 该程序的功能是,求100以内的自然数中被14整除的最大数。
上机考试题(1)定义一个学生成绩类Score,描述学生成绩的私有数据成员为学号(No)、姓名(Name[8])、数学(Math)、物理(Phi)、数据结构(Data)、平均分(ave)。
定义能输入学生成绩的公有成员函数Write(),能计算学生平均分的公有成员函数Average(),能显示学生成绩的公有成员函数Display()。
在主函数中用Score类定义学生成绩对象数组s[3]。
用Write()输入学生成绩,用Average()计算每个学生的平均分,最后用Display()显示每个学生的成绩。
实验数据:No Name Math Phi Data Ave1001 Zhou 80 70 601002 Chen 90 80 851003 Wang 70 75 89(2)建立一个存放素数的类Prime,具体要求如下。
①私有数据成员。
"int a[25]:存放指定范围内的所有素数。
int n1,n2:存放指定范围的下限和上限int num:存放素数的个数。
②公有成员函数Prime(int m1,int m2):构造函数,用参数m1、m2初始化n1、n2,同时初始化num。
void primef():求指定范围内的所有素数,把它们依次存放在数组a中。
并将求出的素数个数赋给num。
void show():显示求出的素数的个数及所有的素数,每行输出5个素数。
③在主函数中定义一个Prime类的对象p(100,200),通过p调用成员函数完成求素数及输出素数的工作。
课后习题(1)定义一个复数类Complex,复数的实部Real与虚部Image定义为私有数据成员。
用复数类定义复数对象c1、c2、c3,用默认构造函数将c1初始化为c1=20+40i ,将c2初始化为c2=0+0i,用拷贝构造函数将c3初始化为c3=20+40i。
用公有成员函数Dispaly()显示复数c1、c2与c3 的内容。
!(2)定义一个矩形类Rectangle,矩形的左上角(Left,Top)与右下角坐标(Right,Bottom)定义为保护数据成员。
C++课后练习题答案(待完善版)一、说明:分析程序写运行结果题目的答案是经过VC++6.0运行的,同学们可以自己尝试运行。
如发现所有题目的答案有错误请及时共享。
祝大家考试快乐!!(黑体字问题为未解决问题)第二章●C++进行强制类型转换时有几种格式?⏹答:✧(数据类型)表达式数据类型(表达式)●字符串常量与字符常量有什么区别?'c'和"c"有什么区别?⏹答:✧字符串在内存中的存放形式是:按串中字符的排列次序顺序存放对应字符的ASCII码,每个字符占一个字节,并在字符串末尾添加'\0'作为结束标记。
因此,字符常量所占用的内存字节数比字符串中字符的个数多1。
✧'c'是字符常量,"c"是字符串常量。
●假设程序中有“int a[20],*pa=a;”的语句,要表示数组元素a[i]有哪几种方法?⏹答:✧a[i]、*(a+i)、p[i]、*(p+i)●写出程序的运行结果:(1)#include <iostream.h>int a=100;void main(){int a=200;cout<<a<<','<<::a<<endl;}(2)#include <iostream.h>#include <iomanip.h>void main(){int i,j;for(i=4;i>=1;i--){cout<<setw(i+5)<<' ';for(j=i;j<=4;j++)cout<<'*'<<' ';cout<<endl;}}⏹答:(1)200,100(2)** ** * ** * * *●编程求50~1000之间的,各位上的数字之和等于5的整数。
信息学院11级计算机科学基础II上机试卷B(考试时间70分钟卷面成绩100分)学号姓名机位号说明:首先在Z盘建立一个以自己的学号命名的文件夹,用于存放上交的*.CPP文件和.dat文件,考试结束前根据机房要求,将这个文件夹传送到网络服务器上,注意:提交时只保留文件夹中的CPP文件和dat文件。
一、改错题(50分)【要求】调试程序,修改其中的语法错误及逻辑错误(共10处)。
1)只能修改、不能增加或删除整条语句。
2)请在修改行的末尾用"注释符号//+序号"表示此行修改过,如//3)3)源程序以"学号f1.cpp"命名,存入自己学号命名的文件夹中。
如04011011f1.cpp。
【含错误的源程序】#include<iostream>#include<cstring>using namespace std;const day = 2;class CShoes{int ID;string Name;double *Price;public:CShoes( int =0, string ="\0", double * =NULL );CShoes( CShoes & );~CShoes();void Rewrite( int ,string );friend ostream& operator<<( ostream& out, CShoes &obj ){out<<"ID: "<<obj.ID<<endl<<"Name: "<<<<endl<<"Price list: "<<endl;if ( Price ){for ( int i=0; i<day; i++ )out<<obj.Price[i]<<'\t';out<<endl<<endl;}else out<<"No price were recorded.\n\n";return out;}};CShoes::CShoes(int id,string name,double *p):ID(id),name(Name){if(*Price=new double [day])for(int i=0;i<day;i++)Price[i]=p[i];else{cout<<"Memory allocation error\n!";exit(1);}}else Price=p;}CShoes::CShoes(CShoes &obj){ID=obj.ID;Name=;if(Price){if(Price=new double [day])for(int i=0;i<day;i++)Price[i]=obj.Price[i];else{cout<<"Memory allocation error\n!";exit(1);}}else Price=obj.Price;}CShoes::~CShoes(){cout<<"No. "<<ID<<" shoes were cancelled!\n\n";if(Price) delete Price;}void CShoes:: Rewrite(int id,string name ){ID=id;Name=name;if(Price){Price=new double(day);if(!Price){cout<<"Memory allocation error!\n";exit(1);if(Price){cout<<"please input "<<day<<" price records:\n";for(int i=0;i<day;i++)cin>>Price[day];}}int main(){double plist[day]={399,799};CShoes shoes(1,"Sandals",plist);cout<<shoes;CShoes shoes1(shoes);cout<<shoes1;shoes1.Rewrite(6,"Boots");cout<<shoes1;return 0;}二、编程题(50分)【注意】源程序以“学号f2.cpp”命名,存入自己学号文件夹。
第一次上机实验答案1、输入三个整数从大到小排序源码:#include<iostream>using namespace std;int main(){int a,b,c;int max, min;cout <<"请输入三个不等整数:\n";cin>>a>>b>>c;if (a>b){max=a;min=b;}else{max=b;min=a;}if (c>max) cout<<c<<'\t'<<max<<'\t'<<min<<'\n';else if (c<min) cout<<max<<'\t'<<min<<'\t'<<c<<'\n';else cout<<max<<'\t'<<c<<'\t'<<min<<'\n';return 0;}运行结果:2、交换两个整数源码:#include<iostream>using namespace std;int main(){int a,b,c;cout<<"请输入两个数:\n";cin>>a>>b;c=a;a=b;b=c;cout<<"a="<<a<<'\t'<<"b="<<b<<'\n';return 0;}运行结果:3、去掉输出语句cout << "a,b = " ; 对程序的功能有影响吗?如果没有,那么该语句在程序中起何作用?请解释。
安装Visual C ++6.0下载请从群里下载Microsoft Visual Studio.rar。
将下载的文件Microsoft Visual Studio.rar解压后即可使用。
请直接运行文件“Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE”实验一认识C语言【实验目的】1.熟悉C程序设计编程环境Visual C ++,掌握运行一个C程序设计的基本步骤,包括编辑、编译、连接和运行。
编辑:编写源程序文件.c编译:生成目标文件.obj连接:生成可执行文件.exe运行:执行.exe文件。
2.掌握C语言程序设计的基本框架,能够编写简单的C程序。
3.了解程序调试的思想,能找出并改正C程序中的语法错误。
【实验内容】1-1 在磁盘上新建一个文件夹,用于存放C程序,文件夹的名字可以是学号,如D:\3050888。
1-2 编程示例,在屏幕上显示一个短句“Hello World!”。
源程序# include <stdio.h>void main( ){printf("Hello World! \n");}运行结果Hello World!作为第一个实验,在Visual C++编程环境下,以上述C语言源程序为例,介绍运行一个C 程序的基本步骤,请读者按照以下步骤操作。
(1)启动VC++执行“开始”—>“程序”—>“Microsoft Visual Studio 6.0”—> “Microsoft Visual C++ 6.0”,进入VC++编程环境(如图1.1所示)。
图1.1 VC++窗口(2)新建文件执行“文件/File”—>“新建/New”,单击“文件/Files”选项卡(如图 1.2所示),先在“文件/File name”栏中输入test,把C源(程序)文件命名为test.cpp,在“目录/Location”框中选择你已经建立的文件夹,如,D:\3050888,然后选中“C++ Sourse Files”,单击“确定”按钮,在D:\3050888下就新建了文件test.cpp,并显示编辑窗口和信息窗口(如图1.3所示)。
通过本实验巩固《C++语言程序设计》课程教学成果,深入理解结构体、类和对象、继承与多态、指针、链表、动态分配内存和文件操作等C++程序设计中的中高级技术,熟练掌握C++语言的调试方法,初步培养良好的编程习惯和编程风格,初步学习程序文档的撰写方法。
一、题目1、程序控制基础2、IO流类3、数组应用4、简单图形管理5、异质链表6、图书管理系统二、调试环境VC++6.0所有同学必须提交实验报告电子版一份,内容包括:1、填写完整的实验报告;2、所有程序的源代码及注释等相关文件;请将所有文件压缩成rar格式一并提交,题目为“班级学号姓名.rar”。
三、注意事项任何人不得抄袭、拷贝。
凡发现实验报告或源程序雷同,按不及格处理。
题目一程序控制基础(8学时)具体要求:1、输入生日的年、月、日,输出是星期几提示:公元1年1月1日是星期一,需要求出生日离1年1月1日共多少天。
先计算公元1年到本日的上一年年底多少天,再加上本年到生日的上月底共多少天,最后加上当月过去多少天。
注意对闰年进行区别处理;还应注意输入日期不合法时的意外处理。
思考并验证:(1)验证:今天是2011 年8 月15 日,星期一。
你的生日是1992年12月13日,是星期日。
(2)程序中应该对输入日期的合法性进行验证,应该考虑哪些方面?年份不能有负数,月份不能小于0也不能大于12,日期不能大于该月分的天数,也不能小于0.(3)判断闰年的条件是什么?year%400==0||(year%4==0&&year%100!=0)2、证明哥德巴赫猜想:任何大于6的偶数n都能表示为两个素数之和。
要求输入任意一个大于6的偶数,输出两个素数之和,如输入40,输出“40=3+37”。
要求,定义并使用判断素数的函数,函数原形为int sushu ( int a);思考并验证:(1)假设sushu()函数已经定义好了,那main()函数该如何设计?请写出main()函数的算法描述,用到函数sushu()的时候直接调用即可。
实验前言(建议认真阅读)一、上机实验的目的上机实验的目的是提高学生的分析问题、解决问题能力和动手能力,通过实践环节理解C++语言的基本结构和程序设计方法。
通过亲手编程掌握C++语言编程的方法。
二、实验基本内容为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了五个实验。
学生在课内机时先完成指导书中标有“*”号的程序,理解所学的知识,在此基础上再编写其他应用程序。
指导书中的五个实验如下:1. 函数与编译处理2. 指针与引用3. 类和对象4. 继承和派生类5. 多态性三、实验提交(特别提醒)1. 实验题目以附件形式提交,每个附件限一个源程序,附件以实验编号-题号-自己学号.cpp命名;如学号为10051234的同学提交实验1的第5题,则附件命名方式为:1-5-10051234.cpp,错误提交的将被退回。
2. 提交时间定为该次实验课的一周内,过期不再接收。
四、评分和作弊处理1. 要求提交带“*”号实验题,全部题目占期末总评成绩的20%;2. 存在抄袭和被抄袭的作业,无论抄袭与被抄袭者,本门课程平时成绩以零分记。
存在两次及两次以上抄袭和被抄袭者,本门课程以不及格记。
五、实验课要求(重点强调)1. 严禁QQ、MSN等即时软件工具聊天;2. 严紧接听手机、发送短信;3. 严紧玩游戏。
实验1 函数与编译处理一、实验目的1. 掌握函数声明、定义和使用的方法;2. 掌握形参与实参之间的对应关系;3. 掌握函数调用时,形参、实参之间的“值传递”和“引用传递”的区别;4. 掌握函数递归调用的方法;5. 掌握全局变量、局部变量、静态变量的使用方法;6. 掌握文件包含的使用方法。
二、实验内容1. 定义两个函数swap1和swap2,目的是实现两个整数的次序交换,其中swap1的参数是传递值参数,swap2的参数是引用参数,在程序中分别调用这两个函数,其输出结果如下所示:初始值:x=1,y=2调用swap1后的结果:x=1 y=2调用swap2后的结果:x=2 y=12. 编写一个函数,用来计算从键盘上输入的整数的阶乘。
3. 编写函数判断一个数是否是素数,在主程序中实现输入、输出。
4. 编写一个程序,设计一个函数可以计算并返回输入的4个数的平均值。
*5. 给定某个年、月、日的值,例如,2005年7月11日,计算出这一天属于该年的第几天,要求写出计算闰年的函数和计算日期的函数。
三、实验要求1. 结合上课内容,写出程序、调试程序,使用典型数据测试程序,并就实验结果加以分析。
2. 整理上机步骤,总结经验和体会。
3. 完成实验,并上交程序。
实验2 指针与引用一、实验目的1. 熟练掌握指针、地址、指针类型、void指针、空指针等概念;2. 熟练掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算和指针表达式;3. 会使用数组的指针和指向的指针变量;4. 会使用字符串的指针和指向字符串的指针变量;5. 学会使用指向函数的指针变量;6. 了解指针与链表关系。
二、实验内容1. 编写一个函数f,将传入此函数的直角坐标值转换为极坐标值,并返回主调函数中。
求极坐标的公式是:c=22yxq=arctan(y/x)若要将两值返回主调函数,有多种方式可以完成,请试之:(1)两值均以指针形参带回(2)由指针形参带回一个值,函数值返回另一个值(3)两值均以引用形参返回(提示:程序中可以使用库函数sprt、pow及atan,它们的头文件为math.h)2. 使用指针变量对一字符串按照字母,空格、数字和其他字符进行分类统计(提示:读一行字符包括空格用函数cin.getline(ch, 81) )。
3. 用指针变量设计一通用函数,该函数查找实型数组中最大和最小元素并输出相应元素和下标。
三、实验要求1. 结合上课内容,写出程序、调试程序,使用典型数据测试程序,并就实验结果加以分析。
2. 整理上机步骤,总结经验和体会。
3. 完成实验,并上交程序。
实验3 类和对象一、实验目的1. 掌握类的概念、类的定义格式、类的成员属性和类的封装性;2. 掌握对象的定义;3. 理解类的成员的访问控制的含义,公有、私有和保护成员的区别;4. 掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数,能够根据给定的要求定义类并实现类的成员函数;5. 掌握友元函数的含义,友元函数和成员函数的区别。
二、实验内容1. 定义一个圆类,计算圆的面积和周长。
要求:分别用成员函数和友元函数来求圆的面积和周长。
2. 定义一个学生类,其中有3个数据成员有学号、姓名、年龄,以及若干成员函数。
同时编写主函数使用这个类,实现对学生数据的赋值和输出。
要求:(1)使用成员函数实现对数据的输入、输出;(2)使用构造函数和析构函数实现对数据的输入、输出。
*3. 定义日期类型Date。
要求有以下成员:(1)可以设置日期;(2)日期加一天操作;(3)输入函数,输入格式为:XXXX XX XX,如2010 4 13;(4)输出函数,输出格式为:XXXX年XX月XX日,如2010年4月11日。
*4. 设计一个float类型的数组类CFltArray,要求CFltArray可以进行如下操作:(1)可以重置数组的大小(Resize)(2)可以通过下标返回数组元素,并对下标越界情况进行检查(3)可以利用已知数组对象对整个数组赋值和初始化(4)可以返回当前数组的大小(Size)最后用数据验证你所设计的类。
提示:(1)利用已知数组对象对整个数组赋值,说明要求重载等号运算符(2)利用已知数组对象对整个数组初始化,说明要求重载拷贝构造函数(3)要求用指针存储数组对象中元素三、实验要求1. 结合上课内容,写出程序、调试程序,使用典型数据测试程序,并就实验结果加以分析。
2. 整理上机步骤,总结经验和体会。
3. 完成实验,并上交程序。
实验4 继承与派生类一、实验目的1. 理解继承的含义,掌握派生类的定义方法和实现;2. 理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;3. 理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;4. 理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。
二、实验内容*1. 编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。
要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher 的基类。
*2.编写一个程序计算出球、圆柱和圆锥的表面积和体积。
要求:(1)定义一个基类圆,至少含有一个数据成员半径;(2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数。
(3)定义主函数,求球、圆柱、圆锥的和体积。
三、实验要求1. 结合上课内容,写出程序、调试程序,使用典型数据测试程序,并就实验结果加以分析。
2. 整理上机步骤,总结经验和体会。
3. 完成实验,并上交程序。
实验5 多态性一、实验目的1. 掌握用成员函数重载运算符的方法;2. 掌握用友元函数重载运算符的方法;3. 理解并掌握利用虚函数实现动态多态性和编写通用程序的方法。
二、实验内容与步骤*1. 上机实验题一定义一个复数类,通过重载运算符:*,/,直接实现二个复数之间的乘除运算。
编写一个完整的程序,测试重载运算符的正确性。
要求乘法“*”用友元函数实现重载,除法“/”用成员函数实现重载。
⑴分析两复数相乘的计算公式为:(a+b i)*(c+d i)=(ac–bd )+(ad+bc) i两复数相除的计算公式为:(a+b i)/(c+d i)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d) i复数类及运算符重载函数可定义为:class Complex{float Real, Image;public:C omplex(float r=0,float i=0){Real=r;Image=i;}v oid Show(){cout <<"Real="<<Real<<'\t'<<"Image="<<Image<<'\n';}friend Complex operator *(Complex &, Complex &);Complex operator/(Complex &); //重载运算符/};Complex operator*(Complex &c1,Complex &c2){Complex t;t.Real = c1.Real * c2.Real - c1.Image * c2.Image;t.Image = c1.Image * c2.Real + c1.Real * c2.Image;return t;}Complex Complex::operator/(Complex &c){Complex t;t.Real = (Real *c.Real+ Image * c.Image)/(c.Real*c.Real+ c.Image * c.Image);t.Image = (Image *c.Real - Real * c.Image)/(c.Real*c.Real+ c.Image * c.Image);return t;}⑵上机要求增加重载复数的加法和减法运算符的功能,实现两个复数的加法,一个复数与一个实数的加法;两个复数的减法,一个复数与一个实数的减法。
用成员函数实现加法运算符的重载,用友元函数实现减法运算符的重载。
自已设计主函数,完成程序的调试工作。
*2. 上机实验题二编写程序:声明一个哺乳动物类Mammal,再由此派生出狗类Dog和猫类Cat。
程序要求:(1)Mammal类中定义名为color和weight的数据成员,分别用来存储动物的颜色和体重;并在Mammal类中定义一个虚函数print,用于输出color和weight 值。
(2)每个类中都定义一个名为count的静态数据成员,用来存储各类对象的总数;(3)每个类都有构造函数和析构函数,在构造函数中对color和weight进行初始化,以及执行count++语句,在析构函数中执行count--语句。
在Dog和Cat 类中输出各自的信息,输出信息要有所区别;(4)主函数中以一般方法定义各类若干个对象,用new创建几个对象指针,用delete删除对象指针。