程序設(shè)計基礎(chǔ)(C語言)(第2版)(微課版) 課件 第6章 數(shù)組_第1頁
程序設(shè)計基礎(chǔ)(C語言)(第2版)(微課版) 課件 第6章 數(shù)組_第2頁
程序設(shè)計基礎(chǔ)(C語言)(第2版)(微課版) 課件 第6章 數(shù)組_第3頁
程序設(shè)計基礎(chǔ)(C語言)(第2版)(微課版) 課件 第6章 數(shù)組_第4頁
程序設(shè)計基礎(chǔ)(C語言)(第2版)(微課版) 課件 第6章 數(shù)組_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第六章數(shù)組目錄CONTENTS數(shù)組的概念一維數(shù)組二維數(shù)組字符數(shù)組與字符串6.16.26.36.4數(shù)組常用算法6.5智能控制項(xiàng)目實(shí)踐附

數(shù)組的概念6.1問題:一個班有35個同學(xué),期末考試結(jié)束后需要對這個班的C語言考試成績按照從高到低的順序進(jìn)行排序,然后輸出。1.能否定義35個變量來保存考試成績?2.如果可以,寫出的程序是否煩瑣和冗長呢?intS1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12;intS13,S14,S15,S16,S17,S18,S19,S20,S21,S22;intS23,S24,S25,S26,S27,S28,S29,S30,S31,S32;intS33,S34,S35;intS[35];4數(shù)組的概念01可以對大量的同類型的數(shù)據(jù)進(jìn)行處理。數(shù)組:若干個具有相同數(shù)據(jù)類型的數(shù)據(jù)的有序集合。intS[35]={S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15,S16,S17,S18,S19,S20,S21,S22,S23,S24,S25,S26,S27,S28,S29,S30,S31,S32,S33,S34,S35};S[0]S[1]S[2]……S[33]S[34]數(shù)組元素:數(shù)組中的每一個數(shù)據(jù)稱為數(shù)組元素。數(shù)組中的每一個數(shù)組元素具有相同的名稱,不同的下標(biāo),可以作為單個變量使用,所以也稱為下標(biāo)變量。5數(shù)組的概念01數(shù)組的下標(biāo):是數(shù)組元素位置的一個索引或指示。數(shù)組的維數(shù):數(shù)組元素下標(biāo)的個數(shù)。根據(jù)數(shù)組的維數(shù)可以將數(shù)組分為一維、二維、多維數(shù)組。S[0]S[1]S[2]……S[33]S[34]intS[35];intT[35][45];intR[35][45][55];一維數(shù)組二維數(shù)組三維數(shù)組6數(shù)組的概念01數(shù)組的類型:依據(jù)數(shù)組的維數(shù),可分為:一維數(shù)組二維數(shù)組三維數(shù)組……N維數(shù)組依據(jù)數(shù)組元素的數(shù)據(jù)類型,可分為:數(shù)值數(shù)組字符數(shù)組指針數(shù)組結(jié)構(gòu)數(shù)組inta[10];charb[20];doublec[10];7數(shù)組的概念01一維數(shù)組6.2一維數(shù)組一維數(shù)組的定義一維數(shù)組的初始化一維數(shù)組元素的引用一維數(shù)組的存儲一維數(shù)組的應(yīng)用一維數(shù)組的定義01一般形式:類型說明符數(shù)組名[常量表達(dá)式]說明:類型說明符:每個元素的類型,可以是基本數(shù)據(jù)類型,也可以是構(gòu)造數(shù)據(jù)類型、指針;數(shù)組名:數(shù)組的名字,命名規(guī)則遵循標(biāo)識符命名規(guī)則;常量表達(dá)式:表示數(shù)組中所包含的元素的個數(shù),即數(shù)組的長度;相同類型的數(shù)組和變量可以在同一個類型說明符下一起說明,互相間用”,”隔開;數(shù)組名不能與其它變量名相同。如:inta[10];/*定義一個整型數(shù)組a,它有10個元素*/doubleb[20];/*定義一個雙精度型數(shù)組b,它有20個元素*/例如:int

