STM32單片機(jī)仿真開(kāi)發(fā)實(shí)例 課件 第2篇 語(yǔ)言篇_第1頁(yè)
STM32單片機(jī)仿真開(kāi)發(fā)實(shí)例 課件 第2篇 語(yǔ)言篇_第2頁(yè)
STM32單片機(jī)仿真開(kāi)發(fā)實(shí)例 課件 第2篇 語(yǔ)言篇_第3頁(yè)
STM32單片機(jī)仿真開(kāi)發(fā)實(shí)例 課件 第2篇 語(yǔ)言篇_第4頁(yè)
STM32單片機(jī)仿真開(kāi)發(fā)實(shí)例 課件 第2篇 語(yǔ)言篇_第5頁(yè)
已閱讀5頁(yè),還剩77頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2.1C語(yǔ)言入門(mén)與順序結(jié)構(gòu)能力目標(biāo):

理解并掌握C語(yǔ)言基本數(shù)據(jù)類型,以及算術(shù)運(yùn)算符、逗號(hào)運(yùn)算符、賦值運(yùn)算符三類運(yùn)算符的使用,能使用Dev-C++編寫(xiě)簡(jiǎn)單的順序結(jié)構(gòu)程序。任務(wù)要求:根據(jù)隨機(jī)輸入的半徑r,計(jì)算得到相應(yīng)的圓周長(zhǎng)、圓面積、球面面積、球體積。2.1.1計(jì)算機(jī)語(yǔ)言與C語(yǔ)言(1)計(jì)算機(jī)語(yǔ)言概述●機(jī)器語(yǔ)言機(jī)器碼是唯一能被計(jì)算機(jī)CPU直接識(shí)別的代碼,它由二進(jìn)制編碼按一定規(guī)律構(gòu)成。但由于不同的CPU集成的指令集不盡相同,因此即便是完成相同的功能,機(jī)器碼的編寫(xiě)方式也不一樣?!駞R編語(yǔ)言本質(zhì)上匯編語(yǔ)言與機(jī)器語(yǔ)言沒(méi)有區(qū)別,只是將晦澀難懂的二進(jìn)制編碼用英文助記符來(lái)代替,方便人們編寫(xiě)代碼。匯編代碼與機(jī)器代碼逐條對(duì)應(yīng),工作量基本相同?!窀呒?jí)語(yǔ)言如果說(shuō)機(jī)器語(yǔ)言、匯編語(yǔ)言是完全站在計(jì)算機(jī)CPU的角度考慮問(wèn)題,那么高級(jí)語(yǔ)言就是偏向于站在人類的角度考慮問(wèn)題了。高級(jí)語(yǔ)言通過(guò)字母、符號(hào)、數(shù)字的組合,以一種簡(jiǎn)單、優(yōu)雅的方式書(shū)寫(xiě)代碼,程序更緊湊,結(jié)構(gòu)更清晰,可以有效的提高人們的工作效率。(2)C語(yǔ)言的產(chǎn)生與發(fā)展

●1972年,美國(guó)貝爾實(shí)驗(yàn)室的DennisM.Ritchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了一種全新的計(jì)算機(jī)語(yǔ)言,這就是C語(yǔ)言。

●1978年,DennisM.Ritchie與BrianW.Kernighan合著了著名的《TheCProgrammingLanguage》,但此書(shū)并沒(méi)有給出一個(gè)完整的C語(yǔ)言的標(biāo)準(zhǔn)。C語(yǔ)言之父——DennisM.Ritchie(1941年9月9日-2011年10月12日)

●1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(AmericanNationalStandardsInstitute,簡(jiǎn)稱ANSI)在《TheCProgrammingLanguage》的基礎(chǔ)上制定了第一個(gè)C語(yǔ)言標(biāo)準(zhǔn),并于1989年正式發(fā)布,稱為“C89”標(biāo)準(zhǔn),這也是后來(lái)人們熟知的“ANSIC”標(biāo)準(zhǔn)。

