語言程序設(shè)計(jì)7_第1頁
語言程序設(shè)計(jì)7_第2頁
語言程序設(shè)計(jì)7_第3頁
語言程序設(shè)計(jì)7_第4頁
語言程序設(shè)計(jì)7_第5頁
已閱讀5頁,還剩85頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 數(shù)組的基本概念一維數(shù)組二維數(shù)組字符數(shù)組數(shù)組的應(yīng)用舉例 第七章 數(shù) 組1一、概述C數(shù)據(jù)類型: 基本類(簡單類)字符型/整型/實(shí)型 構(gòu)造類(組合類)數(shù)組/結(jié)構(gòu)體/共用體對于變量 基本類型單個出現(xiàn)的變量,每個變量可以代表一個確定的數(shù)據(jù)(變量值),且具有一定屬性。如 int x,y;但變量間不存在確定的相互關(guān)系。2數(shù)組的概念引入用基本數(shù)據(jù)類型可以解決所有問題嗎?例如:對某班學(xué)生的成績按由高到底的次序進(jìn)行排序。 3 名? 30 名?3數(shù)組:一種常用的構(gòu)造型數(shù)據(jù)類型。 由具有固定數(shù)目 相同類型 的元素按一定順序排列。 數(shù)組的基本概念特點(diǎn):1、數(shù)組元素的個數(shù)是確定,不可改變,元素值可變2、數(shù)組元素的類型必

2、須相同,不允許混合。41、一維數(shù)組的定義和使用可以是常量 和 符號常量,且必須為正值,表示數(shù)組元素的個數(shù)。不能包含變量。數(shù)組名的構(gòu)成方法與一般變量名相同。例如: int a10數(shù)組的數(shù)據(jù)類型定義 類型說明符 數(shù)組名 常量表達(dá)式 ;10個元素: a0、a1、a2.a9整型數(shù)組 a特別申明:不可對數(shù)組的大小作動態(tài)定義5判斷錯誤: 正確: int n=5; #define N 5 int an; int aN;正確: int a10, b54; char name8, ch23; float x8*2+1, table234; #define NUM 40; int aNUM, bNUM+2;67.

3、1.2 一維數(shù)組元素的引用1、先定義,后使用。3、只能逐個引用數(shù)組元素,而不能一次引用整個數(shù)組可以是整型常量或整型表達(dá)式2、引用方式: 數(shù)組名 下標(biāo) 。 例:int a9; char c4; float f10;a0=1; c3=b; f5=1.23a8=a5+a7-a2*34、引用數(shù)組元素要注意下標(biāo)不要出界(編譯程序不檢查是否“出界”)7示例引用示例: a23 a2-12*3-1 ax (x為整型表達(dá)式) 錯誤: a2,3比較:錯誤 正確 int n; int a5; scanf(“%d”,&n); for (i=0;i5;i+) int an; printf(“%dn”,ai);定義時不可

4、用變量作下標(biāo) 引用時可以用整型變量及表達(dá)式 作下標(biāo)8三、數(shù)組的存儲結(jié)構(gòu)根據(jù)數(shù)組的數(shù)據(jù)類型,為每一元素安排相同長度的存儲單元根據(jù)數(shù)組的存儲屬性,確定將其安排在內(nèi)存動態(tài)、靜態(tài)存儲區(qū)或寄存器區(qū)a0a1a92字節(jié)name0name1name71字節(jié)4字節(jié)x0 x1x72字節(jié)1字節(jié)4字節(jié)2字節(jié)1字節(jié)4字節(jié) int a10 char name8 static float x8 動態(tài)存儲區(qū) 靜態(tài)存儲區(qū) 說明:數(shù)組元素在內(nèi)存中順次存放,它們的地址是連續(xù)的。數(shù)組名字是一個常量,存放數(shù)組第一個元素的內(nèi)存地址。9定義時賦值一維數(shù)組的初始化 1、對數(shù)組的全部元素賦初值。 int a3=3,6,9; a0=3; a1=

