理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第1頁
理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第2頁
理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第3頁
理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第4頁
理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

編碼風(fēng)格第2

頁注意花括號(hào)的位置縮進(jìn)應(yīng)該是四個(gè)空格for、while

等語句和括號(hào)間要有空格,;等后要有空格或換行運(yùn)算符的前后應(yīng)有空格函數(shù)名后的括號(hào)無空格if、for、while

后必須使用花括號(hào)要在適當(dāng)?shù)奈恢锰砑涌招泻瘮?shù)要加return編碼風(fēng)格第3

頁#include

<stdio.h>int

main(){ int

i,

n

=

0;for

(

i

=0;

i

<

10;

++i)

{if

(

n%

2

==

0

)

{n

=n

+i;}

else

{n

=n

-

i;}}printf("%d\n",

n);return

0;}}#include

<stdio.h>int

main(){ int

i,

n

=

0;for

(

i

=

0;

i

<

10;

++i

){

if

(

n

%

2

==0

){

n

=n

+i;}else{

n

=n

-

i;}printf("%d\n",

n);return

0;}糾錯(cuò)糾錯(cuò)的六個(gè)階段:這不可能。我機(jī)器上就沒事。不應(yīng)該呀。為什么會(huì)出現(xiàn)這種問題?噢,我明白了。以前怎么就沒問題?第4

頁查找錯(cuò)誤物理學(xué)家、工程師和程序員三人駕駛著一輛汽車行駛在山上。下山時(shí),忽然剎車失靈,汽車無法控制地向下沖向一個(gè)懸崖,但是很幸運(yùn)的是在這個(gè)懸崖的前面有一些小樹讓他們的汽車停了下來。三人驚魂未定地從車?yán)锱懒顺鰜?。?yīng)該建立一個(gè)模型況下失靈的情物理學(xué)家說,“我覺得來模擬在下山過程中剎車片在高形”。工程師說,“我車的后備廂有個(gè)扳手,要不我們把車拆開看看到底是什么原因”。程序員說,“為什么

不找個(gè)相同的車,再來一次以重現(xiàn)這個(gè)問題呢?”第5

頁程序設(shè)計(jì)的一般步驟第6

頁明確問題的性質(zhì),分析題意數(shù)值問題/非數(shù)值問題建立問題的描述模型數(shù)學(xué)模型/過程模型設(shè)計(jì)/確定算法數(shù)學(xué)問題:數(shù)值分析非數(shù)學(xué)問題:數(shù)據(jù)結(jié)構(gòu)/算法分析與設(shè)計(jì)一般方法:窮舉/遞推/遞歸/分治/回溯/……編程調(diào)試分析運(yùn)行結(jié)果數(shù)值問題:要發(fā)就發(fā)第7

頁問題“1898─要發(fā)就發(fā)”。今年是2012年,現(xiàn)將不超過2012的所有素?cái)?shù)從小到大排成第一行,第二行上的每個(gè)數(shù)都等于它“右肩”上的素?cái)?shù)與“左肩”上的素?cái)?shù)之差。請(qǐng)編程求出:第二行數(shù)中是否存在這樣的若干個(gè)連續(xù)的整數(shù),它們的和恰好是1898?假如存在的話,又有幾種這樣的情況?第一行:2

3

5

7

11

13...1979

1987

1993第二行:1

2

2

4

2.....8

6百例34:要發(fā)就發(fā)第8

頁問題分析假設(shè)第1行的素?cái)?shù)為n[i](i=0,1,2,3,…),第2行的差值為m[j]:m[j]

=

n[j+1]

-

n[j]則第2行從k

開始連續(xù)j

個(gè)數(shù)的和為:SUM

=

m[k]

+

m[k+1]

+

m[k+2]

+

...

+

m[k+j-1]=(n[k+1]-n[k])+(n[k+2]-n[k+1])+(n[k+3]-n[k+2])+

+(n[k+j]-n[k+j-1])=

n[k+j]

