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

下載本文檔

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

文檔簡介

1、C 語言程序設(shè)計語言程序設(shè)計譚小慧譚小 組2022-5-82數(shù)組的用處數(shù)組的用處 l保存大量同類型的相關(guān)數(shù)據(jù)u如矩陣運算,表格數(shù)據(jù)等 數(shù) 組2022-5-83數(shù)組(數(shù)組(Array)lint a10;u定義一個有10個元素的數(shù)組,每個元素的類型均為intu使用a0、a1、a2、a9這樣的形式訪問每個元素。它們與普通變量沒有任何區(qū)別u系統(tǒng)會在內(nèi)存分配連續(xù)的10個int空間給此數(shù)組u數(shù)組下標(biāo)可以是整型表達式u直接對a的訪問,就是訪問此數(shù)組的首地址a數(shù)組首地址數(shù)組首地址a9a8a7a1a0數(shù) 組2022-5-84int a10;int b34;char c456;13568

2、9472 10a0 1 2 3 4 5 6 7 8 9一維數(shù)組一維數(shù)組三維數(shù)組三維數(shù)組b二維數(shù)組二維數(shù)組0,0 0,1 0,2 0,31,0 1,1 1,2 1,32,0 2,1 2,2 2,3對應(yīng)的下標(biāo)對應(yīng)的下標(biāo)數(shù) 組2022-5-85數(shù)組的初始化數(shù)組的初始化數(shù) 組2022-5-86數(shù)組的初始化數(shù)組的初始化l數(shù)組定義后的初值仍然是隨機數(shù),一般需要我們來初始化lint a5 = 12, 34, 56 ,78 ,9 ;lint a5 = 0 ;lint a = 11, 22, 33, 44, 55 ;l數(shù)組大小最好用宏來定義,以適應(yīng)未來可能的變化u#define SIZE 10int aSIZE

3、;l數(shù)組大小定義好后,將永遠不變數(shù) 組2022-5-87int b34=1,2,3,4,5,6,7,8,9,10,11,12;int a6=0,11,22,33,44,55;01122334455100102104106108110值值地址地址a1231 4567891 101112200202204206208210212214216218220222b數(shù)數(shù)組組的的內(nèi)內(nèi)存存組組織織數(shù) 組2022-5-88在長度確定的情況下,最高維可以不指在長度確定的情況下,最高維可以不指定長度定長度 int c =1,2,3,4,5; int f 4=2,3,4,5,6,5;12345c2000f34565

4、00053數(shù) 組2022-5-89可以只給一部分分量賦初值可以只給一部分分量賦初值 int a10=0,1,2,3,4; int b10=0; int t34=1,5,9; int h34=1,0,6,0,0,11;1590t0000000001234a0000000000b000001000h060000110數(shù) 組2022-5-810數(shù)組的使用數(shù)組的使用l數(shù)組的下標(biāo)都是從0開始l對數(shù)組每個元素的使用與普通變量無異l可以用任意表達式作為下標(biāo),動態(tài)決定訪問哪個元素ufor (i=0; iSIZE; i+) ai = 2 * i;l下標(biāo)越界是大忌!u使用大于最大下標(biāo)的下標(biāo),將訪問數(shù)組以外的空間。

5、那里的數(shù)據(jù)是未知的,可能帶來嚴(yán)重后果lsizeof可以用來獲得數(shù)組大小數(shù) 組2022-5-811數(shù)組的特點數(shù)組的特點l快速地隨機訪問l一旦定義,不能改變大小數(shù) 組2022-5-812只能逐個對數(shù)組元素進行操作(字符數(shù)組例外)只能逐個對數(shù)組元素進行操作(字符數(shù)組例外)int a10,i;scanf( %d ,&ai);for (i=0;i10;i+) scanf( %d ,&ai);printf( %d ,ai);for (i=0;i10;i+) printf( %d ,ai);一維數(shù)組的輸入和輸出一維數(shù)組的輸入和輸出數(shù) 組2022-5-813例例1 打印出最高分及其學(xué)生序號打印

6、出最高分及其學(xué)生序號 l從鍵盤輸入學(xué)生人數(shù)從鍵盤輸入學(xué)生人數(shù)n;l從鍵盤輸入所有學(xué)生的學(xué)號和成績分別存入數(shù)組從鍵盤輸入所有學(xué)生的學(xué)號和成績分別存入數(shù)組num和和scorel假設(shè)其中的一個學(xué)生成績?yōu)樽罡撸瑫r記錄其學(xué)號,即令假設(shè)其中的一個學(xué)生成績?yōu)樽罡撸瑫r記錄其學(xué)號,即令lmaxScore = score0lmaxNum = num0;l對所有學(xué)生成績進行比較,即對所有學(xué)生成績進行比較,即l for (i=0; i maxScore,l則修改則修改maxScore值為值為scorei,l并記錄其學(xué)號并記錄其學(xué)號maxNum = numi;l l打印最高分打印最高分maxScore及其學(xué)號及其學(xué)

7、號maxNum;數(shù) 組2022-5-814#include #define ARR_SIZE 40main() float scoreARR_SIZE, maxScore;int n, i;long maxNum, numARR_SIZE;printf(Please enter total number:);scanf(%d, &n); printf(Please enter the number and score:n);for (i=0; in; i+) scanf(%ld%f, &numi, &scorei); maxScore = score0;maxNum =

8、 num0; for (i=1; i maxScore) maxScore = scorei; maxNum = numi; printf(maxScore = %.0f, maxNum = %ldn, maxScore, maxNum); 數(shù) 組2022-5-815常見錯誤常見錯誤 int n=15; int datan; 只能定義靜態(tài)數(shù)組只能定義靜態(tài)數(shù)組 int data5; data5=10; /C/C語言對數(shù)組不作越界檢查,使用時要注意語言對數(shù)組不作越界檢查,使用時要注意 int a10,i; for(i=1; i=10; i+) scanf(“%d”,&ai); int a1

9、0; float i;ai=10;數(shù) 組2022-5-816例例2:按相反的順序存儲數(shù)組元素按相反的順序存儲數(shù)組元素0123456789 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 數(shù)值數(shù)值下標(biāo)下標(biāo)a0a9a1a8a2a7a3a6a4a59=10 -0 -18=10 -1 -17=10 -2 -16=10 -3 -15=10 -4 -1aia10-i-1數(shù) 組2022-5-817void main( )int i , t , a10; for(i=0; i10; i+) scanf(“%d”,&ai); for (i=0; i10/2; i+) t=

10、ai; ai=a10i1; a101i=t ; for(i=0; i10;i+) printf(“%d”,ai); putchar(n);數(shù) 組2022-5-818冒泡排序冒泡排序冒泡排序的思想是:冒泡排序的思想是: 每次比較每次比較相鄰的兩個數(shù)相鄰的兩個數(shù),如果前面的,如果前面的數(shù)大就相互交換,這樣小的數(shù)就會向數(shù)大就相互交換,這樣小的數(shù)就會向氣泡一樣往前冒。一趟排序完成后最氣泡一樣往前冒。一趟排序完成后最后一個數(shù)最大。共進行后一個數(shù)最大。共進行n-1n-1趟排序。趟排序。 數(shù) 組2022-5-8190 1 2 3 4 50 1 2 3 4 50 1 2 3 4 5數(shù) 組2022-5-8200

11、 1 2 3 4 50 1 2 3 4 50 1 2 3 4 5一一趟趟排排序序結(jié)結(jié)果果數(shù) 組2022-5-821 0 1 2 3 4 5 6 72149 252016081427 0 1 2 3 4 5 6 1 2 3 4 5 6 7 0 1 2 3 4 5 1 2 3 4 5 6第 1趟 第 2趟 0 1 2 3 4 5 6 72125 201608142749for(j=0; j7; j+) aj aj+1for(j=0; j6; j+) aj aj+1數(shù) 組2022-5-822 0 1 2 3 4 1 2 3 4 5 第 3趟 0 1 2 3 4 5 6 72120 160814252

12、749for(j=0; j5; j+) aj aj+1 0 1 2 3 4 5 1 2 3 4 5 6第 2趟 0 1 2 3 4 5 6 72125 201608142749for(j=0; j6; j+) aj aj+1數(shù) 組2022-5-823 0 1 2 3 1 2 3 4 第 4趟 0 1 2 3 4 5 6 72016 081421252749 0 1 2 3 4 1 2 3 4 5 第 3趟 0 1 2 3 4 5 6 72120 160814252749for(j=0; j4; j+) aj aj+1for(j=0; j5; j+) aj aj+1數(shù) 組2022-5-824 0

13、 1 2 1 2 3 第 5趟 0 1 2 3 4 5 6 7168142021252749for(j=0; j3; j+) aj aj+1 0 1 2 3 1 2 3 4 第 4趟 0 1 2 3 4 5 6 7201681421252749for(j=0; j4; j+) aj aj+1數(shù) 組2022-5-825 0 1 1 2 第 6趟 0 1 2 3 4 5 6 7814 162021252749for(j=0; j2; j+) aj aj+1 0 1 2 1 2 3 第 5趟 0 1 2 3 4 5 6 7168142021252749for(j=0; j3; j+) aj aj+1

14、數(shù) 組2022-5-826 0 1 第 7趟 0 1 2 3 4 5 6 7814 162021252749for(j=0; j1; j+) aj aj+1 0 1 1 2 第 6趟 0 1 2 3 4 5 6 7814 162021252749for(j=0; j2; j+) aj aj+1數(shù) 組2022-5-827#define N 10void main( )int i, j, t, aN; printf(“input 10 number:”); for(i=0; iN; i+) scanf(“%d”,&ai); for(i=1; iN; i+) for(j=0; jaj+1)

15、t=aj; aj=aj+1; aj+1=t; printf(“the sorted number:n”); for(i=0 iN; i+) printf(“%3d”,ai); printf(“n”);數(shù) 組2022-5-828選擇排序選擇排序選擇排序的思想選擇排序的思想: :每次從剩下的數(shù)中每次從剩下的數(shù)中選擇選擇最小的數(shù)最小的數(shù)( (記住它的下標(biāo)記住它的下標(biāo)) )與這組數(shù)中最與這組數(shù)中最前面的數(shù)交換,數(shù)的個數(shù)依次減少。一前面的數(shù)交換,數(shù)的個數(shù)依次減少。一趟排序完成后最前面的數(shù)最小。共進行趟排序完成后最前面的數(shù)最小。共進行n-1n-1趟排序。趟排序。 數(shù) 組2022-5-829k=0;/假設(shè)從

16、假設(shè)從a0-a5a0-a5的數(shù)中的數(shù)中a0a0最小最小for(j=1; j6; j+) if(ajak) k=j;a0 ak第第0 0趟趟數(shù) 組2022-5-830第第1 1趟趟k=1 ;/;/假設(shè)從假設(shè)從a1-a5a1-a5的數(shù)中的數(shù)中a1a1最小最小for(j=2; j6; j+) if(ajak) k=j;a1 ak數(shù) 組2022-5-8310 1 2 3 4 5第第2 2趟趟k=2; /假設(shè)從假設(shè)從a2-a5a2-a5的數(shù)中的數(shù)中a2a2最小最小for(j=3; j6; j+) if(ajak) k=j;a2 ak數(shù) 組2022-5-8320 1 2 3 4 5第第3 3趟趟k=3;

17、/假設(shè)從假設(shè)從a2-a5a2-a5的數(shù)中的數(shù)中a2a2最小最小for(j=4; j6; j+) if(ajak) k=j;a3 ak數(shù) 組2022-5-833第第4 4趟趟k=4;for(j=5; j6; j+) if(ajak) k=j;a4 ak數(shù) 組2022-5-834#define N 10void main( ) int i, j, t, k, aN; printf(“input 10 number:”); for(i=0; iN; i+) scanf(“%d”,&ai); for(i=0; iN-1; i+) k= i; /假設(shè)從假設(shè)從ai-aN-1ai-aN-1的數(shù)中的數(shù)

18、中aiai最小最小 for(j=i+1; jN; j+) if(ajak) k = j; if(k!=i) t=ak; ak=ai; ai= t; printf(“the sorted number:n”); for(i=0 iN; i+) printf(“%3d”,ai); printf(“n”);數(shù) 組2022-5-835有一個有一個3*4的矩陣,求的矩陣,求值最大的元素及其所值最大的元素及其所在的行號、列號在的行號、列號#define M 3#define N 4void main( )int max, i , j , row=0, col=0; int aMN; for(i=0; iM

19、; i+) for(j=0; jN; j+) scanf(“%d”,&aij); max=a00; for(i=0; iM; i+) for(j=0; jmax) max=aij; row=i; col=j;printf(“max=%d,row=%d,col=%dn”,max,row,col);數(shù) 組2022-5-836字符串(String)與字符數(shù)組l字符串u一串以0結(jié)尾的字符在C語言中被看作字符串u用雙引號括起的一串字符是字符串常量,C語言自動為其添加0終結(jié)符uC語言并沒有為字符串提供任何專門的表示法,完全使用字符數(shù)組和字符指針來處理l字符數(shù)組u每個元素都是字符類型的數(shù)組nchar

