《汽車計算機基礎》 課件 2- 利用三種程序結構解決簡單問題_第1頁
《汽車計算機基礎》 課件 2- 利用三種程序結構解決簡單問題_第2頁
《汽車計算機基礎》 課件 2- 利用三種程序結構解決簡單問題_第3頁
《汽車計算機基礎》 課件 2- 利用三種程序結構解決簡單問題_第4頁
《汽車計算機基礎》 課件 2- 利用三種程序結構解決簡單問題_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1單元:C語言程序設計入門第2單元:利用三種程序結構解決簡單問題第3單元:利用數(shù)組處理同類型的批量數(shù)據(jù)第4單元:利用函數(shù)實現(xiàn)模塊化程序設計第5單元:靈活使用指針處理問題第6單元:利用復雜的構造類型解決實際問題汽車程序設計基礎篇

第2單元利用三種程序結構解決簡單問題【單元導讀】

在現(xiàn)實生活中,經(jīng)常遇到順序執(zhí)行、選擇執(zhí)行和循環(huán)執(zhí)行的問題,這些問題可通過C語言程序來解決。

單元學習目標:能利用C語言中的順序結構、選擇結構、循環(huán)結構解決實際問題,并在此基礎上,能利用預處理命令提高編程效率。

計算機程序

=數(shù)據(jù)結構

+算法

+程序代碼2.1.1算法及流程圖表示任務2.1知識儲備1、算法的概念

為解決問題而采用的方法和步驟稱為算法。對于同一個問題可以有不同的算法,應盡量選擇占用內(nèi)存小、執(zhí)行速度快的算法。2、算法的5個特征

(1)有窮性:一個算法應包含有限的操作步驟,且每個步驟都能在有限時間內(nèi)完成。

(2)確定性:算法中的每一個步驟都應該是確定的,而不應模糊和具有二義性。

(3)可行性:算法的每一個步驟都是切實可行的。

(4)有輸入:一個算法可有零個或多個輸入(鍵盤輸入或傳給算法數(shù)據(jù))。

(5)有輸出:一個算法必須有一個或多個輸出(顯示輸出或傳給算法數(shù)據(jù))。2.1.1算法及流程圖表示任務2.1知識儲備3、算法的流程圖表示

常用的算法表示方法:自然語言描述法、流程圖法、計算機語言描述法。在此,只介紹最常用的流程圖法。2.1.2程序的三種基本結構任務2.1知識儲備1、順序結構

按照程序語句書寫的順序一步一步依次執(zhí)行。

根據(jù)條件判斷的結果,從多種路徑中選擇其中的一種路徑執(zhí)行。

2、選擇結構2.1.2程序的三種基本結構任務2.1知識儲備

將一組操作重復執(zhí)行多次。有“當型”和“直到型”兩種循環(huán)結構。

3、循環(huán)結構當型循環(huán)結構

先判斷

后執(zhí)行直到型循環(huán)結構

先執(zhí)行

后判斷2.1.3C語句分類任務2.1知識儲備1、聲明語句:對變量、函數(shù)、類型(如結構體等類型)等進行聲明例如:

變量聲明語句:inti;

變量聲明語句:inti=12;

在C語言中,分號是語句的結束標志。C語句分為6類。2、表達式語句:在表達式的末尾加分號例如:

a=3(賦值表達式)

a=3;

(賦值語句)i++(自增1表達式)i++;

(自增1語句)2.1.3C語句分類任務2.1知識儲備3、函數(shù)調用語句:函數(shù)調用表達式加分號例如:

printf("這是我寫的第1個C程序\n");4、控制語句:控制程序的流程(1)條件語句:if語句、switch語句(3)轉向語句:break語句、continue語句、return語句、goto語句(2)循環(huán)語句:while語句、do…while語句、for語句2.1.3C語句分類任務2.1知識儲備

把多條語句用花括號括起來組成的一個語句,稱為復合語句。例如:5、復合語句

例如:下面的for循環(huán)體是空語句,在嵌入式軟件設計中常用作軟件延時。

for(i=10000;i>0;i--) {

;

//空語句

}6、空語句:只有一個分號,什么也不執(zhí)行2.2.1數(shù)據(jù)輸入輸出函數(shù)任務2.2利用順序結構程序解決實際問題1、數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)

(1)從計算機內(nèi)存向輸出設備傳送數(shù)據(jù)稱為輸出,從輸入設備向計算機內(nèi)存?zhèn)魉蛿?shù)據(jù)稱為輸入。

(2)C語言本身不提供輸入輸出語句,而用戶可以通過調用C標準函數(shù)庫中的輸入輸出函數(shù),實現(xiàn)數(shù)據(jù)的輸入和輸出。

(3)使用標準輸入輸出庫函數(shù)時,要用預處理命令#include將其對應的頭文件“stdio.h”包含到源文件中:

#include<stdio.h>或

#include"stdio.h"2.2.1數(shù)據(jù)輸入輸出函數(shù)任務2.2利用順序結構程序解決實際問題2、字符輸出函數(shù)——putchar函數(shù)

●向顯示器輸出一個字符。putchar('H');

//輸出字符Hputchar('\n');//換行charc='X';

putchar(c);//輸出字符X2.2.1數(shù)據(jù)輸入輸出函數(shù)任務2.2利用順序結構程序解決實際問題3、字符輸入函數(shù)——getchar函數(shù)

●讀取從鍵盤上輸入的一個字符。

注意:getchar函數(shù)只能接收一個字符,輸入數(shù)字也按字符處理。輸入多個字符時,計算機只接收第一個字符?!纠?.2】從鍵盤輸入一個字符,并在顯示屏顯示。#include

<stdio.h>

//包含輸入輸出頭文件intmain(void){

charc;printf("請輸入一個字符:");

//原樣輸出一串字符,增加人機互動性

c

=

getchar();

//從鍵盤輸入一個字符

putchar(c);

//在屏幕上顯示輸入的字符

putchar('\n');

//換行

}putchar(getchar());//在屏幕上顯示輸入的字符

【課后作業(yè)】同步練習2-1:putchar和getchar函數(shù)的應用。2.2.1數(shù)據(jù)輸入輸出函數(shù)任務2.2利用順序結構程序解決實際問題4、格式輸出函數(shù)——printf函數(shù)

●向顯示器輸出若干個任意類型的數(shù)據(jù)。一般形式:printf(格式控制字符串,輸出列表)在1.2.2節(jié)中曾學過:按照格式控制字符串中以%開頭的格式符指定的格式,將輸出列表中對應的數(shù)據(jù)輸出。也可以沒有輸出列表項。printf("這是我寫的第2個C程序\n");

//原樣輸出一串字符,并換行printf("i=%d\n",i);//原樣輸出i=,然后以%d形式輸出變量i的值,并換行printf("%d,%c\n",

i,c);//分別以%d形式和%c形式輸出變量i和變量c的值,并換行2.2.1數(shù)據(jù)輸入輸出函數(shù)任務2.2利用順序結構程序解決實際問題【課后作業(yè)】同步練習2-2:printf函數(shù)應用程序分析。#include<stdio.h>

//包含輸入輸出庫函數(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);//依次按指定的格式將多個數(shù)據(jù)輸出

printf("字母a的ASCII碼:%d\n",d);//以十進制格式輸出字母a的ASCII碼printf("字母a的ASCII碼:%x\n",d);//以16進制格式輸出字母a的ASCII碼printf("輸出字符串:%s\n","CHINA");//輸出字符串"CHINA"printf("今年的增長率=");//原樣輸出一串字符printf("50%%\n");//輸出50%}【例2.3】printf函數(shù)使用:格式化輸出數(shù)據(jù)。2.2.1數(shù)據(jù)輸入輸出函數(shù)任務2.2利用順序結構程序解決實際問題5、格式輸入函數(shù)——scanf函數(shù)

一般形式:scanf(格式控制字符串,地址列表)

(2)地址列表:由若干個地址組成的列表。

變量的地址:地址運算符“&”后跟變量名。

多個地址之間要用逗號隔開。

(1)格式控制字符串的作用與printf函數(shù)類似。

●按用戶指定的格式從鍵盤把數(shù)據(jù)輸入到指定的變量地址中。%d:輸入有符號的十進制整數(shù);%e:以指數(shù)形式輸入單精度實數(shù)(%le用于輸入雙精度實數(shù))%u:輸入無符號的十進制整數(shù);%x:輸入無符號的十六進制整數(shù);%c:輸入單個字符;%s:輸入字符串(將字符串送到一個字符數(shù)組中);%f:以小數(shù)形式輸入單精度實數(shù)(%lf用于輸入雙精度實數(shù));2.2.1數(shù)據(jù)輸入輸出函數(shù)任務2.2利用順序結構程序解決實際問題#include<stdio.h>

//包含輸入輸出庫函數(shù)頭文件intmain(void){

inti,j;

floatk;

doublex;

printf("請輸入兩個整數(shù)和兩個實數(shù):\n");//提示輸入4個數(shù)據(jù)

scanf("%d%d%f%lf",&i,&j,&k,&x);//輸入4個數(shù)據(jù)分別賦給4個變量

printf("%d,%d,%f,%f\n",i,j,k,x);//將4個變量的數(shù)值輸出}

說明:用scanf函數(shù)一次輸入多個數(shù)值或多個字符串時,在兩個數(shù)據(jù)之間可用空格或換行符或Tab符作分隔?!纠?.4】用scanf函數(shù)輸入多個數(shù)值數(shù)據(jù)。①用空格作分隔

②用換行符作分隔③用Tab符作分隔5、格式輸入函數(shù)——scanf函數(shù)【課堂練習】同步練習2-3:scanf函數(shù)的正確輸入數(shù)據(jù)方法。2.2.2順序結構程序設計應用任務2.2利用順序結構程序解決實際問題【課后作業(yè)】同步練習2-4:學以致用。【例2.5】將輸入的兩個整數(shù)交換,然后再輸出這兩個整數(shù)。ABABABAB

兩名同學互換位置,如何實現(xiàn)?

需要借助一個臨時變量實現(xiàn)兩數(shù)的交換。//==================================//程序功能:輸入兩個整數(shù),交換后再輸出。//設計日期:2023-07-20//==================================#include<stdio.h>//包含頭文件intmain(void){

intx,y,t;//定義三個變量

printf("請輸入兩個整數(shù)(用空格隔開):");scanf("%d%d",&x,&y);//輸入兩個數(shù)據(jù)給x和y

t=x;x=y;y=t;//將數(shù)x和y交換

printf("將輸入的兩個整數(shù)交換之后:");printf("%d%d\n",x,y);//輸出x和y兩個數(shù)}任務2.3利用選擇結構程序解決實際問題

選擇結構程序:根據(jù)不同的條件,執(zhí)行不同的語句(根據(jù)不同的條件選擇不同的道路)。兩種選擇語句:if語句和switch語句。1、if語句的3種形式

(1)if基本形式if(表達式)語句#include<stdio.h>intmain(void){

inta,b,t;printf("請輸入兩個整數(shù)(用空格隔開):");scanf("%d%d",&a,&b);if(a<b){

t=a;a=b;b=t; }printf("由大到?。?d,%d\n",a,b);}2.3.1if語句及應用【例2.11】輸入兩個整數(shù),要求按由大到小的順序輸出。【課后作業(yè)】同步練習2-8:

拓展應用:輸入三個整數(shù),按由大到小的順序輸出。任務2.3利用選擇結構程序解決實際問題1、if語句的3種形式

2.3.1if語句及應用(1)if基本形式if(表達式)語句#include<stdio.h>intmain(void){

intscore;

printf("請輸入成績:");

scanf("%d",&score);

if(score>=60)printf("恭喜,通過!\n");}【例2.6】用if語句判斷考試結果。要求:當考試成績不低于60分時,輸出“恭喜,通過”。任務2.3利用選擇結構程序解決實際問題#include<stdio.h>intmain(void){

intscore;

printf("請輸入成績:");

scanf("%d",&score);

if(score>=60)printf("恭喜,通過!\n");

elseprintf("未通過,繼續(xù)努力!\n");}2.3.1if語句及應用if(表達式)語句1else語句2(2)if…else基本形式【例2.7】用if…else語句判斷考試結果?!菊n后作業(yè)】【例2.8】判斷輸入的數(shù)據(jù)是否為0。1、if語句的3種形式

要求:當考試成績不低于60分時,輸出“恭喜,通過!”。

當考試成績低于60分時,輸出“未通過,繼續(xù)努力!”

同步練習2-5:

用if語句解決實際問題。2.3.1if語句及應用任務2.3利用選擇結構程序解決實際問題1、if語句的3種形式

說明:注意if與else的配對關系。else總是與它上面最近的未配對的if配對。(3)if…else嵌套形式——用于解決多分支問題任務2.3利用選擇結構程序解決實際問題2.3.1if語句及應用1、if語句的3種形式

(3)if…else嵌套形式——用于解決多分支問題

