譚浩強(qiáng)C語言第7章課件_第1頁
譚浩強(qiáng)C語言第7章課件_第2頁
譚浩強(qiáng)C語言第7章課件_第3頁
譚浩強(qiáng)C語言第7章課件_第4頁
譚浩強(qiáng)C語言第7章課件_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

?C程序設(shè)計?電子教案教師:葛龍主要內(nèi)容:一維數(shù)組的定義及引用二維與多維數(shù)組的定義及引用字符數(shù)組第七章:數(shù)組§7.1一維數(shù)組的定義及引用請先看一個小程序:我們來用鍵盤彈鋼琴!§7.1一維數(shù)組的定義及引用一維數(shù)組的定義:數(shù)組類型名數(shù)組名[常量表達(dá)式

];如:inta[10];它表示:定義了一個整型數(shù)組,名字叫a;

a數(shù)組中共有10個元素;這10個元素的名字分別是:

a[0],a[1],a[2],......,a[9]§7.1一維數(shù)組的定義及引用一維數(shù)組的定義:數(shù)組類型名數(shù)組名[常量表達(dá)式

];使用數(shù)組時,需注意幾點:定義數(shù)組時,表示數(shù)組寬度的常量表達(dá)式不要寫成變量,如int

a[i];

所有數(shù)組都以0作為第1個元素的下標(biāo);數(shù)組在內(nèi)存中都是順序存放的,相鄰的元素在內(nèi)存中的地址也是相鄰的。╳§7.1一維數(shù)組的定義及引用一維數(shù)組的引用:數(shù)組名[下標(biāo)表達(dá)式];只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組;元素引用:如:a[0]=a[1]+5;如:for(i=0;i<10;i++){printf(“%d”,a[i]);}printf(“%d”,a);╳地址引用:在C語言中,數(shù)組名代表該數(shù)組的首地址,即第1個元素的地址。比如a,實際上就是&a[0]。由上可知,第2個元素的地址&a[1]可寫成a+1,

第i+1個元素的地址&a[i]可寫成a+i。§7.1一維數(shù)組的定義及引用一維數(shù)組的初始化:C語言允許在定義數(shù)組的時候初始化數(shù)組,形式為:初始化時,需注意幾點:數(shù)值表是用逗號分隔的,最后一項后面沒有逗號。當(dāng)數(shù)值表中數(shù)值個數(shù)小于寬度時,其余元素會被自動初始化為0;如:inta[5]={0,1,2,3,4};類型數(shù)組名[寬度]={數(shù)值表};inta[5]={1,2};等價于inta[5]={1,2,0,0,0};存字符串的字符數(shù)組允許下列的初始化簡寫形式:

charch[6]=“Hello”;例:從鍵盤上順序輸入10個數(shù),再把它們逆序輸出main(){floata[10];inti;printf(“\nInput10Numbers:\n”);for(i=0;i<10;i++)scanf(“%f”,&a[i]);for(i=9;i>=0;i--)printf(“%g”,a[i]);}a+i兩個經(jīng)典的排序算法:56317選擇法排序

(例7.4)算法思想:從所有數(shù)中找出最小的一個,把它放在第一位;接著再找出余下的數(shù)中最小的一個,把它放在第二位;依次類推,直到找完。row①rowrowrowrow16357②rowrowrowrow13657③rowrowrow13567④rowrow兩個經(jīng)典的排序算法:main(){intnum[10],i,j,temp,min;printf(“\nInput10Numbers:\n”);for(i=0;i<10;i++)scanf(“%d”,&num[i]);

for(i=0;i<9;i++){min=i;for(j=i;j<10;j++){if(num[j]<num[min])min=j;}

temp=num[i];num[i]=num[min];num[min]=temp;}

for(i=0;i<10;i++)printf(“%6d”,num[i]);}/*互換*//*掃描n-1次*//*在一遍掃描中*//*找最小元素的下標(biāo)*/兩個經(jīng)典的排序算法:56317冒泡法排序

(例7.5)算法思想:對相鄰兩個數(shù)比較,較大的數(shù)往后放,比較一輪后,最大的數(shù)會被放到最后面;接著從頭又開始比較,把次大的數(shù)放到倒數(shù)第二位;依次類推。其實質(zhì)就是:小數(shù)上浮,大數(shù)下沉。①5631753617531675316753167②35167315673156731567兩個經(jīng)典的排序算法:31567冒泡法排序