20、 string80;數(shù) 組2022-5-837字符數(shù)組的初始化l用字符型數(shù)據(jù)對數(shù)組進行初始化 uchar str6 = C,h,i,n,a,0; l用字符串常量直接對數(shù)組初始化 uchar str6 = China; uchar str6 = China;數(shù) 組2022-5-838逐個輸入輸出lfor (i=0; si!=0; i+)ll putchar(si);llputchar(n);一次性輸入輸出scanf(%s,s); printf(%s,s);char s10;字符數(shù)組的輸入輸出 gets(%s,s); puts(%s,s);數(shù) 組2022-5-839scanf()lint i;sc

21、anf(%d, &i); lchar str10;scanf(%s, str);u不能讀入帶空格的字符串,gets()可以u這種用法很不安全。當(dāng)用戶的輸入多于10個(含10個),str數(shù)組將越界數(shù) 組2022-5-840必須使用必須使用#include 1puts(字符串字符串)作用:將一個字符串輸出到屏幕作用:將一個字符串輸出到屏幕 char str = “This is a book!”; puts(str); puts(“Press a key!”);字符串處理函數(shù)數(shù) 組2022-5-8412gets(字符數(shù)組字符數(shù)組)作用:從鍵盤輸入一個字符串到字符數(shù)組作用:從鍵盤輸入一個字符

