第5章C語言的數(shù)組_第1頁
第5章C語言的數(shù)組_第2頁
第5章C語言的數(shù)組_第3頁
第5章C語言的數(shù)組_第4頁
第5章C語言的數(shù)組_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)組第五章本章學(xué)習(xí)目標(biāo)理解數(shù)組的基本概念熟練掌握一維數(shù)組的基本使用理解二維數(shù)組的基本使用掌握字符數(shù)組和字符串庫函數(shù)的用法

學(xué)會編制對一批數(shù)據(jù)進(jìn)行基本處理的程序試一試【例5-1】編寫一個C程序,從鍵盤按順序輸入5個任意整數(shù),將5個整數(shù)按逆序輸出。測試數(shù)據(jù)如表5-1所示:表5-1例5-1中輸入輸出數(shù)據(jù)輸入序號12345數(shù)值7853994667輸出序號54321數(shù)值6746995378#include<stdio.h>voidmain(){intnum[5],i;for(i=0;i<5;i++){printf("請輸入第%d個數(shù):",i+1);scanf("%d",&num[i]);}printf("逆序輸出:\n");for(i=4;i>=0;i--){printf("第%d個數(shù):",i+1);printf("%d\n",num[i]);}}C語言中的數(shù)組score1.53.20.0945.39873210score[4]數(shù)組名下標(biāo)標(biāo)明了元素在數(shù)組中的位置

數(shù)組元素下標(biāo)數(shù)組大小數(shù)組是可以在內(nèi)存中連續(xù)存儲多個元素的結(jié)構(gòu)數(shù)組中的所有元素必須屬于相同的數(shù)據(jù)類型數(shù)組類型一維數(shù)組多維數(shù)組899077…示例:學(xué)員單門課程的成績2-D,3-D,4-D739033458087學(xué)號科目01012示例:學(xué)員兩門課程的成績一維數(shù)組類型標(biāo)識符數(shù)組名[N];類型說明符int、char、float…數(shù)組名常量表達(dá)式:數(shù)組大?。ㄔ氐膫€數(shù))intnum[50];charstring[20];floatsalary[100];intn;scanf(“%d”,&n);int

a[n];1、聲明一維數(shù)組:X內(nèi)存score[0]score[1]score[2]score[3]score[4]6734908855一維數(shù)組intscore[5]={67,34,90,88,55};

score其他的初始化情況:intarray[10]={10,9,8,7,6,5,4,3,2,1,0};

//錯誤!越界了intarray[10]={9,8,7,5};//正確,后面的6個元素未初始化intarray[]={9,8,7};

//正確:元素個數(shù)為3intarray[]={};

//錯誤,到底是幾個元素?2、初始化一維數(shù)組:內(nèi)存int

score[4];inti;printf(“Enterthe4numbers\n”);for(i=0;i<=3;i++){

scanf(“%d”,&score[i]);}score[0]score[1]score[2]score[3]score12100217113、為一維數(shù)組動態(tài)賦值:一維數(shù)組做一做

編寫一個C程序,從鍵盤按順序輸入10個任意實(shí)型數(shù),將10個實(shí)型數(shù)按輸入順序輸出。試一試

【例5-2】學(xué)校舉辦歌詠比賽,共有10個評委評分,以下是某同學(xué)參賽后10個評委給出的分?jǐn)?shù):67、84、90、88、75、80、78、95、77、91,編寫一個C程序,計算該同學(xué)的所得平均分(保留兩位小數(shù))。voidmain(){ intscore[10]={67,84,90,88,75,80,78,95,77,91},i,sum=0; floatave; for(i=0;i<10;i++) { sum=sum+score[i]; } ave=sum/10.0; printf("平均分為:%.2f\n",ave);}試一試編寫程序?qū)崿F(xiàn)下述功能:有10位學(xué)生的成績:67,34,90,88,55,74,95,82,43,90,要求編寫程序找出其中的最高分,及其在這批數(shù)中的位置。解題思路:用變量max保存“目前的最高記錄”,用變量max_index保存這個最高記錄在數(shù)組中的位置,max的初值就是第1個數(shù)據(jù),這個數(shù)據(jù)存放在數(shù)組的第1號元素中,所以max_index的初值是1。#include<stdio.h>voidmain(){ intscores[11]={0,67,34,90,88,55,74,95,82,43,90}; intmax,max_index,i; max=scores[1]; max_index=1; for(i=2;i<=10;i++) { if(scores[i]>max) { max=scores[i]; max_index=i; } } printf("10個成績:"); for(i=1;i<=10;i++) { printf("%d",scores[i]); } printf("\n最高分%d:",max); printf("\n第一個最高分的位置%d\n",max_index);}試一試【例5-4】編寫程序?qū)崿F(xiàn)下述功能:在成績表中查找某個成績,給出是否找到的信息。如果找到了要求輸出該數(shù)在成績表中所處的位置;如果找不到輸出“沒有找到!”#include<stdio.h>voidmain(){ intscores[11]={0,67,34,90,88,55,74,95,82,43,92}; //scores[0]不用

