版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第六章第六章 批量數(shù)據(jù)組織批量數(shù)據(jù)組織數(shù)組數(shù)組n成績統(tǒng)計成績統(tǒng)計數(shù)組類型數(shù)組類型n數(shù)組聲明數(shù)組聲明n下標表達式下標表達式n數(shù)組操作數(shù)組操作 n統(tǒng)計多科成績統(tǒng)計多科成績多維數(shù)組多維數(shù)組n程序設(shè)計實例程序設(shè)計實例n線性表線性表分類與檢索分類與檢索n帶學號的成績排序帶學號的成績排序數(shù)組初值數(shù)組初值n表示姓名表示姓名字符串字符串n類型定義類型定義n線性表線性表棧和隊列棧和隊列n程序設(shè)計實例(二)程序設(shè)計實例(二)作業(yè)作業(yè): 6.2 6.3 6.11 6.17 6.18 6.23 6.24 6.27練習練習: 6.1 6.6 6.9 6.106.1 成績統(tǒng)計成績統(tǒng)計數(shù)組類型數(shù)組類型 【例【例6.1】為了
2、分析學生對程序設(shè)計課程的掌握程度,需】為了分析學生對程序設(shè)計課程的掌握程度,需要對該課程成績進行統(tǒng)計。編程序,輸入一個班要對該課程成績進行統(tǒng)計。編程序,輸入一個班50名學生的名學生的程序設(shè)計課程成績,然后按程序設(shè)計課程成績,然后按10分為一段,統(tǒng)計各段成績的學分為一段,統(tǒng)計各段成績的學生人數(shù),并輸出。生人數(shù),并輸出。 解:該問題的算法很簡單。首先用一個循環(huán)順序輸入解:該問題的算法很簡單。首先用一個循環(huán)順序輸入50名學生的成績,設(shè)為名學生的成績,設(shè)為a0、a1、a2、 、a49;再用;再用11個計個計數(shù)器數(shù)器j0、j1、j2、 、j10 分別記錄分別記錄0-9、10-19、91-99、100各個
3、分數(shù)段的學生數(shù)。方法是先把諸各個分數(shù)段的學生數(shù)。方法是先把諸 j 清清“0”,再掃,再掃描這描這50個分數(shù),判斷每個分數(shù)所在分數(shù)段,給相應(yīng)計數(shù)器加個分數(shù),判斷每個分數(shù)所在分數(shù)段,給相應(yīng)計數(shù)器加1。最后用一個循環(huán)輸出每段分數(shù)的個數(shù)。該算法可以描述為如最后用一個循環(huán)輸出每段分數(shù)的個數(shù)。該算法可以描述為如圖的圖的PAD。開始開始結(jié)束結(jié)束for (i=0;i50;i+)輸出輸出jifor (i=0;i11;i+)for (i=0;i50;i+)輸入輸入aifor (i=0;i11;i+)ji=0jk = jk +1k=ai/10 問題的求解步驟搞清楚了。但是問題是問題的求解步驟搞清楚了。但是問題是:
4、50個分數(shù)怎么辦?個分數(shù)怎么辦? 11個計數(shù)器怎么辦?個計數(shù)器怎么辦? 計算機完成該算法,顯然不能像前邊那樣,引進計算機完成該算法,顯然不能像前邊那樣,引進50個變量來個變量來保存分數(shù)數(shù)據(jù),引進保存分數(shù)數(shù)據(jù),引進11個變量保存計數(shù)器數(shù)據(jù)。個變量保存計數(shù)器數(shù)據(jù)。 程序設(shè)計語言為了處理類似的批量數(shù)據(jù),提供一種組織數(shù)據(jù)程序設(shè)計語言為了處理類似的批量數(shù)據(jù),提供一種組織數(shù)據(jù)的機制的機制數(shù)組。用數(shù)組把這些數(shù)據(jù)全部保存起來,使用數(shù)組參數(shù)組。用數(shù)組把這些數(shù)據(jù)全部保存起來,使用數(shù)組參與運算。使用數(shù)組保存與運算。使用數(shù)組保存50個分數(shù)、個分數(shù)、11個計數(shù)器,該問題可以編個計數(shù)器,該問題可以編出程序如下。出程序如下
5、。 在該程序中使用數(shù)組保存批量數(shù)據(jù)。在該程序中使用數(shù)組保存批量數(shù)據(jù)。 數(shù)組數(shù)組 a 有有 50 個元素,每個成分都是整數(shù)類型,個元素,每個成分都是整數(shù)類型,用以保存用以保存 50 個學生的分數(shù);個學生的分數(shù); 數(shù)組數(shù)組 j 有有 11 個成分,每個成分都是整數(shù)類型,個成分,每個成分都是整數(shù)類型,用以保存用以保存 11 個分數(shù)段的學生數(shù)。個分數(shù)段的學生數(shù)。 a 和和 j 都是數(shù)組類型變量都是數(shù)組類型變量 程序例程序例 6.1 的變量聲明的變量聲明 int i , k , a50 , j11 ;中,除了聲明兩個中,除了聲明兩個 int 類型變量外,還通過類型變量外,還通過 a50、j11 聲聲明了
6、兩個數(shù)組變量明了兩個數(shù)組變量 a 、j 在在C中聲明數(shù)組變量使用數(shù)組聲明符在變量聲明中進行。中聲明數(shù)組變量使用數(shù)組聲明符在變量聲明中進行。一維數(shù)組的數(shù)組聲明符結(jié)構(gòu)是:一維數(shù)組的數(shù)組聲明符結(jié)構(gòu)是: 標識符標識符 常量表達式常量表達式 其中其中 標識符標識符數(shù)組變量名字數(shù)組變量名字 常量表達式常量表達式數(shù)組的尺寸數(shù)組的尺寸 類型說明符類型說明符數(shù)組的類型,也是數(shù)組成分的類型數(shù)組的類型,也是數(shù)組成分的類型 把數(shù)組聲明符放在變量聲明中,便可以聲明數(shù)組變量把數(shù)組聲明符放在變量聲明中,便可以聲明數(shù)組變量 int i,k,a50,j11;聲明了兩個數(shù)組變量聲明了兩個數(shù)組變量 a、j 。 常量表達式常量表達式
7、 50 指出指出 a 有有 50 個成分,個成分, 常量表達式常量表達式 11 指出指出 j 有有 11 個成分。個成分。 類型說明符類型說明符 int 指出指出 a、j 是是 int 類型,即成分是類型,即成分是 int 類型。類型。l a 的的50個成分順序編號為個成分順序編號為 0、1、2、.、49 l 它們的下標分別是它們的下標分別是 0、1、2、.、49 l j 的的11個成分順序編號為個成分順序編號為 0、1、2、.、10 l 它們的下標分別是它們的下標分別是 0、1、2、.、10 nnt4 的下標為的下標為 0 (第第1個個)的成分,為的成分,為 char 型型變量變量 C 沒有
8、定義施于數(shù)組類型上的任何操作,包括:賦值、運沒有定義施于數(shù)組類型上的任何操作,包括:賦值、運算、輸入輸出等。涉及數(shù)組的操作都是通過其元素實現(xiàn)的。設(shè)算、輸入輸出等。涉及數(shù)組的操作都是通過其元素實現(xiàn)的。設(shè)有聲明:有聲明: int t010,t110,w10,m ; 解:該問題的算法也很簡單。只要在例解:該問題的算法也很簡單。只要在例6.1算法的基礎(chǔ)算法的基礎(chǔ)上,在外層加一層上,在外層加一層 1 到到 5 的循環(huán),每次循環(huán)分別統(tǒng)計一個課的循環(huán),每次循環(huán)分別統(tǒng)計一個課的成績即可。得下圖的的成績即可。得下圖的PAD。處理第處理第r科成績部分科成績部分開始開始結(jié)束結(jié)束for (i=0;i50;i+)輸出輸
9、出jrifor (i=0;i11;i+)for (i=0;i50;i+)輸入輸入arifor (i=0;i11;i+)jri=0jrk = jrk +1k=ari/10for (r=0;r5;r+) 到此問題的求解步驟已經(jīng)清楚。問題仍然是如何存儲數(shù)據(jù),到此問題的求解步驟已經(jīng)清楚。問題仍然是如何存儲數(shù)據(jù),5 科課程的分數(shù)怎么保存?科課程的分數(shù)怎么保存?5 科課程中每科的科課程中每科的 11 個計數(shù)器怎個計數(shù)器怎么保存?么保存? 使用兩維數(shù)組可以解決該問題,編出程序如下:使用兩維數(shù)組可以解決該問題,編出程序如下: 兩維數(shù)組 程序中的 a、j 數(shù)組都是兩維數(shù)組,也可以認為是數(shù)組的數(shù)組。以 a 數(shù)組為
10、例,它首先是 5 個成分的一維數(shù)組,每個成分又是 50 個成分的一維數(shù)組,相應(yīng)一維數(shù)組的每個成分是一個 int 類型變量??梢钥闯?,數(shù)組的成分類型還可以是數(shù)組,從而構(gòu)造數(shù)組的數(shù)組。兩維數(shù)組的聲明形式是:標識符 常量表達式 常量表達式 兩維數(shù)組的下標表達式形式是: 數(shù)組變量 表達式1 表達式2 例 ari 、jrk等都是下標表達式。11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1. . .打印第打印第i行行打印楊輝打印楊輝 三角形三角形for(i=0; i10; i+) 結(jié)束結(jié)束生成第生成第i行行打印打印n 稍大一點,運算量極大稍大一點,運算量極大Cn!m n mnm
11、=-!()!利用楊輝三角形的特性:利用楊輝三角形的特性: 11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1. . .14641b123456789下標下標a010第第4行行第第5行行1510 1051a第第6行行1615 20 1561b15101051for(j=1;ji;j+) aj=bj-1+bjai=1for(j=0;j=i;j+)bj=aj打印楊輝打印楊輝 三角形三角形for(i=0; i10; i+) 結(jié)束結(jié)束生成第生成第i行行打印打印14641b123456789下標下標1510 1051a010第第4行行第第5 行行11 11 2 11 3 3 11
12、 4 6 4 11 5 10 10 5 1. . .for(j=1;ji;j+) aj=bj-1+bjai=1for(j=0;j=i;j+)bj=aj印印 40-i*(/2)個空格個空格印印“回車回車”printf ( “%8d”,aj)for(j=0;j=i;j+)打印楊輝打印楊輝 三角形三角形for(i=0; i10; i+) 結(jié)束結(jié)束打印打印假設(shè)假設(shè) 把第把第0行的的輸行的的輸出在屏幕的第出在屏幕的第40列列各行數(shù)據(jù)中每個數(shù)占各行數(shù)據(jù)中每個數(shù)占位;第位;第 i 行應(yīng)從行應(yīng)從 40-i*(4) 處開始顯示處開始顯示#define n 10#define wideword void main
13、() int an+1,bn+1,i,j; for(i=0;in;i+) for(j=1;ji;j+)/生成第生成第i行行 aj=bj-1+bj; ai=1; for(j=0;j=i;j+) /形成下一次的第形成下一次的第i-1行行 bj=aj; for(j=0;j=40-i*(wideword/2);j+) /打印第打印第i行行 printf(%c, ); for(j=0;j=i;j+) / printf(“%8d,aj); printf(n); a123456789下標下標b1.i=02.不執(zhí)行不執(zhí)行 循環(huán),循環(huán),a0=13.b0=a0=1,4.打印打印40個空格個空格5.打印打印a0=1
14、,打印回車打印回車111 . . .0101a123456789下標下標1b2.i=13.不執(zhí)行不執(zhí)行 循環(huán),循環(huán),a1=14.b0=a0=1b1=a1=15.打印打印36個空格個空格6.打印打印a0, a1=1打印回車打印回車111 1 1 . . .01011a123456789下標下標11b3.i=24.j=12a1=b0+b1=2a2=15.b0=a0=1b1=a1=2b2=a2=16.打印打印32個空格個空格7.打印打印a0, a1,a2,打印回車打印回車221 1 1 1 2 1 . . .01110121a123456789下標下標121b4.i=35.j=10,不執(zhí)行循環(huán)不執(zhí)行
15、循環(huán)1101a1234567890下標下標2.i=13.a1=14.j=00,不執(zhí)行循環(huán)不執(zhí)行循環(huán)11011a1234567890下標下標3.i=24.a2=15.j=10a1=a1+a0=21210121a1234567890下標下標4.i=35.a3=16.j=20a2=a2+a1=3 a1=a1+a0=3133101331a1234567890下標下標5.i=46.a4=17.j=30a3=a3+a2=4 a2=a2+a1=6 a1=a1+a0=4144610解:設(shè)有矩陣解:設(shè)有矩陣 mp 、pn ,則其乘積矩陣,則其乘積矩陣 mn 的元素的元素 ij 為為 1kjpkikbafor (
16、i=0;im;i+)for (j=0;jn;j+)for(k=0;kp;k+)e=e+aik*bkje=0cij = e開始開始結(jié)束結(jié)束一行一行的求一行一行的求 求一行求一行求一個元素求一個元素0001020n-10n1011121n-11n2021222n-12nn-10n-11n-12n-1n-1n-1n. 開始開始結(jié)束結(jié)束消去的下三角部分消去的下三角部分回代,求出全部根回代,求出全部根00001020n-10n11121n-11n222n-12nn-1n-1n-1n.0001020n-20n-10n11121n-21n-1102021n-10n-11n-1n221n-22n-12nn-1
17、n-1n-112n-1n-2n.禳镲镲镲镲镲镲镲镲镲睚镲镲镲镲镲镲镲镲镲鉿消去消去0.n-2列,列,對于第對于第 i 列消去列消去 aii (第第 i 行行)下面的元素下面的元素 開始開始結(jié)束結(jié)束消去第消去第 i 列主對列主對角線以下部分角線以下部分 for( i=0; in-1; i+) 回代,求出全部根回代,求出全部根ii000i-10i0i+10ni-1i-1i-1ii-1i+1i-1niiii+1ini+1ini+1i+1i+1-1in-1i+1nn-1n-1n-1n.0.0.0.0.0.000消去消去 i+1.n-1 行行,用用j標識第幾個方程標識第幾個方程 開始開始結(jié)束結(jié)束 for
18、(i=0; in-1; i+) 回代,求出全部根回代,求出全部根for (j=i+1; j n; j+)消去消去ajiiij 下邊考慮消去下邊考慮消去aji 。根據(jù)線性方程組的性質(zhì),消。根據(jù)線性方程組的性質(zhì),消去去aji應(yīng)該把第應(yīng)該把第j個方程減去第個方程減去第i個方程的個方程的aji/aii倍。倍。000i-10i0i+10ni-1i-1i-1ii-1i+1i-1niiii+1inn-1in-1i+1n-1n-1n-1i+1ii+1i+1i+n1n.0.0.0.0.0.000.i.n個元素都需要發(fā)生改變,個元素都需要發(fā)生改變,用用k來標識第幾列的元素來標識第幾列的元素 開始開始結(jié)束結(jié)束 fo
19、r(i=0; in-1; i+) 回代,求出全部根回代,求出全部根 for ( j=i+1; j n; j+ )r=aji/aii for(k=i; k=n; k+)ajk=ajk-aik*r0001020n-10n11121n-11n222n-12nn-1n-1n-1n.01211212110nnnnxxxxxxxxxx從后往前依次迭代求解從后往前依次迭代求解x對于循環(huán)對于循環(huán)n-1.0,用,用 i 標識標識 開始開始結(jié)束結(jié)束 for(i=0; in-1; i+) for (j=i+1; j n; j+)r=aji/aii for(k=i; k=0; i-)求求 xiii+1in000i-1
20、0i0i+10n-10ni-1i-1i-1ii-1i+1i-1n-1i-1i1niii+1i+1n. .00. . 00. . .011111111100000iniiiniiiniixxxxxxxxxxxxxi+1n-1i+1nn-1n-1n-1n. . 11nnxx求求xi已知:已知:xi+1,xn-1需求:需求:i+1.n-1的和,用的和,用j標識標識 求求xi時的條件是:時的條件是:xi+1 、xi+1 、. 、xn-1 已經(jīng)求出;已經(jīng)求出; 第第i個方程是:個方程是: aii*xi + aii+1*xi+1 + . + ain-1*xn-1 = ain 所以該方程的解應(yīng)該是:所以該方
21、程的解應(yīng)該是: xi=( ain-( aii+1*xi+1 + . + ain-1*xn-1) )/aii 開始開始結(jié)束結(jié)束 for(i=0; in-1; i+) for (j=i+1; j n; j+)r=aji/aii for(k=i; k=0; i-)r = 0for(j=i+1; j=n-1; j+)r=r+aij*xjxi=(ain-r)/aii再考慮回代過程中,當再考慮回代過程中,當-1時的邊界情況,這時中間的求和循時的邊界情況,這時中間的求和循環(huán)不作,環(huán)不作,= 。最下邊的公式正好變成。最下邊的公式正好變成 xn-1=an-1n/an-1n-1 也是正確的。也是正確的。#defi
22、ne n 10 float ann+1,xn ; /* 注意數(shù)組從注意數(shù)組從0開始編下標開始編下標 */void gaoss ( void ) float r; int i,j,k; for ( i=0 ; in-1 ; i+ ) /* 列控制:列控制:0到到n-2列列 */ for ( j=i+1 ; jn ; j+ ) / 行控制:行控制:i+1到到n-1行行(最后一行最后一行) r = aji / aii ; for ( k=i ; k=0 ; i- ) / 從最后一個方程(第從最后一個方程(第n-1行)開始行)開始 r = 0 ; for ( j=i+1 ; j=n-1 ; j+ )
23、/ 從第從第i+1列到第列到第n-1列求和列求和 r = r + aij * xj ; xi = ( ain - r ) / aii ; 開始開始結(jié)束結(jié)束for (i=0;i100;i+)輸入輸入aifor (i=0;i100;i+)輸出輸出ai換行換行i%5 = 0輸入輸入排序排序輸出輸出na0、a1 、a2、 an-2 、an-1 自然排好序,排自然排好序,排序結(jié)束序結(jié)束32116231162311623611主元排序主元排序結(jié)束結(jié)束交換交換 ai 、aj for (i=0;in-1; i+) 排第排第i個元素個元素在在aian-1之間找最小元素之間找最小元素ajj=kj=i for(k=
24、i+1; kn;k+)akaj開始開始結(jié)束結(jié)束for (i=0;i99;i+)for(k=i+1;k 100;k+)j=i交換交換 ai 、ajakajj=kfor (i=0;i100;i+)輸入輸入aifor (i=0;i100;i+)輸出輸出ai換行換行i%10 = 0排序排序#include “stdio.h” #define M 50int i,j,k,r ,a M ; /* 數(shù)組從數(shù)組從0開始編下標開始編下標 */void main () printf(“please input achievement:n”);/ 輸入輸入 for ( i=0 ; iM ; i+ ) scanf(“
25、%d”,&(ai) ); for ( i=0 ; iM-1 ; i+ ) / 排序排序 j=i ;/ 找最小元素找最小元素aj for ( k=i+1 ; kM ; k+ ) if ( ak aj ) j=k ; r = ai ;/ 交換交換 ai = aj ; aj = r ; printf(“nanser:n”);/ 輸出輸出 for ( i=0 ; iM ; i+ )if ( i%10 = 0)printf(“n”); printf(“%6d”,ai ); printf(“n”); 741654176514657第一輪第一輪:第二輪第二輪:47165164167541657145
26、6741657第三輪第三輪:1456701234下標下標冒泡排序冒泡排序結(jié)束結(jié)束whilefor(i=0;iai+1void sortofup ( int s 50 ,int n ) / 對數(shù)組對數(shù)組s進行冒泡進行冒泡排序排序 int i,r ; bool flag ; flag = true ; while ( flag ) / 掃描一次掃描一次 flag = false ; / 先假設(shè)本次無交換,先假設(shè)本次無交換,flag為為false for ( i=0 ; i si+1 ) r = si ;/ 交換交換 si = si+1 ; si+1 = r ; flag=true;/ 有交換,則有
27、交換,則flag為為true 11231112313211131611使使 a0、. 、ai 遞增遞增開始開始for(i=1;in;i+)結(jié)束結(jié)束開始開始for(i=1;in;i+)結(jié)束結(jié)束求位置求位置 j ,使,使aj = ai aj+1把把 ai 插到插到aj 和和 aj+1 之間之間開始開始for(i=1;iai)&(j=0)j=i-1開始開始for(i=1;iai)&(j=0)j=i-1for(k=i-1;k=j+1;k-)ak+1 = akr=aiaj+1=rvoid sort ( int n, int a ) int i,j,k,r ;for ( i=1 ; iai
28、)&(j=0) ) j=j-1 ; r=ai;for ( k=i-1 ; k=j+1 ; k- ) ak+1 = ak ; aj+1=r; 順序檢索順序檢索return j結(jié)束結(jié)束for (j=n-1;j=0 & key!=aj ;j-) 注意:第三行語句。在注意:第三行語句。在for循環(huán)控制部分后邊沒有循環(huán)體,循環(huán)控制部分后邊沒有循環(huán)體,僅使用一個分號僅使用一個分號“;”。 一個孤立的分號,不綴在任何符號之后,稱為一個孤立的分號,不綴在任何符號之后,稱為“空語句空語句”。 空語句表示無任何操作,只占有一個語句位置??照Z句表示無任何操作,只占有一個語句位置。lowerupper
29、jlowerupperlowerupperjupperjlowerjlowerupperjupperjlowerjupper lowerjlowerupper對半對半檢索檢索upper-lower=0lower=0;upper=n-1; 結(jié)束結(jié)束key=ajj=(lower+upper) / 2return jlower=j+1upper=j-1keyajreturn -1編出函數(shù)如下:編出函數(shù)如下:int half_search (int n, int a , int key ) / key為檢索關(guān)為檢索關(guān)鍵字鍵字 int lower,upper,j; lower = 0 ; upper =
30、 n-1 ; while ( upper-lower=0 ) j = ( lower+upper ) / 2 ; /* 兩分兩分 */ if ( key=aj ) return j ; /* 已經(jīng)找到,位置為已經(jīng)找到,位置為*/ else if ( key aj ) lower=j+1 ; / key在在aj+1與與aupper之間之間 else upper=j-1 ; / key在在alower與與aj-1之間之間 return -1 ;開始開始結(jié)束結(jié)束while flagfor(i=0;iui+1交換交換 ui,ui+1flag=true交換交換 vi,vi+1flag=truefor (
31、 i=0;i20;i+)輸出輸出 vi、ui 按以前所學知識,v 數(shù)組中初始數(shù)據(jù) 0、1、49,可以使用一個循環(huán)寫入。 本節(jié)介紹另一種方法數(shù)組初值??梢韵窈唵巫兞砍踔狄粯?,在聲明數(shù)組時同時給數(shù)組賦以初值。 int i,r,s,u50,v50= 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50 ;bool flag ;void main() for ( i=0;i50
32、;i+ )/輸入輸入 printf(“plece input %d : “,i+1); scanf(“%d”,&ui); flag = true ;/ 冒泡排序冒泡排序 while ( flag ) flag = false ; for ( i=0 ; i ui+1 ) r = ui ;/ 原始數(shù)組操作原始數(shù)組操作 ui = ui+1 ; ui+1 = r ; flag=true;/ 標志單元標志單元 s = vi ;/ 序號數(shù)組操作序號數(shù)組操作 vi = vi+1 ; vi+1 = s ; printf(“anser:n”);/ 輸出輸出 for ( i=0;i50;i+)print
33、f(“%4d %4dn”,vi,ui); 【例【例6.13】把學號和學生成績保存在一個兩維數(shù)組中。編程】把學號和學生成績保存在一個兩維數(shù)組中。編程序,輸入一個班序,輸入一個班50名學生的程序設(shè)計課程成績,按成績由高到名學生的程序設(shè)計課程成績,按成績由高到低的順序輸出每名學生的成績。低的順序輸出每名學生的成績。 解:使用整數(shù)數(shù)組解:使用整數(shù)數(shù)組 u250,u 的第一行保存每名學生的的第一行保存每名學生的學號(用初值方式給出),學號(用初值方式給出),u 的第二行保存對應(yīng)學生的考試成的第二行保存對應(yīng)學生的考試成績(程序運行時現(xiàn)輸入)??儯ǔ绦蜻\行時現(xiàn)輸入)。 在排序時,每當對成績交換時,都相應(yīng)移動
34、在排序時,每當對成績交換時,都相應(yīng)移動 u 數(shù)組的一列。數(shù)組的一列。當排好序后,當排好序后,u 數(shù)組各列元素便記錄了所對應(yīng)的學生學號、成數(shù)組各列元素便記錄了所對應(yīng)的學生學號、成績。程序如下:績。程序如下: bool flag ; int i,r,u250= 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50 , ;/ u的第的第0行初始化為學號,第一行將來輸入成績行初
35、始化為學號,第一行將來輸入成績void main() for ( i=0;i50;i+ )/輸入輸入printf(“plece input %d : “,u0i);scanf(“%d”,&u1i); flag = true ;/ 冒泡排序冒泡排序 while ( flag ) flag = false ; for ( i=0 ; i u1i+1 ) flag=true;/ 標志單元標志單元 r = u1i ;/ 交換成績交換成績 u1i = u1i+1 ; u1i+1 = r ; r = u0i ;/ 交換學號交換學號 u0i = u0i+1 ; u0i+1 = r ; printf(
36、“anser:n”);/ 輸出輸出 for ( i=0;i50;i+)printf(“%4d %4dn”,u0i,u1i);的姓名的姓名char name 20 ;束處只起標志作用,不引起任何操作。束處只起標志作用,不引起任何操作。其中其中“0”是字符串結(jié)束符。是字符串結(jié)束符。還可以直接使用字符串為字符數(shù)組賦初值。還可以直接使用字符串為字符數(shù)組賦初值。聲明聲明 char name 20 = “zhangchanghai”;與上述聲明等價。其中字符串結(jié)束符與上述聲明等價。其中字符串結(jié)束符“0”是自動加的。是自動加的。正文未結(jié)束正文未結(jié)束開始開始結(jié)束結(jié)束輸入一個單詞輸入一個單詞打印打印是回文字是回
37、文字輸入下一個單詞輸入下一個單詞ch=getchar();st是回文字?是回文字?結(jié)束結(jié)束return truei=0; j=st尾位置尾位置i =A)&(ch=A)&(ch=Z)/順序讀入一個字符串順序讀入一個字符串stringj+=ch;ch=getchar(); stringj=0; return j-1 ;/帶著字符串結(jié)束位置返回帶著字符串結(jié)束位置返回/* 判斷是否回文字函數(shù);判斷是否回文字函數(shù);st 帶入被判斷的字符串;帶入被判斷的字符串;j 帶入末字符位置帶入末字符位置 */bool test_st( char st,int j ) int i=0;/ i指指st頭
38、頭 while(ij)/ 判斷對稱相等判斷對稱相等if ( sti!=stj )return false;i+ ; j-; return true ;【例【例6.15】編程序,輸入一個班】編程序,輸入一個班50名學生的程序設(shè)計課程成名學生的程序設(shè)計課程成績,按成績由高到低的順序輸出每名學生的學號、姓名、成績。績,按成績由高到低的順序輸出每名學生的學號、姓名、成績。 解:把學號和學生成績保存在一個兩維數(shù)組中,把姓名保解:把學號和學生成績保存在一個兩維數(shù)組中,把姓名保存在字符串數(shù)組中。對例存在字符串數(shù)組中。對例6.13稍微做修改,加入姓名數(shù)組,得稍微做修改,加入姓名數(shù)組,得到程序如下:到程序如下:
39、bool flag ;/ u的第的第0行初始化為學號,第一行將來輸入成績行初始化為學號,第一行將來輸入成績int i,r,u250= 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 ,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50 , ;/ 聲明姓名數(shù)組聲明姓名數(shù)組name,它是一個字符串數(shù)組,實際是一個兩維字符數(shù)組它是一個字符串數(shù)組,實際是一個兩維字符數(shù)組char name5020=“zhangchangh
40、ai”,”liming”,”wangli”,”liuli”,”zhaolei”,”zhanglin”,”lili”,”wanglu”,”liulei”,”zhaoliang”,”zhangming”,”liming”,”wangming”,”liuming”,”zhaoming”,”zhangyang”,”liyang”,”wangyang”,”liuyang”,”zhaoyang”,”zhanggang”,”ligang”,”wanggang”,”liugang”,”zhaogang”,”zhangbin”,”libin”,”wangbin”,”liubin”,”zhaobin”,”zhan
41、gbing”,”libing”,”wangbing”,”liubing”,”zhaobing”,”zhangguang”,”liguang”,”wangguang”,”liuguang” ,”zhaoguang”,”zhangsong”,”lisong”,”wangsong”,”liusong”,”zhaosong”,”zhangzhen”,”lizhen”,”wangzhen”,”liuzhen”,”zhaozhen” char name020;void main() for ( i=0;i50;i+ )/輸入輸入printf(“plece input %d : “,u0i);scanf(“%d”,&u1i
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年北京存量房交易合同
- 教師紀律作風講話5篇
- 2024年廣告牌制作與裝修工程合同
- 礦山變電所安全生產(chǎn)規(guī)定
- 電力公司客戶停電信息發(fā)布
- 出納員解除聘用合同申請
- 醫(yī)院安防工程安裝協(xié)議
- 財務(wù)分析與決策培訓管理辦法
- 科學課神奇的水教案7篇
- 影視制作公司停車位租賃協(xié)議
- 電力工程施工售后保障方案
- 2024年小學心理咨詢室管理制度(五篇)
- 第16講 國家出路的探索與挽救民族危亡的斗爭 課件高三統(tǒng)編版(2019)必修中外歷史綱要上一輪復習
- 機器學習 課件 第10、11章 人工神經(jīng)網(wǎng)絡(luò)、強化學習
- 北京市人民大學附屬中學2025屆高二生物第一學期期末學業(yè)水平測試試題含解析
- 書籍小兵張嘎課件
- 氫氣中鹵化物、甲酸的測定 離子色譜法-編制說明
- 2024秋期國家開放大學??啤稒C械制圖》一平臺在線形考(形成性任務(wù)四)試題及答案
- 2024年黑龍江哈爾濱市通河縣所屬事業(yè)單位招聘74人(第二批)易考易錯模擬試題(共500題)試卷后附參考答案
- 私募基金管理人-廉潔從業(yè)管理準則
- 房地產(chǎn)估價機構(gòu)內(nèi)部管理制度
評論
0/150
提交評論