5、6; a2=9; 2、對數(shù)組的部分元素賦初值。 int a4=3,6,9 ; a0=3; a1=6; a2=9; a3=0; 3、對全部數(shù)組元素賦初值時,可以不指定數(shù)組長度。但若提供 初值的個數(shù)與定義的數(shù)組長度不一樣,則數(shù)組長度不能省略。 int a=3,6,9; int a3; a0=3; a1=6; a2=9; 對數(shù)組的元素賦初值。方式:賦值語句、輸入語句a0=12;scanf(“ %d ”,&a1);注意:不能給數(shù)組整體賦初值數(shù)組名不可被賦值。10通常數(shù)組的輸入與輸出輸入:int i,a10;for(i=0;i10;i+) scanf(“%d”,&ai);輸出:for(i=0;i10;i

6、+) printf(“%d”,ai);11main( ) static int a10=1,3,4,8,5,7,12,9,5,23; int i,total=0; printf(“Total of array element values is % dn”, total);執(zhí)行結(jié)果 Total of array element values is 777.1.4 一維數(shù)組程序應(yīng)用舉例for (i=0;i=10-1;i+) total+=ai;例 計(jì)算數(shù)組元素之和12例: 輸入10個數(shù)據(jù),求和并求最大值。 main( ) int m; float a10,total=0.0 , max=0.0;

7、 for (m=0; m10 m+) /*輸入數(shù)據(jù)*/ scanf(“%f”,&am); printf(“n”);for (i=0; imax) max=ai; /*求最大值*/ printf(“Total of array element values is %3.2f, %7.3fn”,total,max);13例 7.2 用數(shù)組計(jì)算Fibonacci數(shù)列的前20項(xiàng) (p133) main( ) int i=0; int f20=1,1; /*僅對f 0,f 1賦確定值,其他元素自動賦0*/ for (i=2; i20; i+) /*求值*/ f i =f i-2+f i-1;i=2 f

8、2=f 0+f 1i=3 f 3=f 1+f 2i=4 f 4=f 2+f 3 for (i=0; i20; i+) /*輸出 */ if (i%5=0) printf(“n”); /*每行輸出5個數(shù)據(jù)*/ printf(“%12d”,f i); 14用數(shù)組計(jì)算Fibonacci數(shù)列的前20項(xiàng)程序執(zhí)行結(jié)果 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 15第 2 遍 a0a1 ,a1a2 an-3an-2 最終an-2為次大數(shù)冒泡法(起泡法/氣泡法)有n個雜亂無序的數(shù),要求將這n個數(shù)從小到大(或從大到?。┡?/p>

9、序后輸出。相鄰兩元素比較 aiai+1第 1 遍 a0a1比較, a1存放大的數(shù)。 a1a2比較, a2存放大的數(shù)。 a2a3 ,a3a4 an-2an-1比較, 最終an-1為最大數(shù) 比較n-1次比較n-2次 結(jié)論: n 個數(shù)排序, 要進(jìn)行 n-1 遍循環(huán)這種排序方法之所以叫“冒泡法”,是因?yàn)樵谂判蜻^程中,較小的數(shù)象氣泡一樣逐漸往前冒(向上冒),大的數(shù)逐漸向后沉,最終完成排序。16起泡排序?qū)哂衝個元素的序列按升序進(jìn)行起泡排序的步驟:首先將第一個元素與第二個元素進(jìn)行比較,若為逆序,則將兩元素交換。然后比較第二、第三個元素,依次類推,直到第n-1和第n個元素進(jìn)行了比較和交換。此過程稱為第一趟起