22、串到字符數(shù)組 char str20; gets(str);數(shù) 組2022-5-842Youare0 str1:astudent0str2:Y o ua r eas t u d e n t 0 .str1:注意注意: :字符數(shù)組字符數(shù)組1 1要足夠大要足夠大數(shù) 組2022-5-843注意注意:這是給字符數(shù)組一次性賦值的這是給字符數(shù)組一次性賦值的唯一唯一方法方法 字符數(shù)組字符數(shù)組1要足夠大要足夠大 不能使用以下賦值運算不能使用以下賦值運算: str1= “China”;只能用只能用: str10= C; str11= h; China0數(shù) 組2022-5-844China0Cgina0Ciina0

23、數(shù) 組2022-5-845數(shù) 組2022-5-846輸入一行字符輸入一行字符, ,統(tǒng)計其中有多少個單詞統(tǒng)計其中有多少個單詞. .單詞之間用空格隔開單詞之間用空格隔開char string81;int num=0,i=0,len;gets(string);len=strlen(string);ilen while(stringi= = & ilen) i+; num+; while(stringi!= & ilen) i+;數(shù) 組2022-5-847輸入一行字符輸入一行字符, ,統(tǒng)計其中有多少個單詞統(tǒng)計其中有多少個單詞. .單詞之間用空格隔開單詞之間用空格隔開輸入一行字符輸入一行

24、字符從第一個字符到最后一個字符從第一個字符到最后一個字符這個字符是空格這個字符是空格? ?本字符是空格本字符是空格前一個字符是否是空格前一個字符是否是空格? ?本字符是非空格本字符是非空格單詞個單詞個數(shù)加數(shù)加1 1單詞個數(shù)初始化為單詞個數(shù)初始化為0 0是是是是輸出單詞個數(shù)輸出單詞個數(shù)否否否否數(shù) 組2022-5-848#include void main( ) int i, num=0, word=0; char string81; gets(string); for(i=0; stringi!=0; i+) if (stringi= = ) word=0; else word=1; if(word= =0) word=1; num+; printf(There are %d word in the linen”,num);數(shù) 組2022-5-849對一個字符串進行操作對一個字符串進行操作 char one80; gets(one); for(i=0; onei!=0; i+) 或:或:while(getchar()!=n) 對對多個字符串多個字符串進行操作進

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論