之前有些錯誤,所有程式碼均已校正

1、/*輸出9*9口訣。共9行9列,i控制行,j控制列。*/

#include

“stdio。h”

main

()

{

int

i

j

result

for

i

=

1

i

<

10

i

++

{

for

j

=

1

j

<

10

j

++

{

result

=

i

*

j

printf

“%d*%d=%-3d”

i

j

result

);

/*-3d表示左對齊,佔3位*/

}

printf

\n

);

/*每一行後換行*/

}

system

“pause”

);

}

C語言必背18個經典程式

2、/*古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?

兔子的規律為數列1,1,2,3,5,8,13,21。。。。*/

#include

“stdio。h”

main

()

{

long

f1

f2

int

i

f1

=

f2

=

1

for

i

=

1

i

<=

20

i

++

{

printf

“%12ld %12ld”

f1

f2

);

if

i

%

2

==

0

printf

\n

);

/*控制輸出,每行四個*/

f1

=

f1

+

f2

/*前兩個月加起來賦值給第三個月*/

f2

=

f1

+

f2

/*前兩個月加起來賦值給第三個月*/

}

system

“pause”

);

}

C語言必背18個經典程式

3、/*判斷101-200之間有多少個素數,並輸出所有素數及素數的個數。

程式分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,

則表明此數不是素數,反之是素數。*/

#include

“math。h”

main

()

{

int

m

i

k

h

=

0

leap

=

1

printf

\n

);

for

m

=

101

m

<=

200

m

++

{

k

=

sqrt

m

);

for

i

=

2

i

<=

k

i

++

if

m

%

i

==

0

{

leap

=

0

break

;}

if

leap

/*內迴圈結束後,leap依然為1,則m是素數*/

{

printf

“%-4d”

m

);

h

++

if

h

%

10

==

0

printf

\n

);

}

leap

=

1

}

printf

\n

The total is %d”

h

);

system

“pause”

);

}

C語言必背18個經典程式

4、 /*一個數如果恰好等於它的因子之和,這個數就稱為“完數”。例如 6=1+2+3。程式設計

找出 1000 以內的所有完數。 */

int

main

()

{

static

int

k

10

];

int

i

j

n

s

for

j

=

2

j

<

1000

j

++

{

n

=-

1

s

=

j

for

i

=

1

i

<

j

i

++

{

if

((

j

%

i

==

0

{

n

++

s

=

s

-

i

k

n

=

i

}

}

if

s

==

0

{

printf

“%d is a wanshu: ”

j

);

for

i

=

0

i

<

n

i

++

printf

“%d,”

k

i

]);

printf

“%d

\n

k

n

]);

}

}

system

“pause”

);

}

C語言必背18個經典程式

5、 /*下面程式的功能是將一個 4×4 的陣列進行逆時針旋轉 90 度後輸出,要求原始陣列的

資料隨機輸入,新陣列以 4 行 4 列的方式輸出,

請在空白處完善程式。 */

int

main

()

{

int

a

4

][

4

],

b

4

][

4

],

i

j

/*a 存放原始陣列資料, b 存放旋轉後陣列資料*/

printf

“input 16 numbers: ”

);

/*輸入一組資料存放到陣列 a 中,然後旋轉存放到 b 陣列中*/

for

i

=

0

i

<

4

i

++

for

j

=

0

j

<

4

j

++

{

scanf

“%d”

&

a

i

][

j

]);

b

3

-

j

][

i

=

a

i

][

j

];

}

printf

“array b:

\n

);

for

i

=

0

i

<

4

i

++

{

for

j

=

0

j

<

4

j

++

printf

“%6d”

b

i

][

j

]);

printf

\n

);

}

system

“pause”

);

}

C語言必背18個經典程式

6、 /*程式設計列印直角楊輝三角形*/

int

main

()

{

int

i

j

a

6

][

6

];

for

i

=

0

i

<=

5

i

++

{

a

i

][

i

=

1

a

i

][

0

=

1

}

for

i

=

2

i

<=

