當前位置:才華齋>計算機>C語言>

C語言一堆資料教案設計

C語言 閱讀(1.31W)

篇五:C語言一維陣列教案

C語言一堆資料教案設計

學 科:計算機科學與技術

課 程:C語言程式設計

課 題:一維陣列

課 時:2

教學目標:1、掌握一維陣列的定義和引用

2、掌握一維陣列的初始化方法

3、瞭解與一維陣列有關的應用程式設計方法

教學重點:一維陣列的定義和引用、初始化方法

教學難點:與一維陣列有關的應用程式設計方法

教學方法:舉例法,引導法

教學步驟: 1、通過一個例子提出問題來引出本節課的知識點

2、講授一維陣列的定義和引用、初始化方法

3、示例訓練

4、進行本節課的總結及作業佈置

教 具:黑板 計算機 投影儀

教學過程:

一、匯入:

提問:儲存一個班50位同學的一門功課的成績,並且找出最高分和最低分,應如何實現?

解題思路:定義50個變數,從鍵盤中輸入值,然後再相互比較。處理起來很複雜,是否有更簡便的方法?引出本節課的知識點-----陣列。

二、講授:

1、陣列概述:

·陣列:是數目固定,型別相同的若干個變數的有序集合,用陣列名標識。

序:是陣列元素之間的位置關係,不是元素值的大小順序。

陣列名:是用於區別其它陣列及變數的。

·陣列元素:集合中的變數,屬同一資料型別,用陣列名和下標確定。

下標:是陣列元素在陣列中的位置。

·陣列的維數:陣列名後所跟下標的'個數。

2、一維陣列的定義

一維陣列是指由一個下標陣列元素組成的陣列。其定義形式為:

儲存型別 資料型別 陣列名[常量表達式]

例如:static int score[50];

它表示定義了一個名為score的陣列,該陣列有50個元素,其儲存型別為靜態型,資料型別為整型。

說明:

(1)儲存型別為任選項,可以是auto、static、extern儲存型別,但是沒有register型。

(2)資料型別是用來說明陣列元素的型別:int , char , float。

(3)陣列名的命名應遵守識別符號的命名規則,但是不能與其他變數同名。

(4)陣列名後是用方括號[ ]括起來的常量表達式。常量表達式表示的是陣列元素的個數,即陣列的長度。在上例中定義了陣列score [50],第一個元素為score [0],最後一個為score [49]。

(5)常量表達式中可以包括常量和符號常量,不能包含變數,因為C語言規定不允許對陣列的大小作動態定義。

(6)允許在同一個型別說明中,說明多個數組和多個變數,彼此間以逗號相隔。 例如:int a,b,k1[10],k2[20]; //定義了兩個一維陣列、兩個整型變數

判斷下面的定義是否合法:

int b, b[5]; //不合法,陣列名不能與變數名同名

#define size 10

int b[size]; //合法,size已經在巨集定義中說明,在程式中作為符號常量

int a(6); //不合法,陣列名後不能使用(),只能用[]

int n=5;

int a[n]; //不合法,不能用變數定義陣列元素的個數

int a[n+2]; //不合法,不能用變量表達式定義陣列元素的個數

一維陣列的儲存結構:C語言在編譯時給陣列分配一段連續的記憶體空間。記憶體位元組數=陣列元素個數*sizeof(元素資料型別)

陣列元素按下標遞增的次序連續存放。陣列名是陣列所佔記憶體區域的首地址,即陣列第一個元素存放的地址。

例 int a[5];

記憶體地址

佔用位元組數為:5*sizeof(int)=5*2=10

3、一維陣列元素的引用

陣列元素是組成陣列的基本單元。陣列元素用陣列名和下標確定。下標表示了元素在陣列中的順序號,C語言規定:陣列必須先定義,後使用。一維陣列的引用形式為:

陣列名[下標]

其中下標可以是整型常量、整型變數或整型表示式。例如有定義:

int t,a[10],i=2;

則以下都是正確的表示式:

t=a [6];

a[0]= a[i]+a[i+1];

引用說明:

(1)必須像使用變數那樣,先定義,再使用,如以下操作是錯誤的:

int x=a[2];

int a[10];

(2)下標的最小值為0,最大值是陣列大小減1。在前例中定義了陣列score [50],使用的時候不能使用 score [50], 否則產生陣列越界。C語言對陣列不作越界檢查,使用時要注意!

(3)在C語言中只能對陣列元素進行操作,不能一次對整個陣列進行操作。例如要輸出有10個元素的陣列,則必須使用迴圈語句逐個輸出各下標變數:

for(i=0; i<10; i++)

printf("%d",a[i]);

