2009-2010-3学期上机习题

2018-12-19 21:11

上机习题

一、 编程题

〔题目〕本程序用于查找一组数中呈现峰值的数及其个数。所谓呈现峰值的数,是指满足下列条件的数组元素a[i]: a[i-1]a[i+1] 或者 a[i-1]>a[i] 且 a[i]

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] 12 13 21 34 32 41 24 12 11

中a[3]既大于a[2]又大于a[4],a[4]既小于a[3]又小于a[5]。故a[3]、a[4]、a[5]即为正、负峰值(不含第0个和最后一个) 运行时可输入如下数据调式程序:

12 13 21 34 32 41 24 12 11 //3个峰值 11 12 13 14 15 16 17 18 19 //0个峰值 要求:

1. 在主函数中,数组a[10]中的数据由文件file1.txt中读入后由屏幕输出;由主函数调用voud find(int a[ ],int b[ ])函数,找出结果,

并存入数组b中,并输出查找的结果(包括文件输出和屏幕输出)输出的文件为file2.txt。 2. voud find(int a[ ],int b[ ])函数根据以上算法找出峰值,并返回峰值的个数 3. 输出格式如下: 【运行结果】 测试数据如下:

a[i]= 12 13 21 34 32 41 24 12 11 计算结果:

b[i]= 34 32 41 有3个峰值

二、 从一个整型数组中删除所有小于数组元素平均值并且不是素数的那些整数。

【编程要求】

1) 编写函数int del(int r[ ], int n),计算r数组中前n个整数的平均值,删除数组中所有小于该平均值并且不是

素数的那些数,函数返回r数组中剩余整数的个数。

2) 编写main函数,声明数组resource并由文件file1.txt中读入后由屏幕输出,调用del函数处理数组resource中的

数据,将resource数组中剩余的整数输出到屏幕和文件file2.txt中。 【测试数据与运行结果】

数组初始数据为: 17 5 6 18 8 28 运行结果: 17 5 18 28 三、 编写并调试字符数组应用程序

【程序功能】将字符串中字符分类提取出来,分别存放并形成2个新的子串,然后依次输出各字符串。

例如,输入字符串:\ cbm578df afg3791\,则能够输出: 24685783791 hkywercbmdfafg

【程序要求】编写并调试以下函数,函数中可以定义你认为需要的局部变量。 (1)void divide(char * ps, char sub[], int len); (20分)

扫描ps所指向的字符串,若遇到数字字符则依次存储在sub数组的低下标一端(下标依次为0,1,2,..),若遇到字母字符则依次存储在sub数组的高下标一端(下标依次为len-2, len-1,?,len为sub数组的空间长度)。分类处理结束后在sub数组合适的位置为2个新串插入字符串结束符。

(2)int Output(char * ps, char *sub , int len); (10分)

屏幕显示字符串ps和字符数组sub中的2个字符串。len为sub数组的空间长度。同时计算并返回sub数组中数字字符的个数。

(3)main()函数。 (10分)

在main函数中定义一个字符数组str[80],定义一个字符数组substr[100]。测试数据为\ jkl456qw bm56df

1

\并为str赋值,通过调用以上函数的方式完成字符串的输入、处理(分类复制)、屏幕输出。有返回值的函数输出返回结果。

(4)在main函数中: (10分)

