計算機C語言(六)_第1頁
計算機C語言(六)_第2頁
計算機C語言(六)_第3頁
計算機C語言(六)_第4頁
計算機C語言(六)_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章數(shù)組

CProgrammingLanguage

數(shù)據(jù)對象的組合:數(shù)組

數(shù)組(array)是多個同類型數(shù)據(jù)

對象的組合。構(gòu)造數(shù)據(jù)類型之一

一個數(shù)組匯集了多個數(shù)據(jù)——數(shù)

組元素。可從數(shù)組出發(fā)處理各元

素,或以統(tǒng)一方式處理一批元素

(所有元素)。

2

數(shù)組機制要解決:

1)數(shù)組描述,數(shù)組變量定義;

2)數(shù)組使用,包括通過數(shù)組的下

標(biāo)變量使用其元素;

3)數(shù)組實現(xiàn),數(shù)組的存儲方式。

■數(shù)組元素

元素:屬同一數(shù)據(jù)類型,用數(shù)組名和下標(biāo)確定

,在C語言中可以有單下標(biāo)數(shù)組元素、

雙下標(biāo)數(shù)組元素和多下標(biāo)數(shù)組元素O

,、下標(biāo)要用方括號括起來,下標(biāo)可以

是常量、變量和表達式,計算機自

動取整。

如:a[5]>b[2][3]>abc1[1][5][7]等。

4

一、一維數(shù)組的定義

只有一個下標(biāo)的數(shù)組。

類型定義符數(shù)組名[元素個數(shù)];

a▲

數(shù)組名表示內(nèi)編譯時分配連續(xù)內(nèi)存

存首地址,是內(nèi)存字節(jié)數(shù)=

地址常量數(shù)組元素個數(shù)*

sizeof(元素數(shù)據(jù)類型)

6

說明:

例:試判斷下列數(shù)組定義是否合法:

#defineSTU35

floatno_student[STU];

intscore_student[STU*3];

intperson(10);

intn=10,a[n];

式)。

6、每個元素都可作為一個變量來使用;

如:a[0]=5;a[1]=4;

7

二、一維數(shù)組的引用

數(shù)組必須先定義,后使用

只能逐個引用數(shù)組元素,不能一次引用整個數(shù)組

例inta[10];

printf("%d,,,a);(x)

必須for(j=0;j<10;j++)

如:

a[0]=a[5]+a[7]-a[2*3]〃常量和表達式做下標(biāo)7

a[i]=a[i]+1;〃變量做下標(biāo)*/

a[a[0]]=>a[1]/*數(shù)組元素做下標(biāo)*/

8

r列]從鍵盤輸15個整數(shù),然后反序輸出。

main()

