第一篇:Matlab課設
武漢理工大學《Matlab課程設計》課程設計說明書
目錄
摘要.............................................................................................2
一、Matlab運算與應用............................................................3 1.1..........................................................................................3 1.2..........................................................................................3
二、Matlab運算與應用設計題目分析....................................4 2.1..........................................................................................4 2.2..........................................................................................5 2.3..........................................................................................6 2.4..........................................................................................7 2.5........................................................................................13 2.6........................................................................................14 2.7........................................................................................15 2.8........................................................................................17 2.9........................................................................................19 2.10......................................................................................22
三、matlab課程設計心得體會..............................................23 參考文獻...................................................................................23
武漢理工大學《Matlab課程設計》課程設計說明書
摘要
MATLAB是矩陣實驗室(Matrix Laboratory)的簡稱,是美國MathWorks公司出品的商業數學軟件,用于算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境,主要包括MATLAB和Simulink兩大部分。
Matlab和Mathematica、Maple并稱為三大數學軟件。它在數學類科技應用軟件中在數值計算方面首屈一指。Matlab可以經行矩陣運算、繪制函數和數據、實現算法、創建用戶界面、連接其他編程語言的程序等,主要應用于工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。
本次課程設計主要通過學習了解Matlab,熟悉Matlab界面、進行簡單操作,并運用此款軟件完成安排的相關題目。
關鍵字:Matlab、課程設計、矩陣實驗室
武漢理工大學《Matlab課程設計》課程設計說明書
一、Matlab運算與應用
1.1理論分析
Matlab是MathWorks公司的產品,是一個為科學和工程計算而專門設計的高級交互式放的軟件包。Matlab環境集成了圖示與精確的數值計算,是一個可以完成各種計算和數據處理可視化的、強有力的、易于使用和理解的工具。Matlab已被證明是為解決數學、物理、化學、工程、醫藥、金融和其他涉及復雜數值計算的應用領域的一個十分靈活的、便于使用的工具,也是數學、數值分析和工程等課程教學的一個優秀的教育工具。這個程序被世界各地高等學院廣泛使用,在工業應用中也很流行,Matlab使用于PC到超級計算機以及大多數諸如PC、Macintosb和UNIX等平臺。
Matlab中有大量的命令集和可用函數集,也通稱為Matlab M文件,這是應用更加容易。因此,在Matlab中求解問題通常比傳統編程快得多,由于是采用自然表示法,因而使代碼清晰和自釋。因為多數M文件是公開的,因此,易于修改這些函數。
Matlab中有一些命令可以用來控制Matlab語句的執行,如條件語句、循環語句和支持用戶交互的命令。Matlab是一種高級的程序設計語言,能幫助用戶解決矩陣戶或其它問題。
1.2歸納與總結
Matlab的主要特點是:
(1)有高性能數值計算的高級算法,特別適合矩陣代數領域;(2)有大量事先定義的數學函數,并具有用戶自定義函數的能力;(3)繪圖和顯示數據,并具有教育、科學和藝術學的圖解和可視化的二維、三 維圖;
(4)基于HTML的完全幫助系統;
(5)適合個人應用的強有力的面向矩陣/向量的高級程序設計語言;(6)與用其他語言編寫的程序結合和輸入輸出格式化的能力;
武漢理工大學《Matlab課程設計》課程設計說明書
(7)有在多個應用領域解決難題的工具箱。
MATLAB 的應用范圍非常廣,包括信號和圖像處理、通訊、控制系統設計、測試和測量、財務建模和分析以及計算生物學等眾多應用領域。附加的工具箱(單獨提供的專用 MATLAB 函數集)擴展了 MATLAB 環境,以解決這些應用領域內特定類型的問題。
二、Matlab運算與應用設計題目分析
2.1已知t=linspace(0,2*pi,6),求t的正弦和正弦的絕對值。
2.1.1理論分析
由題目已知分析知,linspace(a,b,n)為線性分割函數,在a與b之間均勻地產生n個點值,行成n維向量。Matlab中求解正弦的函數為sin(),求取絕對值和復數模值的函數為abs()。
2.1.2程序代碼
>> t=linspace(0,2*pi,6)%創建線性間隔向量t,范圍從0到2pi,元素 個數為6 >> a=cos(t)%對向量t求得余弦向量a >> b=abs(a)%對余弦向量a求絕對值得絕對值向量b 2.1.3運行結果
a =
1.0000 0.3090-0.8090-0.8090 0.3090 1.0000 b =
1.0000 0.3090 0.8090 0.8090 0.3090 1.0000
武漢理工大學《Matlab課程設計》課程設計說明書
2.1.4題目總結
為了方便給大量元素賦值,Matlab提供了一些基本矩陣,Linspace()就是其中的均分向量函數命令,大部分的Matlab函數都適用于做元素群運算,只有專門的幾個除外,那就是*、/、、^運算符和sqrtm、expm、logm三個函數。題目中用到的正弦函數sin()和取絕對值函數abs()均可用于元素群運算,也即其自變量都可以是任意階的矩陣。
2.2繪制余弦曲線y=cos(x)和指數函數y=x^2曲線。
2.2.1理論分析
本題是畫函數的曲線圖,可以利用plot,ezplot等命令進行繪圖。也可以用funtool命令直接繪制函數圖象。由于plot要設置自變量的范圍,而ezplot不需要設置,所以本題采用ezplot進行畫圖。
2.2.2程序代碼:
syms x;%聲明變量
y1=cos(x);%將cos(s)賦值給y1 y2=x^2;% 將x^2賦值給y2 ezplot(y1);%畫函數1圖 hold on
grid on %保持圖形 %畫方格
ezplot(y2)%畫函數2圖
2.2.3運行結果
武漢理工大學《Matlab課程設計》課程設計說明書
圖2.2.3 2.2.4題目總結
ezplot功能簡介:
EZPLOT即:Easy to use function plotter。它是一個易用的一元函數繪圖函數。特別是在繪制含有符號變量的函數的圖像時,ezplot要比plot更方便。因為plot繪制圖形時要指定自變量的范圍,而ezplot無需數據準備[2],直接繪出圖形。要將兩個函數繪制到同一個圖上要使用hold on 命令。
2.3利用for...end循環語句,求 2+4+6…+100 的值。
2.3.1理論分析
for語句作用是按照預先設定的循環步驟重復執行某語句段, 其語法: for 循環控制變量=存儲著該變量依次所取值的一個向量。
循環語句塊, 本塊重復執行的次數由上方向量的長度決定, 每次執行, 循
武漢理工大學《Matlab課程設計》課程設計說明書
環控制變量依次取該向量中的值.end
2.3.2程序代碼
sum=0;%賦初值sum為0
for i=2:2:100 %變量i變化范圍為2到100,以2步進 sum=sum + i;%累加求和 end %結束for循環
2.3.3運行結果
>> sum sum =
2550 2.3.4題目總結
matlab的for 循環語句有其獨有的特點, 它使用一個向量來控制循環, 循環次數由向量的長度來決定, 而每次循環都依次從向量中取值.這使得Matlab循環更靈活多樣, 其循環變量取值可以不按照特定的規律;但是另一方面, Matlab 的for循環也有獨特的限制, 當次循環中改變循環變量賦值, 不會代入下次循環, 所以除非在其中用break提前退出, Matlab循環的次數是預先定好的.舉個例子: for a=1:2:7 , 將循環4次, a的取值依次是1, 3, 5, 7.2.4分析下面每條指令的功能并運行,觀察執行結果。
(1)X=0:0.25:3;Y=X.*exp(-X);plot(X,Y),xlabel(‘x’),武漢理工大學《Matlab課程設計》課程設計說明書
ylabel(‘y’),title(‘y=x*exp(-x)’);
(2)A=zeros(3,5)A(:)=-4:5 L=abs(A)>4 islogical(L)X=A(L)
(3)A=[1:5;6:10] pow2(A)
(4)A=zeros(3,2)A(:)=1:6 A=A*(1+i)A1=A.’;B1=A’;(5)A=ones(2,3)B=ones(2)C=eye(4)D=diag(C)E=repmat(C,1,3)2.4.1程序分析
? X=0:0.25:3;%變量x的取值范圍為0 ~3,以0.25增加 Y=X.*exp(-X);%函數y=xe?x的表達式
plot(X,Y),xlabel(‘x’), ylabel(‘y’),title(‘y=x*exp(-x)’);
%繪制y=xe?x的圖線,橫坐標為x,縱坐標為y,標題為
y=x*exp(-x)? A=zeros(3,5)%創建一個3*5的零矩陣A A(:)=-4:5 %為矩陣A賦值,得到列向量范圍為-4到5,步進為1 L=abs(A)>4 %判斷矩陣A的絕對值是否大于4
武漢理工大學《Matlab課程設計》課程設計說明書
islogical(L)%判斷L是否為邏輯值
X=A(L)%X為邏輯數組L對應為1的位置的數據為列向量 ? A=[1:5;6:10] %創建一個2*5的矩陣A,范圍為1到10,步進為1 pow2(A)%返回數組X,依次計算A中元素以2為底的冪 ? A=zeros(3,2)%創建一個3*2的零矩陣 A(:)=1:6 %為矩陣A賦值,范圍為1到6,步進為1 A=A*(1+i)%將矩陣A中的每一個元素乘以(1+i)A1=A.' %對A進行數組轉置生成矩陣A1 B1=A' %對A進行矩陣轉置生成矩陣B1 ? A=ones(2,3)%創建一個2*3的1矩陣A B=ones(2)%創建一個2*2的1矩陣B C=eye(4)%創建一個4*4的單位矩陣C D=diag(C)%獲取單位矩陣C的對角線元素矩陣D E=repmat(C,1,3)%將矩陣C生成為1*3的新矩陣E
2.4.2運行結果
2.4.2.1程序運行結果一
圖2.4.2.1
2.4.2.2程序運行結果二
A =
武漢理工大學《Matlab課程設計》課程設計說明書
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A =
-4-1 2 5 8-3 0 3 6 9-2 1 4 7 10
L =
0 0 0 1 1 0 0 0 1 1 0 0 0 1 1
ans = 1
X = 5 6
武漢理工大學《Matlab課程設計》課程設計說明書
8 9 10
2.4.2.3程序運行結果三
>> pow2(A)
ans =
64 128 256 512 1024 2.4.2.4程序運行結果四
>> A1=A.'
A1 =
0 + 2.0000i 0 + 4.0000i 0 + 6.0000i
0 + 8.0000i 0 +10.0000i 0 +12.0000i >> B1=A'
B1 =
04.0000i 08.0000i 0-10.0000i 0-12.0000i 11
武漢理工大學《Matlab課程設計》課程設計說明書
2.4.2.5程序運行結果五
>> A=ones(2,3)A =
1 1 1 1 1 >> B=ones(2)B =
1 1 1 >> C=eye(4)C =
0 0 0
0 1 0 0
0 0 1 0 0 0 0 1 >> D=diag(C)D =
1
武漢理工大學《Matlab課程設計》課程設計說明書
>> E=repmat(C,1,3)E = 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 2.4.3題目總結
對于實數矩陣,矩陣轉置和數組矩陣計算結果是一樣的,但是對于復數矩陣,數組轉置和矩陣轉置的計算結果不一致。所以,對于數組轉置運算也被稱為非共軛轉置,矩陣轉置運算則被稱為共軛矩陣。數組的運算是指數組對應元素之間的運算,也稱點運算。
2.5計算多項式p(x)= x3+15x2+8x在x=3和x=0:1:8時的值。
2.5.1理論分析
由題目已知的條件分析可知是運用MATLAB計算多項式。這里運用到的是polyval()命令。通過polyval()命令可以快速的計算出在相應值下的多項式的值。
2.5.2程序代碼
x=3;y= x^3+15.*x^2+8.*x 式
%賦初值3給x %寫出函數表達
武漢理工大學《Matlab課程設計》課程設計說明書
? clear all %清除所有變量 >> syms x;%聲明變量x >> y=x^3+15.*x^2+8.*x;%寫出函數表達式
>> x=0:1:8;%生成一個0到8的數組,每相鄰兩數間間隔為1 >> p=[1 15 8];%將函數表達式的系數放在數組P中 >> polyval(p,x)%用polyval函數求得表達式的值
2.5.3運行結果
X=3時
186 X=0:1:8時 y =
2.5.4題目總結
Matlab為用戶提供了解決多項式運算的和插值的函數庫,ployval()就是其中的多項式求值函數。在表達多項式系數中要把缺少的自變量系數0補充到系數矩陣中。
2.6隨機生成一個10000×3的矩陣,并繪制其柱狀圖
2.6.1理論分析
隨機生成矩陣函數可以用rand(M,N),表示隨機產生一個M*N的矩陣。柱狀繪圖函數可以用bar,此函數是在平面內繪制柱狀圖,如果要繪制立體的,用bar3。
武漢理工大學《Matlab課程設計》課程設計說明書
2.6.2程序代碼
arry=rand(10000,3);
%隨機生成一個10000*3的矩陣
bar(arry)%bar函數用于繪制柱狀圖 %畫出柱狀圖
2.6.3運行結果
圖2.6.3
2.7利用switch…case編寫以下程序:
某商場對顧客所購買的商品實行打折銷售,標準如下(商品價格用price來表示):
price<200 無折扣 200?price<500 5%折扣 500?price<1000 10%折扣 Price?1000 15%折扣 輸入所售商品的價格,求其實際銷售價格。
武漢理工大學《Matlab課程設計》課程設計說明書
2.7.1理論分析
MATLAB語言為解決多分支判斷選擇提供了switch-case語句。switch-case語句的一般表達形式為: switch〈選擇判斷量〉 Case 選擇判斷值1 選擇判斷語句1 case 選擇判斷值2 選擇判斷語句2 …… otherwise 判斷執行語句
2.7.2程序代碼
price = input();
%輸入商品價格
switch fix(price/100)%價格除以100后取整 case {0,1} price=price*1;case {2,3,4} price=price*0.95;case {5,6,7,8,9} price=price*0.9;case others price=price*0.85;end 16
武漢理工大學《Matlab課程設計》課程設計說明書
2.7.3運行結果
2.7.4題目總結
與其他的程序設計語言的switch-case語句不同的是,在MATLAB語言中,當其中一個case語句后的條件為真時,switch-case語句不對其后的case語句進行判斷,也就是說在MATLAB語言中,即使有多條case判斷語句為真,也只執行所遇到的第一條為真的語句。這樣就不必像C語言那樣,在每條case語句后加上break語句以防止繼續執行后面為真的case條件語句。
2.8編程將表達式
10(s?3)s(s-6)(s-16)進行部分分式展開
2.8.1理論分析
計算模型
10(s?3)s(s-6)(s-16)=k1s?k2s?6?k3s?16
武漢理工大學《Matlab課程設計》課程設計說明書
k1?10(s?3)(s?6)(s?16)10(s?3)s(s?16)10(s?3)s(s?6),s=0;k2?,s=6;k3?,s=16。
2.8.2程序代碼
clear,close all;syms x,x=0;syms s;
while x<20 %判斷當x<20 時 switch x
case 0
%清除所以變量和關閉所有打開的圖像框
k1=10*(x+3)/((x-6)*(x-16));
x=6;
case 6
k2=10*(x+3)/(x*(x-16));
x=16;
case 16
k3=10*(x+3)/(x*(x-6));
x=20;end end
y=k1/s+k2/(s-6)+k3/(s-16);
%將計算出的k1、k2、k3帶入表達式
武漢理工大學《Matlab課程設計》課程設計說明書
2.8.3運行結果
2.8.4題目總結
本題主要在于數學運算模型建立和計算表達式的書寫,利用while…end語句對其
進行三次循環條件判斷并計算三個常數,通過switch…end語句分別給出三個常數的計算表達式,最后再將計算出的三個常數帶入到
10(s?3)s(s-6)(s-16)=
k1s?k2s?6?k3s?16中即可。
2.9已知y?e出曲線圖-1cos(t),其中t的范圍是[0 10],計算y的微分和積分并給2.9.1理論分析
已知函數方程和自變量t的變化范圍,對于積分,可以利用函數quad()對確定自變量變化范圍進行計算,格式如quad('函數名',初值,終值)所示。對于微分,可以利用函數diff()對確定自變量變化范圍進行計算。函數圖象可用funtool指令得到。
2.9.2程序代碼
2.9.2.1積分運算 yt='exp(-1)*cos(t)'
%寫出函數表達式
Ic=quad(yt,0,10,1e-8)%用quad函數求積分 Funtool %進行畫圖 2.9.2.2微分運算
syms t y
武漢理工大學《Matlab課程設計》課程設計說明書
y=(exp(-1)*cos(t)dydt=diff(y,t)%用diff函數求解微分 funtool %進行畫圖
2.9.3運行結果
2.9.3.1積分運算
2.10.3.1.1 程序運行結果
Ic =
-0.2001
2.10.3.1.2積分圖形
圖 2.10.3.1.2 20
武漢理工大學《Matlab課程設計》課程設計說明書
2.9.3.2微分運算
2.10.3.2.1程序運行結果
dydt =
-(****sin(t))/***8 2.10.3.2.2微分圖形
圖2.10.3。2.2
2.9.4題目總結
繪制函數圖像時還可以借助Matlab提供的專門繪制函數圖象的指令flot(),格式如flot('函數名',[初值,終值])。
武漢理工大學《Matlab課程設計》課程設計說明書
2.10 用fminbnd求解函數f(x)?x?1/x?5在區間(1,10)上的最小值
2.10.1理論分析
用于求某個給定函數的最小值點。使用方法是: x=fminbnd(func,x1,x2)func是函數句柄,然后x1和x2就是函數的區間,得到的結果就是使func取最小值的x值
當然也可以使用[x,fv]=fminbnd(func,x1,x2)的方式,這個時候fv就是函數 的最小值,即有:fv=f(x)2.10.2程序代碼
f=@(x)x-1/x+5;%確定函數 [x,fv]=fminbnd(f,1,10)
%求區間1到10中函數的最小值
2.10.3運行結果
x =
1.0001
fv =
5.0001 2.10.4題目總結
本題主要在于fminbnd函數的使用方法,它有兩種方式,一種是 x=fminbnd(func,x1,x2);另一種是[x,fv]=fminbnd(func,x1,x2)。運用時隨便選哪種都可以,但是如果在某個區間上是單調的,結果就有點意思了,例如clear
>> f=@(x)x^-2*x-3;
武漢理工大學《Matlab課程設計》課程設計說明書
>> [x,fv]=fminbnd(f,2,3)
x = 2.9999
fv =-2.6667 看樣子MATLAB是使用了定長小區間的方式計算的,而且結果也是錯誤的,這不免
讓人對這個函數的可靠性產生懷疑…
三、matlab課程設計心得體會
這次Matlab課程設計使用了Matlab2010版本,雖然對它熟悉不過短短一個月左右時間,但也感受和學習到它的功能強大、可擴展性強和智能化程度高。它提供了豐富的操作指令,還有強大而又簡單的作圖功能。而且軟件本身還提供了演示(demo)和求助(help)的命令,讓用戶更好的學習到軟件的功能。此次課程設計學習到的不僅僅是軟件運用操作的知識,還學到了更多的學習方法。為了做好這次的課程設計,我查閱了大量的資料,并上網搜索了很多Matlab程序應用的教程和詳解,這個過程使我受益匪淺,發現了很多關于Matlab的論壇和學習網站,網上提供了很多關于Matlab學習的方法及其自學的方法,相信這些論壇和網站對于將來繼續學習Matlab及其他方面的知識也都有很大的幫助。
雖然在規定的時間內完成了老師所布置的所有題目,但還是覺得不免有些不足,由于時間的限制,對許多Matlab所運用到的只有僅僅只是有所了解,而并沒有完全掌握,甚至可以說是只知其然,而不知其所以然。這是我認識到對于Matlab的學習任務還很艱巨,還有許多知識需要去了解,去深研。
參考文獻
【1】陳懷身.吳大正.高西全.Matlab及在電子信息課程中的應用[M].電子工業出版社 【2】朱習軍.張賓.劉尊年.隋思連.Matlab信號與圖像處理中的應用[M].電子工業出版社 【3】羅建軍.Matlab教程[M].電子工業出版社.2005
武漢理工大學《Matlab課程設計》課程設計說明書
【4】陳懷琛.Matlab及其在理工課程中的應用指南.2000 【5】張威.Matlab基礎與編程入門.西安電子科技大學出版社
【5】 周開立.MATLAB基礎及其應用教程.北京:北京大學出版社,2007.【5】 張智星.MAYLAB程序設計及應用.北京:清華大學出版社,2002.【5】 陳懷琛,吳大正,高西全.MATLAB及在電子信息課程中的應用.北京:電子工業出版社,2006.【5】 張琨.MATLAB 2010
從入門到精通.北京:電子工業出版社,2011.
第二篇:數據結構課設
數據結構課設 大整數計數器 1.問題描述
實現大整數(200位以內的整數)的加、減、乘、除運算。2.設計要求
設計程序實現兩個大整數的四則運算,輸出這兩個大整數的和、差、積、商及余數。
3.數據結構
本課程設計采用順序串來實現。4.問題分析
由于整數數據存儲位數有限,因此引入串的概念,將整型數據用字符串進行存儲,利用字符串的一個字符存儲大整數的一位數值,然后根據四則運算規則,對相應位依次進行相應運算,同時保存進位,從而實現大整數精確的運算。具體設計思路如下:
(1)計算大整數加法時,采用數學中列豎式的方法,從個位(即字符串的最后一個字符)開始逐位相加,超過或達到10則進位,同時將該位計算結果存到另一個字符串中,直至加完大整數的所有位為止。
(2)計算大整數減法時,首先調用庫函數strcmp判斷這兩個大整數是否相等,如果相等則結果為0,否則用compare函數判斷被減數和減數的大小關系,進而確定結果為正數還是負數,然后對齊位依次進行減法,不夠減則向前借位,直至求出每一位減法之后的結果。
(3)計算大整數乘法時,首先讓乘數的每一位都和被乘數進行乘法運算,兩個乘數之積與進位相加作為當前位乘積,求得當前位的同時獲取進位值,進而實現大整數的乘法運算。
(4)計算大整數除法時,類似做減法,基本思想是反復做減法,從被除數里最多能減去多少次除數,所求得的次數就是商,剩余不夠減的部分則是余數,這樣便可計算出大整數除法的商和余數。
需求分析(1)任何一個表達式都是由操作數、運算符和界限符組成的,我們稱之為單詞.(2)表達式求值首先要符合四則運算規則: ① 先乘除,后加減 ② 從左到右進行運算 ③ 先括號內,后括號外(3)功能實現: ① 若當前單詞為數字串,則壓入數值棧 ② 若當前單詞為運算符并大于運算棧的棧頂符號,則進棧 ③ 若當前單詞為運算符并等于運算棧的棧頂符號,去括號,輸出 ④ 若當前單詞為運算符并小于運算棧的棧頂符號,則進行運算
課程設計的目的 通過課程設計全面掌握《C語言程序設計》關鍵知識點,掌握C語言中數組、指針、結構體、文件等方面的基本知識。
通過課程設計了解并掌握C語言程序設計的方法,熟悉C程序設計的開發環境及C程序的
調試過程。
培養學生查閱參考資料、手冊的自學能力,通過獨立思考深入鉆研有關問題,學會自己分析、解決問題的方法。
課程設計的任務和要求 任務: 編程求出輸入的兩個正整數之和,這兩個正整數的可能達到200位。
要求:
輸入:
共有兩行,第一行為第1個正整數;第二行為第2個正整數。
輸出:
2個正整數之和。
主要參與成員
姓 名 學 號
系 別 班 級 主要作用(分工)
成果形式
設計 軟件 作品 其他:
完成情況及以后的拓展設想 通過用C語言編寫函數基本實現了大整數相加這個程序,但該程序仍存在一些不足,還可以加上一些語句使程序具有容錯功能,并且可以正確計算一個負數和一個正數相加。
課 程 設 計 鑒 定 情 況 表 小組鑒定意見
小組長簽名:
年 月 日
指導教師意見
教師簽名:
****年**月**日
課程設計成績 優 良 及格 不及格 教研室意見
年 月 日 備注 《C語言程序設計》課程設計報告書 作者:廖 序 課程設計概述 課程設計名稱
大整數相加 任務要求: 編程求出輸入的兩個正整數之和,這兩個正整數的可能達到200位。
輸入:
共有兩行,第一行為第1個正整數;第二行為第2個正整數。
輸出:
2個正整數之和。開發環境: C語言。C語言是目前世界上流行、使用最廣泛的高級程序設計語言。1972年,C語言在美國貝爾實驗室里問世,后來又被多次改進,并出現了多種版本。80年代初,美國國家標準化協會(ANSI),根據C語言問世以來各種版本對C語言的發展和擴充,制定了ANSIC標準。
目前,在微機上廣泛使用的C語言編譯系統有MicrosoftC、Turbo C、Borland C等。這些C語言版本不僅實現了ANSIC標準,而且在此基礎上各自作了一些擴充,使之更加方便、完美。
C語言的特點: C語言是一種結構化語言。它層次清晰,便于按模塊化方式組織程序,易于調試和維護。C語言的表現能力和處理能力極強。它不僅具有豐富的運算符和數據類型,便于實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。
由于C語言實現了對硬件的編程操作,因此C語言集高級語言和低級語言的功能于一體。既可用于系統軟件的開發,也適合于應用軟件的開發。
此外,C語言還具有效率高,可移植性強等特點。因此廣泛地移植到了各類各型計算機上,從而形成了多種版本的C語言。
參考資料
李錚、葉艷冰、汪德俊,C語言程序設計基礎與應用,清華大學出版社,2005 [2]CSDN技術中心
二、概要設計
為了實現大整數相加這個程序,將程序劃分為了三個模塊: 輸入數據。運算。輸出結果。
首先定義了子函數Input()來存儲用戶輸入的兩個加數,為了滿足任意位數的兩個大整數相加,在子函數Input()中嵌套調用子函數Init()使sum數組里面存放的數初始化為”0”。
然后定義子函數Long_Add()使兩個大整數作加法運算,從后面往前面相加,附帶進位。定義子函數Output()實現輸出結果。
最后如下圖所示,在主函數main中調用Input(),Long_Add(),Output()三個子函數實現程序。
三、詳細設計
程序的流程圖:
四、調試過程 第一次 測試數據a=***7,b=111111 編譯運行后不能輸出結果,檢查函數后編譯正確。再次分析,發現如果直接把a,b,sum定義為unsigned int型的話,計算出來的和的范圍只能在0~65535之間,否則就會出現錯誤。嘗試將a,b,sum存放到字符數組中,從個位開始,一位一位相加。
第二次 測試數據a=***7,b=111111 編譯運行后仍不能輸出結果。分析原因,在用于輸出的子函數Output()中,輸出數組字符數組sum[]前未確定和的最高非零位。
嘗試加入for(i=0;i 第三次 測試數據a=99999919,b=99 編譯運行后發現計算出來結果不正確。經過分析,函數中沒有對最后 一個進位進行處理。 嘗試加入while(carry > 0)語句,再次進行調試。 { tempsum = sum[i]-'0'+carry;sum[i] = tempsum%10+'0';carry = tempsum/10;i--;} 第四次 測試數據a=99999919,b=99 編譯運行后得到正確結果。 第五次 隨意輸入幾組數據進行測試,結果都是正確的。程序得到實現。 五、結論與體會 通過不斷的調試、修改,本課程設計最終實現了200位以內的兩個大整數相加,但程序還 可以進一步完善,程序中仍存在一些不足之處,比如缺少容錯功能,不能準確計算負整數加正整數,等等問題 雖然C語言程序設計在上學期做為我們的必修課已經學習過了,但書到用時方恨少,這次課程設計的學習程序設計中暴露出的我自身的問題更是非常明顯。 一開始看到題目認為非常簡單,直接將兩個數都定義為整型。編寫程序并運行后發現并不能達到題目的要求,計算出來的和只能小于等于65535,否則就會出現錯誤。分析后,將數據作為字符串來處理,用for循環語句從存數的字符數組中一位一位的取數出來,按照數位對齊,從個位開始,按位相加,逢十進一的運算規則進行運算。最后用字符輸出函數putchar()輸出計算出來的結果。由于程序偏大且較復雜,將程序劃分為了輸入數據、運算、輸出數據三個子程序。數次編譯調試后,最終使程序得以實現。 經過三個星期的上機實踐學習,使我對C語言有了更進一步的認識和了解,讓我能夠進一步的掌握和運用C語言來編寫程序。要想學好C語言要重在實踐,要通過不斷的上機操作才能更好地學習它,通過實踐,我也發現我的好多不足之處和薄弱環節。 首先,基礎掌握不牢固,對于C語言中的許多基本語法尚沒有熟練掌握,在設計過程中仍需請教其它同學,查閱課本,設計效率很低。 其次,經典算法掌握不牢。在完成作業的過程中還需查閱書籍和借鑒他人。 再次,程序量過大的時候,頭緒理不清。雜亂無章,無系統性,不便調試和閱覽,自己也易于出錯。 并且對C語言中經常出現的錯誤也不了解,通過實踐,使我在這幾個方面的認識有所提高。 通過實踐的學習,我認到學好計算機要重視實踐操作,不僅僅是學習C語言,還是其它的語言,以及其它的計算機方面的知識都要重在實踐,所以后在學習過程中,我會更加注視實踐操作,使自己便好地學好計算機。 六、源程序清單 #include t;string.h> #define Max 1000 char sum[Max+1];/*和*/ char a[Max],b[Max];/*兩個加數*/ int len1,len2;void Input(char a[],char b[]){ int i,len;void Init(char a[]);/*對Init()函數進行聲明*/ printf(“Please enter two integer:n”);scanf(“%s %s”,a,b);len1=strlen(a);len2=strlen(b);Init(sum);len=strlen(a);for(i=len-1;i>=0;i--)sum[Max+i-len] = a[i];} void Init(char a[]) { int i;for(i=0;i void Long_Add(char sum[],char new[]){ int i,j;int len;int tempsum;int carry = 0;/*進位*/ len = strlen(new);/*從個位開始,按位相加,逢十進一*/ for(i=Max-1,j=len-1;i>=0,j>=0;i--,j--){ tempsum = sum[i]-'0'+new [j]-'0'+carry;sum[i] = tempsum%10+'0';carry = tempsum/10;} while(carry > 0)/*處理最后一個進位*/ { tempsum = sum[i]-'0'+carry;sum[i] = tempsum%10+'0';carry = tempsum/10;i--;} return;} void Output(char sum[]){int i,n;/*尋找和的最高非零位*/ for(i=0;i Long_Add(sum,b);Output(sum);getch();return 0; 計算機網絡應用課程設計 報告 系(院): 計算機科學學院 專業班級: 計科11511 姓 名: 鐘燦均 學 號: 201503687 指導教師: 余紹文 設計時間: 2017.6.12-2017.6.23 設計地點: 12教1樓機房 一、課程設計目的和意義 計算機網絡課程設計的目的,是為了讓我們更深入地掌握計算機網絡的核心內容,實現理論與實踐相結合。讓學生用具體的實踐成果,體現對理論知識的掌握程度。有利于學生提高計算機網絡的實踐能力,加深對計算機網絡理論知識的理解。其基本目的是: 1. 培養學生理論聯系實際的設計思想,訓練綜合運用所學的基礎理論知識,結合生產實際分析和解決網絡應用中問題的能力,從而使基礎理論知識得到鞏固和加深。2. 學習掌握網絡應用工程的一般設計過程和方法。 二、設計題目和要求 1.編寫程序,實現系統的基本功能; 2.要有用戶界面:要求至少采用文本菜單界面;鼓勵采用圖形菜單界面; 3.寫課程設計報告,內容包括: ? 封面(參見附錄I) ? 需求分析:以無歧義的陳述說明程序設計的任務,強調的是程序要做什么?給出功能模塊圖和流程圖。同時明確規定:輸入的形式和輸出值的范圍;輸出的形式;程序所能夠達到的功能;測試數據,包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果。? 概要設計:包括程序設計組成框圖,程序中使用的存儲結構設計說明(如果指定存儲結構請寫出該存儲結構的定義)。 ? 詳細設計:包括模塊功能說明(如函數功能、入口及出口參數說明,函數調用關系描述等),每個模塊的算法設計說明(可以是描述算法的流程圖)。其中源程序要按照寫程序的規則來編寫,結構清晰,重點函數的重點變量,重點功能部分要加上清晰的程序注釋。? 運行結果:包括典型的界面、輸入和輸出數據等; ? 總結:包括課程設計中遇到的問題,解決問題的過程及體會、收獲、對課程設計的認識與思考等。 ? 附錄:包括主要程序清單,要有適當的注釋,使程序容易閱讀。? 開發環境:windows 10 ? 開發工具: vs2008 題目3:基于UDP協議的簡易聊天機器人 設計目標: 1.了解Socket通信的原理,在此基礎上編寫一個聊天程序; 2.理解upd原理;課程設計系統組成及模塊功能: 此課程設計實現了基于UDP的客戶/服務器通信程序,需要實現以下一些基本功能: 1.客戶端連接聊天機器人服務器; 2.消息發送:客戶端發送消息給機器人服務器。 3.消息接收:客戶端接收到機器人服務器發送給他的消息。4.可以有多個客戶端同時連接 5.智能回復功能:根據用戶發送的消息內容,稍微有點智能回復。 運行效果: 服務器端和客戶端截圖 三、設計內容 1、UDP傳送數據前并不與對方建立連接,即UDP是無連接的,在傳輸數據前,發送方和接收方相互交換信息使雙方同步。 2、UDP不對收到的數據進行排序,在UDP報文的首部中并沒有關于數據順序的信息(如TCP所采用的序號),而且報文不一定按順序到達的,所以接收端無從排起。 3、UDP對接收到的數據報不發送確認信號,發送端不知道數據是否被正確接收,也不會重發數據。 4、UDP傳送數據較TCP快速,系統開銷也少。 5、由于缺乏擁塞控制(congestion control),需要基于網絡的機制來減小因失控和高速UDP流量負荷而導致的擁塞崩潰效應。換句話說,因為UDP發送者不能夠檢測擁塞,所以像使用包隊列和丟棄技術的路由器這樣的網絡基本設備往往就成為降低UDP過大通信量的有效工具。數據報擁塞控制協議(DCCP)設計成通過在諸如流媒體類型的高速率UDP流中增加主機擁塞控制來減小這個潛在的問題。 從以上UDP協議特點可知,UDP提供的是無連接的、不可靠的數據傳送方式,是一種盡力而為的數據交付服務。 1.服務端 1.2.3.4.5.加載協議棧; 創建套接字; 將套接字綁定到一個本地地址和端口bind; 等待接收數據recvfrom;關閉套接字; 2.客戶端 1.2.3.4.加載協議棧; 創建套接字socket; 向服務器發送數據sendto;關閉套接字; 3.相關代碼顯示:(客戶端) int main(int argc, char* argv[]){ system(“@color 0e”);WORD socketVersion = MAKEWORD(2, 2);WSADATA wsaData;if(WSAStartup(socketVersion, &wsaData)!= 0){ } sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.S_un.S_addr = inet_addr(m);int len = sizeof(sin);return 0;以上代碼為相關版本信息及熱啟動的一些操作;; 結構體端口號及相關地址信息以及轉化函數,將輸入的信息轉化為計算機可識別的二進制代碼,進行相關構造 char * sendData = new char[255];cout << “主人:”;cin >> sendData;while(strcmp(sendData, “#”)!= 0){ sendto(sclient, sendData, strlen(sendData), 0,(sockaddr *)&sin, len);char recvData[255];int ret = recvfrom(sclient, recvData, 255, 0,(sockaddr *)&sin, &len);if(ret > 0){ } recvData[ret] = 0x00;cout << “機器人:”;printf(recvData);4.相關代碼展示:(服務端) SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if(serSocket == INVALID_SOCKET){ } printf(“socket error!”);return 0;3 if(bind(serSocket,(sockaddr *)&serAddr, sizeof(serAddr))== SOCKET_ERROR){ } sockaddr_in remoteAddr;int nAddrLen = sizeof(remoteAddr);char * sendData = new char[255];char recvData[255];while(true){ int ret = recvfrom(serSocket, recvData, 255, 0,(sockaddr *)&remoteAddr, //printf(recvData);if(ret > 0){ } struct Ro { char recv[255];char send[255];recvData[ret] = 0x00;printf(“接受到一個連接:%s rn”, inet_ntoa(remoteAddr.sin_addr));cout << “主人:”;printf(recvData);printf(“bind error!”);closesocket(serSocket);return 0;以上為對套接字的綁定及判斷綁定是否成功,以及對于相關信息的初始化 &nAddrLen);}Ro;FILE *fp;fp = fopen(“G:機器人問答機制.txt”, “r”);while(!feof(fp)){ } fscanf(fp, “%s %s”, Ro.recv, Ro.send);if(strcmp(recvData, Ro.recv)== 0){ } else { } strcpy(sendData, Ro.send);break;strcpy(sendData, “對不起,我不知道”);4 fclose(fp);cout << endl;cout << “機器人:” << sendData << endl;sendto(serSocket, sendData, strlen(sendData), 0,(sockaddr *)&remoteAddr, nAddrLen); 四、設計成果以及心得 1.成果 2.心得 通過對課設的相關的操作,加強了對于相關知識的理解,對于知識的應用也得以加強,在課設過程中,聊天機器人制作較為有趣,對于TCP與UDP的通信方式有了進一步的理解和加強,對于socket編程的相關基礎也得以進一步的理解和學習。在今后的學習過程中希望可以將所學知識應用于實際,學以致用。而且對于課設中存在的問題和不足,以及通過老師的講解,對一些算法加以分析和改進,從而不斷完善課設內容,對內容的理解得以加深。 指導老師意見: 成績: 教師簽名: 2017年6月23日 本次課程設計我們小組順利的完成了鍋爐內膽水溫與循環水流量串級控制系統。我們通過討論對過程參數方面的知識有了更加深入的了解。我負責的是傳模擬量采集模塊。 和以前做過的課程設計一樣,經過兩周的課程設計和學習鞏固過程,我充分認識到理論聯系實際能力的重要性。另外還讓我知道設計過程中應自始至終持有嚴謹的科學態度,不能存有一絲的僥幸心理。首先設計中發現自己的理論知識掌握的不牢固。其次就是在設計過程中出現了很多問題,但是自己不會具體情況具體分析。本次工程實踐就是利用THJ-4型過程控制實驗裝置為硬件基礎做鍋爐內膽水溫控制系統實驗分析,采用MCGS組態軟件在上位機實現顯示和控制。通過本次工程實踐,來熟悉工業過程控制的控制流程以及其控制原理。 同學的幫助在為期一周的課設候中有至關重要的作用。因為一個人的能力是有限的。在同學的點滴幫助下不斷的自我完善,從而達到目的。 我覺得作為一名自動化專業的學生,傳感器的課程設計是很有意義的。更重要的是如何把自己平時所學的東西應用到實際中。雖然自己對于這門課懂的并不多,很多基礎的東西都還沒有很好的掌握,覺得很難,也沒有很有效的辦法通過自身去理解,但是靠著這一個禮拜的“學習”,在小組同學的幫助和講解下,漸漸對這門課逐漸產生了些許的興趣,自己開始主動學習并逐步從基礎慢慢開始弄懂它。我認為這個收獲應該說是相當大的。覺得課程設計反映的是一個從理論到實際應用的過程,但是更遠一點可以聯系到以后畢業之后從學校轉到踏上社會的一個過程。小組人員的配合﹑相處,以及自身的動腦和努力,都是以后工作中需要的。 電 子 工 程 學 院 課程設計報告格式及要求 一、封面:單獨1頁(見樣件) 二、摘要、關鍵詞:中文(250~300字)、英文;單獨1頁 中文摘要前加:“摘要:”,英文摘要前加“Abstract:”。 關鍵詞一般是3-6個,中英文關鍵詞一一對應,中文前冠以“關鍵詞:”,英文前冠以“Key words:”。 三、目錄:內容必要對應頁碼號。目錄包括設計總結報告的章節標題、附錄的內容所對應的頁碼。章節標題的排列如下格式進行: 1.........................................................................(第1級) 1.1………………………………………………(第2級) 1.1.1………………………………………(第3級) (1)……………………………………(第4級) ①……………………………………….(第5級) a……………………………………….(第6級) 四、正文:正文是設計總結報告的核心。設計總結報告正文的主要內容包含有:系統設計、單元電路設計、軟件設計、系統測試、結論等。 字體要求: 設計報告統一用A4紙打印,設計報告正文內容用小四號宋體。報告從正文開始統一編頁碼。左側裝訂。 一級標題:小二號黑體,居中占5行,標題與題目之間空一個漢字的空。二級標題:三號標宋,居中占三行,標題與題目之間空一個漢字的空。三級標題:四號黑體,頂格占兩行,標題與題目之間空一個漢字的空。四級標題:小四號粗楷體,頂格占一行,標題與題目之間空一個漢字的空。 標題中的英文字母均采用“Times New Roma”體,字號同標題字號。四級標題下的分級標題的標題字號為五宋。 所有文中圖和表要先說明再有圖表。圖要清晰、并與文中的敘述要一致,對圖中內容的說明盡量放在文中。圖序、圖題(必須有)為小五號宋體,居中排與圖的正下方。表序、表題為小五號黑體,居中排于表的正上方;圖和表中的文字為六號宋體;表格四周封閉,表跨越時另起表頭。 圖和表的注釋、注腳為六號宋體;數學公式居中排,公式中字母正斜體和大小寫前后要統一。 公式另行居中,公式末不加標點,有編號時可靠右側頂邊線;若公式前有文字,例 如、解等,文字頂格寫,公式任居中;公式中的外文字母之間、運算符號與各量符號之間應空半個數字的間距;若對公式有說明,可接排,如式中,A-XX(雙字線);B-XX;當說明較多時另起行頂格寫“式中A-XX”;回行與A對齊寫“B-XX”;公式中矩陣要居中且行列上下左右對齊。 物理量及技術術語全文要統一,要采用國際標準。 五、參考文獻:參考文獻部分應列出在設計過程中參考的主要書籍、刊物、雜志等。參考文獻的格式如下: (1)專著、論文集、學術論文、報告 [序號]主要責任者(.)文獻提名[專著([ M ].);論文集([C].);學術論文([ D].);報告([ R].)](.)出版地(:)出版者(,)出版年(.)起止頁碼(.) (2)期刊文章 [序號]主要責任者(.)文獻提名([ J ].)刊名(,)年(,)卷(期)(:)起止頁碼(.) (3)國際、國家標準 [序號]標準編號(,)標準名稱([ S ]) 六、附錄:附錄包括元器件明細表、儀器設備清單、電路圖圖紙、設計的程序清單、系統(作品)使用說明等。 設計要求:單獨1頁(由指導教師給出)1. 設計報告正文: 一、前言: 總體方案設計: 包括方案比較、方案論證、方案選擇(以方框圖的形式給出各方案)單元模塊設計: 各單元模塊功能介紹及電路設計; 電路參數的計算及元器件的選擇; 特殊器件的介紹; 各單元模塊的聯接。軟件設計: ① 說明軟件設計原理及設計所用工具; 畫出軟件設計結構圖、說明其功能; 畫出主要軟件設計流程框圖。系統調試: 包括系統硬件及軟件調試,說明調試方法與調試內容。系統功能、指標參數: ①說明系統能實現的功能;②系統指標參數測試,說明測試方法,要求有測試參數記錄表;③系統功能及指標參數分析(與設計要求對比進行)。設計總結: 包括:①對設計的小結;②設計收獲體會;③對設計的進一步完善提出意見或建議。第三篇:計算機網絡課設
第四篇:課設小結
第五篇:課設規范