第五章數(shù)組的概念

5.1數(shù)組簡介

說明數(shù)組的概念的及其作用的最好方法束亏,是通過一個例子铸豁,來說明使用數(shù)組后程序會變得非常簡單

5.1.1 不用數(shù)組的程序

如何聲明一個數(shù)組
數(shù)據(jù)類型 數(shù)組名稱[長度];

  • C語言中的數(shù)組初始化是有三種形式的
    數(shù)據(jù)類型 數(shù)組名稱[長度n] = {元素1,元素2…元素n};
    數(shù)據(jù)類型 數(shù)組名稱[] = {元素1,元素2…元素n};
    數(shù)據(jù)類型 數(shù)組名稱[長度n]; 數(shù)組名稱[0] = 元素1; 數(shù)組名稱[1] = 元素2; 數(shù)組名稱[n] = 元素n+1;

5.1.2 什么是數(shù)組

  • 字符串碰到了零憎蛤,就意味著字符串結(jié)束了库快,是一個標
    標準庫提供一個memset把字符數(shù)組清零
  • 數(shù)組是一組數(shù)目固定产阱,類型相同的數(shù)據(jù)項渠退,數(shù)組中的數(shù)據(jù)項稱為元素。
    int numbers [10];//聲明數(shù)組 類型名稱 數(shù)組名[元素個數(shù)]
  • 方括號中的數(shù)字定義了要存放在數(shù)組中的元素個數(shù)设预,稱為數(shù)組維
  • 數(shù)組有一個類型徙歼,它組合了元素的類型和數(shù)組中的元素個數(shù)
  • 存儲在數(shù)組中的每個數(shù)據(jù)項都用相同的名稱訪問,在上述例子中,該名稱就是numbers.可以在數(shù)組名稱后的方括號內(nèi)使用索引值魄梯,索引值是從零開始的連續(xù)的整數(shù)桨螺。0是第一個元素的索引值,注意酿秸,索引值是從0開始的灭翔,不是1.數(shù)組元素的索引值是與第一個元素的偏移量

存在的問題

  1. 如何訪問數(shù)組元素的值?

  2. 如何訪問數(shù)組元素辣苏?肝箱??
    (1)要選擇某個元素稀蟋,可以在數(shù)組名稱后的方括號內(nèi)使用索引值
    (2)在程序執(zhí)行期間計算的整數(shù)表達式煌张。該整數(shù)必須是對數(shù)組有效的索引值。

5.13 使用數(shù)組

  • 數(shù)組可以由整個數(shù)組當作函數(shù)的參數(shù)退客,也可以由數(shù)組中的某個元素當作函數(shù)的參數(shù):
    1骏融、整個數(shù)組當作函數(shù)參數(shù),即把數(shù)組名稱傳入函數(shù)中井辜,例如:

    2绎谦、數(shù)組中的元素當作函數(shù)參數(shù)管闷,即把數(shù)組中的參數(shù)傳入函數(shù)中粥脚,例如:

    數(shù)組作為函數(shù)參數(shù)時注意以下事項:
    1、數(shù)組名作為函數(shù)實參傳遞時包个,函數(shù)定義處作為接收參數(shù)的數(shù)組類型形參既可以指定長度也可以不指定長度刷允。
    2、數(shù)組元素作為函數(shù)實參傳遞時碧囊,數(shù)組元素類型必須與形參數(shù)據(jù)類型一致树灶。

5.2 尋址運算符 &

  • 尋址運算符&輸出其操作數(shù)的內(nèi)存地址,尋址運算符&廣泛用于scanf()糯而,尋址運算符放在存儲輸入的變量名稱之前天通,scanf()函數(shù)就可以利用這個變量的地址
    把尋址運算符放在變量名稱之前,函數(shù)就可以利用這個變量的地址熄驼。
  • 使用%u顯示sizeof生成的值
    使用新的格式說明符%p來輸出變量的地址(內(nèi)存地址)

5.3 數(shù)組名稱和地址

long number[4]

