C語言筆記之利用數(shù)組處理批量數(shù)據(jù)

第六章

1.一維數(shù)組的定義和引用

- 定義一維數(shù)組

int a[10]

表示定義了一個(gè)整形數(shù)組娇妓,數(shù)組名為a缀壤,此數(shù)組有10個(gè)整型元素成榜。定義一維數(shù)組的一般形式為 ==類型符 數(shù)組名[常量表達(dá)式]==

  • [注意]

    定義數(shù)組時(shí)蚌卤,方括號中的常量表達(dá)式用來表示元素的個(gè)數(shù)筐付,即數(shù)組長度佑女。

    C語言不允許對數(shù)組的大小做動(dòng)態(tài)定義记靡,即數(shù)組的大小不依賴于程序運(yùn)行過程中變量的值谈竿,以下定義為不合法:

    int n;
    scanf("%d", &n);
    int a[n];
    

    如果在被調(diào)用的函數(shù)(不包括主函數(shù))中定義數(shù)組,其長度可以是變量或非常量表達(dá)式摸吠,在調(diào)用func函數(shù)式形參n從實(shí)參得到值空凸。這種情況被稱為“可變長數(shù)組”,允許在每次調(diào)用func函數(shù)時(shí)寸痢,n有不同的值呀洲。但是在執(zhí)行函數(shù)時(shí),n的值是不變的啼止,數(shù)組長度是固定的道逗。

    void func(int n){
        int a[2*n];
        ...
    }
    

    如果指定數(shù)組為靜態(tài)(static)存儲(chǔ)方式,則不能用“可變長數(shù)組”献烦。如

    static int a[2*n];  //不合法滓窍,a數(shù)組指定為static存儲(chǔ)方式
    

- 引用一維數(shù)組

引用數(shù)組元素的表示形式為 ==數(shù)組名[下標(biāo)]==

a[0] = a[5] + a[7] + a[2*3];
  • [注意]

    定義數(shù)組時(shí)用到的 ==數(shù)組名[常量表達(dá)式]== 和 引用數(shù)組元素時(shí)用的 ==數(shù)組名[下標(biāo)]== 形式相同,但含義不同巩那。例如:

    int a[10]; //這里的a[10]表示定義數(shù)組時(shí)指定數(shù)組包含10個(gè)元素
    t = a[6];  //這里的a[6]表示引用a數(shù)組中序號為6的元素
    

- 初始化

在定義數(shù)組時(shí)對全部數(shù)組元素賦予初值吏夯。

int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

只給一部分元素賦值,未賦值部分自動(dòng)設(shè)為0

int a[10] = {0, 1, 2, 3, 4}; // 部分賦值

對全部數(shù)組元素賦初值時(shí)即横,由于個(gè)數(shù)已經(jīng)確定噪生,所以可以不指定數(shù)組長度。

int a[] = {0, 1, 2, 3, 4};

2.二維數(shù)組的定義和引用

- 定義二維數(shù)組

一般形式為 ==類型符 數(shù)組名[常量表達(dá)式][常量表達(dá)式]==东囚;

float a[3][6];  //第一維有3個(gè)元素跺嗽,第二維有6個(gè)元素,分別用方括號括起來页藻,即a為3x4(3行4列)的數(shù)組;
float a[3,4][5,10]; //不合法抛蚁,一個(gè)方括號不能寫兩個(gè)下標(biāo);

-引用二維數(shù)組

二維數(shù)組的表示形式為 ==數(shù)組名[下標(biāo)][下標(biāo)]==

a[2][3]; //表示a數(shù)組中序號為2的行中序號為3的列的元素惕橙,下標(biāo)應(yīng)該是單個(gè)整型表達(dá)式瞧甩。

-初始化二維數(shù)組

分行給二維數(shù)組賦初值

int a[3][4] = {{1, 2,3, 4}, {1, 2,3, 4}, {1, 2,3, 4}};

int a[][4] = {{1, 2,3, 4}, {1, 2,3, 4}, {1, 2,3, 4}};//與上式效果相同

所有數(shù)據(jù)都寫在花括號內(nèi),按順序分配

int a[3][4] = {1, 2,3, 4, 1, 2,3, 4, 1, 2,3, 4};

int a[][4] = {1, 2,3, 4, 1, 2,3, 4, 1, 2,3, 4}; //與上式效果相同

對部分賦值

int a[3][4] = {{1}, {1}, {1}};

結(jié)果:
1 0 0 0
1 0 0 0
1 0 0 0

int a[3][4] = {{1}, {0, 1}, {0, 0, 1}}; //沒有賦值的部分自動(dòng)為0

結(jié)果:
1 0 0 0
0 1 0 0
0 0 1 0

int a[3][4] = {{1}, {}, {0, 0, 1}}; //第二行自動(dòng)為0

