TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的
, Y1 F/ ]$ k9 {9 T功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。
; B- g. A4 J6 ~. X9 M5 h
6 Q' W2 y2 V- x+ T9 F% f1 ]: k4 A& | A用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,8 x" j+ n$ ^( ^5 L
象PC- DOS 、
g& D$ Q% p. _, W! Z: e" t& Y& H* O; h
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
7 o9 t7 E# p. F: Y0 k" c o2 e7 C' w3 f) A# q7 Q1 ]
1. C是中级语言
" J. f, F/ ^) N1 U3 B- ~' {/ O6 D+ f1 z% W8 w( Y: A$ r
- {4 P+ u% V0 o: ~0 a它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
% X% o4 Y p# C* j P, f! U" i- o6 n: a' G( k- g. f. U
汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
8 B! B3 _; a2 V7 ]! e+ y4 d2 S5 o7 r9 T9 t
3 I0 J0 ]8 \/ u5 S, c
2. C是结构式语言% _8 T" f, Z: D! b
W( ?% x# T0 W1 x
5 N3 c) U, h0 U- A- m8 k
结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的2 N6 j5 [- Y! J# J
o/ u7 Q8 q0 s/ v# h& d# f
信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调# l2 P% G3 ~3 n9 K
& i4 f* {! C0 I
试。C 语言是以函数形式提供给用户的,/ }+ Q: }: c* l
这些函数可方便的调用, I& U9 _/ O( l/ T- M
并具有多种循
/ {; D; R% {* w$ ?
' G0 K6 G+ {4 B' F: x环、条件语句控制程序流向, 从而使程序完全结构化。( W0 r# o7 m- N2 q& @! k
! R0 F& }/ L" P& x9 R/ T
* K1 x; m; P7 c5 F( F
3. C语言功能齐全- S1 ?9 U2 r! |3 `
( W8 F6 b# A/ }
6 @2 d$ ^$ G4 @' u E$ FC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另" D2 Y( C$ ~6 c) B! b0 ~
" A1 k' ^! I; g* R: }
外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑6 D5 Q4 V+ o0 c
# U, O" p1 M6 r+ H: y$ K- a
判断功能也比较强大, 可以实现决策目的。
" M$ t2 M0 P) F3 g/ D/ K% R3 O- Q
5 E8 ^$ f4 x1 X5 m2 h& [
- x( [1 m2 ^4 ^0 k6 @/ W4. C语言适用范围大0 B- m: {! g- [; L4 h* }/ u
- K2 E H! D; {3 t3 O6 ?( f
; i- k& }- | P3 C( b: i' C" a; h- LC 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于
o. W# [9 }+ J& } K; _4 J6 g
0 Y4 n, m; G- E多种机型。
7 [# L7 x+ X( v t4 S* J* ]: G: i( @7 [. b
1 T2 V f0 C# ~* [
……………………………复制下面红色字段………………………………………& @( b% l& N, U. {+ _ G
7 G% s% R( @! N+ ]
7 W9 [ S5 G, x8 i- H7 i/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */3 I E0 J/ k9 N" S% d
#include"stdio.h"
! p+ Q+ q) Q0 J" T8 f#include"bios.h"
9 ?5 D3 i5 a/ }& Q2 M#define LEFT 75+ x0 p/ p( U4 v" `( U- m0 D
#define RIGHT 778 O9 K Q6 ~3 Q2 T" w
#define UPPER 728 f1 Y) h' }" g3 ~$ Z4 _$ F
#define DOWN 80) d' g3 ~; [% `" Q, Y$ z2 ?' d
#define ESC 27
- B$ C. h: _; S$ v) W) s8 Mstruct Boxss /*定义箱子结构体,其中包含坐标属性*/% Y7 \, k, y8 O5 v7 K
{; w5 V; a! E5 M1 H( y1 m
int x,y;4 N4 B" v! K! u5 u/ a% q
};
$ j3 r: e: `' K: r3 nunion keyboard /*定义读取键盘码的共用体类型*/
0 U+ ]4 B) k. W7 j" p{9 h8 u9 a$ @+ m Q/ ~
unsigned int iKeyInfo;3 i1 ]( y; f+ \! ?: j+ O6 m0 F; P
char chKeyBit[2];
1 b$ n7 H4 T1 R- H};5 @8 s+ L$ W3 ?& g8 [
int fnGetKey(void) /*定义读取键盘码的函数*/
- B9 ]* a- z: p; k6 h$ D, e' @4 k, Y{
2 s- q9 c! B- t1 kunion keyboard uniKey1; /*定义读取键盘码的共用体变量*/
: p) S1 x2 h- ~! `1 ]: vwhile(bioskey(1)==0); /*检测用户是否按键*/3 [+ k5 K4 F4 E: w5 T' p" e
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/9 ~1 O3 R; `) k9 g+ s
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/
1 j% u* R- k) u! E+ ]. l}0 n! A, }# ?2 \% d5 c" C
void main()4 E8 n5 Z" t4 v" e
{
4 w& z& T1 Y" x7 nint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*// s& c& P3 E' W J1 m
struct Boxss Box[4]; /*定义箱子数量*/" w" d* T4 N) B8 t! ]; q, e! m
int chMap[10][10]={ /*用二维数组定义地图*/
+ B. l, O7 L8 P& }# ^( e {0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/ e7 }0 _6 q( F9 s
{0,1,0,0,0,0,1,1,1,0},
! ^$ D2 `* o4 \$ |, _/ r {0,1,0,2,0,0,1,0,1,0},0 C$ W: g! x- V' c. `
{0,1,0,1,0,0,1,0,1,0},
2 g) R! w B: P( D6 f! | {0,1,1,1,0,0,1,0,1,0},
. t1 a& e- I% v. K3 @' ~ {0,1,0,0,0,0,1,0,1,0},! T! v9 H: [1 v+ q: R" B4 ?
{0,1,1,1,1,1,1,0,1,0},4 i, p% s9 R8 D$ ?
{0,1,0,1,0,0,0,0,2,0},
, n2 r Q/ k3 X/ K5 _ {0,2,0,1,1,1,1,2,0,0},: M0 Z5 y* q- M) B! m7 L- T
{0,0,0,0,0,0,0,0,0,0},% I; g- a8 m0 [6 ~
};
/ E, X( I( s8 [2 q3 E6 L sint i,j;
: j% X5 R% {9 E3 j- v: ?Box[0].x=13; /*定义箱子的坐标属性*/
7 \& Y, k/ b4 |: m& r8 Y. T" c0 zBox[1].x=11;
2 S' ]2 H# V; t. nBox[2].x=14;
0 e# q1 O9 `6 s# u5 k3 \Box[3].x=18;. j; _: ^9 G8 o" e: O! i' M
Box[0].y=8;5 Q0 E# }" y! p: i* @0 z2 |
Box[1].y=7;
: @- U) M1 ]3 G: R! F/ x# bBox[2].y=13;
6 F, ]+ M; Y" |2 d7 hBox[3].y=7;
6 u; r% j. S5 `& r/ s$ o1 r4 d while(1) /*反复进行求移动的坐标运算*/! v4 F& I( I" P% X; d! ]8 C
{0 B9 b4 F' J- }2 ?
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/
; \) V B% X# Q7 [* {' {% c( M {9 e" d- v. b; A
gotoxy(10,5+i);
, i6 Q9 A9 ~6 w$ | for(j=0;j<10;j++)
7 ?. b' q5 b( e' R1 V4 u; [1 @/ g- } {" e( s% _* N8 m; P; ^+ [) j
if(chMap[j]==0)
* I9 r6 \; Z* S2 T printf("#");
, o1 m2 V7 \/ V8 ^: R9 K9 s if(chMap[j]==1)) b! c) A8 D2 S, ~" X& q7 ]
printf(" ");
' Q" h3 D+ _! | if(chMap[j]==2)
; [0 T" m( i( V; P, O8 F! y {! W printf("X");
* g: f0 K0 c, J9 ~( Q4 W+ L- _/ ?9 j }
9 Q( L" P, R0 ]9 B5 x }
: y; p9 C5 w- K% E @ j=0; /*判断是否所有箱子都在目标坐标上*/
6 P7 s) M# I5 x8 z+ @ for(i=0;i<4;i++)' p `2 O+ a1 e: m& R- I j. P
if(chMap[Box.y-5][Box.x-10]==2)& g1 _- ?' `1 e& ~ K% Y$ n" k
j++;
6 F; ?, j: J! z& J if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/4 ^0 J' L: D* k) \
{0 ]0 a K" y4 b
clrscr();* X0 ]! ^$ A6 r8 X1 O; o5 T b+ C
printf("You Win!");
! _; T" G1 {' u% e8 u9 q break;9 }7 Y( B D' `9 f6 J9 [
}
: m) i; m1 O ? F) u, y; J for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
/ j9 H u$ Z9 ?8 f1 l3 { {2 n4 c4 Q: X: r8 o4 h$ w4 W/ ]
gotoxy(Box.x,Box.y);
3 ]4 N7 l2 N7 U* t printf("0");' M& o" H% k5 u9 G5 N
}
# S. ?' i4 [& y% d2 z gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
- A6 {& q' Z2 J3 ~2 ^ printf("*\b");# ]) c8 @9 g( b$ a# l# Q
tx=x; /*记录本次移动前的坐标*// k! C* n8 z& O* z& {$ O" J
ty=y;8 I) O# b) J! Q9 _3 f
iKey=fnGetKey();
1 K; J6 r. K6 ^3 c: ^ if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/% L! F! u" ]* }7 w0 C
x--;
/ H4 e' W) l! U, ^$ H if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
* s& l/ v7 C: ?9 k+ A% n x++;
5 r2 g- h/ e& Y* V, l if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)/ V( w5 t" \3 t5 C+ A
y--;% N3 \% m$ `% X/ O7 T5 n+ J
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0); A' ~* v4 M; L4 v9 B' a I I. J l
y++; /*输入ESC退出并输出"YOU LOST"*/
+ j7 f/ }! S6 E0 l if(iKey==ESC)3 J1 r* @' s5 G% A1 E. J; _
{
3 R1 M0 R" ?" b7 j3 ^. H clrscr();2 W, h) \; |7 ?7 g# s% J( T3 ]
printf("You Lost");5 q! K9 a+ s* I: Z( Y" ~/ U
break;# j. i+ ~( `- s/ M4 y
}. T" T9 t# S; i$ ]- J
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
% U- a, Q1 N1 D$ z) k, l0 T if(Box.x==x&&Box.y==y)
g; w; ?1 m5 u4 P {7 w# M8 V" F' `3 U
Box.x+=(x-tx);
* D* ~3 j5 P) d3 k9 [- ~0 O1 L8 [* \ Box.y+=(y-ty);
9 F7 \. r: T/ H if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
) T9 }7 Z0 }: n1 |( S {6 H5 T$ `5 Z, i' {7 O3 c! Z" c
Box.x-=(x-tx);
8 s6 w: A$ c o, [ Box.y-=(y-ty);9 O8 f( n# ^' E) C% {! @6 X
x=tx;
7 ? T* s+ Z2 O0 e0 M) H# S5 u1 f y=ty;7 ]2 J; _9 C/ h8 A- z- }
}9 d0 A+ n, P o( r* a b4 K. _4 P
break;- X% K0 \: ~$ ^# n* ]
}
. y( A. S5 b) |3 o clrscr();
8 @8 S8 X2 q4 i3 R }
* b5 ]: \3 l- j6 F, r# Sgetch();
: {! y8 l5 n, d8 x# d4 H$ m4 x# L}
- J/ D& S6 a3 e# Z( m/ G5 f" z) B; D' f+ D$ s9 e, X( ?" I
) \8 t; u3 b& U# P 3 O. q4 M2 J5 R2 E* o; T) b8 I
………………………END(复制上面的红色字段)………………………………………………… |
|