-n[k]原題變?yōu)椋涸诓怀^2011的素?cái)?shù)中,是否存在這樣兩個(gè)素?cái)?shù),它們的差恰好是1898。若存在,則第二行中必有所需整數(shù)序列,其和恰為1898。百例34:要發(fā)就發(fā)第9

頁算法設(shè)計(jì)將小于2011的所有素?cái)?shù)保存在一維數(shù)組number中;采用窮舉法尋找:n[k+j]-n[k]=1898假設(shè)下標(biāo)j和i(0<i<j<=素?cái)?shù)的個(gè)數(shù)n):①對(duì)于任一number[j],令i=0;②判斷number[j]-number[i]>1898?如果成立,則:i=i+1,重復(fù)②;如果不成立,則進(jìn)入③;③如果number[j]-number[i]==1898?如果成立,則輸入結(jié)果;否則,j=j-1,進(jìn)入④;④如果number[j]<1898?如果成立,則算法結(jié)束;否則,進(jìn)入①重復(fù)算法。百例34:要發(fā)就發(fā)第10

頁算法設(shè)計(jì)1.將小于2011的所有素?cái)?shù)保存在一維數(shù)組number中;假設(shè)一個(gè)判斷素?cái)?shù)的函數(shù):int

fflag(int

i):當(dāng)整數(shù)i為素?cái)?shù)的時(shí)候,函數(shù)的返回值為1,如果整數(shù)i不是素?cái)?shù),函數(shù)的返回值為0。for

(

j=0,

i=3;

i<=2011;

i+=2

)if

(

fflag(i)==1

)number[j++]

=

i;退出循環(huán)時(shí),找的到素?cái)?shù)的數(shù)量為:j

個(gè)。最后一個(gè)有效元素保存在下標(biāo)j-1的位置上。百例34:要發(fā)就發(fā)第11

頁2.采用窮舉法尋找:n[k+j]-n[k]=1898假設(shè)下標(biāo)j

和i(0<i<j<=素?cái)?shù)的個(gè)數(shù)n):①對(duì)于任一number[j],令i=0;②判斷number[j]-number[i]>1898?如果成立,則:i=i+1,重復(fù)②;如果不成立,則進(jìn)入③;③如果number[j]-number[i]==

1898?如果成立,則輸入結(jié)果;否則,j=j-1,進(jìn)入④;④如果number[j]<1898?如果成立,則算法結(jié)束;否則,進(jìn)入①重復(fù)算法。for

(

j--;

number[j]>1898;

j--

){}for(i=0;

number[j]-number[i]>1898;

i++)

;if

(

number[j]-number[i]==1898

)printf("....",

......);百例34:要發(fā)就發(fā)程序與程序注釋#include<stdio.h>#include<math.h>#define NUM

320int

number[NUM];

/*存放小于2011的全部奇素?cái)?shù)*/main(

)row:\n");/*求出全部素?cái)?shù)*/{

int

i,

j,

count=0;printf

("There

are

sequences

infor

(

j=0,

i=3;

i<=2011;

i+=2)if

(

fflag(i)

)

number[j++]=i;for

(

j--;

number[j]>1898;

j--)

{/*開始搜索*/for

(

i=0;

number[j]-number[i]>1898;

i++)

;if

(number[j]-number[i]==1898)/*差滿足條件輸出*/printf("(%d).%3d,...,%d\n",++count,number[i],number[j]);}}第12

頁百例34:要發(fā)就發(fā)第13

頁程序與程序注釋int

fflag(

int

i

){ int

j;

if

(i==2)return(1);if

(

i<=1

||

i%2==0

)return(0); /*

if

no,

return

0

*/for

(

j=3;

j<=(int)sqrt((double)i);

j+=2

)if

(

!(i%j)

)return(0);return(1); /*

if

yes,

return

1

*/}百例34:要發(fā)就發(fā)程序2與程序注釋#include

<stdio.h>#include

