項目四 學生成績的排序_第1頁
項目四 學生成績的排序_第2頁
項目四 學生成績的排序_第3頁
項目四 學生成績的排序_第4頁
項目四 學生成績的排序_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目四學生成績的排序項目要求一個班有40位學生參加了期終考試(考了三門課),現(xiàn)要按成績的高低輸出成績單。程序的運行要求:(成績任意輸入,為了方便,假設只有五個同學)項目分析從項目要求中可以看出,本項目首先需要輸入40個學生的姓名及三門課的成績;第二是求出每個同學的總分及平均分;第三要求對成績的總分高低進行排序,并將排序結果輸出。從先簡單后復雜的原則出發(fā),所以,將這一項目分成解四個任務介紹,任務一是多個學生一門課成績的輸入/輸出;任務二是多個學生一門課成績的排序;任務三是學生姓名的輸入/輸出;任務四是多個學生多門成績的排序。任務1多個學生一門課成績的輸入、輸出一、問題情景一個班40位同學參加了一次數(shù)學考試,現(xiàn)要輸入全班同學的成績,并按逆序輸出。分析:全班一共有四十個同學,顯然定義四十個簡單變量x1,x2,……x40,然后輸出是不科學的。因為是逆序輸出,因而要求輸入的每個同學的成績都必須保存。那么如何解決這個問題呢?其實,仔細分析一些,不難發(fā)現(xiàn)每個同學的成績都具有相同類型。這樣,就須引入了一個新的概念,即數(shù)組。二、具體實現(xiàn)#include"stdio.h“#defineN10main(){inti,score[N];printf("請輸入本班同學的成績:");for(i=0;i<N;i++)scanf("%d",&score[i]);printf("按逆序輸出本班同學的成績:");for(i=N-1;i>=0;i--)printf("%3d",score[i]);}程序運行結果注:為了程序運行方便,假設只有10人掌握的知識點為:首先是數(shù)組的定義;第二是數(shù)組的初始化;第三是數(shù)組的引用;三、相關知識(一)一維數(shù)組的定義和引用數(shù)組的意義和概念。1.一維數(shù)組的定義一維數(shù)組的定義方式為:類型說明符數(shù)組名[常量表達式];例如:inta[20];它表示數(shù)組名為a,該數(shù)組的長度為20,最多可以存放20個元素,每個元素均為int類型。說明:(1)數(shù)組名等同變量名,命名規(guī)則也與變量名一樣。對“intx;”,我們稱變量x,對“inta[20];”我們稱數(shù)組a。(2)數(shù)組名后是用方括號括起來的常量表達式。inta[3+5];charc[10];(3)常量表達式表示數(shù)組的長度,數(shù)組一經定義,長度就固定不變,換言之,C語言不允許對數(shù)組的大小作動態(tài)定義,所以方括號括起來的是常量表達式,不可以是變量。下面這樣的定義是錯的:

intn=8;chara[n];三、相關知識(續(xù))(4)數(shù)組的下標從0開始。例如:inta[20];表示定義了20個數(shù)組元素,分別為a[0]、a[1]、a[2]、a[3]、…a[19]。若要引用第i個元素,則可以表示成a[i]。(5)數(shù)組的類型實際上就是指數(shù)組元素的取值類型,對于同一數(shù)組,它所有元素的數(shù)據類型都是相同的;(6)數(shù)組名不能與其他變量名相同;例如:

main(){inta;floata[10];………..}是非法的!(7)允許在同一個類型說明中,定義多個數(shù)組和多個變量;例如:inta,b,c,d[10],e[5];2.一維數(shù)組的引用數(shù)組必須先定義,才能使用。數(shù)組元素的表示形式:數(shù)組名[下標]下標可以是常量、表達式、變量。例如a[3]、a[5-3]、a[i]【例4-1】數(shù)組元素的使用。輸入十個學生的成績,并將其輸出。#include"stdio.h"main(){inti,a[10];printf("輸入數(shù)組元素:");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("輸出數(shù)組元素:");for(i=0;i<10;i++)printf("%5d",a[i]);}程序結果如果,要求第一個學生的成績用下標1表示,第二個學生的成績用下標2表示,……第十個學生的成績用下標10表示,則應定義為inta[11]。輸入10個平時成績給a[1]到a[10]輸入10個期終成績給b[1]到b[10]for(i=0;i<10;i++)c[i]=0.4*a[i]+0.6*b[i];輸出總評成績c[1]直到c[10]【例4-2】求學生的總評成績?,F(xiàn)有十個學生,從鍵盤上輸入他們的平時成績、期終成績,輸出總評成績??傇u成績=平時成績*40%+期終成績*60%.#include"stdio.h"main(){inti;floata[11],b[11],c[11];printf("輸入平時成績:");for(i=1;i<=10;i++)scanf("%f",&a[i]);printf("輸入期終成績:");for(i=1;i<=10;i++)scanf("%f",&b[i]);for(i=1;i<=10;i++)c[i]=0.4*a[i]+0.6*b[i];printf("輸出總評成績:");for(i=1;i<=10;i++)printf("%5.1f",c[i]);printf("\n");}3.一維數(shù)組的初始化(1)定義數(shù)組時對數(shù)組元素賦以初值。intx[5]={1,2,3,4,5};等價于:x[0]=1;x[1]=2;…;x[4]=5;(2)可以只給一部分元素賦初值。intx[5]={1,2};系統(tǒng)自動給指定值的數(shù)組元素賦值:x[0]=1,x[1]=2,其他元素值均為0。(3)如果一個數(shù)組的全部元素值都為0,可以寫成:intx[5]={0,0,0,0,0};或intx[5]={0};(4)對全部元素賦初值時,可以不指定長度。intx[5]={1,2,3,4,5};等價于intx[]={1,2,3,4,5};

但是,inta[10]={0,1,2,3,4};不能改寫為:inta[]={0,1,2,3,4};3.一維數(shù)組的初始化示例1:詳見s4-3.c

數(shù)組的定義、初始化、基本輸入輸出。示例2:詳見s4-4.c

數(shù)組元素的引用。示例3:詳見s4-5.c

用數(shù)組求4個數(shù)的最小值和最大值。示例4:詳見s4-6.c

