3- 利用數(shù)組處理同類型的批量數(shù)據(jù)_第1頁
3- 利用數(shù)組處理同類型的批量數(shù)據(jù)_第2頁
3- 利用數(shù)組處理同類型的批量數(shù)據(jù)_第3頁
3- 利用數(shù)組處理同類型的批量數(shù)據(jù)_第4頁
3- 利用數(shù)組處理同類型的批量數(shù)據(jù)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

教學(xué)內(nèi)容: 第1章:C語言語法基礎(chǔ)第2章:C程序設(shè)計(jì)基礎(chǔ)第3章:利用數(shù)組處理同類型的批量數(shù)據(jù)第4章:利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)第5章:靈活使用指針第6章:結(jié)構(gòu)體、共用體、枚舉類型及其應(yīng)用第7章:常用的三種線性數(shù)據(jù)結(jié)構(gòu)第8章:利用文件進(jìn)行數(shù)據(jù)管理第9章:嵌入式技術(shù)基礎(chǔ)實(shí)踐方法C語言程序設(shè)計(jì)【學(xué)習(xí)內(nèi)容】3.1一維數(shù)組

3.2二維數(shù)組

3.3字符數(shù)組 第3章利用數(shù)組處理同類型的批量數(shù)據(jù)【學(xué)習(xí)目標(biāo)】1.掌握數(shù)組的定義、初始化和引用的方法;

2.能利用數(shù)組解決實(shí)際問題,了解數(shù)組在嵌入式系統(tǒng)中的應(yīng)用;

3.理解并掌握冒泡排序算法和選擇排序算法;

4.掌握字符數(shù)組的輸入輸出方法以及字符串處理函數(shù)的應(yīng)用方法。

在C語言中,數(shù)據(jù)類型除了基本類型(整型、實(shí)型、字符型),還有構(gòu)造類型,包括數(shù)組、結(jié)構(gòu)體、共用體和枚舉類型。其中,數(shù)組是將相同類型的若干數(shù)據(jù)按序組合在一起,即數(shù)組是有序同類型數(shù)據(jù)的集合。

思考:若用基本數(shù)據(jù)類型,如何解決20個(gè)整型數(shù)據(jù)的存放問題?第3章利用數(shù)組處理同類型的批量數(shù)據(jù)3.1一維數(shù)組3.1.1定義一維數(shù)組的方法數(shù)組和變量一樣,要先定義后使用。定義一維數(shù)組的形式:類型標(biāo)識符數(shù)組名[常量表達(dá)式];說明:(1)類型標(biāo)識符可以是基本類型或

構(gòu)造類型。(2)常量表達(dá)式表示數(shù)據(jù)元素的個(gè)數(shù),也稱為數(shù)組長度。

例如:

inta[10];

該數(shù)組有10個(gè)整型元素:a[0]~a[9]。

元素編號是從0開始。C語言規(guī)定,數(shù)組名可以代表數(shù)組的首地址(數(shù)組首元素a[0]的地址)。

系統(tǒng)為數(shù)組a分配連續(xù)的10個(gè)整型內(nèi)存空間,用來存儲10個(gè)數(shù)組元素。3.1一維數(shù)組3.1.2一維數(shù)組的初始化

在定義數(shù)組時(shí),對數(shù)組元素賦初值。初值用{}括起來,初值之間用逗號隔開。(1)對全部元素賦初值

inta[5]={1,2,3,4,5};

(2)對部分元素賦初值

inta[5]={1,2,3};

注意:初值個(gè)數(shù)不能超過指定的元素個(gè)數(shù)。

此時(shí),也可寫成:

inta[]={1,2,3,4,5};inta[5]={1,2,3,4,5,6};

在定義數(shù)組之后,不能一次性對整個(gè)數(shù)組的所有元素賦值,而只能對每個(gè)元素逐個(gè)賦值。例如:inta[5];//定義數(shù)組a[5]={1,3,5,7,9};

//錯(cuò)誤a[0]=1;a[1]=3;a[2]=5;a[3]=7;a[4]=9;//正確//錯(cuò)誤

