C語言項目化教程(基于智能制造軟件)教案 項目5 汽車銷售數(shù)據(jù)(數(shù)組)_第1頁
C語言項目化教程(基于智能制造軟件)教案 項目5 汽車銷售數(shù)據(jù)(數(shù)組)_第2頁
C語言項目化教程(基于智能制造軟件)教案 項目5 汽車銷售數(shù)據(jù)(數(shù)組)_第3頁
C語言項目化教程(基于智能制造軟件)教案 項目5 汽車銷售數(shù)據(jù)(數(shù)組)_第4頁
C語言項目化教程(基于智能制造軟件)教案 項目5 汽車銷售數(shù)據(jù)(數(shù)組)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGE課題任務5.1顯示某品牌新能源汽車一年的銷售額(一維數(shù)組的輸入與輸出)課型講練授課班級授課時數(shù)2教學目標1、掌握一維數(shù)組的定義、引用、初始化2、掌握數(shù)組的輸入和輸出教學重點1、一維數(shù)組的定義、引用、初始化2、一維數(shù)組實際應用教學難點數(shù)組的應用-從0開始學情分析數(shù)組概念的理解、數(shù)組在內(nèi)存中的存儲實質(zhì),地址的概念都應在剛接觸數(shù)組時有所了解。學生組成一個班級利用學號組織。但是學號是從1開始,數(shù)組的開始從0開始,容易產(chǎn)生“失誤”。教學效果教后記任務5.1顯示某品牌新能源汽車一年的銷售額(一維數(shù)組的輸入與輸出)5.1.1任務目標創(chuàng)建一個C語言程序,顯示某品牌新能源汽車客車每月新增量(1-6月,每月新增量為60,54,50,70,36,51)。5.1.2知識儲備之前已經(jīng)學習了定義變量,但是當我們需要批量處理問題時,就會遇到很大的麻煩。比如一個車隊有100名人員,那么是否需要定義100個變量,顯然有問題的,這時我們就需要引入一種新的類型,數(shù)組,可以批量定義。1.數(shù)組的定義數(shù)組是具有相同類型的數(shù)據(jù)項的序列,是一種用于表示大量同類值的數(shù)據(jù)類型,我們通過下標訪問數(shù)組的元素。2.一維數(shù)組程序經(jīng)常使用同類的數(shù)據(jù),例如我們要處理一些成績,可以聲明intgrade1,grade2,grade3;然而如果成績量很大時,就要使用大量的標識符進行表示,且標識符必須唯一,這樣做是很麻煩的,此時我們應該使用數(shù)組,用下標訪問數(shù)組的各個元素,用方括號括住數(shù)組的下標。為了在程序中使用grade[0]、grade[1]、grade[2],我們聲明intgrade[3];聲明中的整數(shù)3表示數(shù)組的尺寸,即數(shù)組中元素的個數(shù)。注意,數(shù)組元素的下標總是從0開始。一維數(shù)組聲明是一個類型后跟一個帶有方括號括起來的常量整數(shù)表達式的標識符。常量表達式指定了數(shù)組的尺寸,但它的值必須是正的;它指定了數(shù)組中元素的個數(shù)。為了存儲數(shù)組的元素,編譯器會分配從一個基地址開始的適當大小的內(nèi)存。3.一維數(shù)組的初始化當定義一個數(shù)組時,系統(tǒng)根據(jù)類型說明,分配由常量表達式所指定的相應數(shù)量的存儲單元,一個存儲單元對應一個數(shù)組元素。數(shù)組的初始化實質(zhì)上就是在定義數(shù)組時,為每一個數(shù)組元素賦初值。數(shù)組的初始化是在編譯階段完成的,不占用運行時間。這樣可以使數(shù)組元素在程序開始運行前就得到初值,從而節(jié)約了運行時間,提高了執(zhí)行速度。一維數(shù)組的初始化可分為以下幾種情況:①給全部數(shù)組元素賦初值例:intarray[8]={1,2,3,4,5,6,7,8};在給全部數(shù)組元素賦初值的情況下,也可以寫成如下形式:intarray[]={1,2,3,4,5,6,7,8};系統(tǒng)會根據(jù){}中的8個數(shù)據(jù)自動定義數(shù)組array的長度為8。②給部分元素賦值③④在定義一個數(shù)組時,可以只給部分元素賦初值,但不能越過前面的元素給后面的元素的賦值。后面未被賦值的元素根據(jù)其數(shù)據(jù)類型自動取為0或‘\0’例:inta[6]={1,2,3};//等價于inta[6]={1,2,3,0,0,0};*/charc[4]={‘a(chǎn)’,‘b’};//等價于charc[4]={‘a(chǎn)’,‘b’,‘\0’,‘\0’};(4)一維數(shù)組元素的引用數(shù)組是一組數(shù)組元素的順序集合,數(shù)組名代表了整個數(shù)組存儲空間的首地址。當我們對數(shù)組進行操作時,不能對整個數(shù)組進行操作,只能對其中的數(shù)組元素進行操作。4.一維數(shù)組元素的引用方式為:數(shù)組名[下標表達式]下標表達式即為該數(shù)組元素在數(shù)組中的位置。例如:若有如下定義:intgrade[3];則grade[0]、grade[2]、grade[i]、grade[i+j]都是數(shù)組元素合法的引用形式,但要注意下標的取值范圍,它的下限為0,上限為數(shù)組長度-1。5.鍵盤輸入10個同學的C語言成績,并顯示每個同學的成績。程序代碼:#include"stdio.h"http://頭文件#defineN10//定義符號常量voidmain()//主函數(shù){ intgrade[N],i;//定義整型數(shù)組gradefor(i=0;i<N;i++)scanf("%d",&grade[i]);//通過輸入語句對數(shù)組元素賦值for(i=0;i<N;i++)printf("%d號的成績?yōu)?d\n",i+1,grade[i]);//輸出數(shù)組元素}程序運行截圖如圖5-1-1所示:圖5-SEQ圖5-\*ARABIC1-1示例運行截圖程序解析:數(shù)組grade需要存儲10個整數(shù)值的內(nèi)存空間。假設我們的機器用4個字節(jié)存儲一個int型的值。如果grade[0]存儲地址為2000,那么其余的數(shù)組元素連續(xù)的存儲地址為2004、2008、2012、2016、2020、2024、2028、2032、2036。如表5-1所示。表5-SEQ表5-\*ARABIC1數(shù)組數(shù)據(jù)存儲存儲地址數(shù)值數(shù)組地址地址200089grade[0]地址200498grade[1]地址200876grade[2]地址201267grade[3]地址201678grade[4]地址202087grade[5]地址202488grade[6]地址202866grade[7]地址203299grade[8]地址203679grade[9]第2行代碼,把數(shù)組的尺寸定義為符號常量,這是一種良好的編程習慣。因為很多代碼要依賴這個值,要改變數(shù)組的大小,可在#define中很方便地改變該值。通常把變量i用作數(shù)組的下標變量。第6第7行代碼是一種處理全部數(shù)組元素的關鍵性習慣用法。一般下標變量從0開始,一直到N-1。5.1.3典型案例典型案例1:已知某品牌4S店的一年12月的銷售量分別為{10,12,15,14,16,8,7,14,16,17,11,12},輸出12個月的銷售數(shù)據(jù)。算法分析1.定義變量2.輸入銷售量(注意數(shù)組格式)3.輸出銷售量流程圖:典型案例1流程圖如圖5-1-2所示圖5-1-SEQ圖5-\*ARABIC2典型案例1流程圖程序代碼:#include"stdio.h"voidmain(){intsales[12];inti;printf("請輸入銷售量:(12個月)\n");for(i=0;i<12;i++){printf("%d月",i+1);scanf("%d",&sales[i]);}printf("1-12月某品牌4S店銷售情況表:\n");printf("一月\t二月\t三月\t四月\t五月\t六月\t七月\t八月\t九月\t十月\t十一月\t十二月\n");for(i=0;i<12;i++){printf("%d\t",sales[i]);}printf("\n");}典型案例1運行截圖如圖5-1-3所示圖5-1-SEQ圖5-\*ARABIC3典型案例1運行截圖典型案例2:下表為某品牌新能源小客車在不同時段的耗油量,從鍵盤輸入各個時段的耗油量,編寫程序求出該小客車的平均耗油量。具體的時段和耗油量如表5-2所示(參考變量耗油量oilconsumption總耗油量sum_oilconsumption,平均耗油量avg_oilconsumption)表5-2時段和耗油量時段時段1時段2時段3時段4時段5時段6時段7時段8時段9耗油量8.58.89.210.17.88.68.78.79.5算法分析1.定義變量耗油量,總耗油量,平均耗油量,i;2.求總耗油量;3.計算平均耗油量;4.輸出平均耗油量;典型案例2流程圖如圖5-1-4所示圖5-1-SEQ圖5-\*ARABIC4典型案例2流程圖程序代碼#include"stdio.h"voidmain(){doubleoilconsumption[9]={8.5,8.8,9.2,10.1,7.8,8.6,8.7,8.7,9.5};doublesum_oilconsumption=0,avg_oilconsumption; inti=0;for(i=0;i<9;i++) {sum_oilconsumption+=oilconsumption[i]; }avg_oilconsumption=sum_oilconsumption/9.0; printf("平均耗油量:%f\n",avg_oilconsumption);}典型案例2運行截圖如圖5-1-5所示圖5-1-SEQ圖5-\*ARABIC5典型案例2運行截圖典型案例3:已知某品牌4S店的銷售人員根據(jù)每年的銷售量情況,分為不同等級的銷售員,分別為’A’,’B’,’C’,’D’,要求輸出銷售人員的銷售等級。*/(參考變量銷售員salesman)算法分析1.定義變量2.輸出銷售人員的銷售等級(注意數(shù)組成員類型)流程圖:典型案例3流程圖如圖5-1-6所示圖5-1-SEQ圖5-\*ARABIC6典型案例3流程圖程序代碼#include"stdio.h"voidmain(){charsalesman[10]={'C','A','B','A','C','B','D','C','C','A'};inti;for(i=0;i<10;i++){printf("銷售員%d,等級:%c\n",i+1,salesman[i]);} }典型案例3運行流程圖如圖5-1-7所示圖5-1-SEQ圖5-\*ARABIC7典型案例3運行截圖5.1.5任務分析與實踐算法分析1.定義變量2.輸入汽車數(shù)據(jù)3.輸出汽車數(shù)據(jù)任務目標流程圖如圖5-1-8所示圖5-1-SEQ圖5-\*ARABIC8任務目標流程圖#include"stdio.h"#defineN6//定義符號常量,表示有6個月voidmain(){intV_number[N];//定義存放新增量的數(shù)組inti;for(i=0;i<N;i++)scanf("%d",&V_number[i]);//鍵盤輸入6個月的數(shù)據(jù)printf("某市海格新能源全天然氣客車月新增量明線表\n");printf("1月份\t2月份\t3月份\t4月份\t5月份\t6月份\n");for(i=0;i<N;i++)printf("%d\t",V_number[i]);//輸出6個月的數(shù)據(jù)}5.1.5動手練習1.從鍵盤輸入5名駕駛員的工資,求工資的平均值2.在選擇車牌時,有時可以隨機產(chǎn)生,假設隨機產(chǎn)生的是后五位并且都是數(shù)字,隨機產(chǎn)生10個車牌存放在車牌數(shù)組中,并輸出。3.在選擇車牌時,有時可以隨機產(chǎn)生,假設隨機產(chǎn)生的是后五位并且都是數(shù)字,隨機產(chǎn)生20個車牌存放在車牌數(shù)組中,并挑選最后一位是偶數(shù)的車牌存放在另一個數(shù)組中。課題任務5.2求某品牌新能源汽車一年的最高銷售月(一維數(shù)組求最值)課型講練授課班級授課時數(shù)2教學目標1、進一步熟練掌握一維數(shù)組的數(shù)組的輸入和輸出2、掌握在數(shù)組中的查找、最值操作教學重點數(shù)組中的查找、最值操作教學難點查找、最值操作學情分析數(shù)組概念應該已經(jīng)掌握,關鍵在于數(shù)組下標從0開始,上限等知識點學生容易混淆,同時本節(jié)課主要插入和刪除操作,數(shù)組中內(nèi)容的變換規(guī)律描述成程序不是很容易。教學效果教后記任務5.2求某品牌新能源汽車一年的最高銷售月(一維數(shù)組求最值)5.2.1任務目標從鍵盤輸入8位駕駛員身高,輸出個子最低的駕駛員的身高和對應的下標。5.2.2知識儲備在實際應用中,我們還會碰到需要求數(shù)據(jù)的最值,查找等特殊情況,這種情況我們?nèi)绾谓鉀Q?1.查找對數(shù)組中數(shù)據(jù)進行查找時,通過循環(huán)逐一進行比較。程序代碼一般為:for(i=0;i<數(shù)組長度;i++)if(數(shù)組名[i]==被查數(shù)據(jù))break;2.統(tǒng)計對數(shù)組中的數(shù)據(jù)進行統(tǒng)計,一般經(jīng)過兩步操作:第一步對數(shù)組元素進行篩選,可以用if語句,也可以使用swtich語句;第二步進行統(tǒng)計。3.求最值第一步定義變量包含一個最值第二步數(shù)組后面的每個與最值進行比較,查找規(guī)律示例1:已知數(shù)組s中存有以下數(shù)據(jù):12、9、7、11、10、15、13、14、16和8,編寫程序,用戶從鍵盤輸入一個數(shù)據(jù),從數(shù)組中找出該數(shù)據(jù)。程序代碼:#include<stdio.h>voidmain(){ ints[10]={12,9,7,11,10,15,13,14,16,8}; intx,i; for(i=0;i<10;i++) printf("%4d",s[i]); printf("\n"); printf("請輸入要查找的數(shù)據(jù):"); scanf("%d",&x); for(i=0;i<10;i++) if(s[i]==x)break; if(i<10) printf("s[%d]=%d\n",i,s[i]); else printf("該數(shù)據(jù)不存在!\n");}示例2已知數(shù)組中的數(shù)據(jù)為12,4,5,6,7,89,求他們的最小值。程序代碼#include"stdio.h"voidmain(){ints[10]={12,4,5,6,7,89},i=0,min,m;min=s[0]; m=0; for(i=0;i<6;i++) {if(min>s[i]) { min=s[i]; m=i+1; } } printf("最小值為s[%d]=%d\n",m,min);}5.2.3典型實例典型案例1:已知某品牌4S店的一年12月的銷售量分別為{10,12,15,14,16,8,7,14,16,17,11,12},輸出12個月的最高銷量。(參考變量銷售量sales,最大銷售量max_sales)算法分析:求最值任務分析過程:第一步max_sales=sales[0]第二步if(maxsales<sales[1])max_sales=sales[1];第三步if(maxsales<sales[2])max_sales=sales[2];。。。。。。第N步if(maxsales<sales[N-1])max_sales=sales[N-1];根據(jù)以上分析,可以用循環(huán)完成初值:max_sales=sales[0],范圍1-11循環(huán)體if(maxsales<sales[i])max_sales=sales[i];算法過程1.定義銷售量數(shù)組2.求最值流程圖:典型案例1流程圖如圖5-2-1所示圖5-2-1典型案例1流程圖程序代碼#include"stdio.h"voidmain(){intsales[12]={10,12,15,14,16,8,7,14,16,17,11,12};intmax_sales=sales[0],i;for(i=1;i<12;i++){ if(max_sales<sales[i]) max_sales=sales[i];}printf("最高銷售量=%d",max_sales);}典型案例1運行截圖如圖5-2-2所示圖5-2-2典型案例1運行截圖典型案例2:下表為某品牌新能源小客車在不同時段的耗油量,編寫程序求出該小客車的耗油量最小的時段。時段和耗油量如表5-3所示表5-SEQ表5-\*ARABIC3時段和耗油量時段時段1時段2時段3時段4時段5時段6時段7時段8時段9耗油量8.58.89.210.17.88.68.78.79.5算法過程1.定義耗油量數(shù)組2.求最小值(注意數(shù)據(jù)類型)流程圖:典型案例2流程圖如圖5-2-3所示:圖5-SEQ圖5-\*ARABIC2-3典型案例2流程圖程序代碼:#include"stdio.h"voidmain(){doubleoilconsumption[9]={8.5,8.8,9.2,10.1,7.8,8.6,8.7,8.7,9.5};doublemin_oilconsumption=oilconsumption[0];inti;for(i=1;i<9;i++){ if(min_oilconsumption>oilconsumption[i]) { min_oilconsumption=oilconsumption[i]; }}printf("最小耗油量是:%.1f",min_oilconsumption);}典型案例2運行截圖如圖5-2-4所示圖5-2-4典型案例2運行截圖5.2.4任務分析與實踐#include"stdio.h"voidmain(){ doubledriver_H[8],driverH_min; inti; intdriverH_num; printf("請輸入8名駕駛員的身高"); for(i=0;i<8;i++) { scanf("%lf",&driver_H[i]); } driverH_min=driver_H[0]; driverH_num=0; for(i=0;i<8;i++) { if(driver_H[i]<driverH_min) { driverH_min=driver_H[i]; driverH_num=i; } } printf("最低駕駛員的下標為%d,身高為%lf",driverH_num,driverH_min);}5.2.5動手練習(修改)1.從鍵盤輸入5名駕駛員的工資,求高于平均工資的駕駛員。2.2020年某地區(qū)5月份10天的最高氣溫依次是(℃):30313032323333323132。編寫程序,分別統(tǒng)計出32℃和33℃各占多少天。3.輸入10個整數(shù)存入一維數(shù)組,輸出值和下標都為奇數(shù)的元素個數(shù)。4.已知數(shù)組s中存有以下數(shù)據(jù):12、9、7、11、10、15、13、14、16和8,編寫程序,用戶從鍵盤輸入一個數(shù)據(jù),從數(shù)組中找出該數(shù)據(jù)。課題任務5.3對某品牌新能汽車銷售人員業(yè)績排序(一維數(shù)組排序)課型講練授課班級授課時數(shù)2教學目標1、掌握一維數(shù)組的定義、引用、初始化2、掌握數(shù)組的輸入和輸出教學重點1、一維數(shù)組的定義、引用、初始化2、一維數(shù)組實際應用教學難點數(shù)組的應用-從0開始學情分析數(shù)組概念的理解、數(shù)組在內(nèi)存中的存儲實質(zhì),地址的概念都應在剛接觸數(shù)組時有所了解。學生組成一個班級利用學號組織。但是學號是從1開始,數(shù)組的開始從0開始,容易產(chǎn)生“失誤”。教學效果教后記任務5.3對某品牌新能汽車銷售人員業(yè)績排序(一維數(shù)組排序)5.3.1任務目標創(chuàng)建一個C語言程序,按非遞減順序顯示某市海格新能源全天然氣客車的月新增量(1-6月,每月新增量為60,54,50,70,36,51)。5.3.2知識儲備對于雜亂無章的數(shù)據(jù),有時我們需要按照一定規(guī)律進行排列,我們本次課程就來研究這個問題。1.排序?qū)τ谒阉鞔笮蛿?shù)據(jù)庫來說,對信息進行排序的算法是至關重要的。想象一下詞典或電話號碼本,用它們來查找信息都是相對容易和方便的,這是因為其中的信息按按字母表或詞曲順序排序了。排序是一種非常有助于解決問題的技術,因此如何有效的排序的問題本身是一個重要的研究領域。排序有多種方式,有冒泡排序、簡單選擇排序、直接插入排序等。2.冒泡排序這種方法可形象描述為:使較小的值象水中的氣泡一樣逐漸“上浮”到數(shù)組的頂部,而較大的值則逐漸“下沉”到數(shù)組的底部。這種技術要排序好幾輪,每輪都要比較連續(xù)的數(shù)組元素對。如果某一對元素的值本身是升序排的,那就保持原樣,否則交換其值。冒泡排序的基本思想是:從前向后依次比較相鄰兩個數(shù)的值,如果前者比后者大,那么這兩個數(shù)交換,否則不交換,第一次排序結(jié)束,最大數(shù)“后沉”到最后一個。排序過程示例(設N=8):每趟只將方括號中的數(shù)據(jù)從左向右兩兩比較,讓較大者不斷“后沉”到方括號外。假設原始數(shù)據(jù)[4938659776132750]第一趟排序后[38496576132750]97第二趟排序后[384965132749]7697第三趟排序后[3849132750]657697第四趟排序后[38132749]50657697第五趟排序后[132738]4950657697第六趟排序后[1327]384950657697第七趟排序后[13]27384950657697最后排序結(jié)果1327384950657697讀者可以看到第五趟排序結(jié)束后,其實已經(jīng)得到我們最終所需的結(jié)果了,如果不對程序進行優(yōu)化,計算機就一定會進行七趟排序,那么應該如何處理,請讀者自行思考,也可查看相關資料。3.選擇法排序選擇法的基本思想是:用變量p來存放最大數(shù)所在的位置,若數(shù)組中有n個數(shù),首先p中存放0,認為a[0]中數(shù)最大。然后把a[p]跟后面的a[1]比較,若a[1]比a[p]大,則p=1;否則p不變。接著a[p]跟后面的a[2]比較,若a[2]比a[p]大,則p=2;否則p不變。接著a[p]跟后面的a[3]比,a[4]比,……,與最后一個元素比較。這時p中存放的是所有元素中最大元素所在的位置。把a[0]中的數(shù)與a[p]中的數(shù)交換。a[0]中存放最大元素。再從余下的n-1個數(shù)中找最大的數(shù)與a[1]交換,重復直到排序結(jié)束。假設原始數(shù)據(jù)[4938659776132750]第一趟排序后13[38659776492750]第二趟排序后1327[659776493850]第三趟排序后132738[9776496550]第四趟排序后13273849[76976550]第五趟排序后1327384950[976576]第六趟排序后132738495065[9776]第七趟排序后13273849506576[97]最后排序結(jié)果13273849506576974.示例:鍵盤輸入10個同學的C語言成績,按從高到低顯示每個同學的成績。程序代碼:#include"stdio.h"#defineN10voidmain(){intgrade[N];inti,j,temp;for(i=0;i<N;i++)scanf("%d",&grade[i]);printf("排序前10位同學的成績:\n");for(i=0;i<N;i++)printf("%d",grade[i]);printf("\n從高到低排序后10位同學的成績:\n");for(i=0;i<=N-2;i++)//冒泡排序{ for(j=0;j<=N-i-2;j++)if(grade[j]<grade[j+1])//條件成立,相鄰兩個值進行交換{temp=grade[j];grade[j]=grade[j+1];grade[j+1]=temp;}}for(i=0;i<N;i++)printf("%d",grade[i]);}5.3.3典型實例典型案例1:下表為海格某汽油小客車在不同時段的耗油量,編寫程序?qū)⒃撔】蛙嚨牟煌瑫r段耗油量從高到低進行排列。程序代碼:#include"stdio.h"voidmain(){doubleoilconsumption[9]={8.5,8.8,9.2,10.1,7.8,8.6,8.7,8.7,9.5};inti,j;doubletemp;for(i=0;i<9;i++){ for(j=0;j<8-i;j++) { if(oilconsumption[j]<oilconsumption[j+1]) { temp=oilconsumption[j]; oilconsumption[j]=oilconsumption[j+1]; oilconsumption[j+1]=temp; } }}printf("耗油量從高到低依次是:");for(i=0;i<9;i++)printf("%.1f",oilconsumption[i]);}典型案例2:已知某品牌4S店的一年12月的銷售量分別為{10,12,15,14,16,8,7,14,16,17,11,12},將銷售量從小到大排序。程序代碼#include"stdio.h"voidmain(){intsales[12]={10,12,15,14,16,8,7,14,16,17,11,12};inti,j,t;for(i=0;i<=10;i++){ for(j=i+1;j<=11;j++) { if(sales[i]>sales[j]) { t=sales[j]; sales[j]=sales[i]; sales[i]=t; } }}printf("銷售量從小到大排序:");for(i=0;i<9;i++)printf("%d",sales[i]);}5.3.4任務分析與實踐程序代碼#include"stdio.h"#defineN6voidmain(){intV_number[N]={60,54,50,70,36,51}; inti,j,p; inttemp; printf("排序前新增量:"); for(i=0;i<N;i++) printf("%d",V_number[i]); printf("\n"); printf("排序后:"); for(i=0;i<N-1;i++) { p=i; for(j=i+1;j<N;j++) if(V_number[p]<V_number[j]) { p=j; } temp=V_number[p]; V_number[p]=V_number[i]; V_number[i]=temp; } for(i=0;i<N;i++) printf("%d",V_number[i]); printf("\n");}5.3.5動手練習1.從鍵盤輸入20名駕駛員的工資,使用冒泡,順序,選擇其中一種方法進行從低到高排序并輸出。并且畫出流程圖。2.從鍵盤輸入14個車輛的載重量,使用冒泡,順序,選擇其中一種方法進行從高到低排序并輸出。并且畫出流程圖。課題任務5.4顯示某車企的新能源汽車品牌(字符數(shù)組)課型講練授課班級授課時數(shù)2教學目標1.掌握字符數(shù)組的定義、初始化及字符數(shù)組元素的引用方式.2.提高學生的邏輯思維能了教學重點掌握字符數(shù)組的定義、初始化及字符數(shù)組元素的引用方式.教學難點字符數(shù)組的引用學情分析學生前面已經(jīng)學過了數(shù)組,字符數(shù)組只不過定義的類型不同罷了。學習這個知識點大部分應該可以接受。教學效果教后記任務5.4顯示某車企的新能源汽車品牌(字符數(shù)組)5.4.1任務目標從鍵盤輸入江蘇省的地級市,輸出車牌字符。(

