![理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第1頁](http://file4.renrendoc.com/view/e70597d7cc8bba6bf1bc0915c789faa5/e70597d7cc8bba6bf1bc0915c789faa51.gif)
![理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第2頁](http://file4.renrendoc.com/view/e70597d7cc8bba6bf1bc0915c789faa5/e70597d7cc8bba6bf1bc0915c789faa52.gif)
![理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第3頁](http://file4.renrendoc.com/view/e70597d7cc8bba6bf1bc0915c789faa5/e70597d7cc8bba6bf1bc0915c789faa53.gif)
![理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第4頁](http://file4.renrendoc.com/view/e70597d7cc8bba6bf1bc0915c789faa5/e70597d7cc8bba6bf1bc0915c789faa54.gif)
![理工軟件工程考研-c語言程序設(shè)計(jì)c2012-d11continue_第5頁](http://file4.renrendoc.com/view/e70597d7cc8bba6bf1bc0915c789faa5/e70597d7cc8bba6bf1bc0915c789faa55.gif)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)改造合同范本
- 2025年中國智能化節(jié)能裝置行業(yè)市場(chǎng)需求預(yù)測(cè)及投資戰(zhàn)略規(guī)劃報(bào)告
- 中介房子銷售合同范例
- 農(nóng)村電廠維修合同范本
- 業(yè)主委托拍攝合同范例
- 出售移動(dòng)廠房合同范本
- 供應(yīng)發(fā)票合同范本
- 中國一次性注射器市場(chǎng)全面調(diào)研及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 產(chǎn)品外銷合同范本
- 冷庫銷售安裝合同范本
- 政治校本課程
- 川2020J146-TJ 建筑用輕質(zhì)隔墻條板構(gòu)造圖集
- (完整)讀歌詞猜歌名
- 八年級(jí)下開學(xué)第一課主題班會(huì)
- 初中英語人教版 八年級(jí)上冊(cè) 單詞默寫表 漢譯英
- pcs-9611d-x說明書國內(nèi)中文標(biāo)準(zhǔn)版
- GB/T 1634.1-2004塑料負(fù)荷變形溫度的測(cè)定第1部分:通用試驗(yàn)方法
- 無人機(jī)航拍技術(shù)理論考核試題題庫及答案
- T∕CMATB 9002-2021 兒童肉類制品通用要求
- 工序勞務(wù)分包管理課件
- 暖通空調(diào)(陸亞俊編)課件
評(píng)論
0/150
提交評(píng)論