{inti,a[15];

for(i=0;i<15;i++)

scanf(u%d55,&a[i]);

for(i=14;i>=0;i-)

printf("%4d5,,a[i]);

}

輸入:123456789101112131415J

輸出:151413121110987654321

注意:1、循環(huán)控制變量的初值、終值及控制條件。

2、不能整體輸出數(shù)組

例:printf("%d”,a);是錯誤的。

9

三、一維數(shù)組的存儲結(jié)構(gòu)

數(shù)組在內(nèi)存中分配一片連續(xù)的存儲單元,

數(shù)組元素按數(shù)組下標(biāo)從小到大連續(xù)存放。

例inta[5];

a[0]

a[l]

a[2]

a[3]

a[4]

內(nèi)存

a相當(dāng)于5個變量,a[0]?a[4]可看作變量名。

10

,四、一維數(shù)組的初始化

?初始化方式

在定義數(shù)組時,為數(shù)組元素賦初值

(在編譯階段使之得到初值)

inta[5]={1,2,3,4,5};

等價于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;

?:?說明:

?數(shù)組不初始化,其元素值為隨機數(shù)

?對static數(shù)組元素不賦初值,系統(tǒng)會自動賦以。值

staticinta[5];

如inta[51=,6.2.3£

inta[]={1,234,5,6};

編譯系統(tǒng)根據(jù)初值個數(shù)確定數(shù)組維數(shù)

[例]

#include<stdio.h>

main()

{inti,a[5]={3,4,5},b[5];

printf(u\narrayais:55);

for(i=0;i<5;i++)printf(u%6d5,,a[i]);

printf(u\narraybis:55);

for(i=0;i<5;i++)printf(u%d,",b[i]);

}(initary.c)

運行結(jié)果:

arrayais:34500

arraybis:-32,1398,40,1170,454,/*隨機數(shù)7

12

Tip:

操作數(shù)組的多個或全部元素的常用編程方式是用

for語句和一個循環(huán)變量,令變量遍歷數(shù)組全部下標(biāo):

for(n=0;n<數(shù)組長度;n++)...

?問題:假設(shè)程序里寫:

inta[30];...

for(n=2;n<=30;n++)...

循環(huán)中試圖訪問a[30],實際無此元素。

用超數(shù)組范圍下標(biāo)值訪問元素:越界訪問。

是數(shù)組使用中最常見的語義錯誤。

13

用輸入函數(shù)從鍵盤或數(shù)據(jù)文件中讀取數(shù)據(jù)

到數(shù)組元素賦初值

、[例]給數(shù)組a賦值。

main()

{inti,a[10];

for(i=0;i<=9;i++)

scanf("%d'\&a[i]);

}

14

用賦值語句給數(shù)組元素賦初值

[例]

main()

{intarr[10]J,k=0;

for(i=0;i<10;i++)

arr[i]=i;

for(i=0;i<4;i++)

k+=arr[i]+i;

printf("%d\n'\k);

(initarray.c)}

15

程序舉例

[例]

main()

{intk,t=1,a[3]={1,2,3};

for(k=0;k<3;k++)

a[k]+=a[k]-t;

for(k=0;k<3;k++)

printf(u%4d,,,a[k]);

}

16

程序舉例

[例]

main()

{inta[『{2,345,678,9};

inti,r=1,n=3;

for(i=0;i<=n;i++)

r=r*a[i];

printf(<t%d\n,,,r);

}

17(Rating_counter.c)

程序舉例

m定義長度為10的整型類型一維數(shù)組,從鍵

盤輸入10個整數(shù),分別存放在10個數(shù)組元素中,

然后將數(shù)組中的元素按逆序存放后輸出其值。

0123456789Q9876543210

分析:

1.a[0]與a[9]交換,

交換a[8],依此類推。

錯誤的寫法a[0]=a[9];a[9]=a[0];

2.如何控制循環(huán),只需循環(huán)到一半

k=(n-1)/2;

for(i=0,j=n-1;i<=k;i++,j--)

{t=a[i];a[i]=a[j];a[j]=t}

還可以寫成for(i=0J=n-1;i<j;i++,j-)

18

程序舉例

main()

for(i=0;i<10;i++)

scanf「%cr,&a[i]);

for(i=0;i<10;i++)

printf(,i%4d,,,a[i]);

printf(,,\n,');

for(i=0J=9;i<j;i++,j-)

{t=a[i];a[i]=a[j];a[j]=t;}

for(i=0;i<10;i++)

printf(ii%4dii,a[i]);

printf(,i\n,,);

)

19

程序舉例

#include<stdio.h>

[例]

main()

{inta[10],i,max,min;

printf("Enter10integers:\n");

for(i=0;i<10;i++)

{printf("%d:",i+1);

scanf("%d",&a[i]);

}

max=min=a[0];

for(i=1;i<10;i++)

{if(max<a[i])max=a[i];

if(min>a[i])min=a[i];

)

printf("Maximumvalueis%d\n",max);

printf("Minimumvalueis%d\n",min);

}

20

程序舉例

—I例]將數(shù)組中數(shù)值最小的元素排在第一位

main()

輸入10個數(shù)給a[0]到a[9]

{inti,t,a[10];

fori=1to9

for(i=0;i<10;i++)

',,i

scanf(%dJa[i]);

printf”rT);a[i]=a[0]

for(i=1;i<10;i++)

輸出a[0]到a[9]

if(a[i]<a[0])

{t=a[0];a[0]=a[i];a[i]=t;}

for(i=0;i<10;i++)

,,,i

printf(%4dJa[i]);

21printfC'yn");)

程序舉例

Fl]從鍵盤上輸入10個整數(shù),用選擇法將其按由

小到大的順序排列并輸出。

基本思想:

(1)從第0個位置到第9個位置中選擇出最小的一

個與第。個位置的數(shù)交換。

(2)從第1個位置到第9個位置中選擇出最小的一

個與第1個位置的數(shù)交換。

■■■

(9)從第8個位置到第9個位置中選擇出最小的一

個與第8個位置的數(shù)交換。

例:513393222812321排

序過程如下:

22

程序舉例

②一

?

01@

23

程序舉例

UiWlude<stdio.h>

main()

for(i=0;i<=9;i++)scanf("%d”,&a[i]);

for(i=0;i<=8;i+±)

for(j=i+1;j<=9;j++)

內(nèi)循環(huán):外循環(huán):

if(a[i]>aU])在(i,9)控制選擇

內(nèi)選擇最的次數(shù)

{t=a[i];a[i]=a[j];aD]=t;小數(shù)

for(i=0;i<=9;i++)

printf(u%6d,5,a[i]);

)

24

程序舉例

r|

從程序可知:

1、程序使用兩重循環(huán)來實現(xiàn)排序。

2、其中,外循環(huán)控制排序趟數(shù)。若數(shù)組有N個元素,

則共進行N?1趟排序。第一趟,i=0;第二趟,i

=1,■■■

3、其中,內(nèi)循環(huán)完成在[i,9]的區(qū)間內(nèi)選擇最小

數(shù)。比較次數(shù)隨趟數(shù)i的增大而減少。

4、在每一趟選擇中,當(dāng)后面元素較小時,馬上進行

交換。而這種交換是不必要的。事實上,只要記

住較小元素的位置,即下標(biāo),在內(nèi)循結(jié)束后做一

次交換即可,這樣可大大節(jié)省程序運行時間。

改進程序如下:

25

#include<stdio.h>

main()

(intiJ,k,t,a[10];

for(i=0;i<10;i++)scanf(u%dJ\&a[i]);

for(i=0;i<9;i++)、

{k=i;

forO=i+1;j<10;j++)l內(nèi)循環(huán),外循環(huán)

if(a[k]>aU])k=j;

if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}J

}

for(i=0;ivl0;i++)printf(“%6d*a[i]);}

26

、小經(jīng)驗

■當(dāng)處理的數(shù)據(jù)很多,又希望用循環(huán)來控制

時,使用數(shù)組

■當(dāng)運算的中間結(jié)果需要保存時,使用數(shù)組

■一維數(shù)組典型用法

?排序

?查找

?插入

?刪除

?分類統(tǒng)計而

27下

一、二維數(shù)組的定義

類型定義符數(shù)組名[行數(shù)][列笠];

二維數(shù)組可看作一個二維表點由行、列組成。

例:inta[3][2];

元素個數(shù)=行數(shù)*列數(shù)

floatb[5][3];

數(shù)組元素的存放順序

?原因吶存是一維的0a[0][0]

?二維數(shù)組:按行序優(yōu)先1a[0][1]

?多維數(shù)組:最右下標(biāo)變化2a[1][0]

ra[O][O]a[0][1]i]a[1][1]

a[1][0]a[1][1]:a[2][0]

la[2][0]a[2][1]Ja[2][1]

,二維數(shù)組理解

二維數(shù)組a是由3個元素組成

例inta[3][4]:

a[0]a[0][0]a[0][1]a[0][2]a[0時

a[1]a[1][0]a[1][1]a[1][2]a[1][3

a[2]a[2][0]a[2][1]a[2][2]芷同

行/r

每個元素a[i]由包含4個

元素的一維數(shù)組組成

29

二、數(shù)組元素的引用

數(shù)組名[下標(biāo)][下標(biāo)]

注意:二維數(shù)組的行號、列號也是從0開始的。

floata[4][4]

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[3][0]a[3][1]a[3][2]a[3][3]

30

輸入輸出:二層循環(huán)

for(i=0;i<4;i++)

for(j=0;j<4;j++)

scanf(“%d”,&a[i]U]);

(或用賦值語句a[i][j]=...;)

for(i=0;i<4;i++)

軍前出

{forQ=0;j<4;j++)

uM

printf(%4d5a[i][j]);

printf(u\n,J);

)

31

F武值操作:for(i=0;i<4;i++)_______

forQ=0;j<4;j++)

if(i<=j)a[i]U]=1+j-i;

elsea[i][j]=10;

1

234上三角:ivj

1023對角線:i==j

10102下三角:i>j

101010

32

鵬從鍵盤上輸入9個整數(shù),保存在二維數(shù)組中,按

藪索原來位置輸出第一行和第一列的所有元素。

1_2_3^^第0行

2

45_6_^^第1行

456

7_8_9第2行

III8

第第第

012

列列列

分析:

1、輸入數(shù)組。

2、輸出數(shù)組要考慮不是所有數(shù)據(jù)都輸出。

思考:應(yīng)該輸出的數(shù)據(jù)在位置關(guān)系上有何特點?(去

33

in()

ij,a[3][3];

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%d,J,&a[i][j]);

for(i=0;i<3;i++)

{forO=0;j<3;j++)

if(i==1||j==1)printf("%3d,5,a[i][j]);

elseprintf(u出

printf(u\n,J);

)

)

34

三、二維數(shù)組的初始化

?分行初始化:

?按元素排列順序初始化

a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]

35

程序舉例

[例]

main()

{intij,max,a[2][4]={1,3,5,7,9,2,4,6);

max=a[O][O];

for(i=0;i<2;i++)

for(j=0;j<4;j++)

if(a[i][j]>max)

max=a[i][j];

printf("%d\n”,max);

)

36

程序舉例

[例]打印楊輝三角的前10行。

main()

1{inti,ja[10][10];

11for(i=0;i<10;i++)

{a[i][i]=1;a[i][0]=1;}

121for(i=2;i<10;i++)

1331for(j=1;j<=i-1;j++)

14641a[i]U]=a[i-1][j]+a[i-1][j-1];

for(i=0;i<10;i++)

15101051{for(j=0;j<=i;j++)

printf("\rT);}

)

37

[例Ef維數(shù)組a[3][4]中#include<stdio.h>

最大元素值及其行列號。main()

{inta[3][4]={{1,2,3,4},

(9,8,7,6),

max=a[O][O]{-10,10,-5,2)};

inti,j,row=0,colum=0,max;

fori=0to2

max=a[0][0];

forj=0to3for(i=0;i<=2;i++)

for(j=0;j<=3;j++)

if(a[i][j]>max)

max=a[i][j]{max=a[i][j];

row=irow=i;

colum=jcolum=j;

)

輸出:max和row,colum

printf("max=%d,row=%d,\

colum=%d\n",max,row,colum);

38}

程序舉例

卜表中值到數(shù)組,分別求各行、各列

及表甲所有數(shù)之和。

#include<stdio.h>

main()

1246{intx[5][4],i,j;

823334for(i=0;i<4;i++)

157931for0=O;j<3;j++)

scanf("%d-,&x[i]D]);

251724forG=0;j<3;j++)

373935111x[4]U]=0;

for(i=0;i<5;i++)

x[i][3]=0;

for(i=0;i<5;i++)for(i=0;i<4;i++)

{forQ=0;j<4;j++)forQ=0;j<3;j++)

printf("%5d\t",x[i]D]);{x[i][3]+=x[i]U];

printf("\n");x[4]U]+=x[i]U];

)x[4][3]+=x[i]D];

39}}

程序舉例

tH]求矩陣的轉(zhuǎn)置矩陣。

23147

456258

789369

什么是轉(zhuǎn)置矩陣:

從上可知,

方法1:轉(zhuǎn)置矩陣是;矩陣元素按行列互換形成的。

147

4258

78369

方法2:沿主對角線

將對稱位置互換元素即可。這時可將轉(zhuǎn)置矩陣放在原數(shù)

組中。

40

程序舉例

方法1之程序:

#include<stdio.h>

main()

{intij;

inta[3H3]={1,2,3,4,5,6,7,8,9},b[3][3];

for(i=0;i<3;i++)

for0=O;j<3;j++)b[i]U]=aU][i];

for(i=0;i<3;i++)

{forQ=0;j<3;j++)

printf(u%6d,5,b[i][j]);

printf("\rT);

)

)

41

程序舉例

方法2之程序:

#include<stdio.h>

main()

{intij;

inta[3][3]={1,2,3,4,5,67,8,9};

for(i=0;i<3;i++)

forQ=i;j<3;j++)

{temp=a[i][j];

a[i]U]=aU][i];

a[j][i]=temp;}

for(i=0;i<3;i++)

{forQ=0;j<3;j++)

printf(u%6d,5,b[i][j]);

printf("\rT);

)

42)

、基本概念

尋字符數(shù)組:元素類型為字符類型的數(shù)組。

B字符串和字符串結(jié)束標(biāo)志:

-在c語言中將字符串作為字符數(shù)組來處理。

一有效長度以''0'為結(jié)束標(biāo)志。

-以字符串形式給數(shù)組賦值時,末尾自動加

'\0\

一系統(tǒng)在對字符數(shù)組操作時,如輸出時,自動

判斷(\Q\

43

二、字符數(shù)組的初始化

二維字符數(shù)組初始化

例charfruit[][7]={uApple,J,^Orange55,

“Grape?!癙ear”,"Peach"};

fruit[O]APPIe\0\0

fruit[1]0range\0

fruit[2]GraPe\0\0

fruit[3]Pear\0\0\0

fruit[4]Peach\0\0

44

三、字符串的輸入輸出

逐個輸入輸出:用格式符“%C”輸入或輸出一個字符。

整串輸入輸出:用格式符“%s”。

,用字符數(shù)組名,不要加&

例用%c,輸入串長度〈數(shù)組維數(shù)

例用%5,遇空格或回車結(jié)束

,自動加(

main()\r

{charstr[5];

scanf("%s”,str);

printf("%s'\sir);

},

pnntt5%c,struj);

用字符數(shù)組名,

}遇’\0’結(jié)束

45

例main()

{chara[5]={'H「e',T,\

01234

TJ。'};

printf(“%s”,a);

)

結(jié)果:Hello#-=*

例main()012345

{chara[]=uHello,J;heIIo\0

printf(“%s”,a);

)

結(jié)果:Hello

46

main()

,,,,1,,,,,,,,,

chara[]={h,e,l,\0,l,oJ\0};

printf("%s”,a);

)

47

運行情況:

(1)若輸入hel,正常

(2)若輸入hell,正常

(3)若輸入hell。,用%5輸出時,可能會出現(xiàn)問題

48

#include<stdio.h>運行情況:

輸入:Howareyou?

main()

輸出:a=How

{chara[15],b[5],c[5];b=are

scanf(',%s%s%s,,,a,b,c);c=you?

printf(,,a=%s\nb=%s\nc=%s\n,,,abc);

JJ輸入:Howareyou?

scanf(,,%s",a);輸出:a=How

printf(,,a=%s\n,,,a);

)

I、字符串處理函數(shù)

庫函數(shù)原型在stdio.h和string.h中

//、____?A~A~r+i4-AI]]坐J

例#include<stdio.h>

main()

{charstring[80];

printf(ulnputastring:");

gets(string);

puts(string);

)

輸入:Howareyou?

輸出:Howareyou?

50

)字符串拷貝函數(shù):strcpyQ

?調(diào)用格式:strcpy(str1,str2);

?功能:將字符串str2復(fù)制到字符數(shù)組str1中。

?返回值:返回字符數(shù)組1的首地址

?說明:

①str1的長度應(yīng)不小于str2的長度。

②str1一般寫成數(shù)組名形式。

③str2可是字符串常量或字符數(shù)組名形式。

例:chars1[10],s2[8]=ustudent,5;

strcpy(s1,s2);或strcpy(s1,^studenf5);

④不能使用賦值語句為一個字符數(shù)組賦值

例:s1=s2:1

[例]

#include<string.h>

main()

{charc[7]="abcdef\s[4]="ABC”;

strcpy(c,s);

printf("%s\rT,c);

printf(,,%c\n,i,c[5]);

}

運行結(jié)果是:ABC

52

[例]

#include<string.h>

main()

{charc[30]=,,Howdoyoudo";

strcpy(c+6,,iesshe");

',,,

printf(%s\n5c);

)

運行結(jié)果是:Howdoesshe

53

&聲符串連接函數(shù)strcat。

用格式:strcat(str1,str2);

?功能:將str2連同連接到str1的最后一個字

符(非、(T字符)后面。結(jié)果放在str1中。

?返回值:返回字符數(shù)組1的首地址

例:chars1[14]=ulama,J;

chars2[5]=uboyJ5;

strcat(s1,s2);

連接前:

連接后:

54

字符串比較函數(shù)strcmp。

調(diào)用格式:strcmp(str1,str2);

功能:若str1=str2,則函數(shù)返回值為0;

若str1>str2,則函數(shù)返回值為正整數(shù);

若str1vstr2,則函數(shù)值返回為負整數(shù)。

比較規(guī)則:

①兩個字符串自左至右逐個字符比較,直到出現(xiàn)不

同字符或遇到為止。

②字符全部相同,則兩個字符相等;

③如若出現(xiàn)不同字符,則遇到的第一對不同字符的

ASCH大者為大。

:if(strcmp(str1,str2)==0){...};

而if(str1==str2){...};是錯誤的。

55

[例]

#include<string.h>

main()

{charc[7]="abcdeF',s[4]="abc";

inta;

a=strcmp(c,s);

printf("%d\rT,a);

)

運行結(jié)果是:100

56

[例]

#include<string.h>

main()

(

",,,',,i

charc[7]=abcdefJs[4]=acb;

inta;

a=strcmp(c,s);

printf("%d\rT,a);

)

運行結(jié)果是:」

57

(6)字符長度函數(shù)strlen。

?調(diào)用格式:strlen(字符串);

?功能:求字符串的實際長度即所含

字符個數(shù)(不包括‘\0’)。

?返回值:返回字符串實際長度,不

包括在內(nèi)

例:charstr[1O]=ustudenf,;

intlength;

length=strlen(str);(=7)

strlen(uvery\Ogood,J);(=4)

chars[]=u\t\v\\\0will\n,5;(=3)

chars[]="\x69\082\n,J;(=1)

58

(7)strupr(字符串)

功能:將字符串中的小寫字母轉(zhuǎn)

換成大寫字母

(8)strlwr(字符串)

功能:將字符串中的大寫字母

轉(zhuǎn)換成小寫字母

程序舉例

#ine<string.h>

#incl<stdio,h>

main()

,,,=",

{charstr1[]='Hello!Jstr2[]Howareyou?"5str[20];

intIen1Jen2Jen3;

Ien1=strlen(str1);Ien2=strlen(str2);

if(strcmp(str1,str2)>0)

{strcpy(str,str1);strcat(str,str2);}

elseif(strcmp(str1,str2)<0)

{strcpy(str,str2);strcat(str,str1);}

elsestrcpy(str,str1);

Howareyou?Hello!

Ien3=strlen(str);

Len1=6,Len2=12,Len3=18

puts(str);

',,,

printf(Len1=%dJLen2=%dJLen3=%d\nJ

Ien1,len2,len3);

Jo

程序舉例

閱讀程序,寫出其運行結(jié)果。

#include“string.h"

main()

{chart,a[20];

inti,s;

scanf(“%s”,a);

s=strlen(a);

printf(u%s5,,a);

t=a[O];

for(i=1;i<s;i++)

t=t>a[i]?t:a[i];

printf(u\n%c,\t);

)

61

程序舉例

[礴、三個字符串,找出其中最大者

#include<stdio.h>

#include<string.h>

main()

{charstring[20],str[3][20];

inti;

for(i=0;i<3;i++)gets(str[i]);

if(strcmp(str[0],str[1])>0)strcpy(string,str[O]);

elsestrcpy(string,str[1]);

if(strcmp(str[2],string)>0)strcpy(string,str[2]);

printf(M\nThelargeststringis:\n%s\n",string);

)

程序舉例

[例輸入一行字符,統(tǒng)計其中有多少個單詞。

未出現(xiàn)新單詞,使word=0,num不累加

當(dāng)

刖一前一字符為空格(word==0),

字-

新單詞出現(xiàn),word=1,num++

否前一字符非空格(word==1),

未出現(xiàn)新單詞,num不變

當(dāng)前字符IamabOy■

是否空格否是否否是否是否否否否

word原值01011010111

未I

新單詞開始否是未是未未是未是未未

word新值10110101111

63num值11222334444

輸入一字符串給string#include<stdio.h>

main()

i=0num=Oword=0

{charstring[81];

((c=string[i])!=t\O?)

inti,num=0,word=0;

空格

真假charc;

gets(string);

真word

Xfor(i=0;(c=string[i])!=>\0,;i++)

word=0word=1

if(c==,')word=0;

num++

elseif(word==0)

i=i+1{word=1;num++;}

輸出:numprintf("Thereare%dwords\

intheline\n",num);

}

64

程序舉例

一氣,[例1]輸出一個鉆石圖形。

#include<stdio.h>

main()

{char

diamond[][5]={C;:*'},{''二

,*,,,,,,,,*,、rt,,*,,,ftJtJ,*,]、?

{,,,,\,,,J51,JJJJ

圖形:intiJ;

*for(i=0;i<5;i++)

**{

**forQ=0;j<5;j++)

',,,

**printf(%cJdiamond[i][j]);

**printfCNn");

*}

}

66

程序舉例

[例*將若干姓名由鍵盤輸入給字符型數(shù)組stjarra;

璃入’0”時,結(jié)束輸入,然后輸出數(shù)組的丙容。

#include<stdio.h>

main()

{charstr_array[100][80];

inti,j;

for(i=0;i<100;i++)

{printf(M%d:",i);

gets(str_array[i]);

if(str_array[i][0]==,0,)break;

}"

for0=O;j<i;j++)

printf(,istr_array[%d]=%s\n,i,j,str_array[j]);

}H

程序舉例

mairSf)[例3]帶統(tǒng)計功能的打字練習(xí)程序。

{intc,in_word='N,;

intchar_count=0;

intword_count=0;

intline_count=0;

while((c=getch())!=ESC)

{char_count++;/*統(tǒng)計鍵入的字符個數(shù)7

if(in_word=='N,&&isalpha(c))/*由單詞外進入

單詞中7一

in_word='Y';

word_count++;/*統(tǒng)計鍵入的單詞個數(shù)7

}I

6o

程序舉例

elsWf(in_word=='Y,&&!isalpha(c))/*退出單詞7

in_word='N';

if(c==,\r')

(

putcharOn');

line_count++;/*統(tǒng)計鍵入的行數(shù)*/

}"

putchar(c);

)

printf("\nNumberofcharactersis

%d\nM,char_count);

printf("Numberofwordsis%4d\n"Jword_count);

printff'Numberoflinesis%4d\n,,,line_count);

}"

69

程序舉例

[例布%入100個0?50的整數(shù),統(tǒng)計每個數(shù)出現(xiàn)的次

數(shù)。

分析:

①需要51個變量用于統(tǒng)計intcount[51]o

②讀一個字符,在相應(yīng)的變量上加1。

11on=0count[0]++

on=1count[1]++count[n]+

on=50count[50]++

o

nn

n[0]■■■

程序舉例

③如果用if語句,需要判斷多少次?

if(n==0)count[0]++;

if(n==1)count[1]++;

④用switch(n)

case0:count[0]++;

case1:count[1]++;...

⑤讀入的數(shù)字就是累加變量的下標(biāo)索引

count[k]++;

⑥循環(huán)多少次?100次

程序舉例

main()

{intcount[51];

inti,n;

for(i=0;i<=50;i++)

count[i]=0;

for(i=0;i<100;i++)

{scanf(u%dJ\&n);

count[n]++;4r^^計算相應(yīng)數(shù)字個數(shù)

的計數(shù)元素值加1

)

for(i=0;i<=50;i++)

printf(“%d*count[i]);

)

72

程序舉例

求Fibnacci數(shù)列[1,1,2,3,5,8,13,21,...}

初值:f[0]=1,f[1]=1

循環(huán)體:f[i]=f[i-2]+f[i-1]

循環(huán)控制:for(i=2;i〈20;i++)

Umain()

■{inti3f[20]={1J};

■for(i=2;i<20;i++)

If[i]=f[i-2]+f[i-1];

■for(i=0;i<20;i++)

I{if(i%5==0)

Iprintf”n");

I)

73

程序舉例

[例6]用起泡法對10個數(shù)排序

9854206137第0次,a[0]和a[1]比較

①8954206137第1次,和磯2]比較

②8594206137

③8549206137

第i次,a[i]和a[i+1]比較

④8542906137

⑤8542096137for(j=0;j<10-1;j++)

⑥8542069137if(a[j]>a[j+1])

⑦8542061937{temp=a[j];

⑧8542061397a[j]=a[j+1];

⑨8542061379a[j+1]=temp;}

74

@第0次循環(huán):程序舉例

林鼻1個元素開始,兩兩比較,較大的一個放在后面

for(j=0;j<9H++)

if(a[j]>a[jTL?10-1-0

{temp=a[j];a[j]=a[j+1];a[j+1]=temp;}

第0次循環(huán)后,最大的在最后.

8542061379

第1次循環(huán)10-1-1

forG=O;j<;j++)

if(aU]>aU+1])

+

{temp=a[j]3a[j]=a[j1];a[j+1]=temp;}

第1次循環(huán)后,次大的在倒數(shù)第二的位置.

5420613789

75

程序舉例

F果有n個元素,一共要比較n-1趟(外循環(huán)次數(shù))

在第i次比較時,需要從0比較到n-1-i

#include“stdio.h"

main()

{inta[10]={9,8,5,4,2,0,6,1,3J}JJJtemp,n=10;

for(i=0;i<n-1;i++)

for(j=0;j<n-1-i;j++)

if(aU]>a[j+1])

{temp=a[j],

溫馨提示

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

最新文檔

評論

0/150

提交評論