基于一階倒立擺的matlab仿真實驗_第1頁
基于一階倒立擺的matlab仿真實驗_第2頁
基于一階倒立擺的matlab仿真實驗_第3頁
基于一階倒立擺的matlab仿真實驗_第4頁
基于一階倒立擺的matlab仿真實驗_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、成都理工大學(xué)工程技術(shù)學(xué)院基于一階倒立擺的matlab仿真實驗 實驗人員: 學(xué) 號: 實驗日期:20150618摘要本文主要研究的是一級倒立擺的控制問題,并對其參數(shù)進(jìn)行了優(yōu)化。倒立擺是典型的快速、多變量、非線性、強耦合、自然不穩(wěn)定系統(tǒng)。由于在實際中有很多這樣的系統(tǒng),因此對它的研究在理論上和方法論上均有深遠(yuǎn)的意義。本文首先簡單的介紹了一下倒立擺以及倒立擺的控制方法,并對其參數(shù)優(yōu)化算法做了分類介紹。然后,介紹了本文選用的優(yōu)化參數(shù)的狀態(tài)空間極點的配置和PID控制。接著建立了一級倒立擺的數(shù)學(xué)模型,并求出其狀態(tài)空間描述。本文著重講述的是利用狀態(tài)空間中極點配置實現(xiàn)方法。最后,用Simulink對系統(tǒng)進(jìn)行了仿

2、真,得出在實際控制中是兩種比較好的控制方法。Abstract This paper mainly studies the level of the inverted pendulum control problem, and its parameters are optimized.Inverted pendulum is a typical rapid, multi-variable, nonlinear, strong coupling, natural unstable system.In practice, however, because there are a lot of suc

3、h a system, so the study of it in theory and methodology have profound significance.This article first introduced the inverted pendulum, and simple of the inverted pendulum control method, made a classification and the parameter optimization algorithm is introduced.And then, introduced in this paper

4、, choose the optimization of the parameters of state space pole configuration and PID control.Then set up the level of the mathematical model of inverted pendulum, and find out the state space description.This paper focuses on the pole assignment method is the use of state space.Finally, the system

5、are simulated using Simulink, it is concluded that in the actual control is two good control method.This paper mainly studies the level of the inverted pendulum control problem, and its parameters are optimized.Inverted pendulum is a typical rapid, multi-variable, nonlinear, strong coupling, natural

6、 unstable system.In practice, however, because there are a lot of such a system, so the study of it in theory and methodology have profound significance.This article first introduced the inverted pendulum, and simple of the inverted pendulum control method, made a classification and the parameter op

7、timization algorithm is introduced.And then, introduced in this paper, choose the optimization of the parameters of state space pole configuration and PID control.Then set up the level of the mathematical model of inverted pendulum, and find out the state space description.This paper focuses on the

8、pole assignment method is the use of state space.Finally, the system are simulated using Simulink, it is concluded that in the actual control is two good control method.目 錄TOC o 1-3 f h u HYPERLINK l _Toc11959 1 引言 PAGEREF _Toc11959 4 HYPERLINK l _Toc20432 1.1 倒立擺介紹以及應(yīng)用 PAGEREF _Toc20432 4 HYPERLINK

9、 l _Toc4116 1.2 倒立擺的控制方法 PAGEREF _Toc4116 5 HYPERLINK l _Toc32077 2單級倒立擺數(shù)學(xué)模型的建立 PAGEREF _Toc32077 6 HYPERLINK l _Toc8580 2.1傳遞函數(shù) PAGEREF _Toc8580 8 HYPERLINK l _Toc20331 2.2狀態(tài)空間方程 PAGEREF _Toc20331 9 HYPERLINK l _Toc7046 3系統(tǒng)Matlab 仿真和開環(huán)響應(yīng) PAGEREF _Toc7046 10 HYPERLINK l _Toc11740 4 系統(tǒng)設(shè)計 PAGEREF _Toc

10、11740 14 HYPERLINK l _Toc20287 4.1極點配置與控制器的設(shè)計 PAGEREF _Toc20287 14 HYPERLINK l _Toc29618 4.2系統(tǒng)仿真: PAGEREF _Toc29618 15 HYPERLINK l _Toc9009 4.3仿真結(jié)果 PAGEREF _Toc9009 16 HYPERLINK l _Toc23073 4.4根據(jù)傳遞函數(shù)設(shè)計第二種控制方法PID串級控制 PAGEREF _Toc23073 17 HYPERLINK l _Toc20792 5結(jié) 論 PAGEREF _Toc20792 181 引言1.1 倒立擺介紹以及應(yīng)

11、用倒立擺控制系統(tǒng)是一個復(fù)雜的、不穩(wěn)定的、HYPERLINK /view/1423768.htm非線性系統(tǒng),是進(jìn)行控制理論教學(xué)及開展各種控制實驗的理想實驗平臺。對倒立擺系統(tǒng)的研究能有效的反映控制中的許多典型問題:如非線性問題、HYPERLINK /view/45520.htm魯棒性問題、鎮(zhèn)定問題、隨動問題以及跟蹤問題等。通過對倒立擺的控制,用來檢驗新的控制方法是否有較強的處理非線性和不穩(wěn)定性問題的能力。通過對它的研究不僅可以解決控制中的理論和技術(shù)實現(xiàn)問題,還能將控制理論涉及的主要基礎(chǔ)學(xué)科:力學(xué),數(shù)學(xué)和計算機科學(xué)進(jìn)行有機的綜合應(yīng)用。其控制方法和思路無論對理論或?qū)嶋H的過程控制都有很好的啟迪,是檢驗各

12、種控制理論和方法的有效的“試金石”。倒立擺的研究不僅有其深刻的理論意義,還有重要的工程背景。在多種控制理論與方法的研究與應(yīng)用中,特別是在工程實踐中,也存在一種可行性的實驗問題,使其理論與方法得到有效檢驗,倒立擺就能為此提供一個從理論通往實踐的橋梁,目前,對倒立擺的研究已經(jīng)引起國內(nèi)外學(xué)者的廣泛關(guān)注,是控制領(lǐng)域研究的熱門課題之一。倒立擺不僅僅是一種優(yōu)秀的教學(xué)實驗儀器,同時也是進(jìn)行控制理論研究的理想實驗平臺。由于倒立擺系統(tǒng)本身具有的高階次、不穩(wěn)定、多變量、非線性和強耦合特性,許多現(xiàn)代控制理論的研究人員一直將它視為典型的研究對象,不斷從中發(fā)掘出新的控制策略和控制方法,相關(guān)的科研成果在航天科技和機器人學(xué)

13、方面獲得了廣闊的應(yīng)用。二十世紀(jì)九十年代以來,更加復(fù)雜多種形式的倒立擺系統(tǒng)成為控制理論研究領(lǐng)域的熱點,每年在專業(yè)雜志上都有大量的優(yōu)秀論文出現(xiàn)。因此,倒立擺系統(tǒng)在控制理論研究中是一種較為理想的實驗裝置。 倒立擺主要應(yīng)用在以下幾個方面:(1)機器人的站立與行走類似于雙倒立擺系統(tǒng),盡管第一臺機器人在美國問世至今已有三十年的歷史,機器人的關(guān)鍵技術(shù)-機器人的行走控制至今仍未能很好解決。(2)在火箭等飛行器的飛行過程中,為了保持其正確的姿態(tài),要不斷進(jìn)行實時控制。(3)通信衛(wèi)星在預(yù)先計算好的軌道和確定的位置上運行的同時,要保持其穩(wěn)定的姿態(tài),使衛(wèi)星天線一直指向地球,使它的太陽能電池板一直指向太陽。(4)偵察衛(wèi)星

14、中攝像機的輕微抖動會對攝像的圖像質(zhì)量產(chǎn)生很大的影響,為了提高攝像的質(zhì)量,必須能自動地保持伺服云臺的穩(wěn)定,消除震動。(5)為防止單級火箭在拐彎時斷裂而誕生的柔性火箭(多級火箭),其飛行姿態(tài)的控制也可以用多級倒立擺系統(tǒng)進(jìn)行研究。由于倒立擺系統(tǒng)與雙足機器人、火箭飛行控制和各類伺服云臺穩(wěn)定有很大相似性,因此對倒立擺控制機理的研究具有重要的理論和實踐意義。1.2 倒立擺的控制方法倒立擺有多種控制方法。對倒立擺這樣的一個典型被控對象進(jìn)行研究,無論在理論上和方法上都具有重要意義。不僅由于其級數(shù)增加而產(chǎn)生的控制難度是對人類控制能力的有力挑戰(zhàn),更重要的是實現(xiàn)其控制穩(wěn)定的過程中不斷發(fā)現(xiàn)新的控制方法,探索新的控制理

