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(" ");}
-
瞭解什麼是編程語言
學習編程語言之前,首先要搞清楚“編程語言”這個概念。下面一起來看看!很小的時候,父母就教我們開口説話,也教我們如何理解別人講話的意思。經過長時間的薰陶和自我學習,我們竟然在不知不覺中學會了説話,同時也能聽懂其他小朋友説話的意思了,我們開始向父母要零花錢...
-
2017上半年計算機二級C語言考前模擬試題
為了幫助大家提高計算機考試成績,今天本站小編特地為大家收集了以下2017上半年計算機二級C語言考前模擬試題,歡迎學習!一、程序填空題給定程序中,函數fun的功能是:把形參S所指字符串中最右邊的n個字符複製到形參t所指字符數組中,形成一個新串。若s所指字符串的長度...
-
C語言輸出菱形的方法
題目:輸出行列都相等的菱形,如5行5列:行列123451*2***3*****4***5*分析:當行數等於總行數的一半時,*是遞增的,遞增為2。當行數大於總行數的一半時,*是遞減的,遞增為2。設有一個行列為n的菱形,我們用變量i作為行數,以0開始,ik作為n菱第i行要輸出的*個數。則i<=n的中值(用m...
-
在C語言中轉換時間的基本方法
本文主要介紹了在C語言中轉換時間的基本方法,分別是mktime()函數和localtime()函數的使用,供參考學習,感興趣的小夥伴們可以參考一下!想了解更多相關信息請持續關注我們應屆畢業生考試網!C語言mktime()函數:將時間轉換成經過的秒數頭文件:#include<time.h>定義函數:t...