5

i

++

for

j

=

1

j

<=

i

-

1

j

++

a

i

][

j

=

a

i

-

1

][

j

+

a

i

-

1

][

j

-

1

];

for

i

=

0

i

<=

5

i

++

{

for

j

=

0

j

<=

i

j

++

printf

“%4d”

a

i

][

j

]);

printf

\n

);

}

system

“pause”

);

}

C語言必背18個經典程式

7、 /*透過鍵盤輸入 3 名學生 4 門課程的成績,

分別求每個學生的平均成績和每門課程的平均成績。

要求所有成績均放入一個 4 行 5 列的陣列中,輸入時同一人資料間用空格,不同人用回車

其中最後一列和最後一行分別放每個學生的平均成績、每門課程的平均成績及班級總平均

分。 */

#include

#include

int

main

()

{

float

a

4

][

5

],

sum1

sum2

int

i

j

for

i

=

0

i

<

3

i

++

for

j

=

0

j

<

4

j

++

scanf

“%f”

&

a

i

][

j

]);

for

i

=

0

i

<

3

i

++

{

sum1

=

0

for

j

=

0

j

<

4

j

++

sum1

+=

a

i

][

j

];

a

i

][

4

=

sum1

/

4

}

for

j

=

0

j

<

5

j

++

{

sum2

=

0

for

i

=

0

i

<

3

i

++

sum2

+=

a

i

][

j

];

a

3

][

j

=

sum2

/

3

}

for

i

=

0

i

<

4

i

++

{

for

j

=

0

j

<

5

j

++

printf

“%6。2f”

a

i

][

j

]);

printf

\n

);

}

system

“pause”

);

}

C語言必背18個經典程式

8、 /*完善程式,實現將輸入的字串反序輸出,

如輸入 windows 輸出 swodniw。 */

#include

int

main

()

{

char

c

200

],

c1

int

i

j

k

printf

“Enter a string: ”

);

scanf

“%s”

c

);

k

=

strlen

c

);

for

i

=

0

j

=

k

-

1

i

<

k

/

2

i

++

j

——

{

c1

=

c

i

];

c

i

=

c

j

];

c

j

=

c1

}

printf

“%s

\n

c

);

system

“pause”

);

}

C語言必背18個經典程式

指標法:

#include

void

invert

char

*

s

{

int

i

j

k

char

t

k

=

strlen

s

);

for

i

=

0

j

=

k

-

1

i

<

k

/

2

i

++

j

——

{

t

=*

s

+

i

);

*

s

+

i

=*

s

+

j

);

*

s

+

j

=

t

}

}

main

()

{

FILE

*

fp

char

str

200

],

*

p

i

j

if

((

fp

=

fopen

“p9_2。out”

“w”

))

==

NULL

{

printf

“cannot open the file

\n

);

exit

0

);

}

printf

“input str:

\n

);

gets

str

);

printf

\n

%s”

str

);

fprintf

fp

“%s”

str

);

invert

str

);

printf

\n

%s”

str

);

fprintf

fp

\n

%s”

str

);

fclose

fp

);

system

“pause”

);

}

C語言必背18個經典程式

9、 /*下面程式的功能是從字元陣列 s 中刪除存放在 c 中的字元。 */

#include

int

main

()

{

char

s

80

],

c

int

j

k

printf

\n

Enter a string: ”

);

gets

s

);

printf

\n

Enter a character: ”

);

c

=

getchar

);

for

j

=

k

=

0

s

j

!=

‘\0’

j

++

if

s

j

!=

c

s

k

++

=

s

j

];

s

k

=

‘\0’

printf

\n

%s”

s

);

system

“pause”

);

}

C語言必背18個經典程式

10、 /*編寫一個 void sort(int *x,int n)實現將 x 陣列中的 n 個數據從大到小

排序。 n 及陣列元素在主函式中輸入。將結果顯示在螢幕上並輸出到檔案 p9_1。out 中*/

#include

void

sort

int

*

x

int

n

