版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第3章一維數(shù)組C語言程序設計
—基礎篇2022/11/2內(nèi)容概述1.一維數(shù)組的定義。2.一維數(shù)組元素的引用。3.一維數(shù)組的初始化。4.C程序調(diào)試5.算法描述2022/11/2教學目標1.掌握一維數(shù)組的概念、定義方法。2.掌握一維數(shù)組初始化和元素的引用方法。3.能用一維數(shù)組設計簡單的程序。4.掌握VC6.0下調(diào)試工具的使用5.掌握用流程圖描述算法的方法2022/11/2
在程序的實際處理過程中,很多時候需要處理的數(shù)據(jù)不止一個,而是一批數(shù)據(jù)類型相同且具有聯(lián)系的數(shù)據(jù),如要想表示某班50個學生的C程序設計課程成績,某部門40名員工年終考核成績的錄入與統(tǒng)計等,都屬于這類問題。3.1為什么要使用數(shù)組2022/11/2編程計算全班40人某門課的平均成績
#include"stdio.h"voidmain(){inta,i,sum=0,avg;
for(i=0;i<40;i++){
scanf("%d",&a);/*輸入學生成績*/sum=sum+a;}avg=sum/40;printf("avg=%d\n",avg);}一個變量被循環(huán)使用,無法保存40個人的成績。定義40個變量?太繁瑣C語言提供了一種簡單的構造數(shù)據(jù)類型——數(shù)組來解決這個問題。
2022/11/2數(shù)組實現(xiàn)
#include"stdio.h"voidmain(){
inta[40],i,sum=0,avg;
for(i=0;i<40;i++){
scanf("%d",&a[i]);/*輸入學生成績到數(shù)組中*/
sum=sum+a[i];}avg=sum/40;printf("avg=%d\n",avg);}2022/11/2
數(shù)組是一組具有相同類型且在內(nèi)存中有序排列的數(shù)據(jù)集合。數(shù)組中的每個元素都具有相同的數(shù)據(jù)類型,用數(shù)組名加下標的方式來表示。數(shù)組元素的下標從0開始。數(shù)組可分為一維數(shù)組、二維數(shù)組和高維數(shù)組。本章主要介紹一維數(shù)組的定義和使用。
2022/11/23.2.1一維數(shù)組的定義方式在C語言中使用數(shù)組必須先進行定義。馬廄一維數(shù)組的定義方式為:
類型說明符數(shù)組名[常量表達式]; 其中:
類型說明符是任一種基本數(shù)據(jù)類型或構造數(shù)據(jù)類型。
數(shù)組名是用戶定義的數(shù)組標識符。
方括號中的常量表達式表示數(shù)據(jù)元素的個數(shù),也稱為數(shù)組的長度。例如:
inta[10];
定義整型數(shù)組a,有10個元素。
intb[10];定義實型數(shù)組b,有10個元素;3.2一維數(shù)組2022/11/2對于數(shù)組類型說明應注意以下幾點數(shù)組的類型實際上是指數(shù)組元素的取值類型。對于同一個數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。數(shù)組名的書寫規(guī)則應符合標識符的書寫規(guī)定。數(shù)組名不能與其它變量名相同。 例如:
inta;
inta[10]; 是錯誤的。4.方括號中常量表達式表示數(shù)組元素的個數(shù),其下標從0開始計算。例如inta[5],則數(shù)組a的5個元素分別為a[0]、a[1]、a[2]、a[3]、a[4]。2022/11/25.不能在方括號中用變量來表示元素的個數(shù),但是可以是符號常數(shù)或常量表達式。例如,#defineM5
inta[3+2],b[7+M];√但是下述說明方式是錯誤的。
intn=5;
int
a[n];×6.允許在同一個類型說明中,說明多個數(shù)組和多個變量。 例如:
inta,b,c,d,k1[10],k2[20];2022/11/23.2.2一維數(shù)組元素的引用數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素也是一種變量,其標識方法為數(shù)組名后跟一個下標。下標表示了元素在數(shù)組中的順序號。 數(shù)組元素的一般形式為:
數(shù)組名[下標]
其中:下標只能為整型常量或整型表達式。例如:
a[5] a[i+j] a[i++]
都是合法的數(shù)組元素。
下標從0開始,有5個元素的數(shù)組a[5]的元素為:
a[0],a[1],a[2],a[3],a[4]。2022/11/2【例】數(shù)組元素的引用#include<stdio.h>voidmain(){
inti,a[10]; for(i=0;i<=9;i++)
a[i]=i; for(i=9;i>=0;i--)
printf("%d",a[i]);}運行結果為:
9876543210思考:能否將第二個for循環(huán)語句用語句printf("%d",a);代替?
2022/11/23.2.3一維數(shù)組的初始化
初始化賦值的一般形式為:
類型說明符數(shù)組名[常量表達式]={值,值……值}; 其中在{}中的各數(shù)據(jù)值即為各元素的初值,各值之間用逗號間隔。2022/11/2C語言對數(shù)組的初始化賦值有以下幾點規(guī)定:1.可以只給部分元素賦初值。 當{}中值的個數(shù)少于元素個數(shù)時,只給前面部分元素賦值。例如:
inta[10]={0,1,2,3,4};
表示只給a[0]~a[4]5個元素賦值,而后5個元素自動賦0值。2.只能給元素逐個賦值,不能給數(shù)組整體賦值。 例如給十個元素全部賦1值,只能寫為:
inta[10]={1,1,1,1,1,1,1,1,1,1};
而不能寫為:
inta[10]=1;2022/11/23.可以在定義數(shù)組時對數(shù)組元素賦以初值,
例如:
inta[10]={0,1,2,3,4,5,6,7,8,9};
相當于a[0]=0;a[1]=1...a[9]=9;如果不給可初始化的數(shù)組賦初值,則全部元素均為0值。如給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個數(shù)。
例如:
inta[5]={1,2,3,4,5};
可寫為:
inta[]={1,2,3,4,5};
2022/11/2【例3.1】求一維數(shù)組元素的最大值并輸出其所對應的下標。
#defineN10#include"stdio.h"voidmain(){
int
i,max,max_i,a[N];
for(i=0;i<N;i++)
scanf("%d",&a[i]);
/*該循環(huán)輸入10個元素*/
max=a[0];max_i=0;
/*假設第一個元素最大*/
for(i=1;i<N;i++)/*max與數(shù)組其余9個元素依次比較*/if(a[i]>max){max=a[i];
max_i=i;/*記錄較大元素的位置*/}
printf("TheMaxNumberisa[%d]=%d\n",max_i,max);}3.2.4一維數(shù)組應用舉例2022/11/2Fibonacci數(shù)列具有如下特點:第1、2個數(shù)均為1,從第3項開始,每一個數(shù)都是其前兩項之和,即F1=1,F(xiàn)2=1,F(xiàn)n=Fn-2+Fn-1。我們用數(shù)組f來存放Fibonacci數(shù)列,這樣f[0]=f[1]=1;從f[2]以后的每一個元素f[i]=f[i-1]+f[i-2],可以用循環(huán)來實現(xiàn)。【例3.2】計算Fibonacci數(shù)列前20項,要求每行輸出5個數(shù)。
2022/11/2#include"stdio.h"voidmain(){
intf[20]={1,1},i;for(i=2;i<20;i++)
f[i]=f[i1]+f[i2];
printf("\n------------Fibonacci-----------\n");for(i=0;i<20;i++){printf("f[%2d]=%6d",i,f[i]);if((i+1)%5==0)printf("\n");}}2022/11/23.3C程序調(diào)試
添加輸出語句調(diào)試程序利用VC的調(diào)試工具調(diào)試程序2022/11/23.3.1利用輸出語句調(diào)試程序#include"stdio.h"voidmain(){
intn=12345,s=0,d;
while(n) {n=n/10; d=n%10; s=s+d; }
printf("sum=%d\n",s);}【例3.3】求整數(shù)n的各位數(shù)字之和(如n=12345,則1+2+3+4+5=15)出錯啦?。刻砑虞敵稣Z句printf("%3d",d);2022/11/2#include"stdio.h"voidmain(){
intn=12345,s=0,d;
while(n) { d=n%10; s=s+d;printf("%3d",d); n=n/10; }
printf("sum=%d\n",s);}結果正確,去掉輸出語句2022/11/23.3.2在VC下調(diào)試C程序VC為調(diào)試C程序提供了多種工具和多組方法,常用的方法有菜單法、工具欄法和功能鍵法。在VC窗口下的菜單欄和工具欄的空白處,點右鍵激活快捷菜單,選擇“編譯”菜單項,這時VC窗口就出現(xiàn)了調(diào)試工具欄。2022/11/2Restart重新執(zhí)行程序,功能鍵是Ctrl+Shift+F5。無論C源程序處于任何狀態(tài)(編輯、運行、調(diào)試),按下此按鈕均可使程序從編譯開始,逐步進入調(diào)試程序狀態(tài)。
StopDebugging停止程序調(diào)試,功能鍵是Shift+F5。當調(diào)試過程處于跟蹤程序執(zhí)行的狀態(tài)時,按下此按鈕,將停止調(diào)試程序,返回編輯狀態(tài)。編輯狀態(tài)下此按鈕無效。ShowNextStatement指示當前程序運行的語句行。
StepInto單步運行并且可進入函數(shù)內(nèi)部運行,功能鍵是F11。程序在調(diào)試過程中,按下此按鈕可單步跟蹤程序運行,與StepOver按鈕不同的是,該功能可進入函數(shù)內(nèi)部,繼續(xù)函數(shù)內(nèi)部的語句行跟蹤。
StepOver單步運行程序,功能鍵是F10。本按鈕的功能類似于F11,但它不進入函數(shù)內(nèi)部,它將每一條語句看作一步,包括函數(shù)調(diào)用語句。StepOut從當前函數(shù)中退出,功能鍵是Shift+F11。當程序運行至某個函數(shù)內(nèi)部時,按下此按鈕后,調(diào)試狀態(tài)即從函數(shù)內(nèi)部退出,返回到調(diào)用該函數(shù)的主函數(shù)的當前語句。RuntoCursor運行到當前光標位置,功能鍵是Ctrl+F10。當程序處于調(diào)試狀態(tài)時,為了跳過某程序段,可預先將光標定位在某語句行上,按下此按鈕,即可使程序直接運行到當前光標位置,從而節(jié)省了時間,加快了調(diào)試程序的步驟。2022/11/2
QuickWatch窗口可以快速觀察表達式的值,功能鍵是Shift+F9。當程序運行到某個關鍵語句行時,可以按下該按鈕,該窗口與調(diào)試界面中的監(jiān)視窗口類似,都可監(jiān)視變量的值。
Watch窗口可以設置觀察點。
Variables變量列表,簡單變量只顯示變量名和它的值;數(shù)組名前面有一個“”符號,Value列顯示它的地址值。
Registers寄存器列表,窗口中列出了所有寄存器的內(nèi)容。
Memory內(nèi)存列表,用戶可以在程序運行時,在“Watch”窗口中找到某個變量的地址或數(shù)組名的值(數(shù)組名本身是一個地址量),然后,將該值輸出“A地址”的文本框中,在內(nèi)存列表區(qū)立即就能看到它的存儲值,不過該值是一個十六進制的數(shù),并且,一個整型數(shù)占據(jù)四個字節(jié)的存儲區(qū)域。2022/11/2【例3.4】演示數(shù)組賦值及輸出的例子。#include"stdio.h"voidmain(){
inti,a[5];
for(i=0;i<5;i++) {
a[i]=i;
printf("%d",a[i]); }
printf("\n");}2022/11/2【例3.5】在有10個元素的數(shù)組中查找值為n的元素,找到則輸出其下標,否則,輸出“無此元素”。
#include"stdio.h"voidmain(){
inta[10]={1,3,6,0,12,9,7,15,10,20},n,i;
printf("請輸入要查找的數(shù)據(jù):");
scanf("%d",&n);
for(i=0;i<10;i++){
if(a[i]==n)
printf("元素%d的下標為%d\n",n,i);}
if(i>=10)
printf("無此元素");}2022/11/23.4.1算法的概念及特征解決某個問題或處理某個事件的方法和步驟,稱為算法。計算機算法:指使用計算機去解決問題的方法和步驟。計算機算法可分為兩大類:數(shù)值運算算法:求解數(shù)值;非數(shù)值運算算法:事務管理領域3.4算法及算法描述2022/11/2一個算法通常由一系列求解步驟來完成,各操作步驟之間有嚴格的順序關系,每一個步驟所規(guī)定的操作必須有明確的含義,不能存在二義性。計算機能夠在執(zhí)行有限的步驟后給出正確的結果。同一個問題,可以有不同的解決方法,即一個問題有多種算法。2022/11/2算法的特性有窮性:一個算法應包含有限的操作步驟而不能是無限的。確定性:算法中每一個步驟應當是確定的,而不能應當是含糊的、模棱兩可的。有效性:算法中每一個步驟應當能有效地執(zhí)行,并得到確定的結果。有零個或多個輸入。有一個或多個輸出。2022/11/2算法分析:求最大公約數(shù)的問題一般用輾轉相除法。該方法求最大公約數(shù)的具體步驟如下:先用小的數(shù)除大的數(shù),得第一個余數(shù);再用第一個余數(shù)除小的數(shù),得第二個余數(shù);又用第二個余數(shù)除第一個余數(shù),得第三個余數(shù);這樣逐次用后一個余數(shù)去除第一個余數(shù),直到余數(shù)是0為止,那么最后一個除數(shù)就是所求的最大公約數(shù)。(如果最后的除數(shù)是1,那么原來兩個數(shù)是互質(zhì)的?。纠?.6】給定兩個正整數(shù)m和n,求它們的最大公約數(shù)。
2022/11/2例如設m=18,n=12,余數(shù)用r表示。它們的最大公約數(shù)的求法如下:18/12商1余6,以n作m,以r作n,繼續(xù)相除;12/6商2余0,當余數(shù)為零時,所得n即為兩數(shù)的最大公約數(shù)。所以18和12兩數(shù)的最大公約數(shù)為6。2022/11/2其算法可以描述如下:(1)將兩個正整數(shù)存放到變量m和n中。(2)求余數(shù):計算m除以n,將所得余數(shù)存放到變量r中。(3)判斷余數(shù)是否為0:若余數(shù)為0則執(zhí)行第(5)步,否則執(zhí)行第(4)步。(4)更新被除數(shù)和余數(shù):將n的值存放到m中,將r的值存放到n中,并轉向第(2)步繼續(xù)循環(huán)執(zhí)行。(5)輸出n的當前值,算法結束。
2022/11/2用C語言實現(xiàn)的程序代碼如下:#include"stdio.h"voidmain(){
intm,n,r;
printf("pleaseinputmandn:");
scanf("%d%d",&m,&n);
r=m%n;while(r!=0)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設計管理系統(tǒng)vb
- 魯班軟件課程設計感想
- 圖書館經(jīng)典閱讀推廣實施方案
- 柴油機氣缸體 課程設計
- 城市綠化井場平整設計方案
- 課程設計營救機器人
- 差價協(xié)議合同模板
- 實體部門業(yè)績合同模板
- 合同模板全是正式合同
- 企業(yè)注冊 租房合同模板
- 元明粉比重表
- 房地產(chǎn)估價理論與方法重要公式整理
- 房地產(chǎn)項目投資成本測算參考表
- 提高護士對搶救藥品知曉率PDCA案例精編版
- 大學英語四級改錯題12篇
- 正余弦定理知識點權威總結18頁
- 國企紀檢監(jiān)察嵌入式監(jiān)督的探索與實踐
- 淺議小升初數(shù)學教學銜接
- 旁站監(jiān)理記錄(高區(qū)空調(diào))
- 嬰幼兒大腦發(fā)育第一ppt課件
- 核磁共振實驗報告
評論
0/150
提交評論