有趣的c好玩的程序設(shè)計(jì)cc++_第1頁(yè)
有趣的c好玩的程序設(shè)計(jì)cc++_第2頁(yè)
有趣的c好玩的程序設(shè)計(jì)cc++_第3頁(yè)
有趣的c好玩的程序設(shè)計(jì)cc++_第4頁(yè)
有趣的c好玩的程序設(shè)計(jì)cc++_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1.功能:求三個(gè)整數(shù)的平均值。程序如下:

include<stdio.h>/*載入頭文件stdio.h*/

voidmain。/*主函數(shù)main*/

(

inta,b,c,d;/*定義a,b,c,d為整型變量*/

a=105;

b=75;

c=85;

d=(a+b+c)/3;

primf("d=%d\n”,d);/*顯示”d=某數(shù)”并換行,某數(shù)是d的值*/

getchar。;/*等待用戶(hù),按任意鍵退出*/

return0;

)

2.功能:由鍵盤(pán)輸入多邊形的邊數(shù),求其內(nèi)角和。程序如下:

#include<stdio.h>

voidmain()

(

/*辨別多邊形是否成立,不成立重新執(zhí)行do-while語(yǔ)句間的命令*/

do

(

intx;

printf(nn=n);

scanf(n%dn,&x);/*由鍵盤(pán)輸入x的值*/

printf("%d\n”,(x?2)*180);/*顯示內(nèi)角和,公式為(x-2)*1807

/*辨別多邊形是否成立,不成立顯示“Error”,成立顯示“Right”*/

if(x<=2)

printfCErrorNn'*);

else

printf("Right\n");

)

while(x<=2);/*do-while語(yǔ)句*/

getchar();

return0;

)

3,功能:由鍵盤(pán)輸入兩個(gè)數(shù),顯示器上顯示較大數(shù)。程序如

#include<stdio.h>

intbig(intjnt);/*創(chuàng)建整型變量函數(shù)big*/

voidmain()

(

intx,y;

scanf("%d,%d",&x,&y);

printf("bigis%d\n",big(x,y));

/*輸出big函數(shù)的值,因?yàn)閙ain函數(shù)與用戶(hù)自定義函數(shù)big無(wú)關(guān)系,所以printf后的輸出

項(xiàng)表是big(x,y),而不是big(n1,n2)7

getchar();

return0;

)

intbig(intn1,intn2)/*用戶(hù)自定義函數(shù)big*/

(

if(n1>n2)

returnn1;/*返回n1值*/

else

returnn2;/*返回n2值*/

)

4.功能:由鍵盤(pán)輸入一個(gè)等腰三角形的層數(shù),畫(huà)一個(gè)這樣的三角形。程序如下:

#include<stdio.h>

voidmain()

(

intij.n;

printf("n:");

scanf("%d",&n);

for(i=1;i<=n;i++)/*循環(huán)n次,每次輸出一行*/

(

for(j=1;j<=n-i;j++)/*輸出該行前面的空格*/

printf("");

for(j=1;j<=2*i-1;j++)/*輸出該行中的星號(hào)*/

printf("*");

printf("\n");

)

getchar();

return0;

)

注釋:不能輸入太多的行數(shù),如10000。

5.功能:由鍵盤(pán)輸入一個(gè)最大值,求2到這個(gè)最大值中的所有質(zhì)數(shù)(素?cái)?shù))。程序如下:

#include<stdio.h>

#include<math.h>/*數(shù)學(xué)文件*/

voidmain()

(

intn,m,flag,i,j,num=1;

printf("n:");

scanf("%d",&n);

printf("2-%d:\n",n);

for(i=2;i<=n;i++)/*循環(huán)查找質(zhì)數(shù)*/

(

flag=1;

m=(int)sqrt(i);

for(j=2;j<=m;j++)

if(i%j==0)/*條件為真時(shí)表示不是質(zhì)數(shù),退出for循環(huán)*/

(

flag=0;

break;

)

if(flag==1)/*條件為真時(shí)表示i是質(zhì)數(shù)*/

(

printf("%4d",i);

if(num++%10==0)/*每行最多輸出10個(gè)數(shù)*/

printf("\n");

)

)

printf("\n");

getchar();

return0;

)

6.功能:顯示保護(hù)屏幕。程序如下:

#include<stdlib.h>/*綜合庫(kù)*/

#include<graphics.h>/*繪圖庫(kù)*/

intmain()

intgdriver=DETECT;/*定義圖象驅(qū)動(dòng)器為DETECT*/

intgmode=DETECT;/*定義圖象模式為DETECT*/

longn;/*定義長(zhǎng)型變量n7

initgraph(&gdriver,&gmode,"E:\TC\bgi");

/*進(jìn)入圖象狀態(tài)(警告:""之間的是圖象驅(qū)動(dòng)器的路徑,建議網(wǎng)友們?cè)O(shè)置為空,即只有叱或

設(shè)為編程系統(tǒng)的路徑,例路徑是C:\TC,那么就是輸入C:\TC\bgi)7

sleep。);/*暫停一秒,以保證無(wú)誤差進(jìn)入圖象狀態(tài)*/

for(n=1;n<=40000000;n++)/*畫(huà)40000000個(gè)圓7

(

setcolor(rand());/*作圖顏色隨機(jī)*/

circle(random(639),random(639),25);/*畫(huà)圓,位置隨機(jī),半徑為25*/

)

getchar();

return0;

)

一段有趣的C程序

最近在一個(gè)論壇發(fā)現(xiàn)了一段簡(jiǎn)單的C程序很有意思,其中蘊(yùn)含著不少技

巧,在此與大家分享一下。

原程序如下:

Sinclude<stdio.h>

main(){char*x="*b#**000**[#*******2*0***#_.****5.*-#-

.****54.#*******2**6#****00**0.#”;while(_=*x/4)-

=8,printf('\n%*s"+!!,+,"http:///"+*x++%4*2);}

表面看起來(lái)很奇怪的代碼,我把它放到VC++6下面編譯,發(fā)現(xiàn)不能通過(guò),

提示".”未聲明,對(duì)以上代碼稍加修改,如下:

Sinclude<stdio.h>

main(int_){char*x=/,*b#**000**I#*******2*0***#-.****5.*-#-

.****54.#*******2**6#****00**0.while(_=*x/4)_-

=8,printf("\n%*s"+!!,+,"http:///"+*x++%4*2):)

細(xì)心的人已經(jīng)看出來(lái)了,就是在main函數(shù)的參數(shù)“.”前面加上了變量的

類(lèi)型:int。此時(shí),以上代碼在VC6中就能夠正常的編譯和連接了。運(yùn)行的結(jié)果

如下:

是用"_/”組成的單詞“knocker”。

下面我們來(lái)分析這個(gè)小小的程序,不過(guò)為了看起來(lái)直觀(guān),我把這個(gè)程序稍

加改動(dòng):

Sinclude<stdio.h>

main(int_){

char*x=〃*b#**000**I#*******2*0***#-?****5?*一#一

.****54.#*******2**6#****00**0.#〃;

while(_=*x/4)

{

_-=8;

printf("\n%*s"+!!,+,"http:///"+*x++%4*2);

}

首先來(lái)看看main函數(shù)參數(shù),這個(gè)參數(shù)的名稱(chēng)比較奇怪"_",我們看著有

些不習(xí)慣,但它確實(shí)是合法的變量名稱(chēng)。另外,本來(lái)我們常見(jiàn)的main函數(shù)一般

都不帶參數(shù),如果有參數(shù)是因?yàn)槌绦蛳M幚砻钚懈袷较逻\(yùn)行這個(gè)程序所需

要的參數(shù),一般是這樣的:main(intargc,char**argv),第一■個(gè)參數(shù)argc

表示參數(shù)表中參數(shù)的個(gè)數(shù),argc是一個(gè)char型二維數(shù)組,保存著參數(shù)字符

串。舉個(gè)例子,如果我們?cè)诿钚邢螺斎朊睿篸ir-sc:\

此時(shí),argc的值為3(包括命令本身),argv此]指向字符串:dir,arg[l]

指向字符串:-s,arg[2]指向字符串c:\。那么既然main函數(shù)的參數(shù)通常要不

沒(méi)有,要不就是兩個(gè),而這個(gè)程序只有一個(gè),這樣做是否合法呢?答案是肯定

的!我在《關(guān)于C語(yǔ)言中的變量》中提到過(guò),函數(shù)中的參數(shù)是保存在堆棧中

的,所以這就涉及到一個(gè)誰(shuí)來(lái)平衡堆棧的問(wèn)題,是調(diào)用者還是被調(diào)用者。在使

用VC6編譯器的時(shí)候,如果函數(shù)沒(méi)有特別的聲明,默認(rèn)是調(diào)用者清理堆棧。換

句話(huà)說(shuō),運(yùn)行時(shí)庫(kù)(runtime)調(diào)用main函數(shù)的時(shí)候,只傳遞一個(gè)參數(shù)給main函

數(shù),這一點(diǎn)它自己是知道的,當(dāng)main函數(shù)調(diào)用結(jié)束以后,它在平衡堆棧的時(shí)

候,只清除掉一個(gè)函數(shù),因此不會(huì)出現(xiàn)任何問(wèn)題。

我們接著往下看,下面定義了一個(gè)char型指針變量x,指向一個(gè)字符串。

接下來(lái)是while語(yǔ)句,wh下來(lái)_=(*x)/4),但表達(dá)式_=(*x)/4的值不為0的時(shí)

候就執(zhí)行while的循環(huán)體,然而表達(dá)式_=(*x)/4是一個(gè)賦值語(yǔ)句,它的值又是

多少呢?在這種情況下,通常賦值號(hào)右面的表達(dá)式的值就是整個(gè)表達(dá)式的值。

第一次執(zhí)行這個(gè)語(yǔ)句的時(shí)候,x指向字符',對(duì)應(yīng)的值為42,以此類(lèi)推,當(dāng)

x=0時(shí),也就是字符串結(jié)束的時(shí)候,循環(huán)結(jié)束。

接下來(lái)在原來(lái)的程序中是:

=8,printf("\n%*s"+”_/_/_/"+*x++%4*2);這里的逗號(hào)作用有些類(lèi)似分

號(hào),但是逗號(hào)兩側(cè)組成的是一條語(yǔ)句,而分號(hào)則是兩條語(yǔ)句。

我們仔細(xì)看printf這條語(yǔ)句,它的格式字符串為:”\n%*s",其中期s

很少見(jiàn),很多人不知道這是什么格式,不過(guò)我們可以在MSDN中找到這樣的描

述:

Ifthewidthspecificationisanasterisk(*),anintargument

fromtheargumentlistsuppliesthevalue.Thewidthargumentmust

precedethevaluebeingformattedintheargumentlist.

意思是說(shuō)如果寬度用星號(hào)(*)來(lái)指定,則應(yīng)該在參數(shù)列表中提供一個(gè)int型

參數(shù)作為寬度的值。這樣就清楚了,原來(lái)這個(gè)printf語(yǔ)句是用表達(dá)式_+_來(lái)控

制字符串“外*s”的寬度,也就是替換其中的(*)。

在仔細(xì)一看,原來(lái)格式字符串還沒(méi)有完!完整的應(yīng)該是:"\n**s〃+!!_。這

就奇怪了,字符串怎么和!!_相加呢?其實(shí)也不奇怪,在這里!!一是對(duì)變量一作了

兩次“非”的操作,結(jié)果應(yīng)該是?;?。要明確的是,字符串作為參數(shù)傳遞給

函數(shù)的時(shí)候,只是把字符串的首地址傳遞給了函數(shù),所以字符串〃\n96*s''的首地

址就是字符'\n'的地址,當(dāng)這個(gè)地址加1的時(shí)候,傳遞給printf函數(shù)的格式

字符串就變成了組*s〃,所以這個(gè)+!!一的奧妙就在于控制換行!是不是很有創(chuàng)

后!

當(dāng)然了,下面的代碼同樣有創(chuàng)意,就是printf語(yǔ)句要打印的字符串參數(shù):

〃_/_/_/〃+*x++/4*2。經(jīng)過(guò)剛才的分析,我們不難理解〃加上后面的表達(dá)

式的用意了,同樣是控制輸出字符的個(gè)數(shù),是一個(gè)“_/",兩個(gè),還是三個(gè)。

那么關(guān)鍵就是后面這個(gè)表達(dá)式了:*x++%4*2。其實(shí)慢慢的分析也不困難,先執(zhí)

行*x%4*2,然后執(zhí)行x++。所以,當(dāng)在執(zhí)行while語(yǔ)句的時(shí)候,x會(huì)指向下一個(gè)

字符!

綜上所述,這個(gè)小程序就是利用一個(gè)字符串來(lái)控制輸出的例子,里面運(yùn)用

了很多技巧,對(duì)于初學(xué)者需要很好的理解,對(duì)今后的編程是很有幫助的!

#include<stdio.h>

intmain()

(

constshortintc1=49920;

constintc2=1073742008;

int(*pf)()=(int(*)())&c2;

printf("%c%c\n",*(char*)pf()-19,*((char*)pf()+1)-49);

return0;

)

運(yùn)行這個(gè)程序,屏幕上會(huì)出現(xiàn)一個(gè):)

很多人不懂其中的道理,在這里我給大家分析下代碼。

先看這兩句:

constshortintd=49920;

constintc2=1073742008;

定義了兩個(gè)局部變量,數(shù)值轉(zhuǎn)換成16進(jìn)制為:

constshortintc1=0xc300;

constintc2=0x400000b8;

其中變量C1的地址為:0X0012FF7C,占兩個(gè)字節(jié),C2的地址為:0x0012FF78,占

四個(gè)字節(jié)。這兩個(gè)變量占據(jù)了連續(xù)的空間。變量賦值后,從0x12ff78開(kāi)始的內(nèi)存單元

存儲(chǔ)的字節(jié)碼為:B800004000C3o對(duì)應(yīng)的匯編碼是:

moveax,4OOOOOh

ret

接下來(lái)的這句:

int(*pf)()=(int(*)())&c2;

分析如下:

定義了一個(gè)函數(shù)指針,參數(shù)為NULL,返回值為int類(lèi)型。這個(gè)函數(shù)指針,指向上面的

匯編碼。這樣,后面執(zhí)行pf(),就執(zhí)行了這段匯編碼。

繼續(xù)分析下面這句代碼:

printf("%c%c\n",*(char*)pf()-19,*((char*)pf()+1)-49);

先看*(char*)pf()-19這個(gè)表達(dá)式,執(zhí)行了了pf指向的匯編代碼,從匯編代碼看,

這個(gè)函數(shù)調(diào)用后的返回值是0x400000,pf()前面的char*是把函數(shù)的返回值轉(zhuǎn)換成一

個(gè)

char*型指針,這個(gè)指針指向0x400000,前面再加個(gè)*號(hào),表示取0x400000地址的內(nèi)

容,

由于是char*型指針,因此從這個(gè)地址取一個(gè)字節(jié)。

*(char*)pf()-19表示的是從0x400000取出的字節(jié)內(nèi)容再減去19。

接下來(lái):*((char*)pf()+1)-49代表的意思是從0x400000+1的地址取出一個(gè)字節(jié)內(nèi)

容在減去49。

熟悉PE文件結(jié)構(gòu)的朋友一定知道,對(duì)于exe文件0x400000是內(nèi)存加載的基地址。