產生100個1~50的隨機整數(shù),要求每行輸出10個數(shù)。任務2多個學生一門課成績的排序一、問題情景一個班40位同學參加了一次數(shù)學考試,現(xiàn)要輸入全班同學的成績,并按學生成績高低進行排序。分析輸入40位同學的數(shù)學成績,我們在任務1中已學會,只要定義一個數(shù)組intmath[40],然后用一個循環(huán)輸入就行;而對學生成績進行排序,可以看成是:先求最高分,然后求次高分,……一直到倒數(shù)第二個數(shù)找出為止。所以先要解決的是:求多個同學的最高分。然后再在剩下的分數(shù)中找次高分,不斷重復,直到剩下的最后一個數(shù)是最小數(shù)為止。比較法#include"stdio.h"#defineN10main(){inti,math[N],t,j;printf("請輸入多個同學的成績:");for(i=0;i<N;i++)scanf("%d",&math[i]);for(j=0;j<N-1;j++)//循環(huán)N-1次,就可以分離出前N-1個數(shù)for(i=j+1;i<N;i++)//分離第j個數(shù),則一定與第j+1至最后一個數(shù)比較if(math[j]<math[i]){t=math[j];math[j]=math[i];math[i]=t;}printf("多個同學的成績排序為:");for(i=0;i<10;i++)printf("%3d",math[i]);printf("\n");}冒泡法#include"stdio.h"#defineN10main(){inti,math[N],t,j;printf("請輸入多個同學的成績:");for(i=0;i<N;i++)scanf("%d",&math[i]);for(j=0;j<N-1;j++)for(i=0;i<N-1-j;i++)if(math[i]<math[i+1]){t=math[i];math[i]=math[i+1];math[i+1]=t;}printf("多個同學的成績排序為:");for(i=0;i<10;i++)printf("%3d",math[i]);printf("\n");}三、相關知識(一)根據問題情景中的剖析,首先要解決的第一個問題是求最高分。【例4-3】求本班同學的最高分,并將它與第一位數(shù)互換。分析:首先是輸入十個成績給math[0]到math[9](為了程序運行方便,假設只有十個同學)第二步是math[0]與math[1]比較,如果math[0]<math[1],則math[0]與math[1]兩數(shù)互相交換。第三步是math[0]與math[2]比較,如果math[0]<math[2],則math[0]與math[2]兩數(shù)互相交換。不斷重復,直到math[0]與math[9]比較,如果math[0]<math[9],則math[0]與math[9]兩數(shù)互相交換。經過上述過程后的math[0]就是最高分了。#include"stdio.h"main(){inti,math[10],t;printf("請輸入本班同學的成績:");for(i=0;i<10;i++)scanf("%d",&math[i]);for(i=1;i<10;i++)if(math[0]<math[i]){t=math[0];math[0]=math[i];math[i]=t;}printf("本班同學中的最高分:");printf("%d\n",math[0]);}(二)根據問題情景中的剖析,解決第二個問題,即排序?!纠?-4】多個學生一門成績的排序(比較法)。分析:上例已求出了多個學生成績的最高分,顯然,再在剩下的數(shù)中執(zhí)行程序,則可以求出次高分;for(i=2;i<10;i++)if(math[1]<math[i]){t=math[1];math[1]=math[i];math[i]=t;}若原先有十個數(shù),則重復九次就可以達到排序的目的,也就是再嵌套一個循環(huán)。

#include"stdio.h"main(){inti,math[10],t,j;printf("請輸入多個同學的成績:");for(i=0;i<10;i++)scanf("%d",&math[i]);for(j=0;j<9;j++)

/*循環(huán)九次,就可以分離出前九個數(shù)*/for(i=j+1;i<10;i++)/*分離第j個數(shù),則一定與第j+1至最后一個數(shù)比較*/if(math[j]<math[i]){t=math[j];math[j]=math[i];math[i]=t;}printf("多個同學的成績排序為:");for(i=0;i<10;i++)printf("%3d",math[i]);printf("\n");}【例4-5】多個學生一門成績的排序。(用冒泡法排序)分析:冒泡法:顧名思義,像水中冒泡一樣,水泡越大,則它浮上水面的速度就越快。思路:將相鄰兩個數(shù)比較,將小的調到后頭。例如,對18,9,1,2,6按從大到小的順序排序。(1)先將18,9比較,因為18>9,所以18與9不交換。即數(shù)還是18,9,1,2,6;(2)將9與1比較,因為9>1,所以9與1不交換。即數(shù)還是18,9,1,2,6;(3)將1與2比較,因為1<2,所以1與2交換。即18,9,2,1,6(4)將1與6比較,因為1<6,所以1與6交換。即18,9,2,6,1for(i=0;i<4;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}經過以上四步,就將最小數(shù)1沉在最下面了。接下來所要做的就是在剩下的四個數(shù)18,9,2,6中挑出小數(shù)就行.顯然只要比較三次,就可以完成。即:

for(i=0;i<3;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}再接下來就是在在剩下的三個數(shù)18,9,6中挑出小數(shù)就行,顯然只要比較二次,就可以完成。即:for(i=0;i<2;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}最后,在剩下的二個數(shù)18,9中挑出大數(shù)就行,顯然只要比較一次,就可以完成。即:for(i=0;i<1;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}總結:也就是再嵌套一個循環(huán)就行。即:for(j=0;j<4;j++)for(i=0;i<4-j;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}所以,多個學生成績的排序用冒泡法程序表示成:#include"stdio.h"main(){inti,math[10],t,j;printf("請輸入多個同學的成績:");for(i=0;i<10;i++)scanf("%d",&math[i]);for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(math[i]<math[i+1]){t=math[i];math[i]=math[i+1];math[i+1]=t;}printf("多個同學的成績排序為:");for(i=0;i<10;i++)printf("%3d",math[i]);printf("\n");}(三)一維數(shù)組實例main(){intj,k,fa[20];fa[0]=1;fa[1]=1;for(j=2;j<20;j++)fa[j]=fa[j-1]+fa[j-2];for(j=0;j<20;j++)printf(“%d,”,fa[j]);}程序結果【例4-6】求出斐波那契數(shù)列的前20項并輸出。(前兩項為1,從第三項開始每一項是前兩項的和)分析:因為有20項,所以定義一個數(shù)組intfa[20],由題意知fa[0]=1;fa[1]=1,后面的項就可以用一個循環(huán)表示。任務3學生姓名的輸入輸出一、問題情景一個班里有40個學生,在選舉班干部時有10個候選人,現(xiàn)要求輸出候選人名單。請用C編程解決此問題。分析:此題的主要內容是學會姓名的輸入/輸出。二、具體實現(xiàn)(為了程序運行簡單,假設只有五個同學)#include"stdio.h"#include"string.h"#defineN5main(){charname[N][12];chartt[20];inti,j;printf("請輸入%d個候選同學的姓名:\n",N);for(i=0;i<N;i++)gets(name[i]);printf("-------------------\n");printf("輸出%d個候選同學的姓名:\n",N);printf("-------------------\n");for(i=0;i<N;i++)puts(name[i]);}本任務所要掌握的知識點是:字符數(shù)組的輸入輸出

三、相關知識(一)一維字符數(shù)組1.一維字符數(shù)組的定義例如:charc[10];意思是定義一個字符數(shù)組c,它有10個元素。C[0]=’I’;c[1]=’□’;c[2]=’a’;c[3]=’m’;c[4]=’□’;c[5]=’h’;c[6]=’a’;c[7]=’p’;c[8]=’p’;c[9]=’y。該數(shù)組的下標從0到9,數(shù)組元素值如右圖所示。china\0china\0\0\0\0\0I□am□happy2.一維字符數(shù)組的初始化(1)定義時逐個字符給數(shù)組中各元素。charc[5]={‘c’,’h’,’i’,’n’,’a’};(2)可省略數(shù)組長度。charc[]={‘c’,’h’,’i’,’n’,’a’};系統(tǒng)根據初值個數(shù)確定數(shù)組的長度,數(shù)組c的長度自動為5。(3)字符數(shù)組可以用字符串來初始化。

charc[6]=”china”charc[10]={“china”}/*加不加花括號都沒關系*/3.一維字符數(shù)組的引用方法一:用%c格式符逐個輸入輸出。例如:charc[6];for(i=0;i<6;i++){scanf(“%c”,&c[i]);printf(“%c”,c[i]);}方法二:用%s格式符進行字符串輸入輸出。例如:charc[6];scanf(“%s”,c);printf(“%s”,c);(1)輸出時,遇’\0’結束,且輸出字符中不包含’\0’。(2)“%s”格式輸入時,遇空格或回車結束,但獲得的字符中不包含回車及空格本身,而是在字符串末尾添’\0’。charc[10];scanf(“%s”,c);輸入數(shù)據“Howareyou”,結果僅“How”被輸入數(shù)組c中。(3)一個scanf函數(shù)輸入多個字符串,輸入時以空格鍵作為字符串間的分隔。例如:chars1[5],s2[5],s3[5];scanf(“%s%s%s”,s1,s2,s3);輸入數(shù)據”Howareyou”,s1,s2,s3獲得的數(shù)據如下圖所示。(4)“%s”格式符輸出時,若數(shù)組中包含一個以上’\0’,遇第一個’\0’時結束。S1S2s3How\0\0are\0\0you\0\0【例4-7】三個同學姓名的輸入輸出。程序如下:#include"stdio.h"main(){charname1[10],name2[10],name3[10];printf("請輸入姓名:\n");scanf("%s%s%s",name1,name2,name3);printf("輸出的姓名為:\n");printf("%s,%s,%s\n",name1,name2,name3);}