a[5];int是類型說明符,數(shù)組元素數(shù)據(jù)類型為int型;a是數(shù)組名;5是常量表達(dá)式,數(shù)組元素的個數(shù)為5。例如:#defineM10char

abc[M-5];數(shù)組類型數(shù)組名

數(shù)組元素個數(shù)charabc511一維數(shù)組的定義0112數(shù)組定義時下標(biāo)要求:一維數(shù)組的定義01(1)不能越界;(2)只能是常量表達(dá)式;(3)首地址從0開始,n-1結(jié)束一維數(shù)組元素的引用02數(shù)組元素的一般形式數(shù)組名[下標(biāo)]

下標(biāo)表示了元素在數(shù)組中的順序號,只能為整型數(shù)或整型表達(dá)式。C語言中,規(guī)定下標(biāo)從0開始,對下標(biāo)的上界未作規(guī)定。例:a[5],a[i+j],a[i++]都是合法的數(shù)組元素。(1)數(shù)組元素通常稱為下標(biāo)變量;(2)必須先定義才能使用下標(biāo)變量;(3)只能逐個使用數(shù)組元素,不能一次引用整個數(shù)組。14一維數(shù)組元素的引用02注意!例6.1:將數(shù)字1~10存入一個整型數(shù)組a中并輸出。15一維數(shù)組元素的引用02#include<stdio.h>intmain(){inti,a[10];for(i=0;i<10;i++){a[i]=i+1;printf("%3d",a[i]);}return0;} 輸出結(jié)果:1234567891016例:程序輸出結(jié)果是多少?一維數(shù)組元素的引用02#include<stdio.h>#defineM10intmain(){charabc[M-5];inti;for(i=0;i<M-5;i++)abc[i]='A';printf("charabc[M-5]={");for(i=0;i<M-6;i++)printf("%d,",abc[i]);printf("%d}\n",abc[M-6]);return0;}

charabc[M-5]={65,65,65,65,65}一維數(shù)組的初始化03概念:在數(shù)組定義時給數(shù)組元素賦予初值。一般形式:類型說明符數(shù)組名[常量表達(dá)式]={值,值,…值};例如:

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

相當(dāng)于a[0]=0;a[1]=1...a[9]=9;數(shù)組初始化是在編譯階段進(jìn)行的。這樣將減少運(yùn)行時間,提高效率。說明1、可以只給部分元素賦初值。例如:inta[10]={0,1,2,3,4};

表示只給a[0]~a[4]5個元素賦值,而后5個元素自動賦0值。2、只能給元素逐個賦值,不能給數(shù)組整體賦值。

例如:給十個元素全部賦1值,只能寫為:

inta[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:

inta[10]=1;3、如給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個數(shù)。

例如:inta[5]={1,2,3,4,5};可寫為:

inta[]={1,2,3,4,5};4、當(dāng)數(shù)組指定的元素個數(shù)小于初值的個數(shù)時,作語法錯誤處理。 例如:inta[4]={1,2,3,4,5};是不合法的。一維數(shù)組的初始化03一維數(shù)組的存儲0402例如:

inta[10];

空間為10*sizeof(int)。

doubleb[20];

空間為20*sizeof(double)。

一維數(shù)組的各元素按下標(biāo)的順序依次存儲在一片連續(xù)的存儲空間中??臻g的大小與數(shù)組類型有關(guān),為元素的個數(shù)乘以每一個元素所占的空間。

例6.2:用數(shù)組求Fibonacci數(shù)列的前20項(xiàng)(每行輸出5個數(shù))。一維數(shù)組的應(yīng)用05#include<stdio.h> #include<stdlib.h>

intmain() { inti; intf[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if(i%5==0)printf("\n"); printf("%6d",f[i]); }

system("pause");

return0; } 例6.3:統(tǒng)計一個整數(shù)中各個數(shù)字出現(xiàn)的次數(shù)。 #include<stdio.h> intmain()

{unsignedintm,n,i; //定義m為無符號整型以擴(kuò)大可以測試的數(shù)據(jù)范圍 intdigit[10]={0}; scanf("%u",&m); n=m; while(m) //通過循環(huán)實(shí)現(xiàn)一個整數(shù)的數(shù)位分解 { i=m%10; //用i獲取每次循環(huán)取得的尾數(shù) digit[i]=digit[i]+1; m=m/10; //用m獲取每次循環(huán)去掉尾數(shù)得到的新數(shù) } if(n==0) digit[0]=1; for(i=0;i<10;i++) printf("%d\t",i); printf("\n"); for(i=0;i<10;i++) printf("%d\t",digit[i]); return0;

}

二維數(shù)組6.3

二維數(shù)組二維數(shù)組的定義二維數(shù)組的初始化二維數(shù)組元素的引用二維數(shù)組的存儲二維數(shù)組的應(yīng)用01例如:

inta[2][3];

定義了一個二行三列的數(shù)組,數(shù)組名為a,其下標(biāo)變量的類型為整型。該數(shù)組的下標(biāo)變量共有2×3個。二維數(shù)組的定義一般形式類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]例如:

inta[2][3];其行下標(biāo)最大值為1,列元素下標(biāo)最大值為2。其數(shù)組元素為:a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]、a[1][2]。

inta[3][2];其行下標(biāo)最大值為2,列元素下標(biāo)最大值為1。其數(shù)組元素為:a[0][0]、a[0][1]、a[1][0]、a[1][1]、a[2][0]、a[2][1]。二維數(shù)組元素的引用數(shù)組元素的一般形式數(shù)組名[下標(biāo)1][下標(biāo)2];

下標(biāo)1(行標(biāo))、下標(biāo)2(列標(biāo))可以是整型常量或整型表達(dá)式。02例如:inta[4][5];其元素的存儲順序?yàn)椋憾S數(shù)組元素的存儲C語言規(guī)定,二維數(shù)組中的元素在存儲時要先存放第一行的數(shù)據(jù),再存放第二行的數(shù)據(jù)等等,每行數(shù)據(jù)按下標(biāo)規(guī)定的順序由小到大的存放。03二維數(shù)組的初始化1、分行給多維數(shù)組賦值。ints[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};2、按行連續(xù)賦初值。ints[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};3、對全部元素賦值,可以省略第一維的長度。ints[][4]={1,2,3,4,5,6,7,8,9,10,11,12};4、可以只對部分元素賦初值,未賦值的元素自動取0值。ints[][4]={{1,2},{5},{9,10}};04二維數(shù)組的應(yīng)用例6.4:第33屆夏季奧林匹克運(yùn)動會,Z國的運(yùn)動員參與了n(1≤n≤20)天的比賽。用數(shù)組編程統(tǒng)計Z國所獲得的金、銀、銅牌數(shù)量及總獎牌數(shù)量。05#include<stdio.h> intmain() {inti,j,n,sum,sum1,sum2,sum3; sum1=sum2=sum3=sum=0; printf("請輸入天數(shù):"); scanf("%d",&n); inta[20][3];//利用二維數(shù)組解決獎牌數(shù)量的統(tǒng)計問題 for(i=0;i<n;i++)

{printf("請輸入第%d天獲得的金、銀、銅牌數(shù)量:",i+1);

for(j=0;j<3;j++)

scanf("%d",&a[i][j]);}

for(i=0;i<n;i++)

{sum1+=a[i][0];//獲得的金牌的數(shù)量 sum2+=a[i][1];//獲得的銀牌的數(shù)量 sum3+=a[i][2];}

//獲得的銅牌的數(shù)量

sum=sum1+sum2+sum3;

printf("前%d天金牌數(shù)量為%d枚,銀牌數(shù)量為%d枚,銅牌數(shù)量為%d枚\n獎牌總數(shù)量為%d枚\n",n,sum1,sum2,sum3,sum);return0; }

用大模型了解第33屆夏季奧林匹克運(yùn)動會例6.5:求矩陣的轉(zhuǎn)置。轉(zhuǎn)置前轉(zhuǎn)置后#include<stdio.h> #defineM3 #defineN4 intmain() { inta[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},b[N][M],i,j; printf("轉(zhuǎn)置前的矩陣為:\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) printf("%3d",a[i][j]); printf("\n");

}for(i=0;i<N;i++) /*求轉(zhuǎn)置矩陣*/ for(j=0;j<M;j++) b[i][j]=a[j][i]; printf("轉(zhuǎn)置后的矩陣為:\n"); for(i=0;i<N;i++) { for(j=0;j<M;j++) printf("%3d",b[i][j]); printf("\n"); } return0; } 字符數(shù)組與字符串6.4字符數(shù)組與字符串字符數(shù)組的定義與初始化字符數(shù)組的輸入與輸出字符串處理函數(shù)1、字符數(shù)組的定義字符數(shù)組的定義與初始化01要處理大批量的同類型的數(shù)值數(shù)據(jù),可使用數(shù)組進(jìn)行存取及操作。

