版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
智能小車C語言程序控制秦磊
梁爽
主編第9章數(shù)碼管靜態(tài)顯示
數(shù)碼管是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管。數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管(顯示時多一個小數(shù)點)。
數(shù)碼管靜態(tài)顯示就是當(dāng)數(shù)碼管顯示某一字符時,相應(yīng)的發(fā)光二極管恒定導(dǎo)通或者截止。一個八段數(shù)碼管有8個發(fā)光二極管,其顯示的字符可以采用前面介紹的點亮發(fā)光二極管的方式控制,即采用基本數(shù)據(jù)類型定義每個發(fā)光二極管對應(yīng)引腳的變量。利用基本數(shù)據(jù)類型可以解決一些簡單的問題。對于復(fù)雜的問題,則需要使用數(shù)組。
數(shù)組是指按序排列的相同類型的數(shù)據(jù)元素的集合。例如,可以用數(shù)組表示一個班級里面所有學(xué)生的英語成績所組成的集合。數(shù)組中的元素是有排列順序的。數(shù)組元素用數(shù)組名和下標(biāo)確定,下標(biāo)是數(shù)組中各個元素的數(shù)字編號。
在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è)計01PARTONE一維數(shù)組1一維數(shù)組1.1一維數(shù)組的定義一維數(shù)組:數(shù)組中每個元素只帶有一個下標(biāo)格式如下:
類型說明符
數(shù)組名[常量表達式];類型說明符:可以是任意一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型數(shù)組名:用戶定義的數(shù)組標(biāo)識符常量表達式:數(shù)組元素的個數(shù),也稱數(shù)組長度[]:數(shù)組運算符例如:inta[6];floatb[3],c[4];charch[10];1一維數(shù)組1.1一維數(shù)組的定義數(shù)組的特點:同一個數(shù)組中所有元素的數(shù)據(jù)類型都是相同的;各元素的存儲在內(nèi)存中按照先后順序連續(xù)存儲在一起;數(shù)組元素用數(shù)組的名稱和它在數(shù)組中的順序來表示。例如:a[0]代表數(shù)組a中的第一個元素a[1]代表數(shù)組a中的第二個元素1一維數(shù)組1.2一維數(shù)組元素的引用數(shù)組元素的表示:
數(shù)組名[下標(biāo)]
注意:數(shù)組元素必須先定義后引用引用時下標(biāo)從“0”開始下標(biāo)可以是整型常量或表達式,表達式內(nèi)允許變量存在下標(biāo)不能使用變量只能對數(shù)組元素進行引用,如a[0]、a[i]、a[i+1]等,而不能引用整個數(shù)組對變量的任何操作都適用于數(shù)組元素引用數(shù)組元素時下標(biāo)不能出界1一維數(shù)組1.2一維數(shù)組元素的引用例如:輸出有10個元素的數(shù)組。/*輸出有10個元素的數(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ù)組元素賦初值用賦值語句給數(shù)組元素逐個賦值輸入語句給數(shù)組元素逐個賦值①②③1一維數(shù)組1.3一維數(shù)組的初始化例如:inta[5]={0,1,2,3,4};等價于a[0]=0;a[1]=1;a[2]=2;a[3]=3;a[4]=4;(1)在定義數(shù)組時對數(shù)組元素賦初值例如:inta[5]={1,2,3};等價于a[0]=1;a[1]=2;a[2]=3;a[3]=0;a[4]=0;(2)只給部分元素賦值在定義數(shù)組時對數(shù)組元素賦初值,在編譯階段可使數(shù)組元素得到初值,這樣能減少運行時間,提高程序運行效率。1一維數(shù)組1.3一維數(shù)組的初始化例如,對數(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};等價于inta[8]={1,2,3,4,5,6,7,8};編譯程序時系統(tǒng)會根據(jù)初值的個數(shù)確定數(shù)組長度。(4)數(shù)組元素賦初值時,可以不指定長度1一維數(shù)組1.4一維數(shù)組的應(yīng)用【例9-1-3】從鍵盤輸入10個數(shù),求其中的最小值并顯示出來。
#include<stdio.h>/*從鍵盤輸入10個數(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)計奇數(shù)和偶數(shù)的個數(shù)。
#include<stdio.h>/*求出數(shù)組元素中的奇數(shù)和偶數(shù),并統(tǒng)計奇數(shù)和偶數(shù)的個數(shù)*/intmain(){inta[5]={10,2,5,23,49};inti,j=0,k=0; //定義j和k為偶數(shù)個數(shù)和奇數(shù)個數(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)//在取余時,結(jié)果為0則表示該數(shù)為偶數(shù) {printf("%d為偶數(shù)\n",a[i]); j++;} else {printf("%d為奇數(shù)\n",a[i]); k++;} }printf("偶數(shù)個數(shù)為:%d個,奇數(shù)個數(shù)為:%d個",j,k); return0;}作業(yè)將一個學(xué)生的5門課程成績存儲在一個數(shù)組中,求出這5門課程的平均成績,并輸出低于平均成績的課程分?jǐn)?shù)。02PARTTWO二維數(shù)組2二維數(shù)組2.1二維數(shù)組的定義二維數(shù)組形式如下:
類型說明符數(shù)組名[常量表達式1][常量表達式2];常量表達式1:表示第一維下標(biāo)的長度常量表達式2:表示第二維下標(biāo)的長度
例如:一個學(xué)習(xí)小組中有5個學(xué)生,每個學(xué)生有3門考試成績,則可定義如下數(shù)組:
floata[5][3];
該數(shù)組共有5×3個元素,即:
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ù)組名[常量表達式1][常量表達式2]”和引用數(shù)組元素時用到的“數(shù)組名[下標(biāo)1][下標(biāo)2]”是有區(qū)別的。前者是定義一個數(shù)組,指定該數(shù)組的維數(shù)和各維的長度。而后者是通過下標(biāo),指定一個具體的數(shù)組元素;二維數(shù)組在實際的硬件存儲器中是連續(xù)存儲的,即按行依次存儲,每行中的各個元素同樣依次存儲。2二維數(shù)組2.1二維數(shù)組的定義例如:
inta[3][4];
定義了一個3行4列的二維數(shù)組,它在存儲器中存儲的方式如圖所示。2二維數(shù)組2.2二維數(shù)組元素的引用二維數(shù)組元素引用格式如下:
數(shù)組名[下標(biāo)1][下標(biāo)2]在引用數(shù)組元素時應(yīng)注意以下幾點:(1)下標(biāo)是整型或字符型常量、變量或表達式;(2)數(shù)組元素可出現(xiàn)在表達式中,如a[1][2]=a[2][2]/2;(3)使用數(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("請輸入9個數(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ù)組的初始化可使用以下幾種方法對二維數(shù)組進行初始化:(1)將所有數(shù)據(jù)寫在一個大括號內(nèi),以逗號分隔,按數(shù)組元素在內(nèi)存中的排列順序?qū)ζ滟x值。例如:
inta[2][3]={0,1,2,3,4,5};賦值后各元素的值如下:012345(2)分行對數(shù)組元素賦值。例如:
inta[2][3]={{0,1,2},{4,5,6}};賦值后各元素的值如下:0124562二維數(shù)組2.3二維數(shù)組的初始化可使用以下幾種方法對二維數(shù)組進行初始化:(3)對部分元素賦值,未賦值的元素取0值。例如:
inta[2][3]={{1},{4}};賦值后各元素的值如下:100400(4)若對全部元素賦初值,則定義時第一維長度可省略,可由第二維長度自動確定第一維長度。例如:
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)計表,請將表中數(shù)據(jù)輸入數(shù)組,并找出哪位員工哪個月的銷售額最高。2二維數(shù)組2.4二維數(shù)組的應(yīng)用#include<stdio.h>/*在數(shù)組中找出哪位員工哪個月的銷售額最高*/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("請輸入表中數(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è)試編寫一個C語言程序,將二維數(shù)組a中的行列元素互換,存到另一個數(shù)組b中。
03PARTTHREE字符數(shù)組3.1字符數(shù)組的定義字符數(shù)組:用來存放字符的,字符數(shù)組中的一個元素對應(yīng)一個字符。一維字符數(shù)組的定義格式:
char數(shù)組名[常量表達式];
例如:
chara[5];
二維字符數(shù)組的定義格式:
char數(shù)組名[常量表達式1][常量表達式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)對數(shù)組元素逐個初始化例如:
chara[10]={'I','','a','m','','h','a','p','p','y'};
字符數(shù)組a在內(nèi)存中的存儲形式見表2-9-2。
字符數(shù)組a在內(nèi)存中的存儲形式如下表:數(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ù)小于數(shù)組長度,則多余元素自動為'\0'('\0'是二進制的0)。例如:chara[10]={'C','','p','r','o','g','r','a','m'};
a[9]=\0',即a[9]=0。
指定初值時,若未指定數(shù)組長度,則數(shù)組長度等于初值個數(shù)。例如:
chara[]={'I','','a','m','','h','a','p','p','y'};
等價于
chara[10]={'I','','a','m','','h','a','p','p','y'};3.3字符數(shù)組的初始化(2)用字符串常量對數(shù)組進行初始化。
例如:
chara[]={"Iamhappy"};
字符串在進行存儲時,系統(tǒng)會自動在其后加上結(jié)束標(biāo)志'\0'。
另外,字符數(shù)組也允許在定義時進行初始化。3.3字符數(shù)組的初始化【例9-3-1】輸出一個字符串“Wuhanjiayou”。#include<stdio.h>/*輸出一個字符串“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】用“*”輸出一個三角形圖形。#include<stdio.h>/*用“*”輸出一個三角形圖形*/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)志字符串常量是用雙引號括起來的一串字符,并用'\0'(ASCII碼為0)作為字符串的結(jié)束標(biāo)志,這個標(biāo)志占1字節(jié)內(nèi)存空間,但不計入字符串的長度。在C語言中,沒有專門的字符串變量,通常用一個字符數(shù)組來存放一個字符串。例如:
chara[]={'I','','a','m','','h','a','p','p','y'};可寫為
chara[]={"Iamhappy"};3.4字符串和字符串結(jié)束標(biāo)志在使用字符串時應(yīng)注意以下幾點:用字符串賦值時,無須指定數(shù)組長度。以字符串形式對字符數(shù)組進行初始化,系統(tǒng)會自動在該字符串后面加結(jié)束標(biāo)志'\0'。在C語言中,以字符串形式賦值要比對數(shù)組中的字符逐個賦值多占1字節(jié),多占的字節(jié)用于存放字符串結(jié)束標(biāo)志'\0'。上面的例子在內(nèi)存中的實際存儲情況為Iamhappy'\0',字符串結(jié)束標(biāo)志'\0'是由編譯系統(tǒng)自動加上的。由于系統(tǒng)加上了字符串結(jié)束標(biāo)志'\0',所以在用字符串賦值時不用指定字符數(shù)組的長度,而由系統(tǒng)自行處理。在采用字符串方式后,字符數(shù)組的輸入和輸出將變得簡單方便??梢杂胹canf()函數(shù)和printf()函數(shù)一次性輸入和輸出一個字符數(shù)組中的字符串,而不必使用循環(huán)語句逐個輸入和輸出字符。3.5字符數(shù)組的輸入和輸出1.逐個字符輸入和輸出;例:用格式符"%c"輸入或輸出一個字符串。#include<stdio.h>/*用格式符"%c"輸入或輸出一個字符串*/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"可輸入、輸出字符串。將字符串存放在一個字符數(shù)組中,在輸入或輸出字符串時可直接使用數(shù)組名。例:整串輸入和輸出。#include<stdio.h>/*整串輸入和輸出。*/intmain(){chara[15];scanf("%s",a);printf("%s",a); return0;}可以利用字符數(shù)組對單個字符和字符串進行輸入和輸出操作。小貼士整串輸入和輸出應(yīng)注意以下幾點:scanf()函數(shù)在用字符數(shù)組名輸入時前面不要加&,同時輸入的字符串長度應(yīng)小于數(shù)組長度,遇空格或回車符會結(jié)束輸入并自動加'\0'。在printf()函數(shù)中使用的格式符為"%s",表示輸出的是一個字符串,在輸出列表中給出數(shù)組名即可。為了能將字符全部輸出,可以多設(shè)幾個字符數(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ù)時,要在程序中包含頭文件“stdio.h”;使用其他字符串函數(shù)時,要在程序中包含頭文件“string.h”。幾個常用的字符串函數(shù):1.字符串輸入函數(shù)gets()gets()函數(shù)的一般調(diào)用格式如下:gets(字符數(shù)組名);gets()函數(shù)的作用是從鍵盤輸入字符串(字符串可以包含空格),直到遇到回車符為止,回車符讀入后不作為字符串的內(nèi)容,系統(tǒng)將自動加上'\0',作為字符串的結(jié)束標(biāo)志。注意:輸入字符串的長度應(yīng)小于字符數(shù)組的長度。
在scanf()函數(shù)中遇空格就結(jié)束輸入,而在gets()函數(shù)中卻將空格作為字符存入字符數(shù)組中。3.6字符串處理函數(shù)【例9-3-6】用函數(shù)gets()輸入一個字符串。
#include<stdio.h>/*用函數(shù)gets()輸入一個字符串*/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也可以是一個字符串常量,這時相當(dāng)于把一個字符串賦給一個字符數(shù)組。返回值:返回字符數(shù)組1的首地址。在使用strcpy()函數(shù)時應(yīng)注意:
(1)字符數(shù)組1必須是數(shù)組名形式(str1)。
(2)字符數(shù)組2可以是數(shù)組名形式或字符串常量。3.6字符串處理函數(shù)3.求字符串長度函數(shù)strlen()strlen()函數(shù)的一般調(diào)用格式如下:strlen(字符數(shù)組);功能:計算以字符數(shù)組為起始地址的字符串的長度(不包含字符串結(jié)束標(biāo)志'\0'),并作為函數(shù)值返回。3.6字符串處理函數(shù)【例9-3-7】求字符串長度。#include<stdio.h>#include<string.h>/*求字符串長度*/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ù)的作用是向顯示器輸出一個字符串,從字符數(shù)組指定的地址開始,依次輸出存儲單元中的字符,直到遇到字符串結(jié)束標(biāo)志為止,字符串輸出結(jié)束后換行。3.6字符串處理函數(shù)【例9-3-8】用函數(shù)puts()輸出一個字符串。#include<stdio.h>/*用函數(shù)puts()輸出一個字符串*/intmain(){chara1[]="Wuhan\njiayou";chara2[]="Wuhan\0jiayou";puts(a1);puts(a2);puts("WUHAN"); return0;}運行結(jié)果顯示:字符數(shù)組a1輸出時遇到'\n',所以換行輸出后面的字符;字符數(shù)組a2輸出時遇到'\0',此時結(jié)束輸出并將'\0'轉(zhuǎn)換成'\n',因此光標(biāo)移到下一行。當(dāng)輸出有格式要求時,通常使用printf()函數(shù)。3.6字符串處理函數(shù)5.字符串連接函數(shù)strcat()strcat()函數(shù)的一般調(diào)用格式如下:strcat(字符數(shù)組1,字符數(shù)組2);
功能:把字符數(shù)組2所指向的字符串連到字符數(shù)組1所指向的字符串后面,并自動覆蓋字符數(shù)組1所指向的字符串的尾部字符'\0'。返回值:返回字符數(shù)組1的首地址。3.6字符串處理函數(shù)【例9-3-9】用字符串連接函數(shù)strcat()連接兩個字符串。#include<stdio.h>#include<string.h>/*用字符串連接函數(shù)strcat()連接兩個字符串*/intmain(){charstr1[20]={"Iama"};charstr2[]={"student"};strcat(str1,str2);printf("%s\n",str1); return0;}3.7字符數(shù)組的應(yīng)用【例9-3-10】從鍵盤輸入一個字符串,并復(fù)制到另一字符串后面顯示出來。#include<stdio.h>#include<string.h>/*輸入一個字符串,并復(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】針對上例,要求采用字符串復(fù)制函數(shù)實現(xiàn)相同的功能,并分別計算兩個字符串的長度。
#include<stdio.h>#include<string.h>/*輸入一個字符串,并復(fù)制到另一字符串后面顯示出來,同時計算兩個字符串的長度*/intmain(){charstr1[20],str2[20];printf("inputastring:");gets(str1);strcpy(str2,str1);printf("%s\n",str2);printf("str1字符數(shù)組字符串長度為:%d\n",strlen(str1));printf("str2字符數(shù)組字符串長度為:%d\n",strlen(str2));
return0;}3.8數(shù)組的應(yīng)用項目案例項目需求:新書上架可以新增新進圖書及基本信息舊書下架可以刪除舊圖書及基本信息圖書查詢能查詢要借閱的圖書信息圖書借閱能為用戶辦理借書手續(xù)圖書歸還能為用戶辦理還書手續(xù)某圖書館需要使用C語言開發(fā)一個圖書管理系統(tǒng),要求圖書館管理系統(tǒng)包括以下功能:3.8數(shù)組的應(yīng)用項目案例系統(tǒng)以菜單方式工作。用戶可以對本系統(tǒng)進行查詢或修改操作,如根據(jù)用戶的需求能夠進行添加操作、刪除操作、借還操作,也可以查找所要的圖書、查閱圖書的詳細(xì)資料、查閱讀者的詳細(xì)資料,并能清晰完整地顯示結(jié)果。本案例采用結(jié)構(gòu)體來存儲這些數(shù)據(jù)類型。比如在讀者類和圖書類結(jié)構(gòu)體中,定義了讀者和圖書的各種屬性,結(jié)構(gòu)體的成員包含了多個變量或數(shù)組(包含一維數(shù)組和字符數(shù)組),采用字符串輸入函數(shù)gets()獲得書籍信息,部分程序如下:本案例采用結(jié)構(gòu)體來存儲這些數(shù)據(jù)類型。比如在讀者類和圖書類結(jié)構(gòu)體中,定義了讀者和圖書的各種屬性,結(jié)構(gòu)體的成員包含了多個變量或數(shù)組(包含一維數(shù)組和字符數(shù)組),采用字符串輸入函數(shù)gets()獲得書籍信息。3.8數(shù)組的應(yīng)用項目案例部分程序如下:#include<stdlib.h>#include<stdio.h>#include"math.h"structReader/*讀者結(jié)構(gòu)*/{ charnum[20];/*借書證號*/ structDatebro;/*借出時間*/ structDateback;/*歸還時間*/};
3.8數(shù)組的應(yīng)用項目案例structBook/*書本結(jié)構(gòu)*/{ intm_iBook_Number;/*對應(yīng)書本號*/ charm_strTitle[150];/*書名*/ charm_strWroter[150];/*作者*/ intm_nMoreNum;/*當(dāng)前在架冊數(shù)*/ intm_nTotalHoldNum;/*館藏冊數(shù)*/ charm_strComment[300];/*圖書簡介*/ structReaderreader[200];};...
3.8數(shù)組的應(yīng)用項目案例structBook*InputNode(){ structBook*p=NULL; inti; p=(structBook*)malloc(sizeof(structBook));/*分配內(nèi)存*/ system("cls");/*清屏*/ fflush(stdin);/*清除以前的輸入*/ printf("\n\t請輸入書名:"); gets(p->m_strTitle);/*從鍵盤取得書名*/ printf("\n\t請輸入作者:"); gets(p->m_strWroter);/*從鍵盤取得作者*/
3.8數(shù)組的應(yīng)用項目案例structBook*InputNode(){ structBook*p=NULL; inti; p=(structBook*)malloc(sizeof(structBook));/*分配內(nèi)存*/ system("cls");/*清屏*/ fflush(stdin);/*清除以前的輸入*/ printf("\n\t請輸入書名:"); gets(p->m_strTitle);/*從鍵盤取得書名*/ printf("\n\t請輸入作者:"); gets(p->m_strWroter);/*從鍵盤取得作者*/
3.8數(shù)組的應(yīng)用項目案例printf("\n\t請輸入當(dāng)前在架數(shù)量:"); scanf("%d",&p->m_nMoreNum);/*從鍵盤取得當(dāng)前在架數(shù)量*/ printf("\n\t請輸入庫存數(shù)量:"); scanf("%d",&p->m_nTotalHoldNum);/*從鍵盤取得當(dāng)前庫存數(shù)量*/ fflush(stdin); printf("\n\t請輸入圖書簡介:");/*從鍵盤取得圖書內(nèi)容簡要介紹*/ gets(p->m_strComment); /*以上從輸入輸出設(shè)備取得要求的信息*/ for(i=0;i<20;i++) (p->reader[i]).num[0]='\0';/*初始化書的各個結(jié)構(gòu)成員的相關(guān)讀者指針內(nèi)容為空*/ return(p);/*返回成功插入的一個圖書信息*/}... 作業(yè)針對【例9-3-11】的例子,如果使用scanf()函數(shù)輸入字符串到字符數(shù)組str1中,其輸出結(jié)果有什么不同?試編寫C語言程序,并調(diào)試運行。
04PARTFOUR數(shù)碼管靜態(tài)顯示系統(tǒng)設(shè)計4.1數(shù)碼管的工作原理及結(jié)構(gòu)按發(fā)光二極管單元連接方式可分為:共陽極數(shù)碼管共陰極數(shù)碼管共陽極數(shù)碼管:將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽極數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,該字段就點亮;當(dāng)某一字段發(fā)光二極管的陰極為高電平時,該字段就不亮。4.1數(shù)碼管的工作原理及結(jié)構(gòu)共陰極數(shù)碼管:將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰極數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到地線(GND)上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時,該字段就點亮;當(dāng)某一字段發(fā)光二極管的陽極為低電平時,該字段就不亮。4.1數(shù)碼管的工作原理及結(jié)構(gòu)數(shù)碼管的每一段是由發(fā)光二極管組成的,所以在使用時和發(fā)光二極管一樣,也要連接限流電阻,否則電流過大會燒壞發(fā)光二極管。想讓數(shù)碼管顯示數(shù)字,只要將相應(yīng)的段點亮即可。例如,想讓數(shù)碼管顯示數(shù)字“1”,則將b、c段點亮,其余段不亮;想顯示數(shù)字“2”,則將a、b、g、e、d段點亮,其余段不亮。4.1數(shù)碼管的工作原理及結(jié)構(gòu)本案例使用共陰極數(shù)碼管,將數(shù)碼管的a~dp引腳連到Arduino開發(fā)板上的4~11號數(shù)字端口,向數(shù)字端口寫入不同字形編碼,即可顯示不同數(shù)字。共陰極數(shù)碼管的字形編碼見表2-9-3。4.1數(shù)碼管的工作原理及結(jié)構(gòu)本案例使用共陰極數(shù)碼管,將數(shù)碼管的a~dp引腳連到Arduino開發(fā)板上的4~11號數(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ù)碼管,在電路中串接一個220Ω電阻。然后用導(dǎo)線把Arduino開發(fā)板上的5V端口和數(shù)碼管的其他任意引腳連接起來,如果此時數(shù)碼管某一段點亮,則可以確定GND端口所連接的COM引腳為負(fù)極,其他引腳為正極,所以前面的假設(shè)成立,數(shù)碼管為共陰極數(shù)碼管。如果數(shù)碼管任何一段都不亮,一般情況下,可判斷該數(shù)碼管為共陽極數(shù)碼管。為了確保準(zhǔn)確性,應(yīng)調(diào)換圖中電源的正負(fù)極重新進行測試。如果連接的數(shù)碼管某一段點亮,則說明此數(shù)碼管為共陽極數(shù)碼管。4.1數(shù)碼管的工作原理及結(jié)構(gòu)如何判斷數(shù)碼管是共陽極數(shù)碼管還是共陰極數(shù)碼管?
2.使用萬用表判斷將萬用表調(diào)到電阻測量擋位,紅表筆接數(shù)碼管的COM引腳,黑表筆接數(shù)碼管的其他任意引腳,如果此時數(shù)碼管上某一段點亮,則說明此數(shù)碼管為共陰極數(shù)碼管。如果數(shù)碼管上任何一段都不亮,則說明此數(shù)碼管為共陽極數(shù)碼管。為了確保準(zhǔn)確性,應(yīng)調(diào)換黑表筆和紅表筆再測一次,如果此時數(shù)碼管上某一段點亮,則說明此數(shù)碼管為共陽極數(shù)碼管。4.2電路設(shè)計硬件清單本案例硬件清單見表2-9-4。4.2電路設(shè)計電路原理圖將Arduino開發(fā)板上的4~11號數(shù)字端口與數(shù)碼管的a~dp引腳相連,COM引腳接GND端口。為了避免電流過大燒壞數(shù)碼管,在每一段數(shù)碼管電路中串接一個220Ω電阻。4.2電路設(shè)計實物接線圖4.3源程序設(shè)計可以分別通過一維數(shù)組和二維數(shù)組編程,實現(xiàn)數(shù)碼管靜態(tài)顯示功能。1.采用一維數(shù)組實現(xiàn)數(shù)碼管的靜態(tài)顯示采用一維數(shù)組實現(xiàn)數(shù)碼管依次循環(huán)顯示數(shù)字,首先要定義4~11號端口,都設(shè)為OUTPUT模式,初始化為LOW;主函數(shù)要分別顯示數(shù)字0~9。為每個數(shù)字的顯示定義一個一維數(shù)組,并按照表2-9-3中對應(yīng)的編碼初始化數(shù)組。4.3源程序設(shè)計Arduino程序代碼如下:voidsetup(){
for(intpin=4;pin<=11;pin++) //設(shè)置4~11號數(shù)字端口為輸出模式
{pinMode(pin,OUTPUT);
digitalWrite(pin,LOW);}
}voidloop(){//顯示數(shù)字0intn0[8]={1,1,1,1,1,1,0,0};//4~11號數(shù)字端口依次按數(shù)組n0[8]中的數(shù)據(jù)顯示for(intpin=4;pin<=11;pin++){digitalWrite(pin,n0[pin-4]);}delay(1000);4.3源程序設(shè)計//顯示數(shù)字1intn1[8]={0,1,1,0,0,0,0,0};//4~11號數(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號數(shù)字端口依次按數(shù)組n2[8]中的數(shù)據(jù)顯示for(intpin=4;pin<=11;pin++){digitalWrite(pin,n2[pin-4]);}delay(1000);
4.3源程序設(shè)計//顯示數(shù)字3intn3[8]={1,1,1,1,0,0,1,0};//4~11號數(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外貿(mào)售貨合同范例
- 流動訂餐服務(wù)合同范例
- 合同范例電腦排版
- 冷飲供銷合同范例
- 氣買賣合同范例
- 居間服務(wù)合同范例債權(quán)轉(zhuǎn)讓
- 會務(wù)項目提成合同范例
- 拆遷過戶合同范例
- 擔(dān)保公證合同范例
- 對沖基金合同范例
- 文學(xué)常識(全)課件
- 小學(xué)信息技術(shù)川教四年級上冊網(wǎng)絡(luò)安全《信息安全小衛(wèi)士》 高質(zhì)作品
- 2023-2024年大學(xué)試題(法學(xué))-婚姻家庭與繼承法考試題庫(含答案)
- 四川河道防洪堤壩工程地質(zhì)勘察報告
- 譯林版英語六年級下冊知識點總結(jié)
- 管理學(xué)(浙江財經(jīng)大學(xué))知到章節(jié)答案智慧樹2023年
- 【超星爾雅學(xué)習(xí)通】機器的征途:空天科技網(wǎng)課章節(jié)答案
- 探究“燃燒的條件”實驗的改進與創(chuàng)新(共11張PPT)
- 《戴小橋和他的哥們兒:特務(wù)足球隊》交流課課件
- 2023屆高考英語一輪復(fù)習(xí) 語法填空:人物傳記類 專項練習(xí)10篇有答案
- 年5萬噸含錫廢料綜合回收再生利用項目環(huán)評報告
評論
0/150
提交評論