<math.h>main(

){

int

i,j,

count=0;printf("There

are

sequences

inrow:\n");for

(

i=3;

i <=2011;

i+=2

)if

(

fflag(i)

&&

fflag(i )

)printf("The

result

%d..%d

is

1898.\n",i,

i);}第14

頁小結(jié):編程的步驟明確問題的性質(zhì),分析題意數(shù)值問題建立問題的描述模型進(jìn)行數(shù)學(xué)分析,推導(dǎo)出數(shù)學(xué)公式設(shè)計(jì)/確定算法基本思想:窮舉法采用逐步求精的步驟逐步,推導(dǎo)出整個(gè)算法確定數(shù)據(jù)結(jié)構(gòu):數(shù)組采用偽語言描述算法逐步細(xì)化產(chǎn)生程序編程調(diào)試分析運(yùn)行結(jié)果第15

頁算法設(shè)計(jì):北理工的惡龍最近,北理工出現(xiàn)了一只惡龍,它長(zhǎng)著很多頭,而且還會(huì)吐火,它將會(huì)把北理工燒成廢墟,于是,校長(zhǎng)召集全校所有勇士殺死這只惡龍。要?dú)⑺肋@只龍,必須把它所有的頭都砍掉,每個(gè)勇士只能砍一個(gè)龍頭,龍的每個(gè)頭大小都不一樣,一個(gè)勇士只有在身高不小于龍頭的直徑的情況下才能砍下它。而且勇士們要求,砍

下一個(gè)龍頭必須得到和自己身高厘米數(shù)一樣的學(xué)分。校長(zhǎng)想花最少的學(xué)分?jǐn)?shù)殺死惡龍,于是找到你尋求幫助。第16

頁算法設(shè)計(jì):北理工的惡龍第17

頁輸入第一行龍頭數(shù)n,勇士人數(shù)m(1<=n,

m<=100)接下來n

行,每行包含一個(gè)整數(shù),表示龍頭的直徑接下來m

行,每行包含一個(gè)整數(shù),表示勇士的身高輸出如果勇士們能完成任務(wù),輸出校長(zhǎng)需要花的最小費(fèi)用;否則輸出“bit

isdoomed!”輸入樣例12

354784輸出樣例111輸入樣例22

15510輸出樣例2bit

isdoomed!算法設(shè)計(jì):北理工的惡龍基本思路首先找出人工方式應(yīng)該如何進(jìn)行處理,設(shè)計(jì)算法模擬人工的過程。算法設(shè)計(jì)讀入龍頭數(shù)

n

和勇士m讀入n

個(gè)龍頭數(shù)據(jù)存入數(shù)組dragon

中讀入m

個(gè)勇士數(shù)據(jù)存入數(shù)組

cavalier

中對(duì)數(shù)組dragon

中的n

個(gè)數(shù)據(jù)從小到大進(jìn)行排序?qū)?shù)組cavalier

中的m

個(gè)數(shù)據(jù)從小到大進(jìn)行排序進(jìn)行處理7.輸出結(jié)果void

input(

int

a[

],

int

n

)void

sort(

int

a[

],

int

n

)第18

頁算法設(shè)計(jì):北理工的惡龍第19

頁算法設(shè)計(jì)讀入龍頭數(shù)

n

和勇士m讀入n

個(gè)龍頭數(shù)據(jù)存入數(shù)組dragon

中讀入m

個(gè)勇士數(shù)據(jù)存入數(shù)組

cavalier

中對(duì)數(shù)組dragon

中的n

個(gè)數(shù)據(jù)從小到大進(jìn)行排序?qū)?shù)組cavalier

中的m

個(gè)數(shù)據(jù)從小到大進(jìn)行排序#define

M100int

cavalier[M],

dragon[M],

n,

m;scanf("%d%d",

&n,

&m);input(

dragon,

n

);input(

cavalier,

m

);sort(

dragon,

n

);sort(

cavalier,

m

);算法設(shè)計(jì):北理工的惡龍第20

頁“處理”部分的算法設(shè)計(jì)龍頭下標(biāo)j=0,勇士下標(biāo)

i=0當(dāng)i<m

且j<n

時(shí),進(jìn)入3

進(jìn)行嘗試,否則結(jié)束。判斷第i

個(gè)勇士的身高

>=第j

個(gè)龍頭直徑嗎?

若成立,則表示第

i

個(gè)勇士可以砍下第