數(shù)據(jù)還包括非數(shù)值型數(shù)據(jù)。比如你的姓名、身份證號碼、密碼等。這種數(shù)據(jù)一般會有多個字符即字符串,那么又該如何對這些數(shù)據(jù)進(jìn)行處理?

仍然使用數(shù)組來對它們存取及操作,不過此時我們稱存放字符型數(shù)據(jù)的數(shù)組為字符數(shù)組。即字符數(shù)組的每個元素也只能存放一個字符。

與數(shù)值數(shù)組定義類似,字符數(shù)組需要給出3個要素:

類型、數(shù)組名、數(shù)組長度。

char數(shù)組名[常量表達(dá)式];如:

charname[20]; charpassword[64];字符數(shù)組的定義與初始化01

chara[5]={'C','h','i','n','a'};把5個字符分別賦給a[0],…,a[4]。方式一:逐個為數(shù)組中各元素指定初值字符。說明:

若字符個數(shù)少于元素個數(shù),則對沒有給出初值的數(shù)組元素,系統(tǒng)自動對它們賦值0(或‘\0’)。

注:ASCII值為0的字符,即NUL,用sizeof可測(例)

如果對全體元素賦初值,可以省略長度說明。如:charb[]={'C','h','i','n','a'};系統(tǒng)認(rèn)為b數(shù)組的長度或大小為5。字符數(shù)組的定義與初始化012、字符數(shù)組的初始化代碼:

#include<stdio.h>#include<string.h>intmain() { inti;charstr[5]={'a','b'};for(i=0;i<5;i++)printf("字符為=%c\n",str[i]);printf("長度=%d\n",sizeof(str));return0;}字符數(shù)組的定義與初始化01方式二:用字符串對字符數(shù)組進(jìn)行初始化。

chara[]={"China"}; chara[]="China";

此時字符數(shù)組的實(shí)際大小為字符串的實(shí)際字符個數(shù)+1。因最后還有一個空字符‘\0’,它稱為字符串結(jié)束標(biāo)志。a[0]a[1]a[2]a[3]a[4]a[5]‘C’‘h’‘i’‘n’‘a(chǎn)’‘\0’字符數(shù)組的定義與初始化01在C語言中沒有專門的字符串變量,通常用一個字符數(shù)組來存放一個字符串。當(dāng)把一個字符串存入一個數(shù)組時,也把結(jié)束符'\0'存入數(shù)組,并以此作為該字符串是否結(jié)束的標(biāo)志。用字符串方式賦初值比用字符逐個賦初值要多占一個字節(jié),用于存放字符串結(jié)束標(biāo)志‘\0’。說明字符數(shù)組的定義與初始化01代碼一:

{ inti;charstr[]=“abcd”;printf("%d",strlen(str));}字符數(shù)組的定義與初始化01代碼二:{inti;charstr[]="abcd";printf("%d",sizeof(str));}輸出5輸出4例:給字符數(shù)組賦值且輸出。字符數(shù)組的定義與初始化01#include<stdio.h>intmain(){ inti;charstr[]="IlikeClanguage";for(i=0;i<17;i++)printf("%c",str[i]);printf("\n");return0;}

對字符數(shù)組進(jìn)行初始化字符數(shù)組的輸入輸出1、字符數(shù)組的輸出

