TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的7 l, [& c% X+ m9 @
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。' l N/ W1 E9 Z- B& B2 R6 b
, U; v1 `; j( W( i1 f( c
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,; M. D9 B( d/ o8 H! |% u
象PC- DOS 、
; Q u8 _6 W% ]9 H9 y, \0 j, e- Z5 c s
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点: / ?3 S! P/ C: e4 q r% ]
5 d; U6 J" f# U* |5 x w
1. C是中级语言
! w; M+ Q* \$ |; h- h8 Q% M+ d% W+ R* h3 L* k. ]. G& y! I
1 Z4 Q! B5 L9 A/ J* E
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
3 m f9 U% T, {+ e1 V5 a
" X" Z; G) L( A( `5 L! r; b汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
& H5 @4 U3 s0 j3 D3 q3 ]: t# J1 ]' P% E4 [
* }; n* m% H9 {# q5 t0 g
2. C是结构式语言
9 S* v |! @" [2 D4 \6 z7 u; z! S* g* p$ v* E8 S3 D
1 z% v. e2 n& `
结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的
' b( z3 p# {, h! R7 S
! K) R, T- d" ?8 L信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调
6 u& x$ u2 @# r& W9 D6 j2 A% j) Z* Y. J5 h- R
试。C 语言是以函数形式提供给用户的,
* d, v. Y" T7 a" j# @! r6 u/ [6 B4 W& X这些函数可方便的调用,
9 x G# {# b% a; g/ o. l2 g. a并具有多种循0 J! O5 `; R% l7 J/ q
$ s( e) n2 m/ ? w; j环、条件语句控制程序流向, 从而使程序完全结构化。
5 t% r6 k+ E6 B* g7 B' N7 @9 T, J/ g: I0 u
$ y' O- S2 W9 K; L4 X
3. C语言功能齐全
% k0 P3 B5 D5 p% u7 a, R: H1 z @7 j1 v2 C9 m1 ~
, r, ]; b, \! U9 Q
C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
7 _4 K0 F+ O/ r8 k
6 r* |9 [( ? H8 }, ]外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑
8 `# E/ n* E# l6 L
9 G$ `3 n% q: N r V5 ]- f: S判断功能也比较强大, 可以实现决策目的。
* q2 p4 ^; p% y2 p3 Y
# L& G7 }( q) N8 Z
0 G2 d0 ]. ~8 M$ I* p4. C语言适用范围大1 Y, B3 E+ f o7 N, f! F
' X. ^* ~6 B5 D
; r0 d6 N& `4 z5 d" L5 d" Y6 o! V
C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于
' x1 C/ m8 ?1 B+ @6 W; l+ K5 r- b+ {' @% E) z% z& w
多种机型。
3 W. b r% R6 q7 R# o& P0 N
; O. n5 j( J- _( ?3 t, v$ U# p. z4 { : W5 g6 ]( g; k R! X
……………………………复制下面红色字段………………………………………& W* t# p2 W+ y$ b7 t8 t
2 v1 D5 g, m/ }7 _' q) X
+ m0 ^6 }; j6 }% p
/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
$ S; t4 I1 T9 h. c( W9 m#include"stdio.h"! L; u7 V* }/ M7 z; I
#include"bios.h"
5 }; p; e0 z2 u* D5 Y' X' l& P#define LEFT 75# V$ D7 ~1 C/ g' m8 X. ?- Z( h
#define RIGHT 77
# a8 H9 }& `9 x#define UPPER 72
+ I% G0 J8 v3 M#define DOWN 80
0 t+ r1 @5 p, C3 t#define ESC 272 W4 v( F8 z( S" G
struct Boxss /*定义箱子结构体,其中包含坐标属性*/- y7 ]; S" B( y4 C5 }- S0 Y: {$ d
{
4 {1 U( t$ G/ v& c3 ?int x,y;4 M; p8 k3 k! b, T! A
};
: ^( f% f2 A" N/ ]8 Cunion keyboard /*定义读取键盘码的共用体类型*/
1 i7 a# y1 y0 n5 K: ^# Z; @$ b6 {{) ]9 f; F6 P( M5 _4 G6 D$ V
unsigned int iKeyInfo;
1 p9 \4 ^: t: Y. @1 ]' |char chKeyBit[2];4 D& o; n5 C4 J$ o. \
};- a I- h; z; H& y! l: k9 |
int fnGetKey(void) /*定义读取键盘码的函数*/
6 j8 {& m$ F5 P8 a7 e{+ a4 t* A, @1 J, \
union keyboard uniKey1; /*定义读取键盘码的共用体变量*// Q0 p1 b: A. e2 w5 P1 o7 V! X
while(bioskey(1)==0); /*检测用户是否按键*/
7 G4 n. }5 [2 S( \uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
' E }$ x& K) l! P1 ]# b: Xreturn(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/
5 K% d. T# {% d# m9 Q}
# Y/ ]0 _ {; Y! }2 Mvoid main()1 L# ]% y2 N2 g
{
9 |$ H& D8 u( ]! ]1 rint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/6 [( F3 p7 d/ P a2 c! H" t
struct Boxss Box[4]; /*定义箱子数量*/# K& D# V q2 W( d+ p# i: w; Y+ M1 _
int chMap[10][10]={ /*用二维数组定义地图*/4 `+ ]6 C9 ?# e* g
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
+ t# r) \$ W# z: B5 [& t {0,1,0,0,0,0,1,1,1,0},
$ _, \$ S0 j6 o- O; G! K {0,1,0,2,0,0,1,0,1,0},
) I' I7 t' A" z. j3 q- _4 I {0,1,0,1,0,0,1,0,1,0},
/ e) T: h, W, u9 D" h. G' p {0,1,1,1,0,0,1,0,1,0},
! I/ ]0 I& l4 f; y. b {0,1,0,0,0,0,1,0,1,0},8 I, n9 e6 M1 k$ n A9 Z
{0,1,1,1,1,1,1,0,1,0},
4 A0 I3 R6 U' A; m5 y# f {0,1,0,1,0,0,0,0,2,0},
2 S% y3 `: W0 e% D {0,2,0,1,1,1,1,2,0,0},, ]2 ~3 V3 Y a6 k" u
{0,0,0,0,0,0,0,0,0,0},8 _7 Z' M8 L' p1 q2 G3 w: r; A
};
; I0 R$ d7 s- O' C+ qint i,j;& Q& _* E Y: c2 I( c
Box[0].x=13; /*定义箱子的坐标属性*/
9 e4 m/ I2 t0 Z1 K5 H; i& ]% NBox[1].x=11;
f( }% U5 f/ g. N& m. k/ P$ TBox[2].x=14;
! m/ T0 I! |8 W7 o9 Q) fBox[3].x=18;' G' H _6 \$ O6 K3 U! G
Box[0].y=8;
/ m Y M4 S+ k" ]! FBox[1].y=7;
" R4 u5 |2 Q0 j. M) WBox[2].y=13;
" O9 s. E" G+ {- Q, k9 pBox[3].y=7;/ q! R" b8 u$ B% Y% z! {/ e
while(1) /*反复进行求移动的坐标运算*/& N( @5 e" G0 ~
{/ J1 U" \7 X' d- h
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/
' q2 i _' s% E6 V2 [# N5 | f/ ~ {
' O' O1 Z* B) l gotoxy(10,5+i);
4 D8 ?5 t2 \' K2 w( z. J( {" ` for(j=0;j<10;j++)
) ?3 o0 [' ~4 G% B {
2 m$ d$ J# @+ k% p" r if(chMap[j]==0)2 d* R& o3 x6 o4 p8 X3 _1 z
printf("#");* B% K. O4 N- [2 r$ y
if(chMap[j]==1)
8 L- B" }9 G9 R+ @, h; n7 T8 j1 b* j3 U printf(" ");
+ k5 ?* K% A. N% @- D" x if(chMap[j]==2)
d) m, g5 J8 K$ E" H printf("X");
, n# n' Z* e7 v: R& L }
; X: d" }6 ]+ P) u# O }- v# ?, A. o( [8 |: Z" V
j=0; /*判断是否所有箱子都在目标坐标上*/
) z A+ y7 v1 ~ for(i=0;i<4;i++)4 Y0 j: N8 f& c
if(chMap[Box.y-5][Box.x-10]==2)
0 p9 k* C2 S( E' q) d6 h% \ j++;
; B! g. J' O7 z6 N8 b9 v, f% o* S if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
1 h. g" B3 {2 \; \: Z" ~. P8 } {
# K, P1 u- @6 F h9 O clrscr();% r# i# i6 Z1 B
printf("You Win!");' j* o/ `+ o( n
break;; V2 k* |8 I& J, U' n
}
& F2 ?: ?/ a# C7 G for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/4 \) \" [) z( n4 |- f3 o+ ^3 V5 O
{, a; d( G& \' ]& I6 E
gotoxy(Box.x,Box.y);
. Y: m4 W7 w4 U4 V: | printf("0");- Q) \' R! e1 s3 Q, u% `
}4 g- I8 @9 R% B, \
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
6 H2 m. O# m& j$ x* | printf("*\b");
9 r, \! S- K. F2 E* ^ K+ B- A tx=x; /*记录本次移动前的坐标*/: N; j# b' U6 ~6 [
ty=y;
$ q# C! W6 x. V iKey=fnGetKey();
0 u0 u1 ^" B {# b4 U; s if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
8 t; H3 \# t# d5 q3 N' l/ a: h x--;/ M7 Y3 q5 W' m
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0). \ ?& k/ {* s p# K5 p# c/ D
x++;, ^5 n, t C, ~ P
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
5 s5 ? f8 R3 Q) a y--;
1 ~8 B: `5 @. D, s& P# L2 A2 r if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
: m8 R0 W1 n5 L y++; /*输入ESC退出并输出"YOU LOST"*/
* |) m |3 U. O: F if(iKey==ESC)
- e) R; ]+ R+ t9 t* [# T {5 ~; q {, p @; ] ^3 c' `
clrscr();; K3 c; ^; T; T' `6 f, s5 g
printf("You Lost");
$ L9 \4 Z. q- \ break;
7 J G! P* d: e }
7 I8 q' H9 b8 K$ S) N* ? for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/: ~& m: n2 S T0 Z, p- f* ~
if(Box.x==x&&Box.y==y)
5 q5 \8 _. z7 ~8 [8 T( B" E3 ?2 y# U {& s( q/ k( p' q2 V ]
Box.x+=(x-tx);
$ n k7 D4 \4 _: j. [) b Box.y+=(y-ty);
- F" k+ M# {; [% {; q3 n if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
. U0 A+ R5 U+ w% o! m$ {9 O {
7 `/ y% c% K: E" i& r( V Box.x-=(x-tx);- b$ |$ D, K6 e
Box.y-=(y-ty);3 @; [1 T- S; U( `5 u) b
x=tx;" c# P6 L {2 Q# i# M! F( {; n/ z: g
y=ty;9 O5 p s: R8 O4 U; }
}: X# N7 k; c( i. d2 [8 W3 e+ N6 E' N! o
break;) }, U7 d D2 k0 F4 A1 Z
}0 N) k% ^+ @6 n* c
clrscr();$ ]& B; V N' Q! q& b0 _
}
3 u* Q, c* f* E# x7 {getch();
( m# ]3 t! u* Z3 i}
6 ~4 k; z; D* T: x) Z6 K3 K4 n+ J1 N% q5 C {
* v. r! e5 S8 J9 T# p
7 m: Y! X! c$ |3 \, _4 O) U6 Y1 A………………………END(复制上面的红色字段)………………………………………………… |
|