15、論,并進(jìn)而將新的控制方法應(yīng)用到更廣泛的受控對象中。當(dāng)前,倒立擺的控制方法可分為以下幾類 :(1)線性理論控制方法將倒立擺系統(tǒng)的非線性模型進(jìn)行近似線性化處理,獲得系統(tǒng)在平衡點附近的線性化模型,然后再利用各種線性系統(tǒng)控制器設(shè)計方法,得到期望的控制器。PID控制、狀態(tài)反饋控制、能量控制、LQR控制算法是其典型代表。(2)預(yù)測控制和變結(jié)構(gòu)控制方法預(yù)測控制:是一種優(yōu)化控制方法,強調(diào)的是模型的功能而不是結(jié)構(gòu)。變結(jié)構(gòu)控制:是一種非連續(xù)控制,可將控制對象從任意位置控制到滑動曲面上仍然保持系統(tǒng)的穩(wěn)定性和魯棒性,但是系統(tǒng)存在顫抖。預(yù)測控制、變結(jié)構(gòu)控制和自適應(yīng)控制在理論上有較好的控制效果,但由于控制方法復(fù)雜,成本也

16、高,不易在快速變化的系統(tǒng)上實時實現(xiàn)2單級倒立擺數(shù)學(xué)模型的建立在忽略了空氣流動,各種摩擦之后,可將倒立擺系統(tǒng)抽象成小車和勻質(zhì)桿組成的系統(tǒng),如下圖1所示圖1 單級倒立擺模型示意圖那我們在本實驗中定義如下變量:M 小車質(zhì)量 (本實驗系統(tǒng) 1.096 Kg)m 擺桿質(zhì)量 (本實驗系統(tǒng) 0.109 Kg)b 小車摩擦系數(shù) (本實驗系統(tǒng) 0.1 N/m/sec)l 擺桿轉(zhuǎn)動軸心到桿質(zhì)心的長度(0.25 m)I 擺桿慣量 (0.0034 kg*m*m)F 加在小車上的力 x 小車位置 擺桿與垂直向上方向的夾角 擺桿與垂直向下方向的夾角(考慮到擺桿初始位置為豎直向下)下面我們對這個系統(tǒng)作一下受力分析。下圖2是

17、系統(tǒng)中小車和擺桿的受力分析圖。其中,和為小車與擺桿相互作用力的水平和垂直方向的分量。注意:在實際倒立擺系統(tǒng)中檢測和執(zhí)行裝置的正負(fù)方向已經(jīng)完全確定,因而矢量方向定義如圖,圖示方向為矢量正方向。圖2 倒立擺模型受力分析分析小車水平方向所受的合力,可以得到等式:應(yīng)用Newton方法來建立系統(tǒng)的動力學(xué)方程過程如下:分析小車水平方向所受的合力,可以得到以下方程:由擺桿水平方向的受力進(jìn)行分析可以得到下面等式: 即 把這個等式代入上式中,就得到系統(tǒng)的第一個運動方程: (1)為了推出系統(tǒng)的第二個運動方程,我們對擺桿垂直方向上的合力進(jìn)行分析,可以得到下面方程:力矩平衡方程如下:注意:此方程中力矩的方向,由于,故

18、等式前面有負(fù)號。合并這兩個方程,約去和,由得到第二個運動方程: (2)設(shè)(是擺桿與垂直向上方向之間的夾角),假設(shè)與1(單位是弧度)相比很小,即1,則可以進(jìn)行近似處理:,。用來代表被控對象的輸入力,線性化后兩個運動方程如下: (3)2.1傳遞函數(shù)對方程組(3)進(jìn)行拉普拉斯變換,得到 (4)注意:推導(dǎo)傳遞函數(shù)時假設(shè)初始條件為0。由于輸出為角度,求解方程組(4)的第一個方程,可以得到把上式代入方程組(4)的第二個方程,得到整理后得到傳遞函數(shù):其中 2.2狀態(tài)空間方程系統(tǒng)狀態(tài)空間方程為方程組(3)對解代數(shù)方程,得到解如下:整理后得到系統(tǒng)狀態(tài)空間方程:帶入?yún)?shù)可得系統(tǒng)的狀態(tài)空間方程:3系統(tǒng)Matlab