intx,i,find=0; printf("請輸入要找的數(shù):"); scanf("%d",&x); for(i=1;i<11;i++) if(scores[i]==x) { find=1; break; }if(find==1) printf("\n在成績表第%d個位置找到了%d\n",i,x); else printf("\n沒有找到\n");}講一講1.使用變量find用以判斷查找是否成功,0表示未成功,1表示成功,初始為0。2.輸入成績與數(shù)組中數(shù)據(jù)一一對比,若找到所需的數(shù)即可退出循環(huán),不必要搜索所有數(shù)組元素,并記錄該數(shù)的位置。3.若找不到所需的數(shù),將要查找的數(shù)依次和數(shù)組中所有元素比較,直到找遍整個數(shù)組為止。想一想

【例5-4】中,如果輸入一個考分,但在成績數(shù)組中有一個以上的考分與此相同,怎樣處理?編寫程序?qū)崿F(xiàn)下述功能:對一個包含5個成績的無序成績表進(jìn)行排序,使其成為降序排列的成績表,最后輸出結(jié)果。(1)選擇排序,例如:待排序的5個數(shù)為:6734908855第1趟排序:第1次比較:6734908855

第2次比較:9034678855

第3次比較:9034678855第4次比較:9034678855第2趟排序之后的結(jié)果:9088673455第3趟排序之后的結(jié)果:9088673455第4躺排序之后的結(jié)果:9088675534試一試#include<stdio.h>voidmain(){ intscores[6]={0,67,34,90,88,55}; inti,j,temp;

for(i=1;i<5;i++)

for(j=i+1;j<=5;j++)

if(scores[i]<scores[j])

{ temp=scores[i]; scores[i]=scores[j]; scores[j]=temp; } printf("排序結(jié)果:"); for(j=1;j<=5;j++) printf("%d",scores[j]); printf("\n");}(2)冒泡排序(從大到?。?include<stdio.h>voidmain(){

intscores[6]={0,67,34,90,88,55};

int

i,j,temp;

for(j=1;j<5;j++)

for(i=1;i<=5-j;i++)

if(scores[i]<scores[i+1])

{ temp=scores[i];

scores[i]=scores[i+1]; scores[i+1]=temp;}

printf("排序結(jié)果:"); for(j=1;j<=5;j++)

printf("%d",scores[j]);

printf("\n");}編寫程序?qū)崿F(xiàn)下述功能:從鍵盤輸入一個學(xué)生成績,然后將其插入到一個降序排列的成績表中,插入后的成績表仍然保持降序,最后輸出結(jié)果。解題思路:假定成績表存放在數(shù)組scores中,輸入的成績是x,首先要在成績表中從頭開始找到第一個比x小的成績,x就應(yīng)該插在這個成績之前。為了空出x的存放位置,從這個成績開始,直到最后一個成績,都要向后移動一個位置。試一試#include<stdio.h>#defineN5voidmain(){ floatscores[N+2]={0,92,88,72,59,32}; floatx; intp,i; printf("原成績表:"); for(i=1;i<=N;i++)printf("%.2f",scores[i]); printf("\n輸入一個需插入的成績:"); scanf("%f",&x); p=1; while((p<=N)&&(x<scores[p])) p++; for(i=N;i>=p;i--)

scores[i+1]=scores[i]; scores[p]=x;printf("\n新成績表:"); for(i=1;i<=N+1;i++)printf("%.2f",scores[i]); printf("\n");}想一想

