TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的; G$ m. ~8 b) g0 M e/ r
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。3 ~: y# _9 z. U& t& |. g' w# f$ \1 m
% ?- |4 p: F6 Z2 w& s- a0 H( ?
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,
* x/ c' h) I n( \1 s/ Z象PC- DOS 、
2 u! A, a u4 P& I( f3 [2 e* `9 P- U8 d& A
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
8 b, ^. u4 Q9 R# j
) }" n- o4 A3 x) ?1. C是中级语言
' o7 u B4 @" m- ]" w* G- @( R2 Y- ]. q
; z+ l& F8 P7 C( n$ T. ^! K7 j9 ~5 Z它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
8 {1 J9 D8 T% b; v- W9 y$ k' k2 x1 E2 {/ \% n
汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
% z( N) @: F; [0 u2 m1 O# l& X. O) G1 ^5 x
/ N0 s$ w' ~2 r% e; ], t$ o1 p2. C是结构式语言' c6 \. E# F% k& Y( K4 x
- L- l: ]. E: E
. B, i9 @$ k% l
结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的
- U: _$ p& i. F( q. U
8 }% e% j. f) e- s信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调6 \6 Q! L" N; z3 R
' n9 E8 z% x6 N试。C 语言是以函数形式提供给用户的,
. d* r7 n! o2 n3 H$ l这些函数可方便的调用,
; J. I" c1 i0 f) n并具有多种循
/ ]6 {9 F: `( i* ^0 _4 g/ X
/ ?5 e! \; h1 a环、条件语句控制程序流向, 从而使程序完全结构化。
- y% O; |- i/ i3 r# `9 h) ]& m* s# e$ A( x9 S
) H* y8 ~! z. H# _/ W, T
3. C语言功能齐全* u5 I8 j; i) n$ l, s4 C, L
! d9 I( p1 |/ Z$ T; b
; {, A# V# D) z8 a- y
C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另8 B% y" A3 v& s% h
' O5 m) J) s0 z# L5 K外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑
. E4 M! W: x$ d! a! U- _5 T' w1 ?5 R
判断功能也比较强大, 可以实现决策目的。" D+ b: a" x2 E. w
* q7 I2 N/ t& Q" w' y. T m$ _* O% k F1 m* D$ C- Q
4. C语言适用范围大
& L6 z+ R: t) P) i
6 i! b+ u# k: W' b% a& m' c# S
- w* l" a5 v/ S% u# S6 S& Q# FC 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于
) ]( t* Q8 M& M( u1 @# X5 u& c9 ^! J0 G- e4 g3 O' ^! O
多种机型。7 Q0 W/ J+ X3 I' Z/ p0 n
. `$ A" I; `2 r8 D" X7 ^7 J 1 D4 L( S) t$ d! A B
……………………………复制下面红色字段………………………………………
2 R$ `% {, D- N* Y
" b9 P( ^9 b( i- i) m
) Q; c# [* V `# J! s/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */" k: Y1 Q W2 C V) Y# g/ \6 ]1 ?
#include"stdio.h"
' o% e" Q+ J: `) d" ]: I6 B' w#include"bios.h"$ v: f4 {, S1 \$ @7 m- u
#define LEFT 75
8 d% X5 \; H8 y, D- h2 s#define RIGHT 77
) ?$ q: j% D' f5 X#define UPPER 72* ~" Y; y# P; I( \ Y3 _. q
#define DOWN 80! e& T7 k/ @9 ~, i1 |9 M' d
#define ESC 27" y' N7 ?- k8 o! G4 }5 a
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
6 r- W% g' g3 `6 j8 `8 i+ G{
- a6 t3 O! j7 C: _6 p$ hint x,y;) K* w+ L, J9 |! i) T6 ^
};& p) P* m8 a2 m6 O3 E8 ?
union keyboard /*定义读取键盘码的共用体类型*/
' V" s; D7 `5 }{
+ f' y! ]4 f ~+ K- G+ iunsigned int iKeyInfo;
* ~3 C6 g, T/ Z3 `3 X2 Vchar chKeyBit[2];
0 P/ l. |3 ^4 G};
/ S1 W7 `& b" N" a( pint fnGetKey(void) /*定义读取键盘码的函数*/
6 v; p+ M+ ?6 E{
7 E9 p- L1 }9 Kunion keyboard uniKey1; /*定义读取键盘码的共用体变量*/' h* o# z$ D$ z4 z2 a$ Q
while(bioskey(1)==0); /*检测用户是否按键*/
0 k h: ^3 q) z5 x/ x9 puniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/6 w) D$ X* w$ o, c
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/4 A% Q' z3 @9 M* j1 i+ j' ?
}: F8 c# N4 e0 @8 W; L2 [
void main()6 z3 _# }7 ]! e- K% Y
{1 l+ S$ b: A+ D6 K& R
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/4 F9 h0 H4 r: C4 Q
struct Boxss Box[4]; /*定义箱子数量*/: P! ~: h I! ?5 I9 z* D
int chMap[10][10]={ /*用二维数组定义地图*/# d9 D' e/ ]) w
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/; Q2 H5 [, r. H$ D
{0,1,0,0,0,0,1,1,1,0},
( @* Y: B) M; ^ K& [ {0,1,0,2,0,0,1,0,1,0},
. f$ k/ s) O# p: \: R' x {0,1,0,1,0,0,1,0,1,0},+ d. l8 b- _6 ?! w8 c5 V% n
{0,1,1,1,0,0,1,0,1,0},
1 I' ?# a' y. g2 | {0,1,0,0,0,0,1,0,1,0},
- z+ A4 [! F& h' R( a: X v) E: D {0,1,1,1,1,1,1,0,1,0},
, v: f- b( |$ H {0,1,0,1,0,0,0,0,2,0},
4 {; Q4 k4 I1 u8 U1 m: v" J9 O9 K, x {0,2,0,1,1,1,1,2,0,0},
+ r8 ~$ e# S6 U" W* E {0,0,0,0,0,0,0,0,0,0},) Z4 l! C# v- e2 W( m
};
N2 h7 [: d2 f( zint i,j;: r, H+ O4 y) y8 p
Box[0].x=13; /*定义箱子的坐标属性*/" T2 c1 _0 x( w. T q- Y1 ?1 ^
Box[1].x=11;# _. l5 N$ f" P( N8 P
Box[2].x=14;
% ^) i! E# R$ t* y# DBox[3].x=18;* c, S* r8 x+ I) z6 L! O) K
Box[0].y=8;; Z5 ]- [. f! s9 C7 B) ^* Y& [$ [
Box[1].y=7;% o+ _4 u" p! g- z/ p, n' B% q8 ?
Box[2].y=13;
: v8 Q6 u7 L4 e: nBox[3].y=7;
7 W R+ L% e0 _% [# Y X while(1) /*反复进行求移动的坐标运算*/
+ m0 i4 W: \! X0 K( B; e! k" z F$ u6 r {* p0 P, {* f+ C9 s- s5 d
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/- i& |& f) M* S0 C8 [; ~
{
1 u' ^' W) S7 m( `! Z, i gotoxy(10,5+i);# Y7 Y3 B' H/ R9 R. R% o* I# c+ N/ l
for(j=0;j<10;j++)1 f! d( b: l T
{
) r' V/ m( t1 ]# b. q2 K# v3 R8 s' k# f if(chMap[j]==0)
; _) a1 H2 h$ [ printf("#");
* q) r6 Z3 m& ]% ]( l if(chMap[j]==1)
" H( @7 ?( ]3 I4 q) C+ f" Q printf(" ");
- V% I4 g" f+ R$ ]" l" w7 u$ y if(chMap[j]==2)+ y1 Z: G( a- p5 s ?" x7 z
printf("X");
3 b, T2 H& p. ?* Q! q; W) @ }
% k' E% f8 A6 Z9 U2 n) U }# ]0 x& Q# b7 s7 Q: _3 f9 U8 ^
j=0; /*判断是否所有箱子都在目标坐标上*/2 O, X# t4 R! _6 C# e5 \
for(i=0;i<4;i++)4 d% p% B5 X$ a+ c; x% }
if(chMap[Box.y-5][Box.x-10]==2)
8 g Z3 ] B: x2 n3 V( w2 C5 D j++;
p* ~2 c/ N0 g2 m$ E if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
9 Y4 X V; T. C6 t6 D {' \1 G& z; o! y- `# a
clrscr();' d+ @* r+ i4 ~* D! S& c
printf("You Win!");- G; ~" S, P& z
break;( I+ y5 P; h9 l( z
}- a0 w) r; ]+ z" k1 e
for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/4 \; \- y- [$ V' J8 h
{
' m( M( M; K( D5 j8 h gotoxy(Box.x,Box.y);' ?. ^* V9 K. ^ c! d4 K
printf("0");5 H* \% ^. s' Z7 J, R* v$ i9 B
}7 z. j! _! d+ r" V3 C$ Q
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/5 A( A8 Y5 J+ P
printf("*\b");
& j% E$ W3 ?9 ]0 N/ @( }9 t* g tx=x; /*记录本次移动前的坐标*/4 V: C- ?2 L5 [1 k7 L# [
ty=y;7 W( O9 P# |4 i% f, Z" Y5 Q2 V) o
iKey=fnGetKey();$ E$ G8 Z; U0 h: X
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*// |8 [% t! c% d' j
x--;% m' B9 [+ y' _4 J. U
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
9 S9 d% m& A8 {0 L W( Z# P2 P1 e x++;
% f S, ? S( ?8 B+ E G9 x if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
* G1 d1 i' K+ z3 g% f3 m) F y--;- g/ a* j) t: U5 M
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
$ P6 K( b1 h3 e R+ o y++; /*输入ESC退出并输出"YOU LOST"*/
: k: e1 y+ n- ]2 ?% N if(iKey==ESC)
' v4 d! a8 e0 w; P# c4 [; v {
- R: W1 R5 _/ j" B9 J0 V clrscr();
) y. f( {: ~# |' H+ b: y printf("You Lost");" C4 ` }, w5 `5 S/ x; N1 R0 g
break;
% t# l2 j) L/ W( _% @! p- p! b8 T }2 ^8 d9 f$ R/ u
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/. B; M9 \( T' L) d
if(Box.x==x&&Box.y==y)
. W3 Z1 T7 [1 M0 F {$ z* e, {$ f& M' y1 {) f
Box.x+=(x-tx);
; ^2 {( S; @/ d6 ?2 \0 O7 S Box.y+=(y-ty);
4 p: N! H, }( y5 G7 |. t6 v9 \ if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
, h ?; ?5 ^7 q, V/ C; C2 Q {8 S9 L: F$ C3 r. i0 {
Box.x-=(x-tx);
0 e% z8 o, N6 c Box.y-=(y-ty);
* p* B$ f& D4 X/ d' e& C2 k x=tx;
4 s0 c& B2 A6 D- \/ t) Z+ u y=ty;6 R3 W# B9 z+ q2 L1 R
}
4 R7 m1 k; b6 u7 R) J* r7 { break;' `4 x1 o7 n# w# D u: B
}, p; d! @7 r3 |, \
clrscr();
" K+ v, B4 I2 i2 L0 U }
% H$ ~& P8 Z# f5 Z/ Igetch();
, \! U- }, i5 U% T# [3 }}
5 A2 |, Y) }/ w8 K0 a- N
4 }+ T. T6 E/ s1 b% f( s4 l9 {& g, T& C" i8 W
, I. d A8 F) |- v3 ^………………………END(复制上面的红色字段)………………………………………………… |
|