要將字符數(shù)組的內(nèi)容顯示出來,有兩種方法:按%c的格式:用printf()函數(shù)將數(shù)組元素一個一個輸出到屏幕。按%s的格式:用printf()函數(shù)將數(shù)組中的內(nèi)容按字符串的方式輸出到屏幕(要判斷'\0'字符)。注意:系統(tǒng)在輸出時只在遇到‘\0’字符時才停止輸出,否則,即使輸出的內(nèi)容已經(jīng)超出數(shù)組的長度也不會停止輸出的。022、字符數(shù)組的輸入從鍵盤對字符數(shù)組賦值,有兩種方法:按%c的格式:用循環(huán)和scanf()函數(shù)讀入鍵盤輸入的數(shù)據(jù)按%s的格式:通過scanf()函數(shù)來進(jìn)行字符串的輸入。如:scanf("%s",a);注意:輸入時,在遇到分隔符時認(rèn)為字符串輸入完畢,并將分隔符前面的字符后加一個'\0'字符一并存入數(shù)組中。字符數(shù)組的輸入輸出02例6.7:從鍵盤輸入一個字符串到字符數(shù)組s,并將字符串s輸出到屏幕。輸出字符串s到屏幕#include"stdio.h"intmain(){ chars[80];scanf("%s",s);printf("%s",s);

}

從鍵盤輸入字符串到字符數(shù)組s中字符數(shù)組的輸入輸出02注意:此處沒有取地址符字符串處理函數(shù)04#include<stdio.h>#include<string.h>intmain(){ inti;charstr1[40],str2[40];scanf("%s%s",str1,str2);printf("str1=%s,str2=%s",str1,str2);return0;}

注意:(1)scanf的%s%s中間不可加逗號等分隔符(可以不加或加空格)(2)輸入時用tab或空格分隔字符串處理函數(shù)1、字符數(shù)組輸入輸出函數(shù)scanf和printf函數(shù)在字符串的使用輸入字符串函數(shù)getsgets(字符數(shù)組)輸出字符串函數(shù)putsputs(字符數(shù)組)03說明:gets、puts中在被使用時,須包含頭文件<stdio.h>。在用gets函數(shù)輸入字符串時,只有按回車鍵才認(rèn)為是輸入結(jié)束。在用puts函數(shù)輸出字符串時,遇‘\0’結(jié)束。例6.8:從鍵盤輸入一個字符串到字符數(shù)組s,并將字符串s輸出到屏幕。字符串處理函數(shù)03輸出字符串s到屏幕#include"stdio.h"intmain(){ chars[80];gets(s);puts(s);return0;}

從鍵盤輸入字符串到字符數(shù)組s中2、字符串拷貝函數(shù)strcpy格式:strcpy(字符數(shù)組名1,字符數(shù)組名2)功能:把字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。串結(jié)束標(biāo)志'\0'也一同拷貝。要注意的問題: 字符數(shù)組1的長度必須足夠大,以便能容納字符數(shù)組2中的字符串。 字符數(shù)組名2,也可以是一個字符串常量。如strcpy(strl,"CLanguage")

復(fù)制時連同字符串后面的'\0'一起復(fù)制到字符數(shù)組1中#include<stdio.h>#include<string.h>intmain(){

inti;

charstr1[]="student",str2[]="china"; strcpy(str1,str2); puts(str1); for(i=0;i<8;i++) printf("%c",str1[i]); printf("\n");return0;}

字符串處理函數(shù)03chinachinat例6.9:將一個字符數(shù)組中的字符串復(fù)制到另一個字符數(shù)組中。#include<stdio.h>#include"string.h"intmain(){charstr1[15],str2[]="CLanguage";strcpy(str1,str2);puts(str1);printf("\n");return0;}

字符串處理函數(shù)033、字符串連接函數(shù)strcat格式:strcat(字符數(shù)組名1,字符數(shù)組名2)功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的串標(biāo)志'\0'。要注意的問題: 字符數(shù)組str1的長度必須足夠大,以便能容納被連接的字符串str2。 連接后系統(tǒng)將自動取消字符串1后面的結(jié)束符‘\0’,只在新串最后保留一個‘\0’。

