lesson9數據的組織結構一一維數組課件_第1頁
lesson9數據的組織結構一一維數組課件_第2頁
lesson9數據的組織結構一一維數組課件_第3頁
lesson9數據的組織結構一一維數組課件_第4頁
lesson9數據的組織結構一一維數組課件_第5頁
已閱讀5頁,還剩61頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2022/12/19電氣與信息工程學院計算機系制作Lesson9數據的組織2022/12/16電氣與信息工程學院計算機系制作Lesso2022/12/19電氣與信息工程學院計算機系制作學習目標:31學會使用數組處理程序中的數據2022/12/16電氣與信息工程學院計算機系制作學習目標:2022/12/19電氣與信息工程學院計算機系制作3數組概念2向量數學定義:一組既有大小又有方向的量例如:向量d:(1,3,4,6,5,2,0,8)向量b:(100,300,200,400)特點:1、是一組量2、有方向性,即每個數據在其中有位置2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2在C語言中,數組與向量對應,可以實現處理與向量相關的問題數組:若干類型相同的相關數據(變量)順序排列在一起例如:向量d:(1,3,4,6,5,2,0,8)465208132022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2數組類型的應用背景(處理向量問題)(1)同時存在若干個用來描述同一性質且不同個體的數據(向量)。(2)只有將這些數據組織在一起形成批量數據,使用循環進行處理。2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3一維數組3類型數組名[長度]定義數組一般形式:intarray[10]例:floatf[100];charch[5];所有元素都是int數組名長度:10注意:必須是常量數組:array2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3數組概念2數組名:d用位置(下標)表示。注:下標從0開始d[0]d[1]d[2]d[3]d[4]d[5]d[6]d[7]數組特性:1、有統一的名字,即數組名3、可通過變量在其中的位置來表示它2、多個變量有序的排列4、數組中的變量叫數組元素,它在其中的位置叫下標2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3一維數組3數組定義后的元素初值是隨機數一般需要我們來初始化inta[10]={1,2,3,4,5,6,9,0,12,-1};inta[]={11,22,33,44,55};inta[5]={1};1234569012-1省略時,長度為5,2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3一維數組3數組元素的引用<數組變量名>[<下標表達式>]例:d[3];#include<stdio.h>intmain(){intd[10]={1,0,4,2,3,4,5,6,30,40},s;s=d[0]+d[1]+d[4]+d[8];printf(“s=%d”,s);return0;}d[2]d[6]d2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3數組概念2例:從鍵盤輸入一個數,按二進制形式輸出分析:將一個數的所有二進制位看成一個向量例如:如果輸入的是82則是(0,1,0,1,0,0,1,0)問題轉換成如何求該向量2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2C語言中的數組可以表示向量則向量a(0,1,0,1,0,0,1,0)在C語言中就是01001001數組a因此問題轉換成如果給數組a中的元素賦值提問:如何賦值,有沒有規律?2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2從鍵盤輸入的是82d[7]=0d[6]=1d[5]=0d[4]=0d[3]=1d[2]=0d[1]=1d[0]=0最后按照順序輸出d[0]—d[7]的值

d[7]=n%2;n=n/2;d[6]=n%2;n=n/2;d[5]=n%2;n=n/2;d[4]=n%2;n=n/2;d[3]=n%2;n=n/2;d[2]=n%2;n=n/2;d[1]=n%2;n=n/2;d[0]=n%2;n=n/2;2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2思路1、定義一個數組,長度為82、定義變量n,i,n放所要轉換的數,i作為訪問數組中變量的位置3、從第7個開始,往前逐個給數組中的變量賦值4、從第0個開始,往后逐個輸出數組中的變量2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作流程圖2022/12/16電氣與信息工程學院計算機系制作流程圖2022/12/19電氣與信息工程學院計算機系制作3數組概念2#include<stdio.h> intmain(){intd[8],n,i;scanf("%d",&n);for(i=7;i>=0;i--){ d[i]=n%2; n=n/2;}for(i=0;i<=7;i++){ printf("%d",d[i]);}system("pause");return0;}2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組的妙用3例:輸出數列1,1,2,3,5,8……的前20項11235813213455思路:將數列看成一向量1、定義一個長度20個的數組表示向量2、根據位置關系逐個計算每個變量(元素)的值2022/12/16電氣與信息工程學院計算機系制作3數組的妙2022/12/19電氣與信息工程學院計算機系制作#include<stdio.h>#defineNUM100 intmain(){intf[NUM],i;f[0]=1;f[1]=1;for(i=2;i<NUM;i++){f[i]=f[i-1]+f[i-2];}