程序的運行結果表明:%s輸入時,空格或回車表示輸入的分隔符4.常用的字符串處理函數(shù)(1)輸入字符串函數(shù)——gets()格式:gets(字符數(shù)組)

例如:chars[12];gets(s);功能:從鍵盤輸入1個字符串。允許輸入空格?!纠?-8】將例4-7改為gets()輸入:#include"stdio.h"main(){charname1[10],name2[10],name3[10];printf("請輸入姓名:\n");gets(name1);gets(name2);gets(name3);printf("輸出的姓名為:\n");printf("%s,%s,%s\n",name1,name2,name3);}注意:gets()允許輸入空格(2)輸出字符串函數(shù)格式:puts(字符數(shù)組)如:chars[6]=”china”;puts(s);功能:把字符數(shù)組中所存的字符串,輸出到標準輸出設備中,并用’\n’代替’\0’【例4-9】將例4-7改為gets()、puts()函數(shù)。#include"stdio.h"main(){charname1[10],name2[10],name3[10];printf("請輸入姓名:\n");gets(name1);gets(name2);gets(name3);printf("輸出的姓名為:\n");puts(name1);puts(name2);puts(name3);}程序結果(二)二維字符數(shù)組1.二維字符數(shù)組的定義:charstr[10][8]定義一個二維數(shù)組str,共有10行8列共80個元素。2.二維字符數(shù)組的初始化:(1)chars1[3][3]={{‘a’,’b’,’c’},{‘d’,’e’,’f’},{‘1’,’2’,’3’}};如右圖所示。

(2)chars1[3][3]={“abc123”};3.二維字符數(shù)組的引用:(1)輸入/輸出二維字符數(shù)組中第i行(假設i=2)方法一:charname[10][12];gets(name[2]);puts(name[2]);方法二charname[10][12];scanf("%s",name[2]);printf("%s",name[2]);意思是:輸入/輸出二維字符數(shù)組中第2行的值。注意:gets(name[2]);與scanf("%s",name[2]);輸入時有些不一樣

gets(name[2]);printf("%s\n",name[2]);程序運行時輸入zhangming,則輸出zhangming

