《C語言程序設計(第三版)》課件第6章 數(shù)組_第1頁
《C語言程序設計(第三版)》課件第6章 數(shù)組_第2頁
《C語言程序設計(第三版)》課件第6章 數(shù)組_第3頁
《C語言程序設計(第三版)》課件第6章 數(shù)組_第4頁
《C語言程序設計(第三版)》課件第6章 數(shù)組_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

掌握一維數(shù)組、二維數(shù)組的定義、初始化和數(shù)組元素的引用掌握字符數(shù)組的定義、初始化和數(shù)組元素的引用掌握字符串的存儲方法和應用掌握有關處理字符串的系統(tǒng)函數(shù)的使用方法【問題】從鍵盤接收10個數(shù),求平均數(shù)并輸出所有小于平均數(shù)的數(shù)。【分析】從鍵盤接收10個數(shù),求平均數(shù)很簡單,可以采用邊接收邊求和的方法,最后根據(jù)總和求平均數(shù)。下面的程序可以做到:inta,i;floats;for(i=0,s=0;i<10;i++){scanf("%d",&a);s=s+a;} 6.1數(shù)組的基本概念所謂數(shù)組,就是一組類型相同的變量。它用一個數(shù)組名標識,每個數(shù)組元素都是通過數(shù)組名和元素的相對位置——下標來引用的。數(shù)組可以是一維的,也可以是多維的。inta1,a2,a3,…,a10inta[10];===(a[0],a[1],a[3],…,a[9])

其中下標從0開始,和前面不同的是,這些變量統(tǒng)一共享一個數(shù)組名a。6.2一維數(shù)組一維數(shù)組用于存儲一行或一列的數(shù)據(jù)。定義方式如下:<類型><數(shù)組名>[<常量表達式>];<類型>:簡單類型或結構體、共用體等復雜類型。<數(shù)組名>:數(shù)組的標識、命名規(guī)則同變量名。<常量表達式>:用來定義數(shù)組的長度,因為數(shù)組也必須先定義再使用。例如:inta[10];chars[100];注意:C語言不允許對數(shù)組的大小作動態(tài)定義,即定義行中的數(shù)組長度可以包括常量和符號常量,但不能包括變量。例如,下面的定義是錯誤的。intn=10;inta[n];/*因為n為變量*/而下面的定義是正確的:#defineN10main(){inta[N];/*N為符號常量*/…}定義數(shù)組的同時可以對數(shù)組初始化。以下初始化的方法都是允許的:inta[10]={1,2,3,4,5,6,7,8,9,10};//完全初始化inta[]={1,2,3,4,5,6,7,8,9,10};//完全初始化,可省略長度inta[10]={1,2,,4,5};//部分元素a[0]、a[1]、a[3]、a[4]初始化注意:數(shù)組元素的下標從0開始。數(shù)組名不能像變量一樣進行賦值操作。以下用法是錯誤的:inta[10],b[10];a=b;/*錯誤*/正確的定義:inta[10]; /*定義整型數(shù)組a,它有10個元素*/chars[20]; /*定義字符型數(shù)組s,它有20個元素*/floatf[5],g[10];/*定義實型數(shù)組f和g,f數(shù)組有5個元素,g數(shù)組有10個元素*/【例6-1】編程求10個數(shù)中的最大值、最小值、平均值。輸出所有小于平均值的數(shù)。

voidmain(){ inta[10],i; intmax,min; floats=0,aver; printf("Input10numbers:"); for(i=0;i<10;i++) scanf("%d",&a[i]); s=max=min=a[0]; for(i=1;i<10;i++) { if(a[i]>max) max=a[i]; else if(a[i]<min) min=a[i]; s=s+a[i]; }aver=s/10;printf("maxis%d\n",max);printf("minis%d\n",min);printf("averageis%.2f\n",aver);for(i=0;i<10;i++)if(a[i]<aver)printf("%4d",a[i]);printf("\n");}6.3二維數(shù)組和多維數(shù)組二維數(shù)組用于存放矩陣形式的數(shù)據(jù),如二維表格等數(shù)據(jù)。定義二維數(shù)組的格式如下:<類型><數(shù)組名>[<常量表達式1>][<常量表達式2>];例如:inta[3][4];/*3×4的矩陣,共12個元素*/floatf[5][10];6.3二維數(shù)組和多維數(shù)組inta[3][4]