for(i=0;i<NUM;i++){printf(“%d,”,f[i]);}return0;}lesson9_01.c2022/12/16電氣與信息工程學院計算機系制作#incl2022/12/19電氣與信息工程學院計算機系制作3數組的妙用:課堂練習3求S=1/1+1/2+2/3+3/5+5/8+8/13+……后面20項的和分析s=1/1+1/2+2/3+3/5+5/8+……

式中各項都是11235813…數列中的值,將其求出來放在數組中,然后逐個相除2022/12/16電氣與信息工程學院計算機系制作3數組的妙2022/12/19電氣與信息工程學院計算機系制作3一維數組的基本操作4數組的賦值利用賦值語句為數組賦值

for(i=0;i<10;i++){vote[i]=0;}調用標準輸入函數為數組賦值

for(i=0;i<10;i++){scanf(“%d”,&vote[i]);}intvote[10];2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3一維數組的基本操作4數組的輸出

for(i=0;i<10;i++){printf(“%5d”,vote[i]);}intvote[10];2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3數組應用5數組大小最好用宏來定義,以適應未來可能的變化#defineSIZE10

inta[SIZE];注意:1、數組一旦定義,不能改變大小2、訪問數組元素時,下標不能超過長度,即下標有效范圍[0,len)3、數組間不能整體賦值2022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作3數組應用6如果有數組inta[10]={1,2,4,5,3,6,7,8,9,0};intb[10];如果需要使數組b中元素的值與a的一樣b=a(Ⅹ是錯誤的)正確做法for(i=0;i<10;i++)b[i]=a[i];2022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作3課堂練習6從鍵盤輸入某班10位同學C語言學習成績,輸出最高分2022/12/16電氣與信息工程學院計算機系制作3課堂練習2022/12/19電氣與信息工程學院計算機系制作3數組應用5例2:使用篩選法輸出18內的所有素數23456789101112131415161712180000000030042022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作#include<stdio.h>#include<math.h>#defineNUM18 intmain(){intdata[NUM],i,j,n;for(i=0;i<NUM;i++)/*給數組的元素賦值*/data[i]=i+1;n=sqrt(NUM);for(i=1;i<n;i++)/*將數組中非素數置成0*/for(j=i+1;j<NUM;j++)if(data[i]!=0&&data[j]%data[i]==0)data[j]=0;for(i=1;i<NUM;i++)/*輸出*/if(data[i]!=0)printf("%6d",data[i]);return0;}lesson9_02.c2022/12/16電氣與信息工程學院計算機系制作#incl2022/12/19電氣與信息工程學院計算機系制作3數組應用5例3:已知在一條鐵路上有十個站:

A,B,C,D,E,F,G,H,I,J,如下圖所示127ABCDEFGHJI10020056131389875火車票費用計算規則:當乘車距離<300公里時,每公里0.5元,>=300公里時,超過部分每公里0.3元,設計一個程序,輸入兩個站的站名,計算其應付的火車票費用882022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作3數組應用5問題分析使用數組保存相鄰站之間的距離通過站名計算乘車距離計算火車票費用2022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作#include<stdio.h>#defineNUM9 /*段數*/intmain(){intline[NUM]={100,200,56,131,38,98,75,88,127},i,distance=0; floatvalue;charstart,end,ctn;while(1){ printf("請輸入乘車起點站\n"); scanf("%c",&start);getchar(); printf("請輸入乘車終站\n"); scanf("%c",&end);getchar(); for(i=start-'A';i<end-'A';i++){ distance+=line[i]; } if(distance<300) value=0.5*distance; else value=0.5*300+0.35*(distance-300); printf("%c站-->%c站的火車票費用為%.2f元\n",start,end,value);printf("是否繼續(Y/N)"); scanf("%c",&ctn);getchar(); if(ctn!='Y')break; system("cls");}return0;}lesson9_03.c2022/12/16電氣與信息工程學院計算機系制作#incl2022/12/19電氣與信息工程學院計算機系制作3數組應用5根據需求對數據進行統計

為了滿足特定的需要,對一組數據的某些特征進行統計是一項經常遇到的基本操作。例如,統計一段文本中某個字符出現的頻率;統計學生考試的平均成績等等都屬于統計操作。統計操作的結果往往是通過對所有數據進行掃描、判斷或綜合加工得到的。在C程序中,參與統計操作的批量數據可以用一維數組來組織,具體統計過程可以通過邏輯判斷、累計、算術運算等基本操作手段實現。

2022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作例4:統計一段文本中每個英文字母出現的次數。分析:定義一個數組letter,存放英文字母出現的次數00000000letterA的次數B的次數C的次數循環字符數組,針對每個字母,找到其在數組letter中的對應位置,然后加13數組應用52022/12/16電氣與信息工程學院計算機系制作例4:統計2022/12/19電氣與信息工程學院計算機系制作00000000letterA的次數B的次數C的次數如何確定每個字母在letter中的位置呢?A對應letter[0]B對應letter[1]C對應letter[2]下標:0‘A’-’A’下標:1‘B’-’A’下標:2‘C’-’A’3數組應用52022/12/16電氣與信息工程學院計算機系制作000002022/12/19電氣與信息工程學院計算機系制作#include<stdio.h>#defineNUM26intmain(){intletter[NUM]={0}; charch;inti;printf("\nEntertextline\n");while((ch=getchar())!='\n'){ if('A'<=ch&&ch<='Z'){ /*檢測是否為大寫字母*/letter[ch-'A']=letter[ch-'A']+1;}elseif('a'<=ch&&ch<='z')/*檢測是否為小寫字母*/letter[ch-'a']=letter[ch-'a']+1;}

for(i=0;i<NUM;i++){/*輸出每個英文字母出現的次數*/printf("\n\'%c\':%d",'A'+i,letter[i]);}return0;}lesson9_04.c2022/12/16電氣與信息工程學院計算機系制作#incl2022/12/19電氣與信息工程學院計算機系制作3課后練習7將一個數組逆序。例如,輸入12345678910

