C語言一堆數據教案設計

篇五: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(" ");}