《C語言程序設計》課件 項目五 植樹活動數據分析-數組_第1頁
《C語言程序設計》課件 項目五 植樹活動數據分析-數組_第2頁
《C語言程序設計》課件 項目五 植樹活動數據分析-數組_第3頁
《C語言程序設計》課件 項目五 植樹活動數據分析-數組_第4頁
《C語言程序設計》課件 項目五 植樹活動數據分析-數組_第5頁
已閱讀5頁,還剩57頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

項目五

數組《C語言程序設計》項目描述習近平總書記在黨的二十大報告中強調:“大自然是人類賴以生存發展的基本條件。尊重自然、順應自然、保護自然,是全面建設社會主義現代化國家的內在要求。必須牢固樹立和踐行綠水青山就是金山銀山的理念,站在人與自然和諧共生的高度謀劃發展。”李堯和家人住在新疆吐魯番盆地的東緣,是一個世界上離沙漠最近的城市,他們一家人深深地感受到了沙漠給自己家園帶來的危害。為了不讓沙漠擴大化,他從小在家人的帶領下到沙漠邊緣植樹。在河南,李堯有一個關系很好的網友馬老師,他們經常交流生活、學習情況,更是經常提起沙漠對生活的影響。馬老師受其感染,決定在植樹節帶領學生舉行植樹PK賽,讓大家了解植樹的意義,學會節約、珍惜生活,做一個愛林護林的中學生,為城市貢獻一抹綠色。在以上案例中,若要分析學生植樹的PK結果,需要處理多個植樹數據。在學習及生活中,比如成績統計、學習進度分析、體質檢測數據處理、數學問題、家庭的收入及開銷等,也會涉及到大量的數據處理。若使用前面章節介紹的循環,數據用完就會直接丟棄,并沒有存儲,導致僅能完成簡單任務,用戶無法再次利用原始數據處理問題。其實,在很多任務中,輸入的數據有被存儲的需求,方便進一步研究。C語言通過引進數組來實現多個數據的存儲、查詢和處理。項目目標理解一維數組、二維數組在內存中的存儲情況。掌握一維數組的定義、引用及初始化。掌握二維數組的定義、引用及初始化。掌握字符數組的定義及引用。任務一班級植樹數據統計

——一維數組任務描述

表5-1是馬老師班級學生的植樹情況。請統計植樹總數,分析哪種樹苗種植最多,哪種樹苗種植最少,對于學生比較喜歡的樹苗都分別種植了多少棵(超過種植樹苗平均值的是學生偏愛的樹苗)。表5-1學生植樹情況樹苗品種桃樹梨樹杏樹蘋果樹柳樹樹苗數量2313151020任務分析

本任務需要數據輸入→數據比較求最大值、最小值及求和→求平均→找出數組中比平均值高的數據→結果輸出。任務中需要兩次遍歷數組,所有數據必須存儲到一維數組中,使用簡單的循環數據會被覆蓋。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.1一維數組的定義和存儲數組的概念:

數組是為了方便處理若干個數據,將具有相同類型的若干變量依次存儲的一種形式。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.1一維數組的定義和存儲1.“依次存儲”的含義:例如:inta,b,c;定義的三個變量在內存中存儲位置是隨機的,沒有任何規律;而數組是多個數據的依次存儲,是指數組中多個數據在內存中占據一段連續的存儲單元,如圖5-1:圖5-1數組存儲方式2.“依次存儲”的作用:因為能存儲數據,所以可以實現數據的多次調用;因為占有連續的存儲單元,所以方便單獨調用或批量處理。3.“具有相同類型”的意義:如圖5-1,這是一個整型數組,即數組里面每個元素都是整型,不能出現其他類型。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.1.1一維數組的定義簡單變量的定義:類型說明符

變量名;例如:inta,b,c;一維數組的定義:類型說明符

數組名[整型常量表達式];例如:inta[3];請對比,簡單變量定義與一維數組定義的異同。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.1.1一維數組的定義小試牛刀

根據黨的二十大報告對“加強青少年體育工作”作出重要部署,學校組織了各類體育運動興趣小組。6月10日,學校預備舉行跳水比賽,該比賽中有五個裁判,按照十分制打分,可以精確到一位小數,若要將五個裁判的成績存儲到數組中,請問如何定義該數組?并指出其中的數組類型、數組名和數組元素個數。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.1.1一維數組的定義敲黑板