10、泡排序。經(jīng)過第一趟,最大的元素便被交換到第n個位置。對前n-1個元素進(jìn)行第二趟起泡排序,將其中最大元素交換到第n-1個位置。如此繼續(xù),直到某一趟排序未發(fā)生任何交換時,排序完畢。對n個元素的序列,起泡排序最多需要進(jìn)行n-1趟。17起泡排序舉例:對整數(shù)序列 8 5 2 4 3 按升序排序8524352438243582345823458初始狀態(tài)第一趟結(jié)果第二趟結(jié)果第三趟結(jié)果第四趟結(jié)果小的逐漸上升每趟沉下一個最大的18流程圖如下將n個數(shù)存入數(shù)組a中從第1行到第n-1行從第1個到第n-i個前后兩個兩兩比較大者調(diào)到后位輸出排序后的數(shù)組a19程序如下: #define N 10 main() int i,

11、 j, t, aN+1; for (i=1; i=N; i+) scanf(%d,&ai); for (i=1; i=N-1; i+) for (j=1; j aj+1) t = aj; aj = aj+1; aj+1 = t; for (i=1; i=N; i+) printf( %d ,ai);20定義 類型說明符 數(shù)組名 常量表達(dá)式 常量表達(dá)式 ;a0a00 a01 a02 a03a1a10 a11 a12 a13a2a20 a21 a22 a23a列行2、二維數(shù)組的定義和使用例 float a34; a 為 3 行,4列有12個元素的數(shù)組。 可理解為: float a04,a14,a2

12、4;3個元素每1元素包含4個子元素一維數(shù)組21引用 數(shù)組名 下標(biāo) 下標(biāo) float a34,b35; 例 : b12=a23/3; 下標(biāo)不要越界int M=a2422多維數(shù)組第一維下標(biāo)變化最慢,最右邊的下標(biāo)變化最快 定義 float a234; 存儲順序 a000 a001 a002 a003 a010 a013 a020 a023 a100 a103 a110 a113 a120 a123 按行存放,地址是連續(xù)的。 例: float a34; 數(shù)組的存儲順序?yàn)椋?a 二維數(shù)組存儲順序a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23存放數(shù)組第一個元

13、素的內(nèi)存地址231、對數(shù)組的全部元素賦初值分行賦初值; static int stud32=1,2,3,4,5,6;存儲時的排列順序 static int stud32=1,2,3,4,5,6;省略第一維長度的說明對全部元素賦初值 static int stud 2=1,2,3,4,5,6;語句執(zhí)行后:stud00=1, stud01=2,stud10=3, stud11=4, stud20=5, stud21=6,1 23 45 67.23 二維數(shù)組的初始化242、對數(shù)組的部分元素賦初值省略某些元素 int stud 32=1,2,3,4;省略第一維長度的說明(應(yīng)分行賦初值) int stu

14、d 2=1,0,2,3,;1 02 34 01 02 30 0語句執(zhí)行后: stud00=1, stud01=0, stud10=2, stud11=3, stud20=4, stud21=0,語句執(zhí)行后: stud00=1, stud01=0, stud10=2, stud11=3, stud20=0, stud21=0,25例7.2.4 (p138) 將一個二維數(shù)組行和列元素互換,存到另一個二維數(shù)組中a =1 2 34 5 6b =1 42 53 6a00 b00, a01 b10, a02 b20 規(guī)律: aij bji 26 main() 程序 int a23=1,2,3,4,5,6;

15、 int b32,i,j; for(i=0;i=1;i+) for(j=0;j=2;j+) bji=aij; /*行、列互換*/ prints(“array a:n”);for(i=0;i=1;i+) /* 按行、列打印a 數(shù)組*/ for(j=0;j=2;j+) printf(“%5d”,aij); printf(“n”);printf(“array b:n”);for(i=0;i=2;i+) for(j=0;j=1;j+) /* 按行、列打印b數(shù)組*/ printf(“%5d”,bij); printf(“n”);27運(yùn)行結(jié)果: array a: 1 2 3 4 5 6 array b:

16、1 4 2 5 3 628應(yīng)用舉例-6題目:從一個三行四列的整型二維數(shù)組中查找第一個出現(xiàn)的負(fù)數(shù)。分析算法要點(diǎn)用兩層嵌套的 for 循環(huán)來遍歷數(shù)組元素,判斷是否為負(fù)數(shù)。當(dāng)找到第一個負(fù)數(shù)時就應(yīng)該退出循環(huán),為此,應(yīng)定義一個標(biāo)記變量,用于標(biāo)記找到與否的狀態(tài),并將此標(biāo)記加入循環(huán)控制條件中,以控制循環(huán)在適當(dāng)時候退出。29main() int i,j,found,num34; printf(Enter 12 integers:n); for(i=0;i3;i+) for(j=0;j4;j+)scanf(%d,&numij); found=0; for(i=0;i3 & !found;i+) for(j=0;

17、j4 & !found;j+)if(numij0) found=1; if(!found) printf(not foundn); else printf(minus number num%d%d:%dn, i-1,j-1,numi-1j-1);30運(yùn)行結(jié)果:Enter 12 integers:3 5 56 1 45 -6 43 -1 1 4 -8 15minus number num11:-631【完善程序】下列程序的功能是顯示如下圖形: 1 0 0 0 0 2 1 0 0 0 3 2 1 0 0 4 3 2 1 0 5 4 3 2 1【分析】這類題的元素值排列很有規(guī)律,所以一般要從分析行數(shù)

18、i、列數(shù)j與元素值的關(guān)系著手。分析上圖可知,當(dāng)i=j時,元素值隨行數(shù)i增加而增加,隨列數(shù)j增加而減小,這樣就很容易得出其元素值與i,j的關(guān)系是i+1-j。main()int a55,i,j; clrscr(); for (i=0;i5;i+) for (j=0;j5;j+) if ( 【6】 ) aij=0; else aij=【7】; printf(%3d,aij); printf(n); a55分析:a00 a01 a02 a03 a04a10 a11 a12 a13 a14a20 a21 a22 a23 a24a30 a31 a32 a33 a34a40 a41 a42 a43 a44答

19、案:【6】ij 【7】i+1-j32【字符數(shù)組】存放字符(每個數(shù)組元素存放一個字符) 1、字符數(shù)組的定義 如: char a10; int a10; char a23;字符數(shù)組各個元素分別存放一個字符的數(shù)組。字符串 “” (字符串常量)以“0”結(jié)尾【注意】字符數(shù)組與字符串的區(qū)別:字符串存放在字符數(shù)組中,但字符數(shù)組與字符串可以不等長;字符串以“0”結(jié)尾。即:C語言中無字符串變量,但可用一個字符數(shù)組存放字符串;反之,存放在字符數(shù)組中的并非都是字符串。7.3、字符數(shù)組33【0】 0是指ASCII代碼為0的字符。它既不是一個普通的可顯示字符,也不是一個具有操作功能的字符,而是一個“空操作”字符。它不進(jìn)

20、行任何操作,在字符數(shù)組中僅作字符串結(jié)束標(biāo)記使用。0可以用賦值方法賦給一個字符變量或字符型數(shù)組中的某個元素,如c8= 0。運(yùn)算時,按0(NULL)看待。如:#include Main() printf(“%d,%d,%d,%d”,NULL,-100,0,100); 結(jié)果:0,-100,0,-100347.3.2、字符數(shù)組的初始化單字符方式 char a10=A, B, C, D; char b23= A, B, C, D, E,F;【注意】如果初值個數(shù)小于數(shù)組長度,則多余的數(shù)組元素自動為空字符(0)字符串方式 char a5=“ABCD”; char c =”ABCD”; char a25=A,

