C程序設(shè)計(jì)第06章_第1頁(yè)
C程序設(shè)計(jì)第06章_第2頁(yè)
C程序設(shè)計(jì)第06章_第3頁(yè)
C程序設(shè)計(jì)第06章_第4頁(yè)
C程序設(shè)計(jì)第06章_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、為了解決比較復(fù)雜的問題,本章介紹為了解決比較復(fù)雜的問題,本章介紹C語言提供的語言提供的一種最簡(jiǎn)單的構(gòu)造類型一種最簡(jiǎn)單的構(gòu)造類型數(shù)組。數(shù)組。6.1 一維數(shù)組的定義和應(yīng)用一維數(shù)組的定義和應(yīng)用6.2 二維數(shù)組的定義和應(yīng)用二維數(shù)組的定義和應(yīng)用6.3 字符數(shù)組與字符串字符數(shù)組與字符串第六章 數(shù) 組6.1 一維數(shù)組的定義和應(yīng)用一維數(shù)組的定義和應(yīng)用6.1.1 一一維數(shù)組的定義維數(shù)組的定義6.1.2 一維數(shù)組元素的引用一維數(shù)組元素的引用6.1.3 一維數(shù)組元素的初始化一維數(shù)組元素的初始化6.1.4 一維數(shù)組應(yīng)用舉例一維數(shù)組應(yīng)用舉例 6.1.1 一一維數(shù)組的定義維數(shù)組的定義如何存放某班如何存放某班30名同學(xué)的數(shù)

2、學(xué)考試成績(jī),并對(duì)它們進(jìn)行排序?名同學(xué)的數(shù)學(xué)考試成績(jī),并對(duì)它們進(jìn)行排序?基本類型:整型、實(shí)型、字符型基本類型:整型、實(shí)型、字符型 由基本類型的數(shù)據(jù)可以按一定規(guī)則組成由基本類型的數(shù)據(jù)可以按一定規(guī)則組成構(gòu)造類型構(gòu)造類型。數(shù)組就是一類最簡(jiǎn)單的構(gòu)造類型。數(shù)組就是一類最簡(jiǎn)單的構(gòu)造類型。數(shù)組:是有序數(shù)據(jù)的集合,每一個(gè)元素都屬于同一數(shù)數(shù)組:是有序數(shù)據(jù)的集合,每一個(gè)元素都屬于同一數(shù)據(jù)類型。據(jù)類型。 float a30; /*存放存放30名同學(xué)的數(shù)學(xué)考試成績(jī)名同學(xué)的數(shù)學(xué)考試成績(jī)*/元素:元素:a0, a1, a2 , a29數(shù)組同變量一樣,也必須先定義、后使用。數(shù)組同變量一樣,也必須先定義、后使用。一維數(shù)組是只有

3、一個(gè)下標(biāo)的數(shù)組,定義形式如下:一維數(shù)組是只有一個(gè)下標(biāo)的數(shù)組,定義形式如下:數(shù)據(jù)類型說明數(shù)據(jù)類型說明 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式 ;(1)“數(shù)據(jù)類型說明數(shù)據(jù)類型說明”是指數(shù)組元素的數(shù)據(jù)類型。是指數(shù)組元素的數(shù)據(jù)類型。(2)數(shù)組名,與變量名一樣,必須遵循標(biāo)識(shí)符命名規(guī))數(shù)組名,與變量名一樣,必須遵循標(biāo)識(shí)符命名規(guī)則。則。(3)“常量表達(dá)式常量表達(dá)式”必須用方括號(hào)括起來,指的是數(shù)必須用方括號(hào)括起來,指的是數(shù)組的元素個(gè)數(shù),它是一個(gè)整型值,其中可以包含常數(shù)和符號(hào)組的元素個(gè)數(shù),它是一個(gè)整型值,其中可以包含常數(shù)和符號(hào)常量,但不能包含變量。常量,但不能包含變量。注意注意:C語言中不允許動(dòng)態(tài)定義數(shù)組。語言中不允

4、許動(dòng)態(tài)定義數(shù)組。 特別說明特別說明:在數(shù)組定義時(shí),:在數(shù)組定義時(shí),“常量表達(dá)式常量表達(dá)式”外的方括號(hào);以及元素引用時(shí),外的方括號(hào);以及元素引用時(shí),“下標(biāo)表達(dá)式下標(biāo)表達(dá)式”外的方括號(hào),都是外的方括號(hào),都是C語言語法規(guī)則所要求的,不語言語法規(guī)則所要求的,不是以前所約定的可選項(xiàng)的描述符號(hào)!是以前所約定的可選項(xiàng)的描述符號(hào)?。?)數(shù)組元素的下標(biāo),是元素相對(duì)于數(shù)組)數(shù)組元素的下標(biāo),是元素相對(duì)于數(shù)組起始地址的偏移量,所以起始地址的偏移量,所以從從0開始順序編號(hào)開始順序編號(hào)。(5)數(shù)組名中存放的是一個(gè)地址常量,它)數(shù)組名中存放的是一個(gè)地址常量,它代表整個(gè)數(shù)組的首地址。同一數(shù)組中的所有元素,代表整個(gè)數(shù)組的首地址

