版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、項目四,項目要點:數(shù)組的定義和使用 數(shù)組的存儲結(jié)構(gòu) 數(shù)組的輸入輸出 字符串處理函數(shù)學(xué)習(xí)目標(biāo):使用數(shù)組處理同一類型的大批數(shù)據(jù)使用字符數(shù)組處理字符串 使用二維數(shù)組處理字符串,C語言程序設(shè)計,工作任務(wù)導(dǎo)入,工作任務(wù) 一個班上50位學(xué)生參與考試,考了3門課程,現(xiàn)要求按總成績的高低輸出成績單引導(dǎo)問題1、課程的成績?nèi)绾未鎯?、學(xué)生信息如何存儲3、如何對成績進(jìn)行排序?,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績
2、,main(){ int i, x, s=0; for( i=0; i<50; i++) {scanf(“%d”,&x);s+=x; } printf(“%f\n”, s/50.0);},只用了三個變量就解決了問題,但數(shù)據(jù)沒有保存。,如果需要把成績按從高到低的順序全部打印出來,怎么辦?,計算50個學(xué)生成績的平均分,,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,一維數(shù)組的定義,
3、數(shù)據(jù)類型 數(shù)組名[常量表達(dá)式];,數(shù)組元素的數(shù)據(jù)類型,遵循C語言標(biāo)識符規(guī)則,數(shù)組長度幾個數(shù)組元素,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,4.1.1 一維數(shù)組,例如:int a[5];,說明:常量表達(dá)式表示元素的個數(shù),即數(shù)組長度。 常量表達(dá)式中可以包括常量和符合常量,不能包含變量。,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,4.1.1 一維數(shù)組,int i=5;int a[i];/*數(shù)組長度為變量*/,任務(wù)1
4、 輸入/輸出多個學(xué)生一門課程的成績,4.1.1 一維數(shù)組,以下對一維整型數(shù)組a的正確定義的是:A、int a(10)B、int n=10, a[n]C、int n;int a[n];D、#define SIZE 10 scanf(“%d”,%n); int a[SIZE];,任務(wù)1 輸入/輸出多個
5、學(xué)生一門課程的成績,4.1.2 一維數(shù)組的引用,表示引用數(shù)組a中的第2個元素,數(shù)組名[下標(biāo)表達(dá)式];,表示引用數(shù)組a中的第6個元素,表示引用數(shù)組a中的第16個元素,,,,若一個數(shù)組長度為n,其下標(biāo)值范圍是0~(n-1),C語言規(guī)定只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組。,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,4.1.2 一維數(shù)組的引用,輸入5個學(xué)生的數(shù)學(xué)成績,計算平均分,將平均分輸出到屏幕上。void main(){
6、int i,mathScore[5],sum=0;float average;for(i=0;i<5;i++){scanf("%d",&mathScore[i]);}for(i=0;i<5;i++){sum=sum+mathScore[i];}average=sum/5.0;printf("%f ",average);},數(shù)組元素的地址也是通過
7、“&”運算符得到的。,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,4.1.2 一維數(shù)組,1、上例中,語句average=sum/5.0;修改為average=sum/5;結(jié)果如何?2、練習(xí):從鍵盤輸入5個學(xué)生的成績,求出并輸出分?jǐn)?shù)最高的學(xué)生序號及最高成績。 。,數(shù)組的賦值只能逐個對數(shù)組元素賦值,不能直接對數(shù)組名賦值。因數(shù)組在內(nèi)存占一片連續(xù)的存儲空間,可用循環(huán)語句處理數(shù)組。,任務(wù)1 輸入/輸出多個學(xué)生一門
8、課程的成績,4.1.2 一維數(shù)組的引用,(1)在定義數(shù)組時,對全部數(shù)組元素賦初值此時可以省略數(shù)組的長度,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,4.1.3 一維數(shù)組的初始化,C語言程序設(shè)計,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,4.1.3 一維數(shù)組的初始化,(2)在定義數(shù)組時,對部分?jǐn)?shù)組元素賦初值,C語言程序設(shè)計,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,4.1.3 一維數(shù)組的初始化,(3)當(dāng)初值的個數(shù)多于數(shù)組元素的
9、個數(shù)時,編譯出錯,任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,4.1.2 一維數(shù)組的引用,例:用初始化方法,把10個學(xué)生的數(shù)學(xué)成績存儲在數(shù)組中,再從鍵盤輸入一個考分,查找該分?jǐn)?shù)是否在數(shù)組中,如果是,則輸出它是第幾名學(xué)生的成績。 。void main(){int i,a[10]={56,65,76,68,92,37,87,51,73,48};int find;printf("請輸入要查找的分?jǐn)?shù):\n")
10、;scanf("%d",&find);for(i=0;i<10;i++){if(a[i]==find)/*查找到了*/{ printf("%d ",i+1);break;}}},任務(wù)1 輸入/輸出多個學(xué)生一門課程的成績,4.1.3 一維數(shù)組,練習(xí):一個班50位同學(xué)參加了一次C語言程序設(shè)計考試,現(xiàn)要輸入全班同學(xué)的成績,并按逆序輸出。,任務(wù)2 排序
11、學(xué)生成績,任務(wù)1中已經(jīng)輸入了50個同學(xué)的成績到數(shù)組中,現(xiàn)在需要確定如何對學(xué)生成績從低到高進(jìn)行排序。,,兩層循環(huán)結(jié)構(gòu)外層循環(huán)每次把操作范圍內(nèi)最大的數(shù)放到最后位置內(nèi)層循環(huán)每次把較大的數(shù)放到靠后的位置,任務(wù)2 排序?qū)W生成績,有數(shù)組a,其元素值為7、1、5、6、9、3,現(xiàn)要把該數(shù)組按從小到大的順序排列并輸出。,main(){int a[]={7,1,5,6,9,3}; int i,j,t; printf(“the sorted
12、 nembers:\n”); for( i=0; i<6; i++) printf(“%5d\n”, x[i]);},for( i=0; ix[j+1]) { t=x[j]; x[j]=x[j+1]; x[j+1]=t; },任務(wù)2 排序?qū)W生成績,任務(wù)2 排序?qū)W生成績,4.2.1 冒泡法排序,1、上例中,如果要按從大到小的順序排序,該如何修改程序呢? 2、練習(xí):一個班50位同學(xué)參
13、加了一次C語言程序設(shè)計考試,現(xiàn)要輸入全班同學(xué)的成績,并按從低到高排序并輸出。,任務(wù)3 處理多位學(xué)生多門課程的成績,一個班上50位學(xué)生參與考試,考了3門課程,現(xiàn)要求按總成績的高低輸出成績單。 如果僅僅使用一維數(shù)組進(jìn)行上述處理,是很困難的,此時需要使用二維數(shù)組。,x[0][0] x[0][1] x[0][2]x[1][0] x[1][1] x[1][2],數(shù)據(jù)類型 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];,,行,列,,int
14、a[3,4], b(3,4);int c[ ][ ], d(3)(4);,任務(wù)3 處理多位學(xué)生多門課程的成績,4.3.1 二維數(shù)組,二維數(shù)組的定義,數(shù)組名[行下標(biāo)][列下標(biāo)],a[3][4]=3;a[1,2]=1;,引用:,/* 下標(biāo)越界 */,/* a[1][2]=1; */,任務(wù)3 處理多位學(xué)生多門課程的成績,4.3.2 二維數(shù)組的引用,任務(wù)3 處理多位學(xué)生多門課程的成績,練習(xí):輸入5個同學(xué)三門課程的成績并輸出,計算各
15、門課的總分及平均分,并輸出 。,4.3.2 二維數(shù)組的引用,(1)分行對二維數(shù)組初始化,int a[2][3]={{1,2,3},{4,5,6}};初始化后: 1 2 3 4 5 6,任務(wù)3 處理多位學(xué)生多門課程的成績,4.3.3 二維數(shù)組的初始化,int a[2][3]={1,2,3,4,5,6};初始化后: 1 2 3
16、 4 5 6,(2)按數(shù)組排列的順序初始化,任務(wù)3 處理多位學(xué)生多門課程的成績,4.3.3 二維數(shù)組的初始化,任務(wù)3 處理多位學(xué)生多門課程的成績,4.3.3 二維數(shù)組的初始化,(3)對全部數(shù)組元素初始化,int a[ ][3]={1,2,3,4,5,6};初始化后: 1 2 3 4 5 6,省略行號,用二層循環(huán)語句處理數(shù)組,通常外
17、循環(huán)控制行,內(nèi)循環(huán)控制列。,for(i=0;i<3;i++) for(j=0;j<4;j++) a[i][j]=i+j;,二維數(shù)組的賦值,0 1 2 3 2 3 4 3 4 5,任務(wù)3 處理多位學(xué)生多門課程的成績,4.3.3 二維數(shù)組的初始化,二維數(shù)組的輸入輸出,int b[3][4], i, j ; for ( i =0 ; i<3 ; i++) f
18、or ( j =0 ; j<4 ; j++) scanf(“%d”, &b[i][j]) ; for ( i =0 ; i<3 ; i++) for ( j =0 ; j<4 ; j++) printf(“%5d”, b[i][j] ) ;,任務(wù)3 處理多位學(xué)生多門課程的成績,4.3.3 二維數(shù)組的初始化,任務(wù)3 處理多位學(xué)生多門課程的成績,練習(xí):用初始化方法,把5個同學(xué)三門
19、課程成績存儲在二維數(shù)組中,計算每位同學(xué)的總成績和平均分,輸出總分最高的同學(xué)的總成績。,4.3.3 二維數(shù)組初始化,練習(xí),下列程序有哪些錯誤?請解釋錯誤原因。(1) main( ) { int x, a[10]; for( x=0;x<=10;x++ ) scanf(“%d”,&a[x]); },,x
20、<10,練習(xí),下列程序有哪些錯誤?請解釋錯誤原因。(2) main( ) { int i, j, a[4][ ]=1,2,3,4,5,6,7,8; for( i=0;i<4;i++ ) for( j=0;j<2;j++ ) printf(“%d”,a[i][j]);
21、 },,int a[ ][2]={1,2,3,4,5,6,7,8};,任務(wù)4 輸入/輸出學(xué)生,一個班上50位學(xué)生參與考試,需要輸入/輸出學(xué)生的姓名信息。這個任務(wù)需要解決多個字符的存放問題。,任務(wù)4 輸入/輸出學(xué)生,4.4.1 字符數(shù)組,char 數(shù)組名[常量表達(dá)式];,二維字符數(shù)組,char 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];,一維字符數(shù)組str,,,二維字符數(shù)組s1,(1)用字符常數(shù)初始化,cha
22、r c[ ]={‘C’,’h’,’i’,’n’,’a’,’\0’};初始化后:,任務(wù)4 輸入/輸出學(xué)生,4.4.1 字符數(shù)組,任務(wù)4 輸入/輸出學(xué)生,4.4.1 字符數(shù)組,char c[ ]={“China”};char c[ ]=“China”;初始化后:,(2)直接用字符串常量初始化,任務(wù)4 輸入/輸出學(xué)生,4.4.1 字符數(shù)組,(1)用字符常數(shù)初始化,char Lan[5][8]= {{
23、‘B’,‘A’,‘S’,‘I’,‘C’,‘\0’}, {‘F’,‘O’,‘R’,‘T’,‘R’,‘A’,‘N’,‘\0’}, {‘P’,‘A’,‘S’,‘C’,‘A’,‘L’,‘\0’}, {‘C’,‘\0’}, {‘J’,‘A’,‘V’,‘A’,‘\0’} };,二維字符數(shù)組
24、的初始化,每行存放一個字符串,任務(wù)4 輸入/輸出學(xué)生,4.4.1 字符數(shù)組,二維字符數(shù)組的初始化,char a[3][10]={"basic","pascal","c"};,(2)直接用字符串常量初始化,練習(xí):1、給字符數(shù)組初始化為“Happy!”,并輸出各個數(shù)組元素。 2、輸出一個鉆石圖形。如圖所示。** ** ** **,任務(wù)4 輸入/輸出學(xué)生,4.
25、4.1 字符數(shù)組,任務(wù)4 輸入/輸出學(xué)生,4.4.2 字符串,字符串是用雙引號括起來的若干有效字符序列,字符串可以包括字母、數(shù)字、轉(zhuǎn)義字符等,C語言中,將字符串作為字符數(shù)組來處理。,任務(wù)4 輸入/輸出學(xué)生,4.4.2 字符串,C語言規(guī)定了一個“字符串結(jié)束標(biāo)志”,以字符‘\0’代表。在處理字符數(shù)組的過程中,一旦遇到結(jié)束符‘\0’,就表示已達(dá)到字符串末尾。,數(shù)組的長度是6,而不是5。,練習(xí):1、分析以下程序,其運行結(jié)果是什么? v
26、oid main(){char c[5]= {’a’, ’b’, ’\0’, ’c’, ’\0’};printf("%s\n",c);} 2、有字符串“abcAbcDEFDef”,把該字符串中的小寫字母轉(zhuǎn)換為大寫字母后輸出。,任務(wù)4 輸入/輸出學(xué)生,4.4.2 字符串,任務(wù)4 輸入/輸出學(xué)生,4.4.3 字符串輸入/輸出,1.字符數(shù)組的元素逐個輸入和輸出,用格式輸入輸出函數(shù)scanf()和print
27、f(),使用“%c”格式符,或用字符輸入輸出函數(shù)getchar()和putchar()。每次輸入或輸出一個字符。,for(i=0;i<10;i++)scanf(“%c”,&c[i]);,for(i=0;i<10;i++)c[i]=getchar();,注:getchar()和putchar()定義在標(biāo)題文件“stdio.h”中,使用前要用#include 把它們包含進(jìn)來,任務(wù)4 輸入/輸出學(xué)生,4.4.3 字符
28、串輸入/輸出,2.字符數(shù)組整體輸入和輸出,用格式輸入輸出函數(shù) scanf()和 printf(),使用“%s”格式符,輸入和輸出字符串。,(1)一維字符數(shù)組,scanf(“%s”, 字符數(shù)組名);printf (“%s”, 字符數(shù)組名);,char s1[10] ;scanf (“%s”, s1 );printf (“%s”, s1 );,不用加&,任務(wù)4 輸入/輸出學(xué)生,4.4.3 字符串輸入/輸出,2.字符數(shù)組整
29、體輸入和輸出,(2)二維字符數(shù)組,在二維數(shù)組中每行存放一個字符串,輸入輸出時要用行的首地址。,scanf(“%s”,字符數(shù)組名[行下標(biāo)]);printf(“%s”,字符數(shù)組名[行下標(biāo)]);,char str[3][10] ;scanf (“%s”, str[1] );printf (“%s”, str[1] );,任務(wù)4 輸入/輸出學(xué)生,4.4.3 字符串輸入/輸出-舉例,main(){char ss[3][10] ;
30、int i;for(i=0; i<3; i++) scanf(“%s”, ss[i]);for(i=0; i<3; i++) printf(“%s”, ss[i]);},注意:在scanf()和printf的“%s”是直接控制字符串的,只要求某個字符串的起始地址作為參數(shù)。輸入時,scanf()會自動把用戶輸入的回車符、空格或制表符轉(zhuǎn)換成“\0”加在字符串的末尾,printf()則在遇到“\0”就結(jié)束輸出
31、,但不能自動換行。,main(){ char str[14] ; scanf(“%s”,str); printf(“\n%s”,str); printf(“string”);},輸入:How are you?↙輸出:Howareyou?,輸入:How are you?↙輸出:Howstring,練習(xí):1、輸入一行字符串,統(tǒng)計其中大寫字母、小寫字母、數(shù)字以及其他字符的個數(shù)。,任務(wù)4 輸入/輸出學(xué)生,4.4.3 字
32、符串輸入/輸出,任務(wù)5 任務(wù)拓展,4.5.1 字符串處理函數(shù),① 程序中如果調(diào)用下面介紹的4個字符串處理函數(shù),在程序的開始應(yīng)該寫預(yù)處理命令: #include ② 在字符串處理函數(shù)中,凡是用數(shù)組名或字符串首地址作參數(shù)的地方,都可以用指針變量作參數(shù)。指針變量的概念在第6章介紹。,說明:,任務(wù)5 任務(wù)拓展,4.5.1 字符串處理函數(shù),1.求字符串長度函數(shù)strlen(),格式:strlen(str)
33、,功能:測試字符串長度。函數(shù)值就是str中字符的 個數(shù)(不包含字符串的結(jié)束符“\0” )。,任務(wù)5 任務(wù)拓展,4.5.1 字符串處理函數(shù),1.求字符串長度函數(shù)strlen(),char str[10]= "China";printf("%d",strlen(str));或 printf("%d",strlen("China"));,輸
34、出結(jié)果:5,任務(wù)5 任務(wù)拓展,4.5.1 字符串處理函數(shù),2.字符串復(fù)制函數(shù)strcpy(),格式:strcpy(str1,str2),功能:將str2中的字符串復(fù)制到str1數(shù)組中。,任務(wù)5 任務(wù)拓展,4.5.1 字符串處理函數(shù),2.字符串復(fù)制函數(shù)strcpy(),char s1[10],s2[ ]= "Beijing"; strcpy(s1,s2);或: strcpy(s1,"B
35、eijing");,s1的結(jié)果,s1必須足夠大,strcpy(s1,s2,3);,表示將s2中的前3個字符復(fù)制到s1中。,任務(wù)5 任務(wù)拓展,4.5.1 字符串處理函數(shù),3.字符串比較函數(shù)strcmp(),格式:strcmp(str1,str2),任務(wù)5 任務(wù)拓展,4.5.1 字符串處理函數(shù),3.字符串比較函數(shù)strcmp(),任務(wù)5 任務(wù)拓展,4.5.1 字符串處理函數(shù),4.字符串連接函數(shù)strcat(),格式:str
36、cat(str1,str2),功能:把str2中的字符串連接到str1字符串的后面, 結(jié)果放在str1數(shù)組中,函數(shù)值是str1的值。,任務(wù)5 任務(wù)拓展,4.5.1 字符串處理函數(shù),4.字符串連接函數(shù)strcat(),char str1[21]="beijing and ";char str2[ ]="shanghai";printf("%s",strcat(s
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設(shè)計報告---根據(jù)條件進(jìn)行學(xué)生成績排序
- c語言學(xué)生成績管理系統(tǒng)
- [c語言畢設(shè)]c語言學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計--- 學(xué)生成績管理
- 基于c語言的學(xué)生成績管理設(shè)計
- c語言課程設(shè)計--學(xué)生成績管理
- c語言課程設(shè)計-學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)--c語言課程設(shè)計
- c++語言課程設(shè)計 ----學(xué)生成績統(tǒng)計
- c語言課程設(shè)計--學(xué)生成績管理系統(tǒng)
- c語言實習(xí)報告--學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計-學(xué)生成績統(tǒng)計管理
- c語言課程設(shè)計-學(xué)生成績管理系統(tǒng)
- c語言學(xué)生成績管理系統(tǒng)設(shè)計報告
- c語言學(xué)生成績管理系統(tǒng)(鏈表版)
- c語言課程設(shè)計--學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計---學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計-學(xué)生成績管理系統(tǒng)
評論
0/150
提交評論