A南京市B無錫市C徐州市D常州市

E蘇州市F南通市)任務目標運行截圖如圖5-4-1所示圖5-4-1任務目標運行截圖5.4.2知識儲備在實際情況中,我們需要用到漢字或者多個字符的情況,這時我們就需要引入字符數(shù)組。1.一維字符數(shù)組與字符串①一維字符數(shù)組數(shù)組元素的類型是字符類型的一維數(shù)組稱為一維字符數(shù)組。定義一個一維數(shù)組時,如果數(shù)據(jù)類型為char,這就是一個一維字符數(shù)組。例如:charch[10];定義了一個名為ch的一維字符數(shù)組,長度為10,系統(tǒng)為該數(shù)組開辟了10個連續(xù)的存儲單元,在這里,一個元素的存儲空間正好為一個字節(jié),所以系統(tǒng)開辟了10個連續(xù)的字節(jié)單元,ch為該連續(xù)存儲單元的首地址??梢砸脭?shù)組的元素,如ch[0]=’a’;ch[9]=’\n’;等。②字符串字符串就是一串字符的組合,但它的最后一個字符必定是’\0’?!痋0’是一個轉(zhuǎn)義字符,它是字符型的“空值”,它的ASCII代碼值為0?!痋0’是字符串的結(jié)束標志。在C語言中,字符串借助于一維字符數(shù)組來存放。在存儲時,結(jié)束標志’\0’占用存儲空間,但不計入字符串的實際長度。C語言中,字符串是用雙引號””作為定界符的。在表示字符串時,不需要人為在其末尾加入’\0’。例如,字符串”COMPUTER”不必寫成”COMPUTER\0”,C的編譯系統(tǒng)在處理時會自動在末尾添加’\0’。一個字符串在存儲時,會占用內(nèi)存中一串連續(xù)的存儲空間,它有一個起始地址。這段連續(xù)的存儲空間實際中就是一個一維的字符數(shù)組,只是這個數(shù)組沒有名字。所以,在C語言中,字符串被隱含處理成一個以’\0’結(jié)尾的無名的一維字符數(shù)組,該字符串就表示內(nèi)存中一串連續(xù)存儲空間的首地址。③一維字符數(shù)組與字符串的區(qū)別一個一維字符數(shù)組中的每一個元素都可以存放一個字符,并且它不限定最后一個字符應該是什么。而在C語言中,有關字符串的大量操作都與串結(jié)束標志’\0’有關,因此,字符串是最后一個字符必有’\0’的一維字符數(shù)組。當一個一維字符數(shù)組的長度大于一個字符串的有效長度再加1時,該一維字符數(shù)組可以用于存放該字符串。此時,一維字符數(shù)組可以被“看作”是字符串變量。但它又不同于一般的變量,不能把一個字符串整體賦給一個數(shù)組。2.將一個字符串賦給一個一維字符數(shù)組①通過初始化實現(xiàn)逐一元素地賦初值,這種方法同給一般數(shù)組賦初值的方式相同。例:charstr[10]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’,’\0’};②賦初值時,直接賦字符串常量例如:charch[8]={“student”};或者省略大括號:charch[8]=“student”;③在執(zhí)行過程中給一維字符數(shù)組賦字符串前面已經(jīng)講過,不能給一個數(shù)組整體賦值,對一維字符數(shù)組同樣如此。只能給數(shù)組元素逐個賦字符值,最后人為加入串結(jié)束標志。例如:charstr[8];str[0]=’s’;str[1]=’t’;str[2]=’u’;str[3]=’d’;str[4]=’e’;str[5]=’n’;str[6]=’7’;str[7]=’\0’;3.字符串的輸入和輸出①用”%c”格式字符逐個輸入和輸出例如:通過鍵盤輸入一字符串(以回車結(jié)束,假設長度不超過50),存放于數(shù)組ch中。#include"stdio.h"#defineLEN51 voidmain(){ charch[LEN]; inti=0; scanf("%c",&ch[i]);while((ch[i]!='\n')) { i++; scanf("%c",&ch[i]); } ch[i]='\0'; i=0; while(ch[i]!='\0'){ printf("%c",ch[i]); i++; }}②用”%s”格式整體輸入和輸出例如:charch[20];scanf(“%s”,ch);說明:輸入項是一數(shù)組的數(shù)組名,也就是數(shù)組的首地址。功能:從鍵盤輸入一串字符,讀入到以ch開始的存儲單元中,以空格或回車符結(jié)束讀入。printf(“%s”,ch);說明:輸出項是一數(shù)組的數(shù)組名,也就是數(shù)組的首地址。功能:輸出以ch為起始地址的存儲單元的內(nèi)容到終端,遇到’\0’時結(jié)束輸出。③用字符串輸入(gets)和輸出(puts)函數(shù)實現(xiàn)字符串的輸入和輸出字符串輸入(gets)和輸出(puts)函數(shù)的定義說明在頭文件”stdio.h”中,在程序中若調(diào)用這兩個函數(shù),必須在程序的開頭加入文件包含命令:#include“stdio.h”gets函數(shù)實現(xiàn)輸入調(diào)用形式如下:gets(str)說明:str為一確定的地址值,它可以是一個字符數(shù)組的數(shù)組名,也可以是今后要學到的已賦值的指針型變量。函數(shù)功能:調(diào)用該函數(shù)時,用戶從鍵盤輸入一個字符串,以換行符(Enter鍵)作為輸入結(jié)束標志;然后將接收到的字符(包括換行符)依次賦給以str為起始地址的存儲單元中,系統(tǒng)自動用’\0’來代替最后的換行符。注意:gets函數(shù)調(diào)用中,空格不作為分隔符,它可以出現(xiàn)在字符串中,這是gets與scanf函數(shù)的主要區(qū)別。例如:charch[20];gets(ch);若輸入:IAM(回車),則在ch中將存入字符串”IAM”,而不是字符串”I”。puts函數(shù)實現(xiàn)輸出調(diào)用形式如下:puts(str)說明:同gets(str)一樣,str為一確定的地址值。函數(shù)功能:調(diào)用該函數(shù)時,系統(tǒng)從str這一地址開始,依次輸出存儲單元的內(nèi)容,直到遇到第一個’\0’,系統(tǒng)自動將’\0’轉(zhuǎn)換成一個換行符輸出,并結(jié)束輸出。注意:puts函數(shù)輸出結(jié)束后換行,而printf函數(shù)輸出結(jié)束后并不自動換行。4.常用字符串和字符函數(shù)C語言有關字符的函數(shù)分為字符串函數(shù)和字符函數(shù)兩類,分別包含于頭文件“string.h”及頭文件“ctype.h”中。常用的字符串函數(shù)如表5-4-1所示,常用的字符函數(shù)如表5-4-2所示表5-SEQ表5-\*ARABIC4-1常用字符串函數(shù)函數(shù)名意義返回值gets(str)鍵盤輸入一串字符賦給字符數(shù)組strstrputs(str)輸出字符數(shù)組str內(nèi)容到顯示器strstrlen(str)