5、。同一數(shù)組中的所有元素,按其下標(biāo)的順序占用一段連續(xù)的存儲(chǔ)單元。按其下標(biāo)的順序占用一段連續(xù)的存儲(chǔ)單元。Return 6.1.2 一維數(shù)組元素的引用 引用數(shù)組中的任意一個(gè)元素的形式:引用數(shù)組中的任意一個(gè)元素的形式: 數(shù)組名數(shù)組名下標(biāo)表達(dá)式下標(biāo)表達(dá)式 1“下標(biāo)表達(dá)式下標(biāo)表達(dá)式”可以是任何非負(fù)整型數(shù)據(jù),取值可以是任何非負(fù)整型數(shù)據(jù),取值范圍是范圍是0(元素個(gè)數(shù)(元素個(gè)數(shù)-1)。)。 特別強(qiáng)調(diào)特別強(qiáng)調(diào):在運(yùn)行:在運(yùn)行C語言程序過程中,系統(tǒng)并不自動(dòng)語言程序過程中,系統(tǒng)并不自動(dòng)檢驗(yàn)數(shù)組元素的下標(biāo)是否越界。因此在編寫程序時(shí),保檢驗(yàn)數(shù)組元素的下標(biāo)是否越界。因此在編寫程序時(shí),保證數(shù)組下標(biāo)不越界是十分重要的。證數(shù)組下

6、標(biāo)不越界是十分重要的。 2一個(gè)數(shù)組元素,實(shí)質(zhì)上就是一個(gè)變量,它具有和一個(gè)數(shù)組元素,實(shí)質(zhì)上就是一個(gè)變量,它具有和相同類型單個(gè)變量一樣的屬性,可以對(duì)它進(jìn)行賦值和各相同類型單個(gè)變量一樣的屬性,可以對(duì)它進(jìn)行賦值和各種運(yùn)算。種運(yùn)算。 3在在C語言中,數(shù)組作為一個(gè)整體,不能參加數(shù)據(jù)語言中,數(shù)組作為一個(gè)整體,不能參加數(shù)據(jù)運(yùn)算,只能對(duì)單個(gè)的數(shù)組元素進(jìn)行處理!運(yùn)算,只能對(duì)單個(gè)的數(shù)組元素進(jìn)行處理!Return 6.1.3 一維數(shù)組元素的初始化一維數(shù)組元素的初始化 初始化格式初始化格式:數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式初值表初值表(1)如果對(duì)數(shù)組的全部元素賦以初值,定義時(shí)可以)如果對(duì)數(shù)組的全部元素

7、賦以初值,定義時(shí)可以不指定數(shù)組長(zhǎng)度(系統(tǒng)根據(jù)初值個(gè)數(shù)自動(dòng)確定)。如果不指定數(shù)組長(zhǎng)度(系統(tǒng)根據(jù)初值個(gè)數(shù)自動(dòng)確定)。如果被定義數(shù)組的長(zhǎng)度,與初值個(gè)數(shù)不同,則數(shù)組長(zhǎng)度不能被定義數(shù)組的長(zhǎng)度,與初值個(gè)數(shù)不同,則數(shù)組長(zhǎng)度不能省略。省略。(2)“初值表初值表”中的初值個(gè)數(shù),可以少于元素個(gè)數(shù),中的初值個(gè)數(shù),可以少于元素個(gè)數(shù),即允許只給部分元素賦初值。即允許只給部分元素賦初值。(3)根據(jù)存儲(chǔ)類型的不同,數(shù)組有靜態(tài)數(shù)組()根據(jù)存儲(chǔ)類型的不同,數(shù)組有靜態(tài)數(shù)組(static)和動(dòng)態(tài)數(shù)組(和動(dòng)態(tài)數(shù)組(auto)之分;根據(jù)定義的位置不同,數(shù)組)之分;根據(jù)定義的位置不同,數(shù)組有內(nèi)部數(shù)組(在函數(shù)內(nèi)部定義的數(shù)組)和外部數(shù)組(在

8、有內(nèi)部數(shù)組(在函數(shù)內(nèi)部定義的數(shù)組)和外部數(shù)組(在函數(shù)外部定義的數(shù)組)之分。函數(shù)外部定義的數(shù)組)之分。有兩種初始化的方法:有兩種初始化的方法:q 用賦值語句或輸入語句在運(yùn)行時(shí)進(jìn)行初始化用賦值語句或輸入語句在運(yùn)行時(shí)進(jìn)行初始化 int i, a10; for(i=0;i=9; i+) ai=i;q 定義時(shí)進(jìn)行初始化定義時(shí)進(jìn)行初始化 (編譯階段)(編譯階段) int a10=0,1,2,3,4,5,6,7,8,9; int a10=0,1,2,3,4; /*后面元素值為后面元素值為0*/ int a10=0,0,0,0,0,0,0,0,0,0; int a =1,2,3,4,5; 在對(duì)全部數(shù)組元素賦初