數(shù)組名稱number指定了存儲數(shù)據(jù)項的內(nèi)存區(qū)域地址像寒,把該地址和索引值組合起來就可以找到每一個元素
聲明數(shù)組時要給編譯器提供為數(shù)組分配內(nèi)存所需的所有信息。

  • 值的類型決定了每個元素需要的字節(jié)數(shù)
    數(shù)組維指定看元素的個數(shù)
  • 數(shù)組占用的字節(jié)數(shù)是元素個數(shù)乘以每個元素的字節(jié)數(shù)
  • 數(shù)組元素的地址是數(shù)組開始的地址瓜贾,加上元素的索引值乘以數(shù)組中每個元素類型所需的字節(jié)

5.4 數(shù)組的初始化

  • 在大括號中指定一列初值诺祸,它們用逗號分開,并且數(shù)組大小由列表中的初值個數(shù)來確定祭芦。
    double values[] = { 1.5, 2.5, 3.5, 4.5, 5.5 }
    此語句聲明了包含5個元素的數(shù)組values,values[0]的初值是1.5
  • 整個數(shù)組初始化為零
    double values[5] ={0.0}
  • 前三個元素用括號內(nèi)的值初始化筷笨,后兩個元素初始化為0
    double values[5] ={1.5, 2.5, 3.5}

5.5 確定數(shù)組的大小

  • sizeof 運算符可以計算指定類型的變量所占用的字節(jié)數(shù),
 printf("The size of a variable of type long is %zu bytes.\n", sizeof(long));
  • sizeof運算符后的類型名稱的括號是必須的
  • 注意:
    sizeof運算符生成size_t類型的值
  • sizeof運算符用于數(shù)組可以
  • 數(shù)組的聲明
        double values[5] = {1.5, 2.5, 3.5, 4.5, 5.5 }
  • 可以用以下語句輸出這個數(shù)組所占用的字節(jié)數(shù)
    printf("The size of the array, values , is %zu bytes.\n", sizeof values);
  • 輸出如下:
    The size of the array, values, is 40 bytes.

*數(shù)組占用的內(nèi)存是單個元素的字節(jié)數(shù)乘以元素個數(shù), 使用sizeof運算符計算數(shù)組中元素的數(shù)目

 size_t    element_count = sizeof values/sizeof values[0];
  • 計算數(shù)組元素的數(shù)量
size_t element_count = sizeof values/sizeof(double);

  • sizeof運算符應(yīng)用于變量時不需要使用括號,但一般還是使用它們
double values[5] = {1.5, 2.5, 3.5, 4.5 , 5.5}
size_t element_count = sizeof(values)/sizeof(values[10])
printf("The size of the array is %zu bytes ", sizeof(values));
printf("and there are %u elements of %zu bytes each\n", element_count, sizeof(values)[0]));

該語句輸出如下:

The size of the arry is 40 bytes and  there are 5 elements of   8 bytes each

*在使用循環(huán)處理數(shù)組

double values[5] = { 1.5, 2.5, 3.5, 4.5, 5.5 };
double sum = 0.0;
for(unsigned int i = 0; i < sizeof(values)/sizeof(values[0]) ; ++i)
sum +=values[i];
printf("The sum of the values is %.2f", sum );

這個循環(huán)將數(shù)組中所有的元素加起來胃夏,使用sizeof運算符計算數(shù)組的元素的個數(shù)

5.6 多維數(shù)組

  • 聲明二維數(shù)組
    float carrots[25] [50];
    以上語句聲明了一個數(shù)組carrots轴或,它包含25行50個浮點數(shù)元素。注意:每一維都放在自己的方括號中仰禀。
  • 聲明二維浮點數(shù)組
    float number[3][5];
  • 分配給每個元素的內(nèi)存量取決于數(shù)組所含的變量的類型
    float number [4] [10]
    數(shù)組元素類型float.占4 個字節(jié)侮叮。數(shù)組占用的內(nèi)存總數(shù)4410個字節(jié),即160個字節(jié)

5.7 多維數(shù)組的初始化

多維數(shù)組的定義格式是:

數(shù)據(jù)類型 數(shù)組名稱[常量表達式1][常量表達式2]...[常量表達式n];

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

二維數(shù)組的初始化類似于一維數(shù)組的初始化悼瘾,區(qū)別是把每一行的初始值放在大括號{}中囊榜,再把所有行放在一對大括號中:

int number [3] [4] =      {

                                           { 10, 20, 30, 40 },
                                           { 15, 25, 35 ,45 },
                                           { 46, 48, 49, 59 }
                                    };

三維數(shù)組的初始化
三維數(shù)組有三級嵌套的括號;內(nèi)層的括號包含每行的初始值亥宿。

int  number [2][3][4] ={
                                      {
                                           { 10, 20, 30, 40 },
                                           { 15, 25, 35 ,45 },
                                           { 46, 48, 49, 59 }
                                     },
                                     {
                                           { 10, 20, 30, 40 },
                                           { 15, 25, 35 ,45 },
                                           { 46, 48, 49, 59 }
                                    }
                                  };

如果提供的初始值個數(shù)少于行中的元素數(shù)卸勺,就必須給每一行的值加上括號。

  • 利用嵌套循環(huán)處理多維數(shù)組中的所有元素烫扼,嵌套的層數(shù)就是數(shù)組的維數(shù)
    int sum = 0;
      for( int i = 0, i < 2; ++i)
      {
          for(int j = 0, j < 3; ++j)
          {
             for(int k =0, k <4 ; ++k)
             {
                sum += number[i][j][k];
             }
          }
      }
printf("The sum of the value in the numbers array is %d.", sum);
  • 使用sizeof運算符可以確定多維數(shù)組中每一維的元素個數(shù)
for(int i = 0, i < sizeof(numbers)/sizeof(numbers[0]) ; ++i)
{
    for(int j = 0, j < sizeof(numbers[0])/sizeof(numbers[0][0]) ; ++j)
    {
        for(int k = 0, k <sizeof(numbers[0][0]/sizeof(numbers[0][0][0]); ++k)
        {
            sum += numbers[i][j][k];
        }
    }
}

5.8變長數(shù)組

什么是變長數(shù)組曙求?
變長數(shù)組的作用是什么???是為了達到怎樣的目的呢?是實現(xiàn)什么呢映企?悟狱?

可以定義其長度在程序運行期間確定的數(shù)組

size_t size = 0;
printf("Enter the  number of elements you want to store: ");
scanf("%zd", &size);
float values[size];

以上代碼,把從鍵盤上讀取的一個值放在size中堰氓,使用size的值指定數(shù)組的的長度挤渐。因為size_t 是用實現(xiàn)代碼定義的整數(shù)類型,

還可以在執(zhí)行期間確定二維或多維數(shù)組中的任意或所有維双絮。例如:

size_t rows = 0;
size_t columns = 0;
printf("Enter the number of rows you want to store: ");
scanf("%zd",&rows);
printf("Enter the number of columns in a row: ");
scanf("%zd",&columns);
float beans[rows][columns];
#ifdef   ___STDC_NO_VLA__
   printf("Variable  length arrays are not supported.\n");
   exit(1);
#endif

以上代碼用于檢測編譯器是否支持變成數(shù)組浴麻。

例如:

這樣定義了一個名稱為num數(shù)據(jù)類型為int二維數(shù)組囤攀。其中第一個[3]表示第一維下標的長度软免,就像購物時分類存放的購物;第二個[3]表示第二維下標的長度焚挠,就像每個購物袋中的元素膏萧。
我們可以把上面的數(shù)組看作一個3×3的矩陣,
如下圖:

多維數(shù)組的初始化與一維數(shù)組的初始化類似也是分兩種:

1蝌衔、數(shù)據(jù)類型 數(shù)組名稱[常量表達式1][常量表達式2]...[常量表達式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..,值n}};
2榛泛、數(shù)據(jù)類型 數(shù)組名稱[常量表達式1][常量表達式2]...[常量表達式n]; 數(shù)組名稱[下標1][下標2]...[下標n] = 值;

多維數(shù)組初始化要注意以下事項:

1、采用第一種始化時數(shù)組聲明必須指定列的維數(shù)胚委。因為系統(tǒng)會根據(jù)數(shù)組中元素的總個數(shù)來分配空間挟鸠,當知道元素總個數(shù)以及列的維數(shù)后,會直接計算出行的維數(shù)亩冬;
2艘希、采用第二種初始化時數(shù)組聲明必須同時指定行和列的維數(shù)