19、仿真和開環(huán)響應(yīng) 系統(tǒng)開環(huán)穩(wěn)定性分析 num=2.35655 0 0;den=1 0.088167 -27.9169 -2.30942;sys=tf(num,den)z,p,k=tf2zp(num,den);step(sys) %階躍響應(yīng)曲線:grid on 階躍響應(yīng)曲線rlocus(sys) %根軌跡根軌跡bode(sys) %波特圖A,B,C,D=tf2ss(num,den);Q=ctrb(A,B)rank(Q) %系統(tǒng)能控性分析Q = 1.0000 -0.0882 27.9247 0 1.0000 -0.0882 0 0 1.0000 ans = 3由得到的rank(Q)的值可知,原系統(tǒng)的

20、能控性矩陣為3,所以我們可知原系統(tǒng)是不能控的。 m=obsv(A,C) rank(m) m = 2.3565 0 0 -0.2078 65.7876 5.4423 65.8059 -0.3580 -0.4798 ans = 3由得到的rank(m)的值可知,原系統(tǒng)的能觀性矩陣為3,所以我們可知原系統(tǒng)是能觀的。eig(A) ans = 5.2810 -5.2864 -0.0827由eig(A)的值可知系統(tǒng)是不穩(wěn)定的。4 系統(tǒng)設(shè)計 4.1極點配置與控制器的設(shè)計采用極點配置法設(shè)計多輸出的倒立擺系統(tǒng)的控制方案??梢杂猛耆珷顟B(tài)反饋來解決,控制擺桿和小車的位置。設(shè)計狀態(tài)反饋陣時,要使系統(tǒng)的極點設(shè)計成兩個主

21、導(dǎo)極點和兩個非主導(dǎo)極點,用二階系統(tǒng)的分析方法確定參數(shù)。根據(jù)系統(tǒng)性能要求: 最大超調(diào)量10%,調(diào)節(jié)時間為 1s運用超調(diào)量計算公式: 得到得到兩個主導(dǎo)極點為:選取兩個非主導(dǎo)極點:根據(jù)MATLAB求取狀態(tài)增益矩陣,程序如下:a=0 1 0 0 0 -0.0883167 0.629317 0 0 0 0 1 0 -0.23655 27.8285 0;b=00.88316702.35655;p=-4+4.33j -6-4.33j -20 -20;k=acker(a,b,p)k = -740.4267 -247.3685 646.9576 113.88664.2系統(tǒng)仿真: 根據(jù)狀態(tài)空間表達(dá)式建立一階倒立擺

22、SimuLink仿真圖,如下:4.3仿真結(jié)果系統(tǒng)仿真圖(位置,速度,角度,角速度) 根軌跡4.4根據(jù)傳遞函數(shù)設(shè)計第二種控制方法PID串級控制PID控制器系統(tǒng)框圖:經(jīng)過幾次參數(shù)調(diào)試得出Kp=300,Ki=200,Kd=20滿足性能要求,其仿真圖形如下:5結(jié) 論 本次設(shè)計主要通過PID串級控制和狀態(tài)空間極點配置的方法對直線一級倒立擺進(jìn)行校正,通過此次課程,掌握MATLAB的基本使用方法。在課程設(shè)計過程中,培養(yǎng)了團(tuán)隊協(xié)作能力,刻苦鉆研以及編程能力,為今后的學(xué)習(xí)工作打下了良好的基礎(chǔ)。經(jīng)過這次課程,是我受益匪淺。學(xué)會了如何運用自己所學(xué)的知識結(jié)合實踐硬件最然需要不斷嘗試,但不是盲目的調(diào)試,而是需要有理論作

23、為指導(dǎo),指明調(diào)整的方向,這樣設(shè)計系統(tǒng)就會事半功倍。Matlab等工具軟件的使用也大大提高了設(shè)計系統(tǒng)的速度。這些都是試驗中珍貴的收獲。最后再一次感謝老師的耐心講解與精心的教誨,讓我渡過難關(guān),順利完成實驗。 附錄資料:不需要的可以自行刪除Pascal/C/C+語句對比(補充版)一、Hello world 先看三種語言的樣例:Pascalbegin writeln(Hello world);end.C#include int main() printf(Hello world!n); return 0;C+#include using namespace std;int main()cout Hel

