




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
會(huì)計(jì)學(xué)1C語言數(shù)組和字符串2023/1/172
整型基本類型:實(shí)型字符型、枚舉類型
數(shù)組類型構(gòu)造類型:
結(jié)構(gòu)體類型
公用體類型指針類型空類型C語言的數(shù)據(jù)類型第1頁/共76頁2023/1/173引言
簡單變量:如a,b2,x3,day,sum,如同一個(gè)姓名代表一個(gè)人一樣,變量間沒有任何聯(lián)系。
有一些變量可以歸結(jié)為同一類型,如s1,s2,s3,s4,s5,…s10代表同一個(gè)班中10個(gè)學(xué)生每個(gè)學(xué)生的成績。這些變量都用相同的名字,只是下角標(biāo)有所區(qū)別,即用相同的名字不同的下標(biāo)代表同一類型的一組數(shù)據(jù),這種變量稱為下標(biāo)變量。C語言中同樣也可以用下標(biāo)變量,只是把下標(biāo)用方括號括起來。即s[1],s[2],…s[10],這就是數(shù)組類型變量。第2頁/共76頁2023/1/174什么構(gòu)造類型?
所謂構(gòu)造類型是指由基本類型數(shù)據(jù)按一定的規(guī)則組成的,是用戶自己按規(guī)則定義的。數(shù)組是構(gòu)造類型之一。在數(shù)學(xué)中我們學(xué)過數(shù)列、矩陣的概念,數(shù)列通常表示為:a1
、a2、a3、….、an
矩陣通常表示為:a11a12a13a14a21a22a23a242×4第3頁/共76頁2023/1/175在C語言中表示數(shù)組和矩陣的方法是:數(shù)組:a[0]、a[1]、a[2]、a[3]、a[4]、a[5]其中a:稱為數(shù)組名。方括號中的數(shù):稱為下標(biāo)下標(biāo)是一個(gè)數(shù)時(shí),也就是數(shù)列,稱為一維數(shù)組。下標(biāo)是兩個(gè)數(shù)時(shí),也就是矩陣,稱為二維數(shù)組。還有三維數(shù)組、四維數(shù)組等。第4頁/共76頁2023/1/176第8章數(shù)組與字符串一個(gè)人N門課的成績怎樣存儲(chǔ)和處理?一個(gè)班N門課的成績怎樣存儲(chǔ)和處理?......這些數(shù)據(jù)的特點(diǎn):具有相同的數(shù)據(jù)類型。為了方便地使用這些數(shù)據(jù),C語言提供了一種構(gòu)造數(shù)據(jù)類型:數(shù)組。例如:存儲(chǔ)學(xué)生成績用實(shí)型數(shù)組
score[5]其中:score是數(shù)組名。該數(shù)組可以存放5個(gè)成績,分別用下標(biāo)變量表示:score[0],score[1],…score[4]。下標(biāo)變量也稱為數(shù)組元素。第5頁/共76頁2023/1/177引言
數(shù)組的特點(diǎn):
1、數(shù)組是有序數(shù)據(jù)的集合;2、數(shù)組中的每一個(gè)元素都屬于同一個(gè)數(shù)據(jù)類型;3、用一個(gè)統(tǒng)一的數(shù)組名和下標(biāo)來唯一的確定數(shù)組中的元素。第6頁/共76頁2023/1/1788.1一維數(shù)組例如:
inta[10];
floatscore[5];
“數(shù)據(jù)類型”:是數(shù)組元素的數(shù)據(jù)類型?!皵?shù)組名”:遵循C語言標(biāo)識符規(guī)則?!俺A勘磉_(dá)式”:表示數(shù)組中有多少個(gè)元素,即數(shù)組的長度。它可以是整型常量、整型常量表達(dá)式或符號常量。
8.1.1一維數(shù)組的定義數(shù)據(jù)類型
數(shù)組名[常量表達(dá)式];第7頁/共76頁2023/1/179以下數(shù)組定義是正確的:#defineN10……floatscore1[N],score2[N];intnum[10+N];charc[26];以下數(shù)組定義是不正確的:intarray(10);intn;floatscore[n];doubleb['a'..'d'];charstr[];8.1.1一維數(shù)組的定義(續(xù))第8頁/共76頁2023/1/1710數(shù)組在內(nèi)存的存放數(shù)組下標(biāo)從0開始。一維數(shù)組的數(shù)組元素在內(nèi)存里按順序存放。數(shù)組名代表數(shù)組的首地址,即score的值與score[0]的地址值相同。score[0]score[1]score[2]score[3]score[4]91.534.567.572.084.0低地址高地址score數(shù)組第9頁/共76頁2023/1/17118.1.2數(shù)組元素的引用
格式:例如:輸入學(xué)生成績
for(i=0;i<5;i++)
scanf("%f",&score[i]);例如:fib[n]=fib[n-1]+fib[n-2];下標(biāo)表達(dá)式的值必須是整型表達(dá)式。數(shù)組名[下標(biāo)表達(dá)式]第10頁/共76頁2023/1/17128.1.2數(shù)組元素的引用(續(xù))說明:①下標(biāo)從0開始(下界為0),數(shù)組的最大下標(biāo)(上界)是數(shù)組長度減1。例如:
inta[10];scanf("%d",&a[10]);/*下標(biāo)越界*/
C編譯系統(tǒng)不做越界檢查,如果引用的數(shù)組元素超出數(shù)組范圍會(huì)破壞其他變量的值。第11頁/共76頁2023/1/17138.1.2數(shù)組元素的引用(續(xù))
②
[]是下標(biāo)運(yùn)算符,引用數(shù)組元素時(shí),根據(jù)數(shù)組的首地址和下標(biāo)數(shù),計(jì)算出該元素的實(shí)際地址,取出該地址的內(nèi)容進(jìn)行操作。如引用score[2]:(1)計(jì)算
2000+2*4=2008(2)取出2008的內(nèi)容2000H2004H2008H200CH218CHscore[0]score[1]score[2]score[3]score[4]91.534.567.572.084.0第12頁/共76頁2023/1/1714合法標(biāo)識符表示元素個(gè)數(shù)引用時(shí)下標(biāo)從0開始[]:數(shù)組運(yùn)算符單目運(yùn)算符例
inta[6];a[0]0145a[1]a[2]a[3]a[4]a[5]23a編譯時(shí)分配連續(xù)內(nèi)存內(nèi)存字節(jié)數(shù)=數(shù)組大小*
sizeof(元素?cái)?shù)據(jù)類型)數(shù)組名表示內(nèi)存首地址,是地址常量一維數(shù)組的定義定義方式:類型說明符
數(shù)組名[常量表達(dá)式];返回第13頁/共76頁2023/1/1715main(){inti,a[10];for(i=0;i<=9;i++)
a[i]=i;for(i=9;i>=0;i--)printf(“%d”,a[i]);}一維數(shù)組的引用數(shù)組必須先定義,后使用只能逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組數(shù)組元素表示形式:數(shù)組名[下標(biāo)]其中:下標(biāo)可以是常量或整型表達(dá)式例8.1數(shù)組元素的引用運(yùn)行結(jié)果:9876543210第14頁/共76頁2023/1/17168.1.3一維數(shù)組的初始化初始化:在定義數(shù)組時(shí)給數(shù)組元素賦初值。1.在定義數(shù)組時(shí),對全部數(shù)組元素賦初值例如:inta[5]={0,1,2,3,4};此時(shí)可以省略數(shù)組長度,例如:inta[]={0,1,2,3,4};
2.在定義數(shù)組時(shí),對部分?jǐn)?shù)組元素賦初值例如:inta[5]={1,2,3};系統(tǒng)為其余元素賦0。3.當(dāng)初值的個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù)時(shí),編譯出錯(cuò)例如:
inta[5]={0,1,2,3,4,5};
第15頁/共76頁2023/1/17178.1.4一維數(shù)組應(yīng)用舉例【例8.1】將10個(gè)人的成績輸入計(jì)算機(jī)后按逆序顯示。#defineN10main(){inti;floatscore[N];for(i=0;i<N;i++)scanf("%f",&score[i]);for(i=N-1;i>=0;i--)printf("%8.1f",score[i]);}運(yùn)行情況如下:
6774899234678395737878.073.095.083.067.034.092.089.074.067.0第16頁/共76頁2023/1/1718【例8.2】用數(shù)組求Fibonacci數(shù)列前20個(gè)數(shù)分析:定義一個(gè)含有20個(gè)元素的數(shù)組f,即intf[20];
其中f[0]=1,f[1]=1,f[n]=f[n-1]+f[n-2](n≥2)
用一個(gè)循環(huán)結(jié)構(gòu):讓循環(huán)變量n從2到20,循環(huán)體為f[n]=f[n-1]+f[n-2]
程序如面所示:lt16第17頁/共76頁2023/1/1719f[0]f[1]f[2]f[3]f[4]f[5]f[19]……...11f[19]01452319235#include<stdio.h>main(){inti;
intf[20]={1,1};
for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++){if(i%5==0)printf("\n");printf("%12d",f[i]);}}第18頁/共76頁2023/1/1720【例8.4】冒泡法排序(從小到大)。
排序過程:(1)比較第一個(gè)數(shù)與第二個(gè)數(shù),若為逆序a[0]>a[1],則交換;然后比較第二個(gè)數(shù)與第三個(gè)數(shù);依次類推,直至第n-1個(gè)數(shù)和第n個(gè)數(shù)比較為止——第一趟起泡排序,結(jié)果最大的數(shù)被安置在最后一個(gè)元素位置上(2)對前n-1個(gè)數(shù)進(jìn)行第二趟起泡排序,結(jié)果使次大的數(shù)被安置在第n-1個(gè)元素位置(3)重復(fù)上述過程,共經(jīng)過n-1趟起泡排序后,排序結(jié)束第19頁/共76頁2023/1/1721例38496576132730
97第一趟384965132730
76第二趟3849132730
65第三趟38132730
49第四趟1327
30
38第五趟1327
30第六趟4938659776132730初始關(guān)鍵字n=813767676273013652765306513134949304927382738303813
27第七趟3849769797979727132730第20頁/共76頁2023/1/1722冒泡法排序(續(xù))從上述過程可以看到:n個(gè)數(shù)要比較n-1趟,而在第j趟比較中,要進(jìn)行n-j次兩兩比較。
冒泡法排序for(i=0;i<N;i++)輸入a[i]for(j=1;j<N;j++)for(i=0;i<N-j;i++)a[i]>a[i+1]TFa[i]與a[i+1]交換輸出a[0]~a[N-1]第21頁/共76頁2023/1/1723#include<stdio.h>main(){inta[11],i,j,t;printf("Input10numbers:\n");
for(i=1;i<11;i++)scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=9;j++)for(i=1;i<=10-j;i++)
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]);}第22頁/共76頁2023/1/1724以6個(gè)數(shù):3、7、5、6、8、0為例。思路:第一趟:將第一個(gè)數(shù)依次和后面的數(shù)比較,如果后面的某數(shù)小于第一個(gè)數(shù),則兩個(gè)數(shù)交換,比較結(jié)束后,第一個(gè)數(shù)則是最小的數(shù)。第二趟:將第二個(gè)數(shù)依次和后面的數(shù)比較,如果后面的某數(shù)小于第二個(gè)數(shù),則兩個(gè)數(shù)交換,比較結(jié)束后,第二個(gè)數(shù)則是次小的數(shù);……?!纠?.5】選擇法排序(從小到大)。第23頁/共76頁2023/1/1725【例8.5】選擇法排序(續(xù))圖8.3選擇法排序for(i=0;i<N;i++)輸入a[i]for(j=0;j<N-1;j++)for(i=j+1;i<N;i++)a[j]>a[i]TFa[j]與a[i]交換輸出a[0]~a[N-1]第24頁/共76頁2023/1/1726#defineN5main(){inta[N];inti,j,t;for(i=0;i<N;i++)scanf("%d",&a[i]);printf("\n");
for(j=0;j<N-1;j++)/*確定基準(zhǔn)位置
*/for(i=j+1;i<N;i++)if(a[j]>a[i]){t=a[j];a[j]=a[i];a[i]=t;}printf("Thesortednumbers:\n");…}程序運(yùn)行情況如下:9678658640Thesortednumbers:4065788696第25頁/共76頁2023/1/17278.2二維數(shù)組
數(shù)據(jù)類型數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];
例如:
floatx[2][3];
8.2.1二維數(shù)組的定義X[0][0]X[0][1]X[0][2]X[1][0]X[1][1]X[1][2]inta[3,4],b(3,4),c[][],d(3)(4);第26頁/共76頁2023/1/1728x[0][0]x[0][1]x[0][2]x[1][0]x[1][1]x[1][2]2000H2004H2008H200cH2010H2014H地址
值
數(shù)組元素二維數(shù)組元素在內(nèi)存中的排列順序:按行存放第27頁/共76頁2023/1/1729例inta[3][4];二維數(shù)組理解每個(gè)元素a[i]由包含4個(gè)元素的一維數(shù)組組成二維數(shù)組a是由3個(gè)元素組成a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[0]a[1]a[2]行名014523a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[0][0]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[1][2]67101189a[0]a[1]a[2]第28頁/共76頁2023/1/1730x[0]是數(shù)組名,是元素x[0][0]的地址x[1]是數(shù)組名,
是元素x[1][0]的地址二維數(shù)組可看作是一種特殊的一維數(shù)組x[0]----x[0][0],x[0][1],x[0][2]x[1]----x[1][0],x[1][1],x[1][2]例如,可以把x數(shù)組看作是包含二個(gè)元素的一維數(shù)組,每個(gè)元素又是一個(gè)含有三個(gè)元素一維數(shù)組。第29頁/共76頁2023/1/1731a[3][4]=3;/*下標(biāo)越界*/a[1,2]=1;/*應(yīng)寫成a[1][2]=1;*/8.2.2二維數(shù)組元素的引用例:inta[3][4];a[0][0]=3;a[0][1]=a[0][0]+10;數(shù)組名[行下標(biāo)表達(dá)式][列下標(biāo)表達(dá)式]
數(shù)組元素的表示形式:第30頁/共76頁2023/1/17328.2.3二維數(shù)組的初始化例:inta[2][3]={1,2,3,4,5,6};
1.按行賦初值例:inta[2][3]={{1,2,3},{4,5,6}};初始化后結(jié)果:123456
2.按數(shù)組元素在內(nèi)存中排列的順序?qū)Ω髟刭x初值3.給部分元素賦初值例:inta[2][3]={{1},{4}};初始化后結(jié)果:100400第31頁/共76頁2023/1/17338.2.3二維數(shù)組的初始化(續(xù))4.?dāng)?shù)組初始化時(shí),行長度可省,列長度不能省
例如:inta[][3]={1,2,3,4,5,6,7};
intb[][4]={{1},{4,5}};初始化結(jié)果:
a
結(jié)果:a[0]:123a[1]:456a[2]:700b
結(jié)果:b[0]:1000b[1]:4500第32頁/共76頁2023/1/1734下面對二維數(shù)組的定義都是錯(cuò)誤的:8.2.3二維數(shù)組的初始化(續(xù))floatx[3][]={1.0,2.0,3.0,4.0,5.0,8.0};
inta[][],b[][2],c[3][];
intm[2][4]={1,2,3,4,5,6,7,8,9};
/*編譯出錯(cuò),初值個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù)*/
第33頁/共76頁2023/1/17358.2.4二維數(shù)組應(yīng)用舉例【例8.6】給一個(gè)4行3列的二維數(shù)組輸入/出數(shù)據(jù)。main(){inta[4][3],i,j,k;
for(i=0;i<4;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);
for(i=0;i<4;i++){printf("\n");for(j=0;j<3;j++) printf("%d\t",a[i][j]);}printf("\n");}程序運(yùn)行情況如下:123456789101112123456789101112第34頁/共76頁2023/1/1736二維數(shù)組元素的引用形式:數(shù)組名[下標(biāo)][下標(biāo)]二維數(shù)組元素的初始化分行初始化:例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化按元素排列順序初始化
例inta[2][3]={{1,2},{4}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400部分初始化
例inta[][3]={{1},{4,5}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]100450第一維長度省略初始化
例inta[2][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化
例inta[2][3]={1,2,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000部分初始化例inta[][3]={1,2,3,4,5};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123450第一維長度省略初始化當(dāng)初值的個(gè)數(shù)不能被第2個(gè)下標(biāo)除盡時(shí),則第一個(gè)下標(biāo)等于所得的商加1。第35頁/共76頁2023/1/1737程序舉例【例8.6】將二維數(shù)組行列元素互換,存到另一個(gè)數(shù)組中。a=123456b=142536#include<stdio.h>main(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf("arraya:\n");
for(i=0;i<=1;i++){for(j=0;j<=2;j++) {printf("%5d",a[i][j]); b[j][i]=a[i][j]; } printf("\n");}printf("arrayb:\n");
for(i=0;i<=2;i++){for(j=0;j<=1;j++) printf("%5d",b[i][j]);printf("\n");}}第36頁/共76頁2023/1/17388.2.4二維數(shù)組應(yīng)用舉例(續(xù))【例8.7】有一個(gè)N×M矩陣,編程序求出其中絕對值最大的那個(gè)元素的值及其所在的行、列位置。
圖8.4查找最大元素max=|a[0][0]|,row=0,colum=0for(i=0;i<N;i++)for(j=0;j<M;j++)|a[i][j]|>maxTFmax=|a[i][j]|row=icolum=j輸出絕對值最大的元素及行列下標(biāo)第37頁/共76頁2023/1/1739#include"math.h"#defineN4#defineM5main(){inti,j,row,colum,max,a[N][M];
……/*輸入數(shù)據(jù)*/max=a[0][0];row=colum=0;for(i=0;i<N;i++)for(j=0;j<M;j++)if(abs(a[i][j])>max){max=abs(a[i][j]);row=i;colum=j;}……/*輸出數(shù)據(jù)*/}程序運(yùn)行情況如下:3456126723126743985465456616243783256419max=98,row=1,colum=3第38頁/共76頁2023/1/17408.3字符數(shù)組與字符串字符數(shù)組:可以存放若干個(gè)字符,也可以存放字符串。8.3.1基本概念China\0字符串:字符串的末尾必須有’\0’字符,它的ASCII碼值為0。China不是字符串是字符串第39頁/共76頁2023/1/1741再例如:chara[3][5];a數(shù)組是一個(gè)二維的字符數(shù)組,可以存放15個(gè)字符或3個(gè)長度不大于4的字符串。8.3.2字符數(shù)組的定義
例如:chars[10];s數(shù)組是一維字符數(shù)組,它可以存放10個(gè)字符或一個(gè)長度不大于9的字符串。注意:字符串只能存放在字符數(shù)組中。第40頁/共76頁2023/1/17428.3.3字符數(shù)組的初始化China1.用字符常量賦初值例如:charc[5]={'C','h','i','n','a'};再例如:charc[6]={'C','h','i','n','a','\0'};China\0是字符串不是字符串第41頁/共76頁2023/1/17438.3.3字符數(shù)組的初始化(續(xù))再例如:chara[3][10]={"basic","pascal","c"};astring\0\02.用字符串常量賦初值例如:charstr[10]={"astring"};或charstr[10]="astring";basic\0\0\0\0\0pascal\0\0\0\0c\0\0\0\0\0\0\0\0\0是字符串嗎?第42頁/共76頁2023/1/17448.3.3字符數(shù)組的初始化(續(xù))例如:chars3[7]={'s','t','r','i','n','g'};Goodmorning!\03.初始化時(shí)長度的省略例如:chars1[]="Goodmorning!";b[0]b[13]例如:chars2[]={'s','t','r','i','n','g'};stringstring\0思考:哪個(gè)數(shù)組存放的是字符串?第43頁/共76頁2023/1/17458.3.4字符數(shù)組的引用【例8.8】對字符數(shù)組c1賦'0'~'9',對字符數(shù)組c2賦'A'~'Z',然后輸出c1和c2數(shù)組中的數(shù)據(jù)。
1.對字符數(shù)組元素的引用可以為數(shù)組元素賦值,也可以輸入/輸出元素的值。第44頁/共76頁2023/1/1746程序如下:main(){charc1[10],c2[26];inti;
for(i=0;i<10;i++)c1[i]=i+48;
for(i=0;i<26;i++)c2[i]=i+'A';
for(i=0;i<10;i++)printf("%c",c1[i]);printf("\n");for(i=0;i<26;i++)printf("%c",c2[i]);printf("\n");}第45頁/共76頁2023/1/17472.對字符數(shù)組的整體引用⑴輸出字符串例如:charc[]="China";printf("%s",c);輸出結(jié)果為:ChinaC是數(shù)組首地址輸出時(shí)遇'\0'為止
再例如:charc[]="pascal\0basic";printf("%s",c);輸出結(jié)果為:pascal第46頁/共76頁2023/1/17482.對字符數(shù)組的整體引用(續(xù))⑵輸入字符串例如:charc[10];scanf("%s",c);輸入:beijingbeijing\0三個(gè)字符串用空格隔開,分別賦給str1、str2、str3三個(gè)數(shù)組。再例如:charstr1[10],str2[10],str3[10];scanf("%s%s%s",str1,str2,str3);輸入:pascalbasicc注意:不可以為數(shù)組整體賦值,例如:
charc[10];c="beijing"
;因?yàn)閏是數(shù)組首地址,是常量!第47頁/共76頁2023/1/17498.3.5字符串處理函數(shù)說明:①程序中如果調(diào)用下面介紹的8個(gè)字符串處理函數(shù),在程序的開始應(yīng)該寫:
#include"stdio.h"或
#include"string.h"
預(yù)處理命令,但在TurboC中可以省略。②在字符串處理函數(shù)中,凡是用數(shù)組名或字符串首地址作參數(shù)的地方,都可以用指針變量作參數(shù)。指針變量的概念在第8章介紹。第48頁/共76頁2023/1/17501.字符串輸出函數(shù)puts()調(diào)用格式:puts(str)功能:輸出一個(gè)字符串,輸出后自動(dòng)換行。說明:str可以是字符數(shù)組名或字符串常量。例如:charstr1[]="China";charstr2[]="Beijing";puts(str1);puts(str2);輸出結(jié)果:ChinaBeijing
第49頁/共76頁2023/1/17512.字符串輸入函數(shù)gets()調(diào)用格式:gets(str)功能:從鍵盤讀入一個(gè)字符串存入str數(shù)組中,并且得到一個(gè)函數(shù)值,該函數(shù)值是str數(shù)組的首地址。說明:str是數(shù)組名。程序運(yùn)行情況如下:Howareyou?Finethankyou.
Howareyou?Finethankyou.
例如:main(){charc1[20],c2[20];gets(c1);gets(c2);puts(c1);puts(c2);}第50頁/共76頁2023/1/17523.字符串連接函數(shù)strcat()調(diào)用格式:strcat(str1,str2)功能:把str2中的字符串連接到str1字符串的后面,結(jié)果放在str1數(shù)組中,函數(shù)值是str1的值。beijingandshanghai\0必須足夠大輸出結(jié)果:beijingandshanghai例如:charstr1[21]="beijingand";charstr2[]="shanghai";printf("%s",strcat(str1,str2));第51頁/共76頁2023/1/17534.字符串復(fù)制函數(shù)strcpy()調(diào)用格式:strcpy(str1,str2)功能:將str2中的字符串復(fù)制到str1數(shù)組中。Beijing\0s1必須足夠大思考:這樣賦值s1="Beijing";或s1=s2;可以嗎?為什么?s1的結(jié)果例如:chars1[10],s2[]="Beijing";strcpy(s1,s2);或:strcpy(s1,"Beijing");第52頁/共76頁2023/1/17545.字符串比較函數(shù)strcmp()
調(diào)用格式:strcmp(str1,str2)abcde\0str1abcde\0str2abc\0
abcde\0abcd\0
Abcde\0str1str2str1str2strcmp(str1,str2)==0strcmp(str1,str2)>0strcmp(str1,str2)<0第53頁/共76頁2023/1/1755例如:比較兩個(gè)字符串的大小。main(){chars1[]="aBC",s2[]="abc";if(strcmp(s1,s2)==0)printf("s1=s2");elseif(strcmp(s1,s2)>0)printf("s1>s2");elseprintf("s1<s2");}程序輸出結(jié)果:s1<s2思考:若有語句if(s1==s2)printf("s1=s2");比較的是什么?第54頁/共76頁2023/1/17568.求字符串長度函數(shù)strlen()調(diào)用格式:strlen(str)功能:測試字符串長度。函數(shù)值就是str中字符的個(gè)數(shù)。思考:字符串"China"和str數(shù)組在內(nèi)存中各占幾個(gè)字節(jié)?輸出結(jié)果:5例如:charstr[10]="China";printf("%d",strlen(str));或printf("%d",strlen("China"));第55頁/共76頁2023/1/17577.大寫字母轉(zhuǎn)換成小寫字母函數(shù)strlwr()
調(diào)用格式:strlwr(str)功能:將str字符串中的大寫字母轉(zhuǎn)換成小寫字母。
輸出結(jié)果:microsoftword輸出結(jié)果:abcd例如:charstr[]="MICROSOFTWORD";strlwr(str);puts(str);例如:printf("%s",strlwr("AbCd"));第56頁/共76頁2023/1/17588.小寫字母轉(zhuǎn)換成大寫字母函數(shù)strupr()調(diào)用格式:strupr(str)功能:將str字符串中的小寫字母轉(zhuǎn)換成大寫字母。
輸出結(jié)果:PASCAL例如:charch[10]="pascal";printf("%s",strupr(ch));第57頁/共76頁2023/1/17598.3.6字符數(shù)組應(yīng)用舉例【例8.9】從標(biāo)準(zhǔn)輸入設(shè)備上輸入一個(gè)字符串,分別統(tǒng)計(jì)其中每個(gè)數(shù)字、空格、字母及其他字符出現(xiàn)的次數(shù)。思路:用gets()函數(shù)讀字符串,然后判斷每一個(gè)字符是否是數(shù)字、空格、大小寫字母或其他字符,用循環(huán)實(shí)現(xiàn)。注意:此題要求分別統(tǒng)計(jì)每個(gè)數(shù)字出現(xiàn)的次數(shù),而不是統(tǒng)計(jì)數(shù)字出現(xiàn)的總次數(shù)。用一個(gè)一維整型數(shù)組存放每個(gè)數(shù)字出現(xiàn)的次數(shù)。第58頁/共76頁2023/1/1760……{chars[80];inti,sp=0,oth=0,lett=0;intdig[10]={0};gets(s);for(i=0;s[i]!='\0';i++)if(s[i]>='0'&&s[i]<='9')dig[s[i]-'0']++;elseif(s[i]=='')sp++;elseif(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z')lett++;elseoth++;for(i=0;i<10;i++)printf("%d:%d個(gè)",i,dig[i]);printf("\nspace:%dletter:%dother:%d\n",sp,lett,oth);}程序運(yùn)行情況如下:China1949.10.1~2004.10.10:4個(gè)1:5個(gè)2:2個(gè)3:0個(gè)4:1個(gè)5:0個(gè)6:0個(gè)7:0個(gè)8:0個(gè)9:2個(gè)space:1letter:5other:5第59頁/共76頁2023/1/17618.3.6字符數(shù)組應(yīng)用舉例(續(xù))【例8.10】輸入某月份的整數(shù)值1~12,輸出該月份的英文名稱。Illegalmonth.\0January\0…Decenmber\0思路:將12個(gè)英文月份以字符串的形式存放到month[13][15]中,一行存放一個(gè)字符串。
第60頁/共76頁2023/1/1762main(){charmonth[][15]={"Illegalmonth.","January","February","March","April","May","June","July","August","September","October","Novenber","Decenmber"};intm;printf("\nInputmonth:");scanf("%d",&m);printf("%d:%s\n",m,(m<1||m>12)?month[0]:month[m]);} 程序運(yùn)行情況如下:Inputmonth:1010:October第61頁/共76頁2023/1/17638.3.6字符數(shù)組應(yīng)用舉例(續(xù))【例8.11】將N個(gè)國家名按字母順序排序后輸出。思路:從鍵盤輸入N個(gè)國家名稱存放到一個(gè)二維字符數(shù)組中,然后用選擇法對這N個(gè)字符串排序。程序如下:#defineN5#defineM10#include"stdio.h"main(){chars[N][M],str[M];inti,j;第62頁/共76頁2023/1/17648.3.6字符數(shù)組應(yīng)用舉例(續(xù))for(i=0;i<N;i++)gets(s[i]);
for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)if(strcmp(s[i],s[j])>0){strcpy(str,s[i]);strcpy(s[i],s[j]);strcpy(s[j],str);}for(i=0;i<N;i++)puts(s[i]);}選擇法排序第63頁/共76頁2023/1/1765例3:輸入一行字符,統(tǒng)計(jì)有多少個(gè)單詞,單詞用空格分隔。
如:Iamastudent.
#include"stdio.h" main() {charstring[81],c; inti,num=0,word=0; gets(string); for(i=0;(c=string[i])!='\0';i++) if(c=='')word=0; elseif(word==0) {word=1;num++;} printf("Thereare%dwordsintheline\n",num);}第64頁/共76頁2023/1/1766第8章習(xí)題1.下面不能把字符串:Hello!賦給數(shù)組的語句是A)staticcharb1[10]={'H','e','l','l','o','!'};B)staticcharb2[10];b2="Hello!";C)staticcharb3[10];strcpy(b3,"Hello!");D)staticcharb4[10]="Hello!";2、若二維數(shù)組a有m列,則a[I][j]前的元素個(gè)數(shù)為:
A)j*m+IB)I*m+jC)I*m+j-1D)I*m+j+13、下面程序段運(yùn)行結(jié)果是:
charc[5]={‘a(chǎn)’,’b’,’\0’,’c’,’d’,’\0’};printf(“%s”,c);A)‘a(chǎn)’’b’B)abC)abcD)ab\0第65頁/共76頁2023/1/17674、以下對S的初始化,不正確的是:
A)chars[5]={“abc”}B)chars[5]={‘a(chǎn)’,’b’,’c’};C)chars[5]="";D)chars[5]=“abcdef”;5、有下面程序段:
chara[3],b[]=“china”; a=b;printf(“%s”,a);
則——A)運(yùn)行后輸出chinaB)運(yùn)行后輸出chC)運(yùn)行后輸出chiD)編譯出錯(cuò)第66頁/共76頁2023/1/17686、若定義二維數(shù)組inta[3][3]={1,2,3,4,5,6,7,8,9};
intk;則下列語句的輸出結(jié)果是:
for(k=0;k<3;k++)printf(“%d”,a[k,2-k]);
A)357B)369C)159D)1477、判斷字符串a(chǎn)和b是否相等,應(yīng)當(dāng)使用:
A)if(a==b)B)if(a=b)C)if(strcpy(a,b))D)if(strcmp(a,b))第67頁/共76頁2023/1/1769讀程序,寫出正確結(jié)果:1、main(){chara[5]={‘*’,’*’,’*’,’*’,’*’}inti,j,k;charspace=‘’;for(i=0;i<5;i++){printf(“\n”);printf(“”); for(j=1;j<=i;j++)printf(“%c”,space);for(k=0;k<5;k++)printf(“%c”,a[k]);}}
*************************第68頁/共76頁2023/1/1770讀程序,寫出正確結(jié)果:2、#include<stdio.h”;#include<string.h>main(){chara[80]=“AB”,b[80]=“LMNP”intI=0;strcat(a,b);while(a[I++]!=‘\0’)b[I]=a[I];puts(b);}答案:LBLMNP注意:當(dāng)b賦值時(shí),I的值已遞增即b[1]=a[1],而b[0]仍保持原來的值L第69頁/共76頁2023/1/1771程序填空:數(shù)組A包括10個(gè)整型元素。下面程序是求出A中各相鄰兩個(gè)元素的和,并存入數(shù)組B中,按每行3個(gè)元素的形式輸出,請?zhí)羁?。main(){inta[10],b[10],I;
for(I=0;I<10;I++)scanf(“%d”,&a[I]);
for(____;I<10;I++);________________;
for(I=1;I<10;I++){printf(“%3d”,b[I]);
if(______==0)printf(“\n”);}}第70頁/共76頁2023/1/17728-1main(
)
{inta[11]={1,3,5,7,9,10,13,14,35,98};
inti,j,k,number;
clrscr();
for(i=0;i<=9;i++)printf("%5d",a[i]);
printf("\nPleaseinputinserteddata:");
scanf("%d",&number);
for(i=0;i<=9;i++)
/*找到插入的位置*/
if(a[i]>number){k=i;break;}
for(i=10;i>k;i--)
/*依次后移一個(gè)位置*/
a[i]=a[i-1];
a[k]=number;
/*插入*/
printf("\nTheinsertednumbers:\n"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 買房名額轉(zhuǎn)讓合同范例
- 公司食堂門面租賃合同范例
- 保健院整改合同范例
- 個(gè)人商鋪買賣合同范例
- 傭金類合同范例
- 內(nèi)墻地面外包合同范例
- 書本采購合同范例
- 人力貨物合作合同范例
- 公司技術(shù)入股合同范例
- 乙方有多人 合同范例
- 臺(tái)球廳合伙協(xié)議書
- SWITCH塞爾達(dá)傳說曠野之息-1.6金手指127項(xiàng)修改使用說明教程
- 阻生牙的拔除
- 、野外生存教案
- 新形式下做好檢察信息工作的心得體會(huì)
- 綠色低碳節(jié)能先行3000字(9篇)
- 上海市浦東新區(qū)2022屆九年級中考二模化學(xué)試卷+答案
- 水文地質(zhì)手冊
- 二級建造師《施工管理》高頻考點(diǎn)二
- 水質(zhì)采樣記錄
- 中智集團(tuán)及下屬單位招聘筆試題庫2022
評論
0/150
提交評論