a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]二維數(shù)組的初始化完全初始化inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

省略行的完全初始化inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

分行完全初始化,可讀性較好inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 部分初始化inta[3][4]={1,2,3,4};【例6-2】演示二維數(shù)組的定義及元素引用#include<stdio.h>main(){ inti,j,k=0; inta[3][4]; for(i=0;i<3;i++) /*變量i控制數(shù)組a的行下標*/ { for(j=0;j<4;j++) /*變量j控制數(shù)組a列下標*/ { a[i][j]=k; printf("a[%d][%d]=%d\t",i,j,a[i][j]); k++; } printf("\n"); }}【例6-3】輸入3位學生的計算機、數(shù)學成績,計算每門課程的平均分。#include<stdio.h>main(){ floatscore[3][2],average[3],temp; charinfo[2][10]={"Computer","English"}; inti,j; for(i=0;i<3;i++) { printf("No:%d\n",i+1); for(j=0;j<2;j++) {printf("%s:",info[j]); scanf("%f",&score[i][j]);} }for(i=0;i<2;i++){ temp=0; for(j=0;j<3;j++) temp=temp+score[j][i];average[i]=temp/3;printf("%s:%.2f\n", info[i],average[i]); }}6.4字符數(shù)組與字符串6.4.1字符數(shù)組的定義、初始化和引用字符數(shù)組的定義和一般的數(shù)組一樣,例如:chars[10];charstring[3][10];初始化的方法如下:chars[10]={'H','e','l','l','o','','C','+','+','!'};chars[]={'H','e','l','l','o','','C','+','+','!'};chars[10]={'H','e','l','l','o','!'}; chars[11]={"HelloC!"};chars[11]="HelloC!";【例6-4】輸入一串字符,將其按逆序輸出。#include<stdio.h>#include<string.h>main(){chars[100];inti=0;printf("Inputastring:");gets(s);while(s[i]!='\0')i++;while(--i>=0)putchar(s[i]);putchar('\n');}6.4.2字符串函數(shù)strlen(字符串)字符串長度函數(shù)求字符串s中第一個結束符'\0'前的字符個數(shù)。例如:chars[100]="HelloWorld!"; /*長度是12*/chart[100]="12345\06789\0"; /*長度是5*/實際上字符數(shù)組s和t實際存儲長度都是100。strcpy(字符串1,字符串2)字符串復制函數(shù)函數(shù)將字符串s2復制到字符串s1。例如:chars1[20]; chars2[]="Goodluck";strcpy(s1,s2); puts(s1);/*輸出Goodluck*/strcpy函數(shù)可以將結束符一起復制過去,以上復制操作也可以直接寫成:strcpy(s1,"Goodluck");6.4.2字符串函數(shù)strcat(字符串1,字符串2)字符串連接函數(shù)函數(shù)將字符串s2連接到字符串s1后面。很顯然,s1也必須有足夠的空間來存儲由原來的s1和s2構成的新s1字符串。例如:chars1[20]="Goodluck";chars2[]="toyou!";strcpy(s1,s2);puts(s1);/*輸出Goodlucktoyou!*連接后的s1的有效字符長度為17,包括結束符在內,s1至少需要18個字符長度,否則連接是錯誤的。6.4.2字符串函數(shù)strcmp(字符串1,字符串2)字符串比較函數(shù)函數(shù)比較s1和s2字符串的大小,并返回比較的結果。若s1大于s2,則返回一個正整數(shù)。若s1等于s2,則返回0。若s1小于s2,則返回一個負整數(shù)。字符串比較規(guī)則:自左向右按ASCII碼值大小進行比較,直至出現(xiàn)一對不同字符或者遇到結束符為止。例如:strcmp("ABC","abc")/*返回負整數(shù),前面字符串小*/strcmp("ABC","ABC\0abc")/*返回0,二者相等*/strcmp("ABC","AB")/*返回正整數(shù),前面的大*/strcmp("AB","ABC")/*返回負整數(shù),前面的小*/6.4.2字符串函數(shù)strlwr(字符串)字符串大寫變小寫將字符串s的所有大寫字母轉換成小寫字母。strupr(字符串)字符串小寫變大寫將字符串s的所有小寫字母轉換成大寫字母。除了上面的幾個函數(shù)以外,經常使用的還有:strncpy(字符串1,字符串2,字符個數(shù))strncmp(字符串1,字符串2,字符個數(shù))strstr(字符串1,字符串2)strncat(字符串1,字符串2,字符個數(shù))【例6-5】輸出幾個字符串中的最大串#include<stdio.h>#include<string.h>voidmain(){ chars[5][50]={"HelloWorld!", "Goodlucktoyou!", "Howareyou?", "MoonRiver", "Ilovethisbook."}; inti,max=0; for(i=1;i<5;i++) if(strcmp(s[i],s[max])>0) max=i; printf("maxstringis:%s\n",s[max]);}6.5程序舉例【例6-6】將10個數(shù)排序輸出(冒泡法排序)【分析】對一系列數(shù)進行排序有很多種方法,冒泡法是其中比較容易理解的一種算法。所謂冒泡法,就是指找到的大數(shù)或者小數(shù)像氣泡一樣浮出水面被發(fā)現(xiàn)。為了理解算法,來看下面的例子?!纠?-6】將10個數(shù)排序輸出第1次查找,范圍:72918第1步:7>2,將7和2交換位置,得到27918第2步:7<9,不交換。第3步:9>1,將9和1交換位置,得到27198第4步:9>8,將9和8交換位置,得到27189第1次查找,將9作為最大數(shù)放在最后,結果為27189【例6-6】將10個數(shù)排序輸出第2次查找,范圍:2718第1步:2<7,不交換。第2步:7>1,將7和1交換位置,得到:2178