9、值時(shí),可以不指定數(shù)組長(zhǎng)度。在對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長(zhǎng)度。例:用戶任意輸入例:用戶任意輸入10個(gè)數(shù),求它們的平均值。個(gè)數(shù),求它們的平均值。 main( ) float a10, sum=0.0, ave; int i; for ( i=0;i10;i+) scanf(“%f”,&ai); for ( i=0;i10;i+) sum+=ai; ave=sum/10; printf(“average=%fn”,ave); 6.1.4 一維數(shù)組應(yīng)用舉例 例例6.1 從鍵盤上任意輸入從鍵盤上任意輸入10個(gè)整數(shù),要求按從小到大的順序在屏幕上個(gè)整數(shù),要求按從小到大的順序在屏幕上顯示出

10、來。顯示出來。 排序的方法有很多,本題采用冒泡法。排序的方法有很多,本題采用冒泡法。冒泡法的基本思想:通過相鄰兩個(gè)數(shù)之間的比較和交換,使排序碼冒泡法的基本思想:通過相鄰兩個(gè)數(shù)之間的比較和交換,使排序碼(數(shù)值)較小的數(shù)逐漸從底部移向頂部,排序碼較大的數(shù)逐漸從頂部移向(數(shù)值)較小的數(shù)逐漸從底部移向頂部,排序碼較大的數(shù)逐漸從頂部移向底部。就像水底的氣泡一樣逐漸向上冒,故而得名。底部。就像水底的氣泡一樣逐漸向上冒,故而得名。由由AnA1組成的組成的n個(gè)數(shù)據(jù),進(jìn)行冒泡排序的過程可以描述為:個(gè)數(shù)據(jù),進(jìn)行冒泡排序的過程可以描述為:(1)首先將相鄰的)首先將相鄰的An與與An-1進(jìn)行比較,如果進(jìn)行比較,如果A

11、n的值小于的值小于An-1的值,則交換兩者的位置,使較小的上浮,較大的下沉;接著比較的值,則交換兩者的位置,使較小的上浮,較大的下沉;接著比較An-1與與An-2,同樣使小的上浮,大的下沉。依此類推,直到比較完,同樣使小的上浮,大的下沉。依此類推,直到比較完A2和和A1后,后,A1為具有最小排序碼(數(shù)值)的元素,稱第一趟排序結(jié)束。為具有最小排序碼(數(shù)值)的元素,稱第一趟排序結(jié)束。(2)然后在)然后在AnA2區(qū)間內(nèi),進(jìn)行第二趟排序,使剩余元素中排序區(qū)間內(nèi),進(jìn)行第二趟排序,使剩余元素中排序碼最小的元素上浮到碼最小的元素上浮到A2;重復(fù)進(jìn)行;重復(fù)進(jìn)行n-1趟后,整個(gè)排序過程結(jié)束。趟后,整個(gè)排序過程結(jié)

12、束。 兩層循環(huán)結(jié)構(gòu)兩層循環(huán)結(jié)構(gòu) 外層循環(huán)每次把操作外層循環(huán)每次把操作范圍內(nèi)最大的數(shù)放到范圍內(nèi)最大的數(shù)放到最后位置最后位置 內(nèi)層循環(huán)每次把較大內(nèi)層循環(huán)每次把較大的數(shù)放到靠后的位置的數(shù)放到靠后的位置 確定每層循環(huán)的邊界確定每層循環(huán)的邊界 外層循環(huán)外層循環(huán)n-1次次j=0 to n-2 內(nèi)層循環(huán)內(nèi)層循環(huán)n-1-j次次i=0 to n-2-j冒泡排序法 #include stdio.h#define NUM 10 /*定義符號(hào)常量定義符號(hào)常量*/main() int dataNUM;/*定義定義1個(gè)個(gè)1維整型數(shù)組維整型數(shù)組data*/ int i,j,temp;/*定義循環(huán)變量和臨時(shí)變量定義循環(huán)變量和

