TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的: k4 c- b2 j1 g; v! p8 c
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。6 p+ X5 h% r) |$ Z% I
$ a9 ^* P- r$ H9 A+ M
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,8 p, h# y3 q1 j6 H, ?5 w
象PC- DOS 、) l7 w% R5 ]$ W( U% F* p6 i6 B" \; A( n
3 Z* i# w% c* JWORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
# P {$ t' h. }4 O0 I8 a0 w' j, N6 Y' f1 d6 W
1. C是中级语言% d! O) `7 |5 I+ p1 h- j# x
0 d `6 V" G& W. C1 r
9 U4 ~& d9 B" G. {3 Y% s% [; n
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
% V4 P# b% D" ~5 x; K
' @7 X! E, Y+ A2 Y" \4 M3 `汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
& g5 _& E; y$ J0 `4 Q$ t- o' F6 h( Q" L. Y& j/ Y4 Q L
1 t+ X! L' V8 h# Q
2. C是结构式语言
; ^# n1 r/ Y3 N3 y9 `; b6 T8 n' Y% V1 F; h# T/ K9 f- y0 g
, ]3 D$ Q% M* f5 P. l结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的# u ]" T' |4 ]) y4 W: U
% z4 @3 h0 n4 [8 N C* r, Z9 m信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调
' B- Q( U$ s2 g9 n* [( [
3 \+ l& T: U7 [0 z试。C 语言是以函数形式提供给用户的,5 O% A w4 n# ]9 A" i
这些函数可方便的调用,
: z- k: i _+ B" s6 l! g% ]0 Z( D并具有多种循
! y! o1 s# _, n) w" V3 H+ C# R9 F. O
1 s( b3 W$ v/ ?" a% ?! ]环、条件语句控制程序流向, 从而使程序完全结构化。% B9 [$ X0 u3 `: M% E' n Z8 U. T
$ X2 E. N9 W: a: K$ s# e- n( \' v
F k+ ~8 ~5 i( b8 }4 F3. C语言功能齐全; f l( e c9 v8 m( d/ ~4 u
1 l4 r$ D. v- Z9 Q
% v4 }9 b$ Y* r8 h: D; Z& v g3 XC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
, D. J; N _" C
4 i0 L8 k$ b* |6 P& U" I) W {外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑7 H5 i& v9 ^! M- c' [: Y
6 p9 D M1 Y3 T: n' O判断功能也比较强大, 可以实现决策目的。
1 v% `: y/ `: K7 C: M' Y& p. N4 {& F
5 x5 Y5 b# O0 p, g W- L2 e4. C语言适用范围大1 ~7 {3 u" @- ~9 b7 L, K
0 U! z8 [# [! J7 |
6 v' r% E% M# u8 W2 ^$ ]( F5 NC 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于
" Y7 w5 C: W% x
. m3 E- I, u' e N: f7 G多种机型。% H! _% g5 \/ ?! |8 @
7 ~6 |2 |- _+ V
" _7 o' y" m: N7 g; G……………………………复制下面红色字段………………………………………, f) O0 a: j7 _
8 Y- h; q! p E2 p
/ z7 B. b. ^; |6 Z1 V# W) Z/ N3 D/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
( H# X ?6 W8 M( d#include"stdio.h"
; n$ I2 D4 n z7 y#include"bios.h"" d3 t5 h* u$ [7 e3 }$ q* r
#define LEFT 75
$ [; o( g: ^3 l6 ~! i#define RIGHT 77
' S! O T1 K" Q3 G#define UPPER 72
5 k5 g, T+ ?! v9 E#define DOWN 80
. ?- }- a4 o$ h4 c' M4 I#define ESC 277 z- i8 f# X/ I8 e5 W
struct Boxss /*定义箱子结构体,其中包含坐标属性*/$ K( j: r. L: O7 l
{
- X4 P: w9 R7 C2 zint x,y;
# Z& Z/ \/ D( g, c! I, Y* Q' `};
7 `/ [9 R- x! e3 B7 a {, hunion keyboard /*定义读取键盘码的共用体类型*/2 e# Y3 I) @, c1 W) {2 Z9 [
{- t/ P7 `7 A4 j5 P/ M
unsigned int iKeyInfo;! R7 J3 f' Z1 g( L
char chKeyBit[2];5 O! x& ^5 ]; G8 W4 E' r
};- y- _7 Q3 v4 w& T: o
int fnGetKey(void) /*定义读取键盘码的函数*/6 ^1 R J' x$ b7 @
{- [ W. u5 J4 X' m7 T; ?
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
8 \! L; }: p$ V, X) {7 H: H- s; C, E' cwhile(bioskey(1)==0); /*检测用户是否按键*/
. v" k. L; X. r2 a) _9 q3 p. |uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/3 J0 H2 L2 E1 Z! m& I `; O; Z
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/
) r! b* b; J" i) `4 z' _6 o4 u+ C1 V}
, m* ~/ l' d: ~: s. Bvoid main()* H. f- Z. {: A [) Q% s
{
2 F0 h2 M: r0 o# V7 ^% }: Iint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
2 L: P4 b4 X5 Astruct Boxss Box[4]; /*定义箱子数量*/7 J) {+ v) @9 u$ ?
int chMap[10][10]={ /*用二维数组定义地图*/
6 e; v2 E4 `3 p {0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
4 ?0 w$ H) Q1 I3 k7 K/ d {0,1,0,0,0,0,1,1,1,0},) O, U4 Z" `1 Q: Q
{0,1,0,2,0,0,1,0,1,0},& z' a3 H9 n! e4 t Z
{0,1,0,1,0,0,1,0,1,0},, ?/ d' }8 R i. U
{0,1,1,1,0,0,1,0,1,0},. s9 w( z. b9 H, _; ]) O
{0,1,0,0,0,0,1,0,1,0},2 x4 }7 W% ?5 a% G0 E7 c
{0,1,1,1,1,1,1,0,1,0},
X# k8 k% p2 G, q. `: R {0,1,0,1,0,0,0,0,2,0},
7 J7 i1 v; A) ]( _* s {0,2,0,1,1,1,1,2,0,0},7 A4 v/ [1 B. d; [2 [1 b
{0,0,0,0,0,0,0,0,0,0},2 U& L0 }) j1 O4 p; s7 u: s& h
};/ P6 _8 e! {" n6 L& H
int i,j;
; s1 N. \. {- o( m8 J: B. R/ \Box[0].x=13; /*定义箱子的坐标属性*/! g' X9 @: Z5 l) B" u; @
Box[1].x=11;
/ T" t6 D* b, c0 p. EBox[2].x=14;4 q8 y7 n: h3 M5 V" O- N F* a
Box[3].x=18;& h( m$ `9 E- V5 @; F
Box[0].y=8;
% t# P o( ~; n( v, [8 yBox[1].y=7;) C' n. P( a% w& E9 J- j4 O0 ?
Box[2].y=13;* }& Y$ s. w( @1 s8 G8 y% h2 g
Box[3].y=7;7 K) x1 k+ [7 y4 f/ A
while(1) /*反复进行求移动的坐标运算*/# F$ s2 ]2 G9 d D% y7 i
{
2 d+ [& h; P! c. n for(i=0;i<10;i++) /*输出新地图(刷新地图)*/
2 G/ ]) p- k! l3 g& T! }6 w {: X( ]8 o* H1 q
gotoxy(10,5+i);2 Y5 [2 a$ n2 v! }/ C
for(j=0;j<10;j++)
0 e+ m. H) K0 Q' e: M+ K* q. g- u! C$ i {8 A0 a3 A& X3 |, a6 [/ w
if(chMap[j]==0)7 C* x- _ b$ L( a- T* U9 T
printf("#");
3 x5 L9 `% v' B! o" n) P if(chMap[j]==1)
- e" }( Q( B+ x5 R; E printf(" ");
' O! O3 h& C+ x* T% w if(chMap[j]==2)4 z9 r1 f- h7 c5 B; u# e
printf("X");
! l& X# |* y1 a" \9 u9 r }, R5 D i$ L# W1 G+ b
}$ f! x7 U: ?2 I* Y" P& D) r
j=0; /*判断是否所有箱子都在目标坐标上*/
8 a& z1 s+ z" V0 o O/ ~ for(i=0;i<4;i++)0 F7 X6 q) v5 S- C! E1 J
if(chMap[Box.y-5][Box.x-10]==2)
: ]: p/ f0 e+ @6 x j++;# \+ I! F6 ^" |' C$ a+ o
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
( h* E2 ~9 U8 B, u; } {* g) ?8 Z% e1 k& s a2 O
clrscr();# S- v& V6 `3 \) }: ^6 @( H
printf("You Win!");
4 P! ~) ^3 X6 W9 @ break;* P3 d/ Q& T& D& v8 p
}
; Y8 t; Z% b8 g* F5 \ for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/- v* _% B# V$ m# o W
{
3 O3 d" W. _& @4 Z' i$ s; k gotoxy(Box.x,Box.y);
) ]3 K8 B1 G4 c' V printf("0");
# j+ B+ t8 _ s) b, b+ f7 _- c }
/ d& q6 X& T0 I9 _! [9 F gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
4 Z* O2 c) i( Q; L9 ~ G4 p; x( u7 g printf("*\b");# E! {( w( N+ Q1 ^5 I
tx=x; /*记录本次移动前的坐标*/
+ r7 u7 I) V. ^& u( l; z1 J X ty=y;
. P9 y* w* K% D7 J A- I( w7 T iKey=fnGetKey();
6 H3 v) j. ^6 T6 B6 h I' S4 y if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/5 Y! y$ A7 v7 r! ^- i, | }
x--;: M# Z9 c5 i4 m5 c# I% Z) ~1 A
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
5 H4 }+ t7 i# N/ N2 Q9 i* S5 `- T1 \ x++;
/ ]* A4 R* p; r3 s' u) ~3 }% K& Y if(iKey==UPPER&&chMap[y-1-5][x-10]!=0); C0 ]+ i/ v5 f( X: N4 n
y--;3 j; u. I! ? [7 W5 w6 t5 f/ P* ~
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
" ?0 [% I$ y) N y++; /*输入ESC退出并输出"YOU LOST"*/2 I% R+ ~2 g l. G# b$ B
if(iKey==ESC)% Z4 k3 D y, s' ], r& `
{; E& [) A x; \) b! z, b! l
clrscr();% O5 j( z% ^& M& A
printf("You Lost");6 R: T! h7 {) L% i, w. ]0 V
break;
/ K+ E! ~/ R. G4 o& E7 ~ C# S" k7 { }+ Z/ {# l4 ~& T# H" ~
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
2 k: `3 {' x$ {4 i if(Box.x==x&&Box.y==y)# L y2 a, x( a, j
{; r l9 [ J+ F7 c! A7 S& }' l
Box.x+=(x-tx);
/ `) w& H3 w# i } Box.y+=(y-ty);1 Q: o8 q( j3 G; m& q
if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
- \1 H! K3 c) L {4 B, z+ y6 K/ V' t& l% o
Box.x-=(x-tx);5 E7 c9 h! ^( `; J5 ~
Box.y-=(y-ty);
0 I% E9 G. H! i+ E) I N" { x=tx;( t" T( L# g/ l# o9 i& u- _
y=ty;
Z! n# ^1 R9 o }5 ?+ ^3 d3 b0 N: o
break;
/ M& y/ W! i0 t3 n' r }
. X5 V, W h# a1 t clrscr();
1 N& t2 {2 z& o3 M3 x }
- D; j5 _ W4 J" d+ O( Y2 g, Fgetch();
$ Y. _; {- N' T( I4 B" O}
" U0 {1 i8 ]$ g# H6 R: {! A% O4 l9 S8 i1 l7 I4 w# S0 ^) V
# X& n4 H, N+ k
5 s3 I6 g: j5 l
………………………END(复制上面的红色字段)………………………………………………… |
|