第一篇:重慶郵電大學計算機學院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++上機實驗報告
第四篇:重慶郵電大學自動化學院專業介紹
第五篇:紫銅冷擠壓模擬上機試驗報告