




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
教學內(nèi)容: 第1章:C語言語法基礎(chǔ)第2章:C程序設計基礎(chǔ)第3章:利用數(shù)組處理同類型的批量數(shù)據(jù)第4章:利用函數(shù)實現(xiàn)模塊化程序設計第5章:靈活使用指針第6章:結(jié)構(gòu)體、共用體、枚舉類型及其應用第7章:常用的三種線性數(shù)據(jù)結(jié)構(gòu)第8章:利用文件進行數(shù)據(jù)管理第9章:嵌入式技術(shù)基礎(chǔ)實踐方法C語言程序設計第2章C程序設計基礎(chǔ)【學習內(nèi)容】2.1預備知識
2.2順序結(jié)構(gòu)程序設計
2.3選擇結(jié)構(gòu)程序設計
2.4循環(huán)結(jié)構(gòu)程序設計
2.5預處理命令2.6三種結(jié)構(gòu)程序設計的綜合應用【學習目標】1.熟悉算法及其表示方法;
2.熟悉C語句及其分類;
3.掌握數(shù)據(jù)輸入輸出函數(shù)的應用方法;
4.掌握順序、選擇、循環(huán)3種結(jié)構(gòu)程序設計方法;
5.掌握預處理命令的應用方法。
本章首先介紹程序設計的預備知識,然后詳細介紹順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這3種基本結(jié)構(gòu)的程序設計方法,最后給出預處理命令的應用方法。
計算機程序
=數(shù)據(jù)結(jié)構(gòu)
+算法
+程序代碼2.1預備知識2.1.1算法及流程圖表示1、算法的概念
為解決問題而采用的方法和步驟稱為算法。對于同一個問題可以有不同的算法,應盡量選擇占用內(nèi)存小、執(zhí)行速度快的算法。2、算法的5個特征
(1)有窮性:一個算法應包含有限的操作步驟,且每個步驟都能在有限時間內(nèi)完成。
(2)確定性:算法中的每一個步驟都應該是確定的,而不應模糊和具有二義性。
(3)可行性:算法的每一個步驟都是切實可行的。
(4)有輸入:一個算法可有零個或多個輸入。
(5)有輸出:一個算法必須有一個或多個輸出。3、算法的流程圖表示
常用的算法表示方法:自然語言描述法、流程圖法、計算機語言描述法。在此,只介紹最常用的流程圖法。2.1.1算法及流程圖表示2.1預備知識2.1.2程序的三種基本結(jié)構(gòu)1、順序結(jié)構(gòu)
按照程序語句書寫的順序一步一步依次執(zhí)行。
2.1預備知識
根據(jù)條件判斷的結(jié)果,從多種路徑中選擇其中的一種路徑執(zhí)行。
2、選擇結(jié)構(gòu)
將一組操作重復執(zhí)行多次。有“當型”和“直到型”兩種循環(huán)結(jié)構(gòu)。
2.1.2程序的三種基本結(jié)構(gòu)3、循環(huán)結(jié)構(gòu)2.1預備知識當型循環(huán)結(jié)構(gòu)
先判斷后執(zhí)行直到型循環(huán)結(jié)構(gòu)
先執(zhí)行后判斷1、聲明語句:對變量、函數(shù)、類型(如結(jié)構(gòu)體等類型)等進行聲明例如:
變量聲明語句:inta,b,s;
變量聲明語句:inti=3,j=3,k=3,x=3;函數(shù)聲明語句:intadd(intx,inty);在C語言中,分號是語句的結(jié)束標志。C語句分為6類。2.1.3C語句分類2、表達式語句例如:
a=3(賦值表達式)
a=3;
(賦值語句)i++(自增1表達式)i++;
(自增1語句)2.1預備知識3、函數(shù)調(diào)用語句:函數(shù)調(diào)用表達式加分號例如:
printf("ThisisamyfirstProgram.\n");
add(a,b);
2.1.3C語句分類4、控制語句:控制程序的流程(1)條件語句:if語句、switch語句(3)轉(zhuǎn)向語句: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順序結(jié)構(gòu)程序設計1、數(shù)據(jù)輸入輸出的在C語言中的實現(xiàn)2.2.1數(shù)據(jù)輸入輸出函數(shù)
(1)從計算機內(nèi)存向輸出設備傳送數(shù)據(jù)稱為輸出,從輸入設備向計算機內(nèi)存?zhèn)魉蛿?shù)據(jù)稱為輸入。
(2)C語言本身不提供輸入輸出語句,而在C標準函數(shù)庫中提供了一些輸入輸出函數(shù),例如printf函數(shù)和scanf函數(shù),分別用于數(shù)據(jù)的輸出和輸入。
(3)使用標準輸入輸出庫函數(shù)時,要用預處理命令#include將其對應的頭文件“stdio.h”包含到源文件中: #include<stdio.h>或
#include"stdio.h"2.2順序結(jié)構(gòu)程序設計2、字符輸出函數(shù)——putchar()
一般形式:putchar(c)
●向顯示器輸出字符變量c對應的字符。2.2.1數(shù)據(jù)輸入輸出函數(shù)【例2.1】輸出一個字符
。#include
<stdio.h>
//包含輸入輸出庫函數(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)程序設計3、字符輸入函數(shù)——getchar()
通常將鍵盤上輸入的字符賦給一個字符變量,構(gòu)成賦值語句。如:
charc; c=getchar();2.2.1數(shù)據(jù)輸入輸出函數(shù)
注意:getchar函數(shù)只能接收一個字符,輸入數(shù)字也按字符處理。輸入多個字符時,計算機只接收第一個字符?!纠?.2】從鍵盤輸入一個字符,并在顯示屏顯示
。#include<stdio.h>
//包含輸入輸出庫函數(shù)頭文件intmain(void){
charc;printf("請輸入一個字符:");//原樣輸出一串字符,增加人機互動性
c=getchar();
//從鍵盤輸入一個字符
putchar(c);
//在屏幕上顯示輸入的字符putchar('\n');
//換行
}putchar(getchar());//在屏幕上顯示輸入的字符
2.2順序結(jié)構(gòu)程序設計4、格式輸出函數(shù)——printf()●向顯示器輸出若干個任意類型的數(shù)據(jù)。2.2.1數(shù)據(jù)輸入輸出函數(shù)一般形式:printf(格式控制字符串,輸出列表)例如: printf("%d,%c\n",i,c)
②原樣輸出的字符,在顯示中起提示作用。(2)輸出列表:是需要輸出的一些數(shù)據(jù),可以是常量、變量或表達式。
多個數(shù)據(jù)之間要用逗號隔開。
括號內(nèi)包含兩部分:(1)格式控制字符串:由雙撇號括起來的一個字符串,它包含兩種信息。
①由%開頭的格式符,用于指定數(shù)據(jù)的輸出格式。例如,%d:以十進制形式輸出帶符號整數(shù);%c:輸出單個字符;%x:以十六進制形式輸出無符號整數(shù);%s:輸出字符串;%f:以小數(shù)形式輸出實數(shù);%e:以指數(shù)形式輸出實數(shù)。
使用printf函數(shù)時,要求格式控制字符串中必須含有與輸出項一一對應的格式符,并且類型要匹配。printf函數(shù)也可以沒有輸出項。2.2順序結(jié)構(gòu)程序設計4、格式輸出函數(shù)——printf()2.2.1數(shù)據(jù)輸入輸出函數(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.4】printf函數(shù)的使用:指定輸出寬度、小數(shù)位數(shù)和左端對齊。2.2順序結(jié)構(gòu)程序設計5、格式輸入函數(shù)——scanf()2.2.1數(shù)據(jù)輸入輸出函數(shù)
一般形式:scanf(格式控制字符串,地址列表)
作用:按用戶指定的格式從鍵盤把數(shù)據(jù)輸入到指定的變量地址中。
地址列表:由若干個地址組成的列表。變量的地址:地址運算符“&”后跟變量名。多個地址之間要用逗號隔開。
格式控制字符串的作用與printf函數(shù)類似。例如,%d:以十進制形式輸入帶符號整數(shù);%c:輸入單個字符;%x:以十六進制形式輸入無符號整數(shù);%s:輸入字符串;%f(%lf):以實數(shù)形式輸入單精度(雙精度)實數(shù)。2.2順序結(jié)構(gòu)程序設計5、格式輸入函數(shù)——scanf()2.2.1數(shù)據(jù)輸入輸出函數(shù)【例2.5】用scanf函數(shù)輸入多個數(shù)值數(shù)據(jù)。#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符作分隔。①用空格作分隔
②用換行符作分隔③用Tab符作分隔2.2順序結(jié)構(gòu)程序設計5、格式輸入函數(shù)——scanf()2.2.1數(shù)據(jù)輸入輸出函數(shù)
當輸入數(shù)據(jù)的類型與scanf函數(shù)中的格式符指定的類型不一致時,系統(tǒng)認為該數(shù)據(jù)結(jié)束?!纠?.6】scanf函數(shù)輸入多個不同類型的數(shù)據(jù)
。#include<stdio.h>intmain(void){ inti;charj; floatk;printf("請輸入1個整數(shù)、1個字符和1個實數(shù):\n");
//提示輸入3個數(shù)據(jù)
scanf("%d%c%f",&i,&j,&k);//輸入3個數(shù)據(jù)分別賦給變量i、j、k
printf("%d,%c,%f\n",i,j,k);//將變量i、j、k的數(shù)據(jù)輸出
}2.2順序結(jié)構(gòu)程序設計5、格式輸入函數(shù)——scanf()2.2.1數(shù)據(jù)輸入輸出函數(shù)#include<stdio.h>intmain(void){chari,j,k;
printf("請輸入3個字符:\n");//提示輸入3個數(shù)據(jù)
scanf("%c%c%c",&i,&j,&k);//輸入3個數(shù)據(jù)分別賦給變量i、j、k
printf("%c,%c,%c\n",i,j,k);//將變量i、j、k的數(shù)據(jù)輸出}用scanf函數(shù)輸入字符時,系統(tǒng)將輸入的空格、換行符作為有效字符。【例2.7】scanf函數(shù)輸入多個字符。2.2順序結(jié)構(gòu)程序設計2.2.2順序結(jié)構(gòu)程序設計應用【例2.9】將輸入的兩個整數(shù)交換,然后再輸出這兩個整數(shù)。ABABABAB
兩名同學互換位置,如何實現(xiàn)?
需要借助一個臨時變量實現(xiàn)兩數(shù)的交換。//==================================//程序功能:輸入兩個整數(shù),交換后再輸出。//設計日期:2020-03-25//==================================#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.2順序結(jié)構(gòu)程序設計【例2.10】從鍵盤輸入一個雙精度型實數(shù),然后根據(jù)需要保留的小數(shù)點后的位數(shù)進行四舍五入處理,最后輸出該實數(shù)處理后的數(shù)值。#include<stdio.h>#include<math.h>
//包含數(shù)學函數(shù)庫頭文件intmain(void){
//(1)定義變量
doublei,j;intn;
//(2)輸入相關(guān)的數(shù)據(jù)
printf("請輸入一個實數(shù):");
scanf("%lf",&i);
printf("請輸入保留小數(shù)點后的位數(shù):");
scanf("%d",&n);
//(3)進行四舍五入運算
j=i*pow(10,n);j=j+0.5;
j=(int)j;
j=j/pow(10,n);
//(4)輸出處理后的實數(shù)值
printf("%f\n",j);}2.2.2順序結(jié)構(gòu)程序設計應用2.3選擇結(jié)構(gòu)程序設計
選擇結(jié)構(gòu)程序:根據(jù)不同的條件,執(zhí)行不同的語句(根據(jù)不同的條件選擇不同的道路)。兩種選擇語句:if語句和switch語句。1、if語句的3種形式
(1)if基本形式if(表達式)語句#include<stdio.h>intmain(void){inti;
printf("請輸入一個整數(shù):");
scanf("%d",&i);
if(i>=0)printf("該數(shù)為非負數(shù).\n");}2.3.1if語句及應用【例2.11】用if語句判斷輸入數(shù)據(jù)的正負。2.3選擇結(jié)構(gòu)程序設計#include<stdio.h>intmain(void){ inti;
printf("請輸入一個整數(shù):");
scanf("%d",&i);
if(i>=0)printf("該數(shù)為非負數(shù).\n");
elseprintf("該數(shù)為負數(shù).\n");}1、if語句的3種形式
2.3.1if語句及應用if(表達式)語句1else語句2(2)if…else基本形式【例2.12】用if…else語句判斷輸入數(shù)據(jù)的正負。練習:【例2.13】判斷輸入的數(shù)據(jù)是否為0?!纠?.14】判斷輸入的兩個數(shù)據(jù)是否有0。2.3選擇結(jié)構(gòu)程序設計1、if語句的3種形式
2.3.1if語句及應用(3)if…else嵌套形式——用于解決多分支問題說明:注意if與else的配對關(guān)系。else總是與它上面最近的未配對的if配對。2.3選擇結(jié)構(gòu)程序設計
虛線左側(cè)的嵌套結(jié)構(gòu),還可寫成虛線右側(cè)的更加緊湊的形式。1、if語句的3種形式
2.3.1if語句及應用(3)if…else嵌套形式——用于解決多分支問題2.3選擇結(jié)構(gòu)程序設計1、if語句的3種形式
2.3.1if語句及應用(3)if…else嵌套形式——用于解決多分支問題【例2.15】根據(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選擇結(jié)構(gòu)程序設計2、條件運算符(三目運算符?:)和條件表達式2.3.1if語句及應用條件表達式的一般形式:表達式1?表達式2:
表達式3條件表達式通常用于賦值語句之中??蓪憺椋簃ax=(a>b)?a:b;例如:if(a>b)max=a; elsemax=b;
(2)條件運算符的結(jié)合方向是自右至左。
a>b?a:c>d?c:d
等價于a>b?a:(c>d?c:d)
(1)條件運算符的運算優(yōu)先級低于關(guān)系運算符和算術(shù)運算符,但高于賦值運算符。因此,max=(a>b)?a:b等價于max=a>b?a:b說明:2.3選擇結(jié)構(gòu)程序設計2.3.1if語句及應用2、條件運算符和條件表達式【例2.16】利用條件運算符求兩數(shù)的最大值。#include<stdio.h>intmain(void){ inta,b,max;
printf("請輸入兩個整數(shù):");
scanf("%d%d",&a,&b);
max=a>b?a:b;
printf("max=%d\n",max);}【練習】用條件運算符實現(xiàn):輸入兩個整數(shù),輸出它們的差值(絕對值)。2.3選擇結(jié)構(gòu)程序設計【例2.17】輸入兩個整數(shù),要求按由大到小的順序輸出。3、if語句應用
2.3.1if語句及應用#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選擇結(jié)構(gòu)程序設計【拓展】輸入3個整數(shù),要求按由大到小的順序輸出
。3個數(shù)進行比較時,實際上需要比較兩輪:第1輪,選出三個數(shù)中最大的數(shù),賦給變量a;第2輪,在剩余的兩個數(shù)中選出最大的數(shù),賦給變量b;最后剩下的數(shù)最小,賦給變量c。
對多個數(shù)進行排序時,仍可采用“選擇法”,這將在3.1節(jié)詳細介紹。
3、if語句應用
2.3.1if語句及應用【思考與實驗】
1)輸入2個整數(shù),輸出較大值和較小值。2)輸入4個整數(shù),要求按由小到大的順序輸出。#include<stdio.h>intmain(void){ inta,b,c,t;printf("請輸入三個整數(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)程序設計3、if語句應用
2.3.1if語句及應用
4個開關(guān)SW1、SW2、SW3、SW4的狀態(tài)分別由LIGHT1、LIGHT2、LIGHT3、LIGHT4燈指示。如:開關(guān)SW1閉合,LIGHT1燈亮;SW1斷開,LIGHT1燈滅?!纠?.18】嵌入式應用:微控制器MCU實現(xiàn)多路開關(guān)狀態(tài)指示功能。2.3選擇結(jié)構(gòu)程序設計3、if語句應用
2.3.1if語句及應用【例2.19】根據(jù)輸入的課程成績(整數(shù)),判斷并輸出對應的等級。
輸入成績與輸出結(jié)果: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>=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)程序設計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選擇結(jié)構(gòu)程序設計【例2.21】用switch語句實現(xiàn):根據(jù)輸入的課程成績(整數(shù)),判斷并輸出對應的等級。
輸入成績與輸出結(jié)果:90~100,優(yōu)秀80~89,良好70~79,中等60~69,及格0~59,不及格其他值,輸入有誤!2.3.2switch語句及應用思考:(1)能否用swtich解決多分支選擇結(jié)構(gòu)問題,關(guān)鍵問題是什么?(2)if語句和switch語句有何區(qū)別?練習:【例2.20】用switch語句實現(xiàn):輸入一個正整數(shù),輸出該整數(shù)除以5的余數(shù)。
實驗:將某個break語句去掉,觀察運行結(jié)果,體會其作用。#include<stdio.h>intmain(void){intscore;
printf("請輸入課程成績(整數(shù)):");
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選擇結(jié)構(gòu)程序設計【例2.22】嵌入式應用:用switch語句實現(xiàn)多路開關(guān)狀態(tài)指示功能(假設不存在多個開關(guān)同時閉合的情況)。2.3.2switch語句及應用
4個開關(guān)SW1、SW2、SW3、SW4的狀態(tài)分別由LIGHT1、LIGHT2、LIGHT3、LIGHT4燈指示。如:開關(guān)SW1閉合,LIGHT1燈亮;SW1斷開,LIGHT1燈滅。2.4循環(huán)結(jié)構(gòu)程序設計
在許多問題中需要用到循環(huán)控制,即重復執(zhí)行同種性質(zhì)的任務。C語言中,最基本的有while語句、do…while語句、for語句。while語句的一般形式:while(循環(huán)條件表達式)循環(huán)體語句2.4.1while循環(huán)結(jié)構(gòu)程序設計【例2.23】用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);}思考與實驗:1)1+3+5+…+992)2+4+6+…+1003)1+2+3+…+n練習:【例2.24】輸入一串字符以#結(jié)束,然后輸出這串字符。說明:
循環(huán)條件表達式一般是關(guān)系表達式或邏輯表達式,只要循環(huán)條件表達式的值為真(非0),即可繼續(xù)執(zhí)行循環(huán)體語句。如嵌入式系統(tǒng)軟件的主函數(shù)一般用while(1)構(gòu)成無限循環(huán)結(jié)構(gòu)。請讀者將例2.20程序的執(zhí)行語句作為while(1)的循環(huán)體語句,運行程序并體會循環(huán)結(jié)構(gòu)的作用。2.4循環(huán)結(jié)構(gòu)程序設計2.4.2do…while循環(huán)結(jié)構(gòu)程序設計do…while語句的一般形式:
do
循環(huán)體語句
while(表達式);【例2.25】用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);}2.4循環(huán)結(jié)構(gòu)程序設計2.4.2do…while循環(huán)結(jié)構(gòu)程序設計【例2.26】while和do…while循環(huán)的比較。經(jīng)測試,當輸入i<3時,兩者運行結(jié)果相同;但當輸入i≥3時,運行結(jié)果則不同。練習:【例2.27】倒序輸出一個整數(shù)?!纠?.28】統(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循環(huán)結(jié)構(gòu)程序設計2.4.3for循環(huán)結(jié)構(gòu)程序設計for語句的一般形式:for(表達式1;
表達式2;
表達式3)循環(huán)體語句for語句最常用、最容易理解的應用形式:
for(循環(huán)變量賦初值;
循環(huán)條件;
循環(huán)變量變化)循環(huán)體語句2.4循環(huán)結(jié)構(gòu)程序設計2.4.3for循環(huán)結(jié)構(gòu)程序設計【例2.29】用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++)inti,sum;
for(sum=0,i=1;i<=100;i++)思考與實現(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)程序設計2.4.3for循環(huán)結(jié)構(gòu)程序設計(2)for(;;)與while(1)等價,表示無限循環(huán)。主函數(shù)一般為無限循環(huán)結(jié)構(gòu)。嵌入式軟件設計中常用的兩種for語句形式:(1)for循環(huán)體可以是空語句,常用于軟件延時。例如:
for(i=0;i<1000;i++);或
for(i=1000;i>0;i--);2.4循環(huán)結(jié)構(gòu)程序設計2.4.4循環(huán)嵌套一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)嵌套。
【例2.30】統(tǒng)計循環(huán)次數(shù)。練習:【例2.31】輸出由星號組成的三角圖形。#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)更長時間的軟件延時。【思考與實驗】程序執(zhí)行后,變量i和j的值分別是多少?
i=:j=:k=1112345678910111232423452.4循環(huán)結(jié)構(gòu)程序設計break語句和continue語句在循環(huán)結(jié)構(gòu)中的控制作用區(qū)別:2.4.5break語句和continue語句
break語句可提前結(jié)束“整個”循環(huán)過程,接著執(zhí)行循環(huán)結(jié)構(gòu)下面的語句。continue語句可提前結(jié)束“本次”循環(huán)(跳過循環(huán)體中下面尚未執(zhí)行的語句),接著執(zhí)行下次循環(huán)。2.4循環(huán)結(jié)構(gòu)程序設計【例2.32】break語句和continue語句在循環(huán)結(jié)構(gòu)中的使用。
2.4.5break語句和continue語句練習:【例2.33】使12+22+32+…+i2的累加和sum大于1000為止,輸出sum和i的值。【例2.34】循環(huán)輸入一個整數(shù),如果為非負整數(shù),則輸出其平方根;如果為負整數(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預處理命令
最常用的3種預處理功能:文件包含、宏定義、條件編譯。需要注意,預處理命令不是C語句。這些命令均以#開頭。當對一個源文件進行編譯時,系統(tǒng)將自動引用預處理程序?qū)υ闯绦蛑械念A處理部分做處理,處理完畢自動進入對源程序的編譯。靈活使用預處理命令,可以提高編程效率。2.5預處理命令2.5.1宏定義1、不帶參數(shù)的宏定義
例如:#define
PI
3.1415926
在編譯預處理時,對程序中所有的宏名“PI”,都用“3.1415926”去替換,此過程稱為“宏替換”。兩種形式:
用一個簡單且見名知意的“宏名”代表“替換文本”,“替換文本”可以是常數(shù)、表達式、格式串等。該形式的宏定義可以提高編程效率。(1)
#define宏名(2)#define宏名
替換文本僅說明宏名對應的標識符被定義。2.5預處理命令【例2.36】使用不帶參數(shù)的宏定義:根據(jù)輸入的半徑,求圓的周長和面積。2.5.1宏定義1、不帶參數(shù)的宏定義
編譯預處理時,對程序中所有的“PI”,都用宏定義中的“3.1415926”去替換。
printf函數(shù)中的“%6.2f
”表示以實型數(shù)據(jù)格式輸出,輸出的數(shù)據(jù)最小寬度是6,并且保留2位小數(shù)。#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、帶參數(shù)的宏定義
帶參宏定義的一般形式:#define宏名(形參表)
替換文本其中,在替換文本中含有形參表中的各個形參。
帶參宏調(diào)用的一般形式:宏名(實參表)在宏調(diào)用時,不僅要宏展開,而且要用實參去代換宏定義的形參?!纠?.37】使用帶參數(shù)的宏定義:根據(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);
//宏調(diào)用
printf("半徑=%6.2f\n",a);
printf("面積=%6.2f\n",area);
}}練習:【例2.38】使用帶參數(shù)的宏定義:宏定義條件表達式。2.5預處理命令
在嵌入式軟件設計中,經(jīng)常用到對寄存器的位操作。根據(jù)表1-7:
說明:(1)宏定義中的宏名一般都用大寫字母。(2)帶參宏定義,對其替換文本中的參數(shù)和表達式外加括號是為了不引起歧義,提高程序設計的可靠性。2.5.1宏定義2、帶參數(shù)的宏定義
練習:【例2.39】輸入一個整數(shù),輸出其對應的二進制數(shù)。2.5預處理命令2.5.2文件包含文件包含命令行的一般形式:#include<文件名>或#include"文件名"在前面我們已多次使用此命令包含庫函數(shù)的頭文件。例如:
#include<stdio.h>
功能:在編譯預處理時,將指定的文件插入該命令行位置取代該命令行,從而將指定的文件和當前的源程序文件連成一個源文件。(1)在#include命令中,文件名可以用尖括號或雙撇號括起來。例如:
#include<stdio.h>或 #include"stdio.h"
一般來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 日文版勞動合同
- 游戲開發(fā)引擎授權(quán)使用及技術(shù)支持服務協(xié)議
- 三字經(jīng)學習感悟
- Oleic-acid-Standard-生命科學試劑-MCE
- 小學生經(jīng)典國學啟蒙讀后感
- 2-2-Dibutylpropane-1-3-diol-生命科學試劑-MCE
- 年終團隊建設活動安排
- 年度銷售部門工作總結(jié)報告新趨勢與成效分析
- 公司融資計劃及投資策略分析
- 試用期員工勞動合同
- 安防監(jiān)控工程施工方案(3篇)
- 2025年藍莓種苗行業(yè)深度研究分析報告
- 第二十一章會陰部美容手術(shù)講解
- 2025年度iPhone手機租賃與虛擬現(xiàn)實體驗合同3篇
- 《糖尿病診療規(guī)范》課件
- 2025年度消防工程安全防護措施設計固定總價合同范本3篇
- 2025年事業(yè)單位財務工作計劃(三篇)
- Unit 2 Know your body(說課稿)-2024-2025學年外研版(三起)(2024)英語三年級下冊
- 食品企業(yè)危機管理應對方案
- 市場消防安全課件
- 名師工作室建設課件
評論
0/150
提交評論