13、臨時(shí)變量*/ clrscr();/*庫(kù)函數(shù)庫(kù)函數(shù)clrscr():清屏:清屏*/ printf(Please input 10 numbers:n); for(i=0; iNUM; i+) scanf(%d, &datai); /*冒泡法排序冒泡法排序*/ for(j=0; jNUM-1; j+) /*外循環(huán):控制比較趟數(shù)外循環(huán):控制比較趟數(shù)*/ for(i=0; idatai+1) temp=datai; datai=datai+1; datai+1=temp; /*輸出排序后的數(shù)據(jù)輸出排序后的數(shù)據(jù)*/ printf(n The result of sort:n); for(i=0;

14、 iNUM; i+) printf(%d ,datai); 例6.2 已知某課程的平時(shí)、實(shí)習(xí)、測(cè)驗(yàn)和期末成績(jī),已知某課程的平時(shí)、實(shí)習(xí)、測(cè)驗(yàn)和期末成績(jī),求該課程的總評(píng)成績(jī)。其中平時(shí)、實(shí)習(xí)、測(cè)驗(yàn)和期末分別求該課程的總評(píng)成績(jī)。其中平時(shí)、實(shí)習(xí)、測(cè)驗(yàn)和期末分別占占10、20、20、50。/*功能:從鍵盤上循環(huán)輸入某課程的平時(shí)、實(shí)習(xí)、測(cè)驗(yàn)和功能:從鍵盤上循環(huán)輸入某課程的平時(shí)、實(shí)習(xí)、測(cè)驗(yàn)和期末成績(jī),按期末成績(jī),按10,20,20,50的比例計(jì)算總評(píng)成的比例計(jì)算總評(píng)成績(jī),并在屏幕上顯示出來。按空格鍵繼續(xù)循環(huán),其他鍵終績(jī),并在屏幕上顯示出來。按空格鍵繼續(xù)循環(huán),其他鍵終止循環(huán)。止循環(huán)。*/#include “st

15、dio.h”main( ) int i=1,j; char c; float score5,ratio4=0.1,0.2,0.2,0.5; /*定義成績(jī)、定義成績(jī)、比例系數(shù)數(shù)組比例系數(shù)數(shù)組*/ while(c=y) printf(輸入第輸入第%2d個(gè)學(xué)生的成績(jī)個(gè)學(xué)生的成績(jī)n, i+); printf(平時(shí)平時(shí) 實(shí)習(xí)實(shí)習(xí) 測(cè)驗(yàn)測(cè)驗(yàn) 期末成績(jī)期末成績(jī)n); score4=0;/* score4:存儲(chǔ)總評(píng)成績(jī):存儲(chǔ)總評(píng)成績(jī)*/ for(j=0; j4; j+) scanf(%f,&scorej); score4 += scorej * ratioj; printf(總評(píng)成績(jī)?yōu)榭傇u(píng)成績(jī)?yōu)?%6

16、.1fn, score4); printf(n按按y鍵繼續(xù)鍵繼續(xù),其它鍵退出其它鍵退出); c=getchar(); Return篩法求素?cái)?shù) for(i=2;iN;i+) ai=i; /*初始化初始化*/for(i=2;isqrt(N); i+) for(j=i+1;jN;j+) if(ai!=0&aj!=0) if(aj%ai=0) aj=0; /*表示已被刪除表示已被刪除*/ 6.2 二維數(shù)組的定義和引用6.2.1 二維數(shù)組的定義6.2.2 二維數(shù)組元素的引用6.2.3 二維數(shù)組元素的初始化6.2.4 二維數(shù)組應(yīng)用舉例 Return6.2.1 二維數(shù)組的定義 定義形式 類型 數(shù)組名

17、常量表達(dá)式常量表達(dá)式; 可以看作元素是一維數(shù)組的一維數(shù)組 舉例 char a34; /* 3行4列 */a23a22,a21,a20,a2a13a12,a11,a10,a1a03a02,a01,a00,a0a二維數(shù)組的存儲(chǔ)形式 按行存放,先行后列char a34;低地址.a00a01a02a03a10a11a12a13a20a21高地址a22a23.例例6.3 給一個(gè)給一個(gè)23的二維數(shù)組各元素賦值,并輸出全部元素的二維數(shù)組各元素賦值,并輸出全部元素的值。的值。 #define Row 2#define Col 3#include stdio.hmain() int i, j, arrayRow

18、Col; for(i=0; iRow; i+)/*外循環(huán):控制二維數(shù)組的行外循環(huán):控制二維數(shù)組的行*/ for(j=0; jCol; j+)/*內(nèi)循環(huán):控制內(nèi)循環(huán):控制2維數(shù)組的列維數(shù)組的列*/ printf(please input array%2d%2d:,i,j); scanf(%d,&arrayij); /*從鍵盤輸入從鍵盤輸入aij的值的值*/ printf(n); 6.2.1 二維數(shù)組的定義 /*輸出輸出2維數(shù)組維數(shù)組array*/ for(i=0;iRow;i+) for(j=0;jCol;j+) printf(%8d,arrayij); printf(n); 二維數(shù)組的

19、定義方式如下:二維數(shù)組的定義方式如下: 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名行常量表達(dá)式行常量表達(dá)式列常量表達(dá)式列常量表達(dá)式 ;1數(shù)組元素在內(nèi)存中的排列順序?yàn)閿?shù)組元素在內(nèi)存中的排列順序?yàn)椤鞍葱写娣虐葱写娣拧保聪?,即先順序存放第一行的元素,再存放第二行,以此類推。順序存放第一行的元素,再存放第二行,以此類推?. 設(shè)有一個(gè)設(shè)有一個(gè)m*n的數(shù)組的數(shù)組x,則第,則第i行第行第j列的元素列的元素xij在數(shù)在數(shù)組中的位置為:組中的位置為:i*n+j(注意:行號(hào)、列號(hào)均從:行號(hào)、列號(hào)均從0開始計(jì)數(shù))。開始計(jì)數(shù))。 3可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素