(例7.5)算法思想:對相鄰兩個數(shù)比較,較大的數(shù)往后放,比較一輪后,最大的數(shù)會被放到最后面;接著從頭又開始比較,把次大的數(shù)放到倒數(shù)第二位;依次類推。其實質(zhì)就是:小數(shù)上浮,大數(shù)下沉。③1356713567135671356713567④13567135671356713567互換a[j]>a[j+1]for(j=0;j<10-i;j++)真假for(i=0;i<10;i++)真假兩個經(jīng)典的排序算法:此算法流程圖如右:冒泡法排序

(例7.5)兩個經(jīng)典的排序算法:main(){intnum[10],i,j,temp;printf(“\nInput10Numbers:\n”);for(i=0;i<10;i++)scanf(“%d”,&num[i]);

for(i=0;i<9;i++){for(j=0;j<9-i;j++){if(num[j]>num[j+1]){temp=num[j];num[j]=num[j+1];num[j+1]=temp;}}}for(i=0;i<10;i++)printf(“%6d”,num[i]);}/*冒泡n-1次*//*在一次冒泡中*//*大數(shù)下沉*/§7.1一維數(shù)組的定義及引用在這個程序中,我們用到了數(shù)組:charmatrix[3][3]={SPACE,SPACE,SPACE,SPACE,SPACE,SPACE,SPACE,SPACE,SPACE};#defineSPACE‘’§7.2二維數(shù)組的定義及引用二維數(shù)組的定義:數(shù)組類型名數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];如:inta[10][10];它表示:定義了一個二維整型數(shù)組,名字叫a;

a數(shù)組中共有10行*10列個元素;這100個元素的名字分別是:

a[0][0],a[0][1],a[0][2],...,a[0][9]a[9][0],a[9][1],a[9][2],...,a[9][9]...地址引用:二維數(shù)組的數(shù)組名代表該數(shù)組的首地址,即第1個元素的地址。比如a,實際上就是&a[0][0]。二維數(shù)組元素在內(nèi)存中按行存放,a[0]為第1行的首地址。同樣,a[1]為第2行的首地址,......,a[n-1]為第n行的首地址?!?.2二維數(shù)組的定義及引用二維數(shù)組的引用:二維數(shù)組中任一元素a[i][j]的地址&a[i][j]等價于a[i]+j?!?.1一維數(shù)組的定義及引用二維數(shù)組的初始化:分行初始化

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};很多程序員也喜歡這么寫:inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};按數(shù)組在內(nèi)存中的排列順序

inta[3][3]={1,2,3,4,5,6,7,8,9};很多程序員也喜歡這么寫:inta[3][3]={1,2,3,4,5,6,7,8,9};可省略第一維的長度說明,長度由初值個數(shù)確定

inta[][3]={{1,2,3},{4,5,6},{7,8,9}};注意:第二維的長度不能省略練習(xí):說出下面二維數(shù)組第一維的寬度及各元素的值:intb[][3]={1,2,3,4};main(){inti,j,a[3][4]={0},b[4][3]={0};printf(“\nInputMatrixa:\n”);for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(“%d”,&a[i][j]);

for(i=0;i<3;i++)for(j=0;j<4;j++)b[j][i]=a[i][j];

printf(“\nMatrixbis:\n”);

for(i=0;i<4;i++){for(j=0;j<3;j++)printf(“%8d”,b[i][j]);printf(“\n”);}}a[i]+j/*輸入二維數(shù)組a*//*把a(bǔ)的轉(zhuǎn)置存入b*/例7.8輸出楊輝三角的前十行分析:我們定義一個二維數(shù)組,所有元素先初始化為0;給數(shù)組的第1列和對角線元素賦值為1;其余元素a[i][j]=a[i-1][j-1]+a[i-1][j];輸出這個二維數(shù)組的下三角。1111211331......1000110012101331......main(){inti,j,a[10][10]={0};for(i=0;i<10;i++)a[i][0]=a[i][i]=1;

for(i=1;i<10;i++)for(j=1;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];

printf(“\n楊輝三角為:\n”);

for(i=0;i<10;i++){for(j=0;j<=i;j++)printf(“%8d”,a[i][j]);printf(“\n”);}}/*把數(shù)組第一列和*//*對角線元素賦值為1*//*給下三角中其它元素賦值*/字符數(shù)組的定義沒有什么太特殊的地方§7.3字符數(shù)組字符數(shù)組的定義及引用:char數(shù)組名[常量表達(dá)式]如:charch[10];它表示:定義了一個字符數(shù)組,名字叫ch;