scanf("%s",name[2]);printf("%s\n",name[2]);則程序運行時輸入zhangming,輸出zhang四、知識擴展1、字符串比較函數(shù)格式:strcmp(字符串1,字符串2)其中字符串1、字符串2可以是字符串常量,也可以是一維字符數(shù)組。如:strcmp(str1,str2);strcmp(“China”,”English”);strcmp(str1,”beijing”)功能:比較二個字符串的大小。2、拷貝字符串函數(shù)格式:strcpy(字符數(shù)組1,字符串)其中字符串可以是字符串常量,也可以是字符數(shù)組。如:charc[30];strcpy(c,”Goodmoning”);功能:將“字符串”完整地復制到“字符數(shù)組1”中,字符數(shù)組1中原有內容被覆蓋。如果字符串1>字符串2,則函數(shù)大于0;如果字符串1=字符串2,則函數(shù)值為0;如果字符串1<字符串2,則函數(shù)值小于0?!纠?-10】輸入三個同學的姓名,按ASCII碼從大到小的順序排序。#include"stdio.h"#include"string.h"/*因為用到strcmp()和ctrcpy()函數(shù)*/main(){charname1[10],name2[10],name3[10];chartt[20];printf("請輸入姓名:\n");gets(name1);gets(name2);gets(name3);if(strcmp(name1,name2)<0){strcpy(tt,name1);strcpy(name1,name2);strcpy(name2,tt);}if(strcmp(name1,name3)<0){strcpy(tt,name1);strcpy(name1,name3);strcpy(name3,tt);}if(strcmp(name2,name3)<0){strcpy(tt,name2);strcpy(name2,name3);strcpy(name3,tt);}printf("輸出的姓名為:\n");puts(name1);puts(name2);puts(name3);}用中英文表示的運行結果【例4-11】輸入十個候選人同學的姓名,按ASCII碼從大到小的順序排序。定義一個二維數(shù)組name[10][12]for(i=0;i<10;i++)輸入name[i]用冒泡法排序輸出排序好的姓名分析:首先要輸入10個候選同學的姓名,所以要定義一個二維字維數(shù)組name[10][12],表示一共可以寄放10個同學的姓名,而每個同學的姓名最長可以放12個字符。接下來用一個循環(huán)輸入10個同學的姓名。然后可以用冒泡法或選擇法對此10個同學的姓名進行排序。最后輸出排序后的姓名。#defineN5/*為了程序運行簡單,所以定義了五個同學*/#include"stdio.h"#include"string.h"main(){charname[N][12];chartt[20];inti,j;printf("請輸入%d個候選同學的姓名:\n",N);for(i=0;i<N;i++)gets(name[i]);for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(strcmp(name[j],name[j+1])<0){strcpy(tt,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],tt);}printf("輸出十個候選同學的姓名(按ASCII碼排序):\n");for(i=0;i<N;i++)puts(name[i]);}任務4多個學生多門課成績的排序一、問題情景一個班40個同學參加了三門課的考試,現(xiàn)要求輸出按總成績的高低排序的成績單。成績單的格式如下:排序姓名課1課2課3總分平均分1張三988788273912李四96868827090……分析:本問題要解決姓名的輸入/輸出,這個在任務3中已解決。同時也需輸入/輸出40個同學三門課的成績,并進行相應的總分及平均分的計算。最后按總分的高低進行排序。所以將這一任務分解為二個小任務。一個是40個同學三門課成績的輸入/輸出(其知識點是二維數(shù)組);另一個是計算相應的平均分及總分并進行排序。二、具體實現(xiàn)(為了在程序運行時方便,所以假設只有5個學生)#include"stdio.h"#include"string.h"#defineN5main(){inti,j;intscore[N][3],t;charname[N][10],nn[10];floatsum[N]={0},avg[N];//每個同學的總分及平均分printf("請輸入五個同學三門課的成績:\n");/*輸入記錄*/for(i=0;i<N;i++){printf("第%d個同學的記錄:",i+1);scanf("%s",name[i]);for(j=0;j<3;j++)scanf("%d",&score[i][j]);}/*計算每個同學的總分與平均分*/for(i=0;i<N;i++){for(j=0;j<3;j++)sum[i]=sum[i]+score[i][j];avg[i]=sum[i]/3.0;}/*排序成績*/for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(sum[j]<sum[j+1]){t=sum[j];sum[j]=sum[j+1];sum[j+1]=t;t=avg[j];avg[j]=avg[j+1];avg[j+1]=t;//這個同學的所有數(shù)據都要交換任務4多個學生多門課成績的排序t=score[j][0];score[j][0]=score[j+1][0];score[j+1][0]=t;t=score[j][1];score[j][1]=score[j+1][1];score[j+1][1]=t;t=score[j][2];score[j][2]=score[j+1][2];score[j+1][2]=t;strcpy(nn,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],nn);}printf("----------------------------------------------------\n");printf("輸出排序后五個同學三門課的成績:\n");printf("----------------------------------------------------\n");printf("排序\t姓名\t課1\t課2\t課3\t總分\t平均分\n");for(i=0;i<N;i++){printf("第%d名:\t",i+1);printf("%s\t",name[i]);for(j=0;j<3;j++)printf("%d\t",score[i][j]);printf("%.0f\t%.1f\t",sum[i],avg[i]);printf("\n");}printf("-----------------------------------------------------\n");}三、相關知識(一)二維數(shù)組的定義1.二維數(shù)組定義的一般形式類型說明符數(shù)組名[常量表達式][常量表達式]例如:inta[3][4定義了一個3×4(3行4列)的整型數(shù)組a2.二維數(shù)組的理解二維數(shù)組是一種特殊的一維數(shù)組例如inta[3][4];a為數(shù)組名,先看第一維,表明它是一個具有3個元素的特殊的一維數(shù)組,三個元素分別為a[0],a[1],a[2]。再看第二維,表明每個元素又是一個包含4個元素的一維數(shù)組,如a[0]這個元素包含4個元素:a[0][0],a[0][1],a[0][2],a[0][3](二)二維數(shù)組的引用二維數(shù)組元素的表示形式:數(shù)組名[下標][下標]例:inta[3][4],表示行下標值最小從0開始,最大為3-1=2;列下標值最小為0,最大為4-1=3,即:a[0][0]a[0][1]a[0][2]a[0][4]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ù)組的初始化二維數(shù)組初始化的方法如下。(1)分行給二維數(shù)組賦初值inta[3][4]={{1,2,3,4},{4,5,6,7},{6,7,8,9}};(2)將所有數(shù)據寫在一個花括弧內,按數(shù)值排列的順序對各元素賦初值。inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}