20、又是一個(gè)一維數(shù)組。素又是一個(gè)一維數(shù)組。例如,對(duì)例如,對(duì)x32,可以把,可以把x看作是一個(gè)一維數(shù)組,它有看作是一個(gè)一維數(shù)組,它有3個(gè)個(gè)元素:元素:x0、x1、x2,每個(gè)元素又是一個(gè)包含,每個(gè)元素又是一個(gè)包含2個(gè)元素的一個(gè)元素的一維數(shù)組,即把維數(shù)組,即把x0、x1、x2看作是看作是3個(gè)一維數(shù)組的名字。個(gè)一維數(shù)組的名字。 Return6.2.2 二維數(shù)組元素的引用引用二維數(shù)組元素的形式為:引用二維數(shù)組元素的形式為:數(shù)組名數(shù)組名行下標(biāo)表達(dá)式行下標(biāo)表達(dá)式列下標(biāo)表達(dá)式列下標(biāo)表達(dá)式1“行下標(biāo)表達(dá)式行下標(biāo)表達(dá)式”和和“列下標(biāo)表達(dá)式列下標(biāo)表達(dá)式”,都應(yīng)是,都應(yīng)是整型表達(dá)式或符號(hào)常量。整型表達(dá)式或符號(hào)常量。2“行

21、下標(biāo)表達(dá)式行下標(biāo)表達(dá)式”和和“列下標(biāo)表達(dá)式列下標(biāo)表達(dá)式”的值,都的值,都應(yīng)在已定義數(shù)組大小的范圍內(nèi)。假設(shè)有數(shù)組應(yīng)在已定義數(shù)組大小的范圍內(nèi)。假設(shè)有數(shù)組x34,則,則可用的行下標(biāo)范圍為可用的行下標(biāo)范圍為02,列下標(biāo)范圍為,列下標(biāo)范圍為03。3對(duì)基本數(shù)據(jù)類型的變量所能進(jìn)行的操作,也都適對(duì)基本數(shù)據(jù)類型的變量所能進(jìn)行的操作,也都適合于相同數(shù)據(jù)類型的二維數(shù)組元素。合于相同數(shù)據(jù)類型的二維數(shù)組元素。Return6.2.3 二維數(shù)組元素的初始化1按行賦初值按行賦初值數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名行常量表達(dá)式行常量表達(dá)式列常量表達(dá)式列常量表達(dá)式第第0行行初值表初值表,第第1行初值表行初值表,最后最后1行初值表行初

22、值表;賦值規(guī)則:將賦值規(guī)則:將“第第0行初值表行初值表”中的數(shù)據(jù),依次賦給第中的數(shù)據(jù),依次賦給第0行行中各元素;將中各元素;將“第第1行初值表行初值表”中的數(shù)據(jù),依次賦給第中的數(shù)據(jù),依次賦給第1行各元行各元素;以此類推素;以此類推。2按二維數(shù)組在內(nèi)存中的排列順序給各元素賦初值按二維數(shù)組在內(nèi)存中的排列順序給各元素賦初值數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名行常量表達(dá)式行常量表達(dá)式列常量表達(dá)式列常量表達(dá)式初值表初值表;賦值規(guī)則:按二維數(shù)組在內(nèi)存中的排列順序,將初值表中賦值規(guī)則:按二維數(shù)組在內(nèi)存中的排列順序,將初值表中的數(shù)據(jù),依次賦給各元素。的數(shù)據(jù),依次賦給各元素。如果對(duì)全部元素都賦初值,則如果對(duì)全部元素都

23、賦初值,則“行數(shù)行數(shù)”可以省略。可以省略。注意:只能省略只能省略“行數(shù)行數(shù)”。 Return6.2.4 2維數(shù)組應(yīng)用舉例 例6.4 有有M個(gè)學(xué)生,學(xué)習(xí)個(gè)學(xué)生,學(xué)習(xí)N門課程,已知所有學(xué)生的各門課程,已知所有學(xué)生的各科成績(jī),編程:分別求每個(gè)學(xué)生的平均成績(jī)和每門課程的平科成績(jī),編程:分別求每個(gè)學(xué)生的平均成績(jī)和每門課程的平均成績(jī)。均成績(jī)。 #define NUM_std 5/*定義符號(hào)常量人數(shù)為定義符號(hào)常量人數(shù)為5*/#define NUM_course 4/*定義符號(hào)常量課程為定義符號(hào)常量課程為4*/#include stdio.hmain() int i,j; static float score