數組定義中的整型常量表達式可以是一個整型常數、一個值為整型常數的表達式,或者是一個符號常量,但不能是變量,C語言是不允許對數組進行動態定義。下面的數組定義是錯誤的:

intn=3;

inta[n];單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.1.2一維數組的存儲

簡單變量在定義后,C編譯系統會在內存中分配一個空間給這個變量。例如:floatm;系統會分配1個4字節的位置給變量m,并等待輸入數值。

數組在被定義后,C編譯系統在內存中為其分配的是一段連續的存儲空間,數組名表示內存的首地址。例如:floata[3];就相當于定義了3個浮點型變量,因此系統會分配3個4字節的位置給數組a[3]。如圖5-2所示,數組名是首地址,每個數組元素的位置即可以表示為相對于首地址的位置偏移量,例如a數組中第一個元素相對于首地址偏移0個單位,第三個元素相對于首地址偏移2個單位。對應的數組元素的命名即為a[0]、a[2]。圖5-2數組元素的偏移量及命名單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.2一維數組的引用和初始化

5.2.1一維數組元素的引用

數組元素是組成數組的基本單元。對于整型、浮點型數組,C語言只能逐個引用數組元素,而不能一次性引用整個數組。數組元素引用的一般格式為:數組名[下標]例如,a[0]是數組a中的第一個元素,我們可以將其看做一個簡單變量。其下標可以是整型常量或整型表達式。例如下面的賦值表達式包含了對數組元素的引用:a[i]=a[2*2]+a[0]+a[j-1];其中,變量i與j是整型變量。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.2.1一維數組元素的引用敲黑板:數組元素的命名是依據數組元素的存儲位置命名,例如,數組元素的下標是從0開始,表示第一個數組元素相對于首地址的偏移量為0;數組中最后一個元素,下標比數組的個數少1。例如對于數組a[3],最后的元素是a[2]。數組m[20]中元素下標是什么范圍?定義數組時用到的“數組名[整型常量表達式]”與引用數組元素時的“數組名[下標]”形式好似相同,但含義不同。例如:

floatscore[10];

//這里的score[10]表示什么?

t=score[0];

//這里的score[0]表示什么?單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.2.1一維數組元素的引用元素的引用下標是“整型表達式”,與定義數組時要求中括號中的數值是“整型常量表達式”并不一樣,元素的引用中括號中的整型表達式可以是常數,也可以是變量。例如:a[i]、a[i-1]都是合法的,但要求必須是整型,如果出現浮點數程序就會報錯。例如:floata[5],i;for(i=0;i<5;i++)scanf("%d",&a[i]);根據數組元素的下標的特點,可以通過控制下標的方式對數組元素進行調用。由于數組是多個數據元素的集合,因此一維數組經常和循環語句搭配使用。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.2.1一維數組元素的引用例5-1輸入十個整數,再進行逆序輸出。請根據解題思路的提示,完成右邊程序的編寫。表5-3解題思路及程序編寫對比表解題思路程序編寫#include<stdio.h>main(){第一步:定義一個含有10個元素的整型數組,同時定義數組元素下標變量。int,i;第二步:為數組輸入數值,可以用循環控制下標0-9,從而控制數組元素a[0]-a[9],每個元素相當于一個普通變量,因此輸入語句中數組元素前面也要帶上“&”符號;for(i=0;;i++)scanf("%d",);第三步:輸出數組中數值,逆序輸出即從最后一個元素往前輸出,下標的起始值從9開始。for(i=9;;)printf("%5d",);}單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.2.2一維數組的初始化數組定義后,系統給其分配一段連續的存儲空間,里面并沒有確定的數值。用戶可以通過如例5-1的方式,為數組元素逐個輸入數值,也可以直接初始化。數組的初始化可以用“初始化列表”方法實現,列表中的數據用逗號隔開,按照順序放置在一對花括號中。給全部元素賦初值。例如:intm[5]={0,2,4,6,8};列出的數據會依次存放到數組定義的存儲空間中,如圖5-3。圖5-3全部賦值的存儲

在給全部元素賦初值時,由于數據的個數已經確定,因此數組長度可以省略不寫。以上定義可以改為:intm[]={0,2,4,6,8};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.2.2一維數組的初始化給部分元素賦初值。例如:intm[5]={0,2};

定義m數組有5個元素,系統依然會分配5個空間,但花括號中只提供2個元素的值,表示只給前面2個元素賦初值,系統自動給后面3個元素賦初值為0,如圖5-4。圖5-4部分賦值的存儲單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.2.2一維數組的初始化敲黑板:

1.若要將數組中全部元素賦初值為0,不能寫成inta[5];,要寫成intm[5]={0};。因為前者僅是定義5個整型存儲空間,并未賦初值,而后者是一種給部分元素賦初值的形式,第一個元素賦初值為0,系統會自動給后面4個元素賦初值為0。

2.如果初值的類型與數組類型不一致,系統會如何處理?請檢測下面例子結果:intm[5]={1.5,2,4,6,8};3.如果賦初值時,{}中的值的個數超過數組的長度會怎樣呢?例如:intm[5]={1,2,4,6,8,9};4.請檢測數組初始化可否寫成下列樣式:

inta[5];

a[5]={1,2,3};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務實施

任務描述中需要處理的數據個數定為數組元素總個數。為了增加程序的普適性,樹苗數盡量使用輸入語句而非初始化;根據要求需要計算數組中的最大值、最小值、所有數據之和,因此最大值、最小值、初值一定是數組中的元素,一般會將數組中第一個元素a[0]設為數組中的最大值、最小值、初值,再通過循環語句與后面元素比較或者進行累加;通過累加求出平均值,再次循環遍歷數組元素求出高于平均值的數值,并輸出。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務實施

請根據任務描述補全下面程序并運行。

#include<stdio.h>main(){inta[5],max,min,total,i;

;printf("請輸入評委評分:\n");for(i=0;i<5;i++)

;

;for(i=1;i<5;i++){if(a[i]>max)max=a[i];

;total+=a[i];}ave=

;printf("學生比較喜歡的樹苗對應的棵樹分別為:");for(i=0;i<5;i++){printf("%5d",a[i]);}}單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務拓展

2022年6月29日,國際泳聯第19屆世界游泳錦標賽——跳水項目混合全能比賽中,兩名15歲選手全紅嬋和白鈺鳴組合的國隊,經過6輪動作比拼,以總分391.40分摘取桂冠,兩位小將以超強的心態,完美的完成了中國在世錦賽第100枚金牌的任務。每場比賽結束后,獎牌榜都會以各個國家的金牌數進行排序,我們國家在本次錦標賽中獲得了世界第二的優異成績,這是我國夢之隊團體奮斗的結果。假如各個國家獲得的獎牌數是6、5、4、2、0,請試著按從小到大的順序排列。任務二班級植樹PK賽

——二維數組任務描述

在小馬老師帶領班級學生植樹的過程中,又有兩位老師帶領班級學生加入,表5-4是各班的植樹情況,請分析哪個班級植樹最多,每種樹苗分別種了多少棵?表5-4三個班級植樹情況統計表班級/樹苗桃樹梨樹杏樹蘋果樹一班23131510二班12181020三班20192119任務分析不同于上一個任務的一行數據,本任務出現了三行數據,而且橫向、縱向都要分析。橫向,可以利用每一行計算每個班級的植樹總數,再分析出植樹優勝團隊;縱向,可以利用每一列計算每種樹苗種植了多少棵,分析出哪種樹苗最受歡迎。這種表格數據可以借助二維數組實現統計分析。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.3二維數組的定義和初始化

二維數組常用于存儲矩陣中的各個元素,把二維數組也寫成類似矩陣的“行列”排列形式,可以有助于形象化地理解二維數組的意義。5.3.1二維數組的定義二維數組的定義方法和一維數組相似。例如:floata[2][3];以上定義了一個float型的二維數組。“2”是第一維,代表數組的行數為2;“3”是第二維,代表數組的列數為3,也就是一行有3個元素;整個數組元素個數為2×3。二維數組定義的一般形式為:類型說明符

數組名[整型常量表達式1][整型常量表達式2];單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.3二維數組的定義和初始化敲黑板:1.每個維度分別用一對方括號包起來。floata[2,3];的定義方式是錯誤的,不能在一對花括號內寫兩個數值。2.二維數組中定義的“類型說明符”“數組名”“整型常量表達式”的規定與一維數組相同。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.3.2二維數組的初始化二維數組也是需要通過“初始化列表”進行初始化,如同一維數組,可以給所有元素賦初值,也可以給部分元素賦初值。1.全部賦值

(1)分行給二維數組賦初值。例如:intB[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};這種賦值方法比較直觀,第1個小花括號中的數據給第1行元素,第2個花括號中的數據給第2行元素……依次類推。(2)將所有數據寫在一個花括號內,例如:intB[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};,因為該數組定義第二維為“4”,即一行中有4個元素,所以“0,1,2,3”為第一行,“4,5,6,7”為第二行……依次類推。這種賦值方法容易編寫,但是不如按行賦值方法可讀性強。