輸出10987654321從鍵盤輸入10個數,求最大值和最小值的差2022/12/16電氣與信息工程學院計算機系制作3課后練習2022/12/19電氣與信息工程學院計算機系制作Lesson9數據的組織2022/12/16電氣與信息工程學院計算機系制作Lesso2022/12/19電氣與信息工程學院計算機系制作學習目標:31學會使用數組處理程序中的數據2022/12/16電氣與信息工程學院計算機系制作學習目標:2022/12/19電氣與信息工程學院計算機系制作3數組概念2向量數學定義:一組既有大小又有方向的量例如:向量d:(1,3,4,6,5,2,0,8)向量b:(100,300,200,400)特點:1、是一組量2、有方向性,即每個數據在其中有位置2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2在C語言中,數組與向量對應,可以實現處理與向量相關的問題數組:若干類型相同的相關數據(變量)順序排列在一起例如:向量d:(1,3,4,6,5,2,0,8)465208132022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2數組類型的應用背景(處理向量問題)(1)同時存在若干個用來描述同一性質且不同個體的數據(向量)。(2)只有將這些數據組織在一起形成批量數據,使用循環進行處理。2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3一維數組3類型數組名[長度]定義數組一般形式:intarray[10]例:floatf[100];charch[5];所有元素都是int數組名長度:10注意:必須是常量數組:array2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3數組概念2數組名:d用位置(下標)表示。注:下標從0開始d[0]d[1]d[2]d[3]d[4]d[5]d[6]d[7]數組特性:1、有統一的名字,即數組名3、可通過變量在其中的位置來表示它2、多個變量有序的排列4、數組中的變量叫數組元素,它在其中的位置叫下標2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3一維數組3數組定義后的元素初值是隨機數一般需要我們來初始化inta[10]={1,2,3,4,5,6,9,0,12,-1};inta[]={11,22,33,44,55};inta[5]={1};1234569012-1省略時,長度為5,2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3一維數組3數組元素的引用<數組變量名>[<下標表達式>]例:d[3];#include<stdio.h>intmain(){intd[10]={1,0,4,2,3,4,5,6,30,40},s;s=d[0]+d[1]+d[4]+d[8];printf(“s=%d”,s);return0;}d[2]d[6]d2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3數組概念2例:從鍵盤輸入一個數,按二進制形式輸出分析:將一個數的所有二進制位看成一個向量例如:如果輸入的是82則是(0,1,0,1,0,0,1,0)問題轉換成如何求該向量2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2C語言中的數組可以表示向量則向量a(0,1,0,1,0,0,1,0)在C語言中就是01001001數組a因此問題轉換成如果給數組a中的元素賦值提問:如何賦值,有沒有規律?2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2從鍵盤輸入的是82d[7]=0d[6]=1d[5]=0d[4]=0d[3]=1d[2]=0d[1]=1d[0]=0最后按照順序輸出d[0]—d[7]的值

d[7]=n%2;n=n/2;d[6]=n%2;n=n/2;d[5]=n%2;n=n/2;d[4]=n%2;n=n/2;d[3]=n%2;n=n/2;d[2]=n%2;n=n/2;d[1]=n%2;n=n/2;d[0]=n%2;n=n/2;2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組概念2思路1、定義一個數組,長度為82、定義變量n,i,n放所要轉換的數,i作為訪問數組中變量的位置3、從第7個開始,往前逐個給數組中的變量賦值4、從第0個開始,往后逐個輸出數組中的變量2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作流程圖2022/12/16電氣與信息工程學院計算機系制作流程圖2022/12/19電氣與信息工程學院計算機系制作3數組概念2#include<stdio.h> intmain(){intd[8],n,i;scanf("%d",&n);for(i=7;i>=0;i--){ d[i]=n%2; n=n/2;}for(i=0;i<=7;i++){ printf("%d",d[i]);}system("pause");return0;}2022/12/16電氣與信息工程學院計算機系制作3數組概念2022/12/19電氣與信息工程學院計算機系制作3數組的妙用3例:輸出數列1,1,2,3,5,8……的前20項11235813213455思路:將數列看成一向量1、定義一個長度20個的數組表示向量2、根據位置關系逐個計算每個變量(元素)的值2022/12/16電氣與信息工程學院計算機系制作3數組的妙2022/12/19電氣與信息工程學院計算機系制作#include<stdio.h>#defineNUM100 intmain(){intf[NUM],i;f[0]=1;f[1]=1;for(i=2;i<NUM;i++){f[i]=f[i-1]+f[i-2];}

for(i=0;i<NUM;i++){printf(“%d,”,f[i]);}return0;}lesson9_01.c2022/12/16電氣與信息工程學院計算機系制作#incl2022/12/19電氣與信息工程學院計算機系制作3數組的妙用:課堂練習3求S=1/1+1/2+2/3+3/5+5/8+8/13+……后面20項的和分析s=1/1+1/2+2/3+3/5+5/8+……

式中各項都是11235813…數列中的值,將其求出來放在數組中,然后逐個相除2022/12/16電氣與信息工程學院計算機系制作3數組的妙2022/12/19電氣與信息工程學院計算機系制作3一維數組的基本操作4數組的賦值利用賦值語句為數組賦值

for(i=0;i<10;i++){vote[i]=0;}調用標準輸入函數為數組賦值

for(i=0;i<10;i++){scanf(“%d”,&vote[i]);}intvote[10];2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3一維數組的基本操作4數組的輸出

for(i=0;i<10;i++){printf(“%5d”,vote[i]);}intvote[10];2022/12/16電氣與信息工程學院計算機系制作3一維數組2022/12/19電氣與信息工程學院計算機系制作3數組應用5數組大小最好用宏來定義,以適應未來可能的變化#defineSIZE10

inta[SIZE];注意:1、數組一旦定義,不能改變大小2、訪問數組元素時,下標不能超過長度,即下標有效范圍[0,len)3、數組間不能整體賦值2022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作3數組應用6如果有數組inta[10]={1,2,4,5,3,6,7,8,9,0};intb[10];如果需要使數組b中元素的值與a的一樣b=a(Ⅹ是錯誤的)正確做法for(i=0;i<10;i++)b[i]=a[i];2022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作3課堂練習6從鍵盤輸入某班10位同學C語言學習成績,輸出最高分2022/12/16電氣與信息工程學院計算機系制作3課堂練習2022/12/19電氣與信息工程學院計算機系制作3數組應用5例2:使用篩選法輸出18內的所有素數23456789101112131415161712180000000030042022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作#include<stdio.h>#include<math.h>#defineNUM18 intmain(){intdata[NUM],i,j,n;for(i=0;i<NUM;i++)/*給數組的元素賦值*/data[i]=i+1;n=sqrt(NUM);for(i=1;i<n;i++)/*將數組中非素數置成0*/for(j=i+1;j<NUM;j++)if(data[i]!=0&&data[j]%data[i]==0)data[j]=0;for(i=1;i<NUM;i++)/*輸出*/if(data[i]!=0)printf("%6d",data[i]);return0;}lesson9_02.c2022/12/16電氣與信息工程學院計算機系制作#incl2022/12/19電氣與信息工程學院計算機系制作3數組應用5例3:已知在一條鐵路上有十個站:

A,B,C,D,E,F,G,H,I,J,如下圖所示127ABCDEFGHJI10020056131389875火車票費用計算規則:當乘車距離<300公里時,每公里0.5元,>=300公里時,超過部分每公里0.3元,設計一個程序,輸入兩個站的站名,計算其應付的火車票費用882022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作3數組應用5問題分析使用數組保存相鄰站之間的距離通過站名計算乘車距離計算火車票費用2022/12/16電氣與信息工程學院計算機系制作3數組應用2022/12/19電氣與信息工程學院計算機系制作#include<stdio.h>#defineNUM9 /*段數*/intmain(){intline[NUM]={100,200,56,131,38,98,75,88,127},i,distance=0; floatvalue;charstart,end,ctn;while(1){ printf("請輸入乘車起點站\n"); scanf("%c",&start);getchar(); printf("請輸入乘車終站\n"); scanf("%c",&end);getchar(); for(i=start-'A';i<end-'A';i++){ distance+=line[i]; } if(distance<300) value=0.5*distance; else value=0.5*300+0.35*(distance-300); printf("%c站-->%c站的火車票費用為%.2f元\n",start,end,value);printf("是否繼續(Y/N)"); scanf("%c",&ctn);getchar(); if(ctn!='Y')break; system("cls");}return0;}lesson9_03.c2022/12/1

溫馨提示

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

評論

0/150

提交評論