ch數(shù)組中共有10個元素;這10個元素中的每一個都可以存放一個字符。字符數(shù)組的初始化:字符數(shù)組也可以初始化,如:charch[5]={‘a(chǎn)’,’b’,’c’,’d’,’e’};§7.3字符數(shù)組初始化后數(shù)組中各元素值為:edcba如果初始化時初值個數(shù)大于數(shù)組長度,會報錯。charch[5]={‘a(chǎn)’,’b’,’c’,’d’,’e’,’f’};如果初始化時初值個數(shù)小于數(shù)組長度,系統(tǒng)會為剩余元素自動賦值為’\0’

。字符數(shù)組的初始化:字符數(shù)組也可以初始化,如:charch[5]={‘a(chǎn)’,’b’,’c’,’d’,’e’};§7.3字符數(shù)組初始化后數(shù)組中各元素值為:edcba可以用字符串常量來初始化字符數(shù)組,如:charch[]={“abcde”};或charch[]=“abcde”;\0edcba§7.3.3字符串的輸入輸出scanf和printf:charch[100];scanf(“%s”,ch);printf(“%s”,ch);charch[100];gets(ch);puts(ch);gets和puts:/*空格、制表符、換行為分隔符*//*回車為分隔符*//*輸出后不會自動換行*//*輸出后會自動換行*/main(){charstr[100]=“”;scanf(“%s”,str);printf(“\n%s”,str);}main(){charstr[100]=“”;gets(str);puts(str);}GoodLuck!GoodGoodLuck!GoodLuck!§7.3.4字符串函數(shù)strcat():形式為:strcat(字符串1,字符串2)把字符串2連接到字符串1后,字符串2不變。main(){charstr[10]=“abc”;strcat(str,”123”);printf(“\n%s”,str);}main(){charstr1[10]=“abc”;charstr2[10]=“123”strcat(str1,str2);printf(“\n%s”,str1);}§7.3.4字符串函數(shù)strcat():main(){charstr1[100],str2[100];inti,j,length;for(length=0;str1[length]!=‘\0’;length++);for(i=0;str2[i]!=‘\0’;i++)str1[length+i]=str2[i];str1[length+i]=‘\0’;}str1[length]!=0str1[length]§7.3.4字符串函數(shù)strcpy():形式為:strcpy(字符串1,字符串2)把字符串2復(fù)制到字符串1,字符串2不變。main(){charstr[10]=“abc”;strcpy(str,”123”);printf(“\n%s”,str);}main(){charstr1[10]=“abc”;charstr2[10]=“123”strcpy(str1,str2);printf(“\n%s”,str1);}§7.3.4字符串函數(shù)strcpy():main(){charstr1[100],str2[100];inti;for(i=0;str2[i]!=0;i++)str1[i]=str2[i];str1[i]=0;}§7.3.4字符串函數(shù)strcmp():形式為:strcmp(字符串1,字符串2)比較字符串1和字符串2,如果兩字符串相同,函數(shù)返回值為0,如果不相同,則返回第一個出現(xiàn)的不相同字符之差:字符串1-字符串2。main(){charstr[10]=“abc”;strcmp(str,”abc”);}main(){charstr1[10]=“abc”;charstr2[10]=“123”strcmp(str1,str2);}§7.3.4字符串函數(shù)strlen():形式為:strlen(字符串)返回字符串的長度。main(){strlen(”abc”);}main(){charstr1[10]=“abc”;strlen(str1);}§7.3.4字符串函數(shù)還有很多其它的字符串庫函數(shù),它們都是在string.h這個頭文件中定義的,大家可以去查閱。當(dāng)然,使用這些函數(shù)時應(yīng)該用一句包含命令#include<string.h>把這個頭文件包含進(jìn)來。例:統(tǒng)計輸入的正文中有多少單詞這里所說的單詞是指用空白符分開的字符串,C語言中空白符有空格、制表符和換行符。如:Thisisatest!Doyourbest,andenjoyit.把它們存入一個字符數(shù)組中,形式就會如下:Thisisatest!\nDo

yourbest,andenjoyit.\0例:統(tǒng)計輸入的正文中有多少單詞#include<stdio.h>#include<string.h>main(){charwords[500];inti=0,count=0;printf("\nEnt

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論