結(jié)果:a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5

結(jié)果:a[0]=1,a[1]=2,a[2]=3,a[3]=0,a[4]=0

3.1一維數(shù)組3.1.3一維數(shù)組元素的引用C語言規(guī)定,只能引用某個(gè)數(shù)組元素而不能一次引用整個(gè)數(shù)組的全部元素。

一維數(shù)組元素的引用形式:數(shù)組名[下標(biāo)]

下標(biāo)就是數(shù)組元素的編號。

【例3.1】一維數(shù)組元素的引用:將一組數(shù)據(jù)倒序輸出。#include<stdio.h>intmain(void){inti,a[10];

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

a[i]=i;

for(i=9;i>=0;i--)

printf("%d",a[i]);

printf("\n");}

將數(shù)組和循環(huán)結(jié)構(gòu)相結(jié)合,可有效處理同類型的批量數(shù)據(jù),大大提高工作效率。3.1一維數(shù)組3.1.4一維數(shù)組的應(yīng)用

一維數(shù)組廣泛應(yīng)用于對多個(gè)同類型的數(shù)據(jù)進(jìn)行存取、排序等操作的場合。用一維數(shù)組還可構(gòu)造出軟件設(shè)計(jì)中常用的堆棧、隊(duì)列等數(shù)據(jù)結(jié)構(gòu)。【例3.4】對n個(gè)數(shù)進(jìn)行排序(由小到大)。

由于是對多個(gè)數(shù)進(jìn)行排序,自然會(huì)想到利用數(shù)組來保存和管理參與排序的多個(gè)數(shù)據(jù)。排序算法有多種,在此只介紹冒泡排序法。

在嵌入式軟件設(shè)計(jì)中,一維數(shù)組可用于數(shù)碼管顯示的筆形碼、鍵盤的鍵碼等編碼的存取。3.1一維數(shù)組用冒泡法對5個(gè)數(shù)(如:9、7、5、8、0)進(jìn)行由小到大排序的過程:9758075988900975805787809708975975895780第1次9579第2次第3次第4次第1次7570第1次第2次第3次7570050550第1次第2次a[0]a[1]a[2]a[3]a[4]第1輪第2輪第3輪第4輪3.1.4一維數(shù)組的應(yīng)用冒泡排序法的思路:從第1個(gè)數(shù)開始,和下鄰數(shù)比較,小數(shù)上浮,大數(shù)下沉?!纠?.4】對n個(gè)數(shù)進(jìn)行排序(由小到大)。

3.1一維數(shù)組3.1.4一維數(shù)組的應(yīng)用冒泡排序法的思路:從第1個(gè)數(shù)開始,和下鄰數(shù)比較,小數(shù)上浮,大數(shù)下沉?!纠?.4】對n個(gè)數(shù)進(jìn)行排序(由小到大)。

3.1一維數(shù)組3.1.4一維數(shù)組的應(yīng)用【例3.4】對n個(gè)數(shù)進(jìn)行排序(由小到大)。

swap_flag=1;

若參與排序的多個(gè)數(shù)據(jù)在某輪比較前,恰好已經(jīng)按照由小到大排序,則上述程序有無需要改進(jìn)之處?swap_flag=0;//交換標(biāo)志:0-無交換,1-有交換

if(swap_flag==0)break;//若本輪無交換,則結(jié)束比較

#defineN5

//宏定義參與排序的數(shù)據(jù)個(gè)數(shù)inta[N];

//存放待排序的一組數(shù)據(jù)inti,j,t;

for(i=1;i<N;i++)

//N個(gè)數(shù),共需比較N-1輪{

for(j=0;j<N-i;j++)//第i輪需要比較N-i次{if(a[j]>a[j+1])

//依次比較兩個(gè)相鄰的數(shù),將大數(shù)放后面{ t=a[j];a[j]=a[j+1];a[j+1]=t;