若老師要求你編寫一個程序?qū)σ婚T課的考試成績進(jìn)行處理,要求具有查找、排序、插入和刪除等功能,并可選擇性地多次操作,該如何編寫程序?qū)崿F(xiàn)呢?字符串與字符數(shù)組chara='W';charb='a';charc='n';chard='g';chare='L';charf='i';如何讓程序存儲我的姓名?WangLicharname[15]={'W','a','n','g','L','i'};用若干個字符用字符數(shù)組用字符串字符串與字符數(shù)組字符串常量是雙引號括起的任意字符序列"HelloWorld""WangPing""Pleaseenteryourfullname:""Hello\"World

\""字符串常量中可以包含轉(zhuǎn)義序列HelloWorld\0字符串結(jié)束符字符串與字符數(shù)組在C語言中沒有專門的字符串變量,通常用一個字符數(shù)組來存放一個字符串字符數(shù)組和字符串的區(qū)別是:字符串的末尾有一個空字符‘\0’字符串可按如下方式聲明并初始化:charc[15]={‘C',‘H',‘I',‘N',‘A','\0'};charc[15]=“CHINA";charstr[]=“abcde";手工加入一個空字符系統(tǒng)將自動加入一個空字符省略數(shù)組大小,系統(tǒng)自動計算,大小為后面的字符總數(shù)加1,最后一個元素存入一個空字符。試一試【例5-7】編寫程序?qū)崿F(xiàn)下述功能:輸入一字符串,計算并輸出其中字母e(大小寫不論)的個數(shù)。#include<stdio.h>voidmain(){ charstr[256]=""; intcount=0; inti=0; printf("請輸入一字符串:"); gets(str);//輸入字符串放入str字符數(shù)組中

while(str[i]!='\0') { if(str[i]=='e'||str[i]=='E') count++; i++; } printf("字符串中e或E的個數(shù):%d\n",count);}

講一講1.用字符數(shù)組str[256]保存字符串,用整型變量count記錄字母e的個數(shù),初值為0。2.輸入字符串到str。3.構(gòu)造循環(huán),將循環(huán)變量i取初值0;如果str[i]的值是字符e或E,count加1。如果不是字符e或E,則判斷下一個。4.如果str[i]的值是'\0',輸出count的值;做一做把【例5-7】源程序中g(shù)ets(str)改為scanf(“%s”,str);看看結(jié)果如何?字符串I/0charc[10];scanf("%s",c);printf("%s",c);格式描述串中使用轉(zhuǎn)換字符串“%s”ChinabaodingChina\0使用scanf

時,不能輸入空格China字符串I/0charc[20];gets(c);puts(c);Ile

arn

TurboC.\0IlearnTurboC.IlearnTurboC.從鍵盤上讀入一個完整的行,存入字符數(shù)組c。并用空字符'\0'取代行尾的換行符'\n'。把字符數(shù)組中的字符串輸出到顯示器。使用gets函數(shù)允許輸入空格IlearnTurboC.

試一試【例5-8】以下程序段中當(dāng)輸入以下字符串“Howareyou?”時,輸出結(jié)果是什么?#include<stdio.h>voidmain(){chara[15],b[5],c[5];printf("請輸入Howareyou?\n");//提示信息

scanf("%s%s%s",a,b,c);printf("a=%s\nb=%s\nc=%s\n",a,b,c);printf("請再次輸入Howareyou?\n");//提示信息

scanf("%s",a);printf("a=%s\n",a);}字符串處理函數(shù)與字符串有關(guān)的內(nèi)置函數(shù)在頭文件string.h中定義要使用標(biāo)準(zhǔn)庫字符串處理函數(shù),程序前應(yīng)該包含:

#include<string.h>string.hstrlenstrcpystrcmpstrcatstrlwrstrpr試一試【例5-9】定義一字符數(shù)組用來存放用戶輸入的密碼,如果用戶輸入的密碼等于“123”,則輸出歡迎登錄的提示信息;否則提示重新輸入密碼,輸入3次錯誤則結(jié)束程序。#include<stdio.h>#include<string.h>#include<stdlib.h>voidmain(){charpassword[30];/*定義字符數(shù)組password*/inti=0;printf("請輸入密碼:\n");while(1)/*檢驗(yàn)密碼*/{gets(password);/*輸入密碼*/