也就是說(shuō),0x400000字節(jié)的內(nèi)容對(duì)應(yīng)的是0x4D,0x400001字節(jié)的內(nèi)容對(duì)應(yīng)的是0x5A.

這是我們常說(shuō)的pe文件起始的兩個(gè)字節(jié)JMZ"

這樣,表達(dá)式*(char*)pf()-19的結(jié)果是0x3A,表達(dá)式*((char*)pf()+1)-49的結(jié)果是

0x29

察看ascii碼表,輸出就是我們看到的樣子。

總結(jié):

別看一個(gè)這么小的程序,但是其中涉及的知識(shí)面比較廣

不過(guò)在F8我用gcc編譯通過(guò),運(yùn)行的時(shí)候出現(xiàn)的提示是:

Segmentationfault

原因我認(rèn)為是編譯器的ASCII不兼容,是嗎?

一個(gè)有趣的C程序

關(guān)鍵詞:C程序

最近總做些無(wú)聊的事,迷迷糊糊。

在論壇上看到一個(gè)有趣的C程序,有點(diǎn)意思,寫(xiě)下來(lái)。

main(_){for(putchar(_++["J!MpwfIZpv\1"]-1););}

輸出的是:ILoveYou

可以寫(xiě)成如下形式:

#include<stdio.h>

main(intargc)

(

inti;

char*s="J!Mpwf!Zpv\1";

for(i=O;putchar(s[i]-1);i++)

)

或者用指針形式:

main()

(

inti;

char*s="J!Mpwf!Zpv\1";

while(putchar(*s-1))

s++;

return0;

)

解釋:

一是變量名,c語(yǔ)言默認(rèn)類(lèi)型為int

main(intargc)

