之前有些錯誤,所有程式碼均已校正
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”
);
}
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”
);
}
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”
);
}
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”
);
}
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”
);
}
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”
);
}
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”
);
}
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”
);
}
指標法:
#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”
);
}
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”
);
}
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
);
}
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”
);
}
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”
);
}
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
;
}
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”
);
}
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”
);
}
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”
);
}
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”
);
}
#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”
);
}