C語言程序設計教程 課件 第6.1 一維數(shù)組_第1頁
C語言程序設計教程 課件 第6.1 一維數(shù)組_第2頁
C語言程序設計教程 課件 第6.1 一維數(shù)組_第3頁
C語言程序設計教程 課件 第6.1 一維數(shù)組_第4頁
C語言程序設計教程 課件 第6.1 一維數(shù)組_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章數(shù)組主講教師:賀愛香理論知識數(shù)組概述1一維數(shù)組

2二維數(shù)組3

字符數(shù)組與字符串4要求:1.理解為什么要使用數(shù)組2.熟練掌握一維數(shù)組的使用方法3.掌握二維數(shù)組的使用方法教學目標要求:4.理解字符數(shù)組和字符串的異同5熟練使用字符串輸入/輸出函數(shù)和字符串處理函數(shù)6.會應用數(shù)組解決實際問題教學重點:數(shù)組的定義和初始化;數(shù)組的基本操作。教學重難點教學難點:數(shù)組的應用選擇排序和冒泡算法數(shù)組在內存中占據(jù):一片連續(xù)的存儲區(qū)…..內存a[0]…..a[1]a[2]a[18]a[19]數(shù)組概述inta[20];//聲明數(shù)組描述多個同類型數(shù)據(jù)inta,b,c;//聲明變量描述單個數(shù)據(jù)VC++中,一個整型變量占用4

個字節(jié)內存。abc數(shù)組元素數(shù)組元素的下標數(shù)組名數(shù)組概述數(shù)組是在內存中連續(xù)存儲的同類型數(shù)據(jù)的集合。數(shù)組元素屬于同一數(shù)據(jù)類型,在內存中占有連續(xù)的存儲空間。數(shù)組元素具有相同的名字,即數(shù)組名,用下標來相互區(qū)分,如score[0]、score[1]等。每一個數(shù)組元素都可看作是變量。數(shù)組可分為一維數(shù)組、二維數(shù)組和多維數(shù)組。一維數(shù)組一維數(shù)組的聲明一維數(shù)組的初始化一維數(shù)組元素的引用一維數(shù)組的聲明

一維數(shù)組聲明的形式為:

數(shù)據(jù)類型數(shù)組名[整型常量表達式];eg:intarr[5];

表示聲明了一個名為arr的一維整型數(shù)組,數(shù)組長度為5,即有5個數(shù)組元素,分別為:

arr[0]arr[1]arr[2]arr[3]arr[4]

每個元素都為int型。一維數(shù)組的聲明聲明數(shù)組時需注意以下幾點:①數(shù)組名用合法的標識符命名,與變量的命名方法相同。②方括號中的數(shù)字表示數(shù)組的長度,即數(shù)組元素的個數(shù),必須為整數(shù)。數(shù)組長度可以用常量、符號常量或常量表達式表示,但不能是變量。eg:#defineMAX20intn=5;inta[n];//錯誤。數(shù)組長度不能用變量表示。

intb[MAX];//正確。數(shù)組長度可以用符號常量表示。

floatc[2+5];//正確。數(shù)組長度可以用常量表達式表示,c數(shù)組長度為7。③數(shù)組元素的下標從0開始,下標范圍為0~數(shù)組長度-1。一維數(shù)組的初始化在聲明數(shù)組的同時給各數(shù)組元素賦初值,稱為數(shù)組的初始化。數(shù)組的初始化有以下幾種形式:

1.對全部的數(shù)組元素賦初值。

eg:intnum[5]={1,2,3,4,5};

將數(shù)組元素的初值依次放在一對花括號內,數(shù)據(jù)間用逗號分隔。經(jīng)過上例的定義及初始化之后,num[0]值為1,num[1]值為2,num[2]值為3,num[3]值為4,num[4]值為5。

內存num[0]num[1]num[2]num[3]num[4]12345一維數(shù)組的初始化2.對數(shù)組的部分元素賦初值。

eg:intnum[5]={1,2,3};

當初值個數(shù)小于數(shù)組長度時,系統(tǒng)會自動給沒有提供初值的數(shù)組元素補以初值0。上例相當于:

intnum[5]={1,2,3,0,0};

注意:當初值的個數(shù)大于數(shù)組長度時,作語法錯誤處理。

eg:intnum[5]={1,2,3,4,5,6};//錯誤。num數(shù)組只有5個元素一維數(shù)組的初始化3.可以通過初值個數(shù)定義數(shù)組的長度。

eg:intnum[5]={1,2,3,4,5};

可以寫成

intnum[]={1,2,3,4,5};

數(shù)組長度可以省略,系統(tǒng)會根據(jù)初值個數(shù)確定數(shù)組的長度為5。

注意:數(shù)組長度僅在對數(shù)組初始化時才能省略,如果只是聲明數(shù)組,數(shù)組長度不能省略。

eg:intnum[];//編譯錯誤一維數(shù)組元素的引用可以用“數(shù)組名[下標]”的形式來引用一維數(shù)組元素,每一個數(shù)組元素都可看作是變量。

eg:intnum[2],sum;