(

for(-argc;putchar(argc++["J!Mpwf!Zpv\)

J

)

main(intargc)

(

for(-argc;putchar(argc["J!Mpwf!Zpv\1"]-1);argc++)

J

)

程序執(zhí)行時(shí),不帶參數(shù),argc==1,所以

main()

{

inti;

for(i=O;putchar(i["J!Mpwf!Zpv\1"]-1);i++)

J

)

main()

(

inti;

char*s="J!Mpwf!Zpv\1";

for(i=0;putchar(i[s]-1);i++)

)

一個(gè)用數(shù)組和下標(biāo)實(shí)現(xiàn)的表達(dá)式可以等價(jià)地用指針和偏移量實(shí)現(xiàn)。

即,如果pa是一個(gè)指針,則pa[i]和*(pa+i)的含義一樣。

i[s]==*(i+s)==*(s+i)==s[i]

main()

(

inti;

char*s="J!Mpwf!Zpv\1";

for(i=0;putchar(s[i]-1);i++)

J

)

下面的這一段程序是我見(jiàn)過(guò)的最有趣的程序之一,如果和你編譯運(yùn)行的話(huà),他能過(guò)計(jì)

算pi的前800位數(shù)值。到現(xiàn)在還沒(méi)有見(jiàn)過(guò)多懂這個(gè)這段程序的人

#intclude"stdio.h"

Inta=10000,b,c=2800,de,ef[28001],g;

Main()

(

F(;b-c;)

F[b++]=a/5;

For(;d=0,g=c*2;c-=14,printf(“%.4d”,e+d/a),e=d%a)

For(b=c;d+=f[b]*a,f[b]=d%-g,d/=g-,-b;d*=b);

)

而結(jié)果是這樣的:

31415926535897932384626433832795028841971693993751

05820974944592307816406286208998628034825342117067

98214808651328230664709384460955058223172535940812

84811174502841027019385211055596446229489549303819

64428810975665933446128475648233786783165271201909

14564856692346034861045432664821339360726024914127

37245870066063155881748815209209628292540917153643

67892590360011330530548820466521384146951941511609

43305727036575959195309218611738193261179310511854

80744623799627495673518857527248912279381830119491

29833673362440656643086021394946395224737190702179

86094370277053921717629317675238467481846766940513

20005681271452635608277857713427577896091736371787

21468440901224953430146549585371050792279689258923

54201995611212902196086403441815981362977477130996

05187072113499999983729780499510597317328160963185

#include<stdio.h>

main(intk){

floati,j,r,x,y=-16;

while(puts('H,),y++<15)

for(x=0;x++<84;putchar(".:-;!/>)I&IH%*#,f[k&15]))

for(i=k=r=O;j=r*r-i*i-2+x/25,i=2*r*i+y/10,j*j+i*i<11&&k++<111;r=j);

return0;

)

#include<iostream.h>

intmain()

{intj,k,i;

do

{cout?z,Inputthewide:〃;

cin>>i;

if(i>20)

cout<<,,Toolong!ReInput!\nz,;

}while(i>20);

for(j=l;j<=i;j++)

{if(j==l||j==i)

for(k=l;k<=i;k++)

cout<<〃*〃;

else

for(k=l;k<=i;k++)

{if(k==l||k==i)

cout<<〃*〃;

else

cout<</,〃;

cout<<endl;

)

cin.get();cin.get();

return0;

)

#include<stdio.h>

main(intk){

inti,n=20;

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

printf

return0;

)

最小程序

main()

{)

機(jī)器碼程序

C語(yǔ)言有趣的編程

2008-03-1713:15

原程序如下:

elOO33f6bf020b510f3a58cc85025068131cbeIfbeal1

bf01

ellb657b8111bb21138974b4b4879f9ad86eO8bc8bdff

ffe820

el3403d0174la7f3aaebf32dff050e8f05af7d88bd826

8a1aa

el4f4a75f9ebdecb57bb21138bcl40f727f7f58bfbba111

4f4f4a

el683957ff9528bc5f725f7372bc895f7652f737952be8

feefe

el8110796c66fe10746dO14dldldle579ec5ab8111ff7

4b4b48

el9b3bdO75f75fc383f783a65d5982cdb284246957a9c5

caaalb

elb44f52b4923fab6e9ea8Idc63fce6ae7aebb5f7b10b8

b4f78

elcde2bf364e399d79293faf9365216fb5e8e5a6c2e9bO

43d3a3

ele6cfd3fdfdcbdl4c5eeO635886bb3e9cl20becc91a347

8170b3

elffd6la9ec2c912e74eadf45fe330e9939d7e8f9f4d244

e8d722

e218bee2ce8825cf304aa829ae3f47c62d85e9735413be6

eO3465

e231e2508a89185fce709935f42bfeb7aedOca5228d22

a5b7fO

e24a9081be7abede5dbcO6a2e55738be60cbacbaa53b9d

fl7738

e263a684dl3caf49d86a45a276602112cOc244f25ebbe5

37a92b

e27bec4a8c4cf2f7a958712bba6dd66ae56046eOdae5b9

90e5a3

e293f77f316058fOc488104e3ca3ee4e11558fa92ebdbad

7a9cf

e2acdb5a2896da87ae91912de35eeadf69571677140cedl

2e316d

e2c5cl9cd86a769b4ae83644d676d305ffd4lbacIf3265

31bf55

e2de26ba455el5d5e16ed97486c77fb8186ef918bdd4f4

8bdeId

e2f7bad47753894b3ede2786lcdO178948dla68dd42b54

4e8fbO

e3102el6bla7578ea219113cOcf78aOabf335c6b4c8908d

d745e7

e329c5ba4ba521064f54a50b7ec462215238430815cdf61

5a8f67

e342c463576df72692a3Ife53a5054418487c26903382

9c91bO

e35bab785ddf99eOb9fc536acd94991ab20a2634889ce5c

6064fO

e37463d9a8383bd3e64c8c23344e2051935e6db47a229b

4cf2d3

e38cc4f836f4740f4f8459b83f383631dO0178283de67

f96277

e3a5903bd9ecf35596b8d9db7955fle58c5ef2e52ebOb6e

e28125

e3be938eb5dd5b46f9afed612cfc9IdfOf73b162dc65873

8de95f

e3d7fd5ab6al944dla8ffebb7680c78683b6b9fdlceOc

c32eaO

e3f02fb3e36b29el27851cea6ddfb3a3ed654a9a593b54

e4bae

e4099e27fO4d3bc4c46b7e557lbIfIfbb8086f5b7ef7352

bf2cc7

e422edab7812f3903eeecc6cebf3816c68bld4578b2f

f683bO

e43cc433dfbldl9198le81a5e2599ff48cb6728a78cf6e

a3b2If

e455d9d323fO7c5e5f68618b45daId91ec8d4eeala3885

94aaac

e46df24f6c4e5928e9a4e83el73e8cf2a5c2b7efl3028a

e628la

e4863bcebe96aa7feb87cd8b962d9597aaOla43629a9e4f

ff8ed9

e49fced6a47079cd65fa2e921429f76c744b496080bbff

41bb2d

e4b760333f98779a1eea6a3dabebae9f372f47cc3592a6

44a4c8

e4d0c85493cebd69bbb943212cc4ea4a5c3f7560f2b491

ca982e3

e4e9ae9a620b97650ed47e9fe6d4134132f282f4ef4dae

3c786c

e502bl79874598a4d4c3b329c24a8beda654e2lb316260

ff2cId

e51a21015b24e5cc2d83faa2f38a512724ac7447c91d4

bebaf2

e5357052fbb4a2df89deffc49673c9cedd3c98e5cde8edl

3bde8c

e54e53a28bf9e991ddd6df6e74dldd34608f9e327f3bec

79a383

e5664578b42f1c507b7a97bO9d2dcdd8a26cd7d8c4c5a8a

4cf9a4

e57f11f92c6c92e9b5cb56898cbef664fa2543fa6fe2c8

3a18a8

e597fOe9f4c286e62b44674ab9349ed5f334262d48ale5b

3167cd

e5b03d716d83fd362069ea1c3e6e6de99aa7115b598aIf

438352

e5c9ea5d8c6a69c73eb4e3b88a55fbl6e275f35c28c9b

6cc3f8

e5e2e5b9d611d68bfa5c8c71eb45dbf36c9f16466151ed

dffbb

e5fbcOc4le646898479309472dfd4cdIf7f72c6822e7947

4e8c4b

e614a2c7e236df76fda4b64edb96403b8bb5d48564c602c

ad9d27

e62d1499824bbe9fa94b5db7c98ebb13a7bO79Id7ec545

aa2049

e646beff9d6405dcec65adf2386bed7ad6b2c72e6aa612

4bff55

e660203ba77fb909d574aadcea4d3ff14ffb535488f1

ed4b56

e67a15c8de28bff272d410If9942699e78e247829331dO

2dbe9f

e69293939alb80cO10c5378aO262a964f744b16c79c8dad

acfb16

e6ab15c6fdc9a41448624720c941ed61f89bf8ffba3950

6587ee

e6c3bdce95cOfba57ed8cd27fd2c743cllb89b951d5e3da

ef9e6

e6dcfOaaa9a7fb874c5dcdff65368c736f9c6789ab677db

df8168

e6f53bb8ae5delafd4e6668cd6a4839f373c1dea2a657c2

20lb90

e70e75dfcda562a53679fb358a9bbOaOa5c3376f8072be

52308d

e7269f7a64d374145d86897f2aa1cal6c7c9d327dad15bl

53e333

e73f8aede949d4cfde96223736119d7ffO4deO6231blc7

69c479

e757ac201e83c6a8c32cb52633668f4102b9c214fdf5d60

923991

e770e2f9c97dca4833f21dd6cf232e613a9fbac3f94e7

eaedef

e789714a723aed233d77b5edd5Idf6a499faef98dd29880

b67ca3

e7a262967b8ebf7b819f9ace3f12402e25db8416dd2e86f

f4b27e

e7bb5eb4146af329bla457d5a8176f87a4745b9b1779fl

ec33c8

e7d3fOIdb27ea84d957f5f9d5la5a45f441c6d3feb662a

cOe85b

e7ec3cbd50adfl539d2e459ad87d2c17a86e1548133953

ed3d78

e804adf3a65a33e2efaca7944aIfb4d87e478a8edee77e

34cl69

e81d7f6aaa6658183124721322348a563687dfc2d8e3f71

a25f25

e8368b8d478fdc94515579cl9f1384lbc85db95dO7c64

962051

e84fc4eO5eee478a11acfb9eObb40db86841293b9c9f29c

6347c9

e868ebad13efa6d3f;,645b585627fca5deO30be3e105d

ec1728

e881855518e95a394:,aa8fl96f2f295c97de47db9d6c63

e8e7fO

e89ae4a70f8fl4754,32d327cefbb9ab4lb02bd6dde730

ba275

e8b3c7f5dO31d7d28abOaclc6d603af7c2dble6d7f68f35

88e57f

e8cc3c268134aO32a325186e73b2aOflcb8661e7658b76

98196f

e8e4cO629ba3cc185e4012972bdO1579de19eadf7a592f

b5d739

e8fc52e26fl3aOa5'lb88934d30c82df5db55ea856fa

3fdebd

e91557156aa3a33e8ead2ddaaOca757c578bc5cbbId2c8e

c6962e

e92e6d59837d6472ca802e6a4fff6f2d5le74ba346e986

25aa4e

e948eO7ff532473e7c43d828c4lc11Idbd333b5ca134334

2blaO

e96157ed9d3c23d445b26e816eaf3e6790be59a5453453

4685dl

e97925ee7dcba4db12c3aa17619afb664076fe3a6996cO

9114a7

e9915dcc9ff67359eeb855972026ff99ec7241b527216e

ae8adO

e9a9e4d3da6fc453c5f8b3a7al5d6693d8bl89402392cO

90fbcb

e9cle76b4e5105d577cd1e288bf449fefc433cefa4646

al86b

e9da7a846666b92ec0c6ald4cl1833bldl218ad2f53e4

b93359

e9f3be3caf804c8ad576c3ba7e2979415754d17d597cff9

4adO6e

eaOcbb2720fcflf59.,8df4db65dfOId693b763582a4f356

64395b

ea256bb37e758e82122a8ladbc83e674a37e7251d63d

lalcf6

ea3eb8da4b188a159ddOa484963ecd3f93a30f3fb8f6e2

73eb52

ea579395cfde6f48fbabd2a970b4e2238d7286a8fa7898

Idc5fe

ea6f8a51882bb758bOcaae408a33327516cOd4b7da2aa7

bbadf7

ea8848985abed3dle61697c380ab73ae321141Ifd5daa0

ded96e

eaalfc306ef116027a25feb5fb9358234be10cO853e55

b382fd

eabaf7c3249f2d83943236deff7c877f4a807223cfa452

eb3e19

ead3aOb4a94la4058d9166dcO64c469ed604665cbdf5838

051c3

eaecadaO37e4cfabf76c247d948654a9f91ad1c79a4al78

55ce8

eb05445bdef51bdea2da74257ab3a4f2b3196a4d72765c

9706c

eblfc55dbedde781cf8d3438503c9858cc41aa9990affe

4e9677

eb37ed5418ce2cdl5d34cb7950ff289644eO51646a8b76e

8c62c4

eb506695814f8cf626baea5dd279ble4e929fcafdb3858c

e652dd

eb6933bd5dc739ef6ef9ea66a619c9fd554b4faald4109b

ff7e33

eb82115299c7266eal368aadee487a2c7fd5b7278a6b37c

713985

eb9b9cbaa8a17b9dO515695c23b5a731c58b5c956e4c89

6f17ef

ebb4d45aa7765el49b2e872ac3cfO6b71fa3c7cafcadf9

5522ec

ebed582f1cfa29cf73b4ad515cf86670595d703edl3fc4

ebecfl

ebe57786a93679f44fccb5b95ff74cOb7427726c9aa8ced

39a2db

ebfe9cb3eb3d4ale9b89e4d8a82774efa3eda5245dbbab

dOfeal

ecl629abdf75aa6230ccfl14729bla557ee5dlda98dec4

cfab34

ec2fba8dde4a59613ddd8443cebb5695ae97e23b49e59a

6ba253

ec48cl333524lb3317c38a8c123d3d4e5b752230674faO

5d3a78

ec6088a11357bl774232a8c3bb20fb985d6ace73a6335

90939e

ec7944242elbd78caa29534dd9abebe6156c4fd54a3bd14

5bbO8f

ec92cebe232493c44818a3e7454b78cc79dd356a4eddd

5f9841

ecablb684cclbb41c2le3e948eef28leb76e4f36blc6e

e21817

ecc420fc3540Ife46da418bbbed59eea8586afaf63d413

6692c4

ecdc2b6984ca232bd366816b81732648536214c49447564

39163c

ecf5edeO6d447545304368cO78fcdO17beb813ec3balbf

4daec5

edOe55Ifc39125d865fl3459dedd985617433866499aeb

dbcl87

ed275138ccb75f98fd43be2dbb74f3f8f2363da434a57e

d226cc

ed3f84Ifea56fO8018694d8841fc56fd413blee9274ff6

3b624e

ed585alb2a4e858cb24f79ef594ee733dbdc4ca60e74a47

90b58

ed712afO4edeba66ae482b3173a211c32ff5414776bd658

4bbfee

ed8af66abedd188ddaa9f8124c5f8729adbd5c82a80a9

16d7c6

eda3bl91cOa99540b5b3a82a28c69216ab547df8935f3a

17c845

edbba9fOeO7123765338a5alccd4flf23c2b4643ald5bae

d7197a

edd4c2el8f67Idd989dal799dlb207f4de7bff9fffeaa28

ab8fc

eded4d5033e326fc3c33a2b2612f718fee974ce662bd9

Ifal4a

ee067744d48bb73e5e2d18c3546899a88d92969e9dab33

38ffb8

eeleee78c67bb58495d3627ae5d2738a388efO1a5964b

d79b42

ee37e56f57754ce9782d5becb6d229e2a892959c652a3e

bf8deO

ee4fbfb3acc8e7e13af88267d485ac7392936d290e83b3

dO61la

ee68d2e8a8fba8eal9fdf12ab5472398de62af4c7ed4fb

6b26e

ee81404037b773f2d881be29d299cO7325la3c92756ebd

d77979

ee99414cO4e9957669374ecbO297cdf61bO33adlc3faa4

f7f9f

eeb2d3f0b92a5a3ac58825b8b9cc823573ael7b517570

a674la

eecbcacb31868ca77felbadcd687f3685fcb74faO11da69

fa7987

eee4d6b921dd3e70dbde84d46edl204aff632a28ed5425

fe754

eefde7a744baO4bf7f4e87422e99870fb252ef464577528

854553

ef163a2ee23c5436e9296675943107ecl49cd5ef997a58

5f8a11

ef2f4f3d9ae22b2258fabefc69917a8c3f779fc93b5426

2393b3

ef4785deaef5bdc5474cc4cd5eadbe8fba31f6e470fb6e

a796d5

ef5fad10803943974f10cclb8f8dcd4c634d8le8570416c

a8ebdf

ef787f36c560a71291673fe753a2d40297daaa5c229230

a6e56b

ef92246d9b20e57cb40bO38599ca7696a70d338efe2b211

3eea2a

efabf92b2e43Id65cfd6lbef835a5fe6c56216ca5e4ca6

39e453

efc32d23d25e7e15548a8b73dbb8859b99ea27c42Ifa277

3c5b9

efde6dfa8f2146la3eedce4956Id292d703a76f75ac187

ff2786

eff5734928852d977a84e373d8610214ce274626b51708f

1572f3

elOOe81b2a99d8a63adlbd5aa8ade963ce7471651fc8750

9b760

el026293352fbbOdf70c5654a603bcd7a8294751f78a77

f3993f

e103e381660de6827b224762a2fd4086b275c33c2f3dfa9

d9a99a

el057713cce46940f9be467fb82e857f7dd38deab46381

5910bb

el06f57dOb6abel8374le25d5737818bl6062cf4768d17

d5ed23

el08723e4f632645a61963f69257d52940d63bba6372180

25lb7

elOaOee7f254afa6741946e3e8897ac65654a743134ebf

97a56f

el0b8992fac334dfa583a5aaa4la7462c84f3b789d7ee7e

ee2d69

elOdl3040ea47823b858e3238f744e835ab744157d585

bl6ble

elOeaf47dled2leb3fef31210323951482d6fe5d3a38c88

g

rex

fff

w

q

把著段代碼復(fù)制下來(lái)存為文本文檔,命名為1

在DOS下用debug<l.txt

生成一個(gè)可執(zhí)行程序。

進(jìn)去是個(gè)3D游戲的旋轉(zhuǎn)界面,還有段美妙的音樂(lè),真是牛?。?!

快去看看吧

在網(wǎng)上搜到一個(gè)號(hào)稱(chēng)是世界第一高手的程序,前些天又在本論壇搜到,

很多網(wǎng)友都說(shuō)看不懂,覺(jué)的挺難的,其實(shí)這個(gè)程序并不是深不可測(cè),

我可以給大家簡(jiǎn)單解讀一下程序的意思.

其實(shí)他是用機(jī)器語(yǔ)言寫(xiě)的,除了結(jié)尾,主程序中都是0-f組成,也就是16進(jìn)制

數(shù),

大家可以看到程序左邊豎著一列都是以e開(kāi)頭的,如elOO,這表示地址,

應(yīng)該是基地址(CS)和偏移地址(IP)的和.

以第一行為例:elOO后面的33f6bf020b510f3a58cc85025068

131cbeIfbeal1bf01

就是這個(gè)〃段”中的指令,至于什么是"段〃,在這不再詳述,

每一組16進(jìn)制數(shù)代表著特定的意義,如movbx2200H的機(jī)器指令是BB0022

每一組占一個(gè)字節(jié),大家數(shù)一數(shù),第一行有多少字節(jié),對(duì)是27個(gè)字節(jié),

所以第二行的起始地址是ellb,以此類(lèi)推.

至于具體的每一句的意思,大家有了一定的匯編語(yǔ)言經(jīng)驗(yàn),就會(huì)知道了,

因?yàn)樵贒OS中用debug命令可以看到匯編指令對(duì)應(yīng)的機(jī)器指令,

如剛才說(shuō)的movbx2200H的機(jī)器指令是BB0022

程序最后

g

rex

fff

w

q

應(yīng)該是debug的命令,現(xiàn)在可以肯定的是最后的q是degug的命令,退出的意思,

現(xiàn)在大家是不是基本知道這個(gè)程序的意思或結(jié)構(gòu)了?

這個(gè)世界第一高手無(wú)非就是把機(jī)器碼背了個(gè)滾瓜濫熟.

聲音程序

#include<windows.h>

#include"dos.h"

#include"stdio.h"

#definetime1000/2

#definetimeO500/2

#definetimel1500/2

#definetime22000/2

#definetime33000/2

#definetime4250/2

#define_a262

#define_b294

#define_c330

#define_d349

#definee392

#definef440

#define_g494

#definea523

#defineb587

#definec659

#defined698

#definee784

#definef880

#defineg988

#definea_1047

#defineb_1175

#definec_1319

#defined_1397

#definee_2568

#definef_1760

#defineg_1976

intmain()

(

//titanic

Beep(a,timeO);

Beep(b,timeO);

Beep(c,time1);

Beep(b,timeO);

Beep(a,timeO);

Beep(b,timeO);

Beep(e,time1);

Beep(d,timeO);

Beep(c.timeO);

Beep(a.timeO);

Beep(f,time);

Beep(d.timeO);

Beep(e,time1);

Beep(a,timeO);

Beep(b,timeO);

Beep(c,time1);

Beep(d,time4);

Beep(c,time4);

Beep(b,time4);

Beep(a,time4);

Beep(b,timeO);

Beep(e,time1);

Beep(f,time);

Beep(e,time);

Beep(b,time3);

return0;

)

[討論]一個(gè)很有趣的程序

一個(gè)很簡(jiǎn)單的程序是:

#include<stdio.h>

#incude<conio.h>

voidmain()

(

floatone,two=-1;

fbr(one=0;one!=two;one++)two=one;

clrscr();

printf("stopat:%f*,one);

)

上面的程序就是檢測(cè)浮點(diǎn)數(shù)誤差,某一個(gè)足夠大的浮點(diǎn)數(shù)加一后本身并沒(méi)有改變,即大數(shù)吃小數(shù)

但有趣的是,程序還可以這樣寫(xiě):

#include<whole.h>

voidmain()

floatone;

one=0;

for(;onc==++one;);

clrscr();

printf("stopat:%f',one);

}

兩個(gè)程序的結(jié)果都是:one=16777216.000000

第?個(gè)程序很容易理解,但第二個(gè)就很難理解,表達(dá)式似乎記過(guò)成立喲

首先看下面這段代碼,它在屏幕上的輸出你能讀出來(lái)么?

#include<string.h>

voidfun(charintm)

(

chars,*pl,*p2;

pl=w;

p2=w+m-l;

while(pl<p2)

(

s=*pl++;

*pl=*p2一;

*p2=s;

)

)

main()

{

chara[]="ABCDEFG”;

fun(a,strlen(a));

puts(a);

)

答案:AGAAGAG

現(xiàn)象:

1.在while第一次被執(zhí)行的時(shí)候,pl的內(nèi)容是“ABCDEFG”,p2的內(nèi)容是“G”

此時(shí)pl<p2因而進(jìn)入該循環(huán)?

2.在while第二次被執(zhí)行時(shí),pl的內(nèi)容是“GCDEAG”,p2的內(nèi)容是“AG”,此

時(shí)pl>p2,因而應(yīng)該結(jié)束循環(huán)?

3.好了,問(wèn)題出來(lái)了,在這里程序沒(méi)有結(jié)束循環(huán),而是進(jìn)入了循環(huán),你知道這

是什么原因么?

PoSo在先前的話(huà)題里面狂踩腳印的同學(xué)們,還有沒(méi)有話(huà)要說(shuō)呢?**

#include<stdio.h>

#incl

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論