j

個(gè)龍頭,記錄身高,找下一個(gè)勇士和下一個(gè)龍頭(i++,j++)轉(zhuǎn)2。若不成立,試探下一個(gè)勇士(i++),轉(zhuǎn)2。for

(

i=j=0;

i<m

&&j<n;

){}j++;if

(

cavalier[i]

>=

dragon[j]

){

result

+=

cavalier[i];

i++;}else

i++;算法設(shè)計(jì):北理工的惡龍/*記錄學(xué)分*/程序主體void

main

(){

int

n,

m,

i,

j;

long

result=0;scanf("%d%d",

&n,

&m);input(

dragon,

n);

input(

cavalier,

m);sort(

dragon,

n

);

sort(

cavalier,

m

);for

(i=j=0;i<m

&&

j<n;)

/*進(jìn)行試探*/{

if

(

cavalier[i]

>=

dragon[j]

)i++;

j++;{

result

+=

cavalier[i];}else

i++;}if

(

j==n

)elseprintf("%ld\n",

result

);printf("bit

is

doomed!\n");第21

頁}貪心法算法設(shè)計(jì):騰騰與朋友用一副不含大小王的

牌進(jìn)行

。:每人發(fā)

k張牌,各自看完各自的牌后,把牌面朝下放成一行,騰騰的牌從左到右

1…

k,朋友的牌對(duì)面放好,即騰騰的第

i

張牌和朋友的第

i

張牌相對(duì),最后把

翻過來,得分規(guī)則如下:如果騰騰的第i張牌比朋友的大,騰騰得一分。如果朋友的第i張牌比騰騰的大,朋友得一分。牌的大小先由牌的數(shù)值決定:2<3<..<9<T<J<Q<K<A;如果數(shù)值相等的話,由花色決定:C(梅花)<D(方片)<S(黑桃)<H(紅桃)這本應(yīng)是由運(yùn)氣決定勝負(fù)的,但是騰騰在牌的背面做了標(biāo)記,也就是,在牌還沒有翻過來時(shí)騰騰就已經(jīng)知道朋友的牌是什么了。你的任務(wù)是,給出兩個(gè)人的牌,計(jì)算出騰騰最多可以得多少分。第22

頁算法設(shè)計(jì):輸入第一行是一個(gè)整數(shù)

m,表示每個(gè)的牌數(shù),m<=26;第二行和第三行分別為朋友和騰騰的牌:每張牌由兩個(gè)字符組成,第一個(gè)表示大小,第二個(gè)表示花色。每張牌之間由空格隔開。輸出輸出騰騰最多可以得多少分。輸入樣例132H

3H

4H2D

3D

4D期望的輸出12輸入樣例238C

8S

9S3C

2D

7H期望的輸出20輸入樣例346S

JD

AC

8DKH

2D

6D

3C期望的輸出31第23

頁算法設(shè)計(jì):基本思路首先找出人工方式騰騰應(yīng)該如何進(jìn)行應(yīng)對(duì)。設(shè)計(jì)算法模擬人工的過程?;舅惴ㄘ澬姆?。算法關(guān)鍵如何在計(jì)算機(jī)中表示52張不同的牌?不同的表示方法在處理中的難度不同!編碼牌面數(shù)值2~9,T,J,Q,K,A

對(duì)應(yīng):20,30,40,...,140花色C、D、S、H對(duì)應(yīng):1,2,3,4◆

任意一張牌

牌面數(shù)值+花色值第24

頁算法設(shè)計(jì):程序思路char

str[10];int

poker[2][26];存輸入的一張?jiān)寂?維數(shù)組,保存轉(zhuǎn)換后數(shù)據(jù)下標(biāo)為0的行存朋友的牌,為1的行存騰騰的牌基本函數(shù)void

sort(int

a[],int

m)

從小到大排序?qū)σ粡埮七M(jìn)行編碼int

n_poker

(char

*

str

)算法設(shè)計(jì)讀入m讀入2*m

個(gè)牌面數(shù)據(jù),進(jìn)行轉(zhuǎn)換后存入數(shù)組對(duì)第0行進(jìn)行排序?qū)Φ?行進(jìn)行排序5.進(jìn)行處理sort(

poker[

0

], m

)sort(

poker[

1

],m

)第25

頁6.輸出結(jié)果算法設(shè)計(jì):main函數(shù)void

main(

void

){ char

str[10];int

poker[2][26];int

n,

m,

i,

j,

count;scanf("%d",

&m);for(i=0;

i<2;

i++)

/*輸入兩人手中的牌*/for(j=0;j<m;

j++){ scanf(“%s”,

str

); /*

讀入一張牌

*/poker[i][j]

=

n_poker(

str

);

/*

轉(zhuǎn)換

*/}第26

頁算法設(shè)計(jì):main函數(shù)sort

(

poker[0],

m

);sort

(

poker[1],

m

);for

(

count=i=j=0;

i<m

&&

j<m;

){ if

(

poker[0][i]

<

poker[1][j]

){ count

++;i

++; j

++;}else

j++;}printf(

"%d\n",

count

);}例poker第27

頁算法設(shè)計(jì):main函數(shù)int

n_poker

(

char

*

str

){ intnum;if

(

*str

>=

'2'

&&

*str

<=

'9'

)num

=

(*str

-

'0'

)*

10;else

if

(

*str

=='T'

)num

=100;else

if

(

*str

=='J'

)num

=110;else

if

(

*str

=='Q'

)num

=

120;else

if

(

*str

==

'K'

)num

=

130;else

num

=

140;正確的方法:將數(shù)字字符轉(zhuǎn)換為數(shù)值'0'不好的辦法:48第28

頁算法設(shè)計(jì):main函數(shù)int

n_poker

(char

*

str

){……switch

(

*(str+1)

){ case

'C':case

'D':case

'S':default:num

+=

1;break;num

+=

2;break;num

+=

3;break;num+=4;}return

num;}例poker第29

頁例7-7:

有10張3分郵票和10張5分郵票,用這些郵票中的一張或若干

得到多少種不同的郵資?問題分析與算法設(shè)計(jì)計(jì)算不同張數(shù)和面值的郵票組成的郵資公式:s=

3*i

+

5*j其中i

為3分郵票的張數(shù),j

為5分郵票的張數(shù)按題目要求,3分的郵票可以取i

(0~10)張,5分的郵票可以取

j

(0~10)張。采用窮舉法進(jìn)行組合,求出這些不同面值、不同張數(shù)的郵票組合后的郵資。關(guān)鍵:要記錄已經(jīng)組合好的面值。如:3張5分的郵票和5張3分的郵票是同一面值,只能算一種組合。數(shù)組應(yīng)用實(shí)例-郵票組合/百例72共78頁第30

頁inta[100];void

main(

){ int

i,

j,

k,

sum,

count=0;for

(

i=0;

i<=10;

i++

)

for

(

j=0;

j<=10;

j++

){ sum

=

i*3

+

j*5;for(

k=0;

k<count;

k++)if

(

sum

==

a[k]

)break;if

(

k==count

&&sum!=0

){ a[k]

=

sum;count++;}}printf("%d

kinds:",

count);for

(

k=0;

k<count;

k++)printf("%4d

",

a[k]);}數(shù)組應(yīng)用舉例-郵票組合例C7_7共78頁第31

頁百例47:計(jì)算分?jǐn)?shù)的精確值第32

頁問題使用數(shù)組精確計(jì)算M/N(0<M<N<=100)的值。如果M/N是無限循環(huán)小數(shù),則計(jì)算并輸出它的第一循環(huán)節(jié),同時(shí)要求輸出循環(huán)節(jié)的起止位置(小數(shù)位的序號(hào))。百例47:計(jì)算分?jǐn)?shù)的精確值問題分析與算法設(shè)計(jì)將商存放在數(shù)組中,數(shù)組的每個(gè)元素存放1位十進(jìn)制數(shù),即商的第1位存放在第1個(gè)元素的第2位存放在第2個(gè)元素中……,這樣使用數(shù)組來表示一個(gè)高精度的計(jì)算結(jié)果。進(jìn)行除法運(yùn)算時(shí)模擬人工操作:每次求出商的一位后將余數(shù)乘以10,再計(jì)算商的下1位。當(dāng)某次計(jì)算后的余數(shù)為0時(shí),表示M/N為有限不循環(huán)小數(shù);當(dāng)某次計(jì)算后的余數(shù)與前面的某個(gè)余數(shù)相同時(shí),則M/N為無限循環(huán)小數(shù),從該余數(shù)第1次出現(xiàn)后所求得的各位就是小數(shù)的循環(huán)節(jié)。第33

