TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的) N: \3 U, b, B8 Z5 k3 m; }
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。
: m7 a; u+ f/ K4 s8 @3 j. f- D: Y1 S0 a! D1 f- R. \- a
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,
9 ^( L6 q- u6 b* x) \/ ]' A象PC- DOS 、
4 z# L3 y5 ]5 h6 M
( z* q- y u7 M+ F+ n0 w% M4 }WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
3 u: _8 J$ O/ Z# s D. z' R" \1 s. n- j/ m/ C5 X6 _, k, c
1. C是中级语言
& c6 {* l2 |, s
6 t4 R; t- C; A! l* p5 J1 R+ Z5 {# ^4 p
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
" J! O: C4 r9 a2 T& M) r5 P2 B0 g
; n3 o' O) p d$ `汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。9 @& ~# k1 ~, B, Q& S/ |3 T0 F
; l- y# R# h; r/ q' n* ?
i3 X, f5 ~0 A! V4 t6 d2. C是结构式语言
3 O6 D1 w0 Z4 l ^( x
& a& Q9 w" g' U! f# a# q
7 q; Q. T- Y8 f, }; t/ y8 ^8 h结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的" |% n. F$ J6 Q' |: ] s6 ~
% ~$ ]7 q. T5 P6 V7 r& q' x: e信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调- V7 f( y2 Q% G& a5 k
. M- o6 G( m0 _. J, K
试。C 语言是以函数形式提供给用户的, U$ X! X; Q3 u
这些函数可方便的调用,
~& v7 m0 G. [& d' d1 L2 z: }# `并具有多种循
8 z0 e9 u' M6 w% l- B- G0 X0 _0 C- a, f
环、条件语句控制程序流向, 从而使程序完全结构化。0 M% Q% M0 W3 D- p6 v- W
# ~" G4 b$ y* r2 ?/ i6 {
5 b8 ]2 R6 `2 y" F3. C语言功能齐全: j& T; Y2 U; r
, Y! @$ r5 x* f2 I. c- z& b9 X- }
+ T7 Y- `% x& F; \C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另! C8 B. g% v0 A+ z) V: o" P& u% ?
) s+ x$ ] B( [7 n- \$ k7 l r- o外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑
5 _. L: V6 a+ o$ w1 A) b) g G- l0 L: i1 B1 v8 O
判断功能也比较强大, 可以实现决策目的。
5 j& u9 ]6 S2 r/ q+ A. C% P! [0 j/ y8 Z- m( @7 E9 O
5 W! t4 P- ]1 j
4. C语言适用范围大$ y5 c2 R$ W0 b
[$ D# y. b0 v/ G( ~
. H9 g3 W4 }' @$ nC 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于
# I. x) u6 d" v, k1 b
5 _; r% ?; v' D- ^多种机型。
9 ?8 z" b( F) ]
$ i8 V; Z, N' C! b( j$ X
# [" E J l: v9 s: O……………………………复制下面红色字段………………………………………4 ~! P1 i2 h$ @0 I+ d* g/ v
5 H) m8 U+ P6 C+ i, M9 t
2 r; a1 C/ b t2 O/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */0 O5 I- R$ ^: w7 ]: l; C/ W+ C
#include"stdio.h"
$ I0 g. \( D; J8 u7 x#include"bios.h"% Q1 S- [/ Y6 T2 T7 w1 {
#define LEFT 75
* d9 `: R9 s8 o1 S5 h#define RIGHT 77' p4 B1 T( V7 ]* ^
#define UPPER 72
2 g( C( z4 [! |7 X* c# V# X+ R) M#define DOWN 800 c3 X+ L- Q/ t. f. [6 v
#define ESC 27
. @0 b0 `$ i% p, k, d% K: ~0 Cstruct Boxss /*定义箱子结构体,其中包含坐标属性*/4 {% b2 m3 m8 W
{+ e6 e6 Y7 i- Q: |2 L1 g; l& F
int x,y;
! K, A4 o+ _7 n$ [, R/ z* V};( j$ O% v/ C3 X4 Z( S/ k5 c
union keyboard /*定义读取键盘码的共用体类型*/& ~4 d& M$ g8 d; N: E
{
+ N# v8 C# N2 i, g0 {; bunsigned int iKeyInfo;: u0 M7 H$ n; _ h0 j
char chKeyBit[2];
* U1 j! m6 G& w+ k% k2 ]* K};
- Q0 U4 L z; z/ [int fnGetKey(void) /*定义读取键盘码的函数*/% N, z& k7 m% `" C' `" [/ x0 {
{* \2 C, V) S4 `* ^. M1 L. c; M
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
7 D0 [: |/ o& c- uwhile(bioskey(1)==0); /*检测用户是否按键*/: v+ O# t9 v3 u, m: h! h* a: J
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/) \. x% ]' E; e% j. \/ i
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/" @: d6 |+ @: I0 _1 y1 L4 _* y$ L
}
0 F* F8 g: g- C( `, }( M6 tvoid main()
2 F0 G3 G2 F& X2 g) e( l6 I{
, s* a% l+ y7 l; Q$ x; dint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
2 r. ]+ b" a L; D- ?struct Boxss Box[4]; /*定义箱子数量*/
+ G: F9 q* o$ rint chMap[10][10]={ /*用二维数组定义地图*/; g0 N/ J5 M3 u: ]0 a
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
- w }5 X* i' _ {0,1,0,0,0,0,1,1,1,0}, O+ L0 ]1 @3 Q
{0,1,0,2,0,0,1,0,1,0},
; b$ U; s8 `1 b {0,1,0,1,0,0,1,0,1,0},
! ]* v# ^- `* k {0,1,1,1,0,0,1,0,1,0},
& {) f( H; x8 `6 X {0,1,0,0,0,0,1,0,1,0},: X/ h1 n/ u1 p* W& E
{0,1,1,1,1,1,1,0,1,0},' a7 }- l0 z7 l) m% O/ e( `* u
{0,1,0,1,0,0,0,0,2,0},0 n* P. G2 ~/ B6 [3 m* k, k, Q
{0,2,0,1,1,1,1,2,0,0},
2 X" o% I% N; X# Q {0,0,0,0,0,0,0,0,0,0},
1 m; ?' L6 c* U# s0 O; s };
, z. c& x3 Q1 Q4 w8 t2 \int i,j;2 g6 Y' w7 t7 E2 v/ V" A) \
Box[0].x=13; /*定义箱子的坐标属性*/8 V7 O) t% e2 Y2 m) m6 o9 O. n! {& P
Box[1].x=11;
% b( R2 a2 N2 k# O9 QBox[2].x=14;, K: R# n0 {/ Q, D' D
Box[3].x=18;
' k: h5 O2 u! J& T d3 t% z8 C1 pBox[0].y=8;
1 a4 N& c1 C3 I- Q) c% x( fBox[1].y=7;
7 c5 R7 |1 c) G, QBox[2].y=13;
! A: H* W$ S& E K% Z) C* `Box[3].y=7;" e; ?- x! s1 s, n; z
while(1) /*反复进行求移动的坐标运算*/+ A# y1 b J* ?
{; R5 M& x4 g1 m5 @/ [* V8 Z3 _* H
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/) _" u& f% R* K- Z; a
{
: ]) ^2 u/ E" q2 Q0 T3 s( i0 I gotoxy(10,5+i);/ E' ]* Y" M& B! I1 v$ @
for(j=0;j<10;j++)$ i) W/ `4 ~4 m2 L
{
& Z7 Q( S2 z; ` ]0 ]5 q( F if(chMap[j]==0)
f6 _6 ^& _( a0 C8 ~ printf("#");
o$ ^" x+ J4 N6 w5 E if(chMap[j]==1)2 l7 _5 c* M* B/ a/ Z" N
printf(" ");
+ j6 t+ [8 S4 K9 k# M# { if(chMap[j]==2)6 M( M l' \) O1 ?$ a6 H9 V# g/ H' I
printf("X");, A: r+ v" X% a! S5 V- d# r4 J8 `
}
; P' b/ `- T) n$ T" Q( N7 I; U0 E3 k }9 P. g& |6 I0 w4 Y, E9 O6 `
j=0; /*判断是否所有箱子都在目标坐标上*/
+ q3 a/ f6 m2 }: a L$ X% } for(i=0;i<4;i++)) b0 Q0 Q" C0 U F5 J
if(chMap[Box.y-5][Box.x-10]==2)
+ a$ n2 y6 D" U; x0 F- v4 ^ j++;
1 y: Y1 d8 {9 K) _' T. K5 j4 U( y if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
7 v, L; Q3 G& O) p! } {7 G4 f1 C3 S) l8 V* \
clrscr();
' K! m3 k. |9 V# S% w printf("You Win!");1 ?1 A3 q' c" W' l8 }9 p/ U- V
break;
; H( O; Q3 N# G }
8 X! j0 b- f4 o% } for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
& T5 y6 a7 ?0 t0 d1 Y {2 H2 v5 B- p9 S, a
gotoxy(Box.x,Box.y);8 ]0 v) o7 V' [8 }+ u
printf("0");3 Y- C6 ^3 x. r. q
}! ]2 U; p5 i, m; ?0 Y4 Y2 u8 i
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
; H. S. o- B8 k( { printf("*\b"); Y$ z, h1 ]* L+ q
tx=x; /*记录本次移动前的坐标*/% y( ?& ]% N! t5 q1 ]
ty=y;5 M2 S n! X% R; d" |; ]4 p
iKey=fnGetKey();
b% q8 D/ B2 o6 d if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/8 J2 Y0 a4 P; c4 j2 q
x--;
& ^0 Y5 \8 m& y' ~ if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)4 V! _# Y. G& H9 {/ R
x++;, l& s5 E/ n! ^
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
* p) P! \% M( M4 k y--;! ~, d' J1 E$ |5 z
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
5 o! u, l2 t0 \) [$ h. b/ e y++; /*输入ESC退出并输出"YOU LOST"*/7 |4 T' K* S5 a0 N& Z# z
if(iKey==ESC)
8 z3 O1 @0 t& \$ y: l {4 e2 W4 X% Q* g3 t
clrscr();! G7 J' k# l. o# P* T
printf("You Lost"); J4 H0 l* Q7 C! `; y3 e! X
break;7 Z8 H: H, u/ i3 d6 s# w+ J* h/ G
}
! Y; T6 m2 w4 `& h/ s7 j for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
0 x+ N8 y( [; ~* b& [0 T9 n, T: r if(Box.x==x&&Box.y==y)
9 I& w H8 q: K2 ~ {
, O/ m. {5 D" D$ |6 I Box.x+=(x-tx);
/ D5 r+ }+ o, L Box.y+=(y-ty);6 k" d! \0 ]; K! |! g
if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/2 t- e' T3 F! B* P
{+ C9 O( a$ f. X' O4 T: a! Z( I( w
Box.x-=(x-tx);6 D2 F* n8 Z" X2 W* p0 t
Box.y-=(y-ty); R$ s: v9 i4 P# Q% x; W
x=tx;* T5 U: Q4 S" m
y=ty;
5 G0 r) r0 ^3 u1 p; E }
$ U3 Y% t! A# N: f/ F break;0 A3 l( W; k/ O q
}
* ^1 a: u/ I4 e- ~- P clrscr();" w/ t$ E$ ?! i1 I
}
) r" O" T j1 J$ B5 Tgetch();
+ Z% s' w8 V1 r% H% G. |}( a4 N7 |0 ?' S/ x1 w8 }6 O U: V
& Q; _- E3 k- S5 T# `( r7 ]
; V5 M* X4 u) U5 a& l) M
& p) U( b. G" f+ b# V0 a………………………END(复制上面的红色字段)………………………………………………… |
|