一維數組課件《C語言程序設計》同步教學_第1頁
一維數組課件《C語言程序設計》同步教學_第2頁
一維數組課件《C語言程序設計》同步教學_第3頁
一維數組課件《C語言程序設計》同步教學_第4頁
一維數組課件《C語言程序設計》同步教學_第5頁
已閱讀5頁,還剩29頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

C語言程序設計

2023翻轉課堂實用教程7.1一維數組1234導入數組導入案例數組的定義引用初始化存儲方式知識點數組的使用案例案例分析練習數組的使用練習題導入案例(1)案例7.1.1:輸入5個整數,分別表示5名應屆畢業生的月薪,計算并輸出這5名應屆畢業生的平均月薪(小數點后保留2位小數)。解決步驟:(1)采用循環求和方式計算出總和,(2)然后除以個數就可以得到平均值。注意:在計算平均數時建議用實數類型保存和,這樣在用和除以個數時得到的均值也是實數。導入案例(1)#include<stdio.h>intmain(){ inti,salary; doubleaverage,sum=0; for(i=0;i<5;i++){ scanf("%d",&salary); sum=sum+salary; } average=sum/5; printf("%.2f",average); return0;}輸入數據:70008100750069007300輸出數據:7360.00運行結果案例7.1.1程序代碼導入案例(2)案例7.1.2:輸入5個整數,分別表示5名應屆畢業生的月薪,計算并輸出這5名應屆畢業生的平均月薪(小數點后保留兩位小數),以及高于平均月薪的工資數。本例題要求輸出所有大于平均月薪的工資數,此時就需要保存輸入的所有月薪,等平均值月薪計算出來后,再將高于平均月薪的工資數輸出。導入案例(2)intmain(){inti,salary1,salary2,salary3,salary4,salary5;doubleaverage,sum=0;scanf("%d",&salary1);scanf("%d",&salary2);scanf("%d",&salary3);scanf("%d",&salary4);scanf("%d",&salary5);sum=sum+salary1+salary2+salary3+salary4+salary5;average=sum/5;printf("平均月薪為:%.2f\n",average);printf("高于平均月薪的工資數為:");if(salary1>average)printf("%d\n",salary1);if(salary2>average)printf("%d\n",salary2);if(salary3>average)printf("%d\n",salary3);if(salary4>average)printf("%d\n",salary4);if(salary5>average)printf("%d\n",salary5);return0;}輸入:70006500710068007000輸出:平均月薪為:6880.00高于平均月薪的工資數為:700071007000運行結果案例7.1.2程序代碼如果此時應屆畢業生人數由5名變為10名、100名,如何解決?7.1.1一維數組知識點數組:若干相同類型的數據的集合數組中每一個數據叫做數組元素。元素均具有相同的數據類型,具有統一的變量名即數組名,并用不同編號來區分每個元素。數組的概念可以等同于班級中的小組,假如小組1有10名學生,為這10名學生依次編號為0、1、2...9,用小組1的0號學生、小組1的1號學生…小組1的9號學生就可以找到這10名學生。1、一維數組的定義一維數組的定義方式為:

數據類型名數組名[數組長度];舉例://定義一個含有10個整型數據的數組arrayintarray[10];//定義一個含有20個雙精度浮點型數據的數組numdoublenum[20];//定義一個含有30個字符型數據的數組strcharstr[30];7.1.1一維數組知識點每個元素的類型整型常量,指出元素個數,稱為數組長度合法標識符在定義數組時,[]方括號中的數值是數組中元素的個數2、一維數組的引用一維數組中各個元素的引用方式:

數組名[元素的下標];7.1.1一維數組知識點(1) 先定義,再引用。(2) 數組中按照元素的順序,從0開始為每個元素進行編號,這個編號稱為下標,合理的下標取值依次為:0、1...(數組長度-1),分別對應著數組中第一個元素、第二個元素...最后一個元素。(3) 下標也可以為整型表達式,其取值范圍為[0,數組長度-1],不在這個范圍內的下標值為越界,越界會導致溢出。上溢或者下溢會導致程序出現不可預料的錯誤。(4) 只能逐個引用數組元素,不能一次性引用整個數組。對數組元素的引用是自由的,通過數組名和元素下標即可唯一確定一個數組元素。在引用時,[]方括號中數值給出了將要引用的元素的下標值。7.1.1一維數組知識點以下關于數組的說法,不正確的選項為:引用數組元素時,數組下標可以是整形常量或者整形表達式2、一維數組的引用一維數組中各個元素的引用方式:

數組名[元素的下標];7.1.1一維數組知識點舉例: intarray[10];array[0]、array[1]、array[2]、array[3]、array[4]、array[5]、array[6]、array[7]、array[8]、array[9]

0

1

2

3

4

5

6

7

8

97.1.1一維數組知識點現定義了一維數組inta[4];關于數組元素的引用,正確的選項為:3、一維數組的初始化(1)在定義數組時初始化

