TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的$ \# u) ~5 w: A7 ~3 Z
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。8 ]1 s; i. z+ E+ R; }" o: q- }. b
7 w' `% n- I& v: X4 l5 o& X用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,7 j3 V! o# f/ |2 n7 }
象PC- DOS 、8 C/ P. q8 k- \6 Q `, P
/ V, l3 H1 k0 b. X5 U \# \% ~
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
: }; Z; [$ D7 H8 |
9 {. K \( ]6 R7 i. i1. C是中级语言% {/ q4 e- z$ D- Z
' R' g M8 i/ I! ~- H
. V. ~9 g" M3 W; N2 ]) J9 R* J它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
1 p+ |. v8 y# y" P9 m8 a Z1 J+ S U1 I+ K& w% g3 h
汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。- X5 ^6 n( f$ t4 ?/ V9 z; ?% N
3 c+ q L8 [8 c! D) E9 {* L# T* O4 w$ M- z) F q; |2 s9 Q5 s
2. C是结构式语言+ ]" F8 }- a1 A; H" m9 B
% K0 L4 [! I+ O0 T: N: b! a1 h# _- i" i! J% h9 ?( a( N+ Q
结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的
4 l- G1 s8 o5 V' E: Q4 p, a9 c7 z( K5 B( e: z
信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调: `* w5 I$ b, J% o, |# ]5 Y
; l5 |* E$ r) q, d$ u( \试。C 语言是以函数形式提供给用户的,
7 J$ G) V$ ]$ k这些函数可方便的调用,
9 i5 N' L' B/ w; ?0 g并具有多种循
; F& v) v: X: A% Y0 ^5 Q+ F3 a3 w
/ k7 {8 U% b, L8 o+ ^6 E环、条件语句控制程序流向, 从而使程序完全结构化。! b# s- F" [- y
0 K& |7 R0 G* D- o) I
2 s9 x* y7 |/ C: p0 \1 H3. C语言功能齐全$ z7 i+ G' v3 {5 [
6 Q1 B7 s4 x2 Q2 v2 Y6 J: d% N
. m" ^4 G- Y1 h& W( W; s
C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
5 c' ?# a& l# T& @2 |
! f* d$ M5 ~7 D9 a. I+ E D外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑% [, G' u% n5 \" i- [$ I8 b' o/ Y
7 A# l2 {- ?. S1 E
判断功能也比较强大, 可以实现决策目的。
- c: F, I7 p+ T) c
; Y- p$ F2 c; l/ [9 P; A! i, R- q& W& x+ J4 N, C+ M: C/ r' J0 X
4. C语言适用范围大$ O% @8 P1 ^: n* E
, J2 D1 z8 P' a4 }) s
2 O" q& J) O! ]5 C8 U( e
C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于
8 w* ]+ M, l6 k$ g; u) B
/ D7 d7 z/ p9 Z6 w" N6 ]7 Y多种机型。, A# C; v) `- ^* J$ b
- G" X9 p7 E$ o) A/ g
- ]3 \1 q- W3 p: D. d; E9 Q……………………………复制下面红色字段………………………………………
% E$ a8 `6 N+ f* {; I- q- D1 O% m5 d9 U# A* A$ E0 G# o1 H4 L
- t0 X5 v( t" W/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
3 f1 J8 m$ p% o( |#include"stdio.h"1 A$ P/ u/ Y7 P" I; U' m& u
#include"bios.h"
4 l6 j$ N7 H, M#define LEFT 75
7 ^& |1 h7 C9 l, C#define RIGHT 77
& {+ q4 U2 W3 [7 K#define UPPER 72
( c6 Z2 R9 b- v6 v7 z, `" n#define DOWN 80# e7 f" m; _1 ]' y
#define ESC 27% w, @& a( O4 P& ^8 q# l: U3 d
struct Boxss /*定义箱子结构体,其中包含坐标属性*/# j+ a7 e) H3 _; m5 a- u! b
{6 J$ y* Y: y$ m1 \
int x,y;" o P; M7 Y4 a. Y
};! F) ]7 ]: v; {& [4 Q/ }
union keyboard /*定义读取键盘码的共用体类型*/+ Q0 @3 r; }( l4 w4 U3 a/ I
{
/ s! p/ Q! }" Q# n8 T( Z' eunsigned int iKeyInfo; x" |& u) I, l6 F4 n
char chKeyBit[2];
; z. J+ W0 L8 O3 Y3 Y* \};
! N {# h" p) N7 m& ~: ]int fnGetKey(void) /*定义读取键盘码的函数*/
* |- P+ d! w% }, b) W \. M7 O{
+ P: H1 A, j p r0 Tunion keyboard uniKey1; /*定义读取键盘码的共用体变量*/- t, g3 v+ K- [6 H3 {
while(bioskey(1)==0); /*检测用户是否按键*/
& t+ d L9 E2 Z/ ^* ^" A% NuniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
3 F6 `5 {4 [0 C' R5 ?9 n( i; M! @ ireturn(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/4 |7 N5 i6 b! _4 G$ c
}! w: K, P+ w$ [6 z
void main()
1 z- |$ G; g- _( J3 i6 }3 S{
3 j9 D( r) a+ d3 P/ F6 Q! bint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/6 w+ W! ^. q0 i2 Y z7 y* b
struct Boxss Box[4]; /*定义箱子数量*/
/ O. N! k8 @0 F; y9 `( yint chMap[10][10]={ /*用二维数组定义地图*/* a" p: `5 @7 g; J0 a9 W# d
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/) V* s4 Z1 T3 N' U* o) F
{0,1,0,0,0,0,1,1,1,0},
' k% N5 { k) d! W {0,1,0,2,0,0,1,0,1,0},. X% n8 H: n1 \7 O& f
{0,1,0,1,0,0,1,0,1,0},- _7 \% P0 B+ A* R0 f9 W
{0,1,1,1,0,0,1,0,1,0},
" W* d. n( s7 d& y" A | {0,1,0,0,0,0,1,0,1,0},
* Y( B2 Y/ v: \: F {0,1,1,1,1,1,1,0,1,0},
3 A) z1 f8 b4 T( Z' K! `' t4 O% y {0,1,0,1,0,0,0,0,2,0},
+ \0 V, d- @ J& A5 I1 [ {0,2,0,1,1,1,1,2,0,0},$ ~$ U9 z) {' {. J
{0,0,0,0,0,0,0,0,0,0},
3 R9 a } q1 O! H. N };0 G( x8 I9 i4 i6 _1 D& u( }
int i,j;+ L" i1 C* Q9 v7 W# v! R2 k
Box[0].x=13; /*定义箱子的坐标属性*/
. ] q. T9 |; x# R! y1 sBox[1].x=11;
. W6 d6 W9 V# F* _1 ABox[2].x=14;# N! ~- z7 H4 K7 ^- r
Box[3].x=18;$ Q3 a4 i& r5 I
Box[0].y=8;# n" Y$ H9 o9 [- F; U
Box[1].y=7;
V& F. v, u( A$ ABox[2].y=13;
; s) G& B" n. D1 NBox[3].y=7;
% c* ?8 z3 w5 B- J while(1) /*反复进行求移动的坐标运算*/
& u. J: Z- x. y2 h+ e. \2 C% F3 e {4 w" O( R4 K4 |0 x3 W5 i4 n
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/. _$ p+ y3 k5 s( h
{
4 e" u# i/ g- ]- _' t# v$ Q gotoxy(10,5+i);) d& T+ d B' u& l' g
for(j=0;j<10;j++)
, d% ~9 ~ G) v! l. r; t {
8 ?) a& u; Q8 ? if(chMap[j]==0)/ D+ t5 y! r$ r+ l
printf("#");
- |" Z4 z, C1 t, y/ `6 R if(chMap[j]==1); B U# k. v1 S7 O0 y5 Z
printf(" ");. O; J; C/ F/ m+ ~& t
if(chMap[j]==2)
( g3 ]2 L+ M9 {9 _" L" L printf("X");. {: ?/ v1 ]0 y3 p3 s
}2 `# [, \8 f" p0 \5 K( Q D
}9 z/ x" ?8 y0 l9 O5 z3 h y, l
j=0; /*判断是否所有箱子都在目标坐标上*/- U+ {6 D3 G5 C/ Q
for(i=0;i<4;i++) [4 `8 E% V8 N
if(chMap[Box.y-5][Box.x-10]==2). D8 ^7 F" O+ [) U. |
j++;& Z2 z/ i/ T/ K3 N+ Y/ v
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
8 ]( c& U/ S9 h8 n: p {( A: V; K1 @" |% ~* X
clrscr();
9 y2 o9 l0 Y! r" \' {+ g6 t printf("You Win!");
. n1 L" ?% [, P U/ s7 H break;
( b, {/ o4 J! m9 i# j }
9 H; i- }4 s8 n) Z2 p5 h for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/, N. C1 \4 w& E5 M, K
{2 f* Z- X' e e; D5 f( X2 l0 y; @
gotoxy(Box.x,Box.y);5 M" K' ] q$ k. P7 _
printf("0");+ }/ c( U2 f C$ M
}
- G' n2 A# _. t6 N$ W gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/ d v, [/ b! H* Y
printf("*\b");
! o0 b, T, x, d q) B+ X: s0 b5 r% } tx=x; /*记录本次移动前的坐标*/
- @' N8 O1 `1 F0 |' ~ ty=y;; L# D. R7 W4 a2 G. ^
iKey=fnGetKey();
/ s/ ^/ a9 r, M7 ]5 _( i if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
' E- o5 K% D- Y) G$ e/ t x--;- M, L6 }1 Z8 d- p9 K) N
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)9 r$ V) u/ B9 J( ^, |# N9 P
x++;
' t7 F, q8 W+ } if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)- e/ x) T( d: G. q2 J
y--;9 j) N4 {* [5 m0 y1 ^' A
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)" H9 Q' {0 g1 u* {
y++; /*输入ESC退出并输出"YOU LOST"*/0 H y' X& F! z4 K$ u; J/ h1 @) r
if(iKey==ESC)
Z" T9 d2 ~: l' @ { j3 G2 g: F1 x3 ?) n" A
clrscr();! C" C; R! o& d' h7 o* f! v; c0 B* Q
printf("You Lost");0 {2 H5 [$ h0 B9 v& b2 P/ T) l" n; r
break;: e$ O8 R6 _. r4 [" \& x5 u
}
* O: g/ e8 E W; u: Z; H for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/* \' R9 M/ {- ?" q7 w1 n
if(Box.x==x&&Box.y==y)9 `' d8 e( I4 A( l/ ?: q: J; h3 d
{
) u( q9 C( K7 X Box.x+=(x-tx);
+ v; y2 N0 L) }/ X { Box.y+=(y-ty);% m2 P( m/ s' \/ L
if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
$ {3 G. _8 E. M2 g- M: D {
8 f2 m/ u" A v5 r; E# }& W Box.x-=(x-tx);1 K( n$ r& O; m% r, T- S4 q
Box.y-=(y-ty);
! @0 ^: j) Z% J% | x=tx;
' @: s! Q1 s3 l+ I" a3 v y=ty;) |4 H8 \9 C$ B4 h- i; U: r" L
}
' @* R o* ~. g g1 O) q- Q+ G# \2 L break;
. Y4 M8 u- r5 I8 P }% [1 o9 m: ^& j( J3 r; {
clrscr();, P* J5 n3 I1 R. o) P
}
1 ]- ]9 h2 }* s4 S2 U2 ^getch();
( f) x9 D0 q! Q# m}
& D& Q7 }3 {, M% ]
4 \: F9 T% D8 J4 K- t
0 R8 U( m7 _& L% y! x, x0 t
$ |) t$ C: Z: l+ O7 W* ?7 M" i6 |………………………END(复制上面的红色字段)………………………………………………… |
|