24、NUM_std+1NUM_course+1=78,85,83,65, 88,91,89,93, 72,65,54,75,86,88,75,60, 69,60,50,72; for(i=0;iNUM_std;i+) for(j=0;jNUM_course;j+) scoreiNUM_course += scoreij;/*求第求第i個(gè)人的總成績(jī)個(gè)人的總成績(jī)*/ scoreNUM_stdj += scoreij; /*求第求第j門課的總成績(jī)門課的總成績(jī)*/ scoreiNUM_course /= NUM_course;/*求第求第i個(gè)人的平均成績(jī)個(gè)人的平均成績(jī)*/ for(j=0;jNUM_cou

25、rse;j+) scoreNUM_stdj /= NUM_std; /*求第求第j門課的平均成績(jī)門課的平均成績(jī)*/*輸出表頭輸出表頭*/ printf(學(xué)生編號(hào)學(xué)生編號(hào) 課程課程1 課程課程2 課程課程3 課程課程4 個(gè)人平均個(gè)人平均n); /*輸出每個(gè)學(xué)生的各科成績(jī)和平均成績(jī)輸出每個(gè)學(xué)生的各科成績(jī)和平均成績(jī)*/ for(i=0;iNUM_std;i+) printf(學(xué)生學(xué)生%dt,i+1); for(j=0;jNUM_course+1;j+) printf(%6.1ft,scoreij); printf(n); /*輸出輸出1條短劃線條短劃線-*/ for(j=0;j8*(NUM_cour

26、se+2);j+) printf(-); printf(n課程平均課程平均); /*輸出每門課程的平均成績(jī)輸出每門課程的平均成績(jī)*/ for(j=0;jNUM_course;j+) printf(%6.1ft,scoreNUM_stdj); printf(n); Return二維數(shù)組程序舉例矩陣乘法矩陣乘法 1,.,0; 1,.,0,10njmibaccABCbBaApkkjikijnmijnpkjpmik. .int aMP, bPN, cMN=0;. .for (i=0; iM; i+) for (j=0; jN; j+) for (k=0; kP; k+) cij+=aik*bkj;.

27、.6.3 字符數(shù)組與字符串字符數(shù)組與字符串6.3.1 字符數(shù)組的逐個(gè)字符操作 6.3.2 字符數(shù)組的整體操作6.3.3 常用的字符串處理函數(shù)Return6.3.1 字符數(shù)組的逐個(gè)字符操作例6.5從鍵盤輸入一個(gè)字符串,回車鍵結(jié)束,并將字符串在屏幕上輸出。從鍵盤輸入一個(gè)字符串,回車鍵結(jié)束,并將字符串在屏幕上輸出。 #include main() int i; static char str80; for(i=0;i80;i+) stri=getchar(); printf(*); if(stri=x0d) break; /*若輸入回車則終止循環(huán)若輸入回車則終止循環(huán)*/ i=0; while(str

28、i!=x0d) printf(%c,stri+);/*逐次輸出字符數(shù)組的各個(gè)元素逐次輸出字符數(shù)組的各個(gè)元素*/ printf(n);1字符數(shù)組的定義字符數(shù)組的定義一維字符數(shù)組,用于存儲(chǔ)和處理一維字符數(shù)組,用于存儲(chǔ)和處理1個(gè)字符串,其定義個(gè)字符串,其定義格式與一維數(shù)值數(shù)組一樣。格式與一維數(shù)值數(shù)組一樣。二維字符數(shù)組,用于同時(shí)存儲(chǔ)和處理多個(gè)字符串,二維字符數(shù)組,用于同時(shí)存儲(chǔ)和處理多個(gè)字符串,其定義格式與二維數(shù)值數(shù)組一樣。其定義格式與二維數(shù)值數(shù)組一樣。2字符數(shù)組的初始化字符數(shù)組的初始化字符數(shù)組的初始化,可以通過為每個(gè)數(shù)組元素指定字符數(shù)組的初始化,可以通過為每個(gè)數(shù)組元素指定初值字符來實(shí)現(xiàn)。初值字符來實(shí)現(xiàn)

29、。3字符數(shù)組的引用字符數(shù)組的引用 字符數(shù)組的逐個(gè)字符引用,與引用數(shù)值數(shù)組元素字符數(shù)組的逐個(gè)字符引用,與引用數(shù)值數(shù)組元素類似。類似。 (1)字符數(shù)組的輸入)字符數(shù)組的輸入 除了可以通過初始化使字符數(shù)組各元素得除了可以通過初始化使字符數(shù)組各元素得到初值外,也可以使用到初值外,也可以使用getchar()或或scanf()函數(shù)輸函數(shù)輸入字符。入字符。 例如:例如: char str10;for(i=0; i10; i+) scanf(%c, &stri); (2)字符數(shù)組的輸出)字符數(shù)組的輸出 字符數(shù)組的輸出,可以用字符數(shù)組的輸出,可以用putchar()或或printf()函函數(shù)。數(shù)。 例