頁第34

頁百例47:計(jì)算分?jǐn)?shù)的精確值程序與程序注釋int

re[101],qu[101];

/*re:余數(shù)qu:商的每一位*/main

(

){ int

m,

n,

i,

j;scanf("%d/%d",&m,&n);

/*輸入被除數(shù)和除數(shù)*/printf("%d/%d

it's

accuracy

value

is:

0.",

m,

n);for

(i=1;i<=100;i++){

/*

i:商的位數(shù)*/re[m]=i;

/*

m:余數(shù),re[m]:該余數(shù)對(duì)應(yīng)的商的位數(shù)*/m

*=10;

/*余數(shù)擴(kuò)大10倍*/qu[i]=m/n;

/*商*/m=m%n;

/*求余數(shù)*/if(m==0){ /*余數(shù)為0則表示是有限小數(shù)*/for(j=1;j<=i;j++)printf("%d",qu[j]);

/*輸出商*/break;

/*退出循環(huán)*//*若余數(shù)面已經(jīng)出現(xiàn)過*/}if

(re[m]!=0

){for

(

j=1;

j<=i;

j++)printf("%d",

qu[j]);/*輸出循環(huán)小數(shù)*/printf

("\n\tand

it

is

from

%d\n",

re[m]);printf

("\tdigit

to

%d

digit

after.\n",

i);break;/*循環(huán)節(jié)*//*退出*/}}}非數(shù)值問題:魔術(shù)師的猜牌術(shù)問題魔術(shù)師利用一副牌中的13張黑桃,預(yù)先將它們排好后迭在一起,牌面朝下。對(duì)觀眾說:我不看牌,只數(shù)數(shù)就可以猜到每張牌是什么,我大聲數(shù)數(shù), 聽,不信?

就看。魔術(shù)師將最上面的那張牌數(shù)為1,把它翻過來正好是黑桃A,將黑桃A放在桌子上,然后按順序從上到下數(shù)手中的余牌,第二次數(shù)1、2,將第一張牌放在這迭牌的下面,將第二張牌翻過來,正好是黑桃2,也將它放在桌子上。第三次數(shù)1、2、3,將前面兩張依次放在這迭牌的下面,再翻第三張牌正好是黑桃3。這樣依次進(jìn)行將13張牌全翻出來,準(zhǔn)確無誤。問魔術(shù)師手中的牌原始次序是怎樣按排的?第35

頁百例69:魔術(shù)師的猜牌術(shù)問題分析與算法設(shè)計(jì)人工倒推:在桌子上放13個(gè)空盒子排成一圈,從1開始順序,將黑桃A放入1號(hào)盒子中,從下一個(gè)空盒子開始對(duì)空的盒子計(jì)數(shù),當(dāng)數(shù)到第二個(gè)空盒子時(shí),將黑桃2

放入空盒子中,然后再從下一個(gè)空盒子開始對(duì)空盒子計(jì)數(shù),順序放入3、4、5…,直到放入全部13張牌。注意在計(jì)數(shù)時(shí)要跳過非空的盒子,只對(duì)空盒子計(jì)數(shù)。最后牌在盒子中的順序,就是魔術(shù)師手中原來牌的順序。第36

頁百例69:魔術(shù)師的猜牌術(shù)A23456178910111213第37

頁百例69:魔術(shù)師的猜牌術(shù)第38

頁程序說明與注釋int

