版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)組C語(yǔ)言程序設(shè)計(jì)目錄content數(shù)組的定義和應(yīng)用1數(shù)組在函數(shù)間的傳遞2程序設(shè)計(jì)舉例3數(shù)組:數(shù)組是有序數(shù)據(jù)的集合,即具有一定順序關(guān)系的若干變量的集合體.組成數(shù)組的變量稱為該數(shù)組的元素變量,簡(jiǎn)稱元素,用數(shù)組名后跟帶有方括號(hào)“[]”的下標(biāo)來(lái)唯一確定數(shù)組中的元素。C語(yǔ)言中有一維數(shù)組和多維數(shù)組本教材中多維數(shù)組只介紹二維數(shù)組相關(guān)內(nèi)容5.1數(shù)組的定義和應(yīng)用5.1.1一維數(shù)組的定義和應(yīng)用一維數(shù)組的定義:
[存儲(chǔ)類型]數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]例:inta[10];
它表示數(shù)組名為a,數(shù)組有10個(gè)元素。數(shù)組必須先有定義,然后再使用。C語(yǔ)言規(guī)定只逐個(gè)引用數(shù)組元素而不能一次引用整個(gè)數(shù)組。數(shù)組在內(nèi)存中存儲(chǔ)時(shí),是按下標(biāo)遞增的順序連續(xù)存儲(chǔ)各元素變量的值。定義語(yǔ)句中的常量表達(dá)式表示元素個(gè)數(shù),即數(shù)組長(zhǎng)度。5.1.1一維數(shù)組的定義和應(yīng)用應(yīng)用要點(diǎn):數(shù)組的下標(biāo)從0開始,下標(biāo)必須是整型量。
a[10]中,10表示a數(shù)組有10個(gè),下標(biāo)從0開始,這10個(gè)元素是a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],注意不能使用數(shù)組元素a[10]數(shù)組名表示數(shù)據(jù)存儲(chǔ)區(qū)域的首地址。數(shù)組的首地址也是第一個(gè)元素變量的地址intdata[5];首地址是data或&data[0]數(shù)組名是一個(gè)地址常量,不能向它賦值,也不能對(duì)它自加自減等對(duì)變量進(jìn)行操作的運(yùn)算5.1.1一維數(shù)組的定義和應(yīng)用數(shù)組的初始化數(shù)組的初始化就是在數(shù)據(jù)說明時(shí)對(duì)數(shù)組元素賦初值初始化方式:數(shù)組長(zhǎng)度與提供初值的個(gè)數(shù)不相等
intb[20]={1,2,3,4,5};數(shù)組長(zhǎng)度不能省掉,多余的元素都是0;b[0]=1;b[1]=2;b[2]=3;b[3]=4;b[4]=5;b[5]=b[6]=…=b[19]=0數(shù)組長(zhǎng)度與初值的個(gè)數(shù)相等intdata[5]={2,4,6,8,10};
data[0]=2;data[1]=4;data[2]=6;data[3]=8;data[4]=10;或:intdata[]={2,4,6,8,10};C不允許對(duì)數(shù)組的長(zhǎng)度作動(dòng)態(tài)定義數(shù)組下標(biāo)常量表達(dá)式中可以包括常量和符號(hào)常量,不能包含變量錯(cuò)誤的定義:(1)intn;scanf("%d",&n);inta[n];(2)intn=20;inta[n];5.1.1程序舉例例5.2 編程將一個(gè)從鍵盤輸入的整數(shù)序列按逆序重新存放并顯示,整數(shù)個(gè)數(shù)首先從鍵盤輸入;如要求輸入5個(gè)數(shù),原來(lái)的順序?yàn)?,6,5,4,1,要求改為1,4,5,6,8#include<stdio.h>voidmain(){inta[100];inti,j,n,temp;scanf("%d",&n);//輸入整數(shù)個(gè)數(shù)
printf("inputthenumbers:\n");for(i=0;i<n;i++)//輸入整數(shù)序列
{scanf("%d",&a[i]);}/*將整數(shù)序列依次從首尾向中間交換元素,從而實(shí)現(xiàn)逆序排列*/for(i=0,j=n-1;i<j;i++,j--){temp=a[j];a[j]=a[i];a[i]=temp;}printf("nowthenumbersare:\n");//輸出重排后的整數(shù)序列
for(i=0;i<n;i++){printf("%5d",a[i]);}}逐個(gè)元素輸入兩個(gè)數(shù)交換
運(yùn)行結(jié)果:5inputthenumbers:86541nowthenumbersare:145685.1.1程序舉例例5.3:輸入10個(gè)整數(shù)到一個(gè)數(shù)組中,調(diào)整這10個(gè)數(shù)組中的排列位置,使得其中最小的一個(gè)數(shù)成為數(shù)組的首元素.include<stdio.h>#defineSIZE10voidmain(){intm,k;//初始化inti,j;intdata[SIZE];printf("inputthesize");for(m=0;m<size;m++)//輸入數(shù)組中的值{scanf("%d",&data[m]);}
j=0;for(i=0;i<size;i++){if(data[i]<data[j])j=i;}
if(j>0)//如果最小值下標(biāo)不是0,則將該值和數(shù)組首項(xiàng)中的值交換{k=data[0];data[0]=data[j];data[j]=k;}printf("\n");for(m=0;m<size;m++)//輸出調(diào)整后的數(shù)組{printf("%4d",data[m]);}}符號(hào)常量比較數(shù)組中的值,記下最小值的下標(biāo)5.1.2二維數(shù)組的定義和應(yīng)用二維數(shù)組的定義:
[存儲(chǔ)類型]數(shù)據(jù)類型數(shù)組名[下標(biāo)][下標(biāo)]例:floata[3][3]={1,2,3,4,5,6,7,8,9};
存放順序與存儲(chǔ)方式:a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]1234567895.1.2二維數(shù)組的定義和應(yīng)用二維數(shù)組的理解:對(duì)于所定義的數(shù)組a,可看成是三個(gè)一維數(shù)組a[0],a[1],a[2];比如a[0]是二維數(shù)組中一個(gè)特殊元素,它是包含三個(gè)元素的一維數(shù)組。
5.1.2二維數(shù)組的定義和應(yīng)用二維數(shù)組的初始化:對(duì)全部元素都賦予初值inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};inta[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};定義數(shù)組時(shí)對(duì)第一維的下標(biāo)可以不聲明,但第二維長(zhǎng)度不能省略inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};可以將所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi),按數(shù)組排序的順序?qū)Ω髟刭x初值對(duì)部分元素賦初值inta[3][3]={{1,2},{1,2,3},{1}}它只對(duì)各行前面幾列賦初值,其余元素值自動(dòng)為05.1.2程序舉例#include<stdio.h>voidmain(){inti,j,max;introw=0,column=0;inta[3][3]={{1,2,3},{2,-3,4},{9,4,7}};/*數(shù)組初始化*/
max=a[0][0];
/*以下循環(huán)將數(shù)組中的元素比較,記下最大值的下標(biāo)*/for(i=0;i<3;i++){for(j=0;j<3;j++){if(a[i][j]>=max){max=a[i][j];row=i;column=j;}}}printf("max=%d,row=%d,column=%d\n",max,row,column);/*輸出最大值以及其行下標(biāo)和列下標(biāo)*/}
運(yùn)行結(jié)果:max=9,row=2,column=0例5.4有一個(gè)3×3矩陣,要求編程求出其中最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。5.1.2程序舉例分析:以主對(duì)角線為對(duì)稱軸,交換所有對(duì)稱點(diǎn)元素對(duì)稱點(diǎn)元素:行列位置交換例5.5輸入一個(gè)4×4的整數(shù)矩陣,然后將之轉(zhuǎn)置并顯示這個(gè)轉(zhuǎn)置后的矩陣。5.1.2程序舉例#include<stdio.h>#defineSIZE4voidmian(){intdata[SIZE][SIZE],i,j,d;
for(i=0;i<SIZE;i++)//輸入矩陣中的值
{for(j=0;j<SIZE;j++){scanf("%d",&data[i][j]);}}for(i=0;i<SIZE-1;i++)//矩陣轉(zhuǎn)置{for(j=i+1;j<SIZE;j++){//交換所有對(duì)稱點(diǎn)元素
d=data[i][j];data[i][j]=data[j][i];data[j][i]=d;}}for(i=0;i<SIZE;i++){printf("\n");for(j=0;j<SIZE;j++)printf("%4d",data[i][j]);}}5.2數(shù)組在函數(shù)間的傳遞值傳遞方式數(shù)組元素作為函數(shù)實(shí)參,用法與變量相同,單向傳遞例5.6求一整型數(shù)組的平均值,要求主函數(shù)中輸入數(shù)據(jù),通過調(diào)用函數(shù)求平均值。在數(shù)組元素個(gè)數(shù)較小的情況下,可以直接傳遞數(shù)組元素。
#inldue<stdio.h>floataver(floatx,floaty,floatz);voidmain(){floata[3],temp;inti;printf("inputthenumbers:\n");for(i=0;i<3;i++)//輸入整數(shù)序列{scanf("%f",&a[i]);}temp=aver(a[0],a[1],a[2]);printf(“aver=%f”,temp);}floataver(floatx,floaty,floatz){return(x+y+z)/3;}實(shí)參為數(shù)組元素地址傳遞方式5.2數(shù)組在函數(shù)間的傳遞數(shù)組在函數(shù)間的傳遞由于涉及到指針的概念,具體將在指針一章中詳細(xì)論述,本節(jié)僅通過例子來(lái)描述數(shù)組在函數(shù)間傳遞的過程。例5.7從鍵盤輸入十個(gè)整數(shù)存入一個(gè)一維數(shù)組中,編寫一函數(shù)求其最大值。#inldue<stdio.h>intfindmax(inta[]);voidmain(){inta[10];inti,temp;printf("inputthenumbers:\n");for(i=0;i<10;i++)//輸入整數(shù)序列{scanf("%d",&a[i]);}temp=find(a);printf(“themax=%d”,temp);}
intfindmax(inta[]){intmax;max=a[0];for(i=1;i<10;i++){if(a[i]>max)max=a[i];}returnmax;}實(shí)參為數(shù)組首地址5.3程序設(shè)計(jì)舉例思想:首先進(jìn)行第一遍排序,確定第一個(gè)數(shù)為基準(zhǔn)數(shù),認(rèn)為它為最小數(shù),然后依此在所有其它數(shù)中找比它小的最小數(shù),如有則交換,這樣就找到第一個(gè)最小數(shù);第二遍排序是對(duì)除第一個(gè)數(shù)據(jù)外的數(shù)據(jù)序列進(jìn)行選擇排序,以此類推共進(jìn)行N-1遍排序,就能將N個(gè)數(shù)排序;排序方法:(1)選擇排序法
(2)冒泡排序法例5.8編一程序要求對(duì)已知的10個(gè)數(shù),按從小到大進(jìn)行排序。(1)選擇排序法對(duì)N個(gè)數(shù)要進(jìn)行N-1遍排序,每一遍的比較次數(shù)隨遍數(shù)的增加而減小(遍數(shù)+次數(shù)=N)。5.3程序設(shè)計(jì)舉例方法1:邊比較邊交換方法2:邊找邊設(shè)立標(biāo)記#include<stdio.h>#defineN10voidmain(){inti,j,t;inta[10];for(i=0;i<10;i++)//輸入元素
scanf("%d",&a[i]);for(i=0;i<N-1;i++){for(j=i+1;j<N;j++){if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}}}
for(i=0;i<10;i++)printf("%d\t",a[i]);}#include<stdio.h>#defineN10voidmain(){inti,j,k,t;
inta[10];for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++){j=i;//記錄最小值下標(biāo)
for(k=i+1;k<N;k++)
{if(a[k]<a[j])j=k;}
if(j!=i){t=a[i];a[i]=a[j];a[j]=t;}}
for(i=0;i<10;i++)printf("%d\t",a[i]);}5.3程序設(shè)計(jì)舉例方法1:邊比較邊交換方法2:邊找邊設(shè)立標(biāo)記剩余元素與第一個(gè)元素進(jìn)行比較,若小于第一個(gè)元素,則該元素與第一個(gè)元素交換剩余元素與第一個(gè)元素進(jìn)行比較,若小于第一個(gè)元素,則記錄該元素的下標(biāo)5.3程序設(shè)計(jì)舉例思想:首先進(jìn)行第一遍排序,第一個(gè)元素開始,將相鄰的兩個(gè)數(shù)比較,將小的數(shù)字放在前面,大的放在后面,依次往后比較,比較到最后一組后,產(chǎn)生一個(gè)最大值;第二編排序是除去產(chǎn)生的最大值,對(duì)剩下的序列進(jìn)行類似第一遍冒泡排序。依此類推,進(jìn)行N-1遍排序就能將N個(gè)數(shù)按從小到大排序;同樣的方法也能按從大到小排序。(2)冒泡排序法對(duì)N個(gè)數(shù)要進(jìn)行N-1遍排序,每一遍比較次數(shù)隨遍數(shù)的增加而減小(遍數(shù)+次數(shù)=N),比較的順序是從前往后。5.3程序設(shè)計(jì)舉例#include<stdio.h>#defineN10voidmain(){inti,j,t;
inta[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);for(i=0;i<N-1;i++){
for(j=0;j<N-1-i;j++){if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(i=0;i<10;i++)printf("%d\t",a[i]);}冒泡排序法當(dāng)前元素與下一個(gè)元素進(jìn)行比較,若大于下一個(gè)元素,則該兩元素交換5.3程序設(shè)計(jì)舉例voidBubSort(inta[],intn){inti,j,t;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}}冒泡排序法-函數(shù)實(shí)現(xiàn)當(dāng)前元素與下一個(gè)元素進(jìn)行比較,若大于下一個(gè)元素,則該兩元素交換#include<stdio.h>#defineN10voidBubSort(inta[],intn);voidmain(){inti,j,t;
inta[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);BubSort(a,10);
for(i=0;i<10;i++)printf("%d\t",a[i]);}冒泡排序法-main()5.3程序設(shè)計(jì)舉例(1)第一個(gè)矩陣的列數(shù)必須等于第二個(gè)矩陣的行數(shù),一個(gè)m行n列的矩陣乘以一個(gè)n行p列的矩陣,其結(jié)果是一個(gè)m行p列的矩陣;例5.9計(jì)算如下所示兩個(gè)矩陣的乘積分析:(2)若矩陣A乘以矩陣B,則結(jié)果矩陣C中每個(gè)元素的值為:
5.3程序設(shè)計(jì)舉例#include<stdio.h>voidmain(){intvalueA[3][4]={{2,3,-5,0},//數(shù)組初化
{12,-1,27,8},{91,22,-32,1}};intvalueB[4][5]={{25,13,65,0,5},{-2,0,18,10,45},{53,33,3,9,0},{7,61,26,-37,-1}};intvalueC[3][5]={{0}};//定義
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年保密協(xié)議文檔
- 2025年產(chǎn)假補(bǔ)償協(xié)議
- 2025年醫(yī)療服務(wù)營(yíng)養(yǎng)配餐協(xié)議
- 2025年代理商代理傭金費(fèi)協(xié)議
- 2025年大型露天演出場(chǎng)地租用協(xié)議
- 2025年生存保險(xiǎn)受益人變更申請(qǐng)
- 《用友業(yè)務(wù)流程》課件
- 二零二五版增值稅發(fā)票委托第三方服務(wù)框架協(xié)議3篇
- 事業(yè)單位2024年度勞動(dòng)合同定制版
- 二零二五年度知識(shí)產(chǎn)權(quán)侵權(quán)賠償合同補(bǔ)充協(xié)議3篇
- 2024-2030年中國(guó)連續(xù)性腎臟替代治療(CRRT)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 跨學(xué)科主題學(xué)習(xí):實(shí)施策略、設(shè)計(jì)要素與評(píng)價(jià)方式(附案例)
- 場(chǎng)地委托授權(quán)
- 2024年四川省成都市龍泉驛區(qū)中考數(shù)學(xué)二診試卷(含答案)
- 項(xiàng)目工地春節(jié)放假安排及安全措施
- 印染廠安全培訓(xùn)課件
- 紅色主題研學(xué)課程設(shè)計(jì)
- 胸外科手術(shù)圍手術(shù)期處理
- 裝置自動(dòng)控制的先進(jìn)性說明
- 《企業(yè)管理課件:團(tuán)隊(duì)管理知識(shí)點(diǎn)詳解PPT》
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)二 軟文的寫作
評(píng)論
0/150
提交評(píng)論