現(xiàn)有三行三列的二維數(shù)組int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};硼身,編寫程序?qū)崿F(xiàn)計算對角線元素之和。

Paste_Image.png
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(void)
{
    char str[10]={'H','e','l','l','o','\0'}

    printf("string length : %\n",strlen(str));
return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main (void)
{
   char str[] ="hello world";
   
   for(int i=0;i<11;i++)
   {
      printf("[index:%d]%c\n",i,str[i]);
   }

return 0;
}

如何在c語言中創(chuàng)建和使用數(shù)組

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int  len =10;
    int  arr[len] ;//這種形式是錯的 int arr[10];

   for(int  a =0;a<len;a++)
   {
      arr[a] = 0;
   }


   for(int i =0;i<len;i++)
   {
      printf("index %d,and value is  %d\n",i,arr[i]);
   }
   return 0;
}

數(shù)組的初始化

     int arr[] ={1,2,5,7,3,8}
     for(int  i=0;i<6;i++)
     {
          printf("%d\n",arr[i]);
      }
#include <stdio.h >
#include <stdlib.h >
 
int main (void)
{
    int arr[3][4];
    
    for(int i=0; i<3; i++)
    {
        for(int  j=0; j<4;j++)
        {
             arr[i][j] =0;
        }
     }
     for(int i=0; i< 3;i++)
     {
          for( int j =0;i<4;j++)
          {
              printf("index(%d,%d),%d\n",i,j,arr[i][j]);
          }
      }
  return 0;
}

綜合題

在一個長度為10的整型數(shù)組里面覆享,保存了班級10個學生的考試成績佳遂。要求編寫5個函數(shù),分別實現(xiàn)計算考試的總分撒顿,最高分丑罪,最低分,平均分和考試成績降序排序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凤壁,一起剝皮案震驚了整個濱河市吩屹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拧抖,老刑警劉巖煤搜,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唧席,居然都是意外死亡擦盾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門淌哟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迹卢,“玉大人,你說我怎么就攤上這事徒仓「睿” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵蓬衡,是天一觀的道長喻杈。 經(jīng)常有香客問我,道長狰晚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任缴啡,我火速辦了婚禮壁晒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘业栅。我一直安慰自己秒咐,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布碘裕。 她就那樣靜靜地躺著携取,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帮孔。 梳的紋絲不亂的頭發(fā)上雷滋,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天不撑,我揣著相機與錄音,去河邊找鬼晤斩。 笑死焕檬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的澳泵。 我是一名探鬼主播盟广,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼悼吱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凉蜂,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宵荒,沒想到半個月后幢尚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蕉鸳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年乎赴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潮尝。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡榕吼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勉失,到底是詐尸還是另有隱情羹蚣,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布乱凿,位于F島的核電站顽素,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏徒蟆。R本人自食惡果不足惜胁出,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望段审。 院中可真熱鬧全蝶,春花似錦、人聲如沸寺枉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姥闪。三九已至始苇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筐喳,已是汗流浹背催式。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工函喉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蓄氧。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓函似,卻偏偏與公主長得像,于是被迫代替她去往敵國和親喉童。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理堂氯,服務(wù)發(fā)現(xiàn)蔑担,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型咽白。 運用指針編程是C語言最主要的風格之一啤握。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,444評論 3 44
  • 基本面分析&策略 以安倍晉三為代表的日本政府晶框,將在今日公布28萬億日元的具體使用細節(jié)排抬,但需要注意的是,內(nèi)閣尚未批準...
    3fa7d660244e閱讀 150評論 0 0
  • 說起東野圭吾的作品授段,最初接觸的是神探伽里略蹲蒲,伽里略里印象最深的則是x容疑者的現(xiàn)身。那部作品我每次是看一邊哭一邊侵贵,最...
    任小菲閱讀 350評論 0 1
  • 當我趕到醫(yī)院時窍育,小姐妹小艾正在輸液卡睦,蒼白的床單和被子襯得她原本蒼白的臉更加沒有血色,她嘴唇烏青漱抓,緊緊裹住被子表锻,瘦小...
    萬伊刀閱讀 333評論 0 0