虛線左側的嵌套結構,還可寫成虛線右側的更加緊湊的形式。任務2.3利用選擇結構程序解決實際問題【例2.9】根據(jù)符號函數(shù),編程實現(xiàn)輸入一個x值,輸出y值。#include<stdio.h>intmain(void){

intx,y;

printf("請輸入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.1if語句及應用1、if語句的3種形式

(3)if…else嵌套形式——用于解決多分支問題【思考與實踐】若改用if基本形式,如何實現(xiàn)?執(zhí)行效率有區(qū)別嗎?【課后作業(yè)】

同步練習2-6:用if…else嵌套形式解決實際問題。2.3.1if語句及應用任務2.3利用選擇結構程序解決實際問題2、條件運算符(三目運算符?:)和條件表達式

條件表達式的一般形式:

表達式1?表達式2:

表達式3條件表達式通常用于賦值語句之中。

(2)條件運算符的結合方向是自右至左。

a>b?a:c>d?c:d等價于a>b?a:(c>d?c:d)

(1)條件運算符的運算優(yōu)先級低于關系運算符和算術運算符,但高于賦值運算符。因此,max=(a>b)?a:b等價于max=a>b?a:b說明:可簡寫為:max=(a>b)?a:b;

if(a>b)max=a;

elsemax=b;任務2.3利用選擇結構程序解決實際問題#include<stdio.h>intmain(void){

int

a,b,max;

printf("請輸入兩個整數(shù):");

scanf("%d%d",&a,&b);

max=a>b?a:b;

printf("max=%d\n",max);}2.3.1if語句及應用【例2.10】利用條件運算符求兩數(shù)的最大值?!菊n后作業(yè)】

同步練習2-7:用條件運算符實現(xiàn):輸入兩個整數(shù),輸出它們的差值(絕對值)。2、條件運算符(三目運算符?:)和條件表達式

【例2.12】根據(jù)輸入的課程成績(整數(shù)),判斷并輸出對應的等級。

輸入成績與輸出結果:90~100,優(yōu)秀;80~89,良好;70~79,中等;60~69,及格;0~59,不及格;其他值,輸入有誤!2.3.1if語句及應用任務2.3利用選擇結構程序解決實際問題#include<stdio.h>intmain(void){

intscore;printf("請輸入課程成績(整數(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利用選擇結構程序解決實際問題2.3.2switch語句及應用

處理多分支選擇問題時,可采用if…else嵌套形式,還可采用switch語句。

當switch括號內(nèi)“表達式”的值與某個case后面“常量表達式”的值相等時,即執(zhí)行該行對應的語句,后面的break語句可用來終止switch語句的執(zhí)行。若switch括號內(nèi)“表達式”的值與所有case后面的“常量表達式”均不相等時,則執(zhí)行default后面的語句。switch語句的一般形式: 值的類型應為整型或字符型

不能是變量,必須是常量表達式,且必須互不相同

多個case可以共用一組執(zhí)行語句。

每一組允許有多個語句,可以不用{}括起來。帶有[]的部分為可選部分2.3.2switch語句及應用任務2.3利用選擇結構程序解決實際問題【課后作業(yè)】同步練習2-9:用switch語句解決實際問題?!纠?.13】用switch語句實現(xiàn):根據(jù)輸入的課程成績(整數(shù)),判斷并輸出對應的等級。

輸入成績與輸出結果:90~100,優(yōu)秀80~89,良好70~79,中等60~69,及格0~59,不及格其他值,輸入有誤!#include<stdio.h>intmain(void){

intscore;

printf("請輸入課程成績(整數(shù)):");

scanf("%d",&score);

if(score>=0&&score<=100)

{

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");

}

}

else

printf("輸入有誤!\n");}

實驗:將某個break語句去掉,觀察運行結果,體會其作用。思考:若將每一個成績作為switch語句中的

case常量,是否可行?printf("優(yōu)秀!\n");

break;score)思考:(1)能否用swtich語句解決多分支選擇

結構問題的關鍵是什么?(2)if語句和switch語句有何區(qū)別?任務2.4利用循環(huán)結構程序解決實際問題

在許多問題中需要用到循環(huán)控制,即重復執(zhí)行同種性質的任務。例如:在測試例2.13程序時,需要多次單擊運行命令;在嵌入式智能設備中,上電后,主函數(shù)反復執(zhí)行一段無限循環(huán)程序。C語言中,最基本的有while語句、do…while語句、for語句。while語句的一般形式:while(循環(huán)條件表達式)循環(huán)體語句2.4.1while循環(huán)結構程序設計【例2.14】用while語句實現(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);}【課堂練習】同步練習2-10:1)1+3+5+…+992)2+4+6+…+100任務2.4利用循環(huán)結構程序解決實際問題while語句的一般形式:while(循環(huán)條件表達式)循環(huán)體語句2.4.1while循環(huán)結構程序設計說明:

循環(huán)條件表達式一般是關系表達式或邏輯表達式,只要循環(huán)條件表達式的值為真(非0),即可繼續(xù)執(zhí)行循環(huán)體語句。如嵌入式系統(tǒng)軟件的主函數(shù)一般用while(1)構成無限循環(huán)結構。請讀者將例2.13程序的執(zhí)行語句作為while(1)的循環(huán)體語句,運行程序并體會循環(huán)結構的作用?!菊n后作業(yè)】同步練習2-10:1+2+3+…+n;while循環(huán)程序分析。任務2.4利用循環(huán)結構程序解決實際問題2.4.2do…while循環(huán)結構程序設計do…while語句的一般形式:

do

循環(huán)體語句

while(表達式);【例2.15】用do…while語句實現(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);}do…while循環(huán)至少要執(zhí)行一次循環(huán)體語句。2.4.2do…while循環(huán)結構程序設計任務2.4利用循環(huán)結構程序解決實際問題【例2.16】while和

do…while循環(huán)的比較。

經(jīng)測試,當輸入i<3時,兩者運行結果相同;但當輸入i≥3時,運行結果則不同。

【課后作業(yè)】(1)同步練習2-11:程序分析。

(2)【例2.17】統(tǒng)計輸入的非負整數(shù)的位數(shù)。#include<stdio.h>intmain(void){

inti;printf("請輸入1個整數(shù):");scanf("%d",

&i);while(i<3){i++;}printf("i=%d\n",i);}#include<stdio.h>intmain(void){

inti;printf("請輸入1個整數(shù):");scanf("%d",

&i);do{i++;}while(i<3);printf("i=%d\n",i);}2.4.3for循環(huán)結構程序設計任務2.4利用循環(huán)結構程序解決實際問題for語句的一般形式:for(表達式1;

表達式2;

表達式3)循環(huán)體語句for語句最常用、最容易理解的應用形式:

for(循環(huán)變量賦初值;

循環(huán)條件;

循環(huán)變量變化)循環(huán)體語句2.4.3for循環(huán)結構程序設計任務2.4利用循環(huán)結構程序解決實際問題【例2.18】用for語句實現(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++)【課堂練習】同步練習2-12:(1)1+3+5+…+99(2)2+4+6+…+100inti=1,sum=0;for(;i<=100;){sum=sum+i;i++;}inti,sum;

for(sum=0,i=1;i<=100;i++)2.4.3for循環(huán)結構程序設計任務2.4利用循環(huán)結構程序解決實際問題(2)for(;;)與while(1)等價,表示無限循環(huán)。主函數(shù)一般為無限循環(huán)結構。嵌入式軟件設計中常用的兩種for語句形式:(1)for循環(huán)體可以是空語句,常用于軟件延時。例如:

for(i=0;i<1000;i++);

for(i=1000;i>0;i--);【課后作業(yè)】同步練習2-12:1)

1+2+3+…+n。2)輸出所有的“水仙花數(shù)”。3)傳幫帶(樂于助人,利人利己)。2.4.4循環(huán)嵌套任務2.4利用循環(huán)結構程序解決實際問題一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結構,稱為循環(huán)嵌套。

#include<stdio.h>intmain(void){

inti,j;//定義兩個循環(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);}說明:

(1)這幾行代碼是一條語句,因此可以不加{}。但為了程序的規(guī)范性和可讀性,建議加{}(2)在嵌入式軟件設計中,常用此方式實現(xiàn)更長時間的軟件延時。

【思考與實踐】循環(huán)嵌套結構執(zhí)行完畢后,變量i和j的值分別是多少?

i=:j=:k=111234567891011123242345【例2.19】統(tǒng)計循環(huán)次數(shù)?!菊n后作業(yè)】同步練習2-13:輸出九九乘法表。2.4.5break語句和continue語句任務2.4利用循環(huán)結構程序解決實際問題【例2.20】break語句和continue語句在循環(huán)結構中的應用。

