c語言 排序學生成績_第1頁
已閱讀1頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、項目四,項目要點:數組的定義和使用 數組的存儲結構 數組的輸入輸出 字符串處理函數學習目標:使用數組處理同一類型的大批數據使用字符數組處理字符串 使用二維數組處理字符串,C語言程序設計,工作任務導入,工作任務 一個班上50位學生參與考試,考了3門課程,現要求按總成績的高低輸出成績單引導問題1、課程的成績如何存儲2、學生信息如何存儲3、如何對成績進行排序?,任務1 輸入/輸出多個學生一門課程的成績

2、,main(){ int i, x, s=0; for( i=0; i<50; i++) {scanf(“%d”,&x);s+=x; } printf(“%f\n”, s/50.0);},只用了三個變量就解決了問題,但數據沒有保存。,如果需要把成績按從高到低的順序全部打印出來,怎么辦?,計算50個學生成績的平均分,,任務1 輸入/輸出多個學生一門課程的成績,一維數組的定義,

3、數據類型 數組名[常量表達式];,數組元素的數據類型,遵循C語言標識符規(guī)則,數組長度幾個數組元素,任務1 輸入/輸出多個學生一門課程的成績,4.1.1 一維數組,例如:int a[5];,說明:常量表達式表示元素的個數,即數組長度。 常量表達式中可以包括常量和符合常量,不能包含變量。,任務1 輸入/輸出多個學生一門課程的成績,4.1.1 一維數組,int i=5;int a[i];/*數組長度為變量*/,任務1

4、 輸入/輸出多個學生一門課程的成績,4.1.1 一維數組,以下對一維整型數組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];,任務1 輸入/輸出多個

5、學生一門課程的成績,4.1.2 一維數組的引用,表示引用數組a中的第2個元素,數組名[下標表達式];,表示引用數組a中的第6個元素,表示引用數組a中的第16個元素,,,,若一個數組長度為n,其下標值范圍是0~(n-1),C語言規(guī)定只能逐個引用數組元素而不能一次引用整個數組。,任務1 輸入/輸出多個學生一門課程的成績,4.1.2 一維數組的引用,輸入5個學生的數學成績,計算平均分,將平均分輸出到屏幕上。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);},數組元素的地址也是通過

7、“&”運算符得到的。,任務1 輸入/輸出多個學生一門課程的成績,4.1.2 一維數組,1、上例中,語句average=sum/5.0;修改為average=sum/5;結果如何?2、練習:從鍵盤輸入5個學生的成績,求出并輸出分數最高的學生序號及最高成績。 。,數組的賦值只能逐個對數組元素賦值,不能直接對數組名賦值。因數組在內存占一片連續(xù)的存儲空間,可用循環(huán)語句處理數組。,任務1 輸入/輸出多個學生一門

8、課程的成績,4.1.2 一維數組的引用,(1)在定義數組時,對全部數組元素賦初值此時可以省略數組的長度,任務1 輸入/輸出多個學生一門課程的成績,4.1.3 一維數組的初始化,C語言程序設計,任務1 輸入/輸出多個學生一門課程的成績,4.1.3 一維數組的初始化,(2)在定義數組時,對部分數組元素賦初值,C語言程序設計,任務1 輸入/輸出多個學生一門課程的成績,4.1.3 一維數組的初始化,(3)當初值的個數多于數組元素的

9、個數時,編譯出錯,任務1 輸入/輸出多個學生一門課程的成績,4.1.2 一維數組的引用,例:用初始化方法,把10個學生的數學成績存儲在數組中,再從鍵盤輸入一個考分,查找該分數是否在數組中,如果是,則輸出它是第幾名學生的成績。 。void main(){int i,a[10]={56,65,76,68,92,37,87,51,73,48};int find;printf("請輸入要查找的分數:\n")

10、;scanf("%d",&find);for(i=0;i<10;i++){if(a[i]==find)/*查找到了*/{ printf("%d ",i+1);break;}}},任務1 輸入/輸出多個學生一門課程的成績,4.1.3 一維數組,練習:一個班50位同學參加了一次C語言程序設計考試,現要輸入全班同學的成績,并按逆序輸出。,任務2 排序

11、學生成績,任務1中已經輸入了50個同學的成績到數組中,現在需要確定如何對學生成績從低到高進行排序。,,兩層循環(huán)結構外層循環(huán)每次把操作范圍內最大的數放到最后位置內層循環(huán)每次把較大的數放到靠后的位置,任務2 排序學生成績,有數組a,其元素值為7、1、5、6、9、3,現要把該數組按從小到大的順序排列并輸出。,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; },任務2 排序學生成績,任務2 排序學生成績,4.2.1 冒泡法排序,1、上例中,如果要按從大到小的順序排序,該如何修改程序呢? 2、練習:一個班50位同學參