●后來(lái),國(guó)際標(biāo)準(zhǔn)化組織(InternationalOrganizationforStandardization,簡(jiǎn)稱為ISO)接納了“C89”標(biāo)準(zhǔn),并在此基礎(chǔ)上不斷修改,陸續(xù)推出了“C90”、“C99”、“C11”標(biāo)準(zhǔn),這些也被人們稱為“ISOC”標(biāo)準(zhǔn)。(3)C語(yǔ)言的標(biāo)識(shí)符與關(guān)鍵字標(biāo)識(shí)符是構(gòu)成C語(yǔ)言代碼的重要元素之一,標(biāo)識(shí)符由英文字母、數(shù)字和下劃線組成,而且開(kāi)頭只能是字母或者下劃線,比如:a、Ab、Ba1、_1a,都是合法的標(biāo)識(shí)符。值得注意的是,C語(yǔ)言區(qū)分大小寫(xiě)字母。ANSIC保留了32個(gè)標(biāo)識(shí)符作為C語(yǔ)言的關(guān)鍵字,不能重做其他定義。(表見(jiàn)下一頁(yè))關(guān)鍵字功能關(guān)鍵字功能auto聲明自動(dòng)變量short聲明短整型變量或函數(shù)int聲明整型變量或函數(shù)long聲明長(zhǎng)整型變量或函數(shù)float聲明浮點(diǎn)型變量或函數(shù)double聲明雙精度變量或函數(shù)char聲明字符型變量或函數(shù)struct聲明結(jié)構(gòu)體變量或函數(shù)union聲明共用數(shù)據(jù)類型enum聲明枚舉類型typedef用以給數(shù)據(jù)類型取別名const聲明只讀變量unsigned聲明無(wú)符號(hào)類型變量或函數(shù)signed聲明有符號(hào)類型變量或函數(shù)extern聲明變量是在其他文件正聲明register聲明寄存器變量static聲明靜態(tài)變量volatile說(shuō)明變量在程序執(zhí)行中可被隱含地改變關(guān)鍵字功能關(guān)鍵字功能void聲明函數(shù)無(wú)返回值或無(wú)參數(shù),聲明無(wú)類型指針if條件語(yǔ)句else條件語(yǔ)句否定分支(與if連用)switch用于開(kāi)關(guān)語(yǔ)句case開(kāi)關(guān)語(yǔ)句分支for一種循環(huán)語(yǔ)句do循環(huán)語(yǔ)句的循環(huán)體while循環(huán)語(yǔ)句的循環(huán)條件goto無(wú)條件跳轉(zhuǎn)語(yǔ)句continue結(jié)束當(dāng)前循環(huán),開(kāi)始下一輪循環(huán)break跳出當(dāng)前循環(huán)default開(kāi)關(guān)語(yǔ)句中的“其他”分支sizeof計(jì)算數(shù)據(jù)類型長(zhǎng)度return子程序返回語(yǔ)句(可以帶參數(shù),也可不帶參數(shù))循環(huán)條件2.1.2使用Dev-C++編寫(xiě)計(jì)算機(jī)C程序Dev-C++是一種免費(fèi)的C/C++集成開(kāi)發(fā)環(huán)境(IntegratedDevelopmentEnvironment,簡(jiǎn)稱IDE),適合用來(lái)學(xué)習(xí)C/C++語(yǔ)言。在計(jì)算機(jī)桌面上找到Dev-C++的圖標(biāo)并雙擊運(yùn)行。選擇菜單欄“文件”→“新建”→“項(xiàng)目”新建項(xiàng)目。進(jìn)入所示編程界面。

編寫(xiě)程序并按下“編譯運(yùn)行”按鈕,彈出運(yùn)行窗口。2.1.3C語(yǔ)言的基本數(shù)據(jù)類型

本次課僅學(xué)習(xí)其中的基本數(shù)據(jù)類型:整型、浮點(diǎn)型、字符類型(1)整型

其中,int是一般整型,short是短整型,long是長(zhǎng)整型,unsigned表示無(wú)符號(hào),即類似于數(shù)學(xué)的正整數(shù)。

實(shí)際上,int型數(shù)據(jù)長(zhǎng)度不定,與編譯器有很大關(guān)系,有可能長(zhǎng)度為2個(gè)字節(jié),也有可能長(zhǎng)度為4個(gè)字節(jié)。類別數(shù)據(jù)類型字節(jié)長(zhǎng)度取值范圍一般整型int2-3,2768~3,2767短整型short2-3,2768~3,2767長(zhǎng)整型long4-21,4748,3648~21,4748,3647無(wú)符號(hào)一般整型unsignedint20~6,5535無(wú)符號(hào)短整型unsignedshort20~6,5535無(wú)符號(hào)長(zhǎng)整型unsignedlong40~42,9496,7295

C語(yǔ)言是強(qiáng)類型語(yǔ)言,所有變量必須先定義再使用。變量的定義格式:類型說(shuō)明符變量名;變量的賦值格式:變量名=常量、變量或表達(dá)式;整型變量的定義與賦值:

這里的“=”不同于數(shù)學(xué)上等號(hào)的意義,屬于C語(yǔ)言的賦值運(yùn)算符,表示將“=”右邊的常量、變量或表達(dá)式的值賦給左邊的變量。inta,b,c;a=12,b=014,c=0xC;

可以一次只定義一個(gè)變量,也可以一次定義多個(gè)變量,多個(gè)變量之間用逗號(hào)運(yùn)算符“,”隔開(kāi)。變量也可以在定義的同時(shí)進(jìn)行初始化:以上,三個(gè)變量a、b、c實(shí)際上賦值的內(nèi)容是一樣的,只是分別采用十進(jìn)制、八進(jìn)制、十六進(jìn)制進(jìn)行了賦值,八進(jìn)制前綴“0”,十六進(jìn)制前綴“0x”或者“0X”,如果十六進(jìn)制數(shù)據(jù)中出現(xiàn)了字母,大小寫(xiě)皆可。inta=12,b=014,c=0xC;(2)浮點(diǎn)型

