TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的
/ ?' q3 P9 E' d9 I/ }功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。
& [4 i }4 Z/ H1 A$ P9 Y" [ |
) }0 [& I/ }* J o; r% y p; V; Q用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,9 Z# a' ^9 H, m$ t$ y! Q
象PC- DOS 、* B# T T7 J' V% r4 h. b
) d' o N9 P! E. v) J. _WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
* D' ^( B; r( i$ Y. x" D2 c6 V! X) C( p0 w# i. D
1. C是中级语言 ~) e' U" n3 T" }/ \) M$ w
$ W! H$ m! e. _' I' I; W4 n
4 ~( x a- j1 i8 ?它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
# n% ] m" ~+ b B: S# f
; m4 M: N( J7 c% z, e汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
" L! M" S/ i2 t0 ?; q( Z2 u* e6 {6 z
2 d0 s- s/ r+ w- g* j% B/ O5 Q9 v
2. C是结构式语言
6 s0 T( ~1 z6 I V7 M3 ~
' b; z2 m9 ^ f) O0 X# @. b
+ H) e( P5 Y' H, x结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的- e2 S* Z8 f& i
2 i7 q5 p) S: s+ x: E; y$ W
信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调" f* E. J, [0 L# L8 u9 Q
$ r. q1 K9 |2 i试。C 语言是以函数形式提供给用户的,, ~1 I3 Z: }3 a8 [0 |; A# E3 `/ d& c
这些函数可方便的调用, S8 E9 t: U1 J3 Q/ p' X
并具有多种循! I7 a! Z) |) T1 x! B
8 |* y! q% M6 y p( U环、条件语句控制程序流向, 从而使程序完全结构化。6 E% s( i0 m4 C
2 U/ L e7 b' a( y/ N. k0 p
& y- B# ?4 [' l% I K; D
3. C语言功能齐全' p& _7 @" F5 B3 @
5 R. {8 t) f" j1 Y) x% P: K
6 V. P6 \( m+ k1 h) K6 P* JC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另, t1 L, ~( Q" E# `% w
6 S1 q3 [- B/ c6 d
外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑' P1 |- X# A- V: b+ G" i) n6 E; y
" w) \5 R6 }( V S1 C k( Y1 s判断功能也比较强大, 可以实现决策目的。9 K. l3 H! z! G3 r
" o) e8 W3 _6 M9 S3 C4 s; q/ g
; ?# ?9 [) n% A% ~! e
4. C语言适用范围大
2 Y/ c7 Y" {5 c7 N3 t; _9 A( a# L& B6 f" l
& r; Z" c2 A% m6 n, C' s) HC 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于; P& E9 ~; q& k% P+ V
3 I' l6 a# l1 n& W3 k: Z$ h多种机型。
% J) A* } G6 p
3 u; o# X) [2 K8 y6 b$ f/ {# `1 P1 d
# O! t0 r& I/ ]- |0 `6 w- I9 \+ G- S4 P……………………………复制下面红色字段………………………………………
4 t" m' {) |. m+ c6 v2 B
9 j4 }: n) k) ?; Y
5 c! s. `9 s- V, \+ U/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? *// s% G9 e; X2 d* Z
#include"stdio.h"5 T- f" L2 O8 n9 L, U, H0 m) _
#include"bios.h"3 ~- B4 P' s' }5 N
#define LEFT 75
5 G( K6 w. e6 T, t#define RIGHT 77
( N5 p6 \4 j8 A#define UPPER 720 v, r% \" p1 p" Q( P) q) J- w
#define DOWN 80
4 Q+ v# x* ~9 Y& P#define ESC 27# Q( | {& l& @( O/ h6 {* q5 Y
struct Boxss /*定义箱子结构体,其中包含坐标属性*/. L1 {+ @; u' w, ?: M. W* f9 E
{
) P2 r2 y- t4 x, Lint x,y;
_ a( O# T; t3 m7 J/ w};: O! r, M4 k3 x ?, e
union keyboard /*定义读取键盘码的共用体类型*/# D, ]( H% @7 {$ s
{
3 n% I9 f0 T9 d* }% R$ junsigned int iKeyInfo;
3 m+ r: N7 y6 y+ K8 Dchar chKeyBit[2];
1 E/ g3 I# g, j0 N$ E};
8 \6 w# J* g" q9 O# ~int fnGetKey(void) /*定义读取键盘码的函数*/
* D7 Y U6 p7 K( e' f6 x6 R! |{+ C& Y% s9 H1 n* y- a
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
0 j4 f, P8 F2 b4 [, X$ |8 q6 Qwhile(bioskey(1)==0); /*检测用户是否按键*/" Y ?' @ p$ s; [$ h A
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/7 X, ^8 G0 S0 Q7 g X5 G
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/2 q8 Z" D8 E; H# t) F% f/ J4 j. _
}+ r, f2 e1 c5 R) r! a. ?6 k4 p
void main()
) [( F$ n# d# m1 M+ l" z F{5 N2 j% W; z3 M" a! y
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/; {# X- \0 G2 W
struct Boxss Box[4]; /*定义箱子数量*/4 P2 y. i: S$ a- \- V
int chMap[10][10]={ /*用二维数组定义地图*/' @0 c' l5 O0 l3 Y
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
, y9 e6 g5 L2 a1 p. n0 ]( F {0,1,0,0,0,0,1,1,1,0},
* I1 X( F. _/ W2 A7 S {0,1,0,2,0,0,1,0,1,0},( p- j g- C& ]3 {- q. Z
{0,1,0,1,0,0,1,0,1,0},! G" g# s) H2 A5 F; J4 L& k' r9 d
{0,1,1,1,0,0,1,0,1,0},) ^9 `% v9 c1 q- @
{0,1,0,0,0,0,1,0,1,0},' q& W( A# {+ j) T& r5 G0 _
{0,1,1,1,1,1,1,0,1,0},# ^/ N( O) ~6 i! S
{0,1,0,1,0,0,0,0,2,0},. w8 T) t. @8 u: Y3 m
{0,2,0,1,1,1,1,2,0,0},
( [3 y3 s* j$ Z1 t {0,0,0,0,0,0,0,0,0,0},: @6 i: x6 X0 h! f' f9 N! ]+ ^7 ~
};; U) u* P5 Z4 q
int i,j;
$ L' W1 T5 |7 y7 d/ i: O4 ~9 lBox[0].x=13; /*定义箱子的坐标属性*/9 R$ B* r1 V: t0 b, u1 @9 k2 m/ ]
Box[1].x=11;/ c- l4 {( A7 e5 Y. \
Box[2].x=14;
! e3 ~- X- U1 A5 Z! F; vBox[3].x=18;: h6 M9 n( {0 K* r& G
Box[0].y=8;
. t! {% h Q! L# g3 r9 dBox[1].y=7;
$ ?6 r0 }2 p6 x- PBox[2].y=13;
$ j9 {3 z, u+ @+ J( }8 XBox[3].y=7;# p+ B) q9 o; k
while(1) /*反复进行求移动的坐标运算*/ X* n% |0 |6 K" z4 v
{- j. U1 S0 a' u* C
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/! y2 H7 i# O1 y) _$ z a% p# d0 ^
{
1 H- K) ^. v( C gotoxy(10,5+i);9 Q" o; A' y3 E1 Z8 q N% u
for(j=0;j<10;j++)1 D. X$ ~6 y5 y
{! N0 X! m. E- z a3 X7 } M- D
if(chMap[j]==0)
4 B/ r) c5 G8 L% X& m2 j3 v printf("#");2 @4 l- O( Q$ ?/ @1 I
if(chMap[j]==1)/ X5 {8 f& i3 `% R! Y
printf(" ");" T0 s I+ |9 V2 ]) E! n D
if(chMap[j]==2)0 J E b6 \# u2 L9 U# }) Z
printf("X");
: {( h: s) B2 O+ ^1 A% W0 x }" ]1 f3 P/ H, z, {3 ^* W" V
}
5 z8 B. s1 S5 L0 k W5 ?' ~ j=0; /*判断是否所有箱子都在目标坐标上*/% x9 a8 w" v3 w- U' O Q
for(i=0;i<4;i++)
* m) i! N! F0 a& P$ b- B if(chMap[Box.y-5][Box.x-10]==2)
5 B# c! B) ^- n( X9 v: ^# X j++;
# M( s: b/ j( ~8 P& J2 ? if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/+ h/ b8 {7 V7 u. y$ G# o/ i
{' I# u8 u. _1 ?; B
clrscr();
6 C4 N$ g( B( z9 ^9 u- S" C printf("You Win!");
! U8 p, j, u# v2 W break;
3 g! ], I# _" s# q) F }) ~' |3 X" A ~
for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
~- Q: W+ D6 O% t) e {
# C9 |% C: H1 j! F) i7 n# i. |! v gotoxy(Box.x,Box.y);
/ v$ }( |2 X3 L& n0 r printf("0");
" I: U1 s, V8 z- a }
M/ t6 s9 D' {. ]) E: y2 m gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/; r6 a. R9 t' j- ]
printf("*\b");
0 n, |! {* B! i7 z( U tx=x; /*记录本次移动前的坐标*/
: R/ l) j5 @8 A3 ^/ e1 \ ty=y;
/ Q/ E* X! S; D0 C" D iKey=fnGetKey();
! v; P! t! k) W/ X/ i if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
, w/ K( b, w; i# l0 p$ x8 R S x--;8 H" _. R2 T; n& ?' w
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)7 p' k; m4 _% n6 g
x++;
0 S, s/ E8 ~3 \8 V. G4 X7 T if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
" N* o& y) T% V& D. F" l) ~ y--;
2 a0 P7 L1 h6 ~8 F if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
7 S [2 L6 u' y3 G9 Q% `8 N y++; /*输入ESC退出并输出"YOU LOST"*/# F3 e: o' a+ h% ]- b! l, n N
if(iKey==ESC)8 Y9 J! C+ H& J0 }
{* H- x) |/ N0 z9 s
clrscr();
: V, b; s' z" |; h# V+ ? printf("You Lost");
2 Q' V, u! n0 W/ t+ s* D break;
6 h. z1 G$ L# c; b8 \+ \ }( [* b- \# o* a9 Q9 T. M
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
/ p7 ~, R& @8 v' K5 n5 f) W if(Box.x==x&&Box.y==y) c. ]5 k/ h D
{
+ d& s- M& k6 o6 V4 Y9 U Box.x+=(x-tx);# Q" X) ]5 i# R" \& C9 Y& ~- k
Box.y+=(y-ty);
1 z1 k, t, P& l if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
0 }; i6 R7 j2 T; U* S- N {
8 y* u4 ]$ D% b0 N7 { Box.x-=(x-tx);; F& N5 ^9 X1 C% e1 [. r- l) z, A
Box.y-=(y-ty);
7 v& ~8 R3 X* Q x=tx;
1 @3 }% u! D7 a$ z. [9 o y=ty;
" Y z5 ~! \# j7 e }
1 X) k: |) a# I* ` break;( [" A) b( r: z! ?+ p# Y
}
$ Q1 z5 ]# H3 [ I3 C clrscr();
8 Q( n; G3 e& j3 x: K/ T$ i+ V }! C4 a+ K& J! v8 b& F: |8 J
getch();
* ]2 ]5 H8 n% P) h3 y}
. X' Z7 t4 u4 X; b2 {
/ K$ M- G5 g$ |) w4 J% q( s" P
* C, k/ ]7 w! @1 P* D( f 4 p' _5 m( D [) y5 Y
………………………END(复制上面的红色字段)………………………………………………… |
|