結(jié)果:
1 0 0 0
0 0 0 0
0 0 1 0

3.字符數(shù)組

- 定義字符數(shù)組

用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組弥鹦。字符數(shù)組中的一個(gè)元素存放一個(gè)字符肚逸。

char c[10]; //類似數(shù)值型數(shù)組

-初始化

初始化列表,列表中的初值個(gè)數(shù)不能大于數(shù)組長度彬坏,少于則自動(dòng)定義為空字符(即'\0')朦促。

char c[10] = {'I', '', 'a', 'm', '', 'h', 'a', 'p', 'p', 'y'};

char c[10] = {'I', '', 'a', 'm', '', 'h', 'a', 'p', 'p', 'y', '!'}; //不合法,超出數(shù)組長度會(huì)報(bào)錯(cuò)

char c[10] = {'I', '', 'a', 'm', '', 's', 'a', 'd'}; //  c[8]=c[9]='\0'栓始, 結(jié)果:I am sad\0\0

- 引用字符數(shù)組

引用一個(gè)元素得到一個(gè)字符

# include <stdio.h>
int main()
{
    char c[11] = {'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y', '.'};//注意c[1]务冕、c[4]中的單引號內(nèi)有空格;
    int i;
    for(i=0; i<10; i++)
    printf("%c", c[i]);
    printf("\n");
    return 0;
}

運(yùn)行結(jié)果:
I am happy.

- 關(guān)于字符串和字符串的結(jié)束標(biāo)志

使用字符串常量對字符數(shù)組進(jìn)行初始化

char c[] = {"I am happy."}; //將單撇號變?yōu)殡p撇號表示字符串
char c[] = "I am happy."; //效果同上

實(shí)際工作中幻赚,人們關(guān)心的往往是字符串的有效長度而不是字符數(shù)組的長度禀忆。為了測試字符串的實(shí)際長度臊旭,C語言規(guī)定了一個(gè)“字符串結(jié)束標(biāo)志”,以字符‘\0’作為結(jié)束標(biāo)志箩退。也就是說在數(shù)組中遇到字符‘\0’离熏,表示字符串結(jié)束,把它前面的字符組成一個(gè)字符串戴涝。系統(tǒng)在處理字符串常量存儲(chǔ)時(shí)會(huì)自動(dòng)加一個(gè)‘\0’滋戳。

char c[] = {'C', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm', '. };
char c[] = {'h', 'a', 'p', 'p', 'y'};
輸出:happyram

char c[] = {'C', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm', '. };
char c[] = {'h', 'a', 'p', 'p', 'y', '\0'}; //手動(dòng)加一個(gè)‘\0’,新舊字符就不會(huì)連在一起
輸出:happy

- 字符數(shù)組的輸入輸出

逐個(gè)字符輸入輸出啥刻,使用格式符‘%c’奸鸯;

# include <stdio.h>
int main()
{
    char c[11] = {'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y', '.'};//注意c[1]、c[4]中的單引號內(nèi)有空格可帽;
    int i;
    for(i=0; i<10; i++)
    printf("%c", c[i]);
    printf("\n");
    return 0;
}

運(yùn)行結(jié)果:
I am happy.

將整個(gè)字符串一次輸入或輸出府喳,使用格式符‘%s’;