而不能用一個語句輸出整個陣列。

下面的寫法是錯誤的:

printf("%d",a);

例:輸出5個學生的成績

#include

void main ( )

{

int i, score[5]={82,79,65,91,86};

for (i=0;i<5;i++)

printf (" %d ",score[i]);

}

4、一維陣列的初始化

陣列的初始化就是給陣列元素賦初始值。主要有兩種方法:

1.陣列定義時初始化:就是在定義陣列時給陣列元素賦初值。其初始化的一般格式為:

資料型別 陣列名[陣列元素個數] ={值1,值2,… ,值n};

(1)對陣列全部元素賦初值

例如 int a[5]={2,4,6,8,10};

其作用是在定義陣列的同時將常量2、4、6、8、10分別置於陣列元素a[0]、a[1]、a[2]、a[3]、a[4]中。

(2)對陣列部分元素賦初值,其它陣列元素自動賦以0值

例如:

int a[4]={1,2 };執行後各元素的初值為a [0]=1,a [1]=2,a [2]=0,a [3]=0

(3)全部元素均初始化為0,可寫成:

int a[10]={0,0,0,0,0,0,0,0,0,0};或int a[10]={0};

不能寫成 int a[10]={0*10};

說明:

(1)陣列元素的值可以是數值型、字元常量或字串。

(2)陣列元素的初值必須依次放在一對大括號{ }內,各值之間用逗號隔開。

(3)在進行陣列的初始化時,{ }中值的個數不能超過陣列元素的個數。

例如:int a[5]={1,2,3,4,5,6};是一種錯誤的陣列初始化方式,所賦初值多於定

義陣列的元素個數。

(4)在給陣列所有元素賦初值時,可以不指定陣列長度。例如:

int a[ ]={1,2,3,4,5};則系統會自動定義陣列a的長度為5。

在定義時賦初值是一種簡單而行之有效的方法,它適用於長度較小的陣列或對長度較大的陣列部分元素賦值,而且可對每個陣列元素賦不同的值。

2.在程式中初始化:主要使用迴圈語句進行逐一賦值

例如:int i,score[50];

for (i=0;i<50;i++)

score [i]=0;

這種方法是在程式設計中普遍使用的一種方法,它適用於對某陣列元素進行有規律的賦值或接受使用者通過鍵盤輸入對陣列元素的賦值。

三、舉例:

1.以引例為例,從鍵盤輸入10個學生一門課的成績,找出最高分和最低分並輸出。 步驟:

(1) 輸入: 用for迴圈輸入10個學生的成績

(2) 處理:

(a) 先令max=min=score[0]

(b) 依次用score [i]和max,min比較(迴圈)

若max< score [i],令max= score [i]

若min> score [i],令min= score [i]

(3) 輸出: max和min

程式如下:

#include

void main()

{

int i;

float score [10],max,min;

printf("Enter 10 score s: ");

for(i=0;i<10;i++) //輸入10個浮點型的學生的成績

scanf("%f",& score [i]);

max=min= score [0];

for(i=1;i<10;i++) //迴圈比較,找出最高分和最低分

{

if(max< score [i]) max= score [i];

if(min> score [i]) min= score [i];

}

printf("Max score is %f ",max); //輸出最高分

printf("Min score is %f ",min); //輸出最低分

}

2.以引例為例,從鍵盤輸入10個學生一門課的成績,用冒泡法從低到高排序並輸出。 分析:氣泡排序法的基本思想是將相鄰兩個數進行比較,將小的調到前面。

排序過程:

(1)比較第一個數與第二個數,若為逆序score [0]> score [1],則交換;然後比較score

[1]與score [2]比較;依次類推,直至score [8]與score [9]比較為止——第一趟氣泡排序,結果最大的數被安置在最後一個元素score [9]位置上,此次共比較9次。

(2)對前9個數進行第二趟氣泡排序,結果使次大的數被安置在倒數第二個元素score

[8]位置,此次共比較8次。

(3)重複上述過程,共經過9趟氣泡排序後,排序結束

程式如下:

#include

void main()

{

int i,j;

float score [10], t,max,min;

printf("Enter 10 scores: ");

for(i=0;i<10;i++) //輸入10個浮點型學生的成績

scanf("%f",& score [i]);

printf(" ");

for(i=1;i<10;i++) //趟數,共9趟

{

for(j=0;j<10-i;j++) //實現一次冒泡操作

if(score [j]> score [j+1]) //交換score [j]和 score [j+1]

{

t= score [j]; score [j]=score [j+1]; score [j+1]= t;

}

}

for(i=0;i<10;i++) //輸出排好序的成績

printf(" %f ", score [i]);

printf(" ");}