版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章數(shù)組華北電力大學(xué)控制與計(jì)算機(jī)高級(jí)語言程序設(shè)計(jì)(C
)1第6章數(shù)組
本章重點(diǎn)介紹:6.1一維數(shù)組6.2二維數(shù)組6.3字符數(shù)組與字符串2023/12/52問題:從鍵盤上輸入某門功課的30個(gè)成績(jī),并且按照從小到大的順序排序。分析:30個(gè)成績(jī)是同一種類型,必須同時(shí)保存,再通過對(duì)它們比較大小實(shí)現(xiàn)排序問題:如何保存30個(gè)成績(jī),才方便使用解決方法1:定義30個(gè)變量(不可?。┙鉀Q方法2:用一組存儲(chǔ)空間連續(xù)的變量,并且變量名可用循環(huán)控制(可取)78608770905076…84x[0]x[1]x[2]x[29]2023/12/53第6章數(shù)組為了方便地使用一組具有相同數(shù)據(jù)類型的數(shù)據(jù),C語言提供了一種構(gòu)造數(shù)據(jù)類型:數(shù)組數(shù)組是一個(gè)相同數(shù)據(jù)類型變量的集合體。例如:存儲(chǔ)30個(gè)成績(jī),定義一個(gè)具有30個(gè)實(shí)型變量的實(shí)型數(shù)組
float
score[30];其中:score是數(shù)組名。該數(shù)組有30個(gè)數(shù)組元素,
score[0],score[1],…score[29]??梢源娣?0個(gè)成績(jī)。數(shù)組元素在數(shù)組中的位置,稱為下標(biāo)。數(shù)組元素也稱為下標(biāo)變量。2023/12/54數(shù)組在內(nèi)存的存放數(shù)組元素的下標(biāo)從0開始一維數(shù)組的數(shù)組元素在內(nèi)存里按順序存放。數(shù)組元素是帶有下標(biāo)的變量,可以存放數(shù)據(jù);數(shù)組名不是變量,是一個(gè)地址常量,代表數(shù)組的首地址,即數(shù)組中第1個(gè)元素的地址。s與&s[0]相等,都表示第一個(gè)元素的地址s[0]s[1]s[2]s[3]s[4]9134677284低地址高地址s數(shù)組ints[5];數(shù)組元素地址的兩種表示方法:&s[0],&s[1]…,&s[4]s,s+1,s+2,…,s+42023/12/556.1一維數(shù)組例如:
inta[10],b[20];charstr[80];
floatscore[5];
“數(shù)據(jù)類型”:是數(shù)組元素的數(shù)據(jù)類型?!皵?shù)組名”:遵循C語言標(biāo)識(shí)符規(guī)則?!罢统A勘磉_(dá)式”:表示數(shù)組中有多少個(gè)元素,即數(shù)組的長(zhǎng)度。它可以是整型常量、整型常量表達(dá)式或符號(hào)常量。
6.1.1一維數(shù)組的定義數(shù)據(jù)類型
數(shù)組名[整型常量表達(dá)式];2023/12/56以下數(shù)組定義是正確的:#defineN10……floatscore1[N],score2[N];intnum[10+N];charc[26];以下數(shù)組定義是不正確的:intarray(10);intn=5;floatscore[n];charstr[];6.1.1一維數(shù)組的定義(續(xù))數(shù)組定義之后,不能整體使用,只能使用數(shù)組中的數(shù)組元素—下標(biāo)變量2023/12/576.1.2數(shù)組元素的引用
格式:數(shù)組名[下標(biāo)表達(dá)式]例如:intx[5];數(shù)組x中有5個(gè)數(shù)組元素,分別是x[0]、x[1]、x[2]、x[3]、x[4],可以存放5個(gè)int型整數(shù)。數(shù)組元素又稱為下標(biāo)變量。其中:(1)下標(biāo)表達(dá)式的值必須是整型表達(dá)式(2)取值范圍是:0--(數(shù)組的長(zhǎng)度-1)2023/12/586.1.2數(shù)組元素的引用例如:輸入5個(gè)學(xué)生成績(jī)
for(i=0;i<5;i++)
scanf("%f",&score[i]);例如:intfib[20],n;fib[0]=fib[1]=1;for(n=2;n<=19;n++)
fib[n]=fib[n-1]+fib[n-2];
for(n=0;n<=19;n++)if(n%10==0)printf(“%8d\n”,fib[n]);elseprintf(“%8d”,fib[n]);1,1,2,3,5,8,13,…score+i用數(shù)組求斐波那契數(shù)列的前20項(xiàng)和2023/12/596.1.2數(shù)組元素的引用(續(xù))inta[10];/*√,這里的[]是一個(gè)標(biāo)記*/a[10]=90;/*下標(biāo)越界*/a[3]=30;/*√,這里的[]是一個(gè)運(yùn)算符*/
C編譯系統(tǒng)不做越界檢查,如果引用的數(shù)組元素超出數(shù)組范圍會(huì)破壞其他變量的值。兩個(gè)10的意義不一樣inta[10];該語句中的10表示數(shù)組a中有10個(gè)下標(biāo)變量a[10]中的10越界2023/12/5106.1.2數(shù)組元素的引用(續(xù))
[]是下標(biāo)運(yùn)算符,引用數(shù)組元素時(shí),先根據(jù)數(shù)組的首地址和下標(biāo)數(shù),計(jì)算出該元素的實(shí)際地址,再取出該地址的內(nèi)容進(jìn)行操作。如引用score[2]:(1)計(jì)算
2000+2*4=2008(2)取出2008的內(nèi)容2000H2004H2008H200CH2110Hscore[0]score[1]score[2]score[3]score[4]91.534.567.572.084.0如:floatscore[5];...printf(“%6.1f\n”,score[2]);一維數(shù)組中的數(shù)組元素的地址計(jì)算公式:
數(shù)組首元素地址+下標(biāo)或數(shù)組名+下標(biāo)2023/12/5116.1.3一維數(shù)組的初始化初始化:在定義數(shù)組時(shí)給數(shù)組元素賦初值。1.在定義數(shù)組時(shí),對(duì)全部數(shù)組元素賦初值例如:inta[5]={0,1,2,3,4};此時(shí)可以省略數(shù)組長(zhǎng)度,例如:inta[]={0,1,2,3,4};
2.在定義數(shù)組時(shí),對(duì)部分?jǐn)?shù)組元素賦初值例如:inta[5]={1,2,3};系統(tǒng)為其余元素賦0。3.當(dāng)初值的個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù)時(shí),編譯出錯(cuò)例如:
inta[5]={0,1,2,3,4,5};
2023/12/5126.1.4一維數(shù)組應(yīng)用舉例【例6.1】將10個(gè)人的成績(jī)輸入計(jì)算機(jī)后按逆序顯示。#defineN10#include<stdio.h>voidmain(){inti;floatscore[N];for(i=0;i<N;i++)scanf(“%f”,&score[i]);for(i=N-1;i>=0;i--)printf("%6.1f",score[i]);printf("\n");}運(yùn)行情況如下:
67748992346783957378
78.073.095.083.067.034.092.089.074.067.0scanf(“%f”,score+i);2023/12/513【例6.2】輸入5個(gè)整數(shù),找出最大數(shù)和最小數(shù)所在位置,并把二者對(duì)調(diào),然后輸出。思路:求最大/小值采用打擂臺(tái)的方法。定義一維數(shù)組a,讀入被比較的數(shù)。定義變量max:存放最大值,min:存放最小值
k:存放最大值下標(biāo),j:存放最小值下標(biāo)各數(shù)依次與擂主進(jìn)行比較,
若a[i]>max則:max=a[i];k=i;若a[i]<min則:min=a[i];j=i;
當(dāng)所有的數(shù)都比較完之后,將a[j]=max;a[k]=min;輸出a數(shù)組。2023/12/514#include<stdio.h>voidmain(){inta[5],max,min,i,j,k;for(i=0;i<5;i++)scanf("%d",&a[i]);
min=a[0];max=a[0];
j=k=0;//這條語句必要嗎?for(i=1;i<5;i++){if(a[i]<min){min=a[i];j=i;}if(a[i]>max){max=a[i];k=i;}}
a[j]=max;a[k]=min;for(i=0;i<5;i++)printf("%5d",a[i]);printf("\n");}程序運(yùn)行情況如下:57231
512372023/12/515#include<stdio.h>voidmain()//用max記最大值的下標(biāo),min記最小值的下標(biāo){inta[5],max,min,i,t;for(i=0;i<5;i++)scanf("%d",&a[i]);
min=0;max=0;for(i=1;i<5;i++){if(a[i]<a[min])min=i;
if(a[i]>a[max])max=i;}
t=a[max];a[max]=a[min];a[min]=t;for(i=0;i<5;i++)printf("%5d",a[i]);printf("\n");}程序運(yùn)行情況如下:57231
51237如果只要求出它們的最大值和最小值和平均值,程序如何修改?2023/12/516#include<stdio.h>voidmain(){inta[5],max,min,i,j;floataver;for(i=0;i<5;i++)scanf("%d",&a[i]);
min=a[0];max=a[0];aver=a[0];for(i=1;i<5;i++){if(a[i]<min)min=a[i];if(a[i]>max)max=a[i];aver+=a[i];}aver=aver/5;printf(“max=%5d,min=%5d,aver=%7.2f\n",max,min,aver);}2023/12/517【例6.4】冒泡法排序(從小到大)。
以6個(gè)數(shù):3、7、5、6、8、0為例。第一趟排序(通過兩兩比較將最大的數(shù)放到最后)情況如下:
375680第一次3和7比較,不交換375680第二次7和5比較,交換357680第三次7和6比較,交換356780第四次7和8比較,不交換356780第五次8和0比較,交換356708在第一趟排序中,從前向后兩兩比較,6個(gè)數(shù)比較了5次,把6個(gè)數(shù)中的最大數(shù)8排在了最后。2023/12/518冒泡法排序(續(xù))第二趟排序情況如下:
356708第一次3和5比較,不交換356708第二次5和6比較,不交換356708第三次6和7比較,不交換356708第四次7和0比較,交換356078
在第二趟排序中,最大數(shù)8不用參加比較,其余的5個(gè)數(shù)比較了4次,把其中的最大數(shù)7排在最后,排出78。
2023/12/519冒泡法排序(續(xù))以此類推:第三趟比較3次,排出678第四趟比較2次,排出5678第五趟比較1次,排出35678最后還剩下1個(gè)數(shù)0,不需再比較,得到排序結(jié)果:035678冒泡法排序遵循兩個(gè)規(guī)律:(1)外循環(huán)控制趟數(shù)j:n個(gè)數(shù),需要n-1趟,j的范圍[1,n-1](或[0,n-2])(2)內(nèi)循環(huán)完成兩兩比較:在[0,n-1-j](或[0,n-2-j])范圍內(nèi),從第1個(gè)數(shù)開始,相鄰的兩個(gè)數(shù)比較2023/12/520冒泡法排序(續(xù))從上述過程可以看到:n個(gè)數(shù)要比較n-1趟,而在第j趟比較中,要進(jìn)行n-j次兩兩比較。
冒泡法排序for(i=0;i<N;i++)輸入a[i]for(j=1;j<N;j++)for(i=0;i<N-j;i++)a[i]>a[i+1]TFa[i]與a[i+1]交換輸出a[0]~a[N-1]2023/12/521#defineN100#include<stdio.h>voidmain(){inta[N];inti,j,t,n;printf(“請(qǐng)輸入%d個(gè)整數(shù),用空格隔開\n”,n);
for(i=0;i<n;i++)scanf("%d",&a[i]);for(j=1;j<=n-1;j++)
/*控制趟數(shù)*/
for(i=0;i<n-j;i++)
/*控制每趟兩兩比較的次數(shù)*/
if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(“從小到大的排序結(jié)果:\n");
for(i=0;i<n;i++)printf("%4d",a[i]);
printf(“\n”);}程序運(yùn)行情況如下:請(qǐng)輸入6個(gè)整數(shù),用空格隔開375680
從小到大的排序結(jié)果:0356782023/12/522以6個(gè)數(shù):3、7、5、6、8、0為例。思路:第一趟:將第一個(gè)數(shù)依次和后面的數(shù)比較,如果后面的某數(shù)小于第一個(gè)數(shù),則兩個(gè)數(shù)交換,比較結(jié)束后,第一個(gè)數(shù)則是最小的數(shù)。第二趟:將第二個(gè)數(shù)依次和后面的數(shù)比較,如果后面的某數(shù)小于第二個(gè)數(shù),則兩個(gè)數(shù)交換,比較結(jié)束后,第二個(gè)數(shù)則是次小的數(shù);……?!纠?.5】交換法排序(從小到大)。2023/12/523【例6.5】交換法排序(續(xù))交換法排序for(i=0;i<N;i++)輸入a[i]for(j=0;j<N-1;j++)for(i=j+1;i<N;i++)a[j]>a[i]TFa[j]與a[i]交換輸出a[0]~a[N-1]2023/12/524#defineN5#include<stdio.h>voidmain(){inta[N];inti,j,t;for(i=0;i<N;i++)scanf("%d",&a[i]);for(j=0;j<N-1;j++)/*確定趟數(shù)
*/for(i=j+1;i<N;i++)/*每一趟中比較的次數(shù)*/if(a[j]>a[i]){t=a[j];a[j]=a[i];a[i]=t;}printf("Thesortednumbers:\n");…}程序運(yùn)行情況如下:9678658640
Thesortednumbers:40657886962023/12/525以6個(gè)數(shù):3、7、5、6、8、0為例。思路:第一趟:通過
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年金華市武義縣三上數(shù)學(xué)期末綜合測(cè)試試題含解析
- 2024年白酒收藏回購(gòu)合同3篇
- 2025中國(guó)移動(dòng)甘肅公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)電子科技集團(tuán)限公司在招企業(yè)校招+社招高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)建筑一局(集團(tuán))限公司審計(jì)部工程項(xiàng)目審計(jì)崗(商務(wù))招聘2人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)交響樂團(tuán)公開招聘50人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年重慶市屬事業(yè)單位形式歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院事業(yè)單位招聘9人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年江西吉安市市直事業(yè)單位招考工作人員高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年安徽黃山黟縣部分事業(yè)單位招聘31人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 中醫(yī)內(nèi)科學(xué)目錄
- 小學(xué)少先隊(duì)活動(dòng)課贛教三年級(jí)上冊(cè)主題一唱響嘹亮的隊(duì)歌勇敢前進(jìn)
- 《穿井得一人》《桑中生李》閱讀練習(xí)及答案
- “大綜合一體化”行政執(zhí)法改革工作自查報(bào)告
- DB5110∕T 37-2021 地理標(biāo)志產(chǎn)品 資中冬尖加工技術(shù)規(guī)范
- (3)110KV配電裝置安裝單位工程質(zhì)量驗(yàn)收評(píng)定表1
- 課程設(shè)計(jì)之年產(chǎn)90000噸丙酮水連續(xù)精餾塔的設(shè)計(jì)
- 贊比亞礦產(chǎn)資源及礦業(yè)開發(fā)前景分析
- 餐飲前臺(tái)餐具與雜件清單
- 河南省建設(shè)工程安全監(jiān)督備案申請(qǐng)表
- 海拔高度與氣壓、空氣密度、重力加速度對(duì)照表
評(píng)論
0/150
提交評(píng)論