30、如:例如: char str10=c Language;for(i=0; i10; i+) printf(%c, stri);printf(n); 注意注意:逐個(gè)字符輸入、輸出時(shí),要指出元素的逐個(gè)字符輸入、輸出時(shí),要指出元素的下標(biāo),而且使用下標(biāo),而且使用“%c”格式符。格式符。另外,從鍵盤上輸另外,從鍵盤上輸入字符時(shí),無需輸入字符的定界符入字符時(shí),無需輸入字符的定界符單引號(hào);輸單引號(hào);輸出時(shí),系統(tǒng)也不輸出字符的定界符。出時(shí),系統(tǒng)也不輸出字符的定界符。Return6.3.2 字符數(shù)組的整體操作例6.6 字符數(shù)組的整體輸入與輸出。字符數(shù)組的整體輸入與輸出。 main() int i; char n

31、ame58=張三張三, 李四李四, 王五王五, 劉六劉六, 趙趙七七; for(i=0;i5;i+) printf(n%st,namei); /*namei代表該行數(shù)組元素的首地址代表該行數(shù)組元素的首地址*/1字符串及其結(jié)束標(biāo)志 所謂字符串,是指若干有效字符的序列。所謂字符串,是指若干有效字符的序列。C語言中的字語言中的字符串,可以包括字母、數(shù)字、專用字符、轉(zhuǎn)義字符等。符串,可以包括字母、數(shù)字、專用字符、轉(zhuǎn)義字符等。C語言規(guī)定:以語言規(guī)定:以0作為字符串結(jié)束標(biāo)志(作為字符串結(jié)束標(biāo)志(0代表代表ASCII碼為碼為0的字符,表示一個(gè)的字符,表示一個(gè)“空操作空操作”,只起一個(gè)標(biāo)志作,只起一個(gè)標(biāo)志作用

32、)。用)。因此可以對(duì)字符數(shù)組采用另一種方式進(jìn)行操作因此可以對(duì)字符數(shù)組采用另一種方式進(jìn)行操作字符字符數(shù)組的整體操作。數(shù)組的整體操作。 注意注意:由于系統(tǒng)在存儲(chǔ)字符串常量時(shí),會(huì)在串尾自動(dòng)加:由于系統(tǒng)在存儲(chǔ)字符串常量時(shí),會(huì)在串尾自動(dòng)加上上1個(gè)結(jié)束標(biāo)志,所以無需人為地再加個(gè)結(jié)束標(biāo)志,所以無需人為地再加1個(gè)。個(gè)。另外,由于結(jié)束標(biāo)志也要在字符數(shù)組中占用一個(gè)元素的另外,由于結(jié)束標(biāo)志也要在字符數(shù)組中占用一個(gè)元素的存儲(chǔ)空間,存儲(chǔ)空間,因此在說明字符數(shù)組長(zhǎng)度時(shí),至少為字符串所需因此在說明字符數(shù)組長(zhǎng)度時(shí),至少為字符串所需長(zhǎng)度加長(zhǎng)度加1。2字符數(shù)組的整體初始化字符數(shù)組的整體初始化字符串設(shè)置了結(jié)束標(biāo)志以后,對(duì)字符數(shù)組的

33、初始化,就字符串設(shè)置了結(jié)束標(biāo)志以后,對(duì)字符數(shù)組的初始化,就可以用字符串常量來初始化字符數(shù)組??梢杂米址A縼沓跏蓟址麛?shù)組。3字符數(shù)組的整體引用字符數(shù)組的整體引用(1)字符串的輸入)字符串的輸入除了可以通過初始化使字符數(shù)組各元素得到初值外,也除了可以通過初始化使字符數(shù)組各元素得到初值外,也可以使用可以使用scanf()函數(shù)輸入字符串。函數(shù)輸入字符串。(2)字符串的輸出)字符串的輸出printf()函數(shù),不僅可以逐個(gè)輸出字符數(shù)組元素,還可以函數(shù),不僅可以逐個(gè)輸出字符數(shù)組元素,還可以整體輸出存放在字符數(shù)組中的字符串。整體輸出存放在字符數(shù)組中的字符串。Return6.3.3 常用的字符串處理函數(shù)字

34、符串標(biāo)準(zhǔn)函數(shù)的原型在頭文件字符串標(biāo)準(zhǔn)函數(shù)的原型在頭文件string.h中。中。1輸入字符串輸入字符串gets()函數(shù)函數(shù)(1)調(diào)用方式:)調(diào)用方式:gets(字符數(shù)組字符數(shù)組)(2)函數(shù)功能:從標(biāo)準(zhǔn)輸入設(shè)備)函數(shù)功能:從標(biāo)準(zhǔn)輸入設(shè)備(stdin)鍵盤鍵盤上,讀取上,讀取1個(gè)字符串(個(gè)字符串(可以包含空格可以包含空格),并將其存儲(chǔ)),并將其存儲(chǔ)到字符數(shù)組中去。到字符數(shù)組中去。(3)使用說明)使用說明 1)gets()讀取的字符串,其長(zhǎng)度沒有限制,編程讀取的字符串,其長(zhǎng)度沒有限制,編程者要保證字符數(shù)組有足夠大的空間,存放輸入的字者要保證字符數(shù)組有足夠大的空間,存放輸入的字符串。符串。 2)該函數(shù)輸

