TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的& J' e. }$ g( }
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。
7 _) `! c& S" v% F/ w+ H
4 _+ K' x( R- w( o( _用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,
. `1 E. {/ j% V X象PC- DOS 、
1 ~4 ]6 w# h0 p Y1 q7 g; ^1 o8 f) t. v; P4 o/ M' d/ x) ~
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点: * c# @3 Z( C1 d
. a0 }7 _; W/ ^( j( {$ R- l1. C是中级语言
7 d/ p k8 }7 Y2 c+ d. _ T
5 M% x6 ] {) b" ~! H5 g' d& O1 B5 j# ~! l0 Y x4 Q7 v: a
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
- L7 E% r- y% t) W/ P) e! v$ D; [* O+ u# l3 G, Q
汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。! Q! Q7 N' z; d6 K6 c6 a& a
0 B0 y& Z$ K _0 ?$ j0 ^8 O, @ [3 ]1 S d
2. C是结构式语言0 p& S# g' ]% Z3 N1 Q
: c \1 X$ ^6 i6 K1 A
& R2 C% ~" X+ X# [* v1 B结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的% k8 g; b% u, g( O7 j
3 Y- h* I9 H6 b! E信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调
* j$ u* [" O1 F" M- a1 j
* p6 H# H! ]! W, e* U: I% T试。C 语言是以函数形式提供给用户的,
$ z& Y: O$ b, u- z$ N这些函数可方便的调用,
$ I& s) Y8 E( V: k$ Z# O并具有多种循+ D4 v. x: D2 P1 h
" o: d* c# U$ I2 Q' e环、条件语句控制程序流向, 从而使程序完全结构化。9 R3 i m5 r/ E; U' U4 u: C6 ]
$ Z# L5 i! I2 a+ ?7 V3 H: d o1 w/ g0 f+ \
3. C语言功能齐全( M. E/ { C! K( Z" B
( ~( E9 Q, F: ]/ K4 D# \ T: D+ s
5 B, X7 I* l3 ?3 A2 P- K) t
C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另8 `1 |9 s: s L3 L
1 f5 K e/ Y0 R5 D外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑
$ ?$ H. m. c/ g2 u) x9 O) i5 H: s( ~
判断功能也比较强大, 可以实现决策目的。9 G6 \9 m# w* R8 R; _& \
& A& E" U, V* S/ [# l6 ~. \6 J% A4 M+ z4 w) _- V' A, i. [
4. C语言适用范围大$ L4 n v9 U4 k0 g5 U- o% U7 W
3 C7 Y( s% e& M& y0 B& h/ t* w& r( F( h& i' T3 x
C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于- b: L" k+ r7 V* X2 t, C# F' O
0 u! Q1 x7 T) ^9 [" C
多种机型。1 M' b. ^' L( @4 E
, O+ I7 W8 [0 N+ o
. n8 C) v$ G5 n……………………………复制下面红色字段………………………………………6 x& j8 O, I: n! w( p
: n. a0 T& K8 t" Z! x
! p% g# Y. m- ?! [$ n: V+ F
/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
1 k* Q' ?5 j' b/ F. g }: A& l- b#include"stdio.h"
+ h/ a: ~" z+ |: B+ L( \& i/ X6 W#include"bios.h"
1 V7 S1 S) {/ |3 e2 R- Y, H6 G#define LEFT 75# ]! X& u( V) N4 v7 r
#define RIGHT 77
* _- ]5 N+ C" B#define UPPER 72
" F0 K% r8 x; H#define DOWN 80* a4 P# V' e( ?5 @
#define ESC 27& T8 z$ n8 o$ S, b' K
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
8 |# b/ L0 k+ j5 {9 ?, g{
0 ]# E: [ T3 Sint x,y;
- t/ G6 X8 j4 @0 c3 C0 m};2 T! b" q' R; U* `
union keyboard /*定义读取键盘码的共用体类型*/
, m' {- `+ `0 G: n{
& K L$ ~. w1 Z0 E, L% |5 junsigned int iKeyInfo;
* Y7 ~. o: l1 C! x# vchar chKeyBit[2];
N) ]9 ]- j: ]* n};
l( Y7 I4 d! {7 I$ J( i# s& M' C/ }int fnGetKey(void) /*定义读取键盘码的函数*/) s6 J+ U; ?3 ^6 r" j
{1 R4 g8 K, O+ ~ \6 Y) @. F
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/0 P# Y B3 c6 K1 c' M
while(bioskey(1)==0); /*检测用户是否按键*/" Z% ]# Z' N: X0 i/ r4 w. A* O; n
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
2 L* {, Q! o0 J& f: ?return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/- R3 p0 ?* Y5 c7 z
}
8 b3 }6 n- [# K* a% lvoid main()
+ L) F# g b5 `: y$ A/ E; C{
, P" |# u1 k8 E* c& kint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
9 t4 p- t8 P$ F0 _* n5 [; o1 x; {* bstruct Boxss Box[4]; /*定义箱子数量*/& [% `: e/ B1 @6 Q L; Z7 Z4 I
int chMap[10][10]={ /*用二维数组定义地图*/) T' |7 b2 Y( S2 [/ U
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/2 k7 \- X! e* _7 W G, q
{0,1,0,0,0,0,1,1,1,0},& w3 N3 s+ |; u! r3 h7 L
{0,1,0,2,0,0,1,0,1,0},5 Q; V2 G3 _2 c5 J$ Z) J
{0,1,0,1,0,0,1,0,1,0},! s2 g1 S1 m( K3 V, N
{0,1,1,1,0,0,1,0,1,0},
: t$ R! E. i- W3 h/ p7 x" o/ y {0,1,0,0,0,0,1,0,1,0},
( v R4 c. u: \1 ?5 Z9 Z {0,1,1,1,1,1,1,0,1,0},+ _& e1 V3 Q% K5 |# q' Y$ v; o" ~
{0,1,0,1,0,0,0,0,2,0},! X- K5 x. c3 T" a3 p: y
{0,2,0,1,1,1,1,2,0,0},' Q2 T7 ]0 C9 o* F8 \' O
{0,0,0,0,0,0,0,0,0,0},
( S% {$ g9 D' T6 I f0 t3 O+ {5 v# F2 P };
2 w5 C) h/ ]" H. b2 dint i,j;% R2 C% ~9 g! l& f
Box[0].x=13; /*定义箱子的坐标属性*/
$ a, V* X, Z8 wBox[1].x=11;
& `4 z2 H$ x) l2 S+ L4 W) |# f, cBox[2].x=14;" i: ~- @' {8 ^1 G0 [1 U
Box[3].x=18;* M8 V$ W( w' B$ v6 ]
Box[0].y=8;0 P7 ], g( A: c& W& [
Box[1].y=7;% y" M& g) D7 ]/ l8 M; L3 E
Box[2].y=13;/ u: J- z0 K1 ~0 F$ W; h9 P
Box[3].y=7;
0 R1 h: [, u: M+ g/ { while(1) /*反复进行求移动的坐标运算*/
$ I# v$ h2 Y0 Q; ~- b {
& K2 @6 u9 Z# f2 w7 u: N for(i=0;i<10;i++) /*输出新地图(刷新地图)*/
3 n! K( F% M9 l8 Q- r0 l1 {$ ^+ a {
y" w6 t1 X- I" F# N+ F gotoxy(10,5+i);
) a, j! s" u8 O8 r. m7 \* B for(j=0;j<10;j++); r( l3 Q; o. | I
{7 Q8 ^& [! D: b# `) t
if(chMap[j]==0); [2 X/ a/ F% |! P
printf("#");0 j* u" S' k ^* Z" V7 N
if(chMap[j]==1): X1 v: ~( y5 D
printf(" ");
g( F8 c- c! Q$ P& _, }) _ if(chMap[j]==2)
2 K5 j6 j/ R& I4 x" f printf("X");& P- K' P$ I5 L
}! S# A$ W% |8 ^, z% O# I, B
}
9 c7 j& q5 Y" H5 j. }) W- n j=0; /*判断是否所有箱子都在目标坐标上*/+ n ?. ]% `# G& v9 ^3 B
for(i=0;i<4;i++)& R. D% z) t9 n) O& d3 ~
if(chMap[Box.y-5][Box.x-10]==2): I E9 j S1 s1 W
j++;
6 K; \0 ~8 ?+ _# y if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
6 p; D @" n6 F {
& U- F% N: v+ F4 S clrscr();
# n5 ^# }: T/ R7 v3 P5 u printf("You Win!");
$ P1 \+ r2 i9 z1 q$ T$ r break;2 c5 [5 w5 N) a
}
! [( u) {; K. `4 M: ^ for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
: ?0 e3 J: _3 `0 ]/ }% b {
6 r- F; |; C% m x gotoxy(Box.x,Box.y);+ Z& Y# L+ a# p7 |1 q. R
printf("0");
7 K- C2 c3 @3 v6 U }
4 z- A; {( `/ c( x/ X gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/" P& V, E" T* j8 J; s- Z
printf("*\b");4 y9 P2 Y# Y- P: M6 x; j% H
tx=x; /*记录本次移动前的坐标*/2 c- z% q% e& E; k. S
ty=y;
4 `1 @8 w$ }$ i- P- T iKey=fnGetKey();! Q1 P8 h# l' W0 Y& @) N3 S E
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
7 O8 n, K3 h- d9 g+ L x--;
, F: C" v8 A! g) w! u- M& L if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
4 l8 X7 o9 G/ }% u' B5 b! r x++;& ~3 x; O* F* D1 p$ k) ~
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)* u1 c# D' O; H5 ` ^* A/ M; o
y--;& v! S2 K# `. R& M O. b- H t9 W
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0). Z0 _/ ^' B9 K ~+ u0 j: X: H
y++; /*输入ESC退出并输出"YOU LOST"*/* |# @ E1 B7 k3 z4 U
if(iKey==ESC)
) ^6 g1 z2 d/ w" G; |/ y5 t: l {) T) P/ F4 m0 O7 _3 ?9 r$ {
clrscr();
' ]7 b, h% _) o$ G8 p9 e! { printf("You Lost");% w" g5 N: ?' V
break;/ J0 J6 C' q5 N! K$ o+ _
}& K- @- K5 |1 c, Y. P
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/- O0 V' d% [7 I6 l
if(Box.x==x&&Box.y==y): U. p- j$ @2 ?0 J; |8 v) J/ W& Y& T
{
' u9 U' S7 i1 W, _: D: h/ w [ Box.x+=(x-tx);1 q4 e7 q% T8 t1 ~) j% u
Box.y+=(y-ty);
8 }! s, Z! M5 [1 f" S+ } if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/ i2 |* l7 h2 V
{. B# [6 |! n# w1 N
Box.x-=(x-tx);
, ^; g, b: O& }+ r% E Box.y-=(y-ty);
/ m8 g1 N, }6 o# _ x=tx;+ {; x. T% U' U1 c: E- V" y9 Q
y=ty;
, F. O" Z- _' M: } }5 \" g v \1 G3 N: m& o7 `9 |
break;
8 R* _; C! W l' ~, V% [4 O }
& F/ {: l% `3 ?' ] clrscr();* ~6 B& _! S& o7 v
}4 m+ e; M3 ]; I+ F( `
getch();
5 r0 j: A& H4 q2 Z}! b& b: u; U% R' i/ _2 {
8 L- P2 p7 c8 Y3 M: l( j- O
/ G" K; V6 V7 k% D; C! u" R
0 j6 V; R/ ~$ t T( [# z! m0 A………………………END(复制上面的红色字段)………………………………………………… |
|