TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的
/ k& g, [4 l9 Y. q0 m: y" p$ @功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。* p* R4 F; R h6 M2 q- t
+ o( O. E0 w7 d用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,* ]- [' W( q; O4 Y
象PC- DOS 、
( o9 D0 z7 S0 z; K6 S% h
. h) D8 J5 l- i& j6 UWORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点: ) e6 U2 V9 G% w2 z) W
0 Y P r& I5 o1. C是中级语言9 b9 _* ~0 i. q4 d. c* V
+ \$ C( t3 E' e9 p' [6 p; x( h. ~, w; Q
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象$ v0 D/ c. o7 d7 Z2 s. x( A8 ~3 e' R
! J+ ^$ ?% ?: Q4 L& b! p汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
: W* g8 b" T; J) M
, ^. Y( B- j# R$ n8 F! Z1 f
: B4 C4 f0 n5 n2. C是结构式语言' x- s9 Y: e: F8 z
. d- _4 J$ B' J6 d& Z+ j
3 a1 q) Z5 T$ B结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的6 y# _: G" l8 s% X
# w8 V6 u' V& K5 N7 J信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调' J8 ?! s A1 U, P" e' ^* P6 R1 {
# X7 e8 f; [4 F& Y l+ ?$ l试。C 语言是以函数形式提供给用户的,3 c( g6 S8 n* K4 k/ c, N5 @5 z6 B
这些函数可方便的调用,
+ D0 Q5 X& V7 ]! N# q$ M1 R并具有多种循
) Y& f" V& ~1 d+ q3 [* n( H1 v6 p% a# a' p9 f, u
环、条件语句控制程序流向, 从而使程序完全结构化。
% @* |# C' v/ N8 ]" w/ k# B! k* B
1 b9 g" q, c9 n% W
$ m" y7 z- F: Y: _: h3. C语言功能齐全
% I9 I4 p* z+ ^7 |
+ y) |" k7 i, U. L0 Z
U, \; F }2 C! LC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另* T; I" I% B3 a& Q U+ b3 Z4 X
1 F/ m/ K% n5 A/ `6 _, y外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑
/ ?1 U% G) x8 m$ m. g4 z+ r+ `9 V5 C' q: C2 e
判断功能也比较强大, 可以实现决策目的。3 ~% S) g- Q: h* K! r5 S, n1 b! N
& S; A5 |/ x. q
- ^" y/ h4 h; C4. C语言适用范围大
/ H" [6 \+ [5 F0 ?; a1 D: S* H3 E+ C& \/ Y' c7 _! ?$ E" g& Q* C) o
. h$ `) L* {, H6 s" fC 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于. A/ Y7 z) b5 H; C% ~( Y
1 ]* I5 k+ r" t3 S% l. z多种机型。7 U' @8 g0 `2 v5 a# ]' M2 {4 N
9 Q/ ]+ x- ^( o1 t0 m- c
# C* L7 h$ P5 C4 H2 N/ ]……………………………复制下面红色字段………………………………………* x( e, M6 g0 {+ @5 l
+ D# \. a- y; }7 ~
" e4 y0 @7 m; {/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
4 M- s( w) R5 Z$ z+ T#include"stdio.h"3 e$ L3 r$ l) Y; {
#include"bios.h"
8 I$ h/ C: H8 [3 o3 [& I. k#define LEFT 75/ w. T" e9 l2 }/ f' P
#define RIGHT 77
7 `; x" e' `4 c L/ Y#define UPPER 72, C5 j3 w' |) q% y% s @( W
#define DOWN 80
! r! X! m2 I/ k#define ESC 27
' L( }, n3 e5 C/ ]- C. q9 Gstruct Boxss /*定义箱子结构体,其中包含坐标属性*/9 h& b/ O) T* Z- r1 o9 O
{
/ e% i0 ^9 m2 f% l( k4 X; Y" qint x,y;
- h8 j5 Y# W: e0 X# h+ s& c' O0 f};
) [ a) G8 l; Y+ punion keyboard /*定义读取键盘码的共用体类型*/$ T" O) A8 b, x1 U; R0 b
{
" \, h3 l$ X7 x2 z& Bunsigned int iKeyInfo;
$ V+ c5 H9 {9 d2 I) [char chKeyBit[2];/ x* x5 O* `3 i, w
};
5 z3 E; p9 c9 v, o8 S8 u; L9 Iint fnGetKey(void) /*定义读取键盘码的函数*/
# b' u8 }$ W# }" a# z/ x( Y{
1 E! @* S: c# a5 hunion keyboard uniKey1; /*定义读取键盘码的共用体变量*/
3 ^% {4 S k- [& O0 m* I7 vwhile(bioskey(1)==0); /*检测用户是否按键*/
8 }7 G, ^7 t+ ] E4 R7 wuniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/+ [! L. J# m) @3 D" V
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/- X, S% L; F* M, E
}
w* {! s% V2 dvoid main()5 U3 {4 F6 X% g x/ K
{. Z3 B; b8 x- T
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
% A5 e" N6 y0 m) j ]struct Boxss Box[4]; /*定义箱子数量*/
( U8 z9 b; U( \. I$ t* D; Sint chMap[10][10]={ /*用二维数组定义地图*/
% d' p2 N+ Y7 ~" b7 ^& V- p; _ {0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
3 O2 ?: ^/ b* {. ^$ Z, w {0,1,0,0,0,0,1,1,1,0},
4 g& Q/ c) X% o6 W {0,1,0,2,0,0,1,0,1,0},$ f( x" j4 T! M6 i8 M, g4 k% V
{0,1,0,1,0,0,1,0,1,0},
# v) U) d( p- C2 Q {0,1,1,1,0,0,1,0,1,0},: k0 ?5 u0 K$ M ^, P) H
{0,1,0,0,0,0,1,0,1,0},& g8 j' x4 Y" S: x4 n* E
{0,1,1,1,1,1,1,0,1,0},
1 X% v5 I1 \( b A7 t: l {0,1,0,1,0,0,0,0,2,0},
3 f, x6 L4 j3 u$ R2 w2 ^ {0,2,0,1,1,1,1,2,0,0},
$ I6 R# H& s2 B0 u+ O: X {0,0,0,0,0,0,0,0,0,0},
. w7 B5 r& b$ M2 n& T( N" J6 z S+ I }; c4 S2 V3 `* O" H8 d( m) l; X6 F
int i,j;
8 p7 X5 z2 a! k! QBox[0].x=13; /*定义箱子的坐标属性*/) v) N: j9 A, R% T; U' W3 `* \
Box[1].x=11;
' a0 `# l C) T# z+ s) aBox[2].x=14;
4 h( G7 y; \- j: o+ \Box[3].x=18;
& N$ Q$ e3 ~/ C4 xBox[0].y=8;
! X! |' c* p5 @Box[1].y=7;
' o1 h1 s, n9 WBox[2].y=13;, J) S4 u5 d9 P
Box[3].y=7;$ e6 N4 @* J. L/ Q) K, V
while(1) /*反复进行求移动的坐标运算*/9 H( Q! @6 C- W+ O% ~# t
{
+ G/ e- f1 l6 L* c/ p: L' w for(i=0;i<10;i++) /*输出新地图(刷新地图)*/* d* S" [- p, q: K! A8 D
{
0 F% m* D+ {' I" C( \# ^; U gotoxy(10,5+i);
, M7 A8 i$ H7 f0 E: i4 S1 a5 Z for(j=0;j<10;j++)7 L& |: S! j' r0 Z
{
. S+ A6 z) d9 z4 o' d if(chMap[j]==0)
# Q H- ^4 j6 k/ A) @/ Y printf("#");+ t Q- P7 N( ^
if(chMap[j]==1)
* T# \$ {9 j/ z b* L5 @- L( ? printf(" ");4 |. p) M) X3 K7 ?9 Q& n9 L
if(chMap[j]==2)
0 j1 M" A( @. t5 ? printf("X"); W2 ?; _5 X# L: l3 L3 N z' {/ u
}
( f. T) r- w! B* I) { }$ A- u$ w: M$ M- q
j=0; /*判断是否所有箱子都在目标坐标上*/
- P8 N# r6 ]. u! x for(i=0;i<4;i++)
( I. W6 L. U4 s1 h+ Z if(chMap[Box.y-5][Box.x-10]==2)$ s: C [" F$ I% {3 V
j++;
) V9 K* X4 K, ?* p9 e if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/' S9 z l" J, b
{; `$ [- x) h, [3 G8 q* c
clrscr();4 C; Q+ r3 o. K
printf("You Win!");
* M' k5 x7 W" a/ Z2 i) v* {$ P break;. |5 d# f6 E& y7 `
}
& p1 Y! U% l+ S6 g% C$ ~ for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
! Z# C8 t m* Y {7 n1 n' O1 {% A% J
gotoxy(Box.x,Box.y); L8 c$ H$ o8 H$ n$ o
printf("0");" [$ h( O% E( L# C' ^
}+ x u$ m8 _* {3 f9 W1 f( z8 \
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/1 W6 I* q1 g z* x
printf("*\b");
0 Y( V$ {; s5 \0 F! C tx=x; /*记录本次移动前的坐标*/6 m3 _9 B8 I6 o* L
ty=y;
3 N# v" `% k4 j# e9 N; x- p" w iKey=fnGetKey();
4 {% Z: x0 ?' R" S8 B. u' s$ P if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
0 [" s0 q7 t- i$ ]+ a) p" p; ~ x--;+ D6 d/ u: G& w K5 K; n! Z% e
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0), o# B# I' s) {: D+ M
x++;) B' v+ c3 v# w* r% y. x
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)0 d; `* Y$ D# g2 c ^- S. a# ?
y--;
% \3 v4 b6 D- N9 k) {4 T if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)1 H% d9 c w1 V4 @& J5 I$ \6 @; z
y++; /*输入ESC退出并输出"YOU LOST"*/1 \. Z( g P( Q! ^
if(iKey==ESC)
6 G6 p; q; `+ d7 k {8 K, a, n# q- ]3 x
clrscr();2 V5 E" a ~8 E- ?
printf("You Lost");
# P. a* Y+ c( E# _# r- s break;- x3 {) P+ l/ a( D% \4 \
}' C, |+ n3 }6 W0 x% O, ~/ G
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/# u$ G! a7 A- @/ i& X& I( i
if(Box.x==x&&Box.y==y)' I/ h' p$ q& F1 b# I+ a
{( I1 q2 w' J1 p+ w
Box.x+=(x-tx);
2 E) @% G! P3 w& p* f) D Box.y+=(y-ty);
3 g" K4 m6 J" q1 ]# V4 Y if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/4 l" k* G, J. V$ S: p2 [( Q
{
8 ~' S$ P9 |8 g1 c' h0 X; g Box.x-=(x-tx);' e+ f* ?' R: H' u
Box.y-=(y-ty);
& u. E( T( h. }, Z) D4 J x=tx;; _- ^) T$ M) u+ U3 j
y=ty;2 i1 U8 H* c. H
}
8 Z8 }( i. ~. w t break;, V' t/ D( Y7 a2 Q: M
}
. y: h/ V6 T0 K n" C clrscr();+ g/ T# E: u" j7 m
}
# w% D. _$ R. g+ }9 \getch();1 U- b7 C9 Q# [ X3 \
}; [9 D* N" Z: t) A. d( ?# g
2 p, B* j- _! Z% e
6 ^. t# T M1 A) u6 \5 p$ S+ W! L
& i E8 f* C" ]5 P! R………………………END(复制上面的红色字段)………………………………………………… |
|