例6.10:將一個字符數(shù)組中的字符串連接到另一個字符數(shù)組中的字符串后面。字符串處理函數(shù)03#include<stdio.h>#include"string.h"intmain(){charstr1[50]="Hello";charstr2[]="everyone";strcat(str1,str2);puts(str1);return0;} 4、字符串比較函數(shù)strcmp格式:strcmp(字符數(shù)組名1,字符數(shù)組名2)功能:按照ASCII碼順序比較兩個數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。字符串1=字符串2,返回值=0字符串1>字符串2,返回值>0字符串1<字符串2,返回值<0注意: 執(zhí)行這個函數(shù)時,自左到右逐個比較對應(yīng)字符的ASCII碼值,直到發(fā)現(xiàn)了不同字符或字符串結(jié)束符‘\0’為止。 對字符串不能用數(shù)值型比較符。 字符串比較不能用以下形式

if(str1==str2)printf("yes");例6.11:輸入5個字符串,將其中最大的字符串輸出。#include<stdio.h>#include<string.h>intmain(){

charstr[10],temp[10];inti;gets(temp);for(i=0;i<4;i++){gets(str);if(strcmp(temp,str)<0)strcpy(temp,str);}printf("最大的字符串是:%s",temp);return0;} 字符串處理函數(shù)035、測字符串的長度函數(shù)strlen格式:strlen(字符數(shù)組名)功能:測字符串的實(shí)際長度(不含字符串結(jié)束標(biāo)志‘\0’)并作為函數(shù)返回值。字符串處理函數(shù)03例6.12:輸入5個字符串,將其中最長的字符串輸出。#include<stdio.h>#include<string.h>intmain(){

charstr[50],temp[50];inti,len;

gets(str);len=strlen(str);for(i=0;i<4;i++){gets(temp);if(strlen(temp)>len)strcpy(str,temp);}printf("最長的字符串是:%s",str);return0;} 字符串處理函數(shù)046、字符串大小寫轉(zhuǎn)換函數(shù)strupr()和strlwr()格式:strlwr(字符串)功能:將字符串中的大寫字母轉(zhuǎn)換為小寫字母,其他字母不變。字符串處理函數(shù)03格式:strupr(字符串)功能:將字符串中的小寫字母轉(zhuǎn)換為大寫字母,其他字母不變。例6.13:字符串大小寫轉(zhuǎn)換。 #include<string.h> intmain() { chartext[20],change[20]; intnum; inti=0; while(1) {printf("輸入轉(zhuǎn)換大小寫方式(1表示大寫,2表示小寫,0表示退出):\n"); scanf("%d",&num); if(num==1)//如果是轉(zhuǎn)換為大寫

{printf("輸入一個字符串:\n"); scanf("%s",&text);

strupr(text); //字符串中的小寫字母轉(zhuǎn)換成大寫字母 printf("轉(zhuǎn)換成大寫字母的字符串為:%s\n",text);} elseif(num==2) //如果是轉(zhuǎn)換為小寫

{

printf("輸入一個字符串:\n"); scanf("%s",&text); strlwr(text); //字符串中的大寫字母轉(zhuǎn)換成小寫字母 printf("轉(zhuǎn)換成小寫字母的字符串為:%s\n",text);

}

elseif(num==0) //如果命令字符為0 break; } return0; }

字符串處理函數(shù)04數(shù)組常用算法6.5數(shù)組常用算法數(shù)組元素的查找數(shù)組元素的排序數(shù)組元素的插入數(shù)組元素的刪除例6.14猜數(shù)字游戲:隨機(jī)產(chǎn)生10個正整數(shù)(范圍為0~99),輸入一個數(shù)并顯示是否猜測成功。(線性查找法)數(shù)組元素的查找01 #include<stdio.h> #include<stdlib.h> intmain() { inti,ranNum[10],number; for(i=0;i<10;i++) ranNum[i]=rand()%100;//生成一個0~99的隨機(jī)數(shù) printf("輸入猜測的數(shù):"); scanf("%d",&number); for(i=0;i<10;i++) //用線性查找法實(shí)現(xiàn)數(shù)據(jù)查找

{

if(number==ranNum[i]) //將數(shù)組的每一個元素與number比較

break;

}

if(i>=0&&i<10) printf("數(shù)字為%d,位置號為%d\n",number,i); else printf("該數(shù)字不存在!\n"); return0; }