//交換

}}

},swap_flag;3.1一維數(shù)組3.1.4一維數(shù)組的應(yīng)用練習(xí):【例3.2】輸入一個(gè)整數(shù),輸出該整數(shù)從高位到低位的各位數(shù)字。【例3.3】輸入若干名學(xué)生的成績,輸出成績單,并統(tǒng)計(jì)輸出最高分、最低分和平均分?!纠?.4】利用選擇排序法對n個(gè)數(shù)進(jìn)行排序。

并且對冒泡排序法和選擇排序法進(jìn)行比較。3.2二維數(shù)組

我們可用1個(gè)一維數(shù)組存放1名同學(xué)的語文、數(shù)學(xué)、英語3門課的成績,而如何存放多名同學(xué)的語文、數(shù)學(xué)、英語3門課成績呢?在C語言中,可用二維數(shù)組解決此類問題。在嵌入式軟件設(shè)計(jì)中,二維數(shù)組可用于點(diǎn)陣顯示碼、液晶顯示碼等編碼的存取。3.2二維數(shù)組3.2.1定義二維數(shù)組的方法定義二維數(shù)組的一般形式:

類型標(biāo)識符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];其中,常量表達(dá)式1表示行數(shù),常量表達(dá)式2表示的列數(shù)。例如:

inta[3][4];//定義3行4列的整型數(shù)組,共有3×4個(gè)元素

每個(gè)元素的編號:系統(tǒng)會(huì)為數(shù)組a分配連續(xù)的12個(gè)整型內(nèi)存空間,用來存儲12個(gè)數(shù)組元素。

在C語言中,二維數(shù)組中元素排列的順序是按“行”存放的,即在內(nèi)存中先順序存放第1行的元素;

再順序存放第2行的元素;

最后順序存放第3行的元素。3.2二維數(shù)組3.2.1定義二維數(shù)組的方法

它有3個(gè)行元素:a[0]、a[1]、a[2],而每個(gè)行元素又是一個(gè)包含4個(gè)列元素的一維數(shù)組,此時(shí)把a(bǔ)[0]、a[1]、a[2]看作一維數(shù)組名。例如第一行元素:a[0][0]a[0][1]a[0][2]a[0][3]C語言中,又可以把二維數(shù)組a看作是一個(gè)特殊的一維數(shù)組。3.2二維數(shù)組3.2.2二維數(shù)組的初始化在定義二維數(shù)組時(shí),對其元素初始化賦值。(1)分行給二維數(shù)組賦初值(一行對應(yīng)一個(gè)花括號)例如:inta[3][4]={{1,2,3,4},

{5,6,7,8},

{9,10,11,12}};

(2)將所有數(shù)據(jù)寫在一個(gè)花括號內(nèi),按順序給元素賦初值例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

效果與第(1)種方法相同。但不如第(1)種方法直觀。(4)對全部元素都賦初值時(shí),行數(shù)可以不指定,但列數(shù)不能省略。

例如:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};(3)可只給部分元素賦初值。例如:inta[3][4]={{1},{5},{9}};

注意:在定義二維數(shù)組之后,不能一次性對整個(gè)數(shù)組的所有元素賦值,而只能對數(shù)組的每個(gè)元素逐個(gè)賦值。例如:inta[3][4];//定義數(shù)組a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

//錯(cuò)誤3.2二維數(shù)組3.2.3二維數(shù)組元素的引用C語言規(guī)定,只能引用某個(gè)數(shù)組元素而不能一次引用整個(gè)數(shù)組的全部元素。

二維數(shù)組元素的引用形式:數(shù)組名[下標(biāo)][下標(biāo)]

下標(biāo)就是數(shù)組元素的編號。

【例3.5】二維數(shù)組元素的引用:二維數(shù)組元素的賦值和輸出。

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

inta[3][4];

//定義二維數(shù)組inti,j;printf("請輸入12個(gè)整數(shù):");

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

//二維數(shù)組的行{

for(j=0;j<4;j++)

//二維數(shù)組的列scanf("%d",

&a[i][j]);//向數(shù)組a賦值}for(i=0;i<3;i++){for(j=0;j<4;j++)printf("a[%d][%d]=%d\n",