浮點(diǎn)型類似于數(shù)學(xué)的實(shí)數(shù)類型,有float、double兩種,float是一般浮點(diǎn)型,double是雙精度浮點(diǎn)型。浮點(diǎn)型變量的定義與賦值:以上,變量a、b分別采用了十進(jìn)制小數(shù)形式、指數(shù)形式進(jìn)行了賦值,其中指數(shù)形式“4.56e1”即為4.56×101的意思,這里“e”也可以寫(xiě)成“E”。類別數(shù)據(jù)類型字節(jié)長(zhǎng)度取值范圍有效位單精度浮點(diǎn)型float4±1.0e-37~±1.0e+387雙精度浮點(diǎn)型double8±1.0e-307~±1.0e+30816floata,b;a=12.3,b=4.56e1;(3)字符型字符型變量一般用來(lái)存放字符對(duì)應(yīng)的ASCII碼,比如:以上,變量a、b實(shí)際上賦值的內(nèi)容是一樣的,變量a賦予字符7,變量b賦予字符7對(duì)應(yīng)的ASCII碼。實(shí)際使用的時(shí)候,字符型變量往往也用來(lái)存放整數(shù)數(shù)據(jù)。類別數(shù)據(jù)類型字節(jié)長(zhǎng)度取值范圍字符型char1-128~127無(wú)符號(hào)字符型unsignedchar10~255chara,b;a=’7’,b=55;ASCII碼表(引自百度百科)2.1.4格式輸入/輸出函數(shù)格式輸入函數(shù)用于從輸入設(shè)備(比如鍵盤(pán))向計(jì)算機(jī)輸入數(shù)據(jù),格式輸出函數(shù)用于計(jì)算機(jī)向輸出設(shè)備(比如顯示器)輸出數(shù)據(jù)。格式輸入/輸出函數(shù)是由C標(biāo)準(zhǔn)庫(kù)函數(shù)提供,在使用它們的時(shí)候,必須使用預(yù)處理命令中的“包含”命令將標(biāo)準(zhǔn)輸入/輸出頭文件“stdio.h”包含到當(dāng)前項(xiàng)目中來(lái)。#include<stdio.h>main(){……}……值得注意的是,預(yù)處理命令不是C語(yǔ)言語(yǔ)句。以包含命令為例,簡(jiǎn)單的說(shuō)就是在編譯器編譯之前,將頭文件中的內(nèi)容替換該包含命令,再進(jìn)行編譯。

(1)格式輸出函數(shù)——printf()格式輸出函數(shù)的一般形式是:printf(“格式控制字符串”,輸出列表);

括號(hào)內(nèi)內(nèi)容由兩部分構(gòu)成:

①格式控制字符串作用是指定輸出格式,它又由三部分構(gòu)成:●顯示字符串,按原樣輸出?!窀袷交嘉环?,用于按照指定格式將數(shù)據(jù)輸出,由“%”和特定的字符組成,常用格式化占位符如表所示(后頁(yè)),輸出時(shí)自動(dòng)按指定格式顯示變量或表達(dá)式的值?!褶D(zhuǎn)義字符,在輸出時(shí)會(huì)被自動(dòng)轉(zhuǎn)換為對(duì)應(yīng)的操作命令,常用的轉(zhuǎn)移字符如表所示(后頁(yè))。

●格式占位符:占位符作用占位符作用%d以十進(jìn)制整數(shù)形式輸出%s輸出字符串%x或%X以十六進(jìn)制整數(shù)形式輸出%f以小數(shù)形式輸出實(shí)數(shù)%c輸出單個(gè)字符%e或%E以指數(shù)形式輸出實(shí)數(shù)轉(zhuǎn)義字符作用轉(zhuǎn)義字符作用\n換行符,將當(dāng)前位置移到下一行開(kāi)頭\\輸出一個(gè)反斜杠“\”\r回車符,將當(dāng)前位置移到本行開(kāi)頭\’輸出一個(gè)單引號(hào)“’”\t水平制表符\”輸出一個(gè)雙引號(hào)“””\v垂直制表符\0空字符,也是字符串結(jié)束標(biāo)志

●轉(zhuǎn)義字符:

②輸出列表輸出變量或表達(dá)式的列表,用逗號(hào)運(yùn)算符“,”隔開(kāi),輸出列表中變量或表達(dá)式的個(gè)數(shù)必須與格式控制字符串的個(gè)數(shù)一一對(duì)應(yīng)。例如:運(yùn)行結(jié)果:chara=’7’;printf("字符%c的ASCII碼是%d\n",a,a);(2)格式輸入函數(shù)——scanf()格式輸入函數(shù)的一般形式是:scanf(“格式控制字符串”,地址列表);變量的地址是由取地址運(yùn)算符“&”后跟變量名構(gòu)成,比如“&a”表示變量a在計(jì)算機(jī)內(nèi)存中的地址。

比如:運(yùn)行結(jié)果:inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("變量a,b,c的值分別是:%d,%d,%d\n",a,b,c);2.1.5C語(yǔ)言的運(yùn)算符(一)

(1)算術(shù)運(yùn)算符首先演示整數(shù)的運(yùn)算:運(yùn)算符功能應(yīng)用舉例+加法運(yùn)算符x+y-減法運(yùn)算符x-y*乘法運(yùn)算符x*y/除法運(yùn)算符x/y%取模(求余數(shù))運(yùn)算符x%y++自增運(yùn)算符x++或者++x--自減運(yùn)算符x--或者--xinta=13,b=3;printf("和:%d差:%d積:%d商:%d余數(shù):%d\n",a+b,a-b,a*b,a/b,a%b);格式結(jié)果:值得注意的是,13/3的結(jié)果是整除的結(jié)果4,只有整數(shù)才能做整除與取模運(yùn)算。C語(yǔ)言中,四則運(yùn)算同樣遵循“先乘除后加減”的原則,如果需要改變運(yùn)算次序,可以用小括號(hào)“()”來(lái)提升運(yùn)算優(yōu)先等級(jí),比如:floata=1,b=2,c=3,d=4,r;r=(a+b)/c+d;自增/減運(yùn)算符屬于單目運(yùn)算符,符號(hào)與變量的位置不同,程序運(yùn)行的效果也截然不同。接著演示自增運(yùn)算符的使用方法:運(yùn)行結(jié)果:總結(jié):若++/--運(yùn)算符在前是先自增/減再執(zhí)行語(yǔ)句,若++/--運(yùn)算符在后則是先執(zhí)行語(yǔ)句再自增/減。inta=1,b=1;printf("a的值是%d,b的值是%d\n",++a,b++);printf("a的值是%d,b的值是%d\n",a,b);

(2)賦值運(yùn)算符演示程序:運(yùn)行結(jié)果:運(yùn)算符功能舉例運(yùn)算符功能舉例=賦值a=b;&=位與賦值a&=b等價(jià)于a=a&b+=加賦值a+=b等價(jià)于a=a+b^=位異或賦值a^=b等價(jià)于a=a^b-=減賦值a-=b等價(jià)于a=a-b|=位或賦值a|=b等價(jià)于a=a|b*=乘賦值a*=b等價(jià)于a=a*b<<=左移賦值a<<=n等價(jià)于a=a<<n/=除賦值a/=b等價(jià)于a=a/b>>=右移賦值a>>=n等價(jià)于a=a>>n%=取模賦值a%=b等價(jià)于a=a%b

inta=11,b=13,c=15,d=17,e=19;a+=1;b-=2;c*=3;d/=4;e%=5;printf("a:%d,b:%d,c:%d,d:%d,e:%d\n",a,b,c,d,e);

(3)逗號(hào)運(yùn)算符逗號(hào)運(yùn)算構(gòu)成的表達(dá)式一般形式是:

表達(dá)式1,表達(dá)式2,表達(dá)式3,…,表達(dá)式n以上表達(dá)式的功能是,從左往右依次求出每個(gè)表達(dá)式的值,表達(dá)式n的值即為整個(gè)逗號(hào)表達(dá)式的值。演示程序:運(yùn)行結(jié)果:inta=2,b;b=(a++,a+3);printf("b:%d\n",b);2.1.6任務(wù)程序的編寫(xiě)

(現(xiàn)場(chǎng)操作演示...)

圓周長(zhǎng):圓面積:球面面積:球體積:Tobecontinued...2.2C語(yǔ)言分支結(jié)構(gòu)能力目標(biāo):

理解、區(qū)分并掌握C語(yǔ)言的邏輯運(yùn)算符與位運(yùn)算符,理解并掌握C語(yǔ)言的比較運(yùn)算符,能利用if語(yǔ)句與switch語(yǔ)句實(shí)現(xiàn)分支結(jié)構(gòu)程序。任務(wù)要求:

任務(wù)A:輸入年份,判斷該年份是否為閏年。

任務(wù)B:某商場(chǎng)舉辦優(yōu)惠購(gòu)物活動(dòng),購(gòu)物滿5000元打8折,購(gòu)物滿2000元,不滿5000元打8.5折,購(gòu)物滿1000元,不滿2000元打9折,其余不打折,輸入購(gòu)物金額數(shù),自動(dòng)計(jì)算折后價(jià)。2.2.1C語(yǔ)言的運(yùn)算符(二)(1)邏輯運(yùn)算符在邏輯關(guān)系中,用整型或字符型數(shù)字“0”代表“假”,用非零值代表“真”,但邏輯表達(dá)式的計(jì)算結(jié)果只有“0”或者“1”。演示程序://邏輯與運(yùn)算printf("And:%d,%d,%d,%d\n",0&&0,0&&1,2&&0,3&&4);//邏輯或運(yùn)算printf("Or:%d,%d,%d,%d\n",0||0,0||1,2||0,3||4);//邏輯非運(yùn)算printf("Not:%d,%d\n",!0,!1);運(yùn)算符功能表達(dá)式&&邏輯與a&&b||邏輯或a||b!邏輯非!a

運(yùn)行結(jié)果:(2)位運(yùn)算符運(yùn)算符功能舉例運(yùn)算符功能舉例&按位與a&b^按位異或a^b|按位或a|b<<左移a<<n~按位取反~a>>右移a>>n首先演示按位與、按位或、按位取反、按位異或運(yùn)算符的使用:運(yùn)行結(jié)果:下面是四個(gè)表達(dá)式的手工驗(yàn)算過(guò)程:01000010B=42H,11111011B=FBH,10000101B=85H,10111001B=B9Hunsignedchara=0x7A,b=0xC3;printf("%x,%x,%x,%x\n",a&b,a|b,(unsignedchar)(~a),a^b);接著演示左移運(yùn)算符:運(yùn)行結(jié)果:

下面是手工驗(yàn)算過(guò)程:55H=01010101Bunsignedchardat=0x55;dat=dat<<1;printf("左移一位:%x\n",dat);dat=dat<<3;printf("繼續(xù)左移三位:%x\n",dat);C語(yǔ)言的左移運(yùn)算表達(dá)式在移動(dòng)數(shù)據(jù)位的過(guò)程中左側(cè)移出位丟棄,右側(cè)補(bǔ)010101010B=AAH,01010000B=50H

右移運(yùn)算與左移運(yùn)算類似,不做演示。

(3)關(guān)系運(yùn)算符關(guān)系運(yùn)算符用來(lái)表達(dá)數(shù)值的大小,關(guān)系成立則運(yùn)算結(jié)果為“真”(1),否則為“假”(0)。演示程序:運(yùn)行結(jié)果:chara,b;a=(3>=2),b=(3==2);printf("%d,%d\n",a,b);運(yùn)算符符號(hào)實(shí)例讀作大于>小于等于<=大于等于>=等于==小于<不等于!=

(4)運(yùn)算優(yōu)先級(jí)

*C語(yǔ)言中的運(yùn)算優(yōu)先級(jí)一共分為16級(jí),數(shù)字越小,優(yōu)先級(jí)就越高。優(yōu)先級(jí)運(yùn)算符結(jié)合方向優(yōu)先級(jí)運(yùn)算符結(jié)合方向1后綴運(yùn)算符:[]().->++(后置)--(后置)從左往右2一元運(yùn)算符:++(前置)--(前置)!~+-*(指針)&從右往左3類型轉(zhuǎn)換運(yùn)算符:()從右往左4乘除法運(yùn)算符:*/%從左往右5加減法運(yùn)算符:+-從左往右6移位運(yùn)算符:<<>>從左往右7關(guān)系運(yùn)算符:>>=<<=從左往右8關(guān)系運(yùn)算符:==!=從左往右9位運(yùn)算符:&從左往右10位運(yùn)算符:^從左往右11位運(yùn)算符:|從左往右12邏輯運(yùn)算符:&&從左往右13邏輯運(yùn)算符:||從左往右14條件三目運(yùn)算符:?:從右往左15賦值運(yùn)算符:=+=-=*=/=%=&=^=|=<<=>>=從右往左16逗號(hào)運(yùn)算符:,從左往右2.2.2分支語(yǔ)句(1)if語(yǔ)句if分支語(yǔ)句的通用格式為:if語(yǔ)句的流程圖:

if(條件表達(dá)式1)分支語(yǔ)句1;elseif(條件表達(dá)式2)分支語(yǔ)句2;elseif(條件表達(dá)式3)分支語(yǔ)句3;……elseif(條件表達(dá)式n)分支語(yǔ)句n;else分支語(yǔ)句n+1;例如,隨機(jī)輸入數(shù)字0~9,輸出與其對(duì)應(yīng)的英文翻譯:charnum;printf("輸入數(shù)字0~9:");scanf("%d",&num);If(num==0)printf("Zero\n");elseif(num==1)printf("One\n");elseif(num==2)printf("Two\n");elseif(num==3)printf("Three\n");elseif(num==4)printf("Four\n");elseif(num==5)printf("Five\n");elseif(num==6)printf("Six\n");elseif(num==7)printf("Seven\n");elseif(num==8)printf("Eight\n");elseif(num==9)printf("Nine\n");elseprintf("輸入數(shù)字超限!\n");

運(yùn)行結(jié)果:C語(yǔ)言有一條“條件三目運(yùn)算符(?:)”可以替代“if...else...”結(jié)構(gòu)語(yǔ)句,比如判斷隨機(jī)輸入整數(shù)是否為正數(shù):可以用條件三目運(yùn)算符替代:intnum;printf("請(qǐng)輸入一個(gè)整數(shù):");scanf("%d",&num);if(num>0)printf("輸入的數(shù)字是正數(shù):-)\n");elseprintf("輸入的數(shù)字不是正數(shù):-(\n");intnum;printf("請(qǐng)輸入一個(gè)整數(shù):");scanf("%d",&num);num>0?printf("輸入的數(shù)字是正數(shù):-)\n"):printf("輸入的數(shù)字不是正數(shù):-(\n");(2)switch開(kāi)關(guān)語(yǔ)句switch開(kāi)關(guān)語(yǔ)句的通用格式為:switch語(yǔ)句的流程圖:switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1;break;case常量表達(dá)式2:語(yǔ)句2;break;……case常量表達(dá)式n:語(yǔ)句n;break;default:語(yǔ)句n+1;}例如,隨機(jī)輸入數(shù)字0~9,輸出與其對(duì)應(yīng)的英文翻譯:charnum;printf("輸入數(shù)字0~9:");scanf("%d",&num);switch(num){case0:printf("Zero\n");break;case1:printf("One\n");break;case2:printf("Two\n");break;case3:printf("Three\n");break;case4:printf("Four\n");break;case5:printf("Five\n");break;case6:printf("Six\n");break;case7:printf("Seven\n");break;case8:printf("Eight\n");break;case9:printf("Nine\n");break;default:printf("輸入數(shù)字超限!\n");}

運(yùn)行結(jié)果:任務(wù)要求:

任務(wù)A:輸入年份,判斷該年份是否為閏年。

任務(wù)B:某商場(chǎng)舉辦優(yōu)惠購(gòu)物活動(dòng),購(gòu)物滿5000元打8折,購(gòu)物滿2000元,不滿5000元打8.5折,購(gòu)物滿1000元,不滿2000元打9折,其余不打折,輸入購(gòu)物金額數(shù),自動(dòng)計(jì)算折后價(jià)。2.2.3任務(wù)程序的編寫(xiě)任務(wù)A:閏年是公歷中的概念,分為普通閏年和世紀(jì)閏年兩種,所謂普通閏年指的是年份數(shù)是4的倍數(shù)但不是100的倍數(shù)的年份,比如2020年,所謂世紀(jì)閏年指的是年份數(shù)是400的倍數(shù)的年份,比如2000年。(現(xiàn)場(chǎng)操作演示...)任務(wù)B:(現(xiàn)場(chǎng)操作演示...)Tobecontinued...2.3C語(yǔ)言循環(huán)結(jié)構(gòu)能力目標(biāo):

理解數(shù)組的概念,掌握一維數(shù)組的定義及使用方法,能利用while語(yǔ)句、do…while語(yǔ)句、for語(yǔ)句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)程序。任務(wù)要求:任務(wù)A:隨機(jī)輸入5個(gè)正整數(shù),找出其中的最大值、最小值。任務(wù)B:隨機(jī)輸入2個(gè)正整數(shù),求出它們的最大公約數(shù)、最小公倍數(shù)。2.3.1數(shù)組數(shù)組是同類型數(shù)據(jù)的有序集合(1)一維整型數(shù)組一維數(shù)組的定義:類型說(shuō)明符數(shù)組名[整型常量表達(dá)式];其中,類型說(shuō)明符就是組成數(shù)組的各個(gè)元素的數(shù)據(jù)類型,數(shù)組名類似于變量名,即用于表達(dá)數(shù)組的標(biāo)識(shí)符,方括號(hào)中的整型常量表達(dá)式表示數(shù)組元素的個(gè)數(shù),或者說(shuō)數(shù)組的長(zhǎng)度。一維數(shù)組定義之后即可使用其元素,元素格式為:數(shù)組名[下標(biāo)]。

比如:注意:如果數(shù)組長(zhǎng)度為N,則數(shù)組元素的下標(biāo)取值范圍為0~N-1inta[5];a[0]=12,a[1]=23,a[2]=34,a[3]=45,a[4]=56;數(shù)組在定義的時(shí)候也可以同時(shí)直接初始化初值,比如:一維數(shù)組在初始化的時(shí)候,甚至可以不必指定數(shù)組長(zhǎng)度,編譯器在編譯的時(shí)候,能根據(jù)初始化元素的個(gè)數(shù)自動(dòng)判斷數(shù)組長(zhǎng)度,比如:(2)一維浮點(diǎn)型數(shù)組浮點(diǎn)型數(shù)組的定義及使用與整型數(shù)組類似,可以先定義再賦值,比如:也可以定義的同時(shí)進(jìn)行初始化初值,比如:inta[5]={12,23,34,45,56};inta[]={12,23,34,45,56};floata[5];a[0]=1.2,a[1]=2.3,a[2]=3.4,a[3]=4.5,a[4]=5.6;floata[5]={1.2,2.3,3.4,4.5,5.6};(3)一維字符型數(shù)組字符型數(shù)組的定義和使用除了與整型數(shù)組、浮點(diǎn)型數(shù)組類似之外,也有自己的特點(diǎn)??梢韵榷x再賦值,比如:以上程序定義了一個(gè)長(zhǎng)度為6的字符型數(shù)組并賦值“Hello”字符串,注意最后一個(gè)字符“\0”是字符串結(jié)束標(biāo)志。也可以定義的同時(shí)進(jìn)行初始化初值,比如:

也可以在初始化的時(shí)候直接賦予字符串,比如:chara[6];a[0]=’H’,a[1]=’e’,a[2]=’l’,a[3]=’l’,a[4]=’o’,a[5]=’\0’;chara[6]={‘H’,’e’,’l’,’l’,’o’,’\0’};chara[6]=”Hello”;//尾部會(huì)自動(dòng)添加“\0”2.3.2循環(huán)語(yǔ)句循環(huán)結(jié)構(gòu)又稱重復(fù)結(jié)構(gòu),可以完成重復(fù)性、規(guī)律性的操作,比如求若干數(shù)的和、迭代求根等等。(1)while語(yǔ)句通用格式:循環(huán)語(yǔ)句若由多條語(yǔ)句構(gòu)成,必須以大括號(hào)“{”、“}”括起來(lái)構(gòu)成復(fù)合語(yǔ)句。while(條件表達(dá)式)循環(huán)語(yǔ)句;例如,計(jì)算1+2+3+…+100=?運(yùn)行結(jié)果:unsignedintsum=0,i=1;while(i<=100){ sum+=i; i++;}printf("1+2+3+...+100=%d\n",sum);(2)do…while語(yǔ)句

通用格式:同樣,1+2+3+…+100=?運(yùn)行結(jié)果:do循環(huán)語(yǔ)句while(條件表達(dá)式);unsignedintsum=0,i=1;do{ sum+=i; i++;}while(i<=100);printf("1+2+3+...+100=%d\n",sum);(3)for語(yǔ)句

通用格式:for語(yǔ)句的執(zhí)行過(guò)程:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)語(yǔ)句實(shí)際使用的時(shí)候,for語(yǔ)句的常用格式:同樣,1+2+3+…+100=?運(yùn)行結(jié)果:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增/減值)循環(huán)語(yǔ)句unsignedintsum=0,i;for(i=1;i<=100;i++)sum+=i;printf("1+2+3+...+100=%d\n",sum);

(4)continue語(yǔ)句與break語(yǔ)句

●continue語(yǔ)句的作用是提前結(jié)束當(dāng)次循環(huán)進(jìn)行下一次循環(huán)。舉例說(shuō)明:運(yùn)行結(jié)果:inti=1;while(i<10){ if(i==5) { i++; continue; } printf("第%d次循環(huán)\n",i); i++;}

●break語(yǔ)句的作用則是直接跳出循環(huán)

舉例說(shuō)明:運(yùn)行結(jié)果:inti=1;while(i<10){ if(i==5) { i++; break; } printf("第%d次循環(huán)\n",i); i++;}2.3.3任務(wù)程序的編寫(xiě)

任務(wù)A:

以找出五個(gè)隨機(jī)正整數(shù)中的最大值為例,先假定第一個(gè)數(shù)就是最大值,然后跟第二個(gè)數(shù)比較,若假定的最大值比第二個(gè)數(shù)小,則將第二個(gè)數(shù)替換為假定的最大值,否則什么也不做。以此類推,接著將假定的最大值與第三個(gè)、第四個(gè)、第五個(gè)數(shù)比較,最后假定最大值必然為五個(gè)數(shù)中真實(shí)的最大值。找出五個(gè)隨機(jī)正整數(shù)中的最小值也是采用類似方法。(現(xiàn)場(chǎng)操作演示...)任務(wù)B:兩個(gè)正整數(shù)的最大公約數(shù)未必存在,比如兩個(gè)質(zhì)數(shù)就不存在最大公約數(shù),但最小公倍數(shù)是必然存在的,比如兩個(gè)質(zhì)數(shù)的乘積就是兩者的最小公倍數(shù)。以求解兩個(gè)隨機(jī)正整數(shù)的最大公約數(shù)為例,先假定較小的數(shù)字就是兩者的最大公約數(shù),將兩數(shù)同時(shí)除以假定最大公約數(shù),若能整除則假定最大公約數(shù)就是兩者實(shí)際的最大公約數(shù),結(jié)束求解過(guò)程,若不能整除,則將假定最大公約數(shù)遞減一次,再將兩數(shù)同時(shí)除以假定最大公約數(shù),依次類推,直到求得最大公約數(shù)。對(duì)于兩個(gè)質(zhì)數(shù)而言,依照此流程最后求得的結(jié)果是1,但顯然1不能作為兩個(gè)正整數(shù)的最大公約數(shù)。求解兩個(gè)隨機(jī)正整數(shù)的最小公倍數(shù)也是采用類似的方法,但假定的最小公倍數(shù)是較大的數(shù)字。(現(xiàn)場(chǎng)操作演示...)Tobecontinued...2.4模塊化程序的設(shè)計(jì)能力目標(biāo):

簡(jiǎn)單了解結(jié)構(gòu)體、指針的相關(guān)基礎(chǔ)知識(shí),重點(diǎn)理解并掌握C語(yǔ)言函數(shù)的概念及使用方法。任務(wù)要求:隨機(jī)輸入五個(gè)正整數(shù),將五個(gè)數(shù)字按從小到大的順序進(jìn)行排列。2.4.1結(jié)構(gòu)體認(rèn)知

●數(shù)組是同種類型數(shù)據(jù)的組合。

●結(jié)構(gòu)體是不同類型數(shù)據(jù)的組合。在STM32的HAL/LL庫(kù)中大量使用了結(jié)構(gòu)體,用于對(duì)片內(nèi)外設(shè)的一組不同的參數(shù)進(jìn)行設(shè)定,但這部分主要是一些自動(dòng)生成代碼,讀者僅僅需要了解即可。結(jié)構(gòu)體的使用可分為如下三步:構(gòu)造結(jié)構(gòu)體類型→定義結(jié)構(gòu)體變量→結(jié)構(gòu)體變量賦值。①首先是構(gòu)造結(jié)構(gòu)體類型的一般形式:struct結(jié)構(gòu)體名{ 類型名1成員名1; 類型名2成員名2; …… 類型名3成員名3;};比如構(gòu)造一個(gè)名為“Student”的結(jié)構(gòu)體,用來(lái)記錄學(xué)生的基本信息:②然后是定義結(jié)構(gòu)體變量的一般形式:比如定義一個(gè)“Student”型的結(jié)構(gòu)體變量“student1”:structStudent{ unsignedintNo;//學(xué)號(hào) charName[10];//姓名 charSex;//性別};struct結(jié)構(gòu)名

變量名列表;structStudentstudent1;③最后是使用這個(gè)結(jié)構(gòu)體變量,包括賦值和讀取它的值??梢栽诙x的同時(shí)進(jìn)行初始化,比如:也可以在定義完成后進(jìn)行賦值,比如:structStudentstudent1={325,"張三",'M'};structStudentstudent1;student1.No=325;strcpy(student1.Name,"張三");//字符串賦值函數(shù),需要包含頭文件“string.h”student1.Sex='M';2.4.2指針認(rèn)知指針就是用于指向變量?jī)?nèi)存單元的變量,或者說(shuō)在指針變量中存儲(chǔ)了其指向變量的內(nèi)存地址。

指針在STM32單片機(jī)程序的開(kāi)發(fā)中,主要是調(diào)用HAL/LL庫(kù)API函數(shù)時(shí)進(jìn)行實(shí)參的地址引用,這里僅對(duì)①指針指向基本變量、②指針指向一維數(shù)組的使用方法進(jìn)行扼要介紹,在2.4.3中也會(huì)簡(jiǎn)單介紹③指針變量作為函數(shù)參數(shù)的使用方法。(1)指針指向基本變量首先是指針變量的定義,定義格式為:類型說(shuō)明符*變量名;這里,“*”表示這是一個(gè)指針變量,類型說(shuō)明符指的是指針?biāo)赶蜃兞康臄?shù)據(jù)類型。比如:int*p;表示定義了一個(gè)指針變量p,他可以指向一個(gè)整型變量,但具體指向哪一個(gè)整型變量,需要對(duì)指針變量賦值,指針變量的賦值格式:變量1=&變量2;

這里,“&”是取地址運(yùn)算符,表示獲取變量2的地址,注意到這是一個(gè)單目運(yùn)算符,與位運(yùn)算符中的位與運(yùn)算符“&”不是一個(gè)功能,比如:

也可以定義的同時(shí)直接做初始化:利用指針引用變量,比如:

在利用指針引用變量時(shí),“*p”表示指針變量“p”指向變量的值。運(yùn)行結(jié)果:inta,*p;p=&a;inta,*p=&a;inta=56,*p=&a;printf("%d",*p);(2)指針指向一維數(shù)組數(shù)組在計(jì)算機(jī)內(nèi)存中的地址是連續(xù)的,一般我們可以將指針指向數(shù)組的第一個(gè)元素的地址,在遍歷數(shù)組中每一個(gè)元素時(shí),只需要將指針不斷往后偏移即可。比如定義一個(gè)指針并指向整型一維數(shù)組的第一個(gè)元素:也可以:

即“&a[0]”和“a”都可以表示數(shù)組a的首地址。int*p,a[5]={12,23,34,45,56};p=&a[0];int*p,a[5]={12,23,34,45,56};p=a;利用指針遍歷一維數(shù)組,比如:

這里的“*p++”,“++”優(yōu)先級(jí)別比“*”高,等價(jià)于“*(p++)”。

運(yùn)行結(jié)果:int*p,a[5]={12,23,34,45,56},i;p=a;for(i=0;i<5;i++){ printf("%d",*p++);}2.4.3函數(shù)與模塊化程序設(shè)計(jì)C語(yǔ)言程序一般是由一個(gè)主函數(shù)(即main函數(shù))加若干其他函數(shù)構(gòu)成,主函數(shù)是整個(gè)程序執(zhí)行的入口,不可或缺。將一段具有特定功能的代碼封裝成函數(shù),既方便程序員在后續(xù)的開(kāi)發(fā)中直接調(diào)用,也提高了代碼的可維護(hù)性,可謂一舉兩得。由于每一個(gè)函數(shù)也是一個(gè)獨(dú)立的功能模塊,因此C語(yǔ)言也被稱為模塊化程序設(shè)計(jì)語(yǔ)言。函數(shù)的使用一般分三步進(jìn)行:定義、聲明、調(diào)用。定義的一般形式:函數(shù)類型函數(shù)名(形式參數(shù)表){函數(shù)體語(yǔ)句}第一行構(gòu)成函數(shù)的首部,大括號(hào)中的內(nèi)容構(gòu)成函數(shù)的函數(shù)體。其中,形式參數(shù)簡(jiǎn)稱“形參”,即函數(shù)的輸入值,函數(shù)的形參可以有多個(gè),也可以只有一個(gè),甚至于沒(méi)有形參;函數(shù)類型也叫函數(shù)的返回值類型,即函數(shù)的輸出值類型,函數(shù)的返回值最多只能有一個(gè),當(dāng)函數(shù)沒(méi)有返回值時(shí),函數(shù)類型必須寫(xiě)上“void”。聲明的一般形式:一般直接將函數(shù)的首部復(fù)制并粘貼到主函數(shù)之前,加上分號(hào)“

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論