24、lo world! endl; return 0; 從這三個程序可以看到一些最基本的東西。在Pascal中的begin和end,在C/C+里就是;Pascal主程序沒有返回值,而C/C+返回0(好像在C中可以為NULL)。在C/C+中,main函數(shù)以前的是頭文件,樣例中C為stdio.h,C+除了iostream還有第二行的using namespace std,這個是打開命名空間的,NOIP不會考這個,可以不管,只要知道就行了。 此外說明 注釋單行用/,段落的話Pascal為,C/C+為/* */。* 常用頭文件(模板)#include #include #include #include

25、#include #include using namespace std;int main() system(“pause”);return 0;二、數(shù)據(jù)類型及定義 這里只列出常用的類型。1、整型PascalC/C+范圍shortint-128 127integershort-32768 32767longintInt -2147483648 2147483647int64long long-9223372036854775808 9223372036854775807byte-0 255wordunsigned short0 65535longwordunsigned int0 42949

26、67295qwordunsigned long long0 18446744073709551615 * 當(dāng)對long long 變量賦值時,后要加LLLong long x=6327844632743269843LL* 如果位移 x2LL* Linux: printf(“%lldn”,x);* Windows: printf(“%I64dn”,x);2、實型PascalC/C+范圍realfloat2.9E-39 1.7E38single-1.5E-45 3.4E38doubledouble5.0E-324 1.7E3083、字符即字符串 字符在三種語言中都為char,C里沒有字符串,只有用

27、字符數(shù)組來代替字符串,Pascal和C+均為string。Pascal中字符串長度有限制,為255,C+則沒有。 字符串和字符在Pascal中均用單引號注明,在C/C+中字符用單引號,字符串用雙引號。4、布爾類型 Pascal 中為 boolean,C/C+ 為 bool。值均為True 或 False。C/C+中除0外bool都為真。5、定義 常量的定義均為 const,只是在C/C+中必須要注明常量的類型。在C/C+中還可以用宏來定義常量,此時不注明類型。PascalC/C+const a = 60; b = -a + 30; d = ;const int a = 60;const int

28、 b = - a + 30;const string d = “”;define MAXN 501 /這個是宏 * 宏定義其實就是直接在程序相應(yīng)的位置替換: #define randomize srand(unsigned time(NULL) #define wait for(int w=0;w a;cout a;cout a endl;特別說明C+中cin一個字符的話會自動跳過空格和回車,Pascal和C則會讀入空格和回車。在Pascal中writeln(a:n:m) 表示在n個字符寬的輸出域上輸出a保留m位小數(shù)。例如:pascal write(a:6) c/c+ printf(“%6d”

29、,a) Pascal write(a:6:2) c/c+ printf(“%6.2f”,a) C+ 如果用 cout ? (繁瑣!) 需要加頭文件 #inlude cout setprecision(2)a; /作用永久 cout setw(6)a; /作用臨時 以下三個進(jìn)制設(shè)定都是永久作用: cout deca; 相當(dāng) printf(“%d”,a); /十進(jìn)制 cout hexa; 相當(dāng) printf(“%X”,a); /十六進(jìn)制 cout octa; 相當(dāng) printf(“%o”,a); /八進(jìn)制例如:cout 12hex12oct1212endl;輸出:12c1414 C 的輸入輸出里面

30、的字符串中%表示變量,%后面的字目表示變量類型。下面是類型表:%hd1個short型整數(shù)%d1個int型整數(shù)%u1個unsigned int型整數(shù)%I64d1個long long型整數(shù)%c1個字符%s1個C字符串%f1個float型實數(shù)%lf1個double型實數(shù)%10.4f輸出1個總寬度為10,保留4位小數(shù)的實數(shù) 文件輸入輸出:Pascalassign(input, test.in);assign(output, test.out);reset(input);rewrite(output);read(a, b);writeln(a, b);close(input);close(output)