例6.14猜數(shù)字游戲:隨機(jī)產(chǎn)生10個正整數(shù)(范圍為0~99),輸入一個數(shù)并顯示是否猜測成功。(線性查找法)數(shù)組元素的排序02 #include<stdio.h> #include<stdlib.h> intmain() { inti,ranNum[10],number; for(i=0;i<10;i++) ranNum[i]=rand()%100;//生成一個0~99的隨機(jī)數(shù) printf("輸入猜測的數(shù):"); scanf("%d",&number); for(i=0;i<10;i++) //用線性查找法實(shí)現(xiàn)數(shù)據(jù)查找

{

if(number==ranNum[i]) //將數(shù)組的每一個元素與number比較

break;

}

if(i>=0&&i<10) printf("數(shù)字為%d,位置號為%d\n",number,i); else printf("該數(shù)字不存在!\n"); return0; }

排序算法很多,如:選擇排序法、冒泡排序法等

1、選擇排序法選擇排序法的基本思路是以第一個數(shù)據(jù)作為基點(diǎn),找出基點(diǎn)及其后面數(shù)據(jù)中最小的數(shù)據(jù),將其與基點(diǎn)位置的數(shù)據(jù)交換;再以第二個數(shù)據(jù)作為基點(diǎn),找出基點(diǎn)及其后面數(shù)據(jù)中最小的數(shù)據(jù),將其與基點(diǎn)位置的數(shù)據(jù)交換……最后以倒數(shù)第二個數(shù)據(jù)作為基點(diǎn),找出基點(diǎn)及其后面數(shù)據(jù)中最小的數(shù)據(jù),將其與基點(diǎn)位置的數(shù)據(jù)交換,實(shí)現(xiàn)數(shù)據(jù)從小到大排序。選擇排序法第1輪比較數(shù)組元素的排序02例6.15通過選擇排序法實(shí)現(xiàn)輸入10個整數(shù),按從小到大的順序輸出這10個整數(shù)。*嘗試添加代碼,觀察數(shù)據(jù)每一輪排序后的結(jié)果:#include<stdio.h> #defineM10 intmain() { inti,j,k,a[M]; printf("請輸入10個整數(shù):\n"); for(i=0;i<M;i++)/*通過for循環(huán)語句對數(shù)組a的各個元素賦值*/ { printf("請輸入第%d個數(shù):",i+1); scanf("%d",&a[i]); } printf("排序前的數(shù)據(jù)是:\n"); for(i=0;i<M;i++) printf("%d",a[i]); for(i=0;i<M-1;i++) { for(j=i+1;j<M;j++)

if(a[i]>a[j]) {k=a[i];a[i]=a[j];a[j]=k;} } printf("\n排序后的數(shù)據(jù)是:\n"); for(i=0;i<M;i++) printf("%d",a[i]); return0; }

數(shù)組元素的排序022、冒泡排序法:冒泡排序法的基本思路是將相鄰的兩個數(shù)比較,把小的調(diào)換到前面。冒泡排序法第1輪比較如:將整數(shù)6852094713按從小到大進(jìn)行排序6852094713第1次比較,6比8小,不變6852094713第2次比較,8比5大,交換6582094713第3次比較,8比2大,交換6528094713第4次比較,8比0大,交換6520894713第5次比較,8比9小,不變6520894713第6次比較,9比4大,交換6520849713第7次比較,9比7大,交換6520847913第8次比較,9比1大,交換6520847193第9次比較,9比3大,交換6520847139第1輪排序結(jié)果數(shù)組元素的排序02插入是指在原有數(shù)組中插入一個新的元素,使插入元素后的數(shù)組仍保持原序。插入數(shù)組元素的一般步驟如下。(1)定位:確定新元素的插入位置。(2)移位:插入位置有兩種,一種是在數(shù)組最后位置插入,這種情況不需要移位;另一種是在已有的任一數(shù)組元素(假設(shè)數(shù)組長度為n,該數(shù)組元素下標(biāo)為i)前面插入,則需要移位,即將下標(biāo)為n-1到下標(biāo)為i的元素依次賦值給后一個元素。(3)插入:在下標(biāo)為i的位置上插入新元素,即將待插入元素賦值給下標(biāo)為i的數(shù)組元素。數(shù)組元素的插入03例6.16已對5名學(xué)生C語言成績按從小到大的順序排序,現(xiàn)有一名插班生,請將該學(xué)生C語言成績按序插入并輸出。 #include<stdio.h> #defineN6 intmain()