{

int

i

j

k

t

for

i

=

0

i

<

n

-

1

i

++

{

k

=

i

for

j

=

i

+

1

j

<

n

j

++

if

x

j

>

x

k

])

k

=

j

if

k

!=

i

{

t

=

x

i

];

x

i

=

x

k

];

x

k

=

t

}

}

}

void

main

()

{

FILE

*

fp

int

*

p

i

a

10

];

fp

=

fopen

“p9_1。out”

“w”

);

p

=

a

printf

“Input 10 numbers:”

);

for

i

=

0

i

<

10

i

++

scanf

“%d”

p

++

);

p

=

a

sort

p

10

);

for

(;

p

<

a

+

10

p

++

{

printf

“%d ”

*

p

);

fprintf

fp

“%d ”

*

p

);

}

system

“pause”

);

fclose

fp

);

}

C語言必背18個經典程式

11、已知陣列 a 中的元素已按由小到大順序排列,以下程式的功能是將輸入的一個數插入數

組 a 中,插入後,陣列 a 中的元素仍然由小到大順序排列*/

#include

int

main

()

{

int

a

10

=

{

0

12

17

20

25

28

30

};

/*a[0]為工作單元,從 a[1]開始存放資料*/

int

x

i

j

=

6

/*j 為元素個數*/

printf

“Enter a number: ”

);

scanf

“%d”

&

x

);

a

0

=

x

i

=

j

/*從最後一個單元開始*/

while

a

i

>

x

{

a

i

+

1

=

a

i

];

i

——

}

/*將比 x 大的數往後移動一個位置*/

a

++

i

=

x

j

++

/*插入 x 後元素總個數增加*/

for

i

=

1

i

<=

j

i

++

printf

“%8d”

a

i

]);

printf

\n

);

system

“pause”

);

}

C語言必背18個經典程式

12、 /*編寫函式 replace(char *s,char c1,char c2)實現將 s 所指向的字串中所有字元 c1

用 c2 替換,字串、字元 c1 和 c2 均在主函式中輸入,將原始字串和替換後的字串顯

示在螢幕上, 並輸出到檔案 p10_2。out 中*/

#include

replace

char

*

s

char

c1

char

c2

{

while

*

s

!=

‘\0’

{

if

*

s

==

c1

*

s

=

c2

s

++

}

}

main

()

{

FILE

*

fp

char

str

100

],

a

b

if

((

fp

=

fopen

“p10_2。out”

“w”

))

==

NULL

{

printf

“cannot open the file

\n

);

exit

0

);

}

printf

“Enter a string:

\n

);

gets

str

);

printf

“Enter a&&b:

\n

);

scanf

“%c,%c”

&

a

&

b

);

printf

“%s

\n

str

);

fprintf

fp

“%s

\n

str

);

replace

str

a

b

);

printf

“The new string is——%s

\n

str

);

fprintf

fp

“The new string is——%s

\n

str

);

fclose

fp

);

system

“pause”

);

}

C語言必背18個經典程式

13、 /*在一個字串 s1 中查詢一子串 s2,若存在則返回子串在主串中的起始位置

,不存在則返回-1。 */

main

()

{

char

s1

6

=

“thisis”

char

s2

5

=

“is”

printf

“%d

\n

search

s1

s2

));

system

“pause”

);

}

int

search

char

s1

[],

char

s2

[])

{

int

i

=

0

j

len

=

strlen

s2

);

while

s1

i

])

{

for

j

=

0

j

<

len

j

++

if

s1

i

+

j

!=

s2

j

])

break

if

j

>=

len

return

i

else

i

++

}

return

-

1

}

C語言必背18個經典程式

14、 /*用指標變數輸出結構體陣列元素。 */

struct

student

{

int

num

char

*

name

char

sex

int

age

}

stu

5

=

{{

1001

“lihua”

‘F’

18

},{

1002

“liuxing”

‘M’

19

},{

1003

“huangke”

‘F’

19

},{

1004

“feng

shou

”,‘F’,19},{1005,“

Wangming

”,‘M’,18}};