31、;CFILE *fin = fopen(“test.in”, “r”);FILE *fout = fopen(“test.out”, “w”);fscanf(fin, “%d%d”, &a, &b);fprintf(fout, “%d%d”, a, b);fclose(fin); fclose(fout);C+#include using namespace std;ifstream fin(“test.in”);ofstream fout(“test.out”);fin a b;fout a b endl;fin.close(); fout.close();因為C+的讀入較慢,個人建議C+的

32、話使用C的輸入方式。當(dāng)然也有人用C的讀入,C+的輸出的,這種方式我們稱之為城鄉(xiāng)結(jié)合。*中國計算機學(xué)會競賽須知發(fā)布的C讀寫程序:(C+ 也能用,cin,cout,scanf,printf 可混用)#include int main() int a,b; freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout); scanf(“%d%d”,&a,&b); printf(“%dn”,a+b); return 0; 或者:freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout);ios:

33、sync_with_stdio(false); 取消同步,cin,cout的速度就不慢了! cinab;couta+bendl; return 0;以下擴充c/c+混用是可行的:#include #include using namespace std;int main() int a,b,c,d; freopen(sum.in,r,stdin); freopen(sum.out,w,stdout); scanf(%d%d,&a,&b); cincd; printf(%dn,a+b); couta+b+c+dsn).Cwhile(scanf(%s%d,s,&n)!=EOF).四、賦值語句及運算

34、符號 一一對應(yīng)的關(guān)系PascalC/C+賦值運算賦值:=基本運算加+減-乘*除(實數(shù))/ (double)除法取整div(int) / (int)取余mod%比較等于=不等于!=大于大于等于=小于小于等于=邏輯且and&或or|非not!位運算左移(*2)shl且and&或or|非not異或xor其他增一inc(x)x+減一dec(x)x- 在C/C+中對某個變量自身進(jìn)行運算可以簡寫為 變量名 運算符號= 改變量 如 x += 8 就表示 x = x + 8, 即 inc(x, 8)。 在 C/C+里還存在一種三目運算 變量名 = 條件 ? 值A(chǔ) : 值B 如 x = x 0 ? x : -x

35、; /表示若x 0 則取 x, 否則取 x, 同 if x 0 then x := x else x := -x;五、條件語句1、if C/C+中if 語句的條件必須要用括號括起來,后面不使用then。PascalC/C+if a b then flag := true else flag := false;if (a b) flag = true;else flag = false;2、多種分支 C/C+中為switch,Pascal為case:PascalC/C+case x of 1: inc(x); 2: dec(x); else x := x * x;end;switch (x) c

