C語言程序設計:第六章 數組_第1頁
C語言程序設計:第六章 數組_第2頁
C語言程序設計:第六章 數組_第3頁
C語言程序設計:第六章 數組_第4頁
C語言程序設計:第六章 數組_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C程序設計

第六章數組本章的重點數組的概念數組的定義和引用數組元素在內存中的排列情況字符數組和字符串的概念字符串的操作數組的概念數組:相同類型數據的、有序數據的集合。是構造類型。特點:數組中所有數據類型相同。具有相同的變量名。每個元素有一個唯一的下標。用下標訪問元素。6.1一維數組的定義和引用定義:類型數組名[常量];例如:

intgrade[100];符合標識符的規(guī)定一定是方括號“[]”必須是常量、常量表達式、符號常量。不能是變量。如intn;scanf(“%d”,&n);intd[n];下標從0開始:grade[0],grade[1],grade[2],……,grade[99]數組的引用:格式:數組名[下標]例如(ex6-1):main(){inti,a[10];for(i=0;1<10;i++)a[i]=i;for(i=0;i<10;i++)printf(“%d“,a[i]);}定義一個10個元素、名字為a的int型數組。引用定義好的數組:可以對數組元素進行賦值可以引用某個數組元素的值下標可以是:整型的變量、常量、表達式,如

a[i*3]、a[3*2]、……但不能超出有效范圍。下標越界的處理C編譯系統對下標越界不做判斷,不報錯!編程人員要慎重對待。如果越界,由于使用的是數組以外的某一存儲單元,會產生不可預料的錯誤!一維數組初始化在定義賦初值

staticintk[10]={1,2,3,4,5,6,7,8,9,10};可以給一部分元素賦初值

staticintk[10]={1,2,3,4,5};可以全部元素初始化為0staticintk[10]={0,0,0,0,0,0,0,0,0,0};staticintk[10];可以不指定數組長度:

staticintk[]={1,2,3,4,5,6,7};結果:k[0]=1,k[1]=2,k[2]=3,k[3]=4,k[4]=5,k[5]=0,k[6]=0,k[7]=0,k[8]=0,k[9]=0結果:k[0]=0,k[1]=0,k[2]=0,k[3]=0,k[4]=0,k[5]=0,k[6]=0,k[7]=0,k[8]=0,k[9]=0結果:定義7個元素的數組k[0]=1,k[1]=2,k[2]=3,k[3]=4,k[4]=5,k[5]=0,k[6]=7靜態(tài)存儲數組才能初始化舉例:例6.2Fibonacci數列。main(){inti;staticintf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf(“\n”);printf(“%12d”,f[i]);}定義一個20個元素的數組把數組前兩個元素初始化為1,1。形成Fibonacci數列:1,1,2,3,5,8,13,21,34,55,……每輸出五個換一行。按每個數據占12列的寬度、右對齊的方式輸出舉例:起泡法排序:985103-1895103-1比較相鄰兩個數859103-1859103-1859310-18593-110第一輪把最大的數換到最后一個8593-1105893-1105893-1105839-110583-1910583-1910538-191053-1891053-1891035-189103-158910-1358910第二輪把最大的數換到倒數第2個第三輪把最大的數換到倒數第3個起泡法程序框圖

輸入n個數,給a[1]到a[n]forj=1ton-1fori=1ton-ja[i]>a[i+1]

假t=a[i]a[i+1]=a[i]a[i]=t

輸出a[1]到a[n]main(){inta[10];inti,j,t;printf(“Inputnumbers:”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“\n”);for(j=0;j<9;j++)for(i=0;i<=9-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}

printf(“Thesortedmumbers:”);for(i=0;i<10;i++)printf(“%d“,a[i]);}從鍵盤輸入10個整數,并把它存放在數組a中。整個排序過程!輸出6.2二維數組定義:類型數組名[常量表達式][常量表達式]例如:floatk[4][5],h[3][4];在內存中的排列

k[0][0]k[0][1]k[0][2]k[0][3]k[0][4]k[1][0]k[1][1]k[1][2]k[1][3]k[1][4]k[2][0]k[2][1]k[2][2]k[2][3]k[2][4]k[3][0]k[3][1]k[3][2]k[3][3]k[3][4]引用:數組名[下標][下標]例如:

inta[3][4],b[2][3];……a[2][3]=90;b[1][3]=a[2][3]/3;可以對數組的某個元素賦值。元素可以出現在表達式中。注意:數組定義中常量表達式與數組引用中的下標的區(qū)別。二維數組的初始化分行給數組賦值:

staticinta[3][3]={{1,2,3},{3,2,5},{3,5,7}};對整個數組賦值

staticinta[3][3]={1,2,3,3,2,5,3,5,7};對部分元素賦值

