TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的 Y$ R: r ~4 r
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。5 X# G% j6 t/ K0 l& z
+ _( q. Y1 C, S) K, [+ S9 d用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,
, y# @1 R7 X6 d( D8 {象PC- DOS 、. Q% N6 m0 R1 \% H4 X5 M. U% I+ x
6 m$ a, E' F5 \0 }
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
% G5 j7 q: X" z- q0 R
. U. C* _' C" c. C6 I0 c1. C是中级语言
?8 A5 _0 H0 y8 `8 t( e e6 J' _) `0 z( O8 E! R
0 B: t* b2 F9 ?! B1 w0 l( C5 l
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
1 o4 B: X& X. v( d; Y
1 q8 n/ S' H* h! [% V% S汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
% W2 u# L! \% N% s! V4 }3 B E1 p. v+ k# m1 o8 o0 m! x5 }
5 e& O+ X8 Z8 N4 S! g4 V K
2. C是结构式语言& y) r4 ?* H" k. i( f: ?
9 _3 [, D% ]0 `) a
! p! u$ s) A& L" {+ [) C/ h: g9 K结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的
- `- a; |# \, l3 G$ }
) d8 ^$ V* u! D& ]信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调0 Y. G3 n3 L' C# R
, E5 k& r: P( {% w
试。C 语言是以函数形式提供给用户的,3 m* c1 I" {, C# R1 W
这些函数可方便的调用,
$ G2 z2 ^+ W$ O9 u4 B5 u" t, p0 a# [并具有多种循
) Y9 N$ I9 Z8 Q' W3 K# Q/ y5 J: R7 z' A, ^, g: ~" @' \
环、条件语句控制程序流向, 从而使程序完全结构化。3 ]0 g/ K. e+ t' A. e
$ k: b7 D: C; b% |5 a/ z& i* Y0 o, K7 y/ M. H* Q) {3 j
3. C语言功能齐全
7 ]" r$ q; r) e% S) z. Z) l. G0 m+ b$ C" d' z: h6 y" e, Z
) B: V8 g: w Z2 h/ _2 K9 nC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另; R- Q3 W% }: A" i0 O' ]" g
5 @1 T- e' {8 l) a. N3 v4 I外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑
G) v3 e- [9 G- C; X% Y
) A' h& N8 b2 i8 h判断功能也比较强大, 可以实现决策目的。( z, h9 o9 m$ Z) R/ d! P0 R
! F6 ?8 A7 V& L. e1 B. R# U
3 m' ?* K* S, x4. C语言适用范围大
4 ]$ ^9 `7 B. y
9 r8 Y* j( g; ~" P T. F: c2 M& z* b; i
C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于8 B3 @8 o9 z( H2 L' Z* Z
; A- E( N. u+ b+ |. X$ W! k
多种机型。' Y, ~- Z y+ m
* v/ L; H9 T' q) i8 S, a 0 a* q; O9 O6 `/ F+ r6 Q
……………………………复制下面红色字段………………………………………+ h, s: I4 j0 x& T& k7 x
; H" U, @4 G! x
2 \4 g) R; S3 h4 E, J% }; u
/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */) s' e* R4 ]/ t* T$ s! @
#include"stdio.h"
& A; E% u- `# U#include"bios.h"! ^! q) ]' d2 V6 E
#define LEFT 754 v7 M' b& L' t! k7 ]
#define RIGHT 77
7 Q4 W" w* }4 G$ j4 q#define UPPER 72+ e H( s/ o o, B o
#define DOWN 80, V" E$ z0 B# R
#define ESC 27: f+ h5 A; |4 A% o# R
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
8 g. Y/ K% s% q4 h2 u# b% e6 X{- u# m' b! k* s: L' I3 f1 B
int x,y;
7 O! h" G5 _0 N9 ~5 ~};
4 {9 b8 P* N1 s5 h: Hunion keyboard /*定义读取键盘码的共用体类型*/
& S2 Q1 l' K9 ]. U, w; ]! S# E{, g& v1 H1 ^( o; |
unsigned int iKeyInfo;
- ?$ ^$ a K& Fchar chKeyBit[2];2 K3 Y( D7 T( `" t. F4 ~, S. p
};9 O) y7 T0 D0 k( K6 A( e5 E2 ]
int fnGetKey(void) /*定义读取键盘码的函数*/* A4 j; ?$ @: n# ]
{
( j& l2 Z" y$ v- X+ K4 q# yunion keyboard uniKey1; /*定义读取键盘码的共用体变量*/
1 Q% A v' x; r0 P5 swhile(bioskey(1)==0); /*检测用户是否按键*/
. n! O2 b& M( kuniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/1 |, I0 r/ _6 v
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/
6 l4 h! H8 i/ M; |! t" P}9 Q/ k( J: |, e5 ^
void main()
7 R* q8 P0 y* c6 l9 q{
# r7 w; [. n2 S- J/ G3 {/ yint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
2 s1 A u- J; F [; Q' O7 Sstruct Boxss Box[4]; /*定义箱子数量*/+ \; a6 b: K# c2 ^! M
int chMap[10][10]={ /*用二维数组定义地图*/: n; r9 a# v: V3 A
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
8 X- }& u) y1 I# T6 o( F {0,1,0,0,0,0,1,1,1,0},3 Y9 }/ v, }! w) B4 `
{0,1,0,2,0,0,1,0,1,0},5 R! x7 }1 x& t5 E2 V
{0,1,0,1,0,0,1,0,1,0},9 \" x0 o# Z7 T4 s
{0,1,1,1,0,0,1,0,1,0},( }# l* J4 w+ G/ U
{0,1,0,0,0,0,1,0,1,0},4 O+ J5 f3 q& o$ f$ T
{0,1,1,1,1,1,1,0,1,0},
* _) p1 e2 q8 I" c {0,1,0,1,0,0,0,0,2,0},+ d1 ~% X+ }, A: p
{0,2,0,1,1,1,1,2,0,0},/ t% s d9 q* f9 m$ }/ U E; G
{0,0,0,0,0,0,0,0,0,0},
3 `9 o, {- J9 r$ e) z2 Z };
: ^+ s* e3 i; h7 Mint i,j;
% W( [) c- g$ NBox[0].x=13; /*定义箱子的坐标属性*/
( b& U( Q Z! E, y1 HBox[1].x=11;0 M" B( D9 g# E/ W
Box[2].x=14;
$ Q& ~: Z2 ]$ L& {" v* IBox[3].x=18;
1 S1 N6 p% I) }5 OBox[0].y=8;6 V2 W4 D9 Q- q* |# Y6 ?7 S3 H1 Y
Box[1].y=7;3 S" `7 N$ O2 }# \) Y4 b% t
Box[2].y=13;5 O2 ?; {: y1 p0 _( V, d
Box[3].y=7;
: E. n& {, l# A0 ?$ f; P$ i( q4 q while(1) /*反复进行求移动的坐标运算*/
* }0 v8 e5 `+ j" c {
' b( E6 G- b: B" C/ C5 {0 n for(i=0;i<10;i++) /*输出新地图(刷新地图)*/3 D% T9 y, J% v2 z. n ~
{6 w, O$ j2 q u9 z8 L
gotoxy(10,5+i);: b& r1 A0 ~) e6 f+ o% o0 R
for(j=0;j<10;j++)
8 Z& }, @; h# C: b6 b- ~3 j2 S {
+ L$ d+ m; ]% a, t if(chMap[j]==0)
/ j5 Z& q/ g D printf("#");8 H5 ?4 w& W% N% I, W' a
if(chMap[j]==1)) E$ F5 n1 D, R1 R$ A. g
printf(" ");
) X4 T- Z* f2 ^) k0 C, ? if(chMap[j]==2) e$ }) Z. D% V+ @; Y- \
printf("X");0 w# S9 l* r- o- G# M
}% ?, k4 [- V1 H) G9 U
}3 V/ g, r( j% I3 z
j=0; /*判断是否所有箱子都在目标坐标上*/" m' c& l2 p4 ^* O: x: R; A
for(i=0;i<4;i++)7 \7 t0 y7 u# E7 v5 _# ]3 q
if(chMap[Box.y-5][Box.x-10]==2)
& x: i; w$ K9 y: E) t" ] j++;5 G z) W s/ o) z) d
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/; |. w- O) u0 }# a
{
9 U, L: o6 B1 R K0 L, V clrscr();
- h p0 E: N% G7 x7 o. h1 E6 _ printf("You Win!");' R1 a4 g# H9 E: c; x" \
break;
- W2 ~2 E" j. C/ P }
# S0 w1 k. w0 ?- D3 g( u* U for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/9 T+ j7 K" b4 c# J8 m% R
{
1 ^' ~9 e4 d6 ^9 L* B' l, T0 Y& I gotoxy(Box.x,Box.y);% Z! ^( p* G0 E1 w/ E
printf("0");
6 r( n! H# p% W, } }
8 u. y* u. C# S gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/8 A5 T5 j* o. v5 S6 A" r
printf("*\b");
4 g5 N+ B$ s B/ z% q tx=x; /*记录本次移动前的坐标*/
0 i7 i. I! B+ I! d/ N; Q ty=y;
8 }/ i, c V7 } iKey=fnGetKey();! E+ w8 ]# c( T" M& _& ^
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/& d" N. \$ q3 ^* Q
x--;) }2 ], y- ~5 X
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
1 _* q8 J( a% L1 | x++;9 V) Q B- G1 x7 q- s' ?/ Z$ j
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
) {% ]: K8 j* w3 T* ^ y--;
9 B. ~5 L5 s; A' m+ q if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)6 S- t3 I7 ~& c( T2 B1 O/ u5 Y
y++; /*输入ESC退出并输出"YOU LOST"*/
. l9 O; F; l! h: m if(iKey==ESC)
8 [4 @/ l2 j) M+ A' V {
$ v: G' E$ r) H \, E! m \ clrscr();
- j- L6 } z+ |2 ~: I3 o printf("You Lost");
3 Z7 N( b" G" F6 I break;* Q& k: E7 x; C5 i9 C, x
}0 ~3 G5 a$ q- }: U
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/5 b A3 ^3 z/ `" c2 F- T5 ]
if(Box.x==x&&Box.y==y)
" y+ ^ l% [& _& G' R {: b! a( S6 D& w2 d
Box.x+=(x-tx);
! i$ t5 V- b3 j' E* K0 U Box.y+=(y-ty);* t: [! g. k7 Z7 i- `* w4 t
if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
1 C# P) Y; B7 z; e0 P/ F( z {
& ~% R( a& @8 a1 ?( S Box.x-=(x-tx);) X8 T, g. Q5 N8 k7 `) G% h
Box.y-=(y-ty);
$ w: Y4 y, d0 D( B' B. K$ |1 ?& u x=tx;
0 ^- Y% m$ s, f: n y=ty;1 x, W* V. y2 o$ @8 T" \# I: u
}. G! A% w. z- k5 H
break;: W+ D( k o6 |+ A% J1 ]5 Q
}
1 g- U) L1 Z+ ?6 b( o clrscr(); l. C, |/ g8 c& E3 z; Q
}0 z$ s7 f) G: A" {0 ~9 q# J2 d9 \( {
getch();3 F1 u- P% `* E
}
' `9 j3 R" D0 ]$ f
) Q ?. o4 l- ]4 |: S% J
, C* D2 V8 c1 T- k7 m! U4 y& n / y) j7 \( V9 r k4 a, \
………………………END(复制上面的红色字段)………………………………………………… |
|