版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
教學內容: 第1章:C語言語法基礎第2章:C程序設計基礎第3章:利用數組處理同類型的批量數據第4章:利用函數實現模塊化程序設計第5章:靈活使用指針第6章:結構體、共用體、枚舉類型及其應用第7章:常用的三種線性數據結構第8章:利用文件進行數據管理第9章:嵌入式技術基礎實踐方法C語言程序設計第2章C程序設計基礎【學習內容】2.1預備知識
2.2順序結構程序設計
2.3選擇結構程序設計
2.4循環(huán)結構程序設計
2.5預處理命令2.6三種結構程序設計的綜合應用【學習目標】1.熟悉算法及其表示方法;
2.熟悉C語句及其分類;
3.掌握數據輸入輸出函數的應用方法;
4.掌握順序、選擇、循環(huán)3種結構程序設計方法;
5.掌握預處理命令的應用方法。
本章首先介紹程序設計的預備知識,然后詳細介紹順序結構、選擇結構和循環(huán)結構這3種基本結構的程序設計方法,最后給出預處理命令的應用方法。
計算機程序
=數據結構
+算法
+程序代碼2.1預備知識2.1.1算法及流程圖表示1、算法的概念
為解決問題而采用的方法和步驟稱為算法。對于同一個問題可以有不同的算法,應盡量選擇占用內存小、執(zhí)行速度快的算法。2、算法的5個特征
(1)有窮性:一個算法應包含有限的操作步驟,且每個步驟都能在有限時間內完成。
(2)確定性:算法中的每一個步驟都應該是確定的,而不應模糊和具有二義性。
(3)可行性:算法的每一個步驟都是切實可行的。
(4)有輸入:一個算法可有零個或多個輸入。
(5)有輸出:一個算法必須有一個或多個輸出。3、算法的流程圖表示
常用的算法表示方法:自然語言描述法、流程圖法、計算機語言描述法。在此,只介紹最常用的流程圖法。2.1.1算法及流程圖表示2.1預備知識2.1.2程序的三種基本結構1、順序結構
按照程序語句書寫的順序一步一步依次執(zhí)行。
2.1預備知識
根據條件判斷的結果,從多種路徑中選擇其中的一種路徑執(zhí)行。
2、選擇結構
將一組操作重復執(zhí)行多次。有“當型”和“直到型”兩種循環(huán)結構。
2.1.2程序的三種基本結構3、循環(huán)結構2.1預備知識當型循環(huán)結構
先判斷后執(zhí)行直到型循環(huán)結構
先執(zhí)行后判斷1、聲明語句:對變量、函數、類型(如結構體等類型)等進行聲明例如:
變量聲明語句:inta,b,s;
變量聲明語句:inti=3,j=3,k=3,x=3;函數聲明語句:intadd(intx,inty);在C語言中,分號是語句的結束標志。C語句分為6類。2.1.3C語句分類2、表達式語句例如:
a=3(賦值表達式)
a=3;
(賦值語句)i++(自增1表達式)i++;
(自增1語句)2.1預備知識3、函數調用語句:函數調用表達式加分號例如:
printf("ThisisamyfirstProgram.\n");
add(a,b);
2.1.3C語句分類4、控制語句:控制程序的流程(1)條件語句:if語句、switch語句(3)轉向語句:break語句、continue語句、return語句、goto語句(2)循環(huán)語句:while語句、do…while語句、for語句2.1預備知識
把多條語句用花括號括起來組成的一個語句,稱為復合語句。例如:5、復合語句2.1.3C語句分類2.1預備知識
例如:下面的for循環(huán)體是空語句,在嵌入式軟件設計中常用作軟件延時。
for(i=10000;i>0;i--) {
;
//空語句
}6、空語句:只有一個分號,什么也不執(zhí)行2.2順序結構程序設計1、數據輸入輸出的在C語言中的實現2.2.1數據輸入輸出函數
(1)從計算機內存向輸出設備傳送數據稱為輸出,從輸入設備向計算機內存?zhèn)魉蛿祿Q為輸入。
(2)C語言本身不提供輸入輸出語句,而在C標準函數庫中提供了一些輸入輸出函數,例如printf函數和scanf函數,分別用于數據的輸出和輸入。
(3)使用標準輸入輸出庫函數時,要用預處理命令#include將其對應的頭文件“stdio.h”包含到源文件中: #include<stdio.h>或
#include"stdio.h"2.2順序結構程序設計2、字符輸出函數——putchar()
一般形式:putchar(c)
●向顯示器輸出字符變量c對應的字符。2.2.1數據輸入輸出函數【例2.1】輸出一個字符
。#include
<stdio.h>
//包含輸入輸出庫函數頭文件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順序結構程序設計3、字符輸入函數——getchar()
通常將鍵盤上輸入的字符賦給一個字符變量,構成賦值語句。如:
charc; c=getchar();2.2.1數據輸入輸出函數
注意:getchar函數只能接收一個字符,輸入數字也按字符處理。輸入多個字符時,計算機只接收第一個字符?!纠?.2】從鍵盤輸入一個字符,并在顯示屏顯示
。#include<stdio.h>
//包含輸入輸出庫函數頭文件intmain(void){
charc;printf("請輸入一個字符:");//原樣輸出一串字符,增加人機互動性
c=getchar();
//從鍵盤輸入一個字符
putchar(c);
//在屏幕上顯示輸入的字符putchar('\n');
//換行
}putchar(getchar());//在屏幕上顯示輸入的字符
2.2順序結構程序設計4、格式輸出函數——printf()●向顯示器輸出若干個任意類型的數據。2.2.1數據輸入輸出函數一般形式:printf(格式控制字符串,輸出列表)例如: printf("%d,%c\n",i,c)
②原樣輸出的字符,在顯示中起提示作用。(2)輸出列表:是需要輸出的一些數據,可以是常量、變量或表達式。
多個數據之間要用逗號隔開。
括號內包含兩部分:(1)格式控制字符串:由雙撇號括起來的一個字符串,它包含兩種信息。
①由%開頭的格式符,用于指定數據的輸出格式。例如,%d:以十進制形式輸出帶符號整數;%c:輸出單個字符;%x:以十六進制形式輸出無符號整數;%s:輸出字符串;%f:以小數形式輸出實數;%e:以指數形式輸出實數。
使用printf函數時,要求格式控制字符串中必須含有與輸出項一一對應的格式符,并且類型要匹配。printf函數也可以沒有輸出項。2.2順序結構程序設計4、格式輸出函數——printf()2.2.1數據輸入輸出函數#include<stdio.h>//包含輸入輸出庫函數頭文件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);//依次按指定的格式將多個數據輸出
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函數使用:格式化輸出數據。練習:【例2.4】printf函數的使用:指定輸出寬度、小數位數和左端對齊。2.2順序結構程序設計5、格式輸入函數——scanf()2.2.1數據輸入輸出函數
一般形式:scanf(格式控制字符串,地址列表)
作用:按用戶指定的格式從鍵盤把數據輸入到指定的變量地址中。
地址列表:由若干個地址組成的列表。變量的地址:地址運算符“&”后跟變量名。多個地址之間要用逗號隔開。
格式控制字符串的作用與printf函數類似。例如,%d:以十進制形式輸入帶符號整數;%c:輸入單個字符;%x:以十六進制形式輸入無符號整數;%s:輸入字符串;%f(%lf):以實數形式輸入單精度(雙精度)實數。2.2順序結構程序設計5、格式輸入函數——scanf()2.2.1數據輸入輸出函數【例2.5】用scanf函數輸入多個數值數據。#include<stdio.h>//包含輸入輸出庫函數頭文件intmain(void){inti,j;
floatk;
doublex;
printf("請輸入兩個整數和兩個實數:\n");//提示輸入4個數據
scanf("%d%d%f%lf",&i,&j,&k,&x);//輸入4個數據分別賦給4個變量
printf("%d,%d,%f,%f\n",i,j,k,x);//將4個變量的數值輸出}
說明:用scanf函數一次輸入多個數值或多個字符串時,在兩個數據之間可用空格或換行符或Tab符作分隔。①用空格作分隔
②用換行符作分隔③用Tab符作分隔2.2順序結構程序設計5、格式輸入函數——scanf()2.2.1數據輸入輸出函數
當輸入數據的類型與scanf函數中的格式符指定的類型不一致時,系統(tǒng)認為該數據結束?!纠?.6】scanf函數輸入多個不同類型的數據
。#include<stdio.h>intmain(void){ inti;charj; floatk;printf("請輸入1個整數、1個字符和1個實數:\n");
//提示輸入3個數據
scanf("%d%c%f",&i,&j,&k);//輸入3個數據分別賦給變量i、j、k
printf("%d,%c,%f\n",i,j,k);//將變量i、j、k的數據輸出
}2.2順序結構程序設計5、格式輸入函數——scanf()2.2.1數據輸入輸出函數#include<stdio.h>intmain(void){chari,j,k;
printf("請輸入3個字符:\n");//提示輸入3個數據
scanf("%c%c%c",&i,&j,&k);//輸入3個數據分別賦給變量i、j、k
printf("%c,%c,%c\n",i,j,k);//將變量i、j、k的數據輸出}用scanf函數輸入字符時,系統(tǒng)將輸入的空格、換行符作為有效字符?!纠?.7】scanf函數輸入多個字符。2.2順序結構程序設計2.2.2順序結構程序設計應用【例2.9】將輸入的兩個整數交換,然后再輸出這兩個整數。ABABABAB
兩名同學互換位置,如何實現?
需要借助一個臨時變量實現兩數的交換。//==================================//程序功能:輸入兩個整數,交換后再輸出。//設計日期:2020-03-25//==================================#include<stdio.h>//包含頭文件intmain(void){intx,y,t;//定義三個變量
printf("請輸入兩個整數(用空格隔開):");
scanf("%d%d",&x,&y);//輸入兩個數據給x和y
t=x;x=y;y=t;//將數x和y交換
printf("將輸入的兩個整數交換之后:");
printf("%d%d\n",x,y);//輸出x和y兩個數}2.2順序結構程序設計【例2.10】從鍵盤輸入一個雙精度型實數,然后根據需要保留的小數點后的位數進行四舍五入處理,最后輸出該實數處理后的數值。#include<stdio.h>#include<math.h>
//包含數學函數庫頭文件intmain(void){
//(1)定義變量
doublei,j;intn;
//(2)輸入相關的數據
printf("請輸入一個實數:");
scanf("%lf",&i);
printf("請輸入保留小數點后的位數:");
scanf("%d",&n);
//(3)進行四舍五入運算
j=i*pow(10,n);j=j+0.5;
j=(int)j;
j=j/pow(10,n);
//(4)輸出處理后的實數值
printf("%f\n",j);}2.2.2順序結構程序設計應用2.3選擇結構程序設計
選擇結構程序:根據不同的條件,執(zhí)行不同的語句(根據不同的條件選擇不同的道路)。兩種選擇語句:if語句和switch語句。1、if語句的3種形式
(1)if基本形式if(表達式)語句#include<stdio.h>intmain(void){inti;
printf("請輸入一個整數:");
scanf("%d",&i);
if(i>=0)printf("該數為非負數.\n");}2.3.1if語句及應用【例2.11】用if語句判斷輸入數據的正負。2.3選擇結構程序設計#include<stdio.h>intmain(void){ inti;
printf("請輸入一個整數:");
scanf("%d",&i);
if(i>=0)printf("該數為非負數.\n");
elseprintf("該數為負數.\n");}1、if語句的3種形式
2.3.1if語句及應用if(表達式)語句1else語句2(2)if…else基本形式【例2.12】用if…else語句判斷輸入數據的正負。練習:【例2.13】判斷輸入的數據是否為0。【例2.14】判斷輸入的兩個數據是否有0。2.3選擇結構程序設計1、if語句的3種形式
2.3.1if語句及應用(3)if…else嵌套形式——用于解決多分支問題說明:注意if與else的配對關系。else總是與它上面最近的未配對的if配對。2.3選擇結構程序設計
虛線左側的嵌套結構,還可寫成虛線右側的更加緊湊的形式。1、if語句的3種形式
2.3.1if語句及應用(3)if…else嵌套形式——用于解決多分支問題2.3選擇結構程序設計1、if語句的3種形式
2.3.1if語句及應用(3)if…else嵌套形式——用于解決多分支問題【例2.15】根據符號函數,編程實現輸入一個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選擇結構程序設計2、條件運算符(三目運算符?:)和條件表達式2.3.1if語句及應用條件表達式的一般形式:表達式1?表達式2:
表達式3條件表達式通常用于賦值語句之中??蓪憺椋簃ax=(a>b)?a:b;例如:if(a>b)max=a; elsemax=b;
(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說明:2.3選擇結構程序設計2.3.1if語句及應用2、條件運算符和條件表達式【例2.16】利用條件運算符求兩數的最大值。#include<stdio.h>intmain(void){ inta,b,max;
printf("請輸入兩個整數:");
scanf("%d%d",&a,&b);
max=a>b?a:b;
printf("max=%d\n",max);}【練習】用條件運算符實現:輸入兩個整數,輸出它們的差值(絕對值)。2.3選擇結構程序設計【例2.17】輸入兩個整數,要求按由大到小的順序輸出。3、if語句應用
2.3.1if語句及應用#include<stdio.h>intmain(void){ inta,b,t;printf("請輸入兩個整數:");scanf("%d%d",&a,&b);if(a<b){
t=a;a=b;b=t;
}
printf("由大到小:%d,%d\n",a,b);}2.3選擇結構程序設計【拓展】輸入3個整數,要求按由大到小的順序輸出
。3個數進行比較時,實際上需要比較兩輪:第1輪,選出三個數中最大的數,賦給變量a;第2輪,在剩余的兩個數中選出最大的數,賦給變量b;最后剩下的數最小,賦給變量c。
對多個數進行排序時,仍可采用“選擇法”,這將在3.1節(jié)詳細介紹。
3、if語句應用
2.3.1if語句及應用【思考與實驗】
1)輸入2個整數,輸出較大值和較小值。2)輸入4個整數,要求按由小到大的順序輸出。#include<stdio.h>intmain(void){ inta,b,c,t;printf("請輸入三個整數:");
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選擇結構程序設計3、if語句應用
2.3.1if語句及應用
4個開關SW1、SW2、SW3、SW4的狀態(tài)分別由LIGHT1、LIGHT2、LIGHT3、LIGHT4燈指示。如:開關SW1閉合,LIGHT1燈亮;SW1斷開,LIGHT1燈滅?!纠?.18】嵌入式應用:微控制器MCU實現多路開關狀態(tài)指示功能。2.3選擇結構程序設計3、if語句應用
2.3.1if語句及應用【例2.19】根據輸入的課程成績(整數),判斷并輸出對應的等級。
輸入成績與輸出結果:90~100,優(yōu)秀;80~89,良好;70~79,中等;60~69,及格;0~59,不及格;其他值,輸入有誤!#include<stdio.h>intmain(void){intscore;printf("請輸入課程成績(整數):");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括號內“表達式”的值與某個case后面“常量表達式”的值相等時,即執(zhí)行該行對應的語句,后面的break語句可用來終止switch語句的執(zhí)行。若switch括號內“表達式”的值與所有case后面的“常量表達式”均不相等時,則執(zhí)行default后面的語句。switch語句的一般形式: 值的類型應為整型或字符型
不能是變量,必須是常量表達式,且必須互不相同
多個case可以共用一組執(zhí)行語句。
每一組允許有多個語句,可以不用{}括起來。帶有[]的部分為可選部分2.3選擇結構程序設計【例2.21】用switch語句實現:根據輸入的課程成績(整數),判斷并輸出對應的等級。
輸入成績與輸出結果:90~100,優(yōu)秀80~89,良好70~79,中等60~69,及格0~59,不及格其他值,輸入有誤!2.3.2switch語句及應用思考:(1)能否用swtich解決多分支選擇結構問題,關鍵問題是什么?(2)if語句和switch語句有何區(qū)別?練習:【例2.20】用switch語句實現:輸入一個正整數,輸出該整數除以5的余數。
實驗:將某個break語句去掉,觀察運行結果,體會其作用。#include<stdio.h>intmain(void){intscore;
printf("請輸入課程成績(整數):");
scanf("%d",&score);
if(score>100||score<0)
printf("輸入錯誤!\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選擇結構程序設計【例2.22】嵌入式應用:用switch語句實現多路開關狀態(tài)指示功能(假設不存在多個開關同時閉合的情況)。2.3.2switch語句及應用
4個開關SW1、SW2、SW3、SW4的狀態(tài)分別由LIGHT1、LIGHT2、LIGHT3、LIGHT4燈指示。如:開關SW1閉合,LIGHT1燈亮;SW1斷開,LIGHT1燈滅。2.4循環(huán)結構程序設計
在許多問題中需要用到循環(huán)控制,即重復執(zhí)行同種性質的任務。C語言中,最基本的有while語句、do…while語句、for語句。while語句的一般形式:while(循環(huán)條件表達式)循環(huán)體語句2.4.1while循環(huán)結構程序設計【例2.23】用while語句實現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);}思考與實驗:1)1+3+5+…+992)2+4+6+…+1003)1+2+3+…+n練習:【例2.24】輸入一串字符以#結束,然后輸出這串字符。說明:
循環(huán)條件表達式一般是關系表達式或邏輯表達式,只要循環(huán)條件表達式的值為真(非0),即可繼續(xù)執(zhí)行循環(huán)體語句。如嵌入式系統(tǒng)軟件的主函數一般用while(1)構成無限循環(huán)結構。請讀者將例2.20程序的執(zhí)行語句作為while(1)的循環(huán)體語句,運行程序并體會循環(huán)結構的作用。2.4循環(huán)結構程序設計2.4.2do…while循環(huán)結構程序設計do…while語句的一般形式:
do
循環(huán)體語句
while(表達式);【例2.25】用do…while語句實現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)結構程序設計2.4.2do…while循環(huán)結構程序設計【例2.26】while和do…while循環(huán)的比較。經測試,當輸入i<3時,兩者運行結果相同;但當輸入i≥3時,運行結果則不同。練習:【例2.27】倒序輸出一個整數。【例2.28】統(tǒng)計輸入的非負整數的位數。#include<stdio.h>intmain(void){ inti;printf("請輸入1個整數:");scanf("%d",&i);while(i<3){i++;}printf("i=%d\n",i);}#include<stdio.h>intmain(void){ inti;printf("請輸入1個整數:");scanf("%d",&i);do{i++;}while(i<3);printf("i=%d\n",i);}2.4循環(huán)結構程序設計2.4.3for循環(huán)結構程序設計for語句的一般形式:for(表達式1;
表達式2;
表達式3)循環(huán)體語句for語句最常用、最容易理解的應用形式:
for(循環(huán)變量賦初值;
循環(huán)條件;
循環(huán)變量變化)循環(huán)體語句2.4循環(huán)結構程序設計2.4.3for循環(huán)結構程序設計【例2.29】用for語句實現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++)思考與實現: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)結構程序設計2.4.3for循環(huán)結構程序設計(2)for(;;)與while(1)等價,表示無限循環(huán)。主函數一般為無限循環(huán)結構。嵌入式軟件設計中常用的兩種for語句形式:(1)for循環(huán)體可以是空語句,常用于軟件延時。例如:
for(i=0;i<1000;i++);或
for(i=1000;i>0;i--);2.4循環(huán)結構程序設計2.4.4循環(huán)嵌套一個循環(huán)體內又包含另一個完整的循環(huán)結構,稱為循環(huán)嵌套。
【例2.30】統(tǒng)計循環(huán)次數。練習:【例2.31】輸出由星號組成的三角圖形。#include<stdio.h>intmain(void){inti,j;//定義兩個循環(huán)變量intk=0;//存放循環(huán)次數
for(i=1;i<=3;i++)
{
for(j=1;j<=4;j++)
k++;
}
printf("循環(huán)次數:%d\n",k);}說明:(1)這幾行代碼是一條語句,因此可以不加{}。但為了程序的規(guī)范性和可讀性,建議加{}(2)在嵌入式軟件設計中,常用此方式實現更長時間的軟件延時?!舅伎寂c實驗】程序執(zhí)行后,變量i和j的值分別是多少?
i=:j=:k=1112345678910111232423452.4循環(huán)結構程序設計break語句和continue語句在循環(huán)結構中的控制作用區(qū)別:2.4.5break語句和continue語句
break語句可提前結束“整個”循環(huán)過程,接著執(zhí)行循環(huán)結構下面的語句。continue語句可提前結束“本次”循環(huán)(跳過循環(huán)體中下面尚未執(zhí)行的語句),接著執(zhí)行下次循環(huán)。2.4循環(huán)結構程序設計【例2.32】break語句和continue語句在循環(huán)結構中的使用。
2.4.5break語句和continue語句練習:【例2.33】使12+22+32+…+i2的累加和sum大于1000為止,輸出sum和i的值。【例2.34】循環(huán)輸入一個整數,如果為非負整數,則輸出其平方根;如果為負整數,則退出循環(huán)程序?!纠?.35】輸出1~100之間能被7整除的整數。#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預處理命令
最常用的3種預處理功能:文件包含、宏定義、條件編譯。需要注意,預處理命令不是C語句。這些命令均以#開頭。當對一個源文件進行編譯時,系統(tǒng)將自動引用預處理程序對源程序中的預處理部分做處理,處理完畢自動進入對源程序的編譯。靈活使用預處理命令,可以提高編程效率。2.5預處理命令2.5.1宏定義1、不帶參數的宏定義
例如:#define
PI
3.1415926
在編譯預處理時,對程序中所有的宏名“PI”,都用“3.1415926”去替換,此過程稱為“宏替換”。兩種形式:
用一個簡單且見名知意的“宏名”代表“替換文本”,“替換文本”可以是常數、表達式、格式串等。該形式的宏定義可以提高編程效率。(1)
#define宏名(2)#define宏名
替換文本僅說明宏名對應的標識符被定義。2.5預處理命令【例2.36】使用不帶參數的宏定義:根據輸入的半徑,求圓的周長和面積。2.5.1宏定義1、不帶參數的宏定義
編譯預處理時,對程序中所有的“PI”,都用宏定義中的“3.1415926”去替換。
printf函數中的“%6.2f
”表示以實型數據格式輸出,輸出的數據最小寬度是6,并且保留2位小數。#include<stdio.h>#define
PI
3.1415926
//宏定義符號常量intmain(void){ floatr,
c,
s;
//定義半徑、周長、面積變量printf("請輸入半徑:");scanf("%f",&r);//輸入半徑c=2.0*PI*r;
//計算周長s=PI*r*r;
//計算面積printf("半徑=%6.2f\n",r);printf("周長=%6.2f\n",c);printf("面積=%6.2f\n",s);}宏定義不是C語句,不必在行末加分號!2.5預處理命令2.5.1宏定義2、帶參數的宏定義
帶參宏定義的一般形式:#define宏名(形參表)
替換文本其中,在替換文本中含有形參表中的各個形參。
帶參宏調用的一般形式:宏名(實參表)在宏調用時,不僅要宏展開,而且要用實參去代換宏定義的形參?!纠?.37】使用帶參數的宏定義:根據輸入的半徑,求圓的面積。#include<stdio.h>#definePI
3.14159
//宏定義PI符號常量(不帶參數)#defineS(r)
PI*(r)*(r)
//宏定義面積計算公式(帶參數)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);
}}練習:【例2.38】使用帶參數的宏定義:宏定義條件表達式。2.5預處理命令
在嵌入式軟件設計中,經常用到對寄存器的位操作。根據表1-7:
說明:(1)宏定義中的宏名一般都用大寫字母。(2)帶參宏定義,對其替換文本中的參數和表達式外加括號是為了不引起歧義,提高程序設計的可靠性。2.5.1宏定義2、帶參數的宏定義
練習:【例2.39】輸入一個整數,輸出其對應的二進制數。2.5預處理命令2.5.2文件包含文件包含命令行的一般形式:#include<文件名>或#include"文件名"在前面我們已多次使用此命令包含庫函數的頭文件。例如:
#include<stdio.h>
功能:在編譯預處理時,將指定的文件插入該命令行位置取代該命令行,從而將指定的文件和當前的源程序文件連成一個源文件。(1)在#include命令中,文件名可以用尖括號或雙撇號括起來。例如:
#include<stdio.h>或 #include"stdio.h"
一般來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 總經理聘用合同簽訂與授權
- 休閑度假房產打印身心放松
- 商業(yè)建筑砌墻施工合同
- 農村宅基地租賃協(xié)議模板
- 航空客服招聘合同模板
- 農業(yè)園區(qū)機耕道修建協(xié)議
- 防噪音卷簾門安裝合同樣本
- JJJ景區(qū)餐飲店投標方案
- 服裝設計教師招聘協(xié)議
- 教育機構加班安排細則
- 2025年北京探礦工程研究所招聘高校應屆畢業(yè)生歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025-2030年中國新能源汽車行業(yè)市場分析報告
- 宜賓天原5萬噸氯化法鈦白粉環(huán)評報告
- 創(chuàng)意寫作與文學欣賞
- 糖果行業(yè)大數據分析-洞察分析
- 名畫中的瘟疫史知到智慧樹章節(jié)測試課后答案2024年秋上海健康醫(yī)學院
- 高空伐樹作業(yè)施工方案
- 新媒體用戶行為研究-洞察分析
- 新建二級加油站項目投資立項可行性分析報告
- 湖北省荊門市(2024年-2025年小學六年級語文)統(tǒng)編版質量測試(上學期)試卷及答案
- 2025版國家開放大學法學本科《知識產權法》期末紙質考試總題庫
評論
0/150
提交評論