#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);}}break語句可提前結束“整個”循環(huán)過程。continue語句可提前結束“本次”循環(huán)(跳過循環(huán)體中下面尚未執(zhí)行的語句),接著執(zhí)行下次循環(huán)。2.4.5break語句和continue語句任務2.4利用循環(huán)結構程序解決實際問題

總結:break語句和continue語句在循環(huán)結構中的控制作用區(qū)別continue語句可提前結束“本次”循環(huán)(跳過循環(huán)體中下面尚未執(zhí)行的語句),接著執(zhí)行下次循環(huán)。break語句可提前結束“整個”循環(huán)過程,接著執(zhí)行循環(huán)結構下面的語句?!菊n后作業(yè)】同步練習2-14:break語句和continue語句在循環(huán)控制程序中的應用。任務2.5

利用預處理命令提高編程效率幾乎所有的C語言程序,都使用以“#”開頭的預處理命令,例如包含命令#include、宏定義命令#define等。C語言中,最常用的3種預處理命令(功能):文件包含、宏定義、條件編譯。需要注意,預處理命令不是C語句。為了與一般C語句相區(qū)別,這些命令均以#開頭。

當對一個源文件進行編譯時,系統(tǒng)將自動引用預處理程序對源程序中的預處理命令做處理,處理完畢自動進入對源程序的編譯。

靈活使用預處理命令,可以提高編程效率。2.5.1宏定義任務2.5

利用預處理命令提高編程效率1、不帶參數(shù)的宏定義

例如:#define

PI

3.1415926

在編譯預處理時,對程序中所有的宏名“PI”,都用“3.1415926”去替換,此過程稱為“宏替換”。兩種形式:

用一個簡單且見名知意的“宏名”代表“替換文本”,“替換文本”可以是常數(shù)、表達式、格式串等。該形式的宏定義可以提高編程效率。(1)

#define宏名(2)#define宏名

替換文本僅說明宏名對應的標識符被定義。2.5.1宏定義任務2.5

利用預處理命令提高編程效率2、帶參數(shù)的宏定義

帶參宏定義的一般形式:#define宏名(形參表)

替換文本其中,在替換文本中含有形參表中的各個形參。

帶參宏調用的一般形式:宏名(實參表)在宏調用時,不僅要宏展開,而且要用實參去代換宏定義的形參。

帶參宏定義也稱為宏函數(shù)。在宏定義中的參數(shù)稱為形式參數(shù)(簡稱形參),在宏調用中的參數(shù)稱為實際參數(shù)(簡稱實參)。2.5.1宏定義任務2.5

利用預處理命令提高編程效率【例2.21】使用宏定義:根據(jù)輸入的半徑,求圓的面積。#include<stdio.h>#definePI

3.14159

//宏定義符號常量PI(不帶參數(shù))#defineS(r)

PI*(r)*(r)

//宏定義面積計算公式(帶參數(shù))intmain(void){

floata,area;//定義半徑、面積變量

while(1)

{

printf("請輸入半徑:");

scanf("%f",&a);

if(a<0)break;

//若輸入的半徑是負值,則退出循環(huán)

area=S(a);

//宏調用

printf("半徑=%6.2f\n",a);

printf("面積=%6.2f\n",area);

}}宏定義不是C語句,不要在行末加分號!“%6.2f”表示以實型數(shù)據(jù)格式輸出,輸出的數(shù)據(jù)最小寬度是6,并且保留2位小數(shù)。2.5.1宏定義任務2.5

利用預處理命令提高編程效率

在嵌入式軟件設計中,經(jīng)常用到對寄存器的位操作。根據(jù)表1-8:

說明:

(1)宏定義中的宏名一般都用大寫字母。(2)帶參宏定義,對其替換文本中的參數(shù)和表達式外加括號是為了不引起歧義,提高程序設計的可靠性?!菊n后作業(yè)】同步練習2-15:寫出帶參宏函數(shù)。2.5.2文件包含任務2.5

利用預處理命令提高編程效率文件包含命令行的一般形式:#include<文件名>或#include"文件名"在前面已多次使用此命令包含庫函數(shù)的頭文件。例如:

#include<stdio.h>

功能:在編譯預處理時,將指定的文件插入該命令行位置取代該命令行,從而將指定的文件和當前的源程序文件連成一個源文件。(1)在#include命令中,文件名可以用尖括號或雙撇號括起來。例如:

#include<stdio.h>或 #include"stdio.h"

一般來說,若要包含的是庫函數(shù)頭文件,則用尖括號;若要包含的

溫馨提示

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

評論

0/150

提交評論