i,

j,

a[i][j]);//輸出數(shù)組a的12個(gè)元素值}}3.2二維數(shù)組3.2.4二維數(shù)組的應(yīng)用練習(xí):【例3.7】輸入兩個(gè)矩陣的數(shù)值,輸出這兩個(gè)矩陣的乘積。【例3.6】輸出3×4矩陣,并求出值最大的元素值,及其所在的行號和列號。

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

j,

max,

row=0,

col=0;//變量i表示行,j表示列

inta[3][4]={{1,2,3,4},

{5,6,7,8},

{9,10,11,12}};for(i=0;i<3;i++){

for(j=0;j<4;j++)printf("%3d",

a[i][j]);

printf("\n");

//每輸出一行,換行}

max=a[0][0];for(i=0;i<3;i++){for(j=0;j<4;j++){ if(a[i][j]>max){ max=a[i][j];row=i;col=j; }}}printf("最大值=%d,行=%d,列=%d\n",

max,

row+1,

col+1);}3.3字符數(shù)組

用來存放字符型數(shù)據(jù)的數(shù)組是字符數(shù)組,字符數(shù)組中的每個(gè)元素存放一個(gè)字符。在嵌入式網(wǎng)絡(luò)通信軟件設(shè)計(jì)中,可用字符數(shù)組存放待發(fā)送或待接收的數(shù)據(jù)。3.3.1定義字符數(shù)組的方法

系統(tǒng)為數(shù)組c分配連續(xù)的10字節(jié)內(nèi)存空間,用來存儲10個(gè)字符型數(shù)據(jù)。例如:

charc[10];數(shù)組名c代表該數(shù)組的首地址。

3.3字符數(shù)組

3.3.2字符數(shù)組的初始化1、逐個(gè)字符賦值法(1)對全部元素賦初值

charc[5]={'a','b','c','d','e'};

結(jié)果:c[0]='a',c[1]='b',c[2]='c',c[3]='d',c[4]='e'。

也可寫成:

charc[]={'a','b','c','d','e'};

(2)對部分元素賦初值

charc[6]={'a','b','c','d','e'};

最后1個(gè)元素由系統(tǒng)自動(dòng)賦空字符'\0'。3.3字符數(shù)組

2、字符串常量賦值法(將字符串常量賦給字符數(shù)組:用數(shù)組處理字符串)3.3.2字符數(shù)組的初始化也可寫成:charc[]="abcde";

charc[]={"abcde"};

字符串常量"abcde"在內(nèi)存中的存儲:因此,數(shù)組c的長度是6。【思考】

下面兩種賦值方式是否有區(qū)別?如何等價(jià)?

①charc[]={'a','b','c','d','e'}; ②charc[]="abcde";

注意:在定義字符數(shù)組之后,不能一次性對整個(gè)數(shù)組的所有元素賦值,而只能對數(shù)組的每個(gè)元素逐個(gè)賦值。例如:char

c[5];//定義數(shù)組c[5]={'a','b','c','d','e'};

//錯(cuò)誤c[5]="abcd";

//錯(cuò)誤3.3字符數(shù)組3.3.3字符數(shù)組元素的引用

字符數(shù)組的引用形式與數(shù)值數(shù)組相同,可以引用字符數(shù)組中的一個(gè)元素而得到一個(gè)字符?!纠?.8】字符數(shù)組元素的引用:輸出字符數(shù)組元素的值。

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

chara[5]={'a','b','c','d','e'};

//定義字符數(shù)組并初始化

charb[6]="12345";inti;printf("字符數(shù)組a:");

for(i=0;i<5;i++)printf("%c",a[i]);

//字符數(shù)組a元素的引用printf("\n");printf("字符數(shù)組b:");

for(i=0;i<6;i++)printf("%c",b[i]);