main

()

{

int

i

struct

student

*

ps

printf

“Num

\t

Name

\t\t\t

Sex

\t

Age

\t\n

);

/*用指標變數輸出結構體陣列元素。 */

for

ps

=

stu

ps

<

stu

+

5

ps

++

printf

“%d

\t

%-10s

\t\t

%c

\t

%d

\t\n

ps

->

num

ps

->

name

ps

->

sex

ps

->

age

);

/*用陣列下標法輸出結構體陣列元素學號和年齡。 */

for

i

=

0

i

<

5

i

++

printf

“%d

\t

%d

\t\n

stu

i

]。

num

stu

i

]。

age

);

system

“pause”

);

}

C語言必背18個經典程式

15、 /*建立一個有三個結點的簡單鏈表: */

#define NULL 0

struct

student

{

int

num

char

*

name

int

age

struct

student

*

next

};

void

main

()

{

struct

student

a

b

c

*

head

*

p

a

num

=

1001

a

name

=

“lihua”

a

age

=

18

/* 對結點成員進行賦值 */

b

num

=

1002

b

name

=

“liuxing”

b

age

=

19

c

num

=

1003

c

name

=

“huangke”

c

age

=

18

head

=&

a

/* 建立連結串列, a 為頭結點 */

a

next

=&

b

b

next

=&

c

c

next

=

NULL

p

=

head

/* 輸出連結串列 */

do

{

printf

“%5d,%s,%3d

\n

p

->

num

p

->

name

p

->

age

);

p

=

p

->

next

}

while

p

!=

NULL

);

system

“pause”

);

}

C語言必背18個經典程式

16、 /*輸入一個字串,判斷其是否為迴文。迴文字串是指從左到右讀和從右到左讀

完全相同的字串。 */

#include

#include

#include

main

()

{

char

s

100

];

int

i

j

n

printf

“輸入字串:

\n

);

gets

s

);

n

=

strlen

s

);

for

i

=

0

j

=

n

-

1

i

<

j

i

++

j

——

if

s

i

!=

s

j

])

break

if

i

>=

j

printf

“是迴文串

\n

);

else

printf

“不是迴文串

\n

);

system

“pause”

);

}

C語言必背18個經典程式

17、 /*氣泡排序,從小到大,排序後結果輸出到螢幕及檔案 myf2。o

#include

void

fun

int

a

[],

int

n

{

int

i

j

t

for

i

=

0

i

<=

n

-

1

i

++

for

j

=

0

j

<

i

j

++

if

a

j

>

a

j

+

1

])

{

t

=

a

j

];

a

j

=

a

j

+

1

];

a

j

+

1

=

t

}

}

main

()

{

int

a

10

=

{

12

45

7

8

96

4

10

48

2

46

},

n

=

10

i

FILE

*

f

if

((

f

=

fopen

“myf2。out”

“w”

))

==

NULL

printf

“open file myf2。out failed!

\n

);

fun

a

10

);

for

i

=

0

i

<

10

i

++

{

printf

“%4d”

a

i

]);

fprintf

f

“%4d”

a

i

]);

}

fclose

f

);

system

“pause”

);

}

C語言必背18個經典程式

C語言必背18個經典程式

#include

double

countpi

double

eps

/*eps 為允許誤差*/

{

int

m

=

1

double

temp

=

1。0

s

=

0

while

temp

>=

eps

{

s

+=

temp

temp

=

temp

*

m

/

2

*

m

+

1

);

m

++

}

return

2

*

s

);

}

main

()

{

FILE

*

fp

double

eps

=

1e-5

pi

if

((

fp

=

fopen

“p7_3。out”

“w”

))

==

NULL

{

printf

“cannot open the file

\n

);

exit

0

);

}

pi

=

countpi

eps

);

printf

“pi=%lf

\n

pi

);

fprintf

fp

“pi=%lf

\n

pi

);

fclose

fp

);

system

“pause”

);

}

C語言必背18個經典程式

C語言必背18個經典程式