版權(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)?!纠?.4】對n個(gè)數(shù)進(jìn)行排序(由小到大)。
由于是對多個(gè)數(shù)進(jìn)行排序,自然會想到利用數(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】輸入若干名學(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)會為數(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è)矩陣的乘積?!纠?.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)自動賦空字符'\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)容里面會有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度車輛設(shè)備研發(fā)測試平臺建設(shè)合同4篇
- 二零二五年度新能源車輛采購廉潔協(xié)議書3篇
- 個(gè)人場地租賃合同參考范文(2024版)
- 未來學(xué)校教育中的個(gè)性化學(xué)習(xí)路徑
- 二零二五年度玻璃隔斷玻璃門定制安裝合同3篇
- 線上對公金融服務(wù)平臺的營銷策略研究
- 2025年度個(gè)人投資養(yǎng)老產(chǎn)業(yè)合作協(xié)議:設(shè)施建設(shè)與運(yùn)營管理3篇
- 2025年度水電安裝工程風(fēng)險(xiǎn)評估與處理合同樣本3篇
- 二零二五年度充電樁設(shè)備研發(fā)與技術(shù)支持合同4篇
- 二零二五年度出租車司機(jī)招聘與行業(yè)規(guī)范執(zhí)行協(xié)議3篇
- 《新生兒預(yù)防接種》課件
- 中國減肥連鎖行業(yè)市場調(diào)查研究及投資戰(zhàn)略研究報(bào)告
- 2025年1月八省聯(lián)考高考綜合改革適應(yīng)性測試-高三化學(xué)(陜西、山西、寧夏、青海卷) 含解析
- 2024年03月內(nèi)蒙古中國銀行內(nèi)蒙古分行春季校園招考筆試歷年參考題庫附帶答案詳解
- 鏈家、貝殼專業(yè)租房協(xié)議、房屋租賃合同、房屋出租協(xié)議
- 2024年電力算力協(xié)同:需求、理念與關(guān)鍵技術(shù)報(bào)告-南網(wǎng)數(shù)研院(蔡田田)
- 云南省西雙版納傣族自治州(2024年-2025年小學(xué)六年級語文)統(tǒng)編版小升初模擬(上學(xué)期)試卷及答案
- 大學(xué)生職業(yè)規(guī)劃大賽生涯發(fā)展報(bào)告
- 維克多高中英語3500詞匯
- simotion輪切解決方案與應(yīng)用手冊
- DSC曲線反映PET得結(jié)晶度
評論
0/150
提交評論