第4章較多數(shù)據(jù)的程序設(shè)計(jì)_第1頁
第4章較多數(shù)據(jù)的程序設(shè)計(jì)_第2頁
第4章較多數(shù)據(jù)的程序設(shè)計(jì)_第3頁
第4章較多數(shù)據(jù)的程序設(shè)計(jì)_第4頁
第4章較多數(shù)據(jù)的程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第4 4章章 數(shù)組及結(jié)構(gòu)體數(shù)組及結(jié)構(gòu)體4.1 數(shù)組及其元素控制數(shù)組及其元素控制4.2 字符數(shù)組與字符串字符數(shù)組與字符串4.3 結(jié)構(gòu)體結(jié)構(gòu)體4.4 較多數(shù)據(jù)的程序設(shè)計(jì)實(shí)例較多數(shù)據(jù)的程序設(shè)計(jì)實(shí)例2022-6-26第第2頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組2022-6-26第第3頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組2022-6-26第第4頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組4.1 數(shù)組及其元素控制Rate945.39873210下標(biāo)標(biāo)明了元素在數(shù)組中

2、的位置 數(shù)組元素?cái)?shù)組元素下標(biāo)定義:把具有定義:把具有相同類型相同類型的若干變量按的若干變量按有序有序的形式組織起來就是數(shù)組。的形式組織起來就是數(shù)組。說明:說明:(1)數(shù)組是可以在內(nèi)存中數(shù)組是可以在內(nèi)存中連續(xù)存儲(chǔ)連續(xù)存儲(chǔ)多個(gè)元素的結(jié)構(gòu)多個(gè)元素的結(jié)構(gòu)。 (2)數(shù)組中的所有元素必須屬于數(shù)組中的所有元素必須屬于相同的數(shù)據(jù)類型相同的數(shù)據(jù)類型。2022-6-26第第5頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組4.1 數(shù)組及其元素控制數(shù)組的分類數(shù)組的分類按維數(shù)劃分:按元素類型劃分: 一維數(shù)組二維數(shù)組多維數(shù)組數(shù)值數(shù)組字符數(shù)組結(jié)構(gòu)體數(shù)組指針數(shù)組2022-6-26第第6頁頁石

3、家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組4.1 數(shù)組及其元素控制數(shù)組的分類數(shù)組的分類2022-6-26第第7頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組1.1.一維數(shù)組的定義一維數(shù)組的定義&定義方式:定義方式: 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名 表達(dá)式表達(dá)式 ; &內(nèi)存分配內(nèi)存分配 a00145a1a2a3a4a523a編譯時(shí)分配連續(xù)內(nèi)存編譯時(shí)分配連續(xù)內(nèi)存內(nèi)存字節(jié)數(shù)內(nèi)存字節(jié)數(shù)=數(shù)組長(zhǎng)度數(shù)組長(zhǎng)度* sizeof(元素?cái)?shù)據(jù)類型元素?cái)?shù)據(jù)類型)數(shù)組名表示內(nèi)存首數(shù)組名表示內(nèi)存首地址,是地址,是地址常量地址常量4.1.1 一維數(shù)組正確的定

4、義方法:正確的定義方法:int num50;char list20;double level6;錯(cuò)誤的定義方法:錯(cuò)誤的定義方法:int num;num=20;Int anum; # define N 20. . . int codesN;例例 int a6;2022-6-26第第8頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組2.2.一維數(shù)組元素的引用一維數(shù)組元素的引用&數(shù)組必須先定義,后使用;數(shù)組必須先定義,后使用; &數(shù)組元素的表示形式:數(shù)組名數(shù)組元素的表示形式:數(shù)組名 下標(biāo)下標(biāo) ;&只能逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組;只能逐個(gè)引用數(shù)組元素,不能一

5、次引用整個(gè)數(shù)組; 4.1.1 一維數(shù)組int num5; /*定義數(shù)組定義數(shù)組num*/num數(shù)組包含數(shù)組包含5個(gè)元素:個(gè)元素:num0,num1,num2,num3,num4注意:注意:C C語言中規(guī)定,數(shù)組元素下標(biāo)從語言中規(guī)定,數(shù)組元素下標(biāo)從0 0開始;不開始;不存在存在num5num5元素元素?cái)?shù)組元素的賦值:數(shù)組元素的賦值:for(i=0;i5;i+) scanf(“%d”,&sumi); 兩個(gè)數(shù)組之間的賦值:兩個(gè)數(shù)組之間的賦值:for(i=0;i5;i+) bi=sumi; 例例 int a10; printf(“%d”,a); ( )必須必須 for(j=0;j10;j+) prin

6、tf(“%dt”,aj); ( )2022-6-26第第9頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組3.3.一維數(shù)組的初始化一維數(shù)組的初始化&C C語言對(duì)數(shù)組初始化的規(guī)定:語言對(duì)數(shù)組初始化的規(guī)定:$可以只給部分元素賦初值??梢灾唤o部分元素賦初值。 例:例:intint a10=0,1,2,3; a10=0,1,2,3;$如不給數(shù)組初始化,則全部元素隱含均為如不給數(shù)組初始化,則全部元素隱含均為0 0值。值。$只能給元素逐個(gè)賦值,不能給數(shù)組整體賦值。只能給元素逐個(gè)賦值,不能給數(shù)組整體賦值。 如:如:intint a3=2,2,2; a3=2,2,2; 不能寫成

7、:不能寫成:intint a3=2; a3=2;$如給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)如給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個(gè)數(shù)。組元素的個(gè)數(shù)。 如:如:intint a=1,2,4,5,6; a=1,2,4,5,6;4.1.1 一維數(shù)組2022-6-26第第10頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組3.3.一維數(shù)組的初始化一維數(shù)組的初始化&其他的初始化情況:其他的初始化情況:判斷下面的語句是否正確判斷下面的語句是否正確intint arr10 = 10,9,8,7,6,5,4,3,2,1,0; arr10 = 10,9,8,

8、7,6,5,4,3,2,1,0; intint arr10 = 9,8,7,5; arr10 = 9,8,7,5; int arrint arr = 9,8,7; = 9,8,7; int arrint arr=;=; 4.1.1 一維數(shù)組/錯(cuò)誤!越界了錯(cuò)誤!越界了 /正確,后面的正確,后面的6 6個(gè)元素未初始化個(gè)元素未初始化/正確:元素個(gè)數(shù)為正確:元素個(gè)數(shù)為 3 3/錯(cuò)誤,到底是幾個(gè)元素?錯(cuò)誤,到底是幾個(gè)元素?2022-6-26第第11頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組例4.1:輸入5個(gè)數(shù),用冒泡排序算法,按照降序排列這一組數(shù)(從大到小)。冒泡排

9、序思路:對(duì)尚未排序的各元素從頭到尾依次比較相鄰的兩個(gè)元素是否逆序,若逆序就交換這兩元素,經(jīng)過第一輪比較排序后便可把最大(或最?。┑脑嘏藕茫缓笤儆猛瑯拥姆椒ò咽O碌脑刂饌€(gè)進(jìn)行比較,就得到了你所要的順序。可以看出如果有 n 個(gè)元素,那么一共要進(jìn)行 n-1 輪比較,第 i 輪要進(jìn)行 j=n-i 次比較。(如:有5個(gè)元素,則要進(jìn)行5-1輪比較。第3輪則要進(jìn)行5-3次比較) 。2022-6-26第第12頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組#include #define N 5void main()int gradeN,temp,i,j;printf(請(qǐng)

10、輸入請(qǐng)輸入%d%d個(gè)數(shù)個(gè)數(shù),N);for(i=0;iN;i+)scanf(%d,&gradei);for(i=0;iN;i+)for(j=0;jN-i-1; j+)/找出最小的數(shù),放在最后找出最小的數(shù),放在最后if(gradej gradej+1) temp = gradej+1;gradej+1 = gradej;gradej = temp;for(i=0;iN;i+)printf(%d,gradei);2022-6-26第第13頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組#include #define N 5void main()int gradeN,

11、temp,i,j;printf(請(qǐng)輸入請(qǐng)輸入%d%d個(gè)數(shù)個(gè)數(shù),N);for(i=0;iN;i+)scanf(%d,&gradei);for(i=0;iN;i+)for(j=i;jN-1; j+)/找出最大的數(shù),放在最前面找出最大的數(shù),放在最前面if(gradei gradej+1) temp = gradej+1;gradej+1 = gradei;gradei = temp;for(i=0;iN;i+)printf(%d,gradei);2022-6-26第第14頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組思路思路(1 1)將待插入數(shù),順序與原有序數(shù)據(jù)比較

12、,尋找待插)將待插入數(shù),順序與原有序數(shù)據(jù)比較,尋找待插入位置。入位置。(2 2)將待插入位置處的數(shù)據(jù)及其后續(xù)數(shù)據(jù)依此后移,留出)將待插入位置處的數(shù)據(jù)及其后續(xù)數(shù)據(jù)依此后移,留出插入位置。插入位置。(3 3)將該數(shù)插入。)將該數(shù)插入。例4.2:如果一個(gè)數(shù)組中保存的元素是有序的(由小到大),向這個(gè)數(shù)組中插入一個(gè)數(shù),使得插入后的數(shù)組元素依然保持有序。 數(shù)組應(yīng)用42022-6-26第第15頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組數(shù)組應(yīng)用4#define N 5#include void main()int numN+1=23,45,60,67,88,in;int

13、i,j;printf(n 請(qǐng)輸入一個(gè)要插入的數(shù):請(qǐng)輸入一個(gè)要插入的數(shù):););scanf(%d,&in);for(i=0;iin) break;for(j=N;ji;j-) numj=numj-1;numi=in;printf(n 插入后的數(shù)組元素:插入后的數(shù)組元素:n);for(i=0;iN+1;i+) printf(%d ,numi);printf(n);2022-6-26第第16頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組4.1.2 二維數(shù)組int i, j, num42;for (i = 0; i = 3; i+) for (j = 0; j =1

14、; j+) scanf(%d,&numij); ijnumij0010001200103001140020500216003070031800二維數(shù)組的賦值:二維數(shù)組的賦值:2022-6-26第第17頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組二維數(shù)組的初始化:二維數(shù)組的初始化:&分行初始化分行初始化 intint a23=1,2,3,4,5,6; a23=1,2,3,4,5,6; ( (全部初始化全部初始化) ) intint a23=1,2,4; a23=1,2,4; ( (部分初始化部分初始化) )&按元素排列順序初始化按元素排列順序初始化 intin

15、t a23=1,2,3,4,5,6; a23=1,2,3,4,5,6; ( (全部初始化全部初始化) ) int int a23=1,2,3; a23=1,2,3; ( (部分初始化部分初始化) )&第一維的長(zhǎng)度可以省略,但第二維的長(zhǎng)度不第一維的長(zhǎng)度可以省略,但第二維的長(zhǎng)度不能省。能省。 intint a3=1,4,5; a3=1,4,5; int int a3=1,2,3,4,5; a3=1,2,3,4,5;2022-6-26第第18頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組程序舉例程序舉例【例例4.34.3】 已知矩陣已知矩陣a a,先輸出,先輸出a,

16、a,再求它的轉(zhuǎn)置矩陣再求它的轉(zhuǎn)置矩陣b b,并輸出并輸出b b。a=1 2 34 5 6b=1 42 53 6#include void main() int a23=1,2,3,4,5,6; int b32,i,j; printf(“輸出數(shù)組輸出數(shù)組 a:n); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij;printf(n); printf(“數(shù)組數(shù)組b:n); for(i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); 思路:1.1.定義數(shù)組定義數(shù)組a a和數(shù)組

17、和數(shù)組b b;2.2.賦值或初始化數(shù)組賦值或初始化數(shù)組a a;3.3.搞清數(shù)組搞清數(shù)組a a中各元素下標(biāo)與數(shù)組中各元素下標(biāo)與數(shù)組b b中元素下標(biāo)的關(guān)系;中元素下標(biāo)的關(guān)系;4.4.將數(shù)組將數(shù)組a a中元素的值按中元素的值按3 3中確定的關(guān)系賦給數(shù)組中確定的關(guān)系賦給數(shù)組b b中的元素。中的元素。2022-6-26第第19頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組【例【例4.4 4.4 】輸入學(xué)號(hào)分別為輸入學(xué)號(hào)分別為1 1,2 2和和3 3的學(xué)生兩門課程的成績(jī),的學(xué)生兩門課程的成績(jī),然后輸出。要求程序運(yùn)行結(jié)果如下:(采用二維數(shù)組存儲(chǔ))然后輸出。要求程序運(yùn)行結(jié)果如

18、下:(采用二維數(shù)組存儲(chǔ)) 輸入學(xué)號(hào)輸入學(xué)號(hào) 1 1 兩兩門課程門課程的成績(jī):的成績(jī):65 5665 56 輸入學(xué)號(hào)輸入學(xué)號(hào)2 2 兩兩門課程門課程的成績(jī):的成績(jī):78 8078 80 輸入學(xué)號(hào)輸入學(xué)號(hào)3 3 兩兩門課程門課程的成績(jī):的成績(jī):89 6689 66 學(xué)員的學(xué)號(hào)及其兩個(gè)學(xué)期的成績(jī)?yōu)椋簩W(xué)員的學(xué)號(hào)及其兩個(gè)學(xué)期的成績(jī)?yōu)椋?學(xué)號(hào)學(xué)號(hào) 第一第一門課門課 第二第二門課門課 1 65 561 65 56 2 78 80 2 78 80 3 89 66 3 89 66 Press any key to continue Press any key to continue思路:1.1.定義二維數(shù)組定義

19、二維數(shù)組student32student32;2.2.賦值或初始化數(shù)組賦值或初始化數(shù)組studentstudent;3.3.按給定格式輸出;按給定格式輸出;本程序的關(guān)鍵在于怎樣才能按給定的行本程序的關(guān)鍵在于怎樣才能按給定的行, ,列格式輸入、輸出。列格式輸入、輸出。2022-6-26第第20頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組int i,j,student32;for(i = 0;i 3;i+) printf(n 輸入學(xué)號(hào) %d 兩門課程的成績(jī):,i+1); for(j = 0;j 2;j+) scanf(%d,&studentij);printf(

20、n 學(xué)員的學(xué)號(hào)及其兩門課程的成績(jī)?yōu)椋簄 );printf(n t學(xué)號(hào)t第一學(xué)期t第二學(xué)期);for(i = 0;i 3;i+) printf(nt); printf(%dt,i+1); for(j = 0;j 2;j+) printf(%dtt,studentij); printf(n );2022-6-26第第21頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組4.2 字符數(shù)組與字符串字符數(shù)組與字符串一維字符數(shù)組:一維字符數(shù)組:定義:定義: char ch10;(1)逐個(gè)字符初始化:逐個(gè)字符初始化:char ch5=H,e,l,l,o; (2)用字符串常量初始

21、化:用字符串常量初始化:char ch6=“Hello”; 注意下面兩種初始化方法的區(qū)別:注意下面兩種初始化方法的區(qū)別: char ch=H,e,l,l,o; char ch=“Hello”; h e l l oh e l l o02314 h e l l o 0h e l l o 00231452022-6-26第第22頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組二維字符數(shù)組:二維字符數(shù)組: 定義:定義:char ch57; 初始化:初始化:例例 char fruit7=A,p,p,l,e,O,r,a,n,g,e, G,r,a,p,e,P,e,a,r, P

22、,e,a,c,h;fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach002022-6-26第第23頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組二維數(shù)組初始化:二維數(shù)組初始化: 例例 char fruit7=“Apple”,”O(jiān)range”, ”Grape”,”Pear”,”Peach”;fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach002022-6-26第第24頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院

23、信息工程學(xué)院 C語言課程組語言課程組字符串的輸入輸出:字符串的輸入輸出: 逐個(gè)字符輸入、輸出:逐個(gè)字符輸入、輸出:%c; 整個(gè)字符串的輸入、輸出:整個(gè)字符串的輸入、輸出:%s;void main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, &stri); for(i=0;i5;i+) printf(“%c”, stri);void main() char str5; scanf(“%s”, str); printf(“%s”, str);%s,%s,要求用字符數(shù)組名要求用字符數(shù)組名, ,不加不加&, ,輸入串長(zhǎng)度應(yīng)輸入串長(zhǎng)度應(yīng)小于數(shù)組維數(shù)小于數(shù)

24、組維數(shù), ,遇空格遇空格或回車結(jié)束自動(dòng)加或回車結(jié)束自動(dòng)加00輸入:輸入:ab de輸出:輸出:ab輸入:輸入:ab de輸出:輸出:ab de2022-6-26第第25頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組例例 void main( ) char a =“Hello”; printf(“%s”,a); 結(jié)果:結(jié)果:Hello#-=* h e l l oh e l l o02314結(jié)果:結(jié)果:Hello用用“%s”%s”輸出時(shí),遇輸出時(shí),遇00結(jié)束結(jié)束例例 void main( ) char a5=H,e,l,l,o; printf(“%s”,a); 有

25、問題有問題!2022-6-26第第26頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組void main() char a=h,e,l,0,l,o,0; printf(%s,a);例例輸出:輸出:hel h e l 0 l o 0數(shù)組中有多個(gè)數(shù)組中有多個(gè)00時(shí)時(shí), ,遇第一個(gè)結(jié)束遇第一個(gè)結(jié)束2022-6-26第第27頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組【例例4.5】 字符串輸入舉例字符串輸入舉例#include void main() char a15,b5,c5; scanf(%s%s%s,a,b,c); print

26、f(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a);運(yùn)行情況:運(yùn)行情況:輸入:輸入:How are you?輸出:輸出:a=How b=are c=you?輸入:輸入:How are you?輸出:輸出:a=Howscanfscanf中中%s%s輸入時(shí)輸入時(shí), ,遇空格遇空格或回車結(jié)束或回車結(jié)束 H o w 0 a r e 0 y o u ? 0 若輸入:若輸入:How are you?How are you?輸出輸出結(jié)果是什么?結(jié)果是什么?2022-6-26第第28頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組

27、語言課程組v常用的字符串處理函數(shù)常用的字符串處理函數(shù)包含在頭文件包含在頭文件 string.hstring.hstring.hStrlen(計(jì)算字符串長(zhǎng)度計(jì)算字符串長(zhǎng)度)Strcpy(復(fù)制字符串復(fù)制字符串)Strcmp(比較字符串比較字符串)Strcat(連接字符串連接字符串)puts(字符串輸出函數(shù)字符串輸出函數(shù))gets(字符串輸入函數(shù)字符串輸入函數(shù))stdio.h2022-6-26第第29頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組【例例4.6】輸入一行字符(請(qǐng)包含空格),計(jì)算空格數(shù)。輸入一行字符(請(qǐng)包含空格),計(jì)算空格數(shù)。#include void

28、main() char line30; int i,count = 0; printf(n 請(qǐng)輸入一行字符:請(qǐng)輸入一行字符:n ); gets(line); i=0; while(linei != 0) if(linei = ) count+;i+; printf(n 其中的空格總數(shù)為其中的空格總數(shù)為 %d n ,count);C is a programming language在循環(huán)執(zhí)行時(shí),掃描整個(gè)數(shù)組以統(tǒng)計(jì)出空格 的數(shù)量,直到遇到字符 0。每次循環(huán)執(zhí)行時(shí),都會(huì)更新計(jì)數(shù)器 i 和 count。其中的空格總數(shù)為 42022-6-26第第30頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程