//字符數(shù)組b元素的引用printf("\n");}3.3字符數(shù)組3.3.4字符數(shù)組的輸入、輸出1、用格式符“%c”逐個(gè)字符輸入、輸出【例3.9】字符數(shù)組逐個(gè)字符的輸入、輸出。在輸入字符時(shí),系統(tǒng)將輸入的空格、換行符作為有效字符賦給數(shù)組元素。

#include<stdio.h>intmain(void){ inti;charc[5];

//定義字符數(shù)組printf("請輸入5個(gè)字符:");

for(i=0;i<5;i++)scanf("%c",&c[i]);

//逐個(gè)字符輸入printf("字符數(shù)組元素:");

for(i=0;i<5;i++)printf("%c",c[i]);

//逐個(gè)字符輸出printf("\n");}3.3字符數(shù)組2、用格式符“%s”對整個(gè)字符串一次輸入、輸出3.3.4字符數(shù)組的輸入、輸出【例3.10】字符串的格式化輸入、輸出

(1)用“%s”輸入、輸出字符串時(shí),scanf、printf中的地址項(xiàng)、輸出項(xiàng)都是字符數(shù)組名(首地址)。說明:

(2)用scanf

輸入字符串時(shí),若輸入空格或換行,系統(tǒng)則認(rèn)為是字符串結(jié)束符'\0'

。若輸入字符串“abcdef”時(shí),運(yùn)行結(jié)果:

可見,系統(tǒng)只將空格前的字符串“abc”送入數(shù)組str中。如何將含有空格的字符串送給一個(gè)字符數(shù)組呢?——用后續(xù)介紹的gets函數(shù)來實(shí)現(xiàn)。#include<stdio.h>intmain(void){ charstr[10];printf("請輸入字符串:");

scanf("%s",str);

//輸入字符串

printf("%s\n",str);

//輸出字符數(shù)組對應(yīng)的字符串}3.3字符數(shù)組2、用格式符“%s”對整個(gè)字符串一次輸入、輸出3.3.4字符數(shù)組的輸入、輸出【例3.11】多個(gè)字符串的格式化輸入、輸出

。

用scanf函數(shù)輸入多個(gè)字符串時(shí),在字符串之間可用空格、換行符或Tab符作分隔。

#include<stdio.h>intmain(void){ charstr1[10],str2[10],str3[10];printf("請輸入3個(gè)字符串:");

scanf("%s%s%s",str1,

str2,

str3);

//輸入3個(gè)字符串

printf("%s%s%s\n",str1,

str2,

str3);

//輸出3個(gè)字符串

}3.3字符數(shù)組3.3.5字符串處理函數(shù)C語言提供了若干個(gè)字符串字符串處理函數(shù)。

其中,字符串輸入、輸出函數(shù),在使用前應(yīng)包含頭文件“stdio.h”;而其他字符串處理函數(shù),在使用前應(yīng)包含頭文件“string.h”。3.3字符數(shù)組1、字符串輸出函數(shù):puts(字符串或字符數(shù)組名)

●將字符串或字符數(shù)組中存放的字符串輸出到顯示終端,并換行。3.3.5字符串處理函數(shù)2、字符串輸入函數(shù):gets(字符數(shù)組名)

●從鍵盤輸入一個(gè)字符串(可含空格)到字符數(shù)組中,換行符作為輸入的結(jié)束符。3.3字符數(shù)組3、字符串連接函數(shù):strcat(字符數(shù)組名1,字符串或字符數(shù)組名2)

3.3.5字符串處理函數(shù)

●將字符串或字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,結(jié)果放在字符數(shù)組1中。

說明:(1)字符數(shù)組1必須足夠大,能夠容納連接后的新字符串。

(2)連接時(shí)將原字符串1最后的'\0'取消,只在新字符串最后保留'\0'。3.3字符數(shù)組4、字符串復(fù)制函數(shù):strcpy(字符數(shù)組名1,字符串或字符數(shù)組名2)

3.3.5字符串處理函數(shù)

●將字符串或字符數(shù)組2中的字符串復(fù)制到字符數(shù)組1中。

說明:(1)字符數(shù)組1的長

溫馨提示

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

評論

0/150

提交評論