當給數組全部元素賦初值時,可省略第一維長度,但不能省略第二維長度,也就是行數可以省略,列數不能省。上面兩種寫法還可以寫成:intB[][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};intB[][4]={0,1,2,3,4,5,6,7,8,9,10,11};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.3.2二維數組的初始化2.部分賦值,未被賦值的元素為0。(1)分行給二維數組部分元素賦初值。例如intB[3][4]={{0,1},{4},{8,9,10}};表示:0100400089100

例如intB[3][4]={{0,1},{4,5,6}};表示:010045600000例如intB[3][4]={{0,1},{},{8,9}};表示:010000008900分行部分賦值也可以省略第一維長度,例如:intB[3][4]={{0,1},{4},{8,9,10}};可以寫成intB[][4]={{0,1},{4},{8,9,10}};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.3.2二維數組的初始化(2)將所有數據寫在一個花括號內。例如intB[3][4]={1,2};代表:例如intB[3][4]={{0,1},{4},{8,9,10}};表示:

二維數組初始化的所有注意事項同一維數組初始化一樣,具體請參照一維數組“注意”內容。120000000000單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.4二維數組的引用和存儲二維數組元素的表示形式為:數組名[行標][列標]5.4.1二維數組的引用敲黑板:1.如同一維數組的下標一樣,二維數組的行標、列標都是整型常量表達式。2.一維數組a[5]的元素下標的范圍是:與一維數組對于下標的規定一樣,二維數組的行標和列標也是從0開始,所以元素的行標和列標是其位置減1。例如:a數組中第2行第3個元素應表示為a[1][2]。a[2][2]表示a數組中的第3行第3個元素。由此可推斷,數組中最后一個元素的行標、列標分別比行與列的實際長度少1,例如,數組B[3][4]行標的范圍是0~2,列標的范圍是0~3。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.4.2二維數組的存儲二維數組看成特殊的一維數組,普通的一維數組里面的元素全都是數值,例如:intA[3]={0,1,2};在內存中存儲如圖5-5:圖5-5一維數組而二維數組里面的元素是一個數組,例如:intB[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};在內存中的存儲如圖5-6:圖5-6二維數組單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.4.2二維數組的存儲二維數組代表矩陣,每個小括號的元素即可為1行,所以B[3][4]又可以理解為如圖5-7狀態。圖5-7二維數組矩陣可以觀察到每一行又是一個一維數組,B[0]可以作為這一行的數組名,0,1,2,3就是一維數組元素的下標,即B[0][0]、B[0][1]、B[0][2]、B[0][3],其他行以此類推,如圖5-8:圖5-8二維數組的邏輯關系單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.4.2二維數組的存儲上圖是二維數組的邏輯關系,實際上,二維數組在內存中是線性存儲的,并且采用行優先的方式存儲二維數組,即先依次存儲第1行,再存儲第2行……依次類推。例如,inta[2][3];存放順序如圖5-9:圖5-9二維數組在內存中的實際存放方式單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務實施

根據表5-4中數據可以定義為a[3][4];每一行的和可以放在一個新的一維數組中,然后在這個一維數組中求最大值,即得植樹優勝班級;每一列的和也可以放在另一個一維數組中,然后統一輸出。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務實施#include<stdio.h>main(){inta[3][4],sum_class[3],sum_tree[4]; inti,j,max,max_class; for(i=0;i<3;i++) {for(j=0;j<4;j++) scanf("%d",&a[i][j]);} for(i=0;i<3;i++) {sum_class[i]=0; for(j=0;j<4;j++) sum_class[i]+=a[i][j];} max=sum_class[0];max_class=0; for(i=1;i<3;i++) if(sum_class[i]>max) { max=sum_class[i];max_class=i; } printf("植樹最多的班級是%d班,共植樹%d棵\n",max_class+1,max); printf("桃樹\t梨樹\t杏樹\t蘋果樹棵樹分別是:\n"); for(j=0;j<4;j++) { sum_tree[j]=0; for(i=0;i<3;i++) sum_tree[j]+=a[i][j]; printf("%2d\t",sum_tree[j]);

}}任務三植樹倡議書

——字符數組及字符串單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務描述

習總書記早在2013年就面向世界提出人類命運共同體的理念,倡導全民植樹。一天下來,學生們不僅聽馬老師講述了習總書記的植樹理念和植樹行為,明白了生態文明人人有責,也進行了植樹活動比賽,帶班老師和學生們都干勁十足。馬老師醞釀了許久的全民植樹想法也實現了一半。回家后,他將想法和做法分享了國外的網友,并發了大家一起植樹倡議書,但是倡議書要有字數限制,不能長篇大論,因此,馬老師計劃一共使用300個單詞即可。

請用編程實現單詞的計數(假如單詞之間均有空格)。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務分析

在單詞數量多的情況下,一般使用數組配合循環處理,存儲單詞需要的是字符數組,一個單詞大約6個字母左右,最多需要300個單詞,單詞之間還有空格,可以定義一個字符數組a,長度為2000;我們可以利用單詞之間的空格數來計算單詞數。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.5字符數組的定義和存儲

字符數組即數組中的元素為字符型,是一種常用的數組,其最大用途是可以存放字符串。5.5.1字符數組的定義字符數組中的一個元素存放一個字符。定義字符數組的方法和定義數值型數組的方法類似。例如:chara[6];charb[2][3];請總結,定義字符數組的一般形式。還有一種特殊的字符數組——字符串,即用雙引號括起的字符序列。例如項目一直接輸出的字符串“Helloworld!”。C語言并沒有單獨的字符串變量,所以字符串僅能在字符數組中存儲。字符串與字符數組最大的差別在于字符串最后系統自動添加結束標志'\0'。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.5.2字符數組元素的存儲

前面介紹數值型數組:

intm[3];

代表系統為該數組分配了3個單元格,因為是整型數組,每個單元格占4個字節。字符數組也是如此。例如:

chara[6];圖5-10字符數組的存儲系統分配了6個單元格,每個單元格僅占一個字節,一共是6個字節長度。

請測試:printf("%d",sizeof(a));

printf("%d",sizeof("hello"));

單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.6字符數組的初始化和引用

5.6.1字符數組的初始化對于字符數組初始化,可以如同數值型數組一樣逐個元素賦值,也能用字符串整體初始化。1.逐個字符初始化(1)全部賦值。例如:chara[9]={'C','','p','r','o','g','r','a','m'};把9個字符分別賦給a[0]到a[8]9個元素。注意,各個字符常量需帶單引號。這里如果給所有元素都賦初值,數組長度可以省略不寫,上面定義可以改寫為:chara[]={'C','','p','r','o','g','r','a','m'};系統根據數組元素的個數自動將數組的長度定為9,用這種方式可以不必人工數字符個數,尤其是賦初值過程中字符個數比較多的情況比較方便。圖5-11字符數組存儲狀態單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.6字符數組的初始化和引用

(2)部分賦值,未被賦值的元素值為ASCII碼為0的字符,即'\0'。例如:chara[10]={'C','','p','r','o','g','r','a','m'};數組狀態如圖5-12所示。圖5-12部分賦值時字符數組存儲狀態單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.6字符數組的初始化和引用

2.使用字符串整體賦值chara[8]={"hello"};也可以省略花括號:chara[8]="hello";多余的內存單元格中也存放'\0',其在內存中存儲形式如圖5-13:圖5-13字符串存儲形式也可以省略字符數組長度:charb[]="hello";

系統為字符串后面自動加'\0',其在內存中存儲形式如圖5-14:圖5-14字符數組長度缺省時的存儲形式單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.6字符數組的初始化和引用

敲黑板:1.使用字符串整體賦值的方法更加直觀方便,但要注意數組b的長度是6,而不是5。2.由于字符串要存放到字符數組中,因此,前面依然正常進行字符數組定義,不能寫成:chara="hello";這種寫法將字符串"hello"賦給了字符型變量a,而a僅有一個字節的位置,無法容納一個字符串。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.6.2字符數組元素引用

和其他類型的數組一樣,可以逐個對字符數組元素的引用。由于字符數組還可以存放字符串數據,因此也可以以字符串的形式整體輸入、輸出。1.對字符數組元素逐個引用chara[10];inti;for(i=0;i<10;i++)scanf("%c",&a[i]);for(i=0;i<10;i++)printf("%c",a[i]);2.對字符串整體的引用chara[10];scanf("%s",a);printf("%s",a);單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.6.2字符數組元素引用