35、入的字符串中允許包含空格,而)該函數(shù)輸入的字符串中允許包含空格,而scanf()函數(shù)不允許。函數(shù)不允許。2輸出字符串輸出字符串puts()函數(shù)函數(shù)(1)調(diào)用方式:)調(diào)用方式:puts(字符數(shù)組字符數(shù)組)(2)函數(shù)功能:把字符數(shù)組中所存放的字符串,)函數(shù)功能:把字符數(shù)組中所存放的字符串,輸出到標(biāo)準(zhǔn)輸出設(shè)備中去,并用輸出到標(biāo)準(zhǔn)輸出設(shè)備中去,并用n取代字符串的取代字符串的結(jié)束標(biāo)志結(jié)束標(biāo)志0。所以用。所以用puts()函數(shù)輸出字符串時(shí),函數(shù)輸出字符串時(shí),不要求另加換行符。不要求另加換行符。( 3)使用說明)使用說明1)字符串中允許包含轉(zhuǎn)義字符,輸出時(shí)產(chǎn)生一字符串中允許包含轉(zhuǎn)義字符,輸出時(shí)產(chǎn)生一個(gè)控制操

36、作。個(gè)控制操作。2)該函數(shù)一次只能輸出一個(gè)字符串,而該函數(shù)一次只能輸出一個(gè)字符串,而printf()函數(shù)也能用來輸出字符串,且一次能輸出多個(gè)。函數(shù)也能用來輸出字符串,且一次能輸出多個(gè)。3字符串比較字符串比較strcmp()函數(shù)函數(shù)(1)調(diào)用方式:)調(diào)用方式:strcmp(字符串字符串1 ,字符串字符串2)其中其中“字符串字符串”可以是串常量,也可以是一維字符數(shù)組。可以是串常量,也可以是一維字符數(shù)組。(2)函數(shù)功能:比較兩個(gè)字符串的大小。)函數(shù)功能:比較兩個(gè)字符串的大小。如果:字符串如果:字符串1=字符串字符串2,函數(shù)返回值等于,函數(shù)返回值等于0; 字符串字符串1字符串字符串2,函數(shù)返回值正整數(shù)

37、。,函數(shù)返回值正整數(shù)。(3)使用說明)使用說明1)按字典序。)按字典序。2)不能使用關(guān)系運(yùn)算符)不能使用關(guān)系運(yùn)算符“”來比較兩個(gè)字符串,來比較兩個(gè)字符串,只能用只能用strcmp() 函數(shù)來處理。函數(shù)來處理。例6.7 gets函數(shù)和函數(shù)和strcmp函數(shù)的應(yīng)用。函數(shù)的應(yīng)用。 /*功能:簡(jiǎn)單密碼檢測(cè)程序功能:簡(jiǎn)單密碼檢測(cè)程序*/#include stdio.hmain() char pass_str80; /*定義字符數(shù)組定義字符數(shù)組pass_str*/ int i=0; /*檢驗(yàn)密碼檢驗(yàn)密碼*/ while(1) printf(請(qǐng)輸入密碼請(qǐng)輸入密碼n); gets(pass_str); /*輸

38、入密碼輸入密碼*/ if(strcmp(pass_str,“12345678”)!=0) /*口令錯(cuò)口令錯(cuò)*/ printf(口令錯(cuò)誤,按任意鍵繼續(xù)口令錯(cuò)誤,按任意鍵繼續(xù)); else break; /*輸入正確的密碼,中止循輸入正確的密碼,中止循環(huán)環(huán)*/ getchar(); i+; if(i=3) exit(0); /*輸入三次錯(cuò)誤的密碼,退出程序輸入三次錯(cuò)誤的密碼,退出程序*/ /*輸入正確密碼所進(jìn)入的程序段輸入正確密碼所進(jìn)入的程序段*/4拷貝字符串拷貝字符串strcpy()函數(shù)函數(shù)(1)調(diào)用方式:)調(diào)用方式:strcpy(字符數(shù)組字符數(shù)組, 字符串字符串)其中其中“字符串字符串”可以是串常量,也可以是字符數(shù)組??梢允谴A?,也可以是字符數(shù)組。(2)函數(shù)功能:將)函數(shù)功能:將“字符串字符串”完整地復(fù)制到完整地復(fù)制到“字符數(shù)字符數(shù)組組”中,字符數(shù)組中原有內(nèi)容被覆蓋。中,字符數(shù)組中原有內(nèi)容被覆蓋。(3)使用說明)使用說明1)字符數(shù)組必須定義得足夠大,以便容納復(fù)制過來的)字

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論