staticinta[3][3]={{1,2},{5},{7}};staticintb[3][3]={{1,2},{},{7,8}};可以缺省第一維的長度

staticintb[][3]={1,2,3,4,5,6,7,8,9};staticinta[][4]={{3,0,0},{},{1,10}};這時C編譯系統可以計算出第一維的長度。例6.4把矩陣轉置。main(){staticinta[2][3]={{1,2,3},{4,5,6}};staticintb[3][2],j,i;printf("arraya:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf("%5d",a[i][j]);b[j][i]=a[i][j];}printf("\n");}printf("Arrayb:\n");for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);printf("\n");}}把數組a初始化成:123456把數組a中的i行j列賦給數組b中j行i列進行數組轉置。例6.5求最大值main(){inti,j,row=0,column=0,max;staticinta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];思考:其他元素行嗎?0行嗎?for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;column=j;}printf("maxis%datrow%dcolumn%d\n",max,row,column);}如果找到一個比當前保存在max中的值大的,則保存其值、所在位置。fori=0to2forj=0to3a[i][j]>max

假max=a[i][j]row=icolumn=j6.3字符數組字符數組定義:

charc[13];c[0]='I';c[1]='';c[2]='a';c[3]='m';c[4]='';c[5]='a';c[6]='s';c[7]='t';c[8]='u';c[9]='d';c[10]='e';c[11]='n';c[12]='t';Iamastudent因為字符存儲的是ASCII值,字符與整數是互通的,因此也可以定義成int存儲字符型。字符數組的初始化在定義時用字符進行初始化

staticcharc[13]={'I','','a','m','','a','s','t','u','d','e','n','t'};定義時初始化可以缺省數組長度:

staticcharc[]={'I','','a','m','','a','s','t','u','d','e','n','t'};同樣,字符可以定義二維數組、并初始化:

staticcharpd[][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};字符數組的引用例6.6main(){charcp[10];inti;for(i=0;i<10;i++)scanf("%c",&cp[i]);for(i=0;i<10;i++)printf("%c",cp[i]);printf("\n");}逐個字符輸入,輸入10個結束。逐個字符輸出。字符串和字符串結束標志“Cprogramming”為一個字符串,C語言在存放字符串時,在字符串結束時自動加上一個結束符'\0',即:CProgram\0

其中,‘\0’表示空(ASCII值為0)輸出時,遇到'\0'表示字符串結束。

'\0'在內存中占一個字節(jié)。用字符串對字符數組進行初始化staticcharc[10]={"Cprogram"};staticcharc[]={"Cprogram"};staticcharc[]="Cprogram";注意用字符串對字符數組進行初始化與用字符直接進行初始化的區(qū)別。用字符進行初始化時,為了和串一致,通常在后面加上'\0',如:

staticcharc[10]={'C','','p','r','o','g','r','a','m','\0'}字符數組的輸入輸出逐個輸出輸入:用格式符%c進行逐個輸出輸入。整串輸出:用格式符%sstaticc1[]="Cprogramming";printf("%s\n",c1);輸出項用數組名。輸出時,遇到\0認為串結束。輸出時不含\0,它是不可顯示的字符。

整串輸入:

charc1[20];scanf("%s",c1);變量列表中,給出c1數組名,且不加&符!輸入后,系統自動在輸入的串后加上\0??梢栽谝粋€scanf()中同時輸入幾個串,如:

charc1[20],c2[15],c3[10];scanf("%s%s%s",c1,c2,c3);輸入:

Howareyou?則分別把How送給c1、把are送給c2、把you?送給c3。

在scanf()中,用%s輸入時,用空格作分隔符。思考:中間含有空格的字符串能用scanf()輸入嗎?字符處理函數:puts(str)

把字符串str的內容顯示在顯示器上。gets(str)

從鍵盤輸入一個字符串。并存放在字符數組str中,以回車結束。strcat(str1,str2)

把串str1和str2連接起來,并存放在串str1中。strcpy(str1,str2)

把串str2的內容拷貝到str1串中,如:

staticcharstr1[10],str2[]="China";strcpy(str1,str2);

不能用str1=str2賦值;str1要足夠的空間;不夠大時會怎樣?連同‘\0’一起拷貝到str1;

可以拷貝str2中的前幾個字符,如:strcpy(str1,str2,4);tc,vc都報錯!strcmp(str1,str2)比較兩個串中字符ASCII值的大小。如果:兩個字符串中的字符完全一致,則相等。否則,根據第一個不同來判斷字符大小。比較結果:

str1=str2返回0str1>str2返回一個正數

str1<str2返回一個負數。如:strcmp(“abcd”,”abce”)-1strcmp(“abcf”,”adcf”)

溫馨提示

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

評論

0/150

提交評論