21、B,C,0,x,y,0; char a25=“ABC”,”XY”;二維數(shù)組可以認(rèn)為由若干個一維數(shù)組組成?!纠弧勘容^以下字符數(shù)組長度是否相同: char a =”ABCD”; char b = “ABCD”; char c =A,B,C,D; (5) (5) (4)35例 7.6 (p131) 輸出一個字符串main() char c10=I, ,a,m, ,a,b,o,y; int i; for(i=0;i10;i+) printf(%c,ci); printf(n);運(yùn)行結(jié)果: I am a boy36例 7.7 (p131) 輸出一個鉆石圖形 main() static char dia

22、mond 5=,*, ,*,*,*,*,*,*,*; int i,j; for (i=0;i5;i+) for(j=0;j5;j+); printf(%c,diamondij); printf(n); * * * * * * *運(yùn)行結(jié)果:37先建立存儲空間(先定義一個字符數(shù)組),再輸入其元素值。如果 char a10;除了直接在定義時初始化,定義后賦值的方法有: 法1: 逐個元素賦值 a0=A,a1=X; 法2: 循環(huán)+scanf(“%c”, &); /*用格式符%c逐個字符輸入/輸出*/ for (i=0;i10;i+) scanf(“%c”,&ai); 法3: scanf(“%s”, 字符

23、數(shù)組名); (用于從鍵盤接收一個不帶空格的字符串scanf(“%s”,a); /*數(shù)組名代表該字符數(shù)組(字符串)的首地址,不可加&號*/【注意】此法可自動在所輸入的字符串末尾加上0。但輸入的字符串中不能有空格(C語言規(guī)定scanf用%s時,以空格或回車符作為字符串的間隔符。所以,上例中,如果從鍵盤輸入“Computer”然后回車,則數(shù)組a存放的是”Computer0”。如果輸入“Turbo C“,數(shù)組a中實(shí)際只存放”Turbo0”。7.3.5-A、字符數(shù)組的輸入38法4:gets(字符數(shù)組名); (用于從鍵盤接收 一個任意字符串) gets(a)執(zhí)行時,將一直讀取用戶從鍵盤輸入的所有字符,直到

24、遇到回車符(n)為止。成功:返回?cái)?shù)組a首地址,否則返回NULL。gets(a)亦會自動在字符串末尾加上0(代替n)?!咀⒁狻咳绻斎氲淖址L度(含0)超過字符數(shù)組定義的長度,將會引起出錯。39 【例】 main() char name20; printf(“Whats your name?”); gets(name); printf(“Hi,%s,nice to meet you!n”,name); 運(yùn)行程序時,從鍵盤輸入:XXX (XXX為考生姓名) 結(jié) 果:Hi,XXX ,nice to meet you!(XXX為考生姓名)【例】main()char a10; clrscr(); get

25、s(a); printf(%sn,a+2); 運(yùn)行程序時,從鍵盤輸入:abc defg結(jié)果:c defg407.3.5-B、字符數(shù)組的輸出法1:逐個元素輸出: 循環(huán)+printf(“%c”,);法2:字符串輸出: printf(“%s”,字符數(shù)組名);法3:字符串輸出: puts(字符數(shù)組名);將一個以NULL(0)結(jié)尾的字符串輸出到屏幕上,并自動換行。41【注意】 1、 常用si 作循環(huán)條件,當(dāng)循環(huán)(i遞增)到字符串結(jié)束處(0)便自動結(jié)束循環(huán)。 2、 典型結(jié)構(gòu):如果s是字符串,則下列結(jié)構(gòu)可以將s中不符合條件的字符刪去。int i, j; for (i=0,j=0; stri; i+) if

