2- C程序設(shè)計(jì)基礎(chǔ)_第1頁(yè)
2- C程序設(shè)計(jì)基礎(chǔ)_第2頁(yè)
2- C程序設(shè)計(jì)基礎(chǔ)_第3頁(yè)
2- C程序設(shè)計(jì)基礎(chǔ)_第4頁(yè)
2- C程序設(shè)計(jì)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論