版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
智能小車C語言程序控制秦磊
梁爽
主編第9章數(shù)碼管靜態(tài)顯示
數(shù)碼管是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管。數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管(顯示時(shí)多一個(gè)小數(shù)點(diǎn))。
數(shù)碼管靜態(tài)顯示就是當(dāng)數(shù)碼管顯示某一字符時(shí),相應(yīng)的發(fā)光二極管恒定導(dǎo)通或者截止。一個(gè)八段數(shù)碼管有8個(gè)發(fā)光二極管,其顯示的字符可以采用前面介紹的點(diǎn)亮發(fā)光二極管的方式控制,即采用基本數(shù)據(jù)類型定義每個(gè)發(fā)光二極管對(duì)應(yīng)引腳的變量。利用基本數(shù)據(jù)類型可以解決一些簡(jiǎn)單的問題。對(duì)于復(fù)雜的問題,則需要使用數(shù)組。
數(shù)組是指按序排列的相同類型的數(shù)據(jù)元素的集合。例如,可以用數(shù)組表示一個(gè)班級(jí)里面所有學(xué)生的英語成績(jī)所組成的集合。數(shù)組中的元素是有排列順序的。數(shù)組元素用數(shù)組名和下標(biāo)確定,下標(biāo)是數(shù)組中各個(gè)元素的數(shù)字編號(hào)。
在C語言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類型。按數(shù)組元素的類型,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等。本章主要介紹數(shù)值數(shù)組和字符數(shù)組。目錄CONTENTS1一維數(shù)組2二維數(shù)組3字符數(shù)組4數(shù)碼管靜態(tài)顯示系統(tǒng)設(shè)計(jì)01PARTONE一維數(shù)組1一維數(shù)組1.1一維數(shù)組的定義一維數(shù)組:數(shù)組中每個(gè)元素只帶有一個(gè)下標(biāo)格式如下:
類型說明符
數(shù)組名[常量表達(dá)式];類型說明符:可以是任意一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型數(shù)組名:用戶定義的數(shù)組標(biāo)識(shí)符常量表達(dá)式:數(shù)組元素的個(gè)數(shù),也稱數(shù)組長(zhǎng)度[]:數(shù)組運(yùn)算符例如:inta[6];floatb[3],c[4];charch[10];1一維數(shù)組1.1一維數(shù)組的定義數(shù)組的特點(diǎn):同一個(gè)數(shù)組中所有元素的數(shù)據(jù)類型都是相同的;各元素的存儲(chǔ)在內(nèi)存中按照先后順序連續(xù)存儲(chǔ)在一起;數(shù)組元素用數(shù)組的名稱和它在數(shù)組中的順序來表示。例如:a[0]代表數(shù)組a中的第一個(gè)元素a[1]代表數(shù)組a中的第二個(gè)元素1一維數(shù)組1.2一維數(shù)組元素的引用數(shù)組元素的表示:
數(shù)組名[下標(biāo)]
注意:數(shù)組元素必須先定義后引用引用時(shí)下標(biāo)從“0”開始下標(biāo)可以是整型常量或表達(dá)式,表達(dá)式內(nèi)允許變量存在下標(biāo)不能使用變量只能對(duì)數(shù)組元素進(jìn)行引用,如a[0]、a[i]、a[i+1]等,而不能引用整個(gè)數(shù)組對(duì)變量的任何操作都適用于數(shù)組元素引用數(shù)組元素時(shí)下標(biāo)不能出界1一維數(shù)組1.2一維數(shù)組元素的引用例如:輸出有10個(gè)元素的數(shù)組。/*輸出有10個(gè)元素的數(shù)組*/intmain(){inti,a[10];
for(i=0;i<=9;i++)
a[i]=i;
for(i=0;i<=9;i++)
printf("a[%d]=%d\t",i,a[i]);
return0;}1一維數(shù)組1.3一維數(shù)組的初始化
數(shù)組初始化:定義數(shù)組時(shí)對(duì)各數(shù)組元素賦初值用賦值語句給數(shù)組元素逐個(gè)賦值輸入語句給數(shù)組元素逐個(gè)賦值①②③1一維數(shù)組1.3一維數(shù)組的初始化例如:inta[5]={0,1,2,3,4};等價(jià)于a[0]=0;a[1]=1;a[2]=2;a[3]=3;a[4]=4;(1)在定義數(shù)組時(shí)對(duì)數(shù)組元素賦初值例如:inta[5]={1,2,3};等價(jià)于a[0]=1;a[1]=2;a[2]=3;a[3]=0;a[4]=0;(2)只給部分元素賦值在定義數(shù)組時(shí)對(duì)數(shù)組元素賦初值,在編譯階段可使數(shù)組元素得到初值,這樣能減少運(yùn)行時(shí)間,提高程序運(yùn)行效率。1一維數(shù)組1.3一維數(shù)組的初始化例如,對(duì)數(shù)組a中所有元素賦初值0,可以寫成下面的形式:inta[5]={0,0,0,0,0};或inta[5]={0};(3)數(shù)組元素初值全部為0例如:inta[]={1,2,3,4,5,6,7,8};等價(jià)于inta[8]={1,2,3,4,5,6,7,8};編譯程序時(shí)系統(tǒng)會(huì)根據(jù)初值的個(gè)數(shù)確定數(shù)組長(zhǎng)度。(4)數(shù)組元素賦初值時(shí),可以不指定長(zhǎng)度1一維數(shù)組1.4一維數(shù)組的應(yīng)用【例9-1-3】從鍵盤輸入10個(gè)數(shù),求其中的最小值并顯示出來。
#include<stdio.h>/*從鍵盤輸入10個(gè)數(shù),求其中的最小值并顯示出來*/intmain(){
inti,min,a[10];
printf("pleaseinput10number:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
min=a[0];
for(i=0;i<10;i++)
if(min>a[i])min=a[i];printf("minvalueis%d\n",min);
return0;}1一維數(shù)組1.4一維數(shù)組的應(yīng)用【例9-1-4】求出數(shù)組元素中的奇數(shù)和偶數(shù),并統(tǒng)計(jì)奇數(shù)和偶數(shù)的個(gè)數(shù)。
#include<stdio.h>/*求出數(shù)組元素中的奇數(shù)和偶數(shù),并統(tǒng)計(jì)奇數(shù)和偶數(shù)的個(gè)數(shù)*/intmain(){inta[5]={10,2,5,23,49};inti,j=0,k=0; //定義j和k為偶數(shù)個(gè)數(shù)和奇數(shù)個(gè)數(shù)for(i=0;i<5;i++)
printf("a[%d]=%d\n",i,a[i]);1一維數(shù)組1.4一維數(shù)組的應(yīng)用for(i=0;i<5;i++) { if(a[i]%2==0)//在取余時(shí),結(jié)果為0則表示該數(shù)為偶數(shù) {printf("%d為偶數(shù)\n",a[i]); j++;} else {printf("%d為奇數(shù)\n",a[i]); k++;} }printf("偶數(shù)個(gè)數(shù)為:%d個(gè),奇數(shù)個(gè)數(shù)為:%d個(gè)",j,k); return0;}作業(yè)將一個(gè)學(xué)生的5門課程成績(jī)存儲(chǔ)在一個(gè)數(shù)組中,求出這5門課程的平均成績(jī),并輸出低于平均成績(jī)的課程分?jǐn)?shù)。02PARTTWO二維數(shù)組2二維數(shù)組2.1二維數(shù)組的定義二維數(shù)組形式如下:
類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];常量表達(dá)式1:表示第一維下標(biāo)的長(zhǎng)度常量表達(dá)式2:表示第二維下標(biāo)的長(zhǎng)度
例如:一個(gè)學(xué)習(xí)小組中有5個(gè)學(xué)生,每個(gè)學(xué)生有3門考試成績(jī),則可定義如下數(shù)組:
floata[5][3];
該數(shù)組共有5×3個(gè)元素,即:
a[0][0],a[0][1],a[0][2]
a[1][0],a[1][1],a[1][2]a[2][0],a[2][1],a[2][2]
a[3][0],a[3][1],a[3][2]
a[4][0],a[4][1],a[4][2]2二維數(shù)組2.1二維數(shù)組的定義注意:二維數(shù)組元素的下標(biāo)也是從0開始的,a[i][j]表示第i+1行、第j+1列的元素;定義數(shù)組時(shí)用到的“數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]”和引用數(shù)組元素時(shí)用到的“數(shù)組名[下標(biāo)1][下標(biāo)2]”是有區(qū)別的。前者是定義一個(gè)數(shù)組,指定該數(shù)組的維數(shù)和各維的長(zhǎng)度。而后者是通過下標(biāo),指定一個(gè)具體的數(shù)組元素;二維數(shù)組在實(shí)際的硬件存儲(chǔ)器中是連續(xù)存儲(chǔ)的,即按行依次存儲(chǔ),每行中的各個(gè)元素同樣依次存儲(chǔ)。2二維數(shù)組2.1二維數(shù)組的定義例如:
inta[3][4];
定義了一個(gè)3行4列的二維數(shù)組,它在存儲(chǔ)器中存儲(chǔ)的方式如圖所示。2二維數(shù)組2.2二維數(shù)組元素的引用二維數(shù)組元素引用格式如下:
數(shù)組名[下標(biāo)1][下標(biāo)2]在引用數(shù)組元素時(shí)應(yīng)注意以下幾點(diǎn):(1)下標(biāo)是整型或字符型常量、變量或表達(dá)式;(2)數(shù)組元素可出現(xiàn)在表達(dá)式中,如a[1][2]=a[2][2]/2;(3)使用數(shù)組元素時(shí),應(yīng)注意不要超出其定義的范圍。2二維數(shù)組2.2二維數(shù)組元素的引用【例9-2-1】通過鍵盤給3行3列的二維數(shù)組賦初值并輸出數(shù)組各元素的值。#include<stdio.h>/*通過鍵盤給3行3列的二維數(shù)組賦初值并輸出數(shù)組各元素的值*/intmain(){inti,j,a[3][3];printf("請(qǐng)輸入9個(gè)數(shù):");2二維數(shù)組2.2二維數(shù)組元素的引用for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]);for(i=0;i<3;i++) for(j=0;j<3;j++) printf("\na[%d][%d]=%d",i,j,a[i][j]); return0;}2二維數(shù)組2.3二維數(shù)組的初始化可使用以下幾種方法對(duì)二維數(shù)組進(jìn)行初始化:(1)將所有數(shù)據(jù)寫在一個(gè)大括號(hào)內(nèi),以逗號(hào)分隔,按數(shù)組元素在內(nèi)存中的排列順序?qū)ζ滟x值。例如:
inta[2][3]={0,1,2,3,4,5};賦值后各元素的值如下:012345(2)分行對(duì)數(shù)組元素賦值。例如:
inta[2][3]={{0,1,2},{4,5,6}};賦值后各元素的值如下:0124562二維數(shù)組2.3二維數(shù)組的初始化可使用以下幾種方法對(duì)二維數(shù)組進(jìn)行初始化:(3)對(duì)部分元素賦值,未賦值的元素取0值。例如:
inta[2][3]={{1},{4}};賦值后各元素的值如下:100400(4)若對(duì)全部元素賦初值,則定義時(shí)第一維長(zhǎng)度可省略,可由第二維長(zhǎng)度自動(dòng)確定第一維長(zhǎng)度。例如:
inta[][3]={0,1,2,3,4,5};相當(dāng)于inta[2][3]={0,1,2,3,4,5};2二維數(shù)組2.4二維數(shù)組的應(yīng)用【例9-2-2】表2-9-1為某公司2019年度第一季度銷售統(tǒng)計(jì)表,請(qǐng)將表中數(shù)據(jù)輸入數(shù)組,并找出哪位員工哪個(gè)月的銷售額最高。2二維數(shù)組2.4二維數(shù)組的應(yīng)用#include<stdio.h>/*在數(shù)組中找出哪位員工哪個(gè)月的銷售額最高*/intmain(){inti,j,staff=0,month=0,max;inta[][3]={10,9,12,20,18,22,12,15,16,14,10,16};max=a[0][0];for(i=0;i<=3;i++) { for(j=0;j<=2;j++) printf("%-5d",a[i][j]); printf("\n"); }2二維數(shù)組2.4二維數(shù)組的應(yīng)用for(i=0;i<=3;i++) for(j=0;j<=2;j++) if(a[i][j]>max) { max=a[i][j]; staff=i+1;month=j+1; }
printf("最大單月銷售額=%d,單月銷售額最高的員工=員工%d,所在月份為=%d月\n",max,staff,month); return0;}2二維數(shù)組2.4二維數(shù)組的應(yīng)用【例9-2-3】根據(jù)表2-9-1,分別求該公司每月銷售額、每名員工第一季度銷售額和4名員工第一季度銷售總額。#include<stdio.h>/*求每月銷售額、每名員工第一季度銷售額和4名員工第一季度銷售總額*/intmain(){printf("請(qǐng)輸入表中數(shù)據(jù):\n");inta[5][4],i,j;for(i=0;i<4;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);for(i=0;i<3;i++)
a[4][i]=0;for(j=0;j<5;j++)
a[j][3]=0;2二維數(shù)組2.4二維數(shù)組的應(yīng)用for(i=0;i<4;i++)for(j=0;j<3;j++){ a[i][3]+=a[i][j];a[4][j]+=a[i][j];a[4][3]+=a[i][j];}for(i=0;i<5;i++) {for(j=0;j<4;j++) printf("%-5d\t",a[i][j]);printf("\n"); }printf("第一季度每月銷售額為:%5d,%5d,%5d\n",a[4][0],a[4][1],a[4][2]);printf("每名員工第一季度銷售額為:%5d,%5d,%5d,%5d\n",a[0][3],a[1][3],a[2][3],a[3][3]);printf("第一季度的銷售總額為:%5d\n",a[4][3]); return0;}作業(yè)試編寫一個(gè)C語言程序,將二維數(shù)組a中的行列元素互換,存到另一個(gè)數(shù)組b中。
03PARTTHREE字符數(shù)組3.1字符數(shù)組的定義字符數(shù)組:用來存放字符的,字符數(shù)組中的一個(gè)元素對(duì)應(yīng)一個(gè)字符。一維字符數(shù)組的定義格式:
char數(shù)組名[常量表達(dá)式];
例如:
chara[5];
二維字符數(shù)組的定義格式:
char數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];
例如:
chara[2][3];3.2字符數(shù)組元素的引用二維字符數(shù)組元素的引用格式:數(shù)組名[行下標(biāo)][列下標(biāo)];一維字符數(shù)組元素的引用格式:數(shù)組名[下標(biāo)];用下標(biāo)指定要引用的數(shù)組元素3.3字符數(shù)組的初始化字符數(shù)組初始化有下面兩種方式:(1)對(duì)數(shù)組元素逐個(gè)初始化例如:
chara[10]={'I','','a','m','','h','a','p','p','y'};
字符數(shù)組a在內(nèi)存中的存儲(chǔ)形式見表2-9-2。
字符數(shù)組a在內(nèi)存中的存儲(chǔ)形式如下表:數(shù)組元素a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]元素的值I
am
happy3.3字符數(shù)組的初始化注意:如果初始化時(shí)元素的個(gè)數(shù)小于數(shù)組長(zhǎng)度,則多余元素自動(dòng)為'\0'('\0'是二進(jìn)制的0)。例如:chara[10]={'C','','p','r','o','g','r','a','m'};
a[9]=\0',即a[9]=0。
指定初值時(shí),若未指定數(shù)組長(zhǎng)度,則數(shù)組長(zhǎng)度等于初值個(gè)數(shù)。例如:
chara[]={'I','','a','m','','h','a','p','p','y'};
等價(jià)于
chara[10]={'I','','a','m','','h','a','p','p','y'};3.3字符數(shù)組的初始化(2)用字符串常量對(duì)數(shù)組進(jìn)行初始化。
例如:
chara[]={"Iamhappy"};
字符串在進(jìn)行存儲(chǔ)時(shí),系統(tǒng)會(huì)自動(dòng)在其后加上結(jié)束標(biāo)志'\0'。
另外,字符數(shù)組也允許在定義時(shí)進(jìn)行初始化。3.3字符數(shù)組的初始化【例9-3-1】輸出一個(gè)字符串“Wuhanjiayou”。#include<stdio.h>/*輸出一個(gè)字符串“Wuhanjiayou”*/intmain(){charc[12]={'W','u','h','a','n','','j','i','a','y','o','u'};inti;for(i=0;i<12;i++) printf("%c",c[i]); printf("\n"); return0;}3.3字符數(shù)組的初始化【例9-3-2】用“*”輸出一個(gè)三角形圖形。#include<stdio.h>/*用“*”輸出一個(gè)三角形圖形*/intmain(){chara[][5]={{'','','*'},{'','*','','*'},{'*','*','*','*','*'}};inti,j;for(i=0;i<3;i++){ for(j=0;j<5;j++) printf("%c",a[i][j]); printf("\n");} return0;}3.4字符串和字符串結(jié)束標(biāo)志字符串常量是用雙引號(hào)括起來的一串字符,并用'\0'(ASCII碼為0)作為字符串的結(jié)束標(biāo)志,這個(gè)標(biāo)志占1字節(jié)內(nèi)存空間,但不計(jì)入字符串的長(zhǎng)度。在C語言中,沒有專門的字符串變量,通常用一個(gè)字符數(shù)組來存放一個(gè)字符串。例如:
chara[]={'I','','a','m','','h','a','p','p','y'};可寫為
chara[]={"Iamhappy"};3.4字符串和字符串結(jié)束標(biāo)志在使用字符串時(shí)應(yīng)注意以下幾點(diǎn):用字符串賦值時(shí),無須指定數(shù)組長(zhǎng)度。以字符串形式對(duì)字符數(shù)組進(jìn)行初始化,系統(tǒng)會(huì)自動(dòng)在該字符串后面加結(jié)束標(biāo)志'\0'。在C語言中,以字符串形式賦值要比對(duì)數(shù)組中的字符逐個(gè)賦值多占1字節(jié),多占的字節(jié)用于存放字符串結(jié)束標(biāo)志'\0'。上面的例子在內(nèi)存中的實(shí)際存儲(chǔ)情況為Iamhappy'\0',字符串結(jié)束標(biāo)志'\0'是由編譯系統(tǒng)自動(dòng)加上的。由于系統(tǒng)加上了字符串結(jié)束標(biāo)志'\0',所以在用字符串賦值時(shí)不用指定字符數(shù)組的長(zhǎng)度,而由系統(tǒng)自行處理。在采用字符串方式后,字符數(shù)組的輸入和輸出將變得簡(jiǎn)單方便??梢杂胹canf()函數(shù)和printf()函數(shù)一次性輸入和輸出一個(gè)字符數(shù)組中的字符串,而不必使用循環(huán)語句逐個(gè)輸入和輸出字符。3.5字符數(shù)組的輸入和輸出1.逐個(gè)字符輸入和輸出;例:用格式符"%c"輸入或輸出一個(gè)字符串。#include<stdio.h>/*用格式符"%c"輸入或輸出一個(gè)字符串*/intmain(){chara[5];inti;for(i=0;i<5;i++) scanf("%c",&a[i]);for(i=0;i<5;i++) printf("%c",a[i]); return0;}2.整串輸入和輸出用格式符"%s"可輸入、輸出字符串。將字符串存放在一個(gè)字符數(shù)組中,在輸入或輸出字符串時(shí)可直接使用數(shù)組名。例:整串輸入和輸出。#include<stdio.h>/*整串輸入和輸出。*/intmain(){chara[15];scanf("%s",a);printf("%s",a); return0;}可以利用字符數(shù)組對(duì)單個(gè)字符和字符串進(jìn)行輸入和輸出操作。小貼士整串輸入和輸出應(yīng)注意以下幾點(diǎn):scanf()函數(shù)在用字符數(shù)組名輸入時(shí)前面不要加&,同時(shí)輸入的字符串長(zhǎng)度應(yīng)小于數(shù)組長(zhǎng)度,遇空格或回車符會(huì)結(jié)束輸入并自動(dòng)加'\0'。在printf()函數(shù)中使用的格式符為"%s",表示輸出的是一個(gè)字符串,在輸出列表中給出數(shù)組名即可。為了能將字符全部輸出,可以多設(shè)幾個(gè)字符數(shù)組來存放含空格的字符串。3.5字符數(shù)組的輸入和輸出【例9-3-5】整串輸入和輸出。#include<stdio.h>/*整串輸入和輸出。*/intmain(){chara[10],b[10];scanf("%s%s",a,b);printf("a=%s\nb=%s\n",a,b);printf("%s%s\n",a,b); return0;}3.6字符串處理函數(shù)C語言中有很多的字符串處理函數(shù),主要用于字符串的輸入、輸出、復(fù)制、連接、比較等;使用字符串輸入和輸出函數(shù)時(shí),要在程序中包含頭文件“stdio.h”;使用其他字符串函數(shù)時(shí),要在程序中包含頭文件“string.h”。幾個(gè)常用的字符串函數(shù):1.字符串輸入函數(shù)gets()gets()函數(shù)的一般調(diào)用格式如下:gets(字符數(shù)組名);gets()函數(shù)的作用是從鍵盤輸入字符串(字符串可以包含空格),直到遇到回車符為止,回車符讀入后不作為字符串的內(nèi)容,系統(tǒng)將自動(dòng)加上'\0',作為字符串的結(jié)束標(biāo)志。注意:輸入字符串的長(zhǎng)度應(yīng)小于字符數(shù)組的長(zhǎng)度。
在scanf()函數(shù)中遇空格就結(jié)束輸入,而在gets()函數(shù)中卻將空格作為字符存入字符數(shù)組中。3.6字符串處理函數(shù)【例9-3-6】用函數(shù)gets()輸入一個(gè)字符串。
#include<stdio.h>/*用函數(shù)gets()輸入一個(gè)字符串*/intmain(){chara1[15],a2[15];gets(a1);scanf("%s",a2);printf("a1=%s\n",a1);printf("a2=%s\n",a2); return0;}3.6字符串處理函數(shù)2.字符串復(fù)制函數(shù)strcpy()strcpy()函數(shù)的一般調(diào)用格式如下:strcpy(字符數(shù)組1,字符數(shù)組2);功能:把字符數(shù)組2所指向的字符串復(fù)制到字符數(shù)組1所指向的字符數(shù)組中。字符串結(jié)束標(biāo)志'\0'也一同復(fù)制。字符數(shù)組2也可以是一個(gè)字符串常量,這時(shí)相當(dāng)于把一個(gè)字符串賦給一個(gè)字符數(shù)組。返回值:返回字符數(shù)組1的首地址。在使用strcpy()函數(shù)時(shí)應(yīng)注意:
(1)字符數(shù)組1必須是數(shù)組名形式(str1)。
(2)字符數(shù)組2可以是數(shù)組名形式或字符串常量。3.6字符串處理函數(shù)3.求字符串長(zhǎng)度函數(shù)strlen()strlen()函數(shù)的一般調(diào)用格式如下:strlen(字符數(shù)組);功能:計(jì)算以字符數(shù)組為起始地址的字符串的長(zhǎng)度(不包含字符串結(jié)束標(biāo)志'\0'),并作為函數(shù)值返回。3.6字符串處理函數(shù)【例9-3-7】求字符串長(zhǎng)度。#include<stdio.h>#include<string.h>/*求字符串長(zhǎng)度*/intmain(){chara1[10]="wuhan";printf("%d\n",strlen(a1));printf("%d\n",strlen("wuhan\0jiayou")); return0;}3.6字符串處理函數(shù)4.字符串輸出函數(shù)puts()puts()函數(shù)的一般調(diào)用格式如下:puts(字符數(shù)組名);功能:該函數(shù)的作用是向顯示器輸出一個(gè)字符串,從字符數(shù)組指定的地址開始,依次輸出存儲(chǔ)單元中的字符,直到遇到字符串結(jié)束標(biāo)志為止,字符串輸出結(jié)束后換行。3.6字符串處理函數(shù)【例9-3-8】用函數(shù)puts()輸出一個(gè)字符串。#include<stdio.h>/*用函數(shù)puts()輸出一個(gè)字符串*/intmain(){chara1[]="Wuhan\njiayou";chara2[]="Wuhan\0jiayou";puts(a1);puts(a2);puts("WUHAN"); return0;}運(yùn)行結(jié)果顯示:字符數(shù)組a1輸出時(shí)遇到'\n',所以換行輸出后面的字符;字符數(shù)組a2輸出時(shí)遇到'\0',此時(shí)結(jié)束輸出并將'\0'轉(zhuǎn)換成'\n',因此光標(biāo)移到下一行。當(dāng)輸出有格式要求時(shí),通常使用printf()函數(shù)。3.6字符串處理函數(shù)5.字符串連接函數(shù)strcat()strcat()函數(shù)的一般調(diào)用格式如下:strcat(字符數(shù)組1,字符數(shù)組2);
功能:把字符數(shù)組2所指向的字符串連到字符數(shù)組1所指向的字符串后面,并自動(dòng)覆蓋字符數(shù)組1所指向的字符串的尾部字符'\0'。返回值:返回字符數(shù)組1的首地址。3.6字符串處理函數(shù)【例9-3-9】用字符串連接函數(shù)strcat()連接兩個(gè)字符串。#include<stdio.h>#include<string.h>/*用字符串連接函數(shù)strcat()連接兩個(gè)字符串*/intmain(){charstr1[20]={"Iama"};charstr2[]={"student"};strcat(str1,str2);printf("%s\n",str1); return0;}3.7字符數(shù)組的應(yīng)用【例9-3-10】從鍵盤輸入一個(gè)字符串,并復(fù)制到另一字符串后面顯示出來。#include<stdio.h>#include<string.h>/*輸入一個(gè)字符串,并復(fù)制到另一字符串后面顯示出來*/intmain(){charstr1[20],str2[20];inti;printf("inputastring:");gets(str1);i=0;3.7字符數(shù)組的應(yīng)用while(str1[i]!='\0'){str2[i]=str1[i];i++;}str2[i]='\0';printf("%s",str2); return0;}3.7字符數(shù)組的應(yīng)用【例9-3-11】針對(duì)上例,要求采用字符串復(fù)制函數(shù)實(shí)現(xiàn)相同的功能,并分別計(jì)算兩個(gè)字符串的長(zhǎng)度。
#include<stdio.h>#include<string.h>/*輸入一個(gè)字符串,并復(fù)制到另一字符串后面顯示出來,同時(shí)計(jì)算兩個(gè)字符串的長(zhǎng)度*/intmain(){charstr1[20],str2[20];printf("inputastring:");gets(str1);strcpy(str2,str1);printf("%s\n",str2);printf("str1字符數(shù)組字符串長(zhǎng)度為:%d\n",strlen(str1));printf("str2字符數(shù)組字符串長(zhǎng)度為:%d\n",strlen(str2));
return0;}3.8數(shù)組的應(yīng)用項(xiàng)目案例項(xiàng)目需求:新書上架可以新增新進(jìn)圖書及基本信息舊書下架可以刪除舊圖書及基本信息圖書查詢能查詢要借閱的圖書信息圖書借閱能為用戶辦理借書手續(xù)圖書歸還能為用戶辦理還書手續(xù)某圖書館需要使用C語言開發(fā)一個(gè)圖書管理系統(tǒng),要求圖書館管理系統(tǒng)包括以下功能:3.8數(shù)組的應(yīng)用項(xiàng)目案例系統(tǒng)以菜單方式工作。用戶可以對(duì)本系統(tǒng)進(jìn)行查詢或修改操作,如根據(jù)用戶的需求能夠進(jìn)行添加操作、刪除操作、借還操作,也可以查找所要的圖書、查閱圖書的詳細(xì)資料、查閱讀者的詳細(xì)資料,并能清晰完整地顯示結(jié)果。本案例采用結(jié)構(gòu)體來存儲(chǔ)這些數(shù)據(jù)類型。比如在讀者類和圖書類結(jié)構(gòu)體中,定義了讀者和圖書的各種屬性,結(jié)構(gòu)體的成員包含了多個(gè)變量或數(shù)組(包含一維數(shù)組和字符數(shù)組),采用字符串輸入函數(shù)gets()獲得書籍信息,部分程序如下:本案例采用結(jié)構(gòu)體來存儲(chǔ)這些數(shù)據(jù)類型。比如在讀者類和圖書類結(jié)構(gòu)體中,定義了讀者和圖書的各種屬性,結(jié)構(gòu)體的成員包含了多個(gè)變量或數(shù)組(包含一維數(shù)組和字符數(shù)組),采用字符串輸入函數(shù)gets()獲得書籍信息。3.8數(shù)組的應(yīng)用項(xiàng)目案例部分程序如下:#include<stdlib.h>#include<stdio.h>#include"math.h"structReader/*讀者結(jié)構(gòu)*/{ charnum[20];/*借書證號(hào)*/ structDatebro;/*借出時(shí)間*/ structDateback;/*歸還時(shí)間*/};
3.8數(shù)組的應(yīng)用項(xiàng)目案例structBook/*書本結(jié)構(gòu)*/{ intm_iBook_Number;/*對(duì)應(yīng)書本號(hào)*/ charm_strTitle[150];/*書名*/ charm_strWroter[150];/*作者*/ intm_nMoreNum;/*當(dāng)前在架冊(cè)數(shù)*/ intm_nTotalHoldNum;/*館藏冊(cè)數(shù)*/ charm_strComment[300];/*圖書簡(jiǎn)介*/ structReaderreader[200];};...
3.8數(shù)組的應(yīng)用項(xiàng)目案例structBook*InputNode(){ structBook*p=NULL; inti; p=(structBook*)malloc(sizeof(structBook));/*分配內(nèi)存*/ system("cls");/*清屏*/ fflush(stdin);/*清除以前的輸入*/ printf("\n\t請(qǐng)輸入書名:"); gets(p->m_strTitle);/*從鍵盤取得書名*/ printf("\n\t請(qǐng)輸入作者:"); gets(p->m_strWroter);/*從鍵盤取得作者*/
3.8數(shù)組的應(yīng)用項(xiàng)目案例structBook*InputNode(){ structBook*p=NULL; inti; p=(structBook*)malloc(sizeof(structBook));/*分配內(nèi)存*/ system("cls");/*清屏*/ fflush(stdin);/*清除以前的輸入*/ printf("\n\t請(qǐng)輸入書名:"); gets(p->m_strTitle);/*從鍵盤取得書名*/ printf("\n\t請(qǐng)輸入作者:"); gets(p->m_strWroter);/*從鍵盤取得作者*/
3.8數(shù)組的應(yīng)用項(xiàng)目案例printf("\n\t請(qǐng)輸入當(dāng)前在架數(shù)量:"); scanf("%d",&p->m_nMoreNum);/*從鍵盤取得當(dāng)前在架數(shù)量*/ printf("\n\t請(qǐng)輸入庫存數(shù)量:"); scanf("%d",&p->m_nTotalHoldNum);/*從鍵盤取得當(dāng)前庫存數(shù)量*/ fflush(stdin); printf("\n\t請(qǐng)輸入圖書簡(jiǎn)介:");/*從鍵盤取得圖書內(nèi)容簡(jiǎn)要介紹*/ gets(p->m_strComment); /*以上從輸入輸出設(shè)備取得要求的信息*/ for(i=0;i<20;i++) (p->reader[i]).num[0]='\0';/*初始化書的各個(gè)結(jié)構(gòu)成員的相關(guān)讀者指針內(nèi)容為空*/ return(p);/*返回成功插入的一個(gè)圖書信息*/}... 作業(yè)針對(duì)【例9-3-11】的例子,如果使用scanf()函數(shù)輸入字符串到字符數(shù)組str1中,其輸出結(jié)果有什么不同?試編寫C語言程序,并調(diào)試運(yùn)行。
04PARTFOUR數(shù)碼管靜態(tài)顯示系統(tǒng)設(shè)計(jì)4.1數(shù)碼管的工作原理及結(jié)構(gòu)按發(fā)光二極管單元連接方式可分為:共陽極數(shù)碼管共陰極數(shù)碼管共陽極數(shù)碼管:將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽極數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),該字段就點(diǎn)亮;當(dāng)某一字段發(fā)光二極管的陰極為高電平時(shí),該字段就不亮。4.1數(shù)碼管的工作原理及結(jié)構(gòu)共陰極數(shù)碼管:將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰極數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線(GND)上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時(shí),該字段就點(diǎn)亮;當(dāng)某一字段發(fā)光二極管的陽極為低電平時(shí),該字段就不亮。4.1數(shù)碼管的工作原理及結(jié)構(gòu)數(shù)碼管的每一段是由發(fā)光二極管組成的,所以在使用時(shí)和發(fā)光二極管一樣,也要連接限流電阻,否則電流過大會(huì)燒壞發(fā)光二極管。想讓數(shù)碼管顯示數(shù)字,只要將相應(yīng)的段點(diǎn)亮即可。例如,想讓數(shù)碼管顯示數(shù)字“1”,則將b、c段點(diǎn)亮,其余段不亮;想顯示數(shù)字“2”,則將a、b、g、e、d段點(diǎn)亮,其余段不亮。4.1數(shù)碼管的工作原理及結(jié)構(gòu)本案例使用共陰極數(shù)碼管,將數(shù)碼管的a~dp引腳連到Arduino開發(fā)板上的4~11號(hào)數(shù)字端口,向數(shù)字端口寫入不同字形編碼,即可顯示不同數(shù)字。共陰極數(shù)碼管的字形編碼見表2-9-3。4.1數(shù)碼管的工作原理及結(jié)構(gòu)本案例使用共陰極數(shù)碼管,將數(shù)碼管的a~dp引腳連到Arduino開發(fā)板上的4~11號(hào)數(shù)字端口,向數(shù)字端口寫入不同字形編碼,即可顯示不同數(shù)字。共陰極數(shù)碼管的字形編碼見表2-9-3。4.1數(shù)碼管的工作原理及結(jié)構(gòu)如何判斷數(shù)碼管是共陽極數(shù)碼管還是共陰極數(shù)碼管?
1.利用Arduino開發(fā)板上的電源接口判斷首先假設(shè)數(shù)碼管是共陰極的,把Arduino開發(fā)板上的GND端口和數(shù)碼管的COM引腳相連。為了避免電流過大燒壞數(shù)碼管,在電路中串接一個(gè)220Ω電阻。然后用導(dǎo)線把Arduino開發(fā)板上的5V端口和數(shù)碼管的其他任意引腳連接起來,如果此時(shí)數(shù)碼管某一段點(diǎn)亮,則可以確定GND端口所連接的COM引腳為負(fù)極,其他引腳為正極,所以前面的假設(shè)成立,數(shù)碼管為共陰極數(shù)碼管。如果數(shù)碼管任何一段都不亮,一般情況下,可判斷該數(shù)碼管為共陽極數(shù)碼管。為了確保準(zhǔn)確性,應(yīng)調(diào)換圖中電源的正負(fù)極重新進(jìn)行測(cè)試。如果連接的數(shù)碼管某一段點(diǎn)亮,則說明此數(shù)碼管為共陽極數(shù)碼管。4.1數(shù)碼管的工作原理及結(jié)構(gòu)如何判斷數(shù)碼管是共陽極數(shù)碼管還是共陰極數(shù)碼管?
2.使用萬用表判斷將萬用表調(diào)到電阻測(cè)量擋位,紅表筆接數(shù)碼管的COM引腳,黑表筆接數(shù)碼管的其他任意引腳,如果此時(shí)數(shù)碼管上某一段點(diǎn)亮,則說明此數(shù)碼管為共陰極數(shù)碼管。如果數(shù)碼管上任何一段都不亮,則說明此數(shù)碼管為共陽極數(shù)碼管。為了確保準(zhǔn)確性,應(yīng)調(diào)換黑表筆和紅表筆再測(cè)一次,如果此時(shí)數(shù)碼管上某一段點(diǎn)亮,則說明此數(shù)碼管為共陽極數(shù)碼管。4.2電路設(shè)計(jì)硬件清單本案例硬件清單見表2-9-4。4.2電路設(shè)計(jì)電路原理圖將Arduino開發(fā)板上的4~11號(hào)數(shù)字端口與數(shù)碼管的a~dp引腳相連,COM引腳接GND端口。為了避免電流過大燒壞數(shù)碼管,在每一段數(shù)碼管電路中串接一個(gè)220Ω電阻。4.2電路設(shè)計(jì)實(shí)物接線圖4.3源程序設(shè)計(jì)可以分別通過一維數(shù)組和二維數(shù)組編程,實(shí)現(xiàn)數(shù)碼管靜態(tài)顯示功能。1.采用一維數(shù)組實(shí)現(xiàn)數(shù)碼管的靜態(tài)顯示采用一維數(shù)組實(shí)現(xiàn)數(shù)碼管依次循環(huán)顯示數(shù)字,首先要定義4~11號(hào)端口,都設(shè)為OUTPUT模式,初始化為L(zhǎng)OW;主函數(shù)要分別顯示數(shù)字0~9。為每個(gè)數(shù)字的顯示定義一個(gè)一維數(shù)組,并按照表2-9-3中對(duì)應(yīng)的編碼初始化數(shù)組。4.3源程序設(shè)計(jì)Arduino程序代碼如下:voidsetup(){
for(intpin=4;pin<=11;pin++) //設(shè)置4~11號(hào)數(shù)字端口為輸出模式
{pinMode(pin,OUTPUT);
digitalWrite(pin,LOW);}
}voidloop(){//顯示數(shù)字0intn0[8]={1,1,1,1,1,1,0,0};//4~11號(hào)數(shù)字端口依次按數(shù)組n0[8]中的數(shù)據(jù)顯示for(intpin=4;pin<=11;pin++){digitalWrite(pin,n0[pin-4]);}delay(1000);4.3源程序設(shè)計(jì)//顯示數(shù)字1intn1[8]={0,1,1,0,0,0,0,0};//4~11號(hào)數(shù)字端口依次按數(shù)組n1[8]中的數(shù)據(jù)顯示for(intpin=4;pin<=11;pin++){digitalWrite(pin,n1[pin-4]);}delay(1000);//顯示數(shù)字2intn2[8]={1,1,0,1,1,0,1,0};//4~11號(hào)數(shù)字端口依次按數(shù)組n2[8]中的數(shù)據(jù)顯示for(intpin=4;pin<=11;pin++){digitalWrite(pin,n2[pin-4]);}delay(1000);
4.3源程序設(shè)計(jì)//顯示數(shù)字3intn3[8]={1,1,1,1,0,0,1,0};//4~11號(hào)數(shù)字端口依次按數(shù)組n3[8]中的數(shù)據(jù)顯示for(intpin=4;pin<=11;pin++){digitalWrite(pin,n3[pin-4]);}delay(1000);//顯示數(shù)字4intn4[8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023八年級(jí)數(shù)學(xué)上冊(cè) 第13章 全等三角形13.2三角形全等的判定 4角邊角說課稿 (新版)華東師大版
- 2024年四年級(jí)品社下冊(cè)《怎樣到達(dá)目的地》說課稿2 蘇教版
- 2025鋼質(zhì)門小型鋼結(jié)構(gòu)制作及安裝合同
- 2025個(gè)人電路出租合同書
- 2025公司經(jīng)理勞動(dòng)合同
- 道路邊坡加固維修施工方案
- 交通圍欄銷售合同范本
- 農(nóng)業(yè)營(yíng)銷合作合同范本
- 保溫鋼結(jié)構(gòu)合同范本
- Sara's Medicine(說課稿)-2023-2024學(xué)年麗聲北極星分級(jí)繪本四年級(jí)上(江蘇版)
- 全過程造價(jià)咨詢服務(wù)的質(zhì)量、進(jìn)度、保密等保證措施
- 縣城屠宰場(chǎng)建設(shè)可行性研究報(bào)告
- 25學(xué)年六年級(jí)數(shù)學(xué)寒假作業(yè)《每日一練》
- 2025高考數(shù)學(xué)一輪復(fù)習(xí)-第8章-第3節(jié) 圓的方程【課件】
- 人文關(guān)懷在護(hù)理工作中的體現(xiàn)
- 2025年1月八省聯(lián)考高考綜合改革適應(yīng)性測(cè)試-高三生物(陜西、山西、寧夏、青海卷) 含解析
- 環(huán)保行業(yè)深度研究報(bào)告
- 開工第一課安全培訓(xùn)內(nèi)容
- 社會(huì)主義核心價(jià)值觀課件
- 《公路養(yǎng)護(hù)安全培訓(xùn)》課件
- 公益捐助活動(dòng)影響力評(píng)估方法
評(píng)論
0/150
提交評(píng)論