char c[] = {"China"};
printf("%s",c);   //printf函數(shù)中的輸出項(xiàng)是字符數(shù)組名蘑拯,而不是數(shù)組元素名
運(yùn)行結(jié)果:
China
  • [拓展]

    可以使用scanf函數(shù)輸入一個(gè)字符串

    char c[];
    scanf("%s", c); //c必須是已定義的字符數(shù)組名;
    
    char str1[],str2[],str3[];
    scanf("%s%s%s", str1, str2, str3); //輸入時(shí)應(yīng)以空格分隔字符串兜粘;
    

    scanf函數(shù)中的輸入項(xiàng)如果是字符數(shù)組名申窘,不要再加地址符‘&’,因?yàn)镃語言中的數(shù)組名代表該數(shù)組的起始地址

    printf("%o",c); //“%o”格式符可根據(jù)數(shù)組名輸出數(shù)組的起始地址孔轴;
    
    printf("%s",c); //按字符數(shù)組名c找到其數(shù)組起始地址剃法,然后逐個(gè)輸出其中的字符,直到遇到‘\0’為止路鹰;
    

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

  1. puts函數(shù)——輸出字符串的函數(shù)。

    char str[] = "China\nBeijing";
    puts(str);//可以包括換行符
    
    運(yùn)行結(jié)果:
    China
    Beijing
    
  2. gets函數(shù)——輸入字符串的函數(shù)gerts(str);

  • [puts和gets函數(shù)只能輸出或輸入一個(gè)字符串羹呵,不能寫成puts(str1,str2)]
  1. strcat函數(shù)——字符串連接函數(shù) strcat(str1, str2)琢融。

    char str1[30] = {"People's Republic of"};
    char str2[] = {"China."};
    printf("%s", strcat(str1, str2));
    
    運(yùn)行結(jié)果:
    People's Republic of China.
    
  2. strcpy和strncoy——字符串復(fù)制函數(shù)strcpy(str1, str2)

    strcpy將str2復(fù)制到str1中去

    char str1[10], str2[]="China";
    strcpy(str1, str2);
    
    運(yùn)行結(jié)果:
    China\0\0\0\0\0;
    

    strncpy將str2最前面的n個(gè)字符復(fù)制到str1中雁竞,取代str1中原有的最前面n個(gè)字符钦椭。strncpy(str1, str2, n);

  3. strcmp函數(shù)——字符串比較函數(shù)strcmp(str1, str2);

    將兩個(gè)字符串自左至右逐個(gè)字符相比(按ASCII碼值大小比較),知道出現(xiàn)不同的字符或遇到‘\0’為止碑诉。若出現(xiàn)不同的字符彪腔,則以第一對不相同的字符比較結(jié)果為準(zhǔn),位置在后面為大进栽。

    • str1==str2德挣,返回0;
    • str1>str2快毛,返回一個(gè)正整數(shù)格嗅;
    • str1<str2番挺,返回一個(gè)負(fù)整數(shù);
    if(strcmp(str1,str2)>0);
    printf("yes");
    
  4. strlen——測字符串長度的函數(shù)吗浩,指實(shí)際長度建芙,不包括‘\0’。

    char str[10] = "China";
    printf("%d", strlen(str));
    運(yùn)行結(jié)果:
    5
    
  5. strlwr——轉(zhuǎn)換為小寫的函數(shù)懂扼。strlwr(str)

  6. strupr——轉(zhuǎn)換為大寫的函數(shù)禁荸。strupr(str)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市阀湿,隨后出現(xiàn)的幾起案子赶熟,更是在濱河造成了極大的恐慌,老刑警劉巖陷嘴,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件映砖,死亡現(xiàn)場離奇詭異,居然都是意外死亡灾挨,警方通過查閱死者的電腦和手機(jī)邑退,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劳澄,“玉大人地技,你說我怎么就攤上這事∶氚危” “怎么了莫矗?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砂缩。 經(jīng)常有香客問我作谚,道長,這世上最難降的妖魔是什么庵芭? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任妹懒,我火速辦了婚禮,結(jié)果婚禮上双吆,老公的妹妹穿的比我還像新娘彬伦。我一直安慰自己,他們只是感情好伊诵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布单绑。 她就那樣靜靜地躺著,像睡著了一般曹宴。 火紅的嫁衣襯著肌膚如雪搂橙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音区转,去河邊找鬼苔巨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛废离,可吹牛的內(nèi)容都是我干的侄泽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼蜻韭,長吁一口氣:“原來是場噩夢啊……” “哼悼尾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肖方,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤闺魏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后俯画,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體析桥,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年艰垂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泡仗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猜憎,死狀恐怖娩怎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拉宗,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布辣辫,位于F島的核電站旦事,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏急灭。R本人自食惡果不足惜姐浮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葬馋。 院中可真熱鬧卖鲤,春花似錦、人聲如沸畴嘶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窗悯。三九已至区匣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒋院,已是汗流浹背亏钩。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工莲绰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姑丑。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓蛤签,卻偏偏與公主長得像,于是被迫代替她去往敵國和親栅哀。 傳聞我的和親對象是個(gè)殘疾皇子震肮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 第1章 第一個(gè)C程序第2章 C語言基礎(chǔ)第3章 變量和數(shù)據(jù)類型第4章 順序結(jié)構(gòu)程序設(shè)計(jì)第5章 條件結(jié)構(gòu)程序設(shè)計(jì)第6章...
    小獅子365閱讀 10,613評論 3 71
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型钙蒙。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)间驮; ...
    朱森閱讀 3,424評論 3 44
  • 數(shù)組在程序設(shè)計(jì)中躬厌,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來竞帽。這些按序排列的同類數(shù)據(jù)元素的集合稱...
    朱森閱讀 3,895評論 2 13
  • 一扛施、字符串操作 strcpy(p, p1) 復(fù)制字符串 strncpy(p, p1, n) 復(fù)制指定長度字符串 s...
    JaiUnChat閱讀 1,653評論 0 7
  • 我今天和陳霞坐在籃球場看球賽 球賽打得太爛于是我就開始看半場 看著那幾個(gè)打球的哥們兒跳投 轉(zhuǎn)身 后仰 我還發(fā)現(xiàn)其中...
    晃走可樂的氣閱讀 317評論 0 0