29、學(xué)院 C語言課程組語言課程組(1 1)strlenstrlen( (字符串字符串) ) 功能:計(jì)算字符串中字符的個(gè)數(shù);功能:計(jì)算字符串中字符的個(gè)數(shù); 返回值:整形數(shù),字符串實(shí)際長(zhǎng)度,不包括返回值:整形數(shù),字符串實(shí)際長(zhǎng)度,不包括0 0 ; 例如:例如:d=strlen(“Beijingd=strlen(“Beijing”); ”); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:d=7d=7(2 2)strcpystrcpy( (目標(biāo)字符數(shù)組目標(biāo)字符數(shù)組, ,源字符數(shù)組源字符數(shù)組) ) 功能:將源字符串拷貝到目標(biāo)字符數(shù)組中。功能:將源字符串拷貝到目標(biāo)字符數(shù)組中。 返回值:目標(biāo)數(shù)組的首地址。返回值:目標(biāo)數(shù)組的首地址。 說明

30、說明:(:(1 1)目標(biāo)字符數(shù)組)目標(biāo)字符數(shù)組必須足夠大必須足夠大; (2 2)拷貝時(shí)拷貝時(shí)00一同拷貝一同拷貝; (3 3)不能不能使用賦值語句為一個(gè)字符數(shù)組賦值使用賦值語句為一個(gè)字符數(shù)組賦值;例例 char str120; str1=“Hello!”; ( ) 可以初始化,可以初始化, 或使用或使用strcpy()函數(shù)給字符數(shù)組賦值。函數(shù)給字符數(shù)組賦值。正確方法:正確方法:char str120=“Hello!”,str220; strcpy(str2,str1);2022-6-26第第31頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組(3 3)strcm

31、pstrcmp( (字符串字符串1,1,字符串字符串2)2) 功能:比較兩個(gè)字符串。功能:比較兩個(gè)字符串。 比較規(guī)則:比較規(guī)則:對(duì)兩串從左向右逐個(gè)字符比較(對(duì)兩串從左向右逐個(gè)字符比較(按按ASCIIASCII碼碼值比值比),直到),直到遇到不同字符或遇到不同字符或00為止為止。 返回值:返回值:返回返回intint型整數(shù)型整數(shù);(a a)若字符串若字符串1 1 1 字符串字符串2 2,返回正整數(shù)返回正整數(shù);(c c)若字符串若字符串1= 1= 字符串字符串2 2,返回零,返回零;說明:字符串比較不能用說明:字符串比較不能用“= =”,“= =”,必須用必須用strcmpstrcmp()函數(shù)。(

32、)函數(shù)。 if(strcmp(“Tom”,“John”)= =0) printfif(strcmp(“Tom”,“John”)= =0) printf(“(“兩串相同兩串相同);); else printf else printf(“(“兩串不同兩串不同”) );(4) strcat(4) strcat( (字符數(shù)組字符數(shù)組1,1,字符數(shù)組字符數(shù)組2)2) 功能:把字符數(shù)組功能:把字符數(shù)組2 2連接到字符數(shù)組連接到字符數(shù)組1 1的后面。的后面。 返回值:返回字符數(shù)組返回值:返回字符數(shù)組1 1的首地址。的首地址。 說明說明(a a)字符數(shù)組字符數(shù)組1 1必須足夠大必須足夠大; (b b)連接前連

33、接前, ,兩串均以兩串均以00結(jié)束結(jié)束; ;連接后連接后, ,串串1 1的的00取消取消, ,新串最后新串最后加加00; (c c)連接后字符串的總長(zhǎng)度將是字符串連接后字符串的總長(zhǎng)度將是字符串1 1的長(zhǎng)度加上字符串的長(zhǎng)度加上字符串2 2的長(zhǎng)度。的長(zhǎng)度。 例如:例如:char ch120=“Hello”,ch2=“world!”;char ch120=“Hello”,ch2=“world!”; strcat(ch1,ch2); strcat(ch1,ch2); 則則ch1ch1中的字符串為:中的字符串為:Hello world!Hello world!2022-6-26第第32頁頁石家莊經(jīng)濟(jì)學(xué)院

34、信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組#include #include void main()char username15,pwd15;printf(n 請(qǐng)輸入用戶名:請(qǐng)輸入用戶名: );gets(username);printf(n 請(qǐng)輸入密碼:請(qǐng)輸入密碼: );gets(pwd);if(strcmp(username,John)=0) & (strcmp(pwd,123456)=0)printf(n 您已成功登錄您已成功登錄 n );elseprintf(n 用戶名和用戶名和/或密碼無效或密碼無效 n ); 例4.7要求用戶輸入用戶名和密碼,判斷是否允許登錄 請(qǐng)