13、加了一次C語言程序設計考試,現要輸入全班同學的成績,并按從低到高排序并輸出。,任務3 處理多位學生多門課程的成績,一個班上50位學生參與考試,考了3門課程,現要求按總成績的高低輸出成績單。 如果僅僅使用一維數組進行上述處理,是很困難的,此時需要使用二維數組。,x[0][0] x[0][1] x[0][2]x[1][0] x[1][1] x[1][2],數據類型 數組名[常量表達式1][常量表達式2];,,行,列,,int

14、a[3,4], b(3,4);int c[ ][ ], d(3)(4);,任務3 處理多位學生多門課程的成績,4.3.1 二維數組,二維數組的定義,數組名[行下標][列下標],a[3][4]=3;a[1,2]=1;,引用:,/* 下標越界 */,/* a[1][2]=1; */,任務3 處理多位學生多門課程的成績,4.3.2 二維數組的引用,任務3 處理多位學生多門課程的成績,練習:輸入5個同學三門課程的成績并輸出,計算各

15、門課的總分及平均分,并輸出 。,4.3.2 二維數組的引用,(1)分行對二維數組初始化,int a[2][3]={{1,2,3},{4,5,6}};初始化后: 1 2 3 4 5 6,任務3 處理多位學生多門課程的成績,4.3.3 二維數組的初始化,int a[2][3]={1,2,3,4,5,6};初始化后: 1 2 3

16、 4 5 6,(2)按數組排列的順序初始化,任務3 處理多位學生多門課程的成績,4.3.3 二維數組的初始化,任務3 處理多位學生多門課程的成績,4.3.3 二維數組的初始化,(3)對全部數組元素初始化,int a[ ][3]={1,2,3,4,5,6};初始化后: 1 2 3 4 5 6,省略行號,用二層循環(huán)語句處理數組,通常外

17、循環(huán)控制行,內循環(huán)控制列。,for(i=0;i<3;i++) for(j=0;j<4;j++) a[i][j]=i+j;,二維數組的賦值,0 1 2 3 2 3 4 3 4 5,任務3 處理多位學生多門課程的成績,4.3.3 二維數組的初始化,二維數組的輸入輸出,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] ) ;,任務3 處理多位學生多門課程的成績,4.3.3 二維數組的初始化,任務3 處理多位學生多門課程的成績,練習:用初始化方法,把5個同學三門

19、課程成績存儲在二維數組中,計算每位同學的總成績和平均分,輸出總分最高的同學的總成績。,4.3.3 二維數組初始化,練習,下列程序有哪些錯誤?請解釋錯誤原因。(1) main( ) { int x, a[10]; for( x=0;x<=10;x++ ) scanf(“%d”,&a[x]); },,x

20、<10,練習,下列程序有哪些錯誤?請解釋錯誤原因。(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};,任務4 輸入/輸出學生,一個班上50位學生參與考試,需要輸入/輸出學生的姓名信息。這個任務需要解決多個字符的存放問題。,任務4 輸入/輸出學生,4.4.1 字符數組,char 數組名[常量表達式];,二維字符數組,char 數組名[常量表達式1][常量表達式2];,一維字符數組str,,,二維字符數組s1,(1)用字符常數初始化,cha

22、r c[ ]={‘C’,’h’,’i’,’n’,’a’,’\0’};初始化后:,任務4 輸入/輸出學生,4.4.1 字符數組,任務4 輸入/輸出學生,4.4.1 字符數組,char c[ ]={“China”};char c[ ]=“China”;初始化后:,(2)直接用字符串常量初始化,任務4 輸入/輸出學生,4.4.1 字符數組,(1)用字符常數初始化,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’} };,二維字符數組

24、的初始化,每行存放一個字符串,任務4 輸入/輸出學生,4.4.1 字符數組,二維字符數組的初始化,char a[3][10]={"basic","pascal","c"};,(2)直接用字符串常量初始化,練習:1、給字符數組初始化為“Happy!”,并輸出各個數組元素。 2、輸出一個鉆石圖形。如圖所示。** ** ** **,任務4 輸入/輸出學生,4.

25、4.1 字符數組,任務4 輸入/輸出學生,4.4.2 字符串,字符串是用雙引號括起來的若干有效字符序列,字符串可以包括字母、數字、轉義字符等,C語言中,將字符串作為字符數組來處理。,任務4 輸入/輸出學生,4.4.2 字符串,C語言規(guī)定了一個“字符串結束標志”,以字符‘\0’代表。在處理字符數組的過程中,一旦遇到結束符‘\0’,就表示已達到字符串末尾。,數組的長度是6,而不是5。,練習:1、分析以下程序,其運行結果是什么? v