36、ase 1: x +; break; case 2: x -; break; default: x *= x; 切記C/C+中一定要寫break,后果你可以去掉break,運行看看就知道了。六、循環(huán)語句1、forPascalC/C+for 變量名 := 初始值 to(downto) 終止值 dofor (變量名=初始值;條件;改變方式)for i := 5 to 10 do dec(a);/終止值大于初始值用 tofor i := 5 downto 1 do dec(a);/終止值小于于初始值用 downtofor (i = 5; i = 1; i-) a-;/*只要i 滿足條件就會一直循環(huán)。

37、C/C+中i是實數(shù)、指針都可以*/C/C+中for的特殊用法:/變量為實數(shù)for (double i = 1; i 符號為間接引用,后面會提到。for (type1 *p = head - next; p; p = p - next) printf(“%d”, p - k);2、whilePascalC/C+while 條件 dowhile (條件)while i 0 do dec(i);while (i != 0) i-;/也可寫作 while (i) i-;/在C/C+中非0即為真。3、repeat-until & do-whilePascalC/C+repeat 語句 until 結(jié)束條

38、件;do while (運行條件)repeat int(i) until i 100;do i+; while (i = 100);七、數(shù)組 Pascal中數(shù)組的下標(biāo)可以隨意定義,而C/C+下標(biāo)始終為從0開始到(數(shù)組大小1)。PascalC/C+定義a : array 1.100 of integer;b :array 1.10,1.10 of int64;int a100;int b1010;含義a 為大小為100的integer數(shù)組,合法下標(biāo)為1到100b 為大小為10*10的int64數(shù)組,合法下標(biāo)為1,1到10,10a 為大小為100的int數(shù)組,合法下標(biāo)為0到99b 為大小為10*1

39、0的int數(shù)組,合法下標(biāo)為0,0到9,9;使用inc(a21);b2,2:=b1,1+b1,2+b2,1;a21+;b11=b01+b00+b10; 數(shù)組清零PascalC/C+Fillchar(a, sizeof(a), 0);memset(a, 0, sizeof(a);/頭文件包含 string.h*如果要填最大: memset(a,127,sizeof(a) (但達(dá)不到 INT_MAX) 如果要填最?。?memset(a,128,sizeof(a) (但達(dá)不到 INT_MIN) 如果填0: memset(a,0,sizeof(a) 如果填-1: memset(a,-1,sizeof(a

40、)八、字符串 C風(fēng)格的字符串就是字符數(shù)組。 C+和Pascal的字符串使用基本相同,只是C+中字符串下標(biāo)以0開始,Pascal以1開始。字符串處理很多這里不一一列舉,只寫最常用的幾個。PascalC (包含)定義用:char sC+(包含)定義用:string s輸入輸出Readln(s);Writeln(s);Scanf(“%s”,s);Printf(“%sn”,s);注:不能輸入輸出c+的字符串Cins;Couts = s 的區(qū)別: getline(cin,s)cins一次性整行讀入,直至行末尾。只讀入一個“單詞”,遇空格和行末停止。例如輸入;How are you?s=” How are

41、 you?”讀入整串含空格例如輸入;How are you?s=”How”如果三個都讀:cins1s2s3*C+ 數(shù)字與數(shù)值之間的轉(zhuǎn)換:#include #include #include /必須加入using namespace std;int main() string text = 152; int number; stringstream ss;ss number; /string - int coutnumber+100endl; ss string string str = ss.str(); return 0;九、過程和函數(shù)1、過程 在C/C+中沒有過程,但可以把返回值為“空”的

42、函數(shù)理解為過程。PascalC/C+無參過程procedure 過程名;說明部分begin 語句部分 end;/說明部分、begin、end語句部分統(tǒng)稱為過程體void 函數(shù)名(); 主體部分; return ;帶參過程procedure 過程名(形參表)過程體void 函數(shù)名(形參表)過程體 值傳和址傳:當(dāng)一個參數(shù)是值傳時,形參在子過程中相當(dāng)于一個局部變量,對它的改變不影響實在的參數(shù)值。址傳則會影響。下例中a為值傳,b為址傳。初始a = 5,b = 5,運行后a = 5,b = 10;PascalC/C+var a, b:integer;procedure doit(a:integer; v

43、ar b:integer);begin b := a + b; a := a + b;end;begina := 5;b := 5;doit(a, b);writeln(a, , b);end.void doit(int a, int &b) HYPERLINK a a認(rèn)為值參,b認(rèn)為變量傳參 b += a; a += b; return ;int main()int a = 5, b = 5;doit(a, b);cout a b;return 0;* 用若干地址傳參可以給調(diào)用者傳回若干值 Void tryit(int &x,int &y,int &z) 調(diào)用時: tryit(a,b,c)

44、,可以傳回 a,b,c的值。* 用數(shù)組名(也是地址)傳參可以傳回整組的數(shù)據(jù) Void tryit( int a) 調(diào)用時: tryit(x),可以傳回整個數(shù)組。例如:void tryit(int a) for(int i=0;i=10;i+) ai=i*2; return; int main() int x10; tryit(x); for(int i=0;i=10;i+) coutxiendl; system(pause); return 0;*用指向函數(shù)的指針作為參數(shù),可以執(zhí)行指定的函數(shù)。(略)STL 的兩個應(yīng)用:* C+ 快排函數(shù)#include Bool com(int a,int b

45、) Return ab;Int main() Int a10=5,7,3,2,6,8,4,3,5,7;Sort(a,a+10,com); /如果升序可以省略com.For(int i=0;i10;i+) Coutai” “;* 優(yōu)先隊列(以堆排為例)#include #include using namespace std;priority_queue Q;int main() int n,a; cinn; while (n-) cina; Q.push(a); while (!Q.empty() cout Q.top() ; Q.pop(); return 0;* 隊列、棧、優(yōu)先隊列 三種數(shù)據(jù)結(jié)構(gòu)匯總:#include #include priority_queue Q;queue Q1;stack S;int main()Q.push(5); x = Q.top(); Q.pop();Q.empty();Q.size()Q1.push(5); Q1.size(); Q1.front(); Q1.empty

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論