35、輸入用戶名:John 請(qǐng)輸入密碼: 123456 您已成功登錄 請(qǐng)輸入用戶名: john 請(qǐng)輸入密碼: 123456 用戶名和/或密碼無效2022-6-26第第33頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組上機(jī)作業(yè):(1 1)讀)讀1010個(gè)整數(shù)存入數(shù)組,使用一維數(shù)組存儲(chǔ)這個(gè)整數(shù)存入數(shù)組,使用一維數(shù)組存儲(chǔ)這1010個(gè)數(shù),個(gè)數(shù),找出其中最大值及其下標(biāo)找出其中最大值及其下標(biāo). .(2 2)使用二維數(shù)組存儲(chǔ)這)使用二維數(shù)組存儲(chǔ)這1010個(gè)數(shù),找出其中最大值及其個(gè)數(shù),找出其中最大值及其下標(biāo)。下標(biāo)。(3 3)利用數(shù)組輸入)利用數(shù)組輸入5 5種商品的價(jià)格,計(jì)算合計(jì)費(fèi)用

36、,并輸種商品的價(jià)格,計(jì)算合計(jì)費(fèi)用,并輸出出 。(4)4)用戶從鍵盤輸入字符串,存儲(chǔ)于字符數(shù)組中,完成如用戶從鍵盤輸入字符串,存儲(chǔ)于字符數(shù)組中,完成如下功能:下功能:a)a)計(jì)算并輸出該字符串的長(zhǎng)度。計(jì)算并輸出該字符串的長(zhǎng)度。b)b)把該字符串拷把該字符串拷貝到另一個(gè)字符數(shù)組中,并輸出。貝到另一個(gè)字符數(shù)組中,并輸出。c)c)把這兩個(gè)串連接形成把這兩個(gè)串連接形成一個(gè)新串,輸出。一個(gè)新串,輸出。2022-6-26第第34頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組 結(jié)構(gòu)體用于存儲(chǔ)數(shù)據(jù)類型不相同數(shù)據(jù)類型不相同的一組數(shù)據(jù)。4.3 結(jié)構(gòu)體結(jié)構(gòu)體numnamesexmat

37、hcomputer01MaryF899002JohnM78.587.503PeterF677804RoseM97.595.605KateF64702022-6-26第第35頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組struct student char num3; char name20; char sex; float math; float computer;num name sexstudent 結(jié)構(gòu)體定義并不預(yù)留內(nèi)存 結(jié)構(gòu)體定義放置在程序的開始部分,位于頭文件聲明之后 math 結(jié)構(gòu)體定義僅描述了一個(gè)結(jié)構(gòu)的形式。如果要在程序里使用結(jié)構(gòu),需要聲明結(jié)構(gòu)

38、體變量。computer4.3 結(jié)構(gòu)體結(jié)構(gòu)體2022-6-26第第36頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組struct student char num3; char name20; char sex; float math; float computer;struct student student1,student2;I.先定義結(jié)構(gòu)體,再聲明結(jié)構(gòu)體變量struct student char num3; char name20; char sex; float math; float computer;student1,student2;II.在定

39、義結(jié)構(gòu)體類型的同時(shí)聲明結(jié)構(gòu)體變量struct char num3; char name20; char sex; float math; float computer;student1,student2;III. 直接聲明結(jié)構(gòu)體變量聲明一個(gè)類型為 student 結(jié)構(gòu)體的變量,將會(huì)為該變量分配內(nèi)存,內(nèi)存值為所有成員的內(nèi)存之和。 2022-6-26第第37頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組struct date int month; int day; int year;struct int num; char name20; char sex; st

40、ruct date birthday; float score;student1,student2;結(jié)構(gòu)體變量成員的表示方法:結(jié)構(gòu)體變量名.成員名例如:student1.num、student2.sex、student1.birthday.month嵌套結(jié)構(gòu)體2022-6-26第第38頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化內(nèi)存student3struct student student3=3,Yao Ming ,M,90.5; 3Yao MingM賦值的順序應(yīng)與成員聲明時(shí)的順序一樣;允許初始化語句中的值的數(shù)目比結(jié)構(gòu)體