将字符串str和字符数组substr中的第一个字符串写入到磁盘文件\。 打开文件语句:ofstream out(\

【提示】文件操作运算符包含在fstream头文件中。包含头文件可使用串复制函数strcpy(),求串长度函数strlen()。

【注意】调试完后将源程序以“学号F1.cpp”为文件名存入Z盘自己的目录中。 四、 字符串处理与文件读写程序

【要求】

1. 建立3个字符型数组a[50]、b[50]和c[50]。在数组a中存入字符串\,并输出至屏幕。 2. 编写函数void apart(char *s1, char *s2, char *s3),功能是将字符串s1中的英文字符提取出来复制到数组s2中,将字符串s1中

的数字字符提取出来复制到数组s3中。主函数调用函数apart(a, b, c)将a中的字符串分离为字母串b和数字串c,返回后将b和c字符串输出至屏幕。

3. 定义一个文件流对象iofile,以文本方式打开磁盘文件\。依次将数组a、b和c中的字符串数据写入文件。 4. 将文件\中的内容读出,输出至屏幕。三个字符串各占一行。 【提示】头文件包含语句为:

#include #include

五、 有一组若干个整数存放于文件中,并已按由小到大的顺序排列好.请编写一个类ARR, 完成以下功能:

1. 2.

构造函数完成数组a的初始化工作;

void DelSame()函数完成将数据中相同的数删除后只剩下一个。

例如: 原数据为: 1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10 经删除后, 变为: 1,2,3,4,5,6,7,8,9,10

3. void Show(char * fname)函数完成将结果数据输出到屏幕同时输出到文件

私有数据成员:

1. int n; 数据实际个数

2. int a[100]; 存放原始数据及结果的数组

使用如下主函数进行测试:

void main() {

int b[ ]={1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10}

ARR a(b); a.DelSame();

a.Show(\}

六、 面向对象编程:模拟图书管理应用程序

【要求】按以下描述和要求建立一个类Book,执行主函数对其测试。

私有成员 int No; //图书序号 int cap; //图书库存数量(库存最多允许10本) double Price; //图书价格 int lend; //已借出图书数量 公有成员

Book (int a=0, int b=0, double c=0); //构造函数(a,b,c初始化数据成//员中的序号、数量和价格,lend//赋值0) int input(double m); //添加图书数量m本(若cap+m超过10则//提示“只能添加x本” //返回-x。x表示能//添加的数量) 2

Book void lendout(int n); //借出n本图书(如果库存足够,给出“借书//成功!”的提示,否则//显示数量差额的提示信//息。),对有关的数据成员cap和lend做相//应的运算。 void giveback (int n); //归还图书n本(cap和lend相应加减n) int getcap ( ); //返回图书数量 int getlend ( ); //返回借出图书数量 double getprice ( ); //返回图书价格 void display() ; //输出序号、数量、价格和借出数量

主函数要求:

1. 定义Book类对象A(101, 2, 35.8)和B(102, 5, 66.2)。 2. 调用函数input为对象A和B做添加图书操作:A. input(3); B. input(8); 如有添加失败,则重新添加合适的数量。调用函数display

输出对象A和B的全部数据,每个对象的信息占一行。

3. 调用函数lendout做借出操作,先比较对象A和B的价格,借较高价格的图书3本,借较低价格的图书8本。再调用函数

display输出对象A和B的全部数据。再调用函数giveback做归还操作,还书数量自定。 4. 计算并输出所有图书的总数量sum。

要求:写出所有成员函数的完整代码。

主函数代码参考: void main(){ int t,sum=0; Book A(101, 2, 35.8)和B(102, 5, 66.2); t=A.input(3); if(t<0) A.input(t); t=B.input(8); if(t<0) B.input(t); A.display(); B.display(); if( A.getprice() > B.getprice() ){ A.lendout(3); B.lendout(8); } else{ B.lendout(3); A.lendout(8); } A.display(); B.display(); A.giveback(2); B.giveback(5); A.display(); B.display(); sum=A.getcap()+A.getlend()+B.getcap()+B.getlend(); cout<<\所有图书的总数量=\}

七、 面向对象编程:模拟学生作业管理程序

【要求】按以下描述和要求建立一个类Student,执行主函数对其测试。 私有

int id; //学号 char *name; //姓名(字符串) 3

Student 成员 公有成员 int job; //交作业次数 int cent; //作业成绩(每交一次作业,分值加5) Student(int a=0, char *b=NULL, int c=0 , int d=0); //带缺省值的构造函数,(缺省值为0或NULL,用实参值为//数据成//员赋值。如果c>0则计算成绩cent) Student(Student &b); //拷贝构造函数,(新对象学号为复制的学号加10) ~Student(); //析构函数,释放分配的内存 void setname(char *); //修改姓名 void upjob(int n); //上交作业n次并计算成绩 int getcent(); //返回作业成绩 void display(); //输出对象的全部数据 头文件包含语句为:

#include #include 主函数要求:

1. 定义Student类对象A(1101, 王林)、B(1202, 李明)、C(A)和D=B(C、D数据由A、B拷贝而来)。 2. 调用函数修改C和D的姓名,继续交作业(次数自定)。

3. 调用函数display输出对象A、B、C和D的全部数据。每个对象的信息占一行。 4. 计算并输出4个对象的平均成绩。

提示:构造函数需要为name字符串动态分配内存。包含头文件可使用串复制函数strcpy(),求串长度函数strlen()。 要求:写出所有成员函数的完整代码。 主函数参考代码:

void main(){

Student A(1101, \王林\李明\ C.setname(\张山\ D.setname(\陈志\

A.display(); B.display(); C.display(); D.display(); A.upjob(4); C.upjob(8); D.upjob(6);

A.display(); B.display(); C.display(); D.display();

cout<<\、B、C、D的平均成绩=\+C.getcent()+D.getcent())/4<

【注意】 将源程序以文件名CF2.cpp存入Z盘自己的目录中。

八、 面向对象编程

【问题描述】模拟银行保管箱管理,每个用户只有身份标识符和物品数量两个数据,用数组元素下标代替箱号。模拟存物和取物,统计物品数量。输出数据。

【要求】按以下描述和要求建立一个保管箱类Boxes,执行主函数对其测试。

Boxes int *box ; //指向动态分配内存的保管箱数组,下标为箱号, 私有//元素值为0表示空箱;大于0表示该箱中存入的物品数量。 成员 char *flag ; //指向客户身份标识符数组(下标为箱号,与box数组相对应) static int sum; //累计当前全部用户存入的物品数量 Boxes(int); //带缺省值的构造函数,动态分配box和flag数组空间, 公有//数组长度由形参给定,缺省值为10。数组元素初始值为零。(5分)

4

成员 ~Boxes( ); //析构函数,释放分配的内存 (5分) void put(int n, char m); //选择一个空箱存入n件物品,填写客户标识符, //并将物品数量累加到sum;若找不到空箱则输出提示信息。(10分) void get(char m); //取出物品。根据客户标识符m在flag中查找,找到后 //在box中取出物品并清空保管箱(置0),并在sum中扣除已取出物品数。 //若找不到则输出提示信息。(10分) void display(); //输出保管箱类所有数据,统计占用箱个数和空闲箱个数。 //最后输出现存物品数量。(10分) 头文件包含语句为:#include

int Boxes::sum=0; //在类定义外面对静态成员做定义性说明并赋初值为零。 主函数要求:(10分)

1. 定义Boxes类对象A, B(2)。数组元素初始值为零。

2. 调用函数put为对象A和B做存入物品的操作:A.put(5, ?R?); B.put(9,?K?); A. put(8, ?P?); B. put(15, ?H?); B. put(40, ?F?); 调用函数display输出对象A和B的全部数据。

3. 调用函数put和get为对象A和B做存储和取出操作:B. get(?H?); B. put(40, ?F?); A. get(?S?) ; A. get(?R?); A. put(12, ?M?);

4. 调用函数display输出对象A和B的全部数据,每个保管箱的输出包括下述内容:

a) 正使用保管箱的客户标识及其存储物品数(每个客户信息占一行); b) 统计出该保管箱的使用情况(占用箱个数和空闲箱个数); c) 目前现存物品数量。

【注意】 调试完后将源程序以文件名:“学号F2.cpp”存入Z盘自己的目录中。 一、编写并调试数组应用程序

【程序功能】将二维数组中的符合条件的数复制到一维数组中,利用数据类型的不同形成一个新的字符串,然后依次输出各数组数据。

【程序要求】编写并调试以下函数,函数中可以定义你认为需要的局部变量。 (1)void Input(int mat[][COL], char st[] , int n); (20分)

产生100以内的随机整数存放到二维数组mat中。参数表中的COL为整数常量(可宏定义)表示二维数组的列数,n为二维数组的行数(下同)。随机数可以使用rand()对所需的整数范围取模运算(%)来获得。将数值在65~90之间的元素查找出来复制到字符数组st中。最后在第一个空下标变量处插入字符串结束符。 (2)int Output(int mat[][COL], char *st , int n); (10分)

屏幕显示二维数组mat的数据,要求输出成二维矩阵的形式。输出字符数组st中的字符串。同时计算并返回st数组中字符的个数。

(3)main()函数。 (10分)

在main函数中定义一个二维数组data[4][ COL](可以使COL表示5),定义一个字符数组ps[20]。通过调用以上函数的方式完成数据的输入、处理(将二维数组data中的符合条件的数复制到一维数组ps中)、屏幕输出。有返回值的函数输出返回结果。

(4)在main函数中: (10分)

将二维数组data的数据写入到磁盘文件\。 打开文件语句:ofstream out(\【提示】文件操作运算符包含在fstream头文件中。产生随机数需头文件。随机数产生方法请参考MSDN(VC开发环境下按F1键)。包含头文件可使用串复制函数strcpy(),求串长度函数strlen()。 【注意】 调试完后将源程序以“学号F1.cpp”为文件名存入D盘自己的目录中。 二、面向对象编程

【问题描述】模拟学生作业管理,对每个学生只记录姓名、交作业次数和奖励等级,用数组元素下标代替学号。根据交作业次数设置奖励等级,输出数据。

【要求】按以下描述和要求建立一个类Student,并编写主函数对其测试。

5

Student 私有成char * name; //姓名, 需要在构造函数中动态分配内存 员 int job; //交作业次数 char prize; //奖励等级(以字符A、B、C表示三个等级,值为0表示无奖励) Student(char *, int , char); //带缺省值的构造函数,参数分别是:姓名, //交作业次数,奖励等级(每个形参的缺省值均为0或NULL)(5分) 公有成Student(Student &); //拷贝构造函数。 (5分) 员 ~Student(); //析构函数,释放动态分配的内存 (5分) void setnamejob(char *, int); //修改姓名和作业次数, //(注意动态分配的内存的处理)(5分) void setprize (); //计算奖励等级,(A—交作业≥20次;B—交作业≥15次且 //不到20次;C—交作业≥10次,不到15次;9次以下无奖励)(10分) void display(); //输出对象的全部数据 (10分) 头文件包含语句为: #include #include 主函数要求:(10分)

1) 定义Student类对象A(“Wang”, 22, 0)、B(“Zhao”, 13, 0)、C(A)和D=B(C、D数据由A、B拷贝而来)。 2) 调用函数修改C和D的姓名和作业次数,修改为:

C姓名“Zhang”,作业18次; D姓名“Li”,作业8次。

3) 调用函数setprize 为对象A、B、C和D设置奖励等级(根据交作业次数)。

4) 调用函数display输出对象A、B、C和D的全部数据。每个对象的信息占一行,以A为例,输出格式如下:

101 Wang 交作业22次 奖励等级:A

【提示】构造函数需要为name字符串动态分配内存。其它函数注意动态分配的内存的处理。包含头文件可使用串复制函数strcpy(),求串长度函数strlen()。

【注意】 调试完后将源程序以文件名“学号F2.cpp”存入D盘自己的目录中。

6


2009-2010-3学期上机习题.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七年级语文上册期末系统复习资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: