版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、為了解決比較復雜的問題,本章介紹C語言提供的一種最簡單的構造類型數組。6.1 1維數組的定義和引用維數組的定義和引用6.2 2維數組的定義和引用維數組的定義和引用6.3 字符數組與字符串字符數組與字符串Return第第6章章 數數 組組6.1 1維數組的定義和引用維數組的定義和引用6.1.1 1維數組的定義維數組的定義6.1.2 1維數組元素的引用維數組元素的引用6.1.3 1維數組元素的初始化維數組元素的初始化6.1.4 1 1維數組應用舉例維數組應用舉例 Return6.1.1 1維數組的定義維數組的定義案例案例6.1 從鍵盤上任意輸入10個整數,要求按從小到大的順序在屏幕上顯示出來。 排
2、序的方法有很多,本題采用冒泡法。冒泡法的基本思想冒泡法的基本思想:通過相鄰兩個數之間的比較和交換,使排序碼(數值)較小的數逐漸從底部移向頂部,排序碼較大的數逐漸從頂部移向底部。就像水底的氣泡一樣逐漸向上冒,故而得名。由AnA1組成的n個數據,進行冒泡排序的過程可以描述為:(1)首先將相鄰的An與An-1進行比較,如果An的值小于An-1的值,則交換兩者的位置,使較小的上浮,較大的下沉;接著比較An-1與An-2,同樣使小的上浮,大的下沉。依此類推,直到比較完A2和A1后,A1為具有最小排序碼(數值)的元素,稱第一趟排序結束。(2)然后在AnA2區(qū)間內,進行第二趟排序,使剩余元素中排序碼最小的元
3、素上浮到A2;重復進行n-1趟后,整個排序過程結束。/*案例代碼文件名:AL6_1.C*/*功能:從鍵盤上任意輸入n個整數,用冒泡法按從小到大地排序,并在屏幕上顯示出來。*/#include stdio.h#define NUM 10/*定義符號常量(數據個數N)*/main() int dataNUM;/*定義1個1維整型數組data*/ int i,j,temp;/*定義循環(huán)變量和臨時變量*/ clrscr();/*庫函數clrscr():清屏*/ printf(Please input 10 numbers:n); for(i=0; iNUM; i+) scanf(%d, &da
4、tai); /*冒泡法排序*/ for(i=0; ii; j-) /*內循環(huán):進行每趟比較*/ if(datajdataj-1) /*如果dataj大于dataj-1,交換兩者的位置*/ temp=dataj; dataj=dataj-1; dataj-1=temp; ; /*輸出排序后的數據*/ printf(nthe result of sort:n); for(i=0; iNUM; i+) printf(%d ,datai); getch();/*等待鍵盤輸入任一字符,目的使程序暫停*/程序演示程序演示數組同變量一樣,也必須先定義、后使用。1維數組是只有1個下標的數組,定義形式如下:數據
5、類型數據類型 數組名數組名常量表達式常量表達式, 數組名數組名2常量表達式常量表達式2;(1)“數據類型”是指數組元素的數據類型。(2)數組名,與變量名一樣,必須遵循標識符命名規(guī)則。(3)“常量表達式”必須用方括號括起來,指的是數組的元素個數(又稱數組長度),它是一個整型值,其中可以包含常數和符號常量,但不能包含變量。注意注意:C語言中不允許動態(tài)定義數組語言中不允許動態(tài)定義數組。 特別說明特別說明:在數組定義時,“常量表達式”外的方括號;以及元素引用時,“下標表達式”外的方括號,都是C語言語法規(guī)則所要求的,不是本書所約定的可選項的描述符號?。?)數組元素的下標,是元素相對于數組起始地址的偏移量
6、,所以從0開始順序編號。(5)數組名中存放的是一個地址常量,它代表整個數組的首地址。同一數組中的所有元素,按其下標的順序占用一段連續(xù)的存儲單元。Return 6.1.2 數組元素的引用數組元素的引用 引用數組中的任意一個元素的形式: 數組名數組名下標表達式下標表達式 1“下標表達式”可以是任何非負整型數據,取值范圍是0(元素個數-1)。 特別強調特別強調:在運行C語言程序過程中,系統(tǒng)并不自動檢驗數組元素的下標是否越界。因此在編寫程序時,保證數組下標不越界是十分重要的。 21個數組元素,實質上就是1個變量,它具有和相同類型單個變量一樣的屬性,可以對它進行賦值和參與各種運算。 3在C語言中,數組作
7、為1個整體,不能參加數據運算,只能對單個的元素進行處理。Return 6.1.3 1維數組元素的初始化維數組元素的初始化 初始化格式:數據類型數據類型 數組名數組名常量表達式常量表達式初值表初值表(1)如果對數組的全部元素賦以初值,定義時可以不指定數組長度(系統(tǒng)根據初值個數自動確定)。如果被定義數組的長度,與初值個數不同,則數組長度不能省略。(2)“初值表”中的初值個數,可以少于元素個數,即允許只給部分元素賦初值。(3)根據存儲類型的不同,數組有靜態(tài)數組(static)和動態(tài)數組(auto)之分;根據定義的位置不同,數組有內部數組(在函數內部定義的數組)和外部數組(在函數外部定義的數組)之分。
8、Return6.1.4 1維數組應用舉例維數組應用舉例 案例案例6.2 已知某課程的平時、實習、測驗和期末成績,求該課程的總評成績。其中平時、實習、測驗和期末分別占10、20、20、50。/*案例代碼文件名:AL6_2.C*/*功能:從鍵盤上循環(huán)輸入某課程的平時、實習、測驗和期末成績,按10,20,20,50的比例計算總評成績,并在屏幕上顯示出來。按空格鍵繼續(xù)循環(huán),其他鍵終止循環(huán)。*/#include “stdio.h”main() int i=1,j; char con_key=x20; /* x20 空格鍵的ASCII碼*/ float score5,ratio4=0.1,0.2,0.2,
9、0.5; /*定義成績、比例系數數組*/ while(con_key=x20) while(con_key=x20) clrscr(); printf(輸入第%2d個學生的成績n, i+); printf(平時 實習 測驗 期末成績n); score4=0;/* score4:存儲總評成績*/ for(j=0; j4; j+) scanf(%f,&scorej); score4 += scorej * ratioj; printf(總評成績?yōu)?%6.1fn, score4); printf(n按空格鍵繼續(xù),其它鍵退出); con_key=getch(); /*getch()函數等待從鍵
10、盤上輸入一個字符*/ 程序演示程序演示Return6.2 2維數組的定義和引用維數組的定義和引用6.2.1 2維數組的定義維數組的定義6.2.2 2維數組元素的引用維數組元素的引用6.2.3 2維數組元素的初始化維數組元素的初始化6.2.4 2維數組應用舉例維數組應用舉例 Return案例案例6.3 給一個23的2維數組各元素賦值,并輸出全部元素的值。 /*案例代碼文件名:AL6_3.C*/*功能:從鍵盤上給23數組賦值,并在屏幕上顯示出來。*/#define Row 2#define Col 3#include stdio.hmain() int i, j, arrayRowCol;/*定義
11、1個2行3列的2維數組array*/ for(i=0; iRow; i+)/*外循環(huán):控制2維數組的行*/ for(j=0; jCol; j+)/*內循環(huán):控制2維數組的列*/ printf(please input array%2d%2d:,i,j); scanf(%d,&arrayij); /*從鍵盤輸入aij的值*/ printf(n); /*輸出2維數組array*/ for(i=0;iRow;i+)6.2.1 2維數組的定義維數組的定義 for(j=0;jCol;j+) printf(%dt,arrayij); /*將aij的值顯示在屏幕上*/ printf(n); getc
12、h(); 程序演示程序演示2維數組的定義方式如下: 數據類型數據類型 數組名數組名行常量表達式行常量表達式列常量表達式列常量表達式, 數組名數組名2行常量表達式行常量表達式2列常量表達式列常量表達式2;1數組元素在內存中的排列順序為“按行存放”,即先順序存放第一行的元素,再存放第二行,以此類推。2. 設有一個m*n的數組x,則第i行第j列的元素xij在數組中的位置為:i*n+j(注意注意:行號、列號均從0開始計數)。 3可以把2維數組看作是一種特殊的1維數組:它的元素又是一個1維數組。例如,對x32,可以把x看作是一個1維數組,它有3個元素:x0、x1、x2,每個元素又是一個包含2個元素的1維
13、數組,如圖6-4所示。即把x0、x1、x2看作是3個1維數組的名字。 Return6.2.2 2維數組元素的引用維數組元素的引用引用2維數組元素的形式為:數組名數組名行下標表達式行下標表達式列下標表達式列下標表達式1“行下標表達式”和“列下標表達式”,都應是整型表達式或符號常量。2“行下標表達式”和“列下標表達式”的值,都應在已定義數組大小的范圍內。假設有數組x34,則可用的行下標范圍為02,列下標范圍為03。3對基本數據類型的變量所能進行的操作,也都適合于相同數據類型的2維數組元素。Return6.2.3 2維數組元素的初始化維數組元素的初始化1按行賦初值數據類型數據類型 數組名數組名行常量
14、表達式行常量表達式列常量表達式列常量表達式第第0行初值行初值表表,第第1行初值表行初值表,最后最后1行初值表行初值表;賦值規(guī)則:將“第0行初值表”中的數據,依次賦給第0行中各元素;將“第1行初值表”中的數據,依次賦給第1行各元素;以此類推。2按2維數組在內存中的排列順序給各元素賦初值數據類型數據類型 數組名數組名行常量表達式行常量表達式列常量表達式列常量表達式初值表初值表;賦值規(guī)則:按2維數組在內存中的排列順序,將初值表中的數據,依次賦給各元素。如果對全部元素都賦初值,則“行數”可以省略。注意注意:只能省略“行數”。 Return6.2.4 2維數組應用舉例維數組應用舉例 案例案例6.4 有M
15、個學生,學習N門課程,已知所有學生的各科成績,編程:分別求每個學生的平均成績和每門課程的平均成績。 /*案例代碼文件名:AL6_4.C*/*功能:計算個人平均成績與各科平均成績,并在屏幕上顯示出來。*/#define NUM_std 5/*定義符號常量人數為5*/#define NUM_course 4/*定義符號常量課程為4*/#include stdio.hmain() int i,j; static float scoreNUM_std+1NUM_course+1=78,85,83,65, 88,91,89,93, 72,65,54,75,86,88,75,60, 69,60,50,72
16、; for(i=0;iNUM_std;i+) for(j=0;jNUM_course;j+) scoreiNUM_course += scoreij;/*求第i個人的總成績*/ scoreNUM_stdj += scoreij;/*求第j門課的總成績*/ scoreiNUM_course /= NUM_course;/*求第i個人的平均成績*/ for(j=0;jNUM_course;j+) scoreNUM_stdj /= NUM_std; /*求第j門課的平均成績*/ clrscr(); /*輸出表頭*/ printf(學生編號 課程1 課程2 課程3 課程4 個人平均n); /*輸出每個
17、學生的各科成績和平均成績*/ for(i=0;iNUM_std;i+) printf(學生%dt,i+1); for(j=0;jNUM_course+1;j+) printf(%6.1ft,scoreij); printf(n); /*輸出1條短劃線*/ for(j=0;j8*(NUM_course+2);j+) printf(-); printf(n課程平均); /*輸出每門課程的平均成績*/ for(j=0;jNUM_course;j+) printf(%6.1ft,scoreNUM_stdj); printf(n); getch(); 程序演示程序演示Return6.3 字符數組與字符串
18、字符數組與字符串6.3.1 字符數組的逐個字符操作字符數組的逐個字符操作 6.3.2 字符數組的整體操作字符數組的整體操作6.3.3 常用的字符串處理函數常用的字符串處理函數Return6.3.1 字符數組的逐個字符操作字符數組的逐個字符操作案例案例6.5從鍵盤輸入一個字符串,回車鍵結束,并將字符串在屏幕上輸出。 /*案例代碼文件名:AL6_5.C*/main() int i; static char str80; clrscr(); for(i=0;i80;i+) stri=getch(); /*逐次給數組元素stri賦值,但不回顯在屏幕上*/ printf(*); /*以星號代替輸入字符的
19、個數*/ if(stri=x0d) break;/*若輸入回車則終止循環(huán)*/ i=0; while(stri!=x0d) printf(%c,stri+); /*逐次輸出字符數組的各個元素*/ printf(n); getch();/*程序暫停*/ 程序演示程序演示1字符數組的定義字符數組的定義1維字符數組,用于存儲和處理1個字符串,其定義格式與1維數值數組一樣。2維字符數組,用于同時存儲和處理多個字符串,其定義格式與2維數值數組一樣。2字符數組的初始化字符數組的初始化字符數組的初始化,可以通過為每個數組元素指定初值字符來實現(xiàn)。 3字符數組的引用字符數組的引用 字符數組的逐個字符引用,與引用數
20、值數組元素類似。 (1)字符數組的輸入 除了可以通過初始化使字符數組各元素得到初值外,也可以使用getchar()或scanf()函數輸入字符。 例如: char str10;for(i=0; i10; i+) scanf(%c, &stri); fflush(stdin); /*清除鍵盤輸入緩沖區(qū)*/ (2)字符數組的輸出 字符數組的輸出,可以用putchar()或printf()函數。 例如: char str10=c language;for(i=0; i10; i+) printf(%c, stri);printf(n); 注意:逐個字符輸入、輸出時,要指出元素的下標,而且使用
21、“%c”格式符。另外,從鍵盤上輸入字符時,無需輸入字符的定界符單引號;輸出時,系統(tǒng)也不輸出字符的定界符。Return6.3.2 字符數組的整體操作字符數組的整體操作案例案例6.6 字符數組的整體輸入與輸出。 /*案例代碼文件名:AL6_6.C*/*功能:將2維字符數組進行初始化,并在屏幕上輸出*/main() int i; char name59=張三山, 李四季, 王五魁, 劉六順, 趙七巧; for(i=0;i5;i+) printf(n%st,namei); /*namei代表該行數組元素的首地址*/ getch();程序演示 1字符串及其結束標志字符串及其結束標志 所謂字符串,是指若干
22、有效字符的序列。C語言中的字符串,可以包括字母、數字、專用字符、轉義字符等。C語言規(guī)定:以0作為字符串結束標志(0代表ASCII碼為0的字符,表示一個“空操作”,只起一個標志作用)。因此可以對字符數組采用另一種方式進行操作了字符數組的整體操作字符數組的整體操作。 注意注意:由于系統(tǒng)在存儲字符串常量時,會在串尾自動加上1個結束標志,所以無需人為地再加1個。另外,由于結束標志也要在字符數組中占用一個元素的存儲空間,因此在說明字符數組長度時,至少為字符串所需長度加1。2字符數組的整體初始化字符數組的整體初始化字符串設置了結束標志以后,對字符數組的初始化,就可以用字符串常量來初始化字符數組。3字符數組
23、的整體引用字符數組的整體引用(1)字符串的輸入除了可以通過初始化使字符數組各元素得到初值外,也可以使用scanf()函數輸入字符串。(2)字符串的輸出printf()函數,不僅可以逐個輸出字符數組元素,還可以整體輸出存放在字符數組中的字符串。Return6.3.3 常用的字符串處理函數常用的字符串處理函數字符串標準函數的原型在頭文件string.h中。1輸入字符串輸入字符串gets()函數函數(1)調用方式:gets(字符數組)(2)函數功能:從標準輸入設備(stdin)鍵盤上,讀取1個字符串(可以包含空格),并將其存儲到字符數組中去。(3)使用說明 1)gets()讀取的字符串,其長度沒有限
24、制,編程者要保證字符數組有足夠大的空間,存放輸入的字符串。 2)該函數輸入的字符串中允許包含空格,而scanf()函數不允許。2輸出字符串輸出字符串puts()函數函數(1)調用方式:puts(字符數組)(2)函數功能:把字符數組中所存放的字符串,輸出到標準輸出設備中去,并用n取代字符串的結束標志0。所以用puts()函數輸出字符串時,不要求另加換行符。( 3)使用說明1)字符串中允許包含轉義字符,輸出時產生一個控制操作。2)該函數一次只能輸出一個字符串,而printf()函數也能用來輸出字符串,且一次能輸出多個。3字符串比較字符串比較strcmp()函數函數(1)調用方式:strcmp(字符
25、串1 ,字符串2)其中“字符串”可以是串常量,也可以是1維字符數組。(2)函數功能:比較兩個字符串的大小。如果:字符串字符串1=字符串字符串2,函數返回值等于0; 字符串字符串1字符串字符串2,函數返回值正整數。(3)使用說明1)如果一個字符串是另一個字符串從頭開始的子串,則母串為大。2)不能使用關系運算符“”來比較兩個字符串,只能用strcmp() 函數來處理。案例案例6.7 gets函數和strcmp函數的應用。 /*案例代碼文件名:AL6_7.C*/*功能:簡單密碼檢測程序*/#include stdio.hmain() char pass_str80; /*定義字符數組passstr*/ int i=0; /*檢驗密碼*/ while(1) clrscr(); printf(請輸入密碼n); gets(pass_str); /*輸入密碼*/ if(strcmp(pass_str,“password”)!=0) /*口令錯*/ printf(口令錯誤,按任意鍵繼續(xù)); else break; /*輸入正確的密碼,中止循環(huán)*/ getch(); i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河北省雄安新區(qū)2026屆高三上學期1月期末考試歷史試卷(含答案)
- 安徽省蕪湖市無為市部分學校2025-2026年九年級上學期1月期末考試道德與法治試卷(含答案)
- 2025-2026學年天津市河北區(qū)九年級(上)期末物理試卷(含答案)
- 五年級下冊期末考試卷及答案
- 網易筆試題庫及答案
- 2022-2023年部編版八年級語文(上冊期末)練習及答案
- 成都風俗習慣禮儀知識
- 烏馬河2022年事業(yè)編招聘考試模擬試題及答案解析19
- 2022~2023水利設施管養(yǎng)人員考試題庫及答案第627期
- 數理方程考試試卷及答案
- 2024南海農商銀行科技金融專業(yè)人才社會招聘筆試歷年典型考題及考點剖析附帶答案詳解
- 輸電專業(yè)十八項反措內容宣貫
- 通信工程施工企業(yè)安全生產管理人員知識考核題庫500題-含答案
- 危險化學品安全風險專項辨識與管控措施
- 中建精裝修工程檢驗批劃分方案
- 區(qū)間閉塞設備維護課件:表示燈電路識讀
- 人教版數學八年級上冊《等邊三角形的性質和判定》說課稿
- 股骨骨折伴發(fā)糖尿病患者護理查房
- 光化學和光催化反應的應用
- VDA6.3-2016過程審核主要證據清單
- 辦公耗材采購 投標方案(技術方案)
評論
0/150
提交評論