數據類型名數組名[數組長度]={元素初值表};7.1.1一維數組知識點在定義數組時,根據元素初值表中給出的元素的個數,分三種情況為數組進行初始化:①元素初值表給出所有元素值②元素初值表只給出部分元素值③沒有元素初值表3、一維數組的初始化(1)在定義數組時初始化

數據類型名數組名[數組長度]={元素初值表};7.1.1一維數組知識點①元素初值表給出所有元素值賦值的原則為:將初始表中給出的初值依次賦值給全部數組元素。舉例:intarray[10]={1,2,3,4,5,6,7,8,9,10};等價于a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5,a[5]=6,a[6]=7,a[7]=8,a[8]=9,a[9]=10。若對所有元素賦值,可以省略數組長度,但不建議省略元素初值表中的初值個數不能超過數組長度。3、一維數組的初始化(1)在定義數組時初始化

數據類型名數組名[數組長度]={元素初值表};7.1.1一維數組知識點②元素初值表只給出部分元素值賦值的原則為:將初始表中給出的初值依次賦值給數組元素,其余元素自動賦值為0。舉例:intnum[10]={1,2,3};等價于num[0]=1,num[1]=2,num[2]=3,num[3]~num[9]均為0。如何給全部元素賦初值為0intnum[10]={0};3、一維數組的初始化(1)在定義數組時初始化

數據類型名數組名[數組長度]={元素初值表};7.1.1一維數組知識點③沒有元素初值表分兩種情況:普通數組intgrade[10];//動態數組,所有元素的值是一個隨機值。定義時加上static關鍵字的靜態數組staticintgrade[10];//若沒有對靜態數組元素賦初值,所有元素自動被賦初值0。3、一維數組的初始化(2)在定義數組后,單獨對數組元素賦值7.1.1一維數組知識點賦值的原則為:此時需要挨個為數組元素賦值。舉例:①

intgrade[10];

grade[0]=80,grade[1]=90,grade[2]=85,grade[3]=75;

其他沒有賦值的元素,其值為隨機值。②for(i=0;i<10;i++) scanf("%d",&grade[i]);//是否正確?intscore[20];score[20]={80,90};4、一維數組的存儲方式系統根據每個元素的數據類型、元素的個數在內存中分配一塊連續的內存空間用于存放該數組。數組名便是這塊連續內存空間的首地址/起始地址。7.1.1一維數組知識點舉例

intarray[10]={1,2,3,4,5,6,7,8,9,10};4、一維數組的存儲方式系統根據每個元素的數據類型、元素的個數在內存中分配一塊連續的內存空間用于存放該數組。數組名便是這塊連續內存空間的首地址/起始地址。7.1.1一維數組知識點舉例

intarray[10]={1,2,3,4,5,6,7,8,9,10};內存單元下標01234567894、一維數組的存儲方式系統根據每個元素的數據類型、元素的個數在內存中分配一塊連續的內存空間用于存放該數組。數組名便是這塊連續內存空間的首地址/起始地址。7.1.1一維數組知識點舉例

intarray[10]={1,2,3,4,5,6,7,8,9,10};內存單元12345678910下標01234567894、一維數組的存儲方式系統根據每個元素的數據類型、元素的個數在內存中分配一塊連續的內存空間用于存放該數組。數組名便是這塊連續內存空間的首地址/起始地址。7.1.1一維數組知識點舉例

intarray[10]={1,2,3,4,5,6,7,8,9,10};數組引用a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]內存單元12345678910下標0123456789整形數據在內存中占4個字節,若首地址為80004、一維數組的存儲方式系統根據每個元素的數據類型、元素的個數在內存中分配一塊連續的內存空間用于存放該數組。數組名便是這塊連續內存空間的首地址/起始地址。7.1.1一維數組知識點舉例

inta[10]={1,2,3,4,5,6,7,8,9,10};數組引用a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]內存單元12345678910下標0123456789地址信息8000808480888092809681008104810881128116整形數據在內存中占4個字節,若首地址為8000案例分析一維數組的編程方法7.1.4分析一維世界中新冠病毒感染情況7.1.5在一系列數據中刪除第k個數據演示數組中每個元素的賦值和輸出方法演示查找某個數據,并刪除數組中元素的方法。下標作為循環變量,采用循環結構對數組進行操作巧用數組下標,簡化問題解決。演示下標的其他用處,如坐標點。7.1.2一維數組案例分析7.1.3放射加密方法對一系列數據進行加密案例7.1.3:用放射加密方法對一系列數據進行加密,并輸出加密后的數據。要求:輸入10個數據,保存到數組中,并采用放射加密法對每個數據進行加密,最后輸出加密后的10個數據。加密的公式:加密后數據=(7*數據+21)%26。問題分析:定義整型數組num保存這10個數據,數組長度定為10,定義i作為數組的下標,并將數組的下標i作為循環變量,通過循環變量i從0變到n-1,來逐個訪問數組中的a[0]到a[n-1],并對其進行相應的操作。7.1.2一維數組案例分析#include<stdio.h>#defineN10/*定義符號常量N為10,后續代碼N的地方*/intmain(void){inti;/*i既作為數組下標,又作為循環變量*/intnum[N]={50,34,40,68,60,45,39,47,51,30};for(i=0;i<N;i++){num[i]=(7*num[i]+21)%26;

}