26、(條件) strj+ = stri; strj = 0;42例如: 程序中有下列語句: char str15,str25,str35; scanf(%s%s%s,str1,str2,str3); 運(yùn)行時輸入數(shù)據(jù): How are you?內(nèi)存中變量狀態(tài)如下: str1: H o w 0 0 str2: a r e 0 0 str3: y o u ? 043若改為: char str13; scanf(%s,str); 運(yùn)行時輸入數(shù)據(jù): How are you?內(nèi)存中變量 str 內(nèi)容如下: str: H o w 0 0 0 0 0 0 00 0 044【例】下列程序段的運(yùn)行結(jié)果是: 結(jié)果:(a

27、b) char a5=a,b, 0,d,0;printf(“%s”,a); 說明:%s的作用是輸出一個字符串,直到遇到0為止。注意:在二維數(shù)組中,雙下標(biāo)引用某行某列的某個元素 單下標(biāo)引用某行的字符串45【例】分析以下程序的運(yùn)行結(jié)果:main()char word310;int i;for (i=0;i3;i+) scanf(%s,wordi);printf(%s,word1);123450abcdef0ABCDEFG0運(yùn)行時,輸入:12345abcdef ABCDEFG結(jié)果:abcdef【注】wordi第i+1行word元素首地址(二維數(shù)組用單下標(biāo)表示某行的字符串)。 46 (#include

28、)puts 輸出字符串 gets 輸入字符串 (#include) strcat 字符串連接 strcpy 字符串復(fù)制 strcmp 字符串比較 strlen 字符串長度 strlwr 將字符串中的大寫字符轉(zhuǎn)換為小寫字符 strupr 將字符串中的小寫字符轉(zhuǎn)換為大寫字符7.3.6字符串處理函數(shù)47gets( )和puts( )strcpy( ) 字符串考貝函數(shù)(包含在string.h中,下同)形式: strcpy(目的字符數(shù)組,源字符串);作用: 將源字符串考貝到目的字符數(shù)組中,直到遇到源 字符串的終止符0為止。 函數(shù)返回值:目的字符數(shù)組的地址。注意:目的字符數(shù)組要定義得足夠大。若要將一個字符

29、串常量或從某一首地址開始的字符串復(fù)制給別的數(shù)組,只能用本函數(shù)或指針。48【例一】main( ) char a =“abcde”; char b10; b = “abcde”; b = a; /*編譯出錯*/【討論】編譯出錯原因何在?a,b都是兩個數(shù)組定義時分配的內(nèi)存存儲單元首地址,是個常量,不能改變(不能賦值)。49#include “string.h”main( ) char s10,sp =“HELLO”; strcpy(s,sp); s0=h; s6=!; puts(s);結(jié)果:hELLO 【例二】以下程序的輸出結(jié)果是 ?!居懻摗拷Y(jié)果為什么不是:hELLO! 如果讓s5=!,結(jié)果又會如何

30、?(結(jié)果:hELLO后面跟了一堆亂碼)如果是拷貝字符串的一部分,可用函數(shù)strncpy(目的字符數(shù)組,源字符串,拷貝字符數(shù))50【例三】以下程序的輸出結(jié)果是 。#include “string.h”main( ) char s =“This is a source string.”, b20; strncpy(b,s,16); b16 = 0; printf(“%sn”,b);結(jié)果:This is a source51strcat( ) 字符串連接函數(shù) 形式:strcat(目的字符數(shù)組,源字符串); 作用:將源字符串連接到目的字符數(shù)組后面。 函數(shù)返回值:目的字符數(shù)組的地址。注意:目的字符數(shù)組要

31、定義得足夠大。 【例四】以下程序的輸出結(jié)果是 。 #include string.hmain()char a =abcde; char b =12345; strcat(b,a); printf(%s,%sn,a,b);結(jié)果:abcde,12345abcde【討論】程序執(zhí)行完后出錯(數(shù)組b長度定義不夠,將數(shù)組b的長度定義11,則出錯消失)52【例五】以下程序的輸出結(jié)果是 。#include string.hmain() char a80=“AB”,b80=”LMNP”; int i=0; strcat(a,b); while (ai+!=0) bi=ai; puts(b);結(jié)果:LBLMNP

32、(注意bi=ai是從i=1開始)53strcmp( ) 字符串比較函數(shù) 形式:strcmp(字符串1,字符串2); 作用:對兩個字符串從各自第一個字符開始進(jìn)行逐一比較,直到對應(yīng)字符不相同或到達(dá)串尾為止 函數(shù)返回值:確定了比較結(jié)果 小于0 字符串1小于字符串2 等于0 字符串1等于字符串2 大于0 字符串1大于字符串254【例六】運(yùn)行以下程序時,從鍵盤輸入:BOOKCUTGAMEPAGE(表示回車),則運(yùn)行結(jié)果是什么?#include “string.h”main()int i; char str10,temp10=”Control”; for ( i=0; i4; i+) gets(str);

33、 if(strcmp(temp,str)0i=2 Control CUT 0i=3 Control GAME 0 GAMEi=4 GAME PAGE %sn,str1); 隨著j+的移動,str2的串結(jié)束標(biāo)志“0”也被賦到str1中,此時循環(huán)結(jié)束。59運(yùn)行結(jié)果:Enter string No.1: abcdefghEnter string No.2: IJKLMNOPQRSstring No.1-abcdefghIJKLMNOPQRS60應(yīng)用舉例-3(參考習(xí)題7.5)題目:把輸入的字符串逆序排列,并顯示。分析:數(shù)據(jù)結(jié)構(gòu): 輸入的字符串用字符數(shù)組存放。算法要點(diǎn): 逆序排列用交換算法,求出字符串最

34、后一個字符的下標(biāo),然后將第一個字符和最后一個字符交換,第二個和倒數(shù)第二個交換,61#include “stdio.h”#include “string.h”main() char str80; int c,i,j; printf(Enter a string:n); scanf(%s,str); for(i=0, j=strlen(str)-1; ij ; i+, j- ) c=str i ; str i =str j ; str j =c; printf(nReversed string:n%sn,str);62運(yùn)行結(jié)果:Enter a string: abcdefghReversed st

35、ring: hgfedcba63應(yīng)用舉例-4 (參考習(xí)題7.10)題目:從鍵盤輸入字符,以 ctrl+z 結(jié)束,統(tǒng)計(jì)輸入的數(shù)字 09、空白符和其它字符的個數(shù)。分析:數(shù)據(jù)結(jié)構(gòu)1、定義一個具有 10 個元素的整型數(shù)組來存放數(shù)字 09 的個數(shù)。2、定義兩個整型變量來存放空白符和其它字符的 個數(shù)。 算法要點(diǎn)1、計(jì)數(shù)用的數(shù)組和變量要初始化為0。2、用循環(huán)結(jié)構(gòu)處理字符讀入,內(nèi)嵌分支結(jié)構(gòu)處理 計(jì)數(shù)。 64#includemain( ) int c, i, nwhite, nother, ndigit10; nwhite=nother=0; for(i=0;i=0&c=9) +ndigit c-0 ; els

36、e if (c= | c=n | c=t) +nwhite; else +nother; for(i=0; i10; i+) printf(digit %d:%dn, i, ndigiti); printf(white space:%dn, nwhite); printf(other character:%dn, nother);注: c為int型,所以它為輸入字符的ASIC碼65運(yùn)行結(jié)果:The use of the double colon in front ofthe variable name, in lines 11, 13, and16, instructs the system

37、that we areinterested in using the global variablenamed index. digit 1:4 digit 2:0 digit 3:1 digit 4:0 digit 5:0 digit 6:1 digit 7:0 digit 8:0 digit 9:0 white space:34 other character:13266應(yīng)用舉例-題目:把輸入的字符串逆序排列,并顯示。分析:數(shù)據(jù)結(jié)構(gòu):輸入的字符串用字符數(shù)組存放。算法要點(diǎn):逆序排列用交換算法,求出字符串最后一個字符的下標(biāo),然后將第一個和最后一個交換,第二個和倒數(shù)第二個交換,.。67main(

38、) char str80; int c, i, j; printf(Enter a string:n); scanf(%s,str); for(i=0,j=strlen(str)-1; ij; i+,j-) c = stri; stri = strj; strj = c; printf(nReversed string:n%sn,str);68運(yùn)行結(jié)果:Enter a string:abcdefghReversed string:hgfedcba69應(yīng)用舉例-4題目:從鍵盤輸入字符,以 ctrl+z 結(jié)束,統(tǒng)計(jì)輸入的數(shù)字 09、空白符和其它字符的個數(shù)。分析:數(shù)據(jù)結(jié)構(gòu):定義一個具有 10 個元素

39、的整型數(shù)組來存放數(shù)字 09 的個數(shù)。定義兩個整型變量來存放空白符和其它字符的個數(shù)。算法要點(diǎn):計(jì)數(shù)用的數(shù)組和變量要初始化為0。用循環(huán)結(jié)構(gòu)處理字符讀入,內(nèi)嵌分支結(jié)構(gòu)處理計(jì)數(shù)。70#includemain() int c, i, nwhite, nother, ndigit10; nwhite=nother=0; for(i=0; i=0 & c=9) +ndigitc-0; else if(c= |c=n|c=t) +nwhite; else +nother; for(i=0;i=a&ai=z)? ai-a+A:ai; while(ai+!=0); printf(Copyed string:n%s

40、n,b);74運(yùn)行結(jié)果:Enter a string:ProgrammerCopyed string:PROGRAMMER75要求:1) 輸入學(xué)生人數(shù),按學(xué)號從小到大循序依次輸入學(xué)生成績. 2)統(tǒng)計(jì)每個學(xué)生課程的總成績和平均分. 3)統(tǒng)計(jì)每門課程全班的總成績和平均成績.編寫統(tǒng)計(jì)某班英語、數(shù)學(xué)、程序設(shè)計(jì)語言3門課程的成績。分析:數(shù)據(jù)結(jié)構(gòu) 定義二維數(shù)組 score50 5 score i 0 , score i 1, score i 2 分別存放三門課的成績 score i 3 個人總分, score i 4 個人平均成績 定義一維數(shù)組 total3 全班各科總分 avg 3 全班各科平均分應(yīng)用舉