(3)可以對部分元素賦初值。inta[3][4]={{1,2},{4},{6,7,8}};a數(shù)組分布如圖所示。(4)如果對全部數(shù)組元素賦值,則第一維的長度可以不指定,但必須指定第二維的長度,全部數(shù)據寫在一個大括號內。如:inta[][3]={1,2,3,4,5,6,7,8,9,10,11,12};第一維長度4省略。120040006780(四)二維數(shù)組的應用【例4-12】輸入五個同學三門課的成績并輸出。#include"stdio.h"#defineN5main(){inti,j;intscore[N][3];printf("請輸入五個同學三門課的成績:\n");for(i=0;i<N;i++)for(j=0;j<3;j++)scanf("%d",&score[i][j]);printf("輸出五個同學三門課的成績:\n");for(i=0;i<N;i++){printf("第%d位同學:",i+1);for(j=0;j<3;j++)printf("%5d",score[i][j]);printf("\n");}}【例4-13】輸入五個同學三門課的成績,計算各門課的總分及平均分,并輸出。#include"stdio.h"#defineN5main(){inti,j;intscore[N][3],sum[3]={0},avg[3];printf("請輸入五個同學三門課的成績:\n");for(i=0;i<N;i++)for(j=0;j<3;j++)scanf("%d",&score[i][j]);/*計算每門課的總分及平均分*/for(j=0;j<3;j++){for(i=0;i<N;i++)sum[j]=sum[j]+score[i][j];avg[j]=sum[j]/N;}printf("-------------------------\n");printf("輸出五個同學三門課的成績:\n");for(i=0;i<N;i++){printf("第%d位同學:",i+1);for(j=0;j<3;j++)printf("%5d",score[i][j]);printf("\n");}printf("-------------------------\n");printf("總分為:");for(j=0;j<3;j++)printf("%5d",sum[j]);printf("\n");printf("平均分為:");for(j=0;j<3;j++)printf("%5d",avg[j]);printf("\n");}任務5舉一反三【例4-15】輸入20個數(shù),輸出它們的平均值及其中與平均值之差的絕對值為最小的數(shù)組元數(shù)。分析:(1)定義一個數(shù)組inta[20],輸入20個數(shù)組元素并將其相加到s中,那么平均值就是avg=s/20;(2)接下來的問題是求最小值。先假設第一個數(shù)最接近平均數(shù),即min=fabs(a[0]-avg),k=0,然后將min與fabs(a[1]-avg)相比,若大,則新的min=fabs(a[1]-avg),k=1,再將min與fabs(a[2]-avg)相比,若大,則新的min=fabs(a[2]-avg),k=2,這樣不斷重復多次,直到與fabs(a[19]-avg)比完;(3)輸出最小值。#include"stdio.h"#include"math.h"main(){inti,k,a[20];floats=0,avg

溫馨提示

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

最新文檔

評論

0/150

提交評論