求串長整數(shù)strcat(str1,str2)

串連接,即串2連接于串1后str1strncat(str1,str2,n)串連接,僅串2前n字符連于串1后str1strcpy(str1,str2)

串復制,串2復制給串1str1strncpy(str1,str2,n)串復制,僅串2前n字符復制給串1str1strcmp(str1,str2)

串比較,比較串2、串1大小整數(shù)strncmp(str1,str2,n)串比較,僅比較串2、串1前n字符大小整數(shù)strset(str,ch)置換,用ch置換str串各字符strstrnset(str,ch,n)置換,用ch置換str串前n個字符strstrlwr(str)大轉(zhuǎn)小,串中大寫字母變?yōu)樾懽帜竤trstrupr(str)小轉(zhuǎn)大,串中小寫字母變?yōu)榇髮懽帜竤trmemset(str,ch,n)

置換,將str串前n個字符置換成chstrstrrev(str)倒置,將str串字符顛倒順序strstrchr(str,ch)ch在str串中首次出現(xiàn)的位置地址,無返回空指針strstr(str1,str2)str2子串在str1串中首次出現(xiàn)的位置地址,無返回空指針表5-4-2字符函數(shù)函數(shù)名稱意義返回isalnum(ch)ch是否是字母或數(shù)字是返回1,否返回0isalpha(ch)ch是否是字母isdigit(ch)ch是否是數(shù)字islower(ch)ch是否是小寫字母isupper(ch)ch是否是大寫字母isspace(ch)ch是否是空格isprint(ch)ch是否是可打印字符ispunct(ch)ch是否是標點或空格tolower(ch)將字母ch轉(zhuǎn)小寫字母相應小寫字母toupper(ch)將字母ch轉(zhuǎn)大寫字母相應大寫字母5.4.3典型實例典型案例1:從鍵盤輸入某輛車的車架號,并輸出車架號。程序代碼#include"stdio.h"voidmain(){charvin[18];printf("請輸入車架號:");gets(vin);printf("車架號為");puts(vin);}典型案例1運行截圖如圖5-4-2所示圖5-4-2典型案例1運行截圖截圖典型案例2:從鍵盤輸入某輛車的車架號,并求長度,判斷是否滿足車架號的長度。典型案例2運行截圖如圖5-4-3所示圖5-4-3典型案例2運行截圖典型案例2方法一流程圖如圖5-4-4所示圖5-4-4典型案例2方法一流程圖方法一程序代碼#include"stdio.h"voidmain(){charvin[18],i=0,len=0;printf("請輸入車架號:");scanf("%s",vin);while(vin[i]!='\0'){len++;i++;}if(len==17)printf("滿足車架號的長度!");elseprintf("車架號長度有誤!");}方法二運用字符串函數(shù)程序代碼#include"stdio.h"#include"string.h"voidmain(){charvin[18],i=0,len;printf("請輸入車架號:");gets(vin);len=strlen(vin);if(len==17)printf("滿足車架號的長度!");elseprintf("車架號長度有誤!");}典型案例3:從鍵盤輸入某輛車的車牌,再次輸入車牌,判斷第二次和第一次輸入的車牌是否相等,相等顯示兩次車牌輸入一致,不相等顯示兩次車牌輸入不一致。典型案例3運行截圖如圖5-4-5所示。圖5-4-5典型案例3運行截圖程序代碼#include"stdio.h"#include"string.h"voidmain(){charvin[20],vin2[20];inti=0,flag=0; printf("請輸入車架號:");gets(vin);printf("請再次輸入車架號:");gets(vin2);if(strcmp(vin,vin2)==0)printf("兩次輸入車架號一致!");elseprintf("兩次輸入車架號不一致!");}5.4.4任務分析與實踐任務目標流程圖如圖5-4-6所示圖5-4-6任務目標流程圖程序代碼#include"stdio.h"#include"string.h"voidmain(){charlicense_plate[8];printf("請輸入地級市");gets(license_plate);if(strcmp(license_plate,"南京市")==0)printf("A南京市");elseif(strcmp(license_plate,"無錫市")==0)printf("B無錫市");elseif(strcmp(license_plate,"蘇州市")==0)printf("E蘇州市");elseif(strcmp(license_plate,"南通市")==0)printf("F南通市");elseprintf("輸入有誤或者無記錄");}5.4.5動手練習1.從鍵盤輸入“我愛你中國”并輸出。2.從鍵盤輸入一名駕駛員的工號,已知工號長11位,第一位為2,判別學號是否正確。3.輸入10名駕駛員的姓名,并按照姓名從高到低進行排序并輸出姓名和序號。4.通過鍵盤將一句英文存放于一個字符數(shù)組中,統(tǒng)計該句子里面出現(xiàn)的單詞的個數(shù)(單詞之間用空格分隔)。(提高)5.一名用戶要求車牌是6位字符,并且滿足回文,從鍵盤輸入車牌,判斷是否滿足條件。課題任務5.5某車企多年銷售統(tǒng)計(二維數(shù)組)課型講練授課班級授課時數(shù)2教學目標1、掌握二維數(shù)組的使用2、利用二維數(shù)組解決實際相關問題3、提高分析問題的能力教學重點1、二維數(shù)組的定義、存儲形式、元素引用及初始化2、二維數(shù)組實際應用教學難點二維數(shù)組的輸入輸出(與循環(huán)嵌套相結(jié)合使用)學情分析一維數(shù)組已經(jīng)學過對于初始化的一些問題學生應該比較容易接受。由于還沒有學習線性代數(shù),對于二維數(shù)組的描述不是特別的清楚。要多舉例。教學效果教后記任務5.5某車企多年銷售統(tǒng)計(二維數(shù)組)5.5.1任務目標新能源大客車在江蘇不同城市1-6月的新增情況如表5-5-1所示,請編寫程序輸出該明線表。表5-5-1新增情況表蘇州無錫常州南京1月241413162月201616253月183020434月24108125月105686月85575.5.2知識儲備一維數(shù)組只能處理一種批量數(shù)據(jù)情況,如果同種數(shù)據(jù)類型,更多種情況,此時就需要引入多維數(shù)組。1.二維數(shù)組C語言允許任何類型的數(shù)組,甚至允許數(shù)組的數(shù)組。使用兩對方括號,我們就能得到二維數(shù)組。要得到高維數(shù)組,只要簡單地繼續(xù)增加方括號即可。每使用一對方括號,我們就對數(shù)組增加了一維。數(shù)組的格式如表5-5-2所示表5-5-2數(shù)組的格式數(shù)組的聲明注釋inta[100];一維數(shù)組charb[20][30];二維數(shù)組floatc[2][3][4];三維數(shù)組一個k維數(shù)組的尺寸與各個維的尺寸有關。如果用Si代表數(shù)組的第i維尺寸,那么數(shù)組聲明為S1*S2*…*Sk個元素分配的空間。在上表中,b有20*30個元素,c有2*3*4個元素。從數(shù)組的基地址開始,所有的數(shù)組元素都存儲在連續(xù)的內(nèi)存中。即使數(shù)組元素是一個接一個地連續(xù)存儲,我們也經(jīng)常把二維數(shù)組看作是由行和列組成的矩陣更為方便。例如,如果我們聲明inta[2][5],那么我們數(shù)組元素的排列如表5-5-3所示:表5-5-3數(shù)組排列第1列第2列第3列第4列第5列第1行a[0][0]a[0][1]a[0][2]a[0][3]a[0][4]第2行a[1][0]a[1][1]a[1][2]a[1][3]a[1][4]2.二維數(shù)組的定義、引用和聲明①二維數(shù)組的定義定義形式 類型數(shù)組名[行常量表達式][列常量表達式]; 可以看作元素是一維數(shù)組的一維數(shù)組如:inta[3][4];/*3行4列*/②二維數(shù)組元素的引用二維數(shù)組元素的表示形式為:數(shù)組名[下標][下標]如:a[2][3]、b[1][2]=a[2][3]/2、a[2][3]=3;注意:其中下標可以是整型表達式;不要寫成a[2,3]等形式;應該注意下標值應在已定義的數(shù)組大小范圍內(nèi);定義數(shù)組時用的a[3][4]與引用數(shù)組元素時用的a[3][4]的區(qū)別。③二維數(shù)組的初始化分行給二維數(shù)組賦初值:如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};可以將所有數(shù)據(jù)寫在一個花括號內(nèi),按數(shù)組排列的順序?qū)υ刭x初值如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[3][4]={{1},{5},{9}};等價于inta[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}};inta[4][3]={{1,2},{4,5}};等價于inta[4][3]={{1,2,0},{4,5,0},{0,0,0},{0,0,0}};鍵盤輸入5個同學的2門課程的成績,顯示每個同學的學號及成績明細。3.示例程序代碼:#include"stdio.h"voidmain(){ floatscore[5][2]; inti,j; for(i=0;i<5;i++)//外循環(huán)次數(shù)由人數(shù)確定 for(j=0;j<2;j++)//內(nèi)循環(huán)次數(shù)由課程數(shù)確定 { scanf("%f",&score[i][j]); } printf("學號課程1課程2\n");//輸出表頭 for(i=0;i<5;i++) { printf("%d",i+1);//輸出學號 for(j=0;j<2;j++) { printf("%.1f",score[i][j]);//輸出每門課程的成績 } printf("\n"); }}程序解析:給二維數(shù)組賦值,一般通過兩重循環(huán)來實現(xiàn),外循環(huán)確定行數(shù),內(nèi)循環(huán)確定列數(shù)。由于每個學生的兩門成績顯示在一行,因此人數(shù)確定外循環(huán)次數(shù),課程數(shù)確定內(nèi)循環(huán)次數(shù)。第11行用于輸出表頭的語句必須在整個循環(huán)體的最外面,因此語句只需要執(zhí)行一次。第14行用于輸出學號的語句應放在內(nèi)循環(huán)的外面,保證在循環(huán)輸出各門課程成績時,學號只輸出一次。請注意第19行語句,這是一條換行語句,一定不能放在內(nèi)循環(huán)里面,否則就不會產(chǎn)生二維表格的輸出形式。如果放在內(nèi)循環(huán)里面,結(jié)果會是怎么,請讀者自行思考。5.5.3典型實例典型案例1:已知某品牌4S店2名銷售的12個的銷售額如表5-5-4所示,輸出2名銷售12個月的銷售數(shù)據(jù)。表5-5-4銷售額數(shù)據(jù)表1月份2月份3月份4月份5月份6月份7月份8月份9月份10月份11月份12月份銷售1312424223013銷售2244332143322典型案例1流程圖如圖5-5-1所示圖5-5-1典型案例1流程圖程序代碼#include"stdio.h"voidmain(){ intsales[2][12]={{3,1,2,4,2,4,2,2,3,0,1,3},{2,4,4,3,3,2,1,4,3,3,2,2}}; inti,j; for(i=1;i<=12;i++) { printf("%d月份\t",i); } printf("\n"); for(i=0;i<2;i++) { for(j=

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論