9。第3步:7<8,不交換。第2次查找結果為:217

8

9。【例6-6】將10個數(shù)排序輸出第3次查找,范圍:217第1步:2>1,將2和1交換位置,得到:127

89第2步:2<7,不交換。第3次查找結果為:12

789

【例6-6】將10個數(shù)排序輸出第4次查找,范圍:12第1步:1<2,不交換。第4次查找結果為:12789

【例6-6】將10個數(shù)排序輸出#include<stdio.h>main(){#defineN10inta[N]={7,2,8,9,1,6,0,4,5,3};inti,j,t;for(i=0;i<N-1;i++){for(j=0;j<N-i-1;j++) if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;} } for(i=0;i<N;i++)printf("%5d",a[i]);}【例6-7】編寫程序將兩個字符串連接成一個新的字符串

#include<stdio.h>voidmain(){ chars1[100]="12345"; chars2[50]="6789"; inti,j; i=j=0; while(s1[i]!='\0')i++; while(s2[j]!='\0') { s1[i]=s2[j]; i++; j++; } s1[i]='\0'; printf("%s\n",s1);}【例6-8】編寫程序刪除字符串中的指定字符#include<stdio.h>main(){ chars[100]="Ilovethisprogram."; charc; inti,j; printf("Inputc:"); c=getchar(); for(i=j=0;s[i]!='\0';i++){ if(s[i]!=c) {s[j]=s[i];j++;} } s[j]='\0'; printf("%s\n",s);}【例6-8】編寫程序刪除字符串中的指定字符變量跟蹤【例6-9】已知一個3*3的二維數(shù)組,編程將行列元素互換,生成它的轉置矩陣

#include<stdio.h>main(){ intt,a[3][3]={{9,8,7},{6,5,4},{3,2,1}}; inti,j; for(i=0;i<3;i++) for(j=0;j<i;j++) {t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;} for(i=0;i<3;i++){ for(j=0;j<3;j++) printf("%5d\t",a[i][j]); printf("\n"); } }【例6-10】編程輸出以下的楊輝三角形(輸出前10行)【分析】楊輝三角形是由(x+y)n展開后的多項式系數(shù)排列而成,例如:(x+y)1展開后:x+y(x+y)2展開后:x2+2xy+y2(x+y)3展開后:x3+3x2y+3xy2+y3(x+y)4展開后:x4+4x3y+6x2y2+4xy3+y4……【例6-10】編程輸出以下的楊輝

溫馨提示

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

評論

0/150

提交評論