if(strcmp(password,"123")!=0) /*如果密碼不等于123*/{ i++; if(i==3) { printf("你已輸入3次錯誤密碼,無權(quán)進(jìn)入!\n"); exit(0); /*輸入三次錯誤的密碼,退出程序*/ } printf("請輸入密碼:\n");}elsebreak;/*輸入正確的密碼,中止循環(huán)*/}printf("歡迎登錄");/*輸入正確密碼所進(jìn)入的程序段*/getchar();}}字符串處理函數(shù)語法

strcat(dest,src)描述把字符串src中的字符串連接到字符串dest中字符串的后面。本函數(shù)返回值是字符數(shù)組dest的首地址。連接后字符串的總長度將是字符串src

的長度加上字符串dest的長度。目標(biāo)字符串dest的大小應(yīng)足夠存儲最終的字符串。strcat#include<stdio.h>#include<string.h>voidmain(){charstr1[30]="We";charstr2[]="study";

strcat(str1,str2);printf("%s\n",str1);

strcat(str1,"CLanguage.");

printf("%s\n",str1);}

WestudyWestudyCLanguage.字符串處理函數(shù)語法

strcpy(dest,src)描述其中,dest是目標(biāo)字符串,src是源字符串。相當(dāng)于把字符數(shù)組src中的字符串拷貝到字符數(shù)組dest中。結(jié)束標(biāo)志'\0'也一同拷貝。src可以是一個字符串常量。字符數(shù)組dest應(yīng)足夠大,以保證字符串復(fù)制不越界。strcpy#include<stdio.h>#include<string.h>voidmain(){charstr1[20],str2[20];

strcpy(str1,”Hello”);printf(”%s\n”,str1);

strcpy(str2,str1);printf(”%s,%s\n”,str1,str2);}

Hello

Hello,Hello字符串處理函數(shù)語法

strcmp(str1,str2)描述 按照ASCII碼順序比較字符串str1和str2的大小,比較的結(jié)果由函數(shù)返回。在兩個字符串str1和str2相同時返回0;字符串str1大于字符串str2時返回一個正值,否則就返回負(fù)值。strcmp#include<stdio.h>#include<string.h>voidmain(){charstr1[]={"abcde"};charstr2[]={"abcdef"};strcpy(str1,"Hello");

if(strcmp(str1,str2)==0)

printf("yes\n");elseprintf("no\n");}

no字符串處理函數(shù)語法

strlen(s);描述計算字符串s中字符的個數(shù),并將字符的個數(shù)作為函數(shù)的返回值。在計算字符個數(shù)時不計表示字符串結(jié)束的空字符'\0'。strlen#include<stdio.h>#include<string.h>voidmain(){chara[20]="Verygood!";

intn1,n2;

n1=strlen("Goodbye.");

n2=strlen(a);printf("n1=%d,n2=%d\n",n1,n2);}

n1=9,n2=10二維數(shù)組類型標(biāo)識符數(shù)組名[行數(shù)][列數(shù)];intscore[4][2];內(nèi)存scorescore[0][0]score[0][1]score[1][0]score[1][1]score[2][0]score[2][1]score[3][0]score[3][1]4X2=88*sizeof(int)字節(jié)score[0][0]score[0][1]score[1][0]score[1][1]score[2][0]score[2][1]score[3][0]score[3][1]score為了便于理解,二維數(shù)組一般理解為幾行幾列的矩陣1、聲明二維數(shù)組:二維數(shù)組inta[4][2]={{11,1294},{22,450},{33,4000},{44,79}};

inta[][3]={{1,2,3},{4,5,6}

};inta[2][]={{1,2,3},{4,5,6}

};

錯誤2、訪問與初始化二維數(shù)組:試一試【例5-10】編寫程序?qū)崿F(xiàn)下述功能:將下列3行3列矩陣的元素存入數(shù)組,然后找出每一行的最大值并輸出。

257186976解題思路:用二維數(shù)組a[3][3]存放矩陣,max存放一行中目前的最大值。#include<stdio.h>voidmain(){

inta[3][3]={{2,5,7},{1,8,6},{9,7,6}};

int

i,j,max;

for(i=0;i<3;i++) {

for(j=0;j<3;j++)printf("%d",a[i][j]);

printf("\n"); } for(i=0;i<3;i++) { max=a[i][0];

for(j=1;j<3;j++)if(a[i][j]>max)max=a[i][j];

printf("第%d行的最大值是%d:\n",i+1,max)

溫馨提示

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

評論

0/150

提交評論