a[14];main(

){int

i,n,j=1;

/*

j:數(shù)組(盒子)下標(biāo),初始時(shí)為1號(hào)元素

*/printf("The

original

order

of

cards

is:

");/*

i:要放入盒子中的牌的序號(hào)

*//*

n:空盒計(jì)數(shù)器*/for

(

i=1;

i<=13;

i++){n=1;do

{if

(j>13)

j=1;if(

a[j])

j++;/*

j超過最后一個(gè)元素則指向1號(hào)元素*//*跳過非空的盒子,不計(jì)數(shù)

*/else{if(n==i

)a[j]=i;/*若數(shù)到第i個(gè)空,則放入*/j++;n++;

/*對(duì)空盒計(jì)數(shù),下標(biāo)指向下1個(gè)盒子

*/}}while

(n<=i);

/*控制空盒計(jì)數(shù)為i

*//*輸出牌的排列順序*/}for

(i=1;

i<=13;

i++)printf("%d

",a[i]);}3-1.

輸入一行字符,將其中的每個(gè)字符從小到大排列后輸出。#include

<stdio.h>main

()/*冒泡法排序*/{ char

string

[100],

t;int

i,

j,

n;gets(

string

);n

=

strlen

(

string

);for

(

i=0;

i<n;

i++

)for

(

j=0;

j

<

n-1-i;

j++

)if

(

string[j]

>

string[j+1]

){t

=string[j];

string[j]

=

string[j+1];string[j+1]

=

t;}編程實(shí)例-字符排序puts(string

);}第39

頁3-3.輸入五個(gè)單詞,請(qǐng)將它們按從小到大的順序排列后輸出。#include

<stdio.h>main

(){ char

str

[5][20],

t[20];int

i,

j,

n;printf

("Enter

string:\n");for

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

/*循環(huán)輸入5個(gè)字符串*/gets(str[i]);for

(

i=0;

i<5;

i++

)for

(j=0;

j

<

5-1-i;

j++

)if

(

strcmp(

str[j],

str[j+1])

>

0

){

strcpy

(

t, str[j]

);strcpy

(

str[j],

str[j+1]);strcpy

(

str[j+1],

t);}printf("Result:\n");編程實(shí)例-單詞排序for

(i=0;

i<5;

i++

)puts

(str[i]

);}第40

頁3-14.輸入字符串,刪除串中重復(fù)字符。如:輸入字符串:abacaeedabcdcd

;則輸出:abcedmain(){char

str1[80],

str2[80]; int

i,

j,

n;printf

("Enter

string:");gets

(

str1

);n

=0;for

(

i=0;

str1[i]!='\0';

i++)

{for

(j=0;j<n

&&

str1[i]!=str2[j];j++);if

(j

==

n) /*不重復(fù),則拷貝*/str2

[

n++

]

=

str1

[

i

];}str2[n]='\0';printf("Result:");puts

(

str2

);}編程實(shí)例-串處理第41

頁3-16.

輸入一行字符串,將其反序后再輸出。main

(){

char

str[80],

c;int

i,

j,

n;printf

("Enter

string:");gets

(

str

);n=strlen(str);for(

i=0,j=n-1;

i<j;i++,j--

){

c =

str[i];str[i]

=

str[j];str[j]

=

c;}printf("Result:");puts

(

str

);}編程實(shí)例-串反序第42

頁3-21.輸入兩個(gè)已經(jīng)按從小到大順序排列好的字符串,編寫一個(gè)合并兩個(gè)字符串的函數(shù),使合并后的字符串,仍然是從小到大排列。main

(){

charstr1[80],

str2[80],

str[80];int

i,j,

n;printf

("Enter

string1:");printf

("Enter

string2:");gets

(

str1

);gets

(str2);n

=0;for

(

i=0,j=0;

str1[i]!='\0'

&&

str2[j]!='\0';

)if

(

str1[i]

<

str2[j]

) str[n++]

=

str1[i++];elsewhile

(

str1[i]!='\0'

)while

(

str2[j]!='\0'

)str[n++]

=

str2[j++];str[n++]

=

str1[i++];str[n++]

=str2[j++];str[n]='\0';printf("Result:");p

溫馨提示

  • 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)論