26、oid main(){char c[5]= {’a’, ’b’, ’\0’, ’c’, ’\0’};printf("%s\n",c);} 2、有字符串“abcAbcDEFDef”,把該字符串中的小寫字母轉換為大寫字母后輸出。,任務4 輸入/輸出學生,4.4.2 字符串,任務4 輸入/輸出學生,4.4.3 字符串輸入/輸出,1.字符數組的元素逐個輸入和輸出,用格式輸入輸出函數scanf()和print

27、f(),使用“%c”格式符,或用字符輸入輸出函數getchar()和putchar()。每次輸入或輸出一個字符。,for(i=0;i<10;i++)scanf(“%c”,&c[i]);,for(i=0;i<10;i++)c[i]=getchar();,注:getchar()和putchar()定義在標題文件“stdio.h”中,使用前要用#include 把它們包含進來,任務4 輸入/輸出學生,4.4.3 字符

28、串輸入/輸出,2.字符數組整體輸入和輸出,用格式輸入輸出函數 scanf()和 printf(),使用“%s”格式符,輸入和輸出字符串。,(1)一維字符數組,scanf(“%s”, 字符數組名);printf (“%s”, 字符數組名);,char s1[10] ;scanf (“%s”, s1 );printf (“%s”, s1 );,不用加&,任務4 輸入/輸出學生,4.4.3 字符串輸入/輸出,2.字符數組整

29、體輸入和輸出,(2)二維字符數組,在二維數組中每行存放一個字符串,輸入輸出時要用行的首地址。,scanf(“%s”,字符數組名[行下標]);printf(“%s”,字符數組名[行下標]);,char str[3][10] ;scanf (“%s”, str[1] );printf (“%s”, str[1] );,任務4 輸入/輸出學生,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”是直接控制字符串的,只要求某個字符串的起始地址作為參數。輸入時,scanf()會自動把用戶輸入的回車符、空格或制表符轉換成“\0”加在字符串的末尾,printf()則在遇到“\0”就結束輸出

31、,但不能自動換行。,main(){ char str[14] ; scanf(“%s”,str); printf(“\n%s”,str); printf(“string”);},輸入:How are you?↙輸出:Howareyou?,輸入:How are you?↙輸出:Howstring,練習:1、輸入一行字符串,統(tǒng)計其中大寫字母、小寫字母、數字以及其他字符的個數。,任務4 輸入/輸出學生,4.4.3 字

32、符串輸入/輸出,任務5 任務拓展,4.5.1 字符串處理函數,① 程序中如果調用下面介紹的4個字符串處理函數,在程序的開始應該寫預處理命令: #include ② 在字符串處理函數中,凡是用數組名或字符串首地址作參數的地方,都可以用指針變量作參數。指針變量的概念在第6章介紹。,說明:,任務5 任務拓展,4.5.1 字符串處理函數,1.求字符串長度函數strlen(),格式:strlen(str)

33、,功能:測試字符串長度。函數值就是str中字符的 個數(不包含字符串的結束符“\0” )。,任務5 任務拓展,4.5.1 字符串處理函數,1.求字符串長度函數strlen(),char str[10]= "China";printf("%d",strlen(str));或 printf("%d",strlen("China"));,輸

34、出結果:5,任務5 任務拓展,4.5.1 字符串處理函數,2.字符串復制函數strcpy(),格式:strcpy(str1,str2),功能:將str2中的字符串復制到str1數組中。,任務5 任務拓展,4.5.1 字符串處理函數,2.字符串復制函數strcpy(),char s1[10],s2[ ]= "Beijing"; strcpy(s1,s2);或: strcpy(s1,"B

35、eijing");,s1的結果,s1必須足夠大,strcpy(s1,s2,3);,表示將s2中的前3個字符復制到s1中。,任務5 任務拓展,4.5.1 字符串處理函數,3.字符串比較函數strcmp(),格式:strcmp(str1,str2),任務5 任務拓展,4.5.1 字符串處理函數,3.字符串比較函數strcmp(),任務5 任務拓展,4.5.1 字符串處理函數,4.字符串連接函數strcat(),格式:str

36、cat(str1,str2),功能:把str2中的字符串連接到str1字符串的后面, 結果放在str1數組中,函數值是str1的值。,任務5 任務拓展,4.5.1 字符串處理函數,4.字符串連接函數strcat(),char str1[21]="beijing and ";char str2[ ]="shanghai";printf("%s",strcat(s

溫馨提示

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

評論

0/150

提交評論