第一篇:重庆邮电大学计算机学院C++上机试验报告
C++集中上机实验日志
实验6—1
一、问题描述
定义一个字符串类String,其数据成员有指向字符串的指针elems,成员函数包括构造函数、析构函数、判断字符串是否为空的operator!()。编程测试类String的功能。
二、实验输出
如图所示:
三、实验思路以及方法
判断字符串是否为空即是对字符串进行非运算,即重载operator!()。逻辑非运算是单目运算符,按照运算符重载方针,应该重载为类的成员函数。由于逻辑非运算结果只有两种:真、假,因此operator!()的返回值类型为bool型。四心得体会
开始没有判断elems的空指针问题,遇到一点麻烦,改过之后就ok了,本实验让我们学习了“运算符重载类的成员函数”,对以后的学习C++有了很大了帮助。代码实现
#include 实验6-3 一、问题重述 对于具有相同行列数的矩阵进行加、减、乘、转置、赋值运算。 二、实验输出 结果如图所示: 三、实现思路及方法 定义矩阵类Matrix,他的数据成员有:行line、列col、指向矩阵元素的指针int*elems。他的成员函数有:构造函数、析构函数、复制构造函数、一组读取和修改属性的get、set方法、显示矩阵元素的方法print()。还需要对Matrix类的重载运算符: Matrix operator+(const Matrix &a,const Matrix &b);Matrix operator-(const Matrix &a,const Matrix &b);Matrix operator*(const Matrix &a,const Matrix &b);Matrix operator=(const Matrix &m); Matrix operator~()const; 四、心得体会 这次对友元的初次使用,感觉到很陌生,在对数组处理的时候有很大的错误,对空间的申请和判断是否为空上面存在很大的问题,但是也学到了很多东西,比如说:友元可以是一个全局函数,也可以是一个类的成员函数,还可以是一个类,如果友元是函数,则称为友元函数,如果友元是一个类,则称为友元类,友元的所有成员函数都是友元函数,可以访问被访问类的所有成员。代码实现 #include private: int line;int col;int *elems;};Matrix operator+(const Matrix &a,const Matrix &b){ if(a.line!= b.line || a.col!= b.col){ cerr << “两矩阵的行列数不相同!” << endl;exit(EXIT_FAILURE);} Matrix temp(a.line,a.col);for(int i = 0;i < a.line * a.col;i++)temp.elems[i] = a.elems[i] + b.elems[i];return temp;} Matrix operator-(const Matrix &a,const Matrix &b){ if(a.line!= b.line || a.col!= b.col){ cerr << “两矩阵的行列数不相同!” << endl;exit(EXIT_FAILURE);} Matrix temp(a.line,a.col);for(int i = 0;i < a.line * a.col;i++)temp.elems[i] = a.elems[i]-b.elems[i];return temp;} Matrix operator*(const Matrix &a,const Matrix &b){ if(a.col!= b.line){ cerr << “第一个矩阵的列数和第二个矩阵的行数不相同!” << endl;exit(EXIT_FAILURE);} int line = a.line,col = b.col;int i,j,k;Matrix temp(line,col); for(i = 0;i < line * col;i++)temp.elems[i] = 0; for(i = 0;i < line;i++)for(k = 0;k < col;k++) for(j = 0;j < b.line;j++) temp.elems[i * col + k] += a.elems[i * col + j] * b.elems[j * col + k]; return temp;} Matrix::Matrix(int l,int c){ setLine(l);setCol(c);elems = new int[line * col];if(elems == NULL){ cerr << “动态存储分配失败!” << endl;exit(EXIT_FAILURE);} } Matrix::~Matrix(){ delete []elems;} Matrix::Matrix(const Matrix &m){ setLine(m.line);setCol(m.col);elems = new int[line * col];if(elems == NULL){ cerr << “存储分配失败!” << endl;exit(EXIT_FAILURE);} for(int i = 0;i < line * col;i++)elems[i] = m.elems[i];} void Matrix::setLine(int l){ line = l;} void Matrix::setCol(int c){ col = c;} void Matrix::setElems(){ for(int i = 0;i < line * col;i++)cin >> elems[i];} int Matrix::getLine()const { return line;} int Matrix::getCol()const { return col;} void Matrix::print()const { for(int i = 0;i < line;i++){ for(int j = 0;j < col;j++) cout << setw(4)<< elems[i * col + j];cout << endl;} } Matrix Matrix::operator=(const Matrix &m){ if(this!= &m){ setLine(m.line); setCol(m.col);delete []elems;elems = new int[line * col];if(elems == NULL){ cerr << “存储分配失败!” << endl; exit(EXIT_FAILURE);} for(int i = 0;i < line * col;i++) elems[i] = m.elems[i];} return *this;} Matrix Matrix::operator~()const { Matrix temp(col,line);for(int i = 0;i < line;i++)for(int j = 0;j < col;j++) temp.elems[j * line + i] = elems[i * col + j];return temp;} int main(){ Matrix a(3,3),b(3,3);cout<<“请输入第一个矩阵的元素:”< cout<<“请输入第二个矩阵的元素:”< b.setElems(); Matrix c(3,3); cout<<“两矩阵的乘积为:”< c=a*b; c.print(); cout<<“n转置矩阵为:”< (~c).print();return 0;} 第二次上机实验报告 姓名:王小宁 班级: 学号: 031012 1234 第一题: 题目: 编写一个类,声明一个数据成员和一个静态数据成员,其构造函数初始化数据成员,并把静态数据成员加1,其析构函数把静态数据成员减1.(1)编写一个应用程序,创建该类的3个对象,然后显示其数据成员和静态数据成员,再析构每个对象,并显示它们对静态数据成员的影响。 (2)修改该类,增加静态成员函数并访问静态数据成员,并声明静态数据成员为保护成员。体会静态成员函数的使用,静态成员之间与非静态成员之间互访问题。 编程思想: 首先,定义一个类,其中含有两个类的私有变量,一个静态数据变量,定义构造函数,将初值赋给两个私有变量,并将静态数据变量加1,并显示.定义一个析构函数,并通过析构函数将静态成员变量减1.并显示。 修改以上的类,增加一个静态成员函数并通过静态成员函数来访问静态成员变量。在主函数中利用一个指向函数的指针指向这个静态成员函数,并通过这个指针来访问类中的静态数据。代码实现: 代码1: #include static int count; A(int a=0,int b=0) { X=a; Y=b; count++; cout<<“startcount=”< count--; cout<<“overcount=”< int GetX(){return X;} int GetY(){return Y;} private: int X,Y;};int A::count=0;int main(){ int *countp=&A::count;A z(2,3);cout<<“x=”< cout<<“x=”< 问题及心得: 在这次试验中,我理解了静态变量与普通变量之间的差异与联系。在实验过程中因未初静态变量始化而无法通过编译,并且注意到静态变量一定要在类外初始化。 题目2: 创建一个Person类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。其功能有修改姓名、显示数据信息。要求其功能函数的原型放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。其中数据成员为保护的,函数为公有的。 编程思想: 创建一个PERSON类,定义姓名、街道地址、市、省和邮政编码分别为CHAR型的指针私有型变量。在定义公有型的构造函数,并在构造函数中申请动态内存来保存初始化的内容,并用相应的私有性的指针变量指向,再利用复制函数则指针中将会存放入输入内容。定义公有的析构函数释放动态申请的空间。定义一个公有的改变函数改变其中一个变量,方法与构造函数相似。 代码实现: #include private: char *name;char *street;char *pro;char *city;char *code; public: Person(char *aname,char *astreet,char *apro,char *acity,char *acode){ name=new char[strlen(aname)+1]; strcpy(name,aname); street=new char[strlen(astreet)+1]; strcpy(street,astreet); pro=new char[strlen(apro)+1]; strcpy(pro,apro); city=new char[strlen(acity)+1]; strcpy(city,acity); code=new char[strlen(acode)+1]; strcpy(code,acode); cout<<“constructor”< delete[] name; delete[] street; delete[] pro; delete[] city; delete[] code; cout<<“destructor”< delete[] name; name=new char[strlen(aname)+1]; strcpy(name,aname);} void show(){ cout<<“姓名:”< cout<<“街道地址:”< cout<<“省份:”< cout<<“城市:”< cout<<“邮政编码:”< 运行结果: 实验心得: 通过这个实验,我们学会了对类的私有的字符数组变量的初始化。利用指针动态分配空间。 C++上机实验报告 实验名称:实验 专业班级: 姓 名: 学 号: 实验日期: 11 实验 目录 1.实验目的 2.实验内容 3.程序代码 4.调试结果 5.实验心得 1.实验目的 实验10(1)进一步了解运算符重载的概念和使用方法;(2)掌握几种常用的运算符重载的方法;(3)了解转换构造函数的使用方法; (4)了解在Visual C++6.0环境下进行运算符重载要注意的问题。实验11(1)了解继承在面向对象程序设计中的重要作用;(2)进一步理解继承和派生的概念; (3)掌握通过继承派生出一个新的类的方法;(4)了解虚基类的作用和用法。 2.实验内容 实验10 事先编好程序,上机进行调试和运行程序,分析结果。(1)声明一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能用于复数的加,减,乘,除,运算符重载函数作为Complex类成员的函数。编程序,分别求两个复数之和,差,积和商。(2)声明一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。 运行程序,分别求两个复数之和,整数和复数之和,(3)有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于两个矩阵相加 (4)声明一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(名字),sex(性别)。编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上三个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说任然是有用的,应当保留并成为其教师的数据的一部分。 实验11 事先编写好程序,上机调试和运行程序,分析结果。 (1)将教材第11章例11.1的程序片段补充和改写成一个完整的、正确的程序,用公用继承方式。在程序中应当包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。 (2)将教材第11章例11.3的程序修改、补充,写成一个完整、正确的程序,用保护继承方式。在程序中应包括输入数据的函数。(3)修改上面第(2)题的程序,改为用公用继承方式。上机调试程序,使之能够正确运行并得到正确的结果。 对这两种继承方式做比较分析,考虑在什么情况下二者不能互相替换。 (4)分别声明Teacher(教师)类和Cadre(干部)类,采用多 重继承方式由这两个类派生出新类Teacher-Cadre(教师兼干部)。要求: Ⅰ.在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。 Ⅱ.在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务)。在Teacher-Cadre类中还包含数据成员wages(工资)。 Ⅲ.在基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。Ⅴ.在类体中声明成员函数,在类外定义成员函数。 Ⅵ.在派生类Teacher-Cadre的成员函数show中调用Teacher类中的display函数,输出性命、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。 3.程序代码 实验10(1) #include Complex Complex::operator +(Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;} Complex Complex::operator-(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;} Complex Complex::operator*(Complex &c2){Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=imag*c2.real+real*c2.imag;return c;} Complex Complex::operator/(Complex &c2){Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);return c;} void Complex::display(){cout<<“(”< (2) #include double real; double imag;}; Complex Complex::operator+(Complex &c){return Complex(real+c.real,imag+c.imag);} Complex Complex::operator+(int &i){return Complex(real+i,imag);} void Complex::display(){cout<<“(”< Complex operator+(int &i,Complex &c){return Complex(i+c.real,c.imag);} int main(){Complex c1(3,4),c2(5,-10),c3;int i=5;c3=c1+c2;cout<<“c1+c2=”;c3.display();c3=i+c1;cout<<“i+c1=”;c3.display();c3=c1+i;cout<<“c1+i=”;c3.display();return 0;}(3) #include int mat[2][3];}; Matrix::Matrix(){for(int i=0;i<2;i++)for(int j=0;j<3;j++)mat[i][j]=0;} Matrix operator+(Matrix &a,Matrix &b){Matrix c;for(int i=0;i<2;i++)for(int j=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];} return c;} void Matrix::input(){cout<<“input value of matrix:”< void Matrix::display(){for(int i=0;i<2;i++){for(int j=0;j<3;j++){cout< #include int num; char name[20]; char sex; float score;}; Student::Student(int n,char nam[],char s,float sco){num=n;strcpy(name,nam);sex=s;score=sco;} class Teacher {public: Teacher(){} Teacher(Student&);Teacher(int n,char nam[],char sex,float pay);void display();private: int num; char name[20]; char sex; float pay;}; Teacher::Teacher(int n,char nam[],char s,float p} {num=n;strcpy(name,nam);sex=s;pay=p;} Teaxher::Teacher(Student& stud){num=stud.get_num();strcpy(name,stud.get_name());sex=stud.get.sex();pay=1500;} void Teacher::display(){cout<<“num:”< #include void get_value() {cin>>num>>name>>sex;} void display() {cout<<”num:“< cout<<”sex:“< int num; char name[10];char sex;}; class Student1:public Student {public: void get_value_1(){get_value();cin>>age>>addr;} void display_1(){cout<<”age:“< char addr[30];}; int main(){Student1 stud1;stud1.get_value_1();stud1.display();stud1.display_1();return 0;}(2) #include void display();protected: int num; char name[10]; char sex;}; void Student::get_value(){cin>>num>>name>>sex;} void Student::display(){cout<<”num:“< class Student1:protected Student {public: void get_value_1();void display1();private: int age;char addr[30];}; void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout<<”num:“< int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(3) #include int num; char name[10]; char sex;}; void Student::get_value(){cin>>num>>name>>sex;} void Student::display(){cout<<”num:“< class Student1:public Student {public: void get_value_1();void display1();private: int age; char addr[30];}; void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout<<”num:“< int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(4) #include Teacher(int,char[],char);void display();private: int num;char name[20];char sex;}; Teacher::Teacher(int n,char nam[],char s){num=n;strcpy(name,nam);sex=s;} void Teacher::display(){cout<<”num:”< class BirthDate {public: BirthDate(int,int,int);void display();void change(int,int,int);private: int year;int month;int day;}; BirthDate::BirthDate(int y,int m,int d){year=y;month=m;day=d;} Void BithDate::display(){cout<<”birthday:”< void BirthDate::change(int y,int m,int d){year=y;month=m;day=d;} class Professor:public Teacher {public: Professor(int,char[],char,int,int,int,float);void display();void change(int,int,int);private: float area;BirthDate birthday;} Professor::Professor(int n,char name[20],char s,int y,int m,int d,float a): Teacher(n,name,s),birthday(y,m,d),area(a){} void Professor::display(){Teacher::display();birthday.display();cout<<”area:”< Int main(){Professor profl(3012,”Zhang”,’f’,1949,10,1,125.4);cout< 4.调试结果 实验10(1)c1+c2=(8,-6i)c1-c2=(-2,14i)c1*c2=(55,-10i)c1/c2=(-0.2,0.4)(2)c1+c2=(8,-6i)i+c1=(8,4i)c1+i=(8,4i) (3) input value of Matrix:11 22 33 44 55 66 input value of Matrix:12 13 14 15 16 17 Matrix a: 11 22 33 44 55 66 Matrix b: 12 13 14 15 16 17 Matrix c=Matrix a + Matrix b : 23 25 47 59 71 83 (4)student1 : num :20010 name:Wang sex:m score;89.5 Teacher2: num:20010 name:Wang sex:m pay:1500 实验11(1) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (2) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (3) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (4)The original data: num:3012 name:Zhang sex:f area:125.4 The new data: num:3012 name:Zhang sex:f birthday:6/1/1950 area:125.4 5.实验心得 这一次上机实验,除了了解到了运算符重载的概念和用法,掌握几种常用的运算符重载的方法,了解转换构造函数的使用方法,同时也能了解虚基类的用法,理解继承与派生的概念。 但是,最主要的,我觉得,是通过这一次的上机实验,我了解到,有的实验本身是没有程序错误的,但是,也会由于实验环境的影响而不能正常运行。换句话说,有的程序并不能在Visaul C++的环境下运行,而不是程序自身的问题。所以,对于没办法调试成功的程序,我们也不能一味的认为程序有错误,要学会理性的判断程序的对错,再下结论。 自动化学院 自动化学院是重庆邮电大学教学科研实力最雄厚的学院之一。现有四个本科专业和四个硕士学位授权点,并与国内著名大学、研究院所联合培养博士研究生。是信息产业部和重庆市重点学科“控制理论与控制工程”、“检测技术与自动化装置”以及信息产业部和重庆市“网络控制技术与智能仪器仪表重点实验室”、“电子商务与现代物流重点实验室”、“智能仪表及控制装备工程技术研究中心”的挂靠单位。 本学院坚持“以科研促教学”的工作方针,在校(市)级品牌专业建设、重点课程建设、国家级精品教材建设、首席教师制度建设和教育教学改革等方面特色明显;有较完善教学实验设施,与中国最大的仪器仪表企业-“四联集团”等多家企业建立良好的实习实训基地,先进的实验设备和良好的环境条件为培养学生综合创新素质和实践动手能力提供了保障;近年在全国大学生“挑战杯”竞赛、全国大学生数模竞赛、全国电子设计竞赛、全国计算机仿真大赛等学生课外科技活动中屡获殊荣。在“修德、博学、求实、创新”校训的感召下,践行“自动齐心,求实创新;自动同心,齐力锻金”的自动化学院精神,为社会培养高素质机电控制类人才,毕业学生就业率一直很高。 本学院所有专业按控制大类培养,在标准学制内,前两年修读统一的公共基础和学科基础课程,后两年根据社会用人需求和学生意向自愿在大类范围内选择专业,完成专业基础和专业课程的学习。 自动化专业 专业培养目标:本专业紧跟学科发展趋势、紧扣学科发展前沿,以网络控制为专业特色,培养具备控制理论与控制工程、计算机科学与技术、通信工程、电气工程等领域的工程技术基础和专业知识的学生;培养知识面广和科学文化技术基础扎实的面向现代化、面向未来的高级工程技术专门人才。本专业学生能在科研院所、生产制造、运营维护等部门从事运动控制、工业过程控制、通信与信息传输网络控制、检测与自动化仪表、电力电子技术、计算机应用技术、通信与信息处理等方面的系统分析、系统设计、系统运行、管理与决策等工作,或从事各种自动化设备的研究开发、生产制造以及使用维护等工作。 专业培养要求:本专业的学生主要学习电工技术、电子技术、控制理论、自动检测与仪表、信息处理、计算机技术与应用、通信与网络技术等方面的基本理论和基础知识,受到较好的工程实践基本训练,具有系统分析、设计、开发与研究的基本能力。 相近专业:电气工程与自动化、测控技术与仪器 主要课程:公共基础课、电路分析、电子电路、数字电路与逻辑设计、自动控制原理、信号与系统、现代通信技术、计算机网络及其在自动化中的应用、现代控制理论、机械工程基础、电力拖动与控制、专业英语、系统仿真、计算机控制技术、可编程控制技术及应用、计算机绘图、单片机原理及应用、嵌入式控制系统、网络控制技术、过程控制系统、机电控制技术、过程检测及仪表等。到高年级根据社会需要设置柔性的专业方向模块课程及选修课。主要实践性教学环节:军训(含入学教育)、公益劳动、创新实践、社会实践、金工实习、电装实习、集中上机、认识实习、课程(含工程)设计、生产实习、毕业实习、毕业设计等。 标准学制:四年 授予学位:工学学士。 招生类别:理工类 专业优势和特色:目前已形成以智能化、网络化、信息化为特征,具有鲜明特色与社会声誉的网络控制、汽车电子和过程控制三个专业方向。 测控技术与仪器专业 专业培养目标:本专业以测控技术与仪器为核心,以通信、计算机、光电以及自动控制等多种技术为支撑,培养具备智能仪器仪表、计算机测控系统、测量与控制网络、精密仪器设计制造以及通信与信息处理等方面基础知识与应用能力,能在国民经济各部门从事测量与控制领域有关技术、仪器仪表与系统的设计制造、科技开发、应用研究、运行管理等方面的高级工程技术人才。 专业培养要求:本专业学生主要学习精密仪器的光学、电子学等基础理论,测量与控制理论和有关测控仪器的设计方法,特别重视对学生计算机、通信、网络测控等方面的基础理论和实际研发创新能力的培养,受到现代测控技术和仪器应用的训练,具有本专业测控技术及仪器系统的应用及设计开发能力。 相近专业:自动化、电气工程与自动化、机制设计制造及其自动化 主要课程:公共基础课、电路分析、电子电路、信号与系统、数字电路与逻辑设计、测控与通信技术、自动控制原理、测控与计算机网络、数学建模与仿真、机械工程基础、误差理论与数据处理、测控电路、专业英语、数字化测量技术及仪器、电磁测量、工程光学、光电检测技术、视觉检测技术、计算机控制技术、计算机绘图、微型计算机原理、单片机原理及应用、过程检测及仪表、过程控制系统、网络控制技术、传感网络、机器人学导论、智能传感器、微机电系统、智能仪器仪表设计基础等。到高年级根据社会需要设置柔性的专业方向模块课程及选修课。 主要实践性教学环节:军训(含入学教育)、公益劳动、创新实践、社会实践、金工实习、电装实习、集中上机、认识实习、课程(含工程)设计、生产实习、毕业实习、毕业设计等。 标准学制:四年 授予学位:工学学士。 招生类别:理工类 专业优势和特色:该专业顺应信息技术深入发展及其广泛应用对测控技术与仪器仪表类人才的大量需求。以信息技术为支撑,重点培养检测技术与仪表、智能仪器仪表、网络测控技术与仪表三个方向的人才。 电气工程与自动化专业 专业培养目标:本专业紧跟学科发展趋势、紧扣学科发展前沿,以信息技术作为支撑,以电力载波与网络控制为专业特色,培养在工业与电气工程有关的电气工程、电器工程、电力电子技术、电力检测与自动化仪表、运动控制、工业过程控制、电子与计算机技术等领域从事工程设计、系统分析、系统运行、管理与决策等工作,或从事各种电气(电器)自动化设备的研究开发、生产制造以及使用维护等工作的高级工程技术人才。 专业培养要求:本专业学生主要学习电工技术、电子技术、自动控制理论、信息处理、计算机技术与应用等较宽广领域的工程技术基础和一定的专业知识。学生受到电工电子、信息控制及计算机技术方面的基本训练,具有工业过程控制与分析,解决强弱电并举的宽口径专业的技术问题的能力。 相近专业:自动化、测控技术与仪器 主要课程:公共基础课、电路分析、电子电路、信号与系统、数字电路与逻辑设计、电器基础与智能控制、机械工程基础、传感器与自动检测技术、计算机绘图、计算机控制技术、单片机原理及应用、数学建模与仿真、专业英语、通信技术应用基础、电力电子技术、电机学、电力系统分析、电气测控与仪表、工厂供电、电力线载波原理与装置、电力拖动与控制、可 编程控制技术及应用、网络控制技术等。到高年级根据社会需要设置柔性的专业方向模块课程及选修课。 主要实践性教学环节:军训(含入学教育)、公益劳动、创新实践、社会实践、金工实习、电装实习、集中上机、认识实习、课程(含工程)设计、生产实习、毕业实习、毕业设计等。 标准学制:四年 授予学位:工学学士。 招生类别:理工类 专业优势和特色:本专业主要特色是电气工程与自动化相结合、强电和弱电相结合、电工技术与电子技术相结合、软件与硬件相结合。重点培养电器工程、电力电子、电力载波及自动化方向的人才。该专业以电力工业及其相关产业为服务对象,同时辐射到国民经济其他各部门,因此具有极大的市场人才需求量。 机械设计制造及其自动化专业 专业培养目标:本专业紧跟学科发展趋势、紧扣学科发展前沿,以信息技术作为支撑,以机械电子为专业特色,培养具备机械工程基础、计算机控制技术、机床与控制、智能仪器设计制造以及汽车电子等方面基础知识与应用能力,能在国民经济各部门从事机电一体化产品和系统的设计制造、科技开发、应用研究、运行管理和经营销售等方面工作,并具有广泛的知识面、扎实的基础理论、较强的创新精神、竞争意识和实践能力的高级工程技术人才。专业培养要求:本专业学生主要学习机械设计制造及其自动化、自动控制、计算机技术和信息处理等领域的基本知识,受到现代机械工程师的基本训练,具有进行机械产品设计、制造及设备控制、生产组织管理的基本能力。本专业学生主要学习精密仪器的光学、电子学等基础理论,测量与控制理论和有关测控仪器的设计方法,特别重视对学生计算机、通信、网络测控等方面的基础理论和实际研发创新能力的培养,受到现代测控技术和仪器应用的训练,具有本专业测控技术及仪器系统的应用及设计开发能力。 相近专业:自动化、测控技术与仪器。 主要课程:公共基础课、电路分析、电子电路、数字电路与逻辑设计、机械工程基础、机械设计基础、单片机原理及应用、机械工程材料、互换性与测量技术、计算机绘图、计算机控制技术、单片机原理及应用、传感器与自动检测技术、电力拖动与控制、可编程控制技术及应用、机电系统及控制、嵌入式系统及应用、机床与控制、智能仪器仪表设计、汽车电子等。到高年级根据社会需要设置柔性的专业方向模块课程及选修课。 主要实践性教学环节:包括军训,金工实习、电工实习、电子实习,认识实习,生产实习,社会实践,课程设计,毕业设计(论文)等。 标准学制:四年 授予学位:工学学士。 招生类别:理工类 专业优势和特色:突出信息技术在机械设计制造及其自动化中的应用,即机械电子工程。重点培养汽车电子、自动化仪器仪表两个方向的人才。汽车电子类学生毕业后主要从事汽车零部件、汽车电子产品方面的研究开发与设计制造方面的工作,该方向正是目前我国发展汽车产业所急需的人才;自动化仪器仪表是实施信息化带动工业化的战略、加快产业结构转型升级和跨越式发展的步伐、增强国家的整体综合实力的必然要求,具有极大的人才需求潜力。 关于紫铜冷挤压模拟上机试验报告 班级: 姓名: 组长: 组员: 日期:2012.5 目录 一、问题描述与分析 如图所示,T2纯铜圆柱体毛坯和挤压模具示意图,圆柱体几何参数,材料参数以及模具材料参数如下: 弹性模量:108 Gpa 泊松比: 0.30 流变应力: 摩擦系数:0.15 材料尺寸:D=21mm L=60mm 模具过渡面:15度 图1.1 建模图 分析:该问题属于非线性大变形接触问题,分析过程中根据轴对称性,选择坯料的纵截面(长方形)和模具纵截面的1/4建立有限元分析模型。模拟过程中,将坯料和模具的温度看作室温20摄氏度,将毛坯看作塑性变形体,模具看作刚体,整个变形过程即为冷挤压过程。建模图如图1.1所示: 二、解题过程模拟思路 1.创建三维模型: 利用UG软件画出三维模型,并将坯料、上模、下模分别导出,分别命名为piliao.stl、topdie.stl和bottomdie.stl。2.创建新问题 将文件夹命名为LZ 3.设置模拟控制初始条件 : Main: Simulation Title: cucoldjy 单位:SI Mode:Deformation 4.几何体导入: 分别导入piliao.stl、topdie.stl和bottomdie.stl 5.材料属性定义 设置T2紫铜流变应力、杨氏模量和泊松比 6.坯料网络划分 按绝对方式划分:(1)Size ratio: 4(2)min element size:0.9mm 7.对称边界条件设置: (1)坯料对称面(2)凸模对称面(3)凹模对称面 8.调整物体的空间位置(1)上模与坯料(2)下模与坯料 9.凸模运动设置 :Z方向V=10mm/s 10.设置对象间关系: 将凸模与坯料、坯料与凹模的摩擦因数为0.15 11.设定模拟控制信息 (1)Step:用凸模每步的移动距离定义求解步数,凸模每步移动距离为0.3mm,挤压过程中共移动30mm,所以共有100步,每2步保存一次,同时设Primary Die为上模 (2)Iteration :选择Sparse,再点击Newton-Raphson 12.检查生成数据库文件: 三、DEFORM前处理(Pre Processer) 3.1 创建三维模型 利用UG软件画出三维模型,并将坯料、上模、下模分别导出,分别命名为PiLiao.stl、TopDie.stl和BottomDie.stl。 3.2.创建新问题 1.开始-程序-DEFORM3D Ver6.1–DEFORM-3D,进入DEFORM-3D的主窗口。 2.File-New Problem 3.在接着弹出的窗口中默认进入普通前处理(Deform 3D-preprocessor)4.接下来在弹出的窗口中用第四个选项“Other Place”,选择工作目录然后点击“Next” 5.在下一个窗口中输入题目的名称(Problem name)CuColdJy,点击Finish。 图3.2 创建问题示意图 3.3.设置模拟控制初始条件 : 1.点击Control)窗口。 2.在Simulation Title一栏中把标题改为Cu-Cold-Jy。3.设置Units 为SI, Mode为Deformation,其它模拟选项均为默认设置,如图3.3所示。 按钮进入模拟控制参数设置(Simulation 图3.3 模拟设置图 3.4.几何体导入: 3.4.1.导入坯料 (1)在前处理的物体操作窗口中点击按钮Geometry,然后再选择Import,选择piliao.stl。 (2)点击General,设置Object Type为Plastic,温度为20摄氏度,并将坯料的名字改为cu,结果如图3.4所示。 图3.4 坯料设置图 3.4.2.导入上模 (1)在前处理控制窗口中点击增加物体 Insert objects 进入物体窗口,可以看到在Objects列表中增加了一个名为 Top Die 的物体。 (2)在当前选择默认Top Die物体的情况下,直接选择Geometry 后选择Import,导入TopDie.stl。 (3)设置Object Type为Rigid,温度为20摄氏度,如图3.5所示。 图3.5 上模设置图 3.4.3.导入下模 重复第2步,导入凹模的几何文件,系统会自动命名该物体为Bottom Die,相应的STL文件为BottomDie.stl;同时设置Object Type为Rigid,温度为20摄氏度,如图3.6所示。 图3.6 下模设置图 最后我们可以在显示窗口中看到上下模和坯料,如图3.8所示。 图3.8 三维建模图 3.5.定义铜的材料并加载 3.5.1定义材料 点击Material,建立新材料,将名字改为ColdCu 1.设置流变应力 点击Plastic,Flow Stress选择第三个双曲正弦公式,参数如图3.9所示,另外,屈服极限准则选择米塞斯。 图3.9 流变应力设置图 2.设置杨氏模量和泊松比 点击Elastic,杨氏模量为10800MPa,泊松比为0.3。设置完成后关闭窗口。3.5.2.加载材料 选择坯料,点击General,在Material选择选择ColdCu。 Assign Material,图3.10 Cu加载示意图 3.6.坯料网络划分 采取绝对划分网格方式划分。1.网格设置 选中坯料,点击Mesh-Detailed Settings,type选择Absolute,Size Ratio设定为4,Minimum element Size设为0.9mm,如图3.11所示。 图3.11 网格设置图 2.生成网格 点击Surface Mesh,生成表面网格;点击Solid Mesh,生成实体网格,如图3.12所示。 图3.13 坯料网格划分结果示意图 3.7.对称边界条件设置: 3.7.1.坯料边界条件 选中坯料,单击 按钮进入边界条件窗口,在B.C.Type中选中Symmetry Plane,用鼠标单击分别选定毛坯中心两个对称面,并单击,结果如图3.14所示。 图3.14 坯料对称面(之一)示意图 3.7.2.凸模边界条件 选中上模,点击 ,选择Symmetric Surface,在Symmetry Type中选Planar Symmetry,用鼠标单击分别选定上模中心两个对称面,并单击 Add,结果如图3.15所示。 图3.15 上模对称面(之一)示意图 3.7.3.凹模边界条件 重复第2步,选择下模,结果如图3.16所示。 图3.15 下模对称面(之一)示意图 3.8.调整物体的空间位置 在前处理控制窗口的右上角点击 按钮的窗口,会弹出新的窗口: 3.8.1.定义上模与坯料 的位置 (1)首先选择Interface,这个功能能够将两个物体自动接触上; (2)Position object选择ColdCu,Reference选择Top Die,Approach Direction 选择 为“Z”,Interference选择0.0001,选择“Apply”,如图3.16所示。 Object Positioning 图3.16 上模与坯料位置关系设置图 3.8.2.定义下模与坯料的位置 方法同第1步类似,在Interface窗口下,Position object选择ColdCu,Reference选择Bottom Die,Approach Direction 选择 为“Other”:1,1,0,选择“Apply”,如图3.16所示。 图3.16 下模与坯料位置关系设置图 3.9.上模运动设置 : 在物体窗口的物体列表中,选中TOP DIE,点击Movement按钮。在运动控制窗口中,设置参数Direction为-Z , Speed为10mm/sec,如图3.17所示。 图3.17 上模运动设置 3.10.设置对象间关系 在前处理控制窗口的右上角点击 Inter object 按钮,会出现一个提示,选择Yes 弹出Inter Object窗口。物间从属关系采用默认设置,如图3.18所示。 图3.18 Inter-Object窗口 3.10.1.设置凸模与坯料的关系 点击按钮Edit,进入新的窗口。选择剪切摩擦方式Shear,输入常摩擦系数constant:0.15,点击Close按钮,关闭窗口,回到Inter Object窗口,如图3.19所示。 图3.19 凸模与坯料关系设置图 3.10.2设置凹模与坯料的关系 重复第一步操作的操作,将Bottom Die 和ColdCu的摩擦系数也设为0.15。 3.10.3.在Inter-Object窗口中点击按钮Generate All,关闭窗口。 3.11 设定模拟控制信息 点击Control)窗口。 3.11.1.设置步数Step 点击Step。用凸模每步的移动距离定义求解步数,凸模每步移动距离为0.3mm,挤压过程中共移动30mm,所以共有100步,每2步保存一次,同时设Primary Die为上模,如图3.20所示。 按钮,进入模拟控制参数设置(Simulation 图3.20 模拟步数设置 3.11.2.设置Iteration : 点击Sparse,再选择Newton-Raphson,关闭窗口如图3.21所示。 图3.21 模拟方法设置 3.12 检查生成数据库文件: 1.在前处理控制窗口点击 Database按钮 2.在弹出的Database Generation窗口中点击Check按钮,检查数据库是否能生成。系统会提示“3.单击Generate,生成数据库,如图3.22所示。 ”。 图3.22 建立数据库 三、DEFORM求解(Simulator Processer) 数据库生成后,退出前处理程序,回到Deform主界面,选择“CuColdJy.DB”文件,选择Run,进行计算。 当系统提示NORMAL STOP: The assigned steps have been completed,模拟计算过程完成。 四、DEFORM后处理(Post Processer) 点击Post Professor,进入Deform后处理窗口。在Step Setup中点击4.1 模拟过程动画图 我们以坯料刚进入模具圆弧面、斜面、竖直面以及模拟完成后 (Play Forward),观看动画演示。的动画图为代表,大致展示坯料在整个模拟过程的动态变化。 图4.1 坯料进入圆弧段 图4.2 坯料进入斜面 图4.3 坯料进入竖直圆柱面 图4.4 模拟终止 4.2 模拟结果图 4.2.1 坯料重构图 在Posttools工具栏中,点 击Mirror/Rot Symmetry按钮,选择Add,分别点击坯料和模具生成完整的坯料与模具。 图4.5 坯料重构图 4.2.2节点应力应变图 选中坯料,点击 只 显示坯料。点击STATEVARTOOLS中的State Variable,在左侧选择Deformation-Stress-Effective,Display选择Shaded,点击Apply,即为节点应力图,如图4.6所示。 图4.6 节点等效应力图 之后在State Variable左侧选择Strain-Effective,单击Apply,即为节点应力图,如图4.7所示。 图4.7 节点等效应变图 4.2.3 单元应力应变图 在Rendering Type选择 并在State Variable窗口左侧选择Deformation-Stress-Effective,Display选择Elemental,点击Apply,即为单元应力图,如图4.8所示。 图4.8 单元等效应力图 在State Variable窗口左侧选择Strain-Effective,单击Apply,即为单元应变图,如图4.9所示。 图4.9 单元等效应变图 4.2.3 查看载荷一行程曲线 在后处理中点击按钮 在出现的Lode-stroke窗口中,只选择Top Die和Z方向,出现一个新的窗口,显示上模的载荷行程曲线如图4.10所示。 图4.10 上模载荷行程曲线 之后选择Bottom Die和Z方向,出现一个新的窗口,显示下模的载荷行程曲线,如图4.11所示。 图4.10 上模载荷行程曲线 4.2.4 图4.11 五、模拟结果分析 5.1 坯料分析 5.2 模具应力分析 5.2.1 操作步骤 1、创建新项目 (1)在Deform主界面选中“CuColdJy.DB”,点击Pre Processor中的Die Stress Analysis,输入问题新名称CuColdJy_DieStressAnalysis,点击next,进入模具应力分析,如图所示。 图 选择模具应力 图 建立新问题 分析模块 (2)点击窗口左下角project处的Next按钮,其它按系统默认值设定,单击Next。 2.加载数据库模拟步 单击Browse,载入“CuColdJy.DB”,选择第100模拟步 输入,如图所示,单击Next按钮。 图5.加载数据库模拟步对话框 3.选定分析对象 点击上模和下模,使其高亮显示,点击Next。将Extra Die Components设为0,单击Next。 4.上模设置 (1)设置模具类型 Object Type选择Elastic,单击Next。(2)输入几何对象 接受系统默认值,单击Next。(3)划分网格 将网格划分为8888个单元,单击Preview生成表面网格,之后单击Generate Mesh生成实体网格,在之后的提示框点击Yes,同意导入对称信息。网格划分如图所示。 图 上模网格划分结果 (4)插入力 在Force Interpolation对话框中,单击 按钮,设置容差,单击Interpolate force,弹出图所示的信息表,单击OK,则上模的插入力如图所示,单击Next,完成力的插入。 图 插入力信息表 图 上模插入力 (5)设置速度边界条件 选择BBC中的Velocity,并在Fix direction中选取Z方向。之后鼠标单击上模的上表面,该表面红色高亮显示,再单击设置边界条件。在Velocity下有“Z,Fixed”字符,单击Next。边界条件如图所示。 图 上模速度边界条件设置 (6)定义材料 从网上查资料得,AISI D3是国外材料牌号,对应我国的Cr12。因此从材料库中选择AISI-D3,单击Next。 5.下模设置 步骤与上模设置步骤相同,只是设置速度边界条件时,选择下模的下表面增加Z向固定。各步骤的示意图如下所示。 图 下模网格划分 图 插入力信息表 图 下模插入力 图 下模速度边界条件设置 6.模具定位 接受系统默认值,单击Next。 7.设置接触关系 主从关系设为Master-Slave,模具之间的摩擦设为0.12(cold forming(steel dies)),点击Next。如图所示。 图 接触关系设置 8.设置模拟控制信息 (1)在“Starting step number”输入栏中输入“-1”(2)在“Number of simulation”输入10(3)在“Step Increment to Save”中输入1(4)在“Max elapsedprocess time per step”输入0.5(5)接受系统默认值,单击Next。如图所示。 图 模拟控制信息设置对话框 9.检查并生成数据库 单击Check data,在提示“Database can be generated”之后,单击Generate database,再点击Finish,并退出窗口,回到主界面。 10.模具应力分析求解 选定“CuColdJy-DieStressAnalysis.DB”,点击Run按钮。直到提示“The assigned steps have been completed.”,运算结束。 5.2.2 模具应力分析结果 点击STATEVARTOOLS中的State Variable,在左侧选择Deformation-Stress-Effective,Display选择Shaded,点击Apply,即为节点应力图,如图所示。 图 节点等效应力图 在Rendering Type选择 并在State Variable窗口左侧选择Deformation-Stress-Effective,Display选择Elemental,点击Apply,即为单元应力图,如图4.8所示。 图 单元等效应力图 5.2.3 结果分析 六、紫铜的热挤压过程及结果分析 紫铜的热挤压实际上就是在冷挤压的基础上加上热的传导条件。具体过程就是将紫铜加热到100-200摄氏度,考虑坯料与模具、空气间、模具与空气间的传热过程,由于应力与温度有一定的关系,所以坯料在热挤压时受到的应力与冷挤压时有所不同。因为与冷挤压过程相差不多,为减少篇 幅,在相同的地方予以简化。6.1 模拟过程 6.1.1.创建新问题 将新问题命名为CuHotJy。6.1.2设置模拟控制初始条件 : 1.点Control)窗口。 2.在Simulation Title一栏中把标题改为CuHotJy。3.设置Units 为SI, Mode为Deformation 和Heat Transfer,其它模拟选项均为默认设置,如图3.1所示。 击按钮进入模拟控制参数设置(Simulation 图6.1 模拟设置图 6.1.3.几何体导入: 1.导入坯料 (1)在前处理的物体操作窗口中点击按钮Geometry,然后再选择Import,选择piliao.stl。 (2)点击General,设置Object Type为Plastic,温度为160 摄氏度,并将坯料的名字改为HotCu,结果如图3.4所示。 图6.2 坯料设置图 2.导入上模 (1)在前处理控制窗口中点击增加物体 Insert objects 进入物体窗口,可以看到在Objects列表中增加了一个名为 Top Die 的物体。 (2)在当前选择默认Top Die物体的情况下,直接选择Geometry 后选择Import,导入TopDie.stl。 (3)设置Object Type为Rigid,温度为20摄氏度,如图3.3所示。 图6.3 上模设置图 3.导入下模 重复第2步,导入凹模的几何文件,系统会自动命名该物体为Bottom Die,相应的STL文件为BottomDie.stl;同时设置Object Type为Rigid,温度为20摄氏度,如图3.6所示。 图6.4 下模设置图 最后我们可以在显示窗口中看到上下模和坯料,如图3.8所示。 图6.5 三维建模图 6.1.4.定义材料并加载 1.定义铜材料 点击Material,建立新材料,将名字改为HotCu(1)设置流变应力 与冷变形的设置相同(2)设置杨氏模量和泊松比 与冷变形设置相同。点击Elastic,杨氏模量为10800MPa,泊松比为0.3。设置完成后关闭窗口。 (3)设置铜的散热参数 点击Thermal,将Thermal Conductivity设为温度的函数,填入图6.6所示的数据;将Heat Capacity设为温度的函数,填入图 6.7所示的数据;将Emissivity设为0.3。 图6.6 铜的Thermal Conductivity数据 图6.7 铜的Heat Capacity数据 2.加载材料 (1)加载坯料材料 选择坯料,点击General,在Material选择选择HotCu。 Assign Material,图6.8 Cu加载示意图 (2)加载上模材料 选择上模,点击General,在Material选择AISI-D3材料,如图6.9所示。,从数据库加载 图6.9 上模材料加载示意图 (3)加载下模材料 与加载上模材料步骤相同。6.1.5 网络划分 采取相对划分网格方式划分。1.坯料网格划分 选中坯料,点击Mesh窗口,单元数量设为8800,默认Size Ratio 为2,点击Preview,再点击Solid Mesh,生成实体网格,如图3.12所示。 图6.10 坯料网格划分示意图 2.上模网格划分 与坯料网格划分方法相似,单元数量设为8100,网格划分如图6.11所示。 图6.11 上模网格划分示意图 3.下模网格划分 与坯料网格划分方法相似,单元数量设为9000,网格划分如图6.12所示。第二篇:C++上机实验报告
第三篇:C++上机实验报告
第四篇:重庆邮电大学自动化学院专业介绍
第五篇:紫铜冷挤压模拟上机试验报告