41、成員數(shù)目少。student3.sex90.5student3.score2022-6-26第第39頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組student1student1.num=1;=Zhang Zi Liang;student1.sex=M;printf(請(qǐng)輸入成績(jī):請(qǐng)輸入成績(jī):n);scanf(%f,&student1.score);結(jié)構(gòu)體變量賦值1Zhang Zi Liang Mq 用輸入語句或賦值語句來給結(jié)構(gòu)體變量的各個(gè)成員賦值7878student2 = studen

42、t1; student21Zhang Zi Liang M782022-6-26第第40頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組結(jié)構(gòu)體的應(yīng)用:結(jié)構(gòu)體的應(yīng)用:例例4.8 4.8 使用結(jié)構(gòu)體存儲(chǔ)表格中的數(shù)據(jù)使用結(jié)構(gòu)體存儲(chǔ)表格中的數(shù)據(jù)numnamesexmathcomputer01MaryF899002JohnM78.587.503PeterF677804RoseM97.595.605KateF6470提示:結(jié)構(gòu)體成員按照每個(gè)人的具體信息設(shè)計(jì)。提示:結(jié)構(gòu)體成員按照每個(gè)人的具體信息設(shè)計(jì)。2022-6-26第第41頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工

43、程學(xué)院 C語言課程組語言課程組struct studentchar num3;char name6;char sex;double score2;void main()struct student stu1=01,Mary,F,89,90;struct student stu2=02,John,M,78.5,87.5;struct student stu3=03,Peter,F,67,78;struct student stu4=04,Rose,M,97.5,95.6;struct student stu5=“05”,“Kate”,F,64,70; 2022-6-26第第42頁頁石家莊經(jīng)濟(jì)學(xué)院

44、信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組例4.9:根據(jù)computer的成績(jī),輸出80分以下的學(xué)生的詳細(xì)信息。 使用結(jié)構(gòu)示例numnamesexmathcomputer01MaryF899002JohnM78.587.503PeterF677804RoseM97.595.605KateF64702022-6-26第第43頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組#includestruct student char num3;/*學(xué)號(hào)學(xué)號(hào)*/ char name6;/*姓名姓名*/ char sex;/*性別性別*/ double s

45、core2;/*成績(jī)成績(jī)*/;void main() struct student stu1=01,Mary,F,89,90; struct student stu2=02,John,M,78.5,87.5; struct student stu3=03,Peter,F,67,78; struct student stu4=04,Rose,M,97.5,95.6; struct student stu5=05,Kate,F,64,70; printf(computer80分以下的學(xué)生名單如下:分以下的學(xué)生名單如下:n); if(stu1.score180) printf(%st%st%ct%5

46、.2ft%5.2fn, stu1.num,,stu1.sex,stu1.score0,stu1.score1); if(stu2.score180) printf(%st%st%ct%5.2ft%5.2fn, stu2.num,,stu2.sex,stu2.score0,stu2.score1); if(stu3.score180) printf(%st%st%ct%5.2ft%5.2fn, stu3.num,,stu3.sex,stu3.score0,stu3.score1); if(stu1.score180) printf(%st%st%ct%5.2ft%5.2fn, stu3.num,,stu3.sex,stu3.score0,stu4.score1);2022-6-26第第44頁頁石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 C語言課程組語言課程組struct student int num3; char name6; char sex; double score2;stu30;q 元素為結(jié)構(gòu)體類型的數(shù)組稱為結(jié)構(gòu)體數(shù)組。q 在實(shí)際應(yīng)用中,經(jīng)常用結(jié)構(gòu)體數(shù)組來表示具有相同數(shù)據(jù)結(jié)構(gòu)的一個(gè)群體。例如一個(gè)班的學(xué)員檔案,一個(gè)公司的職工檔案等。定義了一個(gè)結(jié)構(gòu)體數(shù)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論