//將1賦給下標為0的數(shù)組元素num[0]=1;//將鍵入的整數(shù)賦給下標為1的數(shù)組元素。注意:也要用&運算符取數(shù)組元素地址scanf(“%d”,&num[1]);//將兩個數(shù)組元素的值相加賦給變量sumsum=num[0]+num[1];//輸出兩個數(shù)組元素的值printf("%3d%3d",num[0],num[1]);一維數(shù)組元素的引用格式:數(shù)組名[下標]下標為整型表達式,確定所引用元素的序號注意:下標不能越界#include<stdio.h>Voidmain(){inti,d[9]={1,2,3,4,5,6,7,8,9};i=d[0]+d[8];d[3]=d[0]+d[d[3]]*2;d[9]=i;d[0]=d[d[3]-i];for(i=1;i<=9;i++)printf(“d[%d]=%d\n”,i,d[i]);}/*下標越界*/9=/*i=9時下標越界*/數(shù)組名表示每個數(shù)組的首地址a表示&a[0]一維數(shù)組元素的引用一維數(shù)組操作的基本算法

#include<stdio.h>voidmain(){intnum[6],i;printf("請輸入6個整數(shù):\n");for(i=0;i<6;i++)scanf("%d",&num[i]);printf("數(shù)組元素輸出為:\n");for(i=0;i<6;i++)

printf("num[%d]:%d\n",i,num[i]);}數(shù)組操作通常和循環(huán)結合使用,數(shù)組元素的下標通過循環(huán)變量i來控制。這里是聲明數(shù)組時的數(shù)組長度,不能用變量表示這里是數(shù)組元素的下標,可以用變量表示。#include<stdio.h>voidmain(){inti,a[7];for(i=0;i<=6;i++)scanf(“%d”,&a[i]);for(i=6;i>=0;i--)printf(“%2d”,a[i]);}aa[0]a[1]a[2]a[3]a[4]a[5]a[6]程序運行結果:(從鍵盤輸入:2345678)輸出:87654322345678一維數(shù)組應用舉例例1

將數(shù)組中元素逆序輸出例2

將數(shù)組中元素逆序存放例3

求數(shù)組中元素的和及平均值例4

求數(shù)組中元素的最大數(shù)、最小數(shù)例5

Fibonacci數(shù)列例6

在已排好序的數(shù)組中插入一個元素,仍然有序例初始關鍵字3849761397n=665第一趟384965977613第二趟384965971376第三趟384913976576第四趟381349976576第五趟133849976576【例1】用冒泡法對10個數(shù)排序(從小到大)a[0]不用,數(shù)組下標從1開始(1)比較第一個數(shù)與第二個數(shù),若為逆序a[1]>a[2],則交換;然后比較第二個數(shù)與第三個數(shù);依次兩兩比較,直至第n-1個數(shù)和第n個數(shù)比較為止——第一趟起泡排序,比較n-1次,結果最大的數(shù)被安置在最后一個元素位置上(2)對前n-1個數(shù)進行第二趟起泡排序,比較n-2次,結果使次大的數(shù)被安置在第n-1個元素位置(3)重復上述過程,共經(jīng)過n-1趟起泡排序后,排序結束(4)結論:需要n-1趟起泡排序,第j趟需要n-j次比較排序過程總結:兩兩比較,大者下沉,小者上浮#include<stdio.h>voidmain(){inta[11],i,n,t;//i表示數(shù)組下標,n表示遍歷次數(shù),t用來交換數(shù)據(jù)

printf(“Input10numbers:\n”);for(i=1;i<11;i++) scanf(“%d”,&a[i]);printf(“\n”);for(n=1;n<=9;n++)//控制趟數(shù) for(i=1;i<=10-n;i++)

//控制比較的次數(shù) if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumbers:\n");for(i=1;i<11;i++) printf("%d",a[i]);printf(“\n”);}起泡排序的核心程序段分析for(n=1;n<=9;n++)for(i=1;i<=10-n;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}外層循環(huán)的變量n表示總的起泡的趟數(shù)內層循環(huán)實現(xiàn)一趟起泡操作交換相臨數(shù)組元素的值思考:對于N個數(shù),采用起泡排序,總共要比較多少次?

對于本來有序的序列,要比較多少次?根據(jù)起泡排序的思想,寫出數(shù)列

127683945一趟起泡排序后的序列?(N-1)+(N-2)+….+1=N(N-1)/2(N-1)+(N-2)+….+1=N(N-1)/2根據(jù)起泡排序的思想,寫出數(shù)列(小到大)

127683945一趟起泡排序后的序列?127683945126738459126738945126739854ABCD提交單選題1分【例2】用簡單選擇法對10個數(shù)排序(1)首先通過n-1次比較,從n個數(shù)中找出最小的,將它與第一個數(shù)交換—第一趟選擇排序,結果最小的數(shù)被安置在第一個元素位置上(2)再通過n-2次比較,從剩余的n-1個數(shù)中找出關鍵字次小的記錄,將它與第二個數(shù)交換—第二趟選擇排序(3)重復上述過程,共經(jīng)過n-1趟排序后,排序結束排序過程例初始:[49386597761327]kji=11349一趟:13[386597764927]i=22738二趟:1327[6597764938]三趟:132738[97764965]四趟:13273849[769765]五趟:1327384965[9776]六趟:132738496576[97]kkkkjjjjjjjjjj輸入n個數(shù)給a[1]到a[n]fori=1ton-1forj=i+1tona[j]<a[k]真假k=j輸出a[1]到a[n]k=ia[i]

a[k]i!=k真假#include<stdio.h>voidmain(){inta[11],i,j,k,x;printf("Input10numbers:\n");for(i=1;i<11;i++)scanf("%d",&a[i]);printf("\n");for(i=1;i<10;i++){k=i;for(j=i+1;j<=10;j++)if(a[j]<a[k])k=j;if(i!=k){x=a[i];a[i]=a[k];a[k]=x;}}

溫馨提示

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

評論

0/150

提交評論