{inti,j,ransco[N]={58,63,76,82,91},inscore;

printf("插入前成績序列為:");

for(i=0;i<N-1;i++)

printf("%4d",ransco[i]);

printf("\n輸入要插入的成績:");

scanf("%d",&inscore);

for(i=0;i<N-1&&ransco[i]<inscore;i++); //定位:查找待插入的位置i

for(j=N-2;j>=i;j--)//移位:用循環(huán)遞減移位,使下標(biāo)為i的元素可被覆蓋

ransco[j+1]=ransco[j];

ransco[i]=inscore; //插入:將下標(biāo)為i的元素賦值為插入的inscore

printf("插入后成績序列為:");

for(i=0;i<N;i++)

printf("%4d",ransco[i]);

printf("\n");

return0; }

刪除數(shù)組元素的一般步驟如下。(1)定位:確定待刪除元素的下標(biāo)。(2)移位:如果待刪除元素的下標(biāo)為i,則將下標(biāo)為i+1的元素到下標(biāo)為n-1的元素依次前移,從而達(dá)到刪除下標(biāo)為i的元素的效果。(3)個數(shù)減1:完成第(2)步后,原下標(biāo)i+1到n-1的元素依次前移一位,導(dǎo)致原下標(biāo)n-1的元素移動到n-2的位置,此時數(shù)組的最后兩個位置(n-2和n-1)的值是相同的。此時,將有效元素個數(shù)減1,使下標(biāo)n-1元素變成一個多余的元素,不再被訪問,從而達(dá)到刪除效果數(shù)組元素的刪除04數(shù)組元素的刪除例6.17輸入一個待刪除的整數(shù)number,刪掉原數(shù)組中第1個值為number的元素,如果number不是數(shù)組中的元素,則顯示“該數(shù)據(jù)不存在!”。#include<stdio.h> #defineN6 intmain() {

inti,j,num[N]={58,63,76,80,82,91},number; intflag=1; //標(biāo)識是否找到待刪除的元素,1表示找到 printf("刪除前的數(shù)據(jù)序列為:"); for(i=0;i<N;i++) printf("%4d",num[i]); printf("\n輸入要刪除的數(shù):"); scanf("%d",&number); for(i=0;i<N&&num[i]!=number;i++); //查找number是否是數(shù)組中的元素,此處循環(huán)體為空語句 if(i==N) //循環(huán)停止時,如果i==N,說明元素不是數(shù)組中的元素 flag=0; else

{for(j=i;j<N-1;j++)

num[j]=num[j+1];} //前移覆蓋下標(biāo)為i的元素

if(flag==1)

{printf("刪除后的數(shù)據(jù)序列為:");

for(i=0;i<N-1;i++)

printf("%4d",num[i]); } else

printf("該數(shù)據(jù)不存在!"); printf("\n"); return0;}

數(shù)組—

智能控制項(xiàng)目實(shí)踐案例:智能溫濕度監(jiān)測報警系統(tǒng))模擬環(huán)境監(jiān)測設(shè)備:預(yù)設(shè)10組溫濕度數(shù)據(jù)(數(shù)組存儲),遍歷數(shù)組判斷每組數(shù)據(jù)是否超標(biāo)(溫度>35℃或濕度>80%),輸出監(jiān)測結(jié)果并統(tǒng)計超標(biāo)次數(shù),最后給出預(yù)警提示。1.使用數(shù)組存儲10組溫濕度數(shù)據(jù)(溫度用浮點(diǎn)數(shù)組,濕度用整數(shù)數(shù)組)。2.初始化數(shù)組:溫度數(shù)組和濕度數(shù)組各10個數(shù)據(jù)。3.輸出監(jiān)測標(biāo)準(zhǔn):溫度≤35℃且濕度≤80%。4.遍歷數(shù)組,對每組數(shù)據(jù):輸出當(dāng)前組號、溫度值和濕度值。判斷是否超標(biāo)(溫

溫馨提示

  • 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

提交評論