- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
< align=center><FONT color=#0000ff size=3><B><FONT color=#cc0000>函数大全(m开头)</FONT></B></FONT></P>2 \6 n) S4 w6 [
< align=left><FONT color=#ff0000>main()主函数2 q, e3 [ k# H q7 c# l+ [
</FONT>每一C 程序都 <B><FONT color=#000000>必须</FONT></B> 有一<FONT color=#ff0000><B>main()</B></FONT>函数, 可以根据自己的爱好把它放在程序的某 $ _. r$ V; C- k" T7 J9 D
个地方。有些程序员把它放在最前面, 而另一些程序员把它放在最后面, 无论放 6 N8 F( U' u! v8 e
在哪个地方, 以下几点说明都是适合的。
8 }! H" G4 ]; J# V4 Y& b' C; B1 L0 `<FONT color=#000099>1. main() 参数 </FONT>' M2 o. f) K% h1 f8 {3 c* i
在Turbo C2.0启动过程中, 传递main()函数三个参数: argc, argv和env。
0 M; i, F3 F1 ^5 J) g$ A- S* argc: 整数, 为传给main()的命令行参数个数。 ' \2 I1 Y9 U" W- n/ }
* argv: 字符串数组。 u7 v4 V7 {+ n
在DOS 3.X 版本中, argv[0] 为程序运行的全路径名; 对DOS 3.0 # b, |) ]3 C& {7 E
以下的版本, argv[0]为空串("") 。 & ^0 {" E" Q2 F6 k
argv[1] 为在DOS命令行中执行程序名后的第一个字符串;
3 ?% w7 }5 H1 B% W, uargv[2] 为执行程序名后的第二个字符串; ) U' O& A! N' i3 |
... , B' Q7 q* P2 t5 R
argv[argc]为NULL。 1 i3 M, O) D" {+ [4 g, e6 B3 B
*env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符
5 m7 F$ P& h, A1 p0 o串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:\DOS, C: ( W0 }% _4 k1 U
\TURBOC(对于PATH) 或YES(对于87)。 9 X: ?/ l0 y* l: f
Turbo C2.0启动时总是把这三个参数传递给main()函数, 可以在用户程序中
" K4 W. A7 P( A7 e X说明(或不说明)它们, 如果说明了部分(或全部)参数, 它们就成为main()子程序 % ?* D# Z! P d+ P2 h
的局部变量。 * k& q; a' d1 h' M2 }
请注意: 一旦想说明这些参数, 则必须按argc, argv, env 的顺序, 如以下
7 X; T5 k) H' D5 V' ?的例子: 5 z% `" @! [2 t8 a: n
<FONT color=#0000ff>main() . _9 P$ h4 u& m9 B5 H* }7 d
main(int argc)
: l% D" @- S$ M& g/ xmain(int argc, char *argv[]) $ J( z0 [9 d( X- `( ?" T
main(int argc, char *argv[], char *env[]) </FONT>: a1 p" s( P3 S5 m- M
其中第二种情况是合法的, 但不常见, 因为在程序中很少有只用argc, 而不 & w2 L/ I1 ?+ m4 v8 {) `, K: H/ p0 U
用argv[]的情况。 1 n1 ^; Y1 J6 i: r: h% F4 U
以下提供一样例程序EXAMPLE.EXE, 演示如何在main()函数中使用三个参数:
B" s0 f( z% a: C6 R" D" x+ \<FONT color=#0000ff>/*program name EXAMPLE.EXE*/ 8 v1 K6 ]% X( s' C9 M9 S6 b, U& }
#include <STDIO.H>
" |( p: }! L& T) O: T#include <STDLIB.H>' s# \7 k6 I4 M9 W. W- j
main(int argc, char *argv[], char *env[])
4 Y7 B. C5 {2 Y# R; b- z{
# \+ V x& W/ rint i;
* \2 C* I4 n9 {$ uprintf("These are the %d command- line arguments passed to 9 X( _5 F6 R: |* ]
main:\n\n", argc);
: }( x8 ~" Q! V$ g# h9 M' dfor(i=0; i<=argc; i++)
0 X$ Q" O- X% N! F) Hprintf("argv[%d]:%s\n", i, argv); , h1 {2 P! M' n) e
printf("\nThe environment string(s)on this system are:\n\n");
/ @$ E+ H; R) p; Qfor(i=0; env!=NULL; i++) $ \2 H" x: T8 p* ] ?! d2 G
printf(" env[%d]:%s\n", i, env); " K7 _; o* A3 N8 i/ P/ F
} </FONT>7 o7 t( M6 k0 a( ]0 A- J5 A
如果在DOS 提示符下, 按以下方式运行EXAMPLE.EXE: # k5 _2 R+ ^7 A8 D* j
C:\example first_argument "argument with blanks" 3 4 "last but ! l0 y5 A0 W' r# C' ? W
one" stop! 5 |! Y0 O/ A% \& z/ w
注意: 可以用双引号括起内含空格的参数, 如本例中的: " argument 9 _4 L: Z, I6 V! j" n1 S1 z+ t
with blanks"和"Last but one")。
N1 o8 o8 h. {7 p1 W结果是这样的: - L# y1 N" U) d" y4 v- `
<FONT color=#0000ff>The value of argc is 7
. L; d6 W2 r4 ]9 ?" zThese are the 7 command-linearguments passed to main: , U# v+ ?$ g. V- g+ T( ]/ m
argv[0]:C:\TURBO\EXAMPLE.EXE ) T' Q: b# Q; S0 C7 Z1 K) i7 R! ]* J
argv[1]:first_argument
) U. S$ n9 g/ e, M. N3 g ^; Yargv[2]:argument with blanks ; n3 R% R3 j; s" t+ s
argv[3]:3
* v5 L" P% L& [6 Gargv[4]:4
0 \$ s2 l" b- {# Q0 K5 p' T4 ~argv[5]:last but one ) [ v! @% x u& u3 Y
argv[6]:stop! % L3 i! N/ @; \, r' }8 }
argv[7] NULL)
( Y2 A% q% S" K/ F. g! q! ~, V1 ~The environment string(s) on this system are: ) u, s/ T6 h3 e& F8 |$ Q# ^
env[0]: COMSPEC=C:\COMMAND.COM . c# \& B' \# {" E/ O
env[1]: PROMPT=$P$G /*视具体设置而定*/ , q6 z' A: x+ u2 N
env[2]: PATH=C:\DOS;C:\TC /*视具体设置而定*/ 8 N2 q$ m P1 C
</FONT>& }1 v) n$ N$ s! Z/ f
应该提醒的是: 传送main() 函数的命令行参数的最大长度为128 个字符 (包 0 b. B9 i2 h7 Z0 w! z
括参数间的空格), 这是由DOS 限制的。 1 @ v. F9 C1 {
</P>8 e% |/ ^7 h; n' t
< ><FONT color=#ff0000>函数名: matherr </FONT>
2 M% }5 q* ~- G7 }% b功 能: 用户可修改的数学错误处理程序
4 y' d9 v( o1 K用 法: int matherr(struct exception *e);
2 W3 Y! J! {; q" W6 C% ^程序例: </P>5 U5 g @; i' T8 l$ z$ d- V
< ><FONT color=#0000ff>/* This is a user-defined matherr function that prevents , x0 C) ^% a2 V5 @
any error messages from being printed. */ </FONT></P>4 ? y: T7 m4 W) H/ R7 f& K3 D
< ><FONT color=#0000ff>#include<MATH.H> </FONT></P>5 w& d1 S2 q7 Y2 L& Z+ `
< ><FONT color=#0000ff>int matherr(struct exception *a)
# Y8 c2 N7 w" L5 G% a! R+ y{ * b" ?" V$ x8 }# J2 {
return 1; ! A# B; e. U9 X7 \$ A
} 6 K% b; Z3 v4 N
</FONT>
, i$ _! }8 T8 b$ \1 K" B. e6 p/ q! p( P2 K H2 b
</P>0 G, ?8 A( t- V3 Z2 J$ Q
< ><FONT color=#ff0000>函数名: memccpy </FONT>
( e' l+ J6 N, M; p, k% O功 能: 从源source中拷贝n个字节到目标destin中
( z% v6 T( m& _9 o# I0 W, q用 法: void *memccpy(void *destin, void *source, unsigned char ch, $ @, L4 N! Y6 `
unsigned n); ! Q9 z2 ^3 _1 e' D" m1 l
程序例: </P>
; @+ c( X8 z% f: J4 o< ><FONT color=#0000ff>#include <STRING.H>
& B' q) N7 }2 S/ \ c9 g#include <STDIO.H></FONT></P>! B, [1 [, g: G1 W8 I' Z
< ><FONT color=#0000ff>int main(void)
2 E4 p( e( a3 B; f/ {. z- J& q{
- ^# `* Z3 V/ i/ D, bchar *src = "This is the source string";
, Y2 n+ M& t4 pchar dest[50];
9 Y/ X" e" J9 }/ ]char *ptr; </FONT></P>/ L0 v6 q8 s3 C& E+ g) ]3 V
< ><FONT color=#0000ff>ptr = memccpy(dest, src, 'c', strlen(src)); </FONT></P>, g3 e9 o9 f( g# G5 b. f
< ><FONT color=#0000ff>if (ptr) # [+ t9 S% }1 \, _8 E5 R
{ % j' s3 ~) S# y: J" T
*ptr = '\0'; ' d2 s3 Q" k- @: J8 q" b+ s! C' [
printf("The character was found: %s\n", dest);
: a$ B3 Q5 j* v5 o- u T. W3 g} % J4 s9 [$ C1 O8 z
else
. E: y( y; O6 F4 Qprintf("The character wasn't found\n");
, O% [! j$ r* sreturn 0; ( K' ^1 ~6 I, O# l6 l4 S
} 5 U/ p F* }0 _8 I' S, K
</FONT>: f* N4 E1 S0 ]2 `
</P>0 F y( q; b/ D( `" l" t6 J
< ><FONT color=#ff0000>函数名: malloc</FONT>
1 D7 X$ O+ N. `+ z4 K- o功 能: 内存分配函数 # h- p& J8 p% C3 t: H6 J z
用 法: void *malloc(unsigned size);
) [, t+ W% _+ @- }4 ^! }程序例: </P>
! E; o+ E! d4 f0 k1 A< ><FONT color=#0000ff>#include <STDIO.H> ]2 ~" ]. v7 ~3 F% O8 W
#include <STRING.H>
9 S% z" z: {; F- q! F8 W#include <ALLOC.H>
* Q0 C: j( _# R- X) C#include < ROCESS.H></FONT></P>
' Q. ]8 d* Q0 a) U8 m3 `9 C6 D2 v< ><FONT color=#0000ff>int main(void) 1 ]* F" m" l$ s$ l9 b
{ ' C x( r @+ [% F2 F7 |% p; |
char *str; </FONT></P>! @" J# X8 b1 G \ N
< ><FONT color=#0000ff>/* allocate memory for string */
) g# M' K4 ~2 h# a3 C/* This will generate an error when compiling */ 7 P/ g2 Z) ]5 b; s( P2 M
/* with C++, use the new operator instead. */
& I }' P9 R; j- K6 g; X5 d nif ((str = malloc(10)) == NULL) 4 n/ y$ P) E" s3 w9 Q) ^0 [1 ^# T
{ 3 X% R) V/ P# u6 [+ V9 _
printf("Not enough memory to allocate buffer\n"); ' Z* L7 _! q3 M4 W( E- B
exit(1); /* terminate program if out of memory */ 3 B9 E$ Z! U) G) R
} </FONT></P>
5 x# d9 \/ A. q+ m& c0 c< ><FONT color=#0000ff>/* copy "Hello" into string */
3 E2 d5 F- W" m4 W) y4 {strcpy(str, "Hello"); </FONT></P>) v5 V8 ^& X6 t3 w L. b
< ><FONT color=#0000ff>/* display string */
$ D, X7 j! ]! |printf("String is %s\n", str); </FONT></P>
: W! W2 P) x5 J6 d1 N& E; G< ><FONT color=#0000ff>/* free memory */ 0 p' }7 g, Y4 `0 o2 Z B3 Q
free(str); </FONT></P>
1 Z5 a, B: z8 e2 B5 K( }* C5 U- }< ><FONT color=#0000ff>return 0; + P; |, h# Z4 K& M6 s
}
, s/ C+ L; e) B7 k* l' T8 C R% O. x2 w& h( y3 Z! E
</FONT>: m0 X0 N0 _' [+ [
</P>9 y2 z: b; W2 M, g8 ?0 o
< ><FONT color=#ff0000>函数名: memchr</FONT>
: i, j# s/ P; t1 O- m功 能: 在数组的前n个字节中搜索字符 5 ?/ ]0 k7 ~; b
用 法: void *memchr(void *s, char ch, unsigned n); 7 n5 t" R: f* _& c, l5 M
程序例: </P>$ Z: D" k* L# E7 [9 h) m, B
< ><FONT color=#0000ff>#include <STRING.H>9 q2 M! i# R0 u; q: T
#include <STDIO.H></FONT></P>/ _9 j Y( x0 q A7 N& l7 H+ X# D
< ><FONT color=#0000ff>int main(void)
) Q6 a& D8 N% m" R9 U8 Q{ 0 d7 l; C% B: U. L8 N
char str[17]; ; B$ ]! w. l1 S
char *ptr; </FONT></P>
) C/ S4 H) r( J' \< ><FONT color=#0000ff>strcpy(str, "This is a string"); 2 b% c, p( F" t$ _2 Z9 a6 k' ~& R
ptr = memchr(str, 'r', strlen(str));
0 l; o6 h/ p0 y/ Cif (ptr) ! S1 g9 x5 E/ [% g
printf("The character 'r' is at position: %d\n", ptr - str); y! M( Y0 W) P% Z8 M4 K) M! k
else
z8 R' N1 t7 e* \' g" Fprintf("The character was not found\n");
$ p1 p: `+ C# s* q6 E* a D$ Rreturn 0; 4 z1 E9 d6 C% G6 x1 f0 F8 L/ M
}
$ B3 s5 n5 E/ `! m: v2 ~</FONT></P> r" P: j5 Z2 x6 C9 O/ Z4 u! V u" s
< ><FONT color=#ff0000>函数名: memcpy </FONT>9 {8 g B$ d- Q, q- D
功 能: 从源source中拷贝n个字节到目标destin中 4 F; c9 M4 j9 \3 C
用 法: void *memcpy(void *destin, void *source, unsigned n);
3 T z( Q) c/ J* `程序例: </P>. L' q3 i: C5 {7 a
< ><FONT color=#0000ff>#include <STDIO.H>, z% v4 a% H2 D, h2 ]! u
#include <STRING.H>" F% E( e4 |' g! G$ P9 R
int main(void) ' Q& T9 W- p8 ?3 w9 z
{ : G/ I& z: _9 ?) V! Y! l
char src[] = "******************************"; - B3 u n+ i- f7 X; @
char dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709"; 3 m) T; X9 O& M. o. W) F
char *ptr; 0 _5 K- l3 G @; r* g c+ c* a
printf("destination before memcpy: %s\n", dest); ~/ x U$ F, I& ]$ U, y7 e
ptr = memcpy(dest, src, strlen(src)); 8 }: |& h! O, M v+ T& }
if (ptr) 3 m1 x. ~0 V$ s+ K
printf("destination after memcpy: %s\n", dest);
! S+ O. N/ }& p4 F+ u. p! melse
. X: P/ u ^( A2 ]$ Mprintf("memcpy failed\n");
$ e' b; o4 g5 H% f# [) Freturn 0;
n. _- K: }8 Y% p6 Y0 a}
5 u9 M. r; e# X( @</FONT>4 }# |& f0 P8 J% o
</P>
* g: m0 T9 Z+ o; X1 @( o) o< ><FONT color=#ff0000>函数名: memicmp </FONT>
8 ]9 M+ b5 n0 u; r' p" T功 能: 比较两个串s1和s2的前n个字节, 忽略大小写
9 K) y" Y- T/ G, N$ e3 h# l用 法: int memicmp(void *s1, void *s2, unsigned n);
7 u1 M! {- D4 f: X' B+ u2 W) N程序例: </P>
1 L4 y) F( Q0 J8 {! f< ><FONT color=#0000ff>#include <STDIO.H>2 t/ u* {0 }& a, T
#include <STRING.H></FONT></P>, j. b8 B) x- J+ M
< ><FONT color=#0000ff>int main(void)
6 {; c* K- W% k4 n9 v{
( J9 ?" V9 k, c9 @7 ?2 nchar *buf1 = "ABCDE123"; 0 G+ d1 L7 E4 X$ n
char *buf2 = "abcde456";
" R% z5 _+ H+ E9 l- H$ r6 @int stat;
( @6 i( ^! @$ zstat = memicmp(buf1, buf2, 5);
' R/ Z) f8 j7 \4 ]+ E1 W8 Fprintf("The strings to position 5 are "); 4 t) w' Y8 @' `9 S M8 r
if (stat) 4 I* t+ Y- ]4 h( W! `! ~
printf("not "); 3 w: Z) x. m" b
printf("the same\n"); ; y# H2 E5 w' ^ {% U; i" e
return 0; 2 B @7 D* C) o* Z. c" w
}
4 K% d- T3 X+ \( n7 o2 v</FONT>
7 S' {, P/ b6 @; V</P>8 e; R; o8 F& ~1 F: I7 Q
< ><FONT color=#ff0000>函数名: memmove </FONT>6 `8 }8 U% N& X% e1 I, k
功 能: 移动一块字节 p% g* k' D6 R5 B; }; J: Z) t
用 法: void *memmove(void *destin, void *source, unsigned n); & ?' I: S( f; v- ^
程序例: </P>; W) y2 c( u7 w$ p3 ^3 j+ D
<P><FONT color=#0000ff>#include <STRING.H>
. K& U) B, M3 E8 C#include <STDIO.H></FONT></P>
1 {0 E1 r% e& P% ~ f" y+ N0 J<P><FONT color=#0000ff>int main(void)
( C2 B1 q4 N r{
- ?" ~! a$ z* C2 tchar *dest = "abcdefghijklmnopqrstuvwxyz0123456789"; 5 L% e1 t0 @" Y; \. ^
char *src = "******************************";
' g0 q/ V4 y: r X! Sprintf("destination prior to memmove: %s\n", dest);
( w0 \2 d5 F3 @" b1 [ _. |memmove(dest, src, 26); & s, s. |0 J4 g
printf("destination after memmove: %s\n", dest); 6 `) D7 m: x5 w
return 0;
# \$ v6 I+ e" x) q/ e}
5 t, H' b2 a6 u0 p \; `9 W7 V. l
</FONT>. @. O% D/ R! ^* P
</P>! ], {8 G' }6 N4 N
<P><FONT color=#ff0000>函数名: memset </FONT>) c1 [. }! V: r k
功 能: 设置s中的所有字节为ch, s数组的大小由n给定
) ^6 U& s8 I' s( v6 t% O( @用 法: void *memset(void *s, char ch, unsigned n);
2 Q8 z( Q8 S1 i: [" r, K& ~/ P程序例: </P>+ P. S( C9 X$ V8 ?$ d
<P><FONT color=#0000ff>#include <STRING.H>
7 O/ @3 s( u8 D#include <STDIO.H>* F$ h0 I( u# c3 M7 Z
#include <MEM.H></FONT></P>
& O* s0 q; A) Q4 N1 Y1 {3 Y<P><FONT color=#0000ff>int main(void) - Y4 f% x9 T& x& ?* z/ C
{ & A+ \, q8 {/ w' o! w
char buffer[] = "Hello world\n"; </FONT></P>
: Y! u) S+ \9 d2 K7 O<P><FONT color=#0000ff>printf("Buffer before memset: %s\n", buffer); ) u5 G! ]1 [+ T1 m
memset(buffer, '*', strlen(buffer) - 1); / ~ @9 Y. u7 K6 @( G9 l
printf("Buffer after memset: %s\n", buffer); ) Y( W' ]# [4 e7 E* Y9 r
return 0; 8 G0 Z) c) V* x5 g' U" N* @+ e& R
} </FONT>
3 y- u7 Z5 T& o
q% }4 J- t2 r8 x4 B. f9 M</P>' m7 j! L- R' s+ x& q
<P><FONT color=#ff0000>函数名: mkdir </FONT>8 {/ |8 T) p+ \8 z2 Y8 z2 x6 n
功 能: 建立一个目录
4 l# u( m; y. ~- S' u1 S" ~用 法: int mkdir(char *pathname);
2 q9 q2 b& x* \8 _5 R) Y3 W: |程序例: </P>7 B! D3 W/ Z! p0 U
<P><FONT color=#0000ff>#include <STDIO.H>
' G3 d6 k! r/ p. J" f2 a#include <CONIO.H>
# Z5 w" ?, I; \' [% _. I. f( ]#include <PROCESS.H>6 r' m: D- O M- `5 b
#include <DIR.H></FONT></P>
3 D0 x! d6 v1 Y. \6 o8 d<P><FONT color=#0000ff>int main(void) + Q ~# C5 K7 V# F1 @3 W) A5 d
{ / k# t5 L* G$ [% N
int status; </FONT></P>
6 _, d% v. {5 R0 }$ o8 {; b0 `<P><FONT color=#0000ff>clrscr();
W) d) e V! V: A& Gstatus = mkdir("asdfjklm"); / a$ W2 }4 Y. `
(!status) ? (printf("Directory created\n")) : - ^0 c7 F, |+ b- @9 ~
(printf("Unable to create directory\n")); </FONT></P>2 T6 B3 _6 N) ?$ _5 w# y
<P><FONT color=#0000ff>getch(); & O6 R! N% Y" j5 |) R; Q0 W8 w
system("dir"); ; t8 U- V4 M2 h) r$ Y
getch(); </FONT></P>
* d n/ N) w; b0 b<P><FONT color=#0000ff>status = rmdir("asdfjklm");
. D7 m* r, f2 E4 M! w(!status) ? (printf("Directory deleted\n")) : ; K. J, l! L q& {
(perror("Unable to delete directory")); </FONT></P>
; ]5 l d8 _% \% G6 D<P><FONT color=#0000ff>return 0;
+ t! M/ y' G" H T2 Y" H1 A}
2 z% N8 b6 ]8 L( U: F: z. z! ~# P; j# }, H; a
</FONT>
! b5 Q5 ]5 p Z& ]' Q* _</P>. U8 M# r! A$ _, Z! a
<P><FONT color=#ff0000>函数名: mktemp </FONT>
+ E+ O/ Z$ i* J- e" d功 能: 建立唯一的文件名
: w2 ^2 Q$ c/ k% q. V1 G% c6 w3 m+ @用 法: char *mktemp(char *template);
( {4 G0 W6 _ t8 l& |" {+ O$ Q程序例: </P>, O# o! f- a: g6 k1 B( c
<P><FONT color=#0000ff>#include <DIR.H>0 H' X* `* D {. T
#include <STDIO.H></FONT></P>& D% b5 S2 h. U* |' p
<P><FONT color=#0000ff>int main(void)
$ Q: d9 H. _! ^$ @# }{
* s5 f$ \+ |9 }+ y' X0 ^% z1 X1 y/* fname defines the template for the
! |0 L j ]$ f3 ptemporary file. */ </FONT></P>
' W4 p* O7 B1 [<P><FONT color=#0000ff>char *fname = "TXXXXXX", *ptr; </FONT></P>. }7 [( p' l( T' H2 ] y
<P><FONT color=#0000ff>ptr = mktemp(fname); * s0 G# O! @$ H2 ?! }9 v4 |$ a/ w
printf("%s\n",ptr);
. g2 H3 j! z, n* |0 K' _& O7 c' dreturn 0;
0 x& M1 ?7 ]( ]8 A% S2 P5 |} 1 J |7 j( \ `( v3 u) U# J6 Y" H
</FONT>
% L4 Y2 O; d" ^$ S3 T$ _- Y7 k U% Y</P>
# W1 ~* F; g6 j<P><FONT color=#ff0000>函数名: MK_FP </FONT>
8 n& i" Z' e6 U. y$ Z功 能: 设置一个远指针 3 M8 B$ `5 ?2 T0 `
用 法: void far *MK_FP(unsigned seg, unsigned off); B% Q. N* y( t; s: m
程序例: </P>
$ L& B; L, b: m+ L6 b' K [3 `<P><FONT color=#0000ff>#include <DOS.H>& S; z' d; c" Y6 c
#include <GRAPHICS.H></FONT></P>
, W) g% p4 |( \$ X3 m7 p* P<P><FONT color=#0000ff>int main(void)
1 K4 S8 F* M0 x" y# z$ z{ # t+ d( B' ]) Q9 {: Q
int gd, gm, i;
* P4 W1 D) ]6 q, Hunsigned int far *screen; </FONT></P>
- v9 X; F3 O- V' Y/ q% `0 V& N<P><FONT color=#0000ff>detectgraph(&gd, &gm); . N2 L: ]$ z! u# A' T
if (gd == HERCMONO)
5 g7 r/ k: z. ?5 ^& |" Q) Rscreen = MK_FP(0xB000, 0); 9 W, ^, C. l# O7 K* q# o: ~7 z
else
b% Y& t; |* _" u+ G3 Nscreen = MK_FP(0xB800, 0);
6 d) n. @9 Q" N; I0 j Nfor (i=0; i<26; i++)
8 x! V _1 F* v2 X5 |7 R( Bscreen = 0x0700 + ('a' + i); 1 Z3 Q4 T1 B( L9 \) ~
return 0; p/ j9 J; _! d3 j$ k$ j
}
$ p3 w% e. z, P7 h</FONT>
( g! I1 t( h% n7 a8 f* c' m</P>
' x1 F f/ b& H3 p8 I<P><FONT color=#ff0000>函数名: modf </FONT>2 \* a" b% x1 E; Y) U; t6 _
功 能: 把数分为指数和尾数
' C1 ?) D+ ^, K9 J用 法: double modf(double value, double *iptr);
9 E9 \. n) v5 D ? L程序例: </P>. O( j% n0 \+ K+ [
<P><FONT color=#0000ff>#include <MATH.H>1 v1 R4 y) d _7 P3 R% b
#include <STDIO.H></FONT></P> h& ^3 Z' a8 k- m
<P><FONT color=#0000ff>int main(void)
6 ^6 ]8 g0 f% h! p7 o- `# O! K. b{ , H$ K: o0 t) A# K; k7 z8 ?) f
double fraction, integer;
& K9 H P# m2 D/ u5 d. {3 ]double number = 100000.567; </FONT></P>
& T3 ^3 v; U0 @& p& K" n# }<P><FONT color=#0000ff>fraction = modf(number, &integer); % M6 {) \& Y5 q- N' G/ x
printf("The whole and fractional parts of %lf are %lf and %lf\n", 7 O( ]+ {0 e* _& c6 S, ?& ^
number, integer, fraction);
! ~7 ]7 B! \* K9 Xreturn 0; 5 S- h5 R- {# U1 Q& R& p0 b
} </FONT>
m* d& T( Y p. N+ \0 k0 w A* b% C( |6 n& g
</P>
4 M" n& R; S2 L- A6 T<P><FONT color=#ff0000>函数名: movedata </FONT>2 e& Q7 ^' |4 \; Y
功 能: 拷贝字节
7 R5 D5 g' G# ]! h- I; f用 法: void movedata(int segsrc, int offsrc, int segdest,
( e+ V: ]2 C5 n: k" r# Yint offdest, unsigned numbytes); 6 |5 E+ W, G9 A2 A: g
程序例: </P>0 c; Q# ]( h# T
<P><FONT color=#0000ff>#include <MEM.H></FONT></P>, i. z0 X# x7 W2 r1 O6 p6 N
<P><FONT color=#0000ff>#define MONO_BASE 0xB000 </FONT></P>
( k! z$ w- {' l4 y; X6 ^# b* w<P><FONT color=#0000ff>/* saves the contents of the monochrome screen in buffer */
0 w( o: E0 ?7 ?! u j/ n hvoid save_mono_screen(char near *buffer)
" Y! u6 M$ U- g# d{ # b8 q" C0 s4 _; N9 D2 C6 a7 T
movedata(MONO_BASE, 0, _DS, (unsigned)buffer, 80*25*2);
( \, f$ S- a7 G2 g$ x} </FONT></P>
5 w' T# W) b+ h) Q' z2 X<P><FONT color=#0000ff>int main(void)
2 ^2 E6 w0 p" y9 h% |5 t{ * J8 e R9 w8 |2 @% @- q* \
char buf[80*25*2];
/ a% M' E3 T( H ?" gsave_mono_screen(buf);
4 z, K1 T# B2 \! j0 `5 {}
1 R- q$ X& o! J</FONT>. E; d) S! r& [: O( Y- t
</P>* L8 V+ o( B# `
<P><FONT color=#ff0000>函数名: moverel </FONT>- _4 w2 L- \ l
功 能: 将当前位置(CP)移动一相对距离 , R' u6 Q3 p5 n% J& f* t8 d
用 法: void far moverel(int dx, int dy);
5 ` x" E$ f) [; [1 V, b* x1 F程序例: </P>
8 A" ]7 F* z& W' N<P><FONT color=#0000ff>#include <GRAPHICS.H>
d1 f( u, |3 G3 `#include <STDLIB.H>
- b8 O( f8 m7 |4 `9 U. A* E6 f! \#include <STDIO.H>
1 `, t$ @4 }& O9 ?8 {% s* P#include <CONIO.H></FONT></P>
! t5 S- t8 t. `4 y# I. w<P><FONT color=#0000ff>int main(void) $ Q" z# {! d3 L- e' ~
{ 3 [% `+ F- S! u" Z
/* request auto detection */ + m, a z& U/ \1 j+ F, h( w2 ^; f
int gdriver = DETECT, gmode, errorcode;
k: Q0 h( |5 S2 Echar msg[80]; </FONT></P>5 J+ m* o/ M! c, }$ g
<P><FONT color=#0000ff>/* initialize graphics and local variables */
/ ]. U* t: l' T/ d0 Zinitgraph(&gdriver, &gmode, ""); </FONT></P>* N: J" R$ Z0 g6 W# q* x
<P><FONT color=#0000ff>/* read result of initialization */ : [7 [2 b8 P' s6 O
errorcode = graphresult();
n4 e% d8 E- ~+ Sif (errorcode != grOk) /* an error occurred */
}# g: Q: i- m' S3 k6 g; A{ / R$ V/ K4 H' c1 A! b3 T
printf("Graphics error: %s\n", grapherrormsg(errorcode));
. I7 e- ^/ k. i: `% m& K. lprintf("Press any key to halt:"); # E! c3 P) E& l& |# ]# V. Z
getch(); 4 z! }" @& {/ W! S% `$ e4 u
exit(1); /* terminate with an error code */
/ z- K. Y0 w. ?& d* V} </FONT></P>
& H2 k8 |" s0 d3 X+ |<P><FONT color=#0000ff>/* move the C.P. to location (20, 30) */ : v2 m8 P4 [$ `1 e3 T
moveto(20, 30); </FONT></P>
4 a2 g* i+ f: o* A; W: Z, l Z<P><FONT color=#0000ff>/* plot a pixel at the C.P. */
* g% X( H6 w, [) U! ?$ Yputpixel(getx(), gety(), getmaxcolor()); </FONT></P>& J/ V3 k1 X7 F5 Q# e8 v( k0 F
<P><FONT color=#0000ff>/* create and output a message at (20, 30) */
, e( N4 Z' {9 a" Dsprintf(msg, " (%d, %d)", getx(), gety());
x+ h' D* o) [: P2 O" z9 y0 ?8 douttextxy(20, 30, msg); </FONT></P>
; [! }( P* n+ Y) S; v& y<P><FONT color=#0000ff>/* move to a point a relative distance */ ; U0 ~+ M( T7 Q& O8 S
/* away from the current value of C.P. */ 7 C r, I W! B
moverel(100, 100); </FONT></P>
: E2 O1 z" X, Z, H8 R- G- D* V<P><FONT color=#0000ff>/* plot a pixel at the C.P. */ o7 }4 d5 r$ a# q% k5 U0 A
putpixel(getx(), gety(), getmaxcolor()); </FONT></P>3 F8 U7 h9 V, b( q* T- N
<P><FONT color=#0000ff>/* create and output a message at C.P. */
6 u6 u* h- b2 n, U8 H0 Fsprintf(msg, " (%d, %d)", getx(), gety()); + u8 m( x7 k% b- W5 m; T
outtext(msg); </FONT></P>
9 C8 f P* n9 U ?6 ~. ]<P><FONT color=#0000ff>/* clean up */ * p) R4 d+ \' t
getch();
$ L) d! h2 S' [7 m/ M+ T8 O; [closegraph();
9 H, _. n c$ N* T* }( n9 [; jreturn 0;
" T ]( h. D; ^3 E3 A* N3 ]} ) i: B6 T/ w. a! c" c W' q
</FONT>' q8 R& m" Y& N; {7 R
</P>+ d+ M C3 l* Q7 h# o' n
<P><FONT color=#ff0000>函数名: movetext</FONT> 5 @# S. r3 m9 o1 Y5 _
功 能: 将屏幕文本从一个矩形区域拷贝到另一个矩形区域
3 z' @$ d) a x s X8 T% r! Q& C用 法: int movetext(int left, int top, int right, int bottom,
6 b% `' {1 x6 z: a* `int newleft, int newtop); 7 o- x; j, K1 \$ n; y
程序例:
& E; e: m. L" O2 Q, K9 h<FONT color=#0000ff>#include <CONIO.H>$ K' |5 c' a* U# Q0 h6 `
#include <STRING.H></FONT></P>8 h0 H6 ]" V/ e0 X# [2 k
<P><FONT color=#0000ff>int main(void) / ^4 j. q5 b7 W4 L) R; y: K
{ / [' }. d x* y2 c
char *str = "This is a test string"; </FONT></P>' U$ m( {/ m4 g
<P><FONT color=#0000ff>clrscr();
5 n! u& c2 Z# z! e$ `) J r3 j& N) Pcputs(str);
# F# V1 W1 F) a8 pgetch(); </FONT></P>
6 a4 s* C: H- e* r8 x<P><FONT color=#0000ff>movetext(1, 1, strlen(str), 2, 10, 10); 1 c0 |5 P9 w" `; @& _' ]
getch(); </FONT></P>
1 b8 I& Z- n; h) [<P><FONT color=#0000ff>return 0; 3 @3 N$ E1 a5 F
}
' h" h" a6 E' u# h( U; R
* X0 c$ L* }0 [# o5 U</FONT></P>
0 C, p# E k+ t2 K! M' i& N* N2 |<P><FONT color=#ff0000>函数名: moveto</FONT>
9 e% h4 R6 R8 c- \功 能: 将CP移到(x, y)
1 d8 T# F% W. T# @ B7 O& C用 法: void far moveto(int x, int y);
7 o6 t" Z X* j0 v7 ? i程序例: </P>
* i% [ a Q% h% d<P><FONT color=#0000ff>#include <GRAPHICS.H>
2 _8 J9 s! k2 v5 V' l" j#include <STDLIB.H>
$ V% d1 [# n9 G8 Y#include <STDIO.H>* ~5 _2 V* ]2 Z* p5 S
#include <CONIO.H></FONT></P>
% G% K# x0 l; N<P><FONT color=#0000ff>int main(void)
7 U2 `' \* E8 F{ - j$ _- [# k6 R3 j$ c& G. e( z( `
/* request auto detection */
4 R7 e4 V7 [8 Q. Sint gdriver = DETECT, gmode, errorcode;
% }* @& [4 F; B W: S& l4 ychar msg[80]; </FONT></P>1 x. F7 A3 B3 Y( A0 v
<P><FONT color=#0000ff>/* initialize graphics and local variables */
& X% D; D5 P! s( l ~1 |2 W7 Z$ Kinitgraph(&gdriver, &gmode, ""); </FONT></P>1 s0 I8 L" B) H* S3 J
<P><FONT color=#0000ff>/* read result of initialization */ 9 g. w5 I3 C$ H, Z. v, k( f# ?
errorcode = graphresult(); + M' B& R$ r# R- v8 a1 Y3 t, I2 S
if (errorcode != grOk) /* an error occurred */ / e! T9 w0 E6 U4 ~: M$ U
{
8 s. @4 N% u2 Jprintf("Graphics error: %s\n", grapherrormsg(errorcode)); : r" v9 I& G3 k3 z( c
printf("Press any key to halt:");
6 G0 h% o7 n, @* H. ~getch(); : _- A& m; C+ [- p# q, U6 [
exit(1); /* terminate with an error code */ % r2 E7 {7 |, t' G+ {4 ~
} </FONT></P>
* e, E& P, Q U" ~" i$ a+ s9 e<P><FONT color=#0000ff>/* move the C.P. to location (20, 30) */
2 [2 l* Q+ ~" Q) V% n* Ymoveto(20, 30); </FONT></P>" s. }; M! |+ s, \& t5 q) E9 ?
<P><FONT color=#0000ff>/* plot a pixel at the C.P. */ ! A4 ~0 H2 ?! J2 K+ b, F
putpixel(getx(), gety(), getmaxcolor()); </FONT></P>
( k) y" y; U3 M3 [+ s' @# `$ E) {<P><FONT color=#0000ff>/* create and output a message at (20, 30) */ $ A2 ~/ d' b, l3 U
sprintf(msg, " (%d, %d)", getx(), gety());
! ]$ V" I# w- K, Nouttextxy(20, 30, msg); </FONT></P># B; }' I4 T1 q
<P><FONT color=#0000ff>/* move to (100, 100) */
! p6 g% U+ j# h5 Hmoveto(100, 100); </FONT></P>+ w. l- V [2 O9 |' h0 w w% c# {
<P><FONT color=#0000ff>/* plot a pixel at the C.P. */ 0 Q8 r/ i- j: v# @
putpixel(getx(), gety(), getmaxcolor()); </FONT></P>% ~, j$ Y1 l* }4 ?- o! f
<P><FONT color=#0000ff>/* create and output a message at C.P. */ + h9 Q2 q* z0 j# O6 J
sprintf(msg, " (%d, %d)", getx(), gety());
4 R: m4 q, a: t/ ?$ Couttext(msg); </FONT></P>
$ `$ r& H& t( R2 x$ B, e. o<P><FONT color=#0000ff>/* clean up */
6 h: v/ M# v$ w) d$ e3 S. _! ]+ zgetch(); 5 n2 i/ I/ z0 t& p, Y7 I& p
closegraph(); 0 n# d/ ^5 B) Y1 x0 B
return 0;
8 e" Z' O) y# {+ D/ k9 A+ P( l}
5 J; O. g% l, ~</FONT>
# k1 c; [" v E</P> {. }. e' l/ ` m
<P><FONT color=#ff0000>函数名: movemem </FONT>
r$ a% A: o' O5 c5 S$ H, h功 能: 移动一块字节 & T* n! ^$ D4 g6 r" |
用 法: void movemem(void *source, void *destin, unsigned len); 3 I6 W% a- D1 Q/ q/ `
程序例: </P>1 z* ] o+ G9 i5 y& l
<P><FONT color=#0000ff>#include <MEM.H>& p% @" P0 B% l: I# W/ T& C8 O
#include <ALLOC.H>
, g3 z$ n. h; v! W#include <STDIO.H>8 F% d4 k( _) N7 v! g* C/ Z
#include <STRING.H></FONT></P>
" ]$ _0 t# S$ U& v _8 L) q6 i<P><FONT color=#0000ff>int main(void)
& W; h. a9 g! M: O2 K. |{ # c9 a9 x5 @( y% g
char *source = "Borland International";
0 b, E( F% |8 zchar *destination;
4 D0 e/ z$ V: }/ yint length; </FONT></P>
, \* z8 O3 C, @3 q5 k8 u<P><FONT color=#0000ff>length = strlen(source);
/ _& t; o# U& j# Edestination = malloc(length + 1);
$ A& ]8 ?+ T5 ~/ @) \; y) o7 _# Cmovmem(source,destination,length);
; v/ i; q0 u. j2 k) a1 G h; {) N. Tprintf("%s\n",destination); </FONT></P>
# K: e+ ?: i) v) w<P><FONT color=#0000ff>return 0;
0 y2 z: ^) N% ^ _+ n}
, D1 }4 S* W2 c+ p; x3 R9 o
6 i2 h+ z6 m! N: d# X/ ]: H: Q3 \/ C</FONT></P>8 c2 q9 u- L% L' f
<P><FONT color=#ff0000>函数名: normvideo </FONT>
* F9 S5 @2 {+ q+ j1 g. Z7 {; [6 M功 能: 选择正常亮度字符 & Y1 Y! c" t, e! b, d5 n
用 法: void normvideo(void);
8 ` z0 Z8 E) |, h程序例: </P>: Y( W f6 d, [" q9 n/ N0 N. V
<P><FONT color=#0000ff>#include <CONIO.H></FONT></P>
9 w* ?% P* T6 t+ W9 E1 ~<P><FONT color=#0000ff>int main(void)
5 m- M/ ]: u) z* ], r{ 9 u9 y3 C3 Y- k4 V& o$ D. L
normvideo(); 4 z" a& b: [: q) h' a" x/ T
cprintf("NORMAL Intensity Text\r\n"); # F: }7 I: s' b! E V
return 0;
% O7 e# W8 e$ `, a* u- I$ m1 V}
" h: ?0 L, A9 h& @- \7 e1 K" ~
, f+ Z) C ^8 r' l8 S% p. g. G</FONT></P>
+ S' [& r {8 \6 ]* z0 H! D<P><FONT color=#ff0000>函数名: nosound</FONT>
8 R3 Z9 r; R, P# Z% s5 Q6 H$ T/ n3 @功 能: 关闭PC扬声器
0 B# C* J( X9 b; k2 B5 p用 法: void nosound(void); $ h1 v* w1 @+ Q( I8 |
程序例: </P>
. d( a4 e6 q: U4 v<P><FONT color=#0000ff>/* Emits a 7-Hz tone for 10 seconds. </FONT></P>
e8 N$ Z Z; t5 z, L* B* I<P><FONT color=#0000ff>True story: 7 Hz is the resonant frequency of a chicken's skull cavity. % O' U" u4 I# y7 d5 b! \- L
This was determined empirically in Australia, where a new factory 6 d* r; w; o2 S6 N
generating 7-Hz tones was located too close to a chicken ranch:
! V7 p: I9 P! hWhen the factory started up, all the chickens died. </FONT></P>
' q& K2 ^5 ~# u7 v5 D2 z<P><FONT color=#0000ff>Your PC may not be able to emit a 7-Hz tone. - n4 }, I* u0 ^: v! ?
*/ </FONT></P>
( e7 T; G- [( v<P><FONT color=#0000ff>int main(void) 3 l5 I+ x+ J$ S) Z; Z6 ]2 B+ g4 L& ~
{
7 Z- N0 Z( G& }4 u; Q# t2 Vsound(7);
1 r, h! G9 K- u, Jdelay(10000);
" I; A- w) b* g/ z$ ~0 ^" ^! g! Onosound();
$ }2 U b% K' E. ?( f' I4 y/ P}5 K1 W7 B6 u/ F; m9 T) s- ?+ y
</FONT></P> |
zan
|