HZAU-专业C++2实验4(计算机3-4班)
程序设计题
1. (10分)
栈类——类模板
题目描述
用类模板方式设计一个链栈类stack
*head(链首指针,即栈顶元素指针),int num(栈里结点数)以及3个公有成员函数:push(元素入栈)、pop(元素出栈)和stackempty(判断栈是否为空),并建立一个整数栈和一个字符栈。
template
class stack
{
};
注意:为了能够生成结点类型不同的链式栈,结点类的设计也需要用类模板。template
class Node
{
};
输入描述
输入整数栈的数据元素和字符栈的数据元素
输出描述
输出整数栈的数据元素出栈序列和字符栈的数据元素出栈序列
输入样例
4 8 3 2
a d
b c
输出样例
2 3 8 4
c b
d a
2. (10分)
二进制类(1)——运算符重载
题目描述
将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,系统应该都能接受。另外有一个类型转换函数int(),用来将类类型向整型转换。两个重载运算符“+”,“-”,用来完成两个二进制数之间的加减运算。
class binary { //定义二进制类
char bits[16]; //二进制字模数组
public:
binary(char *); //字符串参数构造函数
binary(int); //整型参数构造函数
friend binary operator +(binary,binary); //重载“+”
friend binary operator -(binary,binary); //重载“-”
operator int(); //类类型转换函数
void print();
};
主函数设计如下:
int main()
{
binary n1="1011";
binary n2=int(n1)+15;
binary n3=n1-binary(7);
n1.print();
n2.print();
n3.print();
cout< cout< cout< cout< return 0; } 输入描述 无 输出描述 略 输入样例 无 输出样例 0000000000001011 0000000000011010 0000000000000100 31 21 9 -1 3. (10分) 二进制类(2)——运算符重载 题目描述 在上一题的基础上,将+ 、- 运算符定义为binary类的成员函数。并且重载运算符~ 、& 、| ,分别将二进制数按位取反、数按位与及按位或。主函数设计如下:int main() { binary n1="1011"; binary n2=int(n1)+15; binary n3=n1-binary(7); n1.print(); n2.print(); n3.print(); binary n4=n1&n2; binary n5=n1|n2; binary n6=~n1; n4.print(); n5.print(); n6.print(); return 0; } 输入描述 无 输出描述 略 输入样例 无 输出样例 0000000000001011 0000000000011010 0000000000000100 0000000000001010 0000000000011011 1111111111110100 4. (10分) 图形类——继承和派生 题目描述 定义一个图形类,其中有保护类型的成员数据:高度和宽度,一个公有的构造函数。由该图形类建立两个派生类:矩形类和等腰三角形类。在每个派生类中都包含一个函数Area(),分别用来计算矩形和等腰三角形的面积。提示: class pic { }; class recg:public pic { }; class tag:public pic { }; 输入描述 输入矩形的长和宽以及等腰三角形的底边长和高。 输出描述 矩形的面积和等腰三角形的面积 输入样例 3 5 3 5 输出样例 15 7.5 5. (10分) 人员管理信息系统——继承与派生题目描述 阅读以下程序,并调试运行。 #include #include using namespace std; class employee { protected: char *name; //姓名 int individualEmpNo; //个人编号 int grade; //级别 float accumPay; //月薪总额 static int employeeNo; //本公司职员编号目前最大值public: employee(); //构造函数 ~employee(); //析构函数 void pay(); //汁算月薪函数 void promote(int); //升级函数 void displayStatus(); //显示人员信息 }; class technician:public employee //兼职技术人员类 { private: float hourlyRate; //每小时酬金 int workHours; //当月工作时数 public: technician(); //构造函数 void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; class salesman: virtual public employee //兼职推销员类 { protected: float CommRate; //按销售额提取酬金的百分比 float sales; //当月销售额 public: salesman(); //构造函数 void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; class manager: virtual public employee //经理类 { protected: float monthlyPay; //固定月薪数 public: manager(); //构造函数 void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; class salesmanager:public manager,public salesman //销售经理类{ public: salesmanager(); //构造函数 void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; int employee::employeeNo=1000; //员工编号基数为1000 employee::employee() { char namestr[50]; //输入雇员姓名时首先临时存放在namestr中 cout<<"请输入下一个雇员的姓名:"; cin>>namestr; name=new char[strlen(namestr)+1]; //动态申请用于存放姓名的内存空间 strcpy(name,namestr); //将临时存放的姓名复制到name individualEmpNo=employeeNo++; //新输入的员工,编号为目前最大编号加1 grade=1; //级别初值为1 accumPay=0.0; //月薪总额初值为0 } employee::~employee() { delete []name; //在析构函数中删除为存放姓名动态分配的内存空间 } void employee::pay() //计算月薪,空函数 { } void employee::promote(int increment) { grade+=increment; //升级,提升的级数由increment指定 } void employee::displayStatus() //显示入员信息,空函数 { } technician::technician() { hourlyRate=100; //每小时酬金100元 } void technician::pay() { cout<<"请输入"< cin>>workHours; accumPay=hourlyRate*workHours; //计算月薪,按小时计酬 cout<<"兼职技术人员"< <<"本月工资"< } void technician::displayStatus() { cout<<"兼职技术人员"< <<"级别为"< salesman::salesman() { CommRate=0.04; //销售提成比例4% } void salesman::pay() { cout<<"请输入"< cin>>sales; accumPay=sales*CommRate; //月薪=销售提成 cout<<"推销员"< <<"本月工资"< } void salesman::displayStatus() { cout<<"推销员"< <<"级别为"< manager::manager() { monthlyPay=8000; //固定月薪80m元 } void manager::pay() { accumPay=monthlyPay; //月薪总额即固定月薪数 cout<<"经理"< <<"本月工资"< } void manager::displayStatus() { cout<<"经理"< <<"级别为"< salesmanager::salesmanager() { monthlyPay=5000; CommRate=0.005; } void salesmanager::pay() { cout<<"请输入"< cin>>sales; employee::accumPay=monthlyPay+sales*CommRate; //月薪=固定月薪+销售提成 cout<<"销售经理"< <<"本月工资"< } void salesmanager::displayStatus() { cout<<"销售经理"< <<"级别为"< } int main() { manager m1; technician t1; salesmanager sm1; salesman s1; m1.promote(3); //经理m1提升3级 m1.pay(); m1.displayStatus(); t1.promote(2); t1.pay(); t1.displayStatus(); sm1.promote(2); sm1.pay(); sm1.displayStatus(); s1.pay(); s1.displayStatus(); return 0; } 输入描述 输出描述 略 输入样例 wang li zhang liu 1 12 13 输出样例 请输入下一个雇员的姓名: 请输入下一个雇员的姓名: 请输入下一个雇员的姓名: 请输入下一个雇员的姓名: 经理wang编号1000本月工资8000 经理wang编号1000级别为4级,已付本月工资8000 请输入li本月的工作时数: 兼职技术人员li编号1001本月工资100 兼职技术人员li编号1001级别为3级,已付本月工资100 请输入zhang所管辖部门本月的销售总额: 销售经理zhang编号1002本月工资5000.06 销售经理zhang编号1002级别为3级,已付本月工资5000.06 请输入liu本月的销售额: 推销员liu编号1003本月工资0.52 推销员liu编号1003级别为1级,已付本月工资0.52 6. (10分) 构造析构函数——继承 题目描述 阅读下面的程序,请编写一个简单的主函数,使其满足对应的输出要求。#include using namespace std; class CBase1 { int x ; public: CBase1( ) {x=0 ; cout<<"调用构造函数CBase1( )!\n";} CBase1( int a) {x=1;cout<<"调用构造函数CBase1( int )!\n";} ~CBase1( ){cout<<"调用析构函数~CBase1( )!\n";} }; class CBase2 { int y; public: CBase2( ) {y=0 ;cout<<"调用构造函数CBase2( )!\n";} CBase2(int a) {y=a ;cout<<"调用构造函数CBase2(int )!\n";} ~CBase2(){cout<<"调用析造函数~CBase2( )!\n";} }; class A { int x; public: A () {x=0 ; cout<<"调用构造函数A( )!\n";} A(int a){x=a;cout<<"调用构造函数A(int )!\n";} ~A(){cout<<"调用析构函数~A()!\n";} }; class CDerived:public CBase1, virtual public CBase2 { A a; public: CDerived() {cout<<"调用构造函数CDerived( )!\n";} CDerived(int x,int y ,int z):a(x),CBase1(y),CBase2(z) {cout<<"调用构造函数CDerived(int,int )!\n";} ~CDerived(){cout<<"调用析造函数~CDerived( )!\n";} }; int main() { } 输入描述 无 输出描述 略 输入样例 无 输出样例 调用构造函数CBase2( )! 调用构造函数CBase1( )! 调用构造函数A( )! 调用构造函数CDerived( )! 调用构造函数CBase2(int )! 调用构造函数CBase1( int )! 调用构造函数A(int )! 调用构造函数CDerived(int,int )! 调用析造函数~CDerived( )! 调用析构函数~A()! 调用析构函数~CBase1( )! 调用析造函数~CBase2( )! main()函数结束! 调用析造函数~CDerived( )! 调用析构函数~A()! 调用析构函数~CBase1( )! 调用析造函数~CBase2( )! 7. (10分) 水果超市管理系统—4—继承与派生 题目描述 水果超市管理系统采用面向对象的程序设计方法开发,继承机制是面向对象程序设计最重要的特征之一,在水果超市管理系统的设计过程中运用继承方法由已有类派生出新类,实现了代码重用。 水果超市的水果分为正价水果和特价水果,它们都是具体的水果,具有水果的特征和属性。在上次实验中我们实现了水果类Fruit的定义,现在可以通过继承方法由水果类派生出“正价水果类(RegularFruit)”和“特价水果类(DiscountFruit)”。 “正价水果类”RegularFruit由“水果类”Fruit派生得来。除了继承水果类原有的成员外, 还新添加了正常售价数据成员,以及相应的构造函数和修改、提取正常售价的成员函数,并对继承自基类的显示水果信息的函数DispFruit()进行了重写。 “特价水果类”DiscountFruit由“水果类”Fruit派生得来。特价水果类除了继承水果类原有的成员外,还新添加了原价和折扣价两个数据成员,以及相应的构造函数和显示、修改、提取折扣价的成员函数等,并对继承自基类的显示水果信息的函数DispFruit()进行了重写。 为了进行验证,设计如下主函数,在主函数部分进行验证。 int main() { RegularFruit r1(101,"国光苹果",1.5,2.0),r2; r1.DispFruit(); r2.SetFruitName("玫瑰香葡萄"); r2.SetFruitNumber(102); r2.SetPurchasePrice(3.0); r2.SetRegularPrice(3.5); r2.DispFruit(); DiscountFruit d1(201,"巨峰葡萄",1.8,2.5,2.0),d2; d1.DispFruit(); d2.SetFruitName("黄金帅苹果"); d2.SetFruitNumber(202); d2.SetPurchasePrice(1.2); d2.SetOriginalPrice(1.8); d2.SetDiscountPrice(1.5);; d2.DispFruit(); return 0; } 输入描述 略 输出描述 在主函数验证部分分别调用正价水果类重载的构造函数创建函数创建有参和无参的两个对象r1和r2,调用特价水果类重载的构造函数创建有参和无参的对象d1和d2进行验证。派生类对象既可以调用派生类中新声明的公有成员,也可以调用从基类继承来的公有成员。当通过派生类对象r1和r2调用DispFruit()函数时,执行的是派生类RegularFruit中重写的函数,从而可以精确输出正价水果的属性。通过d1和d2调用DispFruit()函数时,执行的是DiscountFruit类中重写的函数,因此输出的是特价水果的属性。 输入样例 无 输出样例 正价水果编号:101,名称:国光苹果,售价:2 正价水果编号:102,名称:玫瑰香葡萄,售价:3.5 特价水果编号:201,名称:巨峰葡萄,原价:2.5,现价:2 特价水果编号:202,名称:黄金帅苹果,原价:1.8,现价:1.5 8. (10分) 登山人选问题——深度优先搜索(选作题) 题目描述 攀登一座高山,假定匀速前进,从山脚登到山顶需走N天,下山也需N天。山上没有水和食品,给养要靠登山队员携带,而每个队员所携带的给养量要少于他登顶再返回山脚所消耗的给养量。因此,一定要组成一个登山队,在多人支持的情况下,保证有一个登顶。 现在登山俱乐部有P个人待选,我们将P个人依次编号为k=1,2,...,P,令E[k]表示编号为k的人每日消耗的给养量,M[k]表示编号为k的人最多可携带的给养量。登山计划要求登山队所有成员同时出发,其中一些人分别在启程若干天后返回,最终保证出发N天后至少有一人登顶,出发2N天后所有人都返回山脚,无人滞留山上。编程要求:用键盘输入天数N(N<10)、俱乐部人数P(P<10),之后依次输入E[k]和M[k],k=1,2,...,P,分别输出两个登山组队计划。 计划1:要求参加登山的人数最少,在满足这一条件之下消耗的总给养量最少。 计划2:要求消耗的总给养量最少(人数不限)。 有多少队员参加登山,消耗的总给养量,在出发时每人分别携带多少给养,每人分别在出发几天后返回(几天后开始下山)。题目数据保证有解。 输入描述 略 输出描述 计划1中由2个人组队,分别携带18和24的给养量,分别在出发6天和3天后返回。计划2中由3个人组队,3人分别携带18、17和3的给养量,分别在出发后6天、3天和1天之后返回。 输入样例 6 6 1 2 2 2 3 3 7 8 17 18 22 25 输出样例 2 42 18 24 6 3 3 38 18 17 3 6 3 1 9. (10分) 三色二叉树——二叉树(选做题) 题目描述 一棵二叉树可以按照如下规则表示成一个由0、1、2组成的字符序列,我们称之为“二叉树序列S”:S=0表示该树没有子节点,S=1S1表示该树有一个子节点,S1为其子树的二叉树序列,S=2S1S2表示该树有两个子节点,S1和S2分别表示其两个子树的二叉树序列。例如一棵二叉树,根a有左右孩子bc,b有左孩子d,d有左右孩子ef,c有左孩子g,g有左孩子h。则表示为序列S=21200110。 你的任务是要对一棵二叉树的节点进行染色。每个节点可以被染成红色、绿色或蓝色。并且,一个节点与其子节点的颜色必须不同,如果该节点有两个子节点,那么这两个子节点的颜色也必须不相同。给定一棵二叉树的二叉树序列,请求出这棵树中最多和最少有多少个点能够被染成绿色。 输入描述 输入数据由多组数据组成。 每组数据仅有一行,不超过10000个字符,表示一个二叉树序列。 输出描述 对于每组输入数据,输出仅一行包含两个整数,依次表示最多和最少有多少个点能够被染成绿色。 输入样例 1122002010 输出样例 5 2 10. (10分) 变形虫——队列(选做题) 题目描述 生物学家发明了一种新的非常有用的生物形式,这些生物,若他们两个的质量分别是m1和m2,这样的生物两两碰撞可以合成一个,合成之后的质量是 2*sqrt(m1*m2),最终要全部合成一条。问最终合成得到的最小质量是多少?注意,假定3个或3个以上的生物碰撞到一起不会合成。 输入描述 生物个数及每个生物的质量 输出描述 合成为一条后的最小质量,保留3位小数 输入样例 3 72 30 50 输出样例 120.000 Q308.(10分)第5章实验2:体型判断。 医务工作者经广泛的调查和统计分析,根据身高与体重因素给出了以下按“体指数”进行体型判断的方法。体指数计算公式是: t = w /(h*h) 其中:t是体指数;w是体重,其单位为千克;h是身高,其单位为米。根据给定的体指数t计算公式,可判断你的体重属于何种类型: 当t<18 时,为低体重; 当18≤t<25 时,为正常体重; 当25≤t<27 时,为超重体重; 当t≥27 时,为肥胖。 ****输入提示信息格式:"Please enter h,w:\n" ****输入数据格式要求:"%f,%f"(先读入身高,再读入体重,身高以米读入,体重以千克读入) ****输出数据格式要求: 当t<18 时,输出:"Lower weight!\n" 当18≤t<25 时,输出:"Standard weight!\n" 当25≤t<27 时,输出:"Higher weight!\n" 当t≥27 时,输出:"Too fat!\n" #include 第一章单片机系统板说明 一、概述 单片机实验开发系统是一种多功能、高配置、高品质的MCS-51单片机教学与开发设备。适用于大学本科单片机教学、课程设计和毕业设计以及电子设计比赛。 该系统采用模块化设计思想,减小了系统面积,同时增加了可靠性,使得单片机实验开发系统能满足从简单的数字电路实验到复杂的数字系统设计实验,并能一直延伸到综合电子设计等创新性实验项目。该系统采用集成稳压电源供电,使电源系统的稳定性大大提高,同时又具备完备的保护措施。为适应市场上多种单片机器件的应用,该系统采用“单片机板+外围扩展板”结构,通过更换不同外围扩展板,可实验不同的单片机功能,适应了各院校不同的教学需求。 二、单片机板简介 本实验系统因为自带了MCS-51单片机系统,因此没有配置其他单片机板,但可以根据教学需要随时配置。以单片机板为母板,并且有I/O接口引出,可以很方便的完成所有实验。因此构成单片机实验系统。 1、主要技术参数 (1)MSC-51单片机板 板上配有ATMEL公司的STC89C51芯片。 STC89C51资源:32个I/O口;封装DIP40。 STC89C51开发软件:KEIL C51。 2、MSC-51单片机结构 (1)单片机板中央放置一块可插拔的DIP封装的STC89C51芯片。 (2)单片机板左上侧有一个串口,用于下载程序。 (3)单片机板的四周是所有I/O引脚的插孔,旁边标有I/0引脚的脚引。 (4)单片机板与各个模块配合使用时,可形成—个完整的实验系统。 三、母板简介 主要技术参数 (1)实验系统电源 实验系统置了集成稳压电源,使整个电源具有短路保护、过流保护功能,提高了实验的稳定性。 主板的右上角为电源总开关,当把220V交流电源线插入主板后,打开电源开关,主板 图论实验报告(代码) 学号:1241902129 姓名:肖尧 1.写一个程序,输入一个图,一对顶点和通路长度,输出两个顶点间 指定长度的通路。 程序代码: #include { return (i>=0 && i 实验名称:龙格反例的数值实验 实验目的与要求: 1、了解切比雪夫多项式零点插值; 2、运用切比雪夫多项式零点插值法避免龙格现象。 3、与等距节点构造插值多项式比较。 实验内容: 龙格反例的数值实验 在区间[–5,5 ]上分别取11阶切比雪夫多项式的零点 22 )12(cos 5π+=k x k ( k = 0,1,2,……,10) 和等距节点作插值结点,计算函数211)(x x f +=在结点处的值 y k = f (x k )。构造插值多项式L 10(x ), ∑==10 010)()(k k k y x l x L 其中,∏≠=--=n k j j j k j k x x x x x l 0)()()(。取自变量点 t k = – 5 + 0.05k ( k =0,1,…,201),分别计算切比雪夫零点、等距节点插值多项式L k (x )和被插值函数f (x )在离散点t k ( k =0,1,…,201)上的值,并绘出三条曲线比较。 实验环境与器材: 9#505机房、《数值分析》 实验过程(步骤)或程序代码: function y=Lagrange(x,n,xx,yy) sum=0; %初始化 for k=1:n+1 lk=1; %初始化 for i=1:n+1 if k~=i lk=lk*(x-xx(i))/(xx(k)-xx(i)); end end sum=lk*yy(k)+sum; end y=sum; clc clear for i=1:11 %下标只能从1开始 x1(i)=-5+10*(i-1)/10; x2(i)=5*cos((2*i-1)*pi/22); y1(i)=1/(1+x1(i)*x1(i)); y2(i)=1/(1+x2(i)*x2(i)); %y1,y2分别是在两种节点处得到的函数值 end h=0.05; for k=1:202 x3(k)=-5+(k-1)*h; y11(k)=Lagrange(x3(k),10,x1,y1); y22(k)=Lagrange(x3(k),10,x2,y2); y(k)=1/(1+x3(k)*x3(k)); %y11,y22分别为利用切比雪夫零点和等距节点构造出的插值多项式在离散点处的值 end plot(x3,y11,'r'); hold on plot(x3,y22,'g'); hold on plot(x3,y,'b') %被插值函数在离散点处值的曲线图 hold on xlabel('-5<=x<=5'); ylabel('y'); legend('f(x)=1/(1+x^2)','等距节点插值多项式','切比雪夫多项式零点插值多项式'); xlim([-5,5]) 实验结果与分析: 实验四 MATLAB 程序设计 1.实验目的 (1)熟练掌握MATLAB 的程序流程控制结构。 (2)掌握M 文件的结构,M 函数文件编写、使用。 (3)熟练掌握函数调用和参数传递。 2.实验仪器 (1)Matlab6.5应用软件安装版 一套 (3)PC 机 一台 3. 实验原理 依据MA TLAB 的编程的原理,编写M 函数文件,调用M 函数文件,完成曲线绘制。 4. 实验步骤 (1)利用for 、while 控制语句和sum 指令求和。 (2)使用MA TLAB 函数文件绘图。 (3)利用置换指令绘制脉冲响应曲线. (4)利用feval 指令实现指定的函数。 5. 实验报告内容(选做其中两题) (1)分别用for 和while 循环语句计算∑==630i i 2 K 的程序,再写出一种避免循环的计算程序。 (提示:可考虑利用MA TLAB 的sum (X,n )函数,实现沿数组X 的第n 维求和。)保存为M 文件. (2)将课本例4-8子函数编程及调用演示,三个子图上的圆和多边形绘制在同一坐标系中。并保存为M 文件。保存输出结果图。 (3)利用置换指令subs(X,new),例4-18中的脉冲响应在t=[0,18]的曲线。并保存为M 文件。保存输出结果图。 (4)试利用feval ()指令计算F(x)+F 2(x),其中F 可取‘sin ’、‘cos ’。(提示:先编写以个M 函数function y=trif(F,x)实现F(x)+F 2(x)的计算,在编写调用函数完成F 为‘sin ’、‘cos ’的计算),并保存为M 文件。(指定完成sin(pi/2)+sin(pi/2)^2; cos(pi/3)+cos(pi/3)^2) 实验一基础 实验目的 1、掌握Visual Studio运行环境的配置方法。 2、通过编写简单的页面,掌握网页的编写和运行方法。 实验内容 一、创建文件系统网站; 1. 在D盘新建文件夹03soft,作为网站目录; 2. 在网站的默认的主页上添加控件Button,双击该控件添加如下代码: protected void Button1_Click(object sender, EventArgs e) { ("欢迎光临学习天地!"); } 3. 运行这个页面,写出这个页面运行时的页面地址。 实验截图: 二、创建HTTP网站 1、打开IIS管理器,进入管理页面,添加网站名称mysite,并设置物理路径; 2、创建HTTP网站,并选取mysite作为网站目录; 3、在的默认的主页上添加控件Button,双击该控件添加如下代码: protected void Button1_Click(object sender, EventArgs e) { ("欢迎光临学习天地!"); } 4、运行这个页面,写出这个页面运行时的页面地址。 实验截图: 三、创建单一文件模式网页 1、打开第一题中的文件系统网站,新建一个名为的单一文件模式的网页,并在网页中添加Label控件和Button控件,双击Button控件,添加如下代码: = "Clicked at " + 、运行这个页面,写出单击Button时的运行结果 实验截图: 四、打开第一题中的文件系统网站,在网页的Page_Load事件中编写代码,实现在ListBox1中填充选项,并且单击按钮时不重复加载。 实验截图: 实验四 函数文件 1.定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。 函数文件: function [e,ln,s,c]=plural(x) e=exp(x); ln=log(x); s=sin(x); c=cos(x); End 命令文件: x=input('请输入一个复数:'); [e,ln,s,c]=plural(x); e ln s c 运行结果: 请输入一个复数:3+4i e = -13.1288 -15.2008i ln = 1.6094 + 0.9273i s = 3.8537 -27.0168i c = -27.0349 - 3.8512i 2.一物理系统可用下列方程组来表示: ? ?????????????=??????????????????????????----g g m m N N a a m m m m 2121212111001cos 000sin 00cos 0sin 0sin cos θθ θθ θθ 从键盘输入m 1、m 2和θ的值,求N a a 121、、和N 2的值。其中g 取9.8,输入 θ时以角度为单位。 函数文件: function [a1,a2,N1,N2]=physis(m1,m2,t) g=9.8; A=[m1*cos(t*pi/180),-m1,-sin(t*pi/180),0;... m1*sin(t*pi/180),0,cos(t*pi/180),0;... 0,m2,-sin(t*pi/180),0;... 0,0,-cos(t*pi/180),1]; B=[0;m1*g;0;m2*g]; 实验3 顺序结构编程 (2) 实验4 if分支结构编程 (3) 实验5 if分支结构和switch分支结构编程 (5) 实验6 分支结构嵌套和for循环编程练习 (9) 实验7和while和do-while练习 (12) 实验8 for循环嵌套练习 (15) 实验9 函数设计编程练习 (18) 实验10函数设计编程练习 (20) 实验11 数组编程练习 (23) 实验3 顺序结构编程 实验题目1 输入两个整型数x,y,求x,y之和、差、积、x/y的商和余数 提示: (1)定义整形变量变量int x,y; (2)和、差、积、商和求余数的运算符分别是+、-、*、/、% (3)输入两个整型数可以调用scanf()函数scanf("%d %d", &x,&y); 实验题目2 按下列要求编写程序,对变量a,b,c进行unsigned int型说明,将65赋给a,66赋给b,67赋给c,对变量a,b,c用%c格式输出显示 提示: (1)定义变量unsigned int a ,b,c; (2)字符型数据输出的格式控制符是%c (3)C语言中的赋值符号是=“65赋给a”表示为a = 65; 实验题目3 输入三角形的三条边的边长,求三角形的面积 从键盘输入三个整数,判断能否构成三角形的三边,如果能就计算输出三角形面积,按照下图给出的公式计算三角形的面积: s=(a+b+c)/2 a,b,c代表三角形的三条边 提示1、开根号的数学库函数是sqrt,例如y=sqrt(x),表示求变量x开根号,并把结果赋值给变量y。 2、调用数学库函数必须用如下命令#include 实验四 用窗函数法设计FIR 数字滤波器 实验项目名称:用窗函数法设计FIR 数字滤波器 实验项目性质:验证性实验 所属课程名称:数字信号处理 实验计划学时:2 一. 实验目的 (1)掌握用窗函数法设计FIR 数字滤波器的原理与方法。 (2)熟悉线性相位FIR 数字滤波器的特性。 (3)了解各种窗函数对滤波特性的影响。 二. 实验容和要求 (1) 复习用窗函数法设计FIR 数字滤波器一节容,阅读本实验原理,掌握设计步骤。 (2) 用升余弦窗设计一线性相位低通FIR 数字滤波器,截止频率 rad c 4 π ω= 。窗口长度N =15,33。要求在两种窗口长度情况下,分别求出()n h ,打印出相应的幅频特性和相频特性曲线,观察3dB 带宽和20dB 带宽。总结窗口长度N 对滤波器特性的影响。 设计低通FIR 数字滤波器时,一般以理想低通滤波特性为逼近函数()ωj e H ,即 ()?????≤<≤=-π ωωωωωα ω c c j j d ,,e e H 0 其中2 1 -= N α ()() ()[]() a n a n d e e d e e H n h c j j j j d d c c --= = = ??- -- πωωπ ωπ ωαωω ωαωπ π ωsin 2121 (3) 33=N ,4πω=c ,用四种窗函数设计线性相位低通滤波器,绘制相应的幅频特性曲线,观察3dB 带宽和20dB 带宽以及阻带最小衰减,比较四种窗函数对滤波器特性的影响。 三. 实验主要仪器设备和材料 计算机,MATLAB6.5或以上版本 四. 实验方法、步骤及结果测试 如果所希望的滤波器的理想的频率响应函数为()ωj d e H ,则其对应的单位脉冲响应为 ()()ωπ ω ωπ πd e e H n h j j d d ?- = 21 (4.1) 窗函数设计法的基本原理是用有限长单位脉冲响应序列()n h 逼近 ()n h d 。由于()n h d 往往是无限长序列,而且是非因果的,所以用窗函数() n ω将()n h d 截断,并进行加权处理,得到: ()()()n n h n h d ω= (4.2) ()n h 就作为实际设计的FIR 数字滤波器的单位脉冲响应序列,其频率 响应函数()ωj e H 为 ()()n j N n j e n h e H ωω ∑-==1 (4.3) 式中,N 为所选窗函数()n ω的长度。 我们知道,用窗函数法设计的滤波器性能取决于窗函数()n ω的类型及窗口长度N 的取值。设计过程中,要根据对阻带最小衰减和过渡带宽度的 附件2: 北京理工大学珠海学院实验报告 ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY 实验题目图及其应用实验时间 2011.5.10 一、实验目的、意义 (1)熟悉图的邻接矩阵(或邻接表)的表示方法; (2)掌握建立图的邻接矩阵(或邻接表)算法; (3)掌握图的基本运算,熟悉对图遍历算法; (4)加深对图的理解,逐步培养解决实际问题的编程能力 二、实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: (1)建立图的邻接矩阵(或邻接表); (2)对其进行深度优先及广度优先遍历。 三、实验所涉及的知识点 1.创建一个图: CreateUDN(MGraph &G) 2.查找v顶点的第一个邻接点: FirstAdjVex(MGraph G,int v) 3. 查找基于v顶点的w邻接点的下一个邻接点: NextAdjVex(MGraph G,int v,int w) 4.图的矩阵输出: printArcs(MGraph G) 5:顶点定位: LocateVex(MGraph G,char v) 6. 访问顶点v输出: printAdjVex(MGraph G,int v) 7. 深度优先遍历: DFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 8. 广度优先遍历BFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 9. DFS,从第v个顶点出发递归深度优先遍历图G: DFS(MGraph G,int v) 四、实验记录 1.对顶点的定位其数组下标,利用了找到之后用return立即返回,在当图顶点 多的情况下节省了搜索时间,程序如下 //对顶点v定位,返回该顶点在数组的下标索引,若找不到则返回-1 int LocateVex(MGraph G,char v){ for (int i=0;i 实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示 数字信号处理第三次实验 一、实验目的: 1、掌握离散时间系统的DFT的MATLAB实现; 2、熟悉DTFT和DFT之间的关系。 3、了解信号不同变形的DFT与原信号DFT之间的关系 二、实验内容: 1.开发一个时域圆周移位的matlab函数cirshift.m并测试:设x(n)=[9 8 7 6 5 4 3],求x((n-4))8R8(n)以及x((n+5))8R8(n)。 function y=cirshift(x,m,N) %长度为N的x序列(时域)作m点圆周位移 %------------------------------------- %[y]=cirshift(x,m,N) %y=包含圆周位移的输出序列 %x=长度<=N的输入序列 %m=移位样点数 %N=圆周缓冲器长度 %方法:y(n)=x((n-m)mod N) %check for length of x if length(x)>N error('N必须>=x的长度') end x=[x zeros(1,N-length(x))];%将x补零到长度为N n=[0:1:N-1]; n=mod(n-m,N); y=x(n+1); %主函数.m clc;clear all; x=[9 8 7 6 5 4 3]; y1=cirshift(x,4,8); y2=cirshift(x,-5,8); 2. 开发一个圆周翻转的matlab函数cirflip.m并测试:设x(n)=[9 8 7 6 5 4 3 2 1],求x(n)的16点圆周翻转x((-n))16R16(n)。 function y=cirfilp(x,N) nx=[0:1:N-1]; y=x(mod(-nx,N)+1); %主函数.m clc;clear all; x=[9 8 7 6 5 4 3 2 1]; N=16; x=[x zeros(1,N-length(x))]; nx=0:N-1; y=cirfilp(x,16); 一、实验项目名称 函数 二、实验目的 1.掌握C函数的定义方法、函数的调用方法、参数说明以及返回值。掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法; 2.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法; 3.在编程过程中加深理解函数调用的程序设计思想。 三、实验内容 1.多模块的程序设计与调试的方法; 2.函数的定义和调用的方法; 3.用递归方法进行程序设计。 具体内容: 1.编写一个函数primeNum(int num),它的功能是判别一个数是否为素数。如果num 是素数,返回该数;否则返回0值。 要求: (1)在主函数输入一个整数num,调用该函数后,输出num是否是素数的信息。输出格式为:num is prime或num is not prime。 (2)分别输入以下数据:0,1,2,5,9,13,59,121,运行程序并检查结果是否正确。 2.编写函数computNum( int num),它的功能是计算任意输入的一个正整数的各位数字之和,结果由函数返回(例如:输入数据是123,返回值为6)。 要求:num由主函数输入,调用该函数后,在主函数内输出结果。 3.编写函数,mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。 要求: (1)在主函数中输入一对数据a和b,调用该函数后,输出结果并加以相应的说明。例如:在主函数中输入:10,5 ,则输出:10 is multiple of 5. (2)分别输入下面几组数据进行函数的正确性测试:1与5、5与5、6与2、6与4、20与4、37与9等,并对测试信息加以说明。 4.编写一个计算组合数的函数combinNum(int m,int n)。计算结果由函数返回。 计算组合数的公式是: c(m,n)=m!/(n!*(m-n)!) 要求: (1)从主函数输入m和n的值。对m>n、m 1.数据类型 a.输入一个小数点后有多位数字的小数,实现将其保留三位小数,并输出;, #include<> main() {double b,d; printf("请输入一个小数:"); scanf("%lf",&b); printf("输出原来的数:%f\n",b); b*=1000; b+=; b=(int)b; d=b/1000; printf("输出现在的数:%.3lf\n0",d); } b.输入一个4位整数,求其得各位数字的平方和;(1234 1+4+9+16=30) #include<> main() {int n,sum=0,i,t; printf("请输入一个四位整数:\n"); scanf("%d",&n); for(i=0;i<4;i++) {t=n%10; n/=10; sum+=t*t; } printf("%d\n",sum); } c.定义字符型变量ch,写出六种给ch赋值字符’A’的代码; #include<> main() {char ch; ch='A'; ch=65; ch=0x41; ch=0101; ch='\101'; ch='\x41'; } d.编写程序输出26组大小写字母;(AaBbCc……….XxYyZz) #include<> main() {int i; for(i=65;i<91;i++) {printf("%c",i); printf("%c",i+32); } printf("\n"); } e.定义浮点型变量f1、f2,为f1赋值10的-30次,为f2赋值10的30次 #include<> main() { double f1,f2; f1=10e-30; 目录 实验一:OpenGL基础知识 (1) 实验二 OpenGL中的建模与变换 (2) 实验三 OpenGL中的光照 (5) 实验四 OpenGL中的拾取 (8) 实验五 OpenGL中的纹理映射 (11) 实验一:OpenGL基础知识 一、实验目的 1、建立Windows系统下的OpenGL实验框架。 2、学习理解OpenGL工作流程。 二、实验环境 ⒈硬件:每个学生需配备计算机一台。 ⒉软件:Visual C++; 三、实验内容 1、建立非控制台的Windows程序框架。 2、建立OpenGL框架。 3、建立OpenGL框架的类文件。 4、完善Windows框架。 5、理解程序间的相互关系。 四、实验要求 1、学习教材第2章的内容。 2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。 3、运行结果应该与教材中的相关实例相符。 4、编译第2章的框架代码,修改背景色、窗口标题。 五、程序设计提示 (略) 六、报告要求 1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。 2.报告中应书写主要源程序,且源程序中要有注释。 3.报告中应包含运行结果及结果分析。如调试通过并得到预期的效果,请注明‘通过’并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。 4.报告最后包含实验总结和体会。 实验二 OpenGL中的建模与变换 一、实验目的 1.学习配置OpenGL环境。 2.掌握在OpenGL中指定几何模型的方法。 3. 掌握OpenGL中的透视投影和正投影的设置方法,学会诊断投影问题导致的显示异常。 二、实验环境 ⒈硬件:每个学生需配备计算机一台。 ⒉软件:Visual C++; 三、实验内容 1.建立OpenGL编程环境 (注:Windows自带gl和glu,还需要安装glut库文件。) (a)查看Windows自带的OpenGL文件。在文件夹c:\windows\system32下查看是否存在文件opengl32.dll和glu32.dll;在Visual Studio的安装目录Vc7\PlatformSDK\Include\gl下查看是否存在gl.h和glu.h;在Vc7\PlatformSDK\Lib下是否存在opengl32.lib和glu32.lib。 (b)安装glut库。将文件glut.h复制到Visual Studio的安装目录Vc7\PlatformSDK\Include\gl下;将文件glut32.lib复制到Vc7\PlatformSDK\Lib下;将文件glut32.dll复制到c:\windows\system32下。 2.OpenGL几何建模 (a)建立基本的几何图元,指定图元的颜色,对图元进行平移、旋转、缩放变换。基本几何图元包括: GL_LINES(线)、GL_LINE_STRIP(线带)、GL_LINE_LOOP(线环)、GL_TRIANGLES(三角形)、GL_TRIANGLE_STRIP(三角形带)、GL_TRIANGLE_FAN(三角形扇)、GL_QUADS(四边形)、GL_QUAD_STRIP(四边形带)、GL_POLYGON(多边形)。 (b) 设置合适的投影参数,分别用透视投影和正投影显示步骤(a)中指定的几何图元。 (c) 每按下鼠标左键一次,模型向右旋转一定角度。 (d) 按下ESC键,退出程序。 实验4 函数的定义与调用(下) Visual C++控制台应用程序设计 一、实验目的 1、掌握变量的分类、作用域、生存期、存储类别; 2、掌握递归函数的定义以及调用方法; 3、掌握函数的重载。 二、实验内容 Visual C++控制台应用程序设计 要求:(1)自己独立编写出完整程序,注意书写格式,熟练掌握程序的结构; (2)按照正确的步骤进入vc++环境,在自己创建的工程中录入源程序,消除语法错误,编译、连接程序; (3)运行程序,输入数据观察结果。 1、分析并写出下列程序的执行结果。 #include 哈工大C语言实验题
51单片机20个实验-代码详细
图论实验代码
数值分析实验四(龙格函数)
实验四 MATLAB程序设计
实验一代码及截图
实验4函数文件
c语言实验题目
实验四 用窗函数法设计FIR数字滤波器
数据结构图及其应用实验报告+代码
C上机实验报告实验四
数字信号处理第三次实验代码及波形图
C语言实验四实验报告——函数
c语言实验习题及答案详解
计算机图形学实验代码及截图分解
C++ 实验4 函数的定义与调用(下)