敲黑板:1.格式控制符不同,逐個引用時格式控制符%c,整體引用時格式控制符為%s。2.整體輸入時,a前面沒有取地址符。這是因為數組名本身表示數組在內存中的首地址。3.用整體引入的方法一旦輸入空格就代表輸入結束。例如:scanf("%s",a);從鍵盤輸入:thankyou數組a接收:thank這是因為scanf的用法:遇到空格、回車、TAB鍵代表輸入結束。4.雖然字符串中系統會自動追加一個'\0'表示結束,但輸出字符中不包括該結束符,且僅輸出結束符之前的所有元素。例如:charc[10];scanf(“%s”,c);從鍵盤輸入:China運行輸出:China單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.6.2字符數組元素引用4.雖然字符串中系統會自動追加一個'\0'表示結束,但輸出字符中不包括該結束符,且僅輸出結束符之前的所有元素。例如:charc[10];scanf(“%s”,c);從鍵盤輸入:China運行輸出:China單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.6.2字符數組元素引用小試牛刀:

請你定義并初始化一個字符數組,并且使用字符串輸出函數輸出。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.7字符串的相關函數5.7.1字符串輸入輸出函數在C函數庫中提供了一些用來專門處理字符串的函數,使用這些函數可以極大提高編程效率。字符串處理函數大致可分為字符串的輸入、輸出、合并、修改、比較、復制等。在使用輸入/輸出字符串函數前要引用頭文件<stdio.h>。1.字符串輸入函數格式:gets(字符數組名);作用:表示從鍵盤上輸入一個字符串賦給該數組,遇到回車表示結束輸入。例如:chara[20];gets(a);從鍵盤輸入:thankyou↙數組a接收thankyou請用printf(“%s”,a);觀察并記錄輸出結果,分析產生區別的原因單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.7字符串的相關函數2.字符串輸出函數格式:puts(字符數組名);或puts(字符串常量);作用:表示從字符數組或者字符串常量的起始位置開始輸出,一直遇到'\0'。例如:chara[30]="Plantingtrees";puts(a);或puts("Plantingtrees");請對上面字符串分別用printf("%s",a);和puts(a);輸出。(1)觀察結果并進行總結區別。(2)檢測兩種輸出方法對以下字符數組的輸出結果,并分析原因。chara[5]={'H','a','p','p','y'};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.7.2字符串處理函數除了輸入/輸出字符串函數之外,其他字符串處理函數應當引用頭文件<string.h>。1.求字符串長度函數

格式:strlen(a)

作用:求字符串a的長度,即求第一個'\0'之前的字符個數。

參數要求:a若是字符數組,這里僅寫數組名;若是字符串常量,就要寫串常量時加上雙引號。例如:charstr[20]="Iamhappy";

字符數組str的存儲狀態如圖5-15所示:圖5-15字符數組str的存儲狀態請測試:

strlen(str)=______________sizeof(str)=______________其中,sizeof()運算符是用來計算()中的標識符代表的實體分配的內存空間的字節數。請分析兩個式子不同的原因。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.7.2字符串處理函數2.字符串復制函數格式:strcpy(s1,s2)作用:將字符串s2的內容(包括字符串結束符'\0')依次存放到s1對應的單元格中。參數要求:s1必須是容量足夠大的字符數組,至少能容納s2

字符串所有內容;s2可以是字符數組也可以是字符串常量。如同常量賦值a=5,賦值號左邊一定是變量,不能是常量;字符串復制函數也是如此,被復制的一定是占有內存空間的連續單元格,而不能是字符串常量。例如:chars1[15]="Iamhappy";strcpy(s1,"happy");s1的初始狀態如圖5-16所示:圖5-16初始狀態s1的被賦值后的狀態如圖5-17所示:圖5-17賦值后狀態請測試:

puts(s1);_____________strlen(s1);_____________s1[7]=________________單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務準備:5.7.2字符串處理函數3.字符串連接函數格式:strcat(s1,s2)作用:將字符串s2的內容連接到s1后面,構成一個新的字符串。在連接的過程中,字符數組s1中的字符串結束符'\0'會被去掉,被s2字符串的第一個字符覆蓋。參數要求:s1必須是容量足夠大的字符數組,至少能容納字符串s1和s2

所有內容;s2可以是字符數組也可以是字符串常量。這是因為,字符數組s1必須有內存空間,方便字符串s2元素的存儲。例如:chars1[15]="Happy",s2[]="birthday";strcat(s1,s2);s1的初始狀態如圖5-18所示:圖5-18字符數組s1的初始存儲狀態執行后,s1的狀態如圖5-19所示:可以看到,"Happy"后的第一個'\0'被字符串

溫馨提示

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

最新文檔

評論

0/150

提交評論