41、例-676輸入學(xué)生人數(shù), 按學(xué)號從小到大循序依次輸入學(xué)生成績 printf(input students number:); scanf(%d,&n); printf(input scoren); for (i=0;in;i+) printf(“%d student ”,i+1); /*輸入*/ scanf(%d%d%d,&scorei0, &scorei1,&scorei2); 772)統(tǒng)計(jì)每個學(xué)生課程的總成績和平均分. for (i=0;in;i+) scorei3=0; for (j=0;j3;j+)/*每個學(xué)生課程的總成績*/ scorei3+=scoreij; scorei4=sco

42、rei3/3; /*平均分*/ printf(n English Math Program Total Averagen); for (i=0;in;i+) printf(%5d,i+1); for (j=0;j5;j+) printf(%9d,scoreij); printf(n); 783)統(tǒng)計(jì)每門課程全班的總成績和平均成績. for (j=0;j3;j+) totalj=0; for (i=0,in;i+) totalj+=scoreij; /*全班的總成績*/ avgj=totalj/n; /* 平均成績*/ printf(total:); for (i=0;i3;i+) printf(%7d,totali); printf(navg: ); for (i=0;i3;i+) printf(%7d ,avgi); printf(n);79找出一個二維數(shù)組中的鞍點(diǎn),即該位置上的元素在該行上最大,在該列上最小。也可能沒有鞍點(diǎn)。分析:算法要點(diǎn) 1、輸入二維數(shù)組 2、利用一維循環(huán),比較,找出某行中的最大值 并記下列值 3、利用一維循環(huán),比較,判斷行的最大值為列中的最小值 重復(fù)2、3操作 4、輸出應(yīng)用舉例-780 1、輸

溫馨提示

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

評論

0/150

提交評論