C語言用數(shù)組處理批量數(shù)據(jù)_第1頁
C語言用數(shù)組處理批量數(shù)據(jù)_第2頁
C語言用數(shù)組處理批量數(shù)據(jù)_第3頁
C語言用數(shù)組處理批量數(shù)據(jù)_第4頁
C語言用數(shù)組處理批量數(shù)據(jù)_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言用數(shù)組處理批量數(shù)據(jù)整型、字符型、浮點型數(shù)據(jù),都是簡單的數(shù)據(jù)類型。對于簡單的問題,使用這些簡單的數(shù)據(jù)類型就可以了。對于有些需要處理的數(shù)據(jù),只用以上簡單的數(shù)據(jù)類型是不夠的,難以反映出數(shù)據(jù)的特點,也難以有效地進行處理。比如,一個班有30個學生,毎個學生有一個成績,要求這30名學生的平均成績。實際上這些數(shù)據(jù)是同一個班級、同一門課程的成績,它們具有相同的屬性。人們想出這樣的辦法:既然它們都是同一類性質(zhì)的數(shù)據(jù)(都代表一個班中學生的成績)就可以用同一個名字(如s)來代表它們,而在名字的右下角加一個數(shù)字來表示這是第幾名學生的成績,例如,可以用s1,s2,s3,…S30代表學生1、學生2、學生3…學生30,這30個學生的成績。這個右下角的數(shù)字稱為下標。一批具有同名的同屬性的數(shù)據(jù)就組成一個數(shù)組(array),s就是數(shù)組名。(1)數(shù)組是一組有序數(shù)據(jù)的集合。數(shù)組中各數(shù)據(jù)的排列是有一定規(guī)律的,下標代表數(shù)據(jù)在數(shù)組中的序號。(2)用一個數(shù)組名(如s)和下標(如15)來唯一地確定數(shù)組中的元素,如s[15]就代表第15個學生的成績。(3)數(shù)組中的每一個元素都屬于同一個數(shù)據(jù)類型。不能把不同類型的數(shù)據(jù)(如學生的成績和學生的性別)放在同一個數(shù)組中。C語言規(guī)定用方括號中的數(shù)字來表示下標,如用s[15]表示S15,即第15個學生的成績。將數(shù)組與循環(huán)結合起來,可以有效地處理大批量的數(shù)據(jù)。1定義數(shù)組和引用一維數(shù)組一維數(shù)組是數(shù)組中最簡單的,它的元素只需要用數(shù)組名加一個下標,就能唯一地確定。比如:學生成績數(shù)組s就是一維數(shù)組。有的數(shù)組,其元素要指定兩個下標才能唯一確定,如用S2,3表示“第2班第3名學生的成績”,其中第1個下標代表班,第2個下標代表班中的學生序號。此時,s就是二維數(shù)組。還可以有三維甚至多維數(shù)組,如用S4,2,3表示4年級2班第3名學生的成績,這里s就是三維數(shù)組。它們的概念和用法基本上是相同的。定義一維數(shù)組要使用數(shù)組,必須在程序中先定義該數(shù)組,即通知計算機:由哪些數(shù)據(jù)組成數(shù)組,數(shù)組有多少元素,屬于哪個數(shù)據(jù)類型。否則計算機不會自動地把一批數(shù)據(jù)作為數(shù)組處理。下面是對數(shù)組的定義:inta[10];它表示定義了一個整型數(shù)組,數(shù)組名為a,此數(shù)組包含10個整型元素。定義一維數(shù)組的一般形式為類型說明符數(shù)組名[常量表達式];說明:(1)數(shù)組名的命名規(guī)則和變量名相同,遵循標識符命名規(guī)則。(2)在定義數(shù)組時,需要指定數(shù)組中元素的個數(shù),方括號中的常量表達式用來表示元素的個數(shù),即數(shù)組長度。例如,指定a[10],表示a數(shù)組有10個元素。注意,下標是從0開始的,這10個元素是a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。按數(shù)組的定義,不存在數(shù)組元素a【10】(3)常量表達式中可以包括常量和符號常量,如“inta[3十5];”是合法的。不能包含變量,如“inta[n];”是不合法的。也就是說,C語言不允許對數(shù)組的大小作動態(tài)定義,即數(shù)組的大小不依賴于程序運行過程中變量的值。例如,下面這樣定義數(shù)組是不行的:intn;scanf("%d",&n);//企圖在程序中臨時輸入數(shù)組的大小inta[n];∥數(shù)組長度性質(zhì)是常量,一定不是變量,它有地址,數(shù)值是可變的,不能變量表示數(shù)組長度。數(shù)組整體是變量。用“inta[10];”定義了數(shù)組a后,在內(nèi)存中劃出一片存儲空間,存放了一個有10個整型元素的數(shù)組。可以看到,用一個“inta[10];”,就相當于定義了10個簡單的整型變量,比較方便。2引用一維數(shù)組元素在定義數(shù)組并對其中各元素賦值后,就可以引用數(shù)組中的元素。應注意:只能引用數(shù)組元素而不能一次整體調(diào)用整個數(shù)組全部元素的值。引用數(shù)組元素的表示形式為數(shù)組名[下標]例如,a[0]就是數(shù)組a中序號為0的元素,它和一個簡單變量的地位和作用相似。“下標”可以是整型常量或整型表達式。例如下面的賦值表達式包含了對數(shù)組元素的引用,a[0]=a[5]+a[7]-a[2*3]3一維數(shù)組的初始化在定義數(shù)組的同時給各數(shù)組元素賦值,稱為數(shù)組的初始化。用“初始化列表”方法實現(xiàn)數(shù)組的初始化。(1)在定義數(shù)組時對全部數(shù)組元素賦予初值。例如:inta[10]={0,,1,2,3,4,5,6,7,8,9};將數(shù)組中各元素的初值順序放在一對花括號內(nèi),數(shù)據(jù)間用逗號分隔?;ɡㄌ杻?nèi)的數(shù)據(jù)效為“初始化列表”。經(jīng)過上面的定義和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。(2)可以只給數(shù)組中的一部分元素賦值。例如:inta[10]={0,1,2,3,4};定義a數(shù)組有10個元素,但花括號內(nèi)只提供5個初值,這表示只給前面5個元素賦初值,系統(tǒng)自動給后5個元素賦初值為0。(3)如果想使一個數(shù)組中全部元素值為0,可以寫成inta[10]=(0,0,0,0,0,0,0,0,0,0);或inta[10]=(0);(4)在對全部數(shù)組元素賦初值時,由于數(shù)據(jù)的個數(shù)已經(jīng)確定,因此可以不指定數(shù)組長度。例如://未賦值的部分元素自動設定為0inta[5]=(1,2,3,4,5)可以寫成inta={1,2,3,4,5}在第2種寫法中,花括號中有5個數(shù),雖然沒有在方括號中指定數(shù)組的長度,但是系統(tǒng)會根據(jù)花括號中數(shù)據(jù)的個數(shù)確定a數(shù)組有5個元素。但是,如果數(shù)組長度與提供初值的個數(shù)不相同,則方括號中的數(shù)組長度不能省略。例如,想定義數(shù)組長度為10,就不能省略數(shù)組長度的定義,而必須寫成inta[10]=(1,2,3,4,5};只初始化前5個元素,后5個元素為0。說明:如果在定義數(shù)值型數(shù)組時,指定了數(shù)組的長度并對之初始化,凡未被"初始列表”指定初始化的數(shù)組元素,系統(tǒng)會自動把它們初始化為0(如果是字符型數(shù)組,則初始為"\0”,如果是指針型數(shù)組,則初始化為NULL,即空指針)。4一維數(shù)組程序?qū)嵗纾阂阎皟身棾踔禐?,1,后面一項是前面兩項之和,依次類推,顯示前40項數(shù)據(jù)。如果用簡單變量處理的,只定義3個變量,程序可以順序計算并輸出各項數(shù)據(jù)值,但不能在內(nèi)存中保存這些數(shù)。假如想直接輸出數(shù)列中的第40個數(shù)是很困難的。查資料找到下面程序:#include<stdio.h>//斐波那鍥數(shù)列第四十項為多少(前兩項的和是后一項)intFabonacci(intn){intf1=1;intf2=1;intf3=1;inti;for(i=3;i<=n;i++)//前兩項的和給第三項,然后2給1,3給2{f3=f1+f2;f1=f2;f2=f3;}returnf3;}intmain(){printf("%d\n",Fabonacci(40));getchar();return0;}scanf和getchar的區(qū)別字符數(shù)據(jù)的輸入:scanf()函數(shù)是格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量中。在scanf()語句的格式串中由于沒有非格式字符在“%d%d%d”之間作為輸入時的間隔,因此在輸入時要用一個以上的空格或回車符作為每兩個輸入數(shù)之間的間隔。scanf()在讀取數(shù)字時會跳過空格、制表符和換行符。如:1#include<stdio.h>2intmain()3{4inta,b,c;5scanf("%d%d%d",&a,&b,&c);6printf("%d%d%d",a,b,c);}getchar()函數(shù)是鍵盤輸入函數(shù),其功能是從鍵盤上輸入一個字符。簡單來說就是getchar()函數(shù)在C程序中的功能是接收一個字符。scanf()的程序:1#include<stdio.h>2#include<stdlib.h>3intmain(void)4{5inta,b,c;6printf("pleaseinputnuma:\n");7scanf("%d",&a);8printf("pleaseinputnumb:\n");9scanf("%d",&b);10printf("pleaseinputnumc:\n");11scanf("%d",&c);12printf("%d,%d,%d",a,b,c);13}運行結果pleaseinputnuma:1pleaseinputnumb:2pleaseinputnumc:3123pressanykeytocontinuechar的程序:1#include<stdio.h>2#include<stdlib.h>3intmain(void)4{5chara,b,c;6printf("pleaseinputnuma:\n");7scanf("%c",&a);8printf("pleaseinputnumb:\n");9scanf("%c",&b);10printf("pleaseinputnumc:\n");11scanf("%c",&c);12printf("%c,%c,%c",a,b,c);}程序連續(xù)接收了三個字符,在C中enter鍵代表一個換行符,所以當輸入完a的值‘q’之后按下enter鍵,換行符立馬被字符b接收了,然后程序再向下走,輸入c的值‘w’。結果就會按順序顯示a,b,c的值,我們已經(jīng)知道a='q',b='\n',c='w';所以結果就會顯示兩行。getchar()程序:1#include<stdio.h>2#include<stdlib.h>3intmain(void)4{5chara,b,c;6printf("pleaseinputnuma:\n");7scanf("%c",&a);8getchar();9printf("pleaseinputnumb:\n");10scanf("%c",&b);11getchar();12printf("pleaseinputnumc:\n");13scanf("%c",&c);14printf("%c,%c,%c",a,b,c);15}如果用數(shù)組來處理,每一個數(shù)組元素代表數(shù)列中的一個數(shù),依次求出各數(shù)并存放在相應的數(shù)組元素中即可。數(shù)組是變量,有空間存儲地址,可以存放數(shù)組元素,要顯示20項數(shù)值,直接提取20項數(shù)據(jù)。編寫程序:#include<stdio.h>intmain()inti;intf[20]={1,1};//對最前面兩個元素[0]和[1]賦初值1,1。for(i=2;i<20;i++)f[i]=f[i﹣2]+f[i﹣1];//先后求出f[2]~[19]的值for(i=0;i<20;i++)if(i%5==0)printf("\n");printf("%12d",f[i]);//控制每輸出5個數(shù)后換行//輸出一個數(shù)printf("\n");return0;該程序只計算20個數(shù),定義數(shù)組長度為20,對最前面兩個元素f[0]和f[1]均指定初值為1,根據(jù)數(shù)列的特點,由前面兩個元素的值可計算出第3個元素的值,即f[2]=f[0]+f[1];在循環(huán)中可以用以下語句依次計算出f[2]~f[19]的值。f[i]=f[i-2]+f[i-1];if語句用來控制換行,每行輸出5個數(shù)據(jù)。5定義和引用二維數(shù)組有的問題需要用二維數(shù)組來處理。例如,有3個小分隊,每隊有6名隊員,要把這些隊員的工資用數(shù)組保存起來以備查。這就需要用到二維數(shù)組。如果建立一個數(shù)組pay,它應當是二維的,第一維用來表示第幾分隊,第二維用來表示第幾個隊員。例如用pay2;3表示2分隊第3名隊員的工資,它的值是1725。二維數(shù)組常稱為矩陣(matrix)。把二維數(shù)組寫成行(row)和列(column)的排列形可以有助于形象化地理解二維數(shù)組的邏輯結構。5.1怎樣定義二維數(shù)組怎樣定義二維數(shù)組呢?其基本概念與方法和一維數(shù)組相似。如:floatpay[3][6];以上定義了一個float型的二維數(shù)組,第1維有3個元素,第2維有6個元素。每一維的長度分別用一對方括號括起來。二維數(shù)組定義的一般形式為類型說明符數(shù)組名[常量表達式常量表達式];例如:floata[3][4],b[5][10];定義a為3×4(3行4列)的數(shù)組,b為5X10(5行10列)的數(shù)組。注意,不能寫成floata[3,4],b[5,10];//在一對方括號內(nèi)寫兩個下標,錯誤C語言對二維數(shù)組采用這樣的定義方式,使得二維數(shù)組可被看作一種特殊的一維數(shù)組:它的元素又是一個一維數(shù)組。例如,可以把a看作一個一維數(shù)組,它有3個元素:a[0].a[1],a[2]每個元素又是一個包含4個元素的一維數(shù)組。a[0]…a[0][0]a[o][1]a[0][2]a[0][3]a[1]…a[1][0]a[1][1]a[1][2]a[1][3]a[2]--a[2][0]a[2][1]a[2][2]a[2][3]可以把a[0],a[1],a[2]看作3個一維數(shù)組的名字。上面定義的二維數(shù)組可以理解為定義了3個一維數(shù)組,即相當于floata[0][4],a[1][4],a[2][4];此處把a[0],a[1],a[2]看作一維數(shù)組名。C語言中,二維數(shù)組中元素排列的順序是按行存放的,即在內(nèi)存中先順序存放第1行的元素,接著再存放第2行的元素。假設數(shù)組a存放在從2000字節(jié)開始的一段內(nèi)存單元中,一個元素占4個字節(jié),前16個字節(jié)(2000~2015)存放序號為0的行中的4個元素,接著的16個字節(jié)(2016~2031)存放庫號為1的行中的4個元素,余類推。注意:用矩陣形式(如3行4列形式)表示二維數(shù)組,是邏輯上的概念,能形象地示出行列關系。而在內(nèi)存中,各元素是連續(xù)存放的,不是二維的,是線性的。C語言還允許使用多維數(shù)組。有了二維數(shù)組的基礎,再掌握多維數(shù)組是不困難的。如,定義三維數(shù)組的方法如下:floata[2][3][4];多維數(shù)組元素在內(nèi)存中的排列順序為:第1維的下標變化最慢,最右邊的下標變化最快。5.2怎樣引用二維數(shù)組的元素二維數(shù)組元素的表示形式為數(shù)組名[下標][下標]如:a[2][3]表示a數(shù)組中序號為2的行中序號為3的列的元素。下標應是整型表達式,如a[2-1][2*2-1]。不要寫成a[2,3]或a[2-1,2*2-1]形式。數(shù)組元素可以出現(xiàn)在表達式中,也可以被賦值,如:b[1][2]=a[2][3]/2注意:在引用數(shù)組元素時,下標值應在已定義的數(shù)組大小的范圍內(nèi)。在這個問題上常出現(xiàn)錯誤。例如:inta[3][4];a[3][4]=3;按以上的定義,數(shù)組a可用的“行下標”的范圍為0~2,“列下標”的范圍為0~3。//定義a為3X

溫馨提示

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

評論

0/150

提交評論