printf("放射加密后的數據為:\n");for(i=0;i<N;i++){printf("%d",num[i]);}return0;}放射加密后的數據為:72515325248121423運行結果案例7.1.3程序代碼7.1.2一維數組案例分析案例7.1.4:分析一維世界中新冠病毒感染情況要求:從2019年12月開始,新冠病毒在全球傳播開來,該病毒傳染性極強,只要某人與攜帶了該病毒的感染者在活動范圍內有交集,則有被感染的可能。為了簡化運算,假設人生活在一維世界中,Ta到過的地方為一個區間[begin,end],其中0≤begin≤end≤200。假設有二個人,A、B,其中A為新冠病毒感染者,B為健康者,依次給出4個整數beginAendAbeginBendB,分別為這A、B二人的活動區間,請分析B是否有被感染的可能。7.1.2一維數組案例分析案例7.1.4:分析一維世界中新冠病毒感染情況問題分析:在一維世界中,人的活動范圍為[0,200],共201個點,定義intmark[201]={0}來記錄這201點是否為感染者的活動點。假設0≤i≤200,若mark[i]=0,表示i這個點不是感染者的活動點,若mark[i]=1,表示i這個點是感染者的活動點。7.1.2一維數組案例分析O感染者A的活動范圍beginAendAmark[beginA]~mark[endA]賦值為1beginBendBB循環判斷mark[beginB]~mark[endB]中的值是否有1的情況#include<stdio.h>intmain(){intn,m,i,j,flag=0;//flag為0表示未被感染intbeginA,endA,beginB,endB;intmark[201]={0};//用于在0到200這些坐標點標記scanf("%d%d%d%d",&beginA,&endA,&beginB,&endB);//標記A活動過的坐標點for(i=beginA;i<=endA;i++){mark[i]=1;

//表示i這個坐標點為A感染者的活動點。}for(j=beginB;j<=endB;j++){/*若j這個坐標點已經被標記為1,說明B的活動點j是A感染者活動的點*/if(mark[j]==1){flag=1;//可能被感染時flag置為1break;}}if(flag==1)//通過flag的值來判斷B是否可能被感染printf("B有可能被感染!");elseprintf("B暫無可能被感染!");return0;}運行結果1:5068345B暫無可能被感染!運行結果2:23453490B有可能被感染!運行結果案例7.1.4程序代碼數組的下標還可以有其他的含義,比如坐標點。解決某些實際問題時,好好利用下標,會簡化問題的求解。7.1.2一維數組案例分析#include<stdio.h>intmain(){intn,m,i,j,flag=0;//flag為0表示未被感染intbeginA,endA,beginB,endB;intmark[201]={0};//用于在0到200這些坐標點標記scanf("%d%d%d%d",&beginA,&endA,&beginB,&endB);//標記A活動過的坐標點for(i=beginA;i<=endA;i++){mark[i]=1;

//表示i這個坐標點為A感染者的活動點。}for(j=beginB;j<=endB;j++){/*若j這個坐標點已經被標記為1,說明B的活動點j是A感染者活動的點*/if(mark[j]==1){flag=1;//可能被感染時flag置為1break;}}if(flag==1)//通過flag的值來判斷B是否可能被感染printf("B有可能被感染!");elseprintf("B暫無可能被感染!");return0;}運行結果1:5068345B暫無可能被感染!運行結果2:23453490B有可能被感染!運行結果案例7.1.4程序代碼數組的下標還可以有其他的含義,比如坐標點。解決某些實際問題時,好好利用下標,會簡化問題的求解。7.1.2一維數組案例分析案例7.1.5:在一系列數據中刪除第k個數據要求:輸入10個整數,將其保存到數組中。再輸入一個要刪除數據的下標index(從0開始),若該index值合法(0~9),則將該位置的數據從數組中刪除,不合法則不執行任何操作。問題分析:定義長度為10的arr數組來保存10個數據,i作為數組的下標,index來保存要刪除數據的下標值,刪除了該下標處的數據后,該位置后面的數據要往前移動。7.1.2一維數組案例分析#include<stdio.h>intmain(){intarr[10]={0};intindex,i;for(i=0;i<=9;i++)scanf("%d",&arr[i]);scanf("%d",&index);if(index>=0&&index<=9){//先輸出最開始的數組printf("原始數組為:\n");for(i=0;i<=9;

溫馨提示

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

評論

0/150

提交評論