版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
教學(xué)內(nèi)容: 第1章:C語(yǔ)言語(yǔ)法基礎(chǔ)第2章:C程序設(shè)計(jì)基礎(chǔ)第3章:利用數(shù)組處理同類(lèi)型的批量數(shù)據(jù)第4章:利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)第5章:靈活使用指針第6章:結(jié)構(gòu)體、共用體、枚舉類(lèi)型及其應(yīng)用第7章:常用的三種線性數(shù)據(jù)結(jié)構(gòu)第8章:利用文件進(jìn)行數(shù)據(jù)管理第9章:嵌入式技術(shù)基礎(chǔ)實(shí)踐方法C語(yǔ)言程序設(shè)計(jì)第2章C程序設(shè)計(jì)基礎(chǔ)【學(xué)習(xí)內(nèi)容】2.1預(yù)備知識(shí)
2.2順序結(jié)構(gòu)程序設(shè)計(jì)
2.3選擇結(jié)構(gòu)程序設(shè)計(jì)
2.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
2.5預(yù)處理命令2.6三種結(jié)構(gòu)程序設(shè)計(jì)的綜合應(yīng)用【學(xué)習(xí)目標(biāo)】1.熟悉算法及其表示方法;
2.熟悉C語(yǔ)句及其分類(lèi);
3.掌握數(shù)據(jù)輸入輸出函數(shù)的應(yīng)用方法;
4.掌握順序、選擇、循環(huán)3種結(jié)構(gòu)程序設(shè)計(jì)方法;
5.掌握預(yù)處理命令的應(yīng)用方法。
本章首先介紹程序設(shè)計(jì)的預(yù)備知識(shí),然后詳細(xì)介紹順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這3種基本結(jié)構(gòu)的程序設(shè)計(jì)方法,最后給出預(yù)處理命令的應(yīng)用方法。
計(jì)算機(jī)程序
=數(shù)據(jù)結(jié)構(gòu)
+算法
+程序代碼2.1預(yù)備知識(shí)2.1.1算法及流程圖表示1、算法的概念
為解決問(wèn)題而采用的方法和步驟稱(chēng)為算法。對(duì)于同一個(gè)問(wèn)題可以有不同的算法,應(yīng)盡量選擇占用內(nèi)存小、執(zhí)行速度快的算法。2、算法的5個(gè)特征
(1)有窮性:一個(gè)算法應(yīng)包含有限的操作步驟,且每個(gè)步驟都能在有限時(shí)間內(nèi)完成。
(2)確定性:算法中的每一個(gè)步驟都應(yīng)該是確定的,而不應(yīng)模糊和具有二義性。
(3)可行性:算法的每一個(gè)步驟都是切實(shí)可行的。
(4)有輸入:一個(gè)算法可有零個(gè)或多個(gè)輸入。
(5)有輸出:一個(gè)算法必須有一個(gè)或多個(gè)輸出。3、算法的流程圖表示
常用的算法表示方法:自然語(yǔ)言描述法、流程圖法、計(jì)算機(jī)語(yǔ)言描述法。在此,只介紹最常用的流程圖法。2.1.1算法及流程圖表示2.1預(yù)備知識(shí)2.1.2程序的三種基本結(jié)構(gòu)1、順序結(jié)構(gòu)
按照程序語(yǔ)句書(shū)寫(xiě)的順序一步一步依次執(zhí)行。
2.1預(yù)備知識(shí)
根據(jù)條件判斷的結(jié)果,從多種路徑中選擇其中的一種路徑執(zhí)行。
2、選擇結(jié)構(gòu)
將一組操作重復(fù)執(zhí)行多次。有“當(dāng)型”和“直到型”兩種循環(huán)結(jié)構(gòu)。
2.1.2程序的三種基本結(jié)構(gòu)3、循環(huán)結(jié)構(gòu)2.1預(yù)備知識(shí)當(dāng)型循環(huán)結(jié)構(gòu)
先判斷后執(zhí)行直到型循環(huán)結(jié)構(gòu)
先執(zhí)行后判斷1、聲明語(yǔ)句:對(duì)變量、函數(shù)、類(lèi)型(如結(jié)構(gòu)體等類(lèi)型)等進(jìn)行聲明例如:
變量聲明語(yǔ)句:inta,b,s;
變量聲明語(yǔ)句:inti=3,j=3,k=3,x=3;函數(shù)聲明語(yǔ)句:intadd(intx,inty);在C語(yǔ)言中,分號(hào)是語(yǔ)句的結(jié)束標(biāo)志。C語(yǔ)句分為6類(lèi)。2.1.3C語(yǔ)句分類(lèi)2、表達(dá)式語(yǔ)句例如:
a=3(賦值表達(dá)式)
a=3;
(賦值語(yǔ)句)i++(自增1表達(dá)式)i++;
(自增1語(yǔ)句)2.1預(yù)備知識(shí)3、函數(shù)調(diào)用語(yǔ)句:函數(shù)調(diào)用表達(dá)式加分號(hào)例如:
printf("ThisisamyfirstProgram.\n");
add(a,b);
2.1.3C語(yǔ)句分類(lèi)4、控制語(yǔ)句:控制程序的流程(1)條件語(yǔ)句:if語(yǔ)句、switch語(yǔ)句(3)轉(zhuǎn)向語(yǔ)句:break語(yǔ)句、continue語(yǔ)句、return語(yǔ)句、goto語(yǔ)句(2)循環(huán)語(yǔ)句:while語(yǔ)句、do…while語(yǔ)句、for語(yǔ)句2.1預(yù)備知識(shí)
把多條語(yǔ)句用花括號(hào)括起來(lái)組成的一個(gè)語(yǔ)句,稱(chēng)為復(fù)合語(yǔ)句。例如:5、復(fù)合語(yǔ)句2.1.3C語(yǔ)句分類(lèi)2.1預(yù)備知識(shí)
例如:下面的for循環(huán)體是空語(yǔ)句,在嵌入式軟件設(shè)計(jì)中常用作軟件延時(shí)。
for(i=10000;i>0;i--) {
;
//空語(yǔ)句
}6、空語(yǔ)句:只有一個(gè)分號(hào),什么也不執(zhí)行2.2順序結(jié)構(gòu)程序設(shè)計(jì)1、數(shù)據(jù)輸入輸出的在C語(yǔ)言中的實(shí)現(xiàn)2.2.1數(shù)據(jù)輸入輸出函數(shù)
(1)從計(jì)算機(jī)內(nèi)存向輸出設(shè)備傳送數(shù)據(jù)稱(chēng)為輸出,從輸入設(shè)備向計(jì)算機(jī)內(nèi)存?zhèn)魉蛿?shù)據(jù)稱(chēng)為輸入。
(2)C語(yǔ)言本身不提供輸入輸出語(yǔ)句,而在C標(biāo)準(zhǔn)函數(shù)庫(kù)中提供了一些輸入輸出函數(shù),例如printf函數(shù)和scanf函數(shù),分別用于數(shù)據(jù)的輸出和輸入。
(3)使用標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)時(shí),要用預(yù)處理命令#include將其對(duì)應(yīng)的頭文件“stdio.h”包含到源文件中: #include<stdio.h>或
#include"stdio.h"2.2順序結(jié)構(gòu)程序設(shè)計(jì)2、字符輸出函數(shù)——putchar()
一般形式:putchar(c)
●向顯示器輸出字符變量c對(duì)應(yīng)的字符。2.2.1數(shù)據(jù)輸入輸出函數(shù)【例2.1】輸出一個(gè)字符
。#include
<stdio.h>
//包含輸入輸出庫(kù)函數(shù)頭文件intmain(void){chara,b,c,d;
a='N';b='U';c='A';d='A';
putchar(a);putchar(b);putchar(c);putchar(d);putchar('\n');
//在屏幕上顯示字符}2.2順序結(jié)構(gòu)程序設(shè)計(jì)3、字符輸入函數(shù)——getchar()
通常將鍵盤(pán)上輸入的字符賦給一個(gè)字符變量,構(gòu)成賦值語(yǔ)句。如:
charc; c=getchar();2.2.1數(shù)據(jù)輸入輸出函數(shù)
注意:getchar函數(shù)只能接收一個(gè)字符,輸入數(shù)字也按字符處理。輸入多個(gè)字符時(shí),計(jì)算機(jī)只接收第一個(gè)字符?!纠?.2】從鍵盤(pán)輸入一個(gè)字符,并在顯示屏顯示
。#include<stdio.h>
//包含輸入輸出庫(kù)函數(shù)頭文件intmain(void){
charc;printf("請(qǐng)輸入一個(gè)字符:");//原樣輸出一串字符,增加人機(jī)互動(dòng)性
c=getchar();
//從鍵盤(pán)輸入一個(gè)字符
putchar(c);
//在屏幕上顯示輸入的字符putchar('\n');
//換行
}putchar(getchar());//在屏幕上顯示輸入的字符
2.2順序結(jié)構(gòu)程序設(shè)計(jì)4、格式輸出函數(shù)——printf()●向顯示器輸出若干個(gè)任意類(lèi)型的數(shù)據(jù)。2.2.1數(shù)據(jù)輸入輸出函數(shù)一般形式:printf(格式控制字符串,輸出列表)例如: printf("%d,%c\n",i,c)
②原樣輸出的字符,在顯示中起提示作用。(2)輸出列表:是需要輸出的一些數(shù)據(jù),可以是常量、變量或表達(dá)式。
多個(gè)數(shù)據(jù)之間要用逗號(hào)隔開(kāi)。
括號(hào)內(nèi)包含兩部分:(1)格式控制字符串:由雙撇號(hào)括起來(lái)的一個(gè)字符串,它包含兩種信息。
①由%開(kāi)頭的格式符,用于指定數(shù)據(jù)的輸出格式。例如,%d:以十進(jìn)制形式輸出帶符號(hào)整數(shù);%c:輸出單個(gè)字符;%x:以十六進(jìn)制形式輸出無(wú)符號(hào)整數(shù);%s:輸出字符串;%f:以小數(shù)形式輸出實(shí)數(shù);%e:以指數(shù)形式輸出實(shí)數(shù)。
使用printf函數(shù)時(shí),要求格式控制字符串中必須含有與輸出項(xiàng)一一對(duì)應(yīng)的格式符,并且類(lèi)型要匹配。printf函數(shù)也可以沒(méi)有輸出項(xiàng)。2.2順序結(jié)構(gòu)程序設(shè)計(jì)4、格式輸出函數(shù)——printf()2.2.1數(shù)據(jù)輸入輸出函數(shù)#include<stdio.h>//包含輸入輸出庫(kù)函數(shù)頭文件intmain(void){inta=5,b=-1;floatc=1.2;
chard='a';printf("a=%d,b=%d,c=%f,d='%c'\n",a,b,c,d);//依次按指定的格式將多個(gè)數(shù)據(jù)輸出
printf("字母a的ASCII碼:%d\n",d);//以十進(jìn)制格式輸出字母a的ASCII碼printf("字母a的ASCII碼:%x\n",d);//以16進(jìn)制格式輸出字母a的ASCII碼printf("輸出字符串:%s\n","CHINA");//輸出字符串"CHINA"printf("今年的增長(zhǎng)率=");//原樣輸出一串字符printf("50%%\n");//輸出50%}【例2.3】printf函數(shù)使用:格式化輸出數(shù)據(jù)。練習(xí):【例2.4】printf函數(shù)的使用:指定輸出寬度、小數(shù)位數(shù)和左端對(duì)齊。2.2順序結(jié)構(gòu)程序設(shè)計(jì)5、格式輸入函數(shù)——scanf()2.2.1數(shù)據(jù)輸入輸出函數(shù)
一般形式:scanf(格式控制字符串,地址列表)
作用:按用戶(hù)指定的格式從鍵盤(pán)把數(shù)據(jù)輸入到指定的變量地址中。
地址列表:由若干個(gè)地址組成的列表。變量的地址:地址運(yùn)算符“&”后跟變量名。多個(gè)地址之間要用逗號(hào)隔開(kāi)。
格式控制字符串的作用與printf函數(shù)類(lèi)似。例如,%d:以十進(jìn)制形式輸入帶符號(hào)整數(shù);%c:輸入單個(gè)字符;%x:以十六進(jìn)制形式輸入無(wú)符號(hào)整數(shù);%s:輸入字符串;%f(%lf):以實(shí)數(shù)形式輸入單精度(雙精度)實(shí)數(shù)。2.2順序結(jié)構(gòu)程序設(shè)計(jì)5、格式輸入函數(shù)——scanf()2.2.1數(shù)據(jù)輸入輸出函數(shù)【例2.5】用scanf函數(shù)輸入多個(gè)數(shù)值數(shù)據(jù)。#include<stdio.h>//包含輸入輸出庫(kù)函數(shù)頭文件intmain(void){inti,j;
floatk;
doublex;
printf("請(qǐng)輸入兩個(gè)整數(shù)和兩個(gè)實(shí)數(shù):\n");//提示輸入4個(gè)數(shù)據(jù)
scanf("%d%d%f%lf",&i,&j,&k,&x);//輸入4個(gè)數(shù)據(jù)分別賦給4個(gè)變量
printf("%d,%d,%f,%f\n",i,j,k,x);//將4個(gè)變量的數(shù)值輸出}
說(shuō)明:用scanf函數(shù)一次輸入多個(gè)數(shù)值或多個(gè)字符串時(shí),在兩個(gè)數(shù)據(jù)之間可用空格或換行符或Tab符作分隔。①用空格作分隔
②用換行符作分隔③用Tab符作分隔2.2順序結(jié)構(gòu)程序設(shè)計(jì)5、格式輸入函數(shù)——scanf()2.2.1數(shù)據(jù)輸入輸出函數(shù)
當(dāng)輸入數(shù)據(jù)的類(lèi)型與scanf函數(shù)中的格式符指定的類(lèi)型不一致時(shí),系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束?!纠?.6】scanf函數(shù)輸入多個(gè)不同類(lèi)型的數(shù)據(jù)
。#include<stdio.h>intmain(void){ inti;charj; floatk;printf("請(qǐng)輸入1個(gè)整數(shù)、1個(gè)字符和1個(gè)實(shí)數(shù):\n");
//提示輸入3個(gè)數(shù)據(jù)
scanf("%d%c%f",&i,&j,&k);//輸入3個(gè)數(shù)據(jù)分別賦給變量i、j、k
printf("%d,%c,%f\n",i,j,k);//將變量i、j、k的數(shù)據(jù)輸出
}2.2順序結(jié)構(gòu)程序設(shè)計(jì)5、格式輸入函數(shù)——scanf()2.2.1數(shù)據(jù)輸入輸出函數(shù)#include<stdio.h>intmain(void){chari,j,k;
printf("請(qǐng)輸入3個(gè)字符:\n");//提示輸入3個(gè)數(shù)據(jù)
scanf("%c%c%c",&i,&j,&k);//輸入3個(gè)數(shù)據(jù)分別賦給變量i、j、k
printf("%c,%c,%c\n",i,j,k);//將變量i、j、k的數(shù)據(jù)輸出}用scanf函數(shù)輸入字符時(shí),系統(tǒng)將輸入的空格、換行符作為有效字符?!纠?.7】scanf函數(shù)輸入多個(gè)字符。2.2順序結(jié)構(gòu)程序設(shè)計(jì)2.2.2順序結(jié)構(gòu)程序設(shè)計(jì)應(yīng)用【例2.9】將輸入的兩個(gè)整數(shù)交換,然后再輸出這兩個(gè)整數(shù)。ABABABAB
兩名同學(xué)互換位置,如何實(shí)現(xiàn)?
需要借助一個(gè)臨時(shí)變量實(shí)現(xiàn)兩數(shù)的交換。//==================================//程序功能:輸入兩個(gè)整數(shù),交換后再輸出。//設(shè)計(jì)日期:2020-03-25//==================================#include<stdio.h>//包含頭文件intmain(void){intx,y,t;//定義三個(gè)變量
printf("請(qǐng)輸入兩個(gè)整數(shù)(用空格隔開(kāi)):");
scanf("%d%d",&x,&y);//輸入兩個(gè)數(shù)據(jù)給x和y
t=x;x=y;y=t;//將數(shù)x和y交換
printf("將輸入的兩個(gè)整數(shù)交換之后:");
printf("%d%d\n",x,y);//輸出x和y兩個(gè)數(shù)}2.2順序結(jié)構(gòu)程序設(shè)計(jì)【例2.10】從鍵盤(pán)輸入一個(gè)雙精度型實(shí)數(shù),然后根據(jù)需要保留的小數(shù)點(diǎn)后的位數(shù)進(jìn)行四舍五入處理,最后輸出該實(shí)數(shù)處理后的數(shù)值。#include<stdio.h>#include<math.h>
//包含數(shù)學(xué)函數(shù)庫(kù)頭文件intmain(void){
//(1)定義變量
doublei,j;intn;
//(2)輸入相關(guān)的數(shù)據(jù)
printf("請(qǐng)輸入一個(gè)實(shí)數(shù):");
scanf("%lf",&i);
printf("請(qǐng)輸入保留小數(shù)點(diǎn)后的位數(shù):");
scanf("%d",&n);
//(3)進(jìn)行四舍五入運(yùn)算
j=i*pow(10,n);j=j+0.5;
j=(int)j;
j=j/pow(10,n);
//(4)輸出處理后的實(shí)數(shù)值
printf("%f\n",j);}2.2.2順序結(jié)構(gòu)程序設(shè)計(jì)應(yīng)用2.3選擇結(jié)構(gòu)程序設(shè)計(jì)
選擇結(jié)構(gòu)程序:根據(jù)不同的條件,執(zhí)行不同的語(yǔ)句(根據(jù)不同的條件選擇不同的道路)。兩種選擇語(yǔ)句:if語(yǔ)句和switch語(yǔ)句。1、if語(yǔ)句的3種形式
(1)if基本形式if(表達(dá)式)語(yǔ)句#include<stdio.h>intmain(void){inti;
printf("請(qǐng)輸入一個(gè)整數(shù):");
scanf("%d",&i);
if(i>=0)printf("該數(shù)為非負(fù)數(shù).\n");}2.3.1if語(yǔ)句及應(yīng)用【例2.11】用if語(yǔ)句判斷輸入數(shù)據(jù)的正負(fù)。2.3選擇結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(void){ inti;
printf("請(qǐng)輸入一個(gè)整數(shù):");
scanf("%d",&i);
if(i>=0)printf("該數(shù)為非負(fù)數(shù).\n");
elseprintf("該數(shù)為負(fù)數(shù).\n");}1、if語(yǔ)句的3種形式
2.3.1if語(yǔ)句及應(yīng)用if(表達(dá)式)語(yǔ)句1else語(yǔ)句2(2)if…else基本形式【例2.12】用if…else語(yǔ)句判斷輸入數(shù)據(jù)的正負(fù)。練習(xí):【例2.13】判斷輸入的數(shù)據(jù)是否為0?!纠?.14】判斷輸入的兩個(gè)數(shù)據(jù)是否有0。2.3選擇結(jié)構(gòu)程序設(shè)計(jì)1、if語(yǔ)句的3種形式
2.3.1if語(yǔ)句及應(yīng)用(3)if…else嵌套形式——用于解決多分支問(wèn)題說(shuō)明:注意if與else的配對(duì)關(guān)系。else總是與它上面最近的未配對(duì)的if配對(duì)。2.3選擇結(jié)構(gòu)程序設(shè)計(jì)
虛線左側(cè)的嵌套結(jié)構(gòu),還可寫(xiě)成虛線右側(cè)的更加緊湊的形式。1、if語(yǔ)句的3種形式
2.3.1if語(yǔ)句及應(yīng)用(3)if…else嵌套形式——用于解決多分支問(wèn)題2.3選擇結(jié)構(gòu)程序設(shè)計(jì)1、if語(yǔ)句的3種形式
2.3.1if語(yǔ)句及應(yīng)用(3)if…else嵌套形式——用于解決多分支問(wèn)題【例2.15】根據(jù)符號(hào)函數(shù),編程實(shí)現(xiàn)輸入一個(gè)x值,輸出y值。#include<stdio.h>intmain(void){intx,y;
printf("請(qǐng)輸入x的值:");
scanf("%d",&x);
printf("x=%d,y=%d\n",x,y);}if(x<0)y=-1;elseif(x==0)y=0;elsey=1;if(x<0)y=-1;else
if(x==0)y=0;elsey=1;2.3選擇結(jié)構(gòu)程序設(shè)計(jì)2、條件運(yùn)算符(三目運(yùn)算符?:)和條件表達(dá)式2.3.1if語(yǔ)句及應(yīng)用條件表達(dá)式的一般形式:表達(dá)式1?表達(dá)式2:
表達(dá)式3條件表達(dá)式通常用于賦值語(yǔ)句之中??蓪?xiě)為:max=(a>b)?a:b;例如:if(a>b)max=a; elsemax=b;
(2)條件運(yùn)算符的結(jié)合方向是自右至左。
a>b?a:c>d?c:d
等價(jià)于a>b?a:(c>d?c:d)
(1)條件運(yùn)算符的運(yùn)算優(yōu)先級(jí)低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值運(yùn)算符。因此,max=(a>b)?a:b等價(jià)于max=a>b?a:b說(shuō)明:2.3選擇結(jié)構(gòu)程序設(shè)計(jì)2.3.1if語(yǔ)句及應(yīng)用2、條件運(yùn)算符和條件表達(dá)式【例2.16】利用條件運(yùn)算符求兩數(shù)的最大值。#include<stdio.h>intmain(void){ inta,b,max;
printf("請(qǐng)輸入兩個(gè)整數(shù):");
scanf("%d%d",&a,&b);
max=a>b?a:b;
printf("max=%d\n",max);}【練習(xí)】用條件運(yùn)算符實(shí)現(xiàn):輸入兩個(gè)整數(shù),輸出它們的差值(絕對(duì)值)。2.3選擇結(jié)構(gòu)程序設(shè)計(jì)【例2.17】輸入兩個(gè)整數(shù),要求按由大到小的順序輸出。3、if語(yǔ)句應(yīng)用
2.3.1if語(yǔ)句及應(yīng)用#include<stdio.h>intmain(void){ inta,b,t;printf("請(qǐng)輸入兩個(gè)整數(shù):");scanf("%d%d",&a,&b);if(a<b){
t=a;a=b;b=t;
}
printf("由大到?。?d,%d\n",a,b);}2.3選擇結(jié)構(gòu)程序設(shè)計(jì)【拓展】輸入3個(gè)整數(shù),要求按由大到小的順序輸出
。3個(gè)數(shù)進(jìn)行比較時(shí),實(shí)際上需要比較兩輪:第1輪,選出三個(gè)數(shù)中最大的數(shù),賦給變量a;第2輪,在剩余的兩個(gè)數(shù)中選出最大的數(shù),賦給變量b;最后剩下的數(shù)最小,賦給變量c。
對(duì)多個(gè)數(shù)進(jìn)行排序時(shí),仍可采用“選擇法”,這將在3.1節(jié)詳細(xì)介紹。
3、if語(yǔ)句應(yīng)用
2.3.1if語(yǔ)句及應(yīng)用【思考與實(shí)驗(yàn)】
1)輸入2個(gè)整數(shù),輸出較大值和較小值。2)輸入4個(gè)整數(shù),要求按由小到大的順序輸出。#include<stdio.h>intmain(void){ inta,b,c,t;printf("請(qǐng)輸入三個(gè)整數(shù):");
scanf("%d%d%d",&a,&b,&c);
if(a<b)
{
t=a;a=b;b=t; }
if(a<c)
{
t=a;a=c;c=t; }
if(b<c)
{
t=b;b=c;c=t; }
printf("由大到?。?d,%d,%d\n",a,b,c);}2.3選擇結(jié)構(gòu)程序設(shè)計(jì)3、if語(yǔ)句應(yīng)用
2.3.1if語(yǔ)句及應(yīng)用
4個(gè)開(kāi)關(guān)SW1、SW2、SW3、SW4的狀態(tài)分別由LIGHT1、LIGHT2、LIGHT3、LIGHT4燈指示。如:開(kāi)關(guān)SW1閉合,LIGHT1燈亮;SW1斷開(kāi),LIGHT1燈滅?!纠?.18】嵌入式應(yīng)用:微控制器MCU實(shí)現(xiàn)多路開(kāi)關(guān)狀態(tài)指示功能。2.3選擇結(jié)構(gòu)程序設(shè)計(jì)3、if語(yǔ)句應(yīng)用
2.3.1if語(yǔ)句及應(yīng)用【例2.19】根據(jù)輸入的課程成績(jī)(整數(shù)),判斷并輸出對(duì)應(yīng)的等級(jí)。
輸入成績(jī)與輸出結(jié)果:90~100,優(yōu)秀;80~89,良好;70~79,中等;60~69,及格;0~59,不及格;其他值,輸入有誤!#include<stdio.h>intmain(void){intscore;printf("請(qǐng)輸入課程成績(jī)(整數(shù)):");scanf("%d",&score);
if(score>=90&&score<=100)printf("優(yōu)秀!\n");
elseif(score>=80&&score<90)printf("良好!\n");
elseif(score>=70&&score<80)printf("中等!\n");
elseif(score>=60&&score<70)printf("及格!\n");
elseif(score>=0&&score<60)printf("不及格!\n");
else
printf("輸入有誤!\n");}2.3選擇結(jié)構(gòu)程序設(shè)計(jì)2.3.2switch語(yǔ)句及應(yīng)用
處理多分支選擇問(wèn)題時(shí),可采用if…else嵌套形式,還可采用switch語(yǔ)句。
當(dāng)switch括號(hào)內(nèi)“表達(dá)式”的值與某個(gè)case后面“常量表達(dá)式”的值相等時(shí),即執(zhí)行該行對(duì)應(yīng)的語(yǔ)句,后面的break語(yǔ)句可用來(lái)終止switch語(yǔ)句的執(zhí)行。若switch括號(hào)內(nèi)“表達(dá)式”的值與所有case后面的“常量表達(dá)式”均不相等時(shí),則執(zhí)行default后面的語(yǔ)句。switch語(yǔ)句的一般形式: 值的類(lèi)型應(yīng)為整型或字符型
不能是變量,必須是常量表達(dá)式,且必須互不相同
多個(gè)case可以共用一組執(zhí)行語(yǔ)句。
每一組允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)。帶有[]的部分為可選部分2.3選擇結(jié)構(gòu)程序設(shè)計(jì)【例2.21】用switch語(yǔ)句實(shí)現(xiàn):根據(jù)輸入的課程成績(jī)(整數(shù)),判斷并輸出對(duì)應(yīng)的等級(jí)。
輸入成績(jī)與輸出結(jié)果:90~100,優(yōu)秀80~89,良好70~79,中等60~69,及格0~59,不及格其他值,輸入有誤!2.3.2switch語(yǔ)句及應(yīng)用思考:(1)能否用swtich解決多分支選擇結(jié)構(gòu)問(wèn)題,關(guān)鍵問(wèn)題是什么?(2)if語(yǔ)句和switch語(yǔ)句有何區(qū)別?練習(xí):【例2.20】用switch語(yǔ)句實(shí)現(xiàn):輸入一個(gè)正整數(shù),輸出該整數(shù)除以5的余數(shù)。
實(shí)驗(yàn):將某個(gè)break語(yǔ)句去掉,觀察運(yùn)行結(jié)果,體會(huì)其作用。#include<stdio.h>intmain(void){intscore;
printf("請(qǐng)輸入課程成績(jī)(整數(shù)):");
scanf("%d",&score);
if(score>100||score<0)
printf("輸入錯(cuò)誤!\n");
else
{
switch(score/10)
{
case10:
case9:printf("優(yōu)秀!\n");
break;
case8:printf("良好!\n");
break;
case7:printf("中等!\n");
break;
case6:printf("及格!\n");
break;
default:printf("不及格!\n");
}
}}2.3選擇結(jié)構(gòu)程序設(shè)計(jì)【例2.22】嵌入式應(yīng)用:用switch語(yǔ)句實(shí)現(xiàn)多路開(kāi)關(guān)狀態(tài)指示功能(假設(shè)不存在多個(gè)開(kāi)關(guān)同時(shí)閉合的情況)。2.3.2switch語(yǔ)句及應(yīng)用
4個(gè)開(kāi)關(guān)SW1、SW2、SW3、SW4的狀態(tài)分別由LIGHT1、LIGHT2、LIGHT3、LIGHT4燈指示。如:開(kāi)關(guān)SW1閉合,LIGHT1燈亮;SW1斷開(kāi),LIGHT1燈滅。2.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
在許多問(wèn)題中需要用到循環(huán)控制,即重復(fù)執(zhí)行同種性質(zhì)的任務(wù)。C語(yǔ)言中,最基本的有while語(yǔ)句、do…while語(yǔ)句、for語(yǔ)句。while語(yǔ)句的一般形式:while(循環(huán)條件表達(dá)式)循環(huán)體語(yǔ)句2.4.1while循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例2.23】用while語(yǔ)句實(shí)現(xiàn)1+2+3+
…
+100的和。#include<stdio.h>intmain(void){inti=1,sum=0;while(i<=100){ sum=sum+i;i++;}printf("sum=%d\n",sum);}思考與實(shí)驗(yàn):1)1+3+5+…+992)2+4+6+…+1003)1+2+3+…+n練習(xí):【例2.24】輸入一串字符以#結(jié)束,然后輸出這串字符。說(shuō)明:
循環(huán)條件表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,只要循環(huán)條件表達(dá)式的值為真(非0),即可繼續(xù)執(zhí)行循環(huán)體語(yǔ)句。如嵌入式系統(tǒng)軟件的主函數(shù)一般用while(1)構(gòu)成無(wú)限循環(huán)結(jié)構(gòu)。請(qǐng)讀者將例2.20程序的執(zhí)行語(yǔ)句作為while(1)的循環(huán)體語(yǔ)句,運(yùn)行程序并體會(huì)循環(huán)結(jié)構(gòu)的作用。2.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)2.4.2do…while循環(huán)結(jié)構(gòu)程序設(shè)計(jì)do…while語(yǔ)句的一般形式:
do
循環(huán)體語(yǔ)句
while(表達(dá)式);【例2.25】用do…while語(yǔ)句實(shí)現(xiàn)1+2+3+…
+100的和。#include<stdio.h>intmain(void){inti=1,sum=0;
do
{
sum=sum+i;
i++;
}while(i<=100);
printf("sum=%d\n",sum);}2.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)2.4.2do…while循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例2.26】while和do…while循環(huán)的比較。經(jīng)測(cè)試,當(dāng)輸入i<3時(shí),兩者運(yùn)行結(jié)果相同;但當(dāng)輸入i≥3時(shí),運(yùn)行結(jié)果則不同。練習(xí):【例2.27】倒序輸出一個(gè)整數(shù)?!纠?.28】統(tǒng)計(jì)輸入的非負(fù)整數(shù)的位數(shù)。#include<stdio.h>intmain(void){ inti;printf("請(qǐng)輸入1個(gè)整數(shù):");scanf("%d",&i);while(i<3){i++;}printf("i=%d\n",i);}#include<stdio.h>intmain(void){ inti;printf("請(qǐng)輸入1個(gè)整數(shù):");scanf("%d",&i);do{i++;}while(i<3);printf("i=%d\n",i);}2.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)2.4.3for循環(huán)結(jié)構(gòu)程序設(shè)計(jì)for語(yǔ)句的一般形式:for(表達(dá)式1;
表達(dá)式2;
表達(dá)式3)循環(huán)體語(yǔ)句for語(yǔ)句最常用、最容易理解的應(yīng)用形式:
for(循環(huán)變量賦初值;
循環(huán)條件;
循環(huán)變量變化)循環(huán)體語(yǔ)句2.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)2.4.3for循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例2.29】用for語(yǔ)句實(shí)現(xiàn)1+2+3+…+100的和。#include<stdio.h>intmain(void){inti,sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("%d\n",sum);}inti=1,sum=0;for(;i<=100;i++)inti,sum;
for(sum=0,i=1;i<=100;i++)思考與實(shí)現(xiàn):1)1+3+5+…+992)2+4+6+…+100 3)1+2+3+…+ninti=1,sum=0;for(;i<=100;){sum=sum+i;i++;}2.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)2.4.3for循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(2)for(;;)與while(1)等價(jià),表示無(wú)限循環(huán)。主函數(shù)一般為無(wú)限循環(huán)結(jié)構(gòu)。嵌入式軟件設(shè)計(jì)中常用的兩種for語(yǔ)句形式:(1)for循環(huán)體可以是空語(yǔ)句,常用于軟件延時(shí)。例如:
for(i=0;i<1000;i++);或
for(i=1000;i>0;i--);2.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)2.4.4循環(huán)嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱(chēng)為循環(huán)嵌套。
【例2.30】統(tǒng)計(jì)循環(huán)次數(shù)。練習(xí):【例2.31】輸出由星號(hào)組成的三角圖形。#include<stdio.h>intmain(void){inti,j;//定義兩個(gè)循環(huán)變量intk=0;//存放循環(huán)次數(shù)
for(i=1;i<=3;i++)
{
for(j=1;j<=4;j++)
k++;
}
printf("循環(huán)次數(shù):%d\n",k);}說(shuō)明:(1)這幾行代碼是一條語(yǔ)句,因此可以不加{}。但為了程序的規(guī)范性和可讀性,建議加{}(2)在嵌入式軟件設(shè)計(jì)中,常用此方式實(shí)現(xiàn)更長(zhǎng)時(shí)間的軟件延時(shí)。【思考與實(shí)驗(yàn)】程序執(zhí)行后,變量i和j的值分別是多少?
i=:j=:k=1112345678910111232423452.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)break語(yǔ)句和continue語(yǔ)句在循環(huán)結(jié)構(gòu)中的控制作用區(qū)別:2.4.5break語(yǔ)句和continue語(yǔ)句
break語(yǔ)句可提前結(jié)束“整個(gè)”循環(huán)過(guò)程,接著執(zhí)行循環(huán)結(jié)構(gòu)下面的語(yǔ)句。continue語(yǔ)句可提前結(jié)束“本次”循環(huán)(跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句),接著執(zhí)行下次循環(huán)。2.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例2.32】break語(yǔ)句和continue語(yǔ)句在循環(huán)結(jié)構(gòu)中的使用。
2.4.5break語(yǔ)句和continue語(yǔ)句練習(xí):【例2.33】使12+22+32+…+i2的累加和sum大于1000為止,輸出sum和i的值?!纠?.34】循環(huán)輸入一個(gè)整數(shù),如果為非負(fù)整數(shù),則輸出其平方根;如果為負(fù)整數(shù),則退出循環(huán)程序?!纠?.35】輸出1~100之間能被7整除的整數(shù)。#include<stdio.h>intmain(void){inti;for(i=1;i<=5;i++){
if(i==3)break;printf("%d\n",i);}}#include<stdio.h>intmain(void){inti;for(i=1;i<=5;i++){
if(i==3)continue;printf("%d\n",i);}}2.5預(yù)處理命令
最常用的3種預(yù)處理功能:文件包含、宏定義、條件編譯。需要注意,預(yù)處理命令不是C語(yǔ)句。這些命令均以#開(kāi)頭。當(dāng)對(duì)一個(gè)源文件進(jìn)行編譯時(shí),系統(tǒng)將自動(dòng)引用預(yù)處理程序?qū)υ闯绦蛑械念A(yù)處理部分做處理,處理完畢自動(dòng)進(jìn)入對(duì)源程序的編譯。靈活使用預(yù)處理命令,可以提高編程效率。2.5預(yù)處理命令2.5.1宏定義1、不帶參數(shù)的宏定義
例如:#define
PI
3.1415926
在編譯預(yù)處理時(shí),對(duì)程序中所有的宏名“PI”,都用“3.1415926”去替換,此過(guò)程稱(chēng)為“宏替換”。兩種形式:
用一個(gè)簡(jiǎn)單且見(jiàn)名知意的“宏名”代表“替換文本”,“替換文本”可以是常數(shù)、表達(dá)式、格式串等。該形式的宏定義可以提高編程效率。(1)
#define宏名(2)#define宏名
替換文本僅說(shuō)明宏名對(duì)應(yīng)的標(biāo)識(shí)符被定義。2.5預(yù)處理命令【例2.36】使用不帶參數(shù)的宏定義:根據(jù)輸入的半徑,求圓的周長(zhǎng)和面積。2.5.1宏定義1、不帶參數(shù)的宏定義
編譯預(yù)處理時(shí),對(duì)程序中所有的“PI”,都用宏定義中的“3.1415926”去替換。
printf函數(shù)中的“%6.2f
”表示以實(shí)型數(shù)據(jù)格式輸出,輸出的數(shù)據(jù)最小寬度是6,并且保留2位小數(shù)。#include<stdio.h>#define
PI
3.1415926
//宏定義符號(hào)常量intmain(void){ floatr,
c,
s;
//定義半徑、周長(zhǎng)、面積變量printf("請(qǐng)輸入半徑:");scanf("%f",&r);//輸入半徑c=2.0*PI*r;
//計(jì)算周長(zhǎng)s=PI*r*r;
//計(jì)算面積printf("半徑=%6.2f\n",r);printf("周長(zhǎng)=%6.2f\n",c);printf("面積=%6.2f\n",s);}宏定義不是C語(yǔ)句,不必在行末加分號(hào)!2.5預(yù)處理命令2.5.1宏定義2、帶參數(shù)的宏定義
帶參宏定義的一般形式:#define宏名(形參表)
替換文本其中,在替換文本中含有形參表中的各個(gè)形參。
帶參宏調(diào)用的一般形式:宏名(實(shí)參表)在宏調(diào)用時(shí),不僅要宏展開(kāi),而且要用實(shí)參去代換宏定義的形參。【例2.37】使用帶參數(shù)的宏定義:根據(jù)輸入的半徑,求圓的面積。#include<stdio.h>#definePI
3.14159
//宏定義PI符號(hào)常量(不帶參數(shù))#defineS(r)
PI*(r)*(r)
//宏定義面積計(jì)算公式(帶參數(shù))intmain(void){floata,area;//定義半徑、面積變量
while(1)
{
printf("請(qǐng)輸入半徑:");
scanf("%f",&a);
if(a<0)break;
//若輸入的半徑是負(fù)值,則退出循環(huán)
area=S(a);
//宏調(diào)用
printf("半徑=%6.2f\n",a);
printf("面積=%6.2f\n",area);
}}練習(xí):【例2.38】使用帶參數(shù)的宏定義:宏定義條件表達(dá)式。2.5預(yù)處理命令
在嵌入式軟件設(shè)計(jì)中,經(jīng)常用到對(duì)寄存器的位操作。根據(jù)表1-7:
說(shuō)明:(1)宏定義中的宏名一般都用大寫(xiě)字母。(2)帶參宏定義,對(duì)其替換文本中的參數(shù)和表達(dá)式外加括號(hào)是為了不引起歧義,提高程序設(shè)計(jì)的可靠性。2.5.1宏定義2、帶參數(shù)的宏定義
練習(xí):【例2.39】輸入一個(gè)整數(shù),輸出其對(duì)應(yīng)的二進(jìn)制數(shù)。2.5預(yù)處理命令2.5.2文件包含文件包含命令行的一般形式:#include<文件名>或#include"文件名"在前面我們已多次使用此命令包含庫(kù)函數(shù)的頭文件。例如:
#include<stdio.h>
功能:在編譯預(yù)處理時(shí),將指定的文件插入該命令行位置取代該命令行,從而將指定的文件和當(dāng)前的源程序文件連成一個(gè)源文件。(1)在#include命令中,文件名可以用尖括號(hào)或雙撇號(hào)括起來(lái)。例如:
#include<stdio.h>或 #include"stdio.h"
一般來(lái)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)新驅(qū)動(dòng)下個(gè)人投資如何緊跟宏觀經(jīng)濟(jì)步伐
- 創(chuàng)新教學(xué)下的學(xué)生情緒調(diào)適方法
- 教科版二年級(jí)上冊(cè)科學(xué)期末測(cè)試卷帶答案(模擬題)
- 傳統(tǒng)與現(xiàn)代的融合小微餐飲企業(yè)發(fā)展趨勢(shì)
- 農(nóng)業(yè)生態(tài)保護(hù)與農(nóng)村經(jīng)濟(jì)協(xié)調(diào)發(fā)展
- 創(chuàng)新教育技術(shù)在中小學(xué)的實(shí)踐與探索
- 產(chǎn)品召回策略與企業(yè)風(fēng)險(xiǎn)管理的關(guān)聯(lián)性分析
- 污水站安全培訓(xùn)
- 2025飯店餐廳餐館轉(zhuǎn)讓合同
- 2025農(nóng)村合作社土地流轉(zhuǎn)合同范本
- 四川省內(nèi)江市2024-2025學(xué)年高一上學(xué)期期中考試數(shù)學(xué)試題(含答案)
- 消防火災(zāi)自動(dòng)報(bào)警主機(jī)更換(增加)施工方案
- 潤(rùn)致娃娃針課件
- DB35T 772-2023 行業(yè)用水定額
- 責(zé)任護(hù)理組長(zhǎng)競(jìng)選
- 期末檢測(cè)卷(試題)-2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)蘇教版
- n3護(hù)士競(jìng)聘述職
- 2024年廣東省第一次普通高中學(xué)業(yè)水平合格性考試歷史試卷(解析版)
- 手機(jī)以舊換新活動(dòng)方案
- 2024年行政執(zhí)法考試題庫(kù)及答案(題)
- 2024-2025學(xué)年五年級(jí)科學(xué)上冊(cè)第四單元《健康生活》測(cè)試卷(教科版)
評(píng)論
0/150
提交評(píng)論