TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的3 H$ U1 B6 r! V% D- K' w
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。
1 ]. W( A, i. z0 _' h4 Y/ R" `/ P7 X: Y, h
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,
8 T% n/ ?& T: ~# c6 ]象PC- DOS 、
- ?8 d. r; |3 P6 h: M6 ?* e3 ?. R3 J; |- O8 G( t/ z8 W; H$ A c( S
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
4 V& @2 u6 Y0 q3 ^& _
: ^7 p5 J. j) s- m& e# G9 l: ^. X1. C是中级语言. c6 Y9 P2 h3 ~9 `/ X# a; }
8 v) S G( H) O& m; `
6 B5 H6 u) `; I. w8 i
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象0 S' z) ^6 Z* i
3 i; \% E! Q) ?; d% B汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
9 ~0 a& \4 u' L; u& `: \& A% r5 K$ U
/ Q8 S% \! h: K2 L* \( _
2. C是结构式语言" e- m5 n" G! s6 [! H; a
/ I% P2 Z" z4 \! r; M P3 D: l+ q5 Z. I- p* w
结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的
' M! `7 Q/ K0 I% ~6 r- v% c8 F7 o4 z! m2 Z
信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调
" P+ p4 H% ~( k& V! ~: \8 O3 n3 j. h
9 T$ p& `& R& \) n5 O; I) o试。C 语言是以函数形式提供给用户的,1 A# H, y5 S" X; u8 J& p
这些函数可方便的调用,
4 L7 T) T, {8 K: {并具有多种循' r' l! F* k8 D0 Q1 j* K2 P1 l- k
& e o% c; G3 T环、条件语句控制程序流向, 从而使程序完全结构化。
+ l9 H0 W [& o c8 L
: t3 G ?: @# [
. z8 H6 M# M4 [. T0 K9 g3. C语言功能齐全8 k; N/ f! u3 ?, R" |; o% K1 b( L
u( h" L& I; I9 ?' T( b; G: M! S; p( Y5 P
C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
+ s3 e8 e5 s3 A0 u1 h( Z
, S( E$ i/ c2 X( A5 N5 x外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑! l# f, E6 T5 B
* ?- e: g4 U& d
判断功能也比较强大, 可以实现决策目的。
. A5 m0 |3 B0 s- ?3 F$ ]( D% @) g6 R- N2 u0 ^0 {9 C' N
8 D7 E$ l2 N2 ?5 Y/ G8 b& F
4. C语言适用范围大
. L+ u8 o* @3 d) _4 ?) J9 L7 m a9 `: u' O) N" @( j2 `
Y! Q' W. D g( x, ~# gC 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于3 S# c- H0 p( R3 }# P* @+ e0 }
: T; u5 ]4 m6 H" O多种机型。1 U; F! c- n: p
4 ?4 e! s* i1 W# K
2 f$ ~+ A3 d, p; p8 O' q @……………………………复制下面红色字段………………………………………% M- O/ y7 ^( [3 c$ X! {
: w* `; H6 L* E
+ @5 Y) B8 L' d6 u7 z9 }9 S2 M! ^/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
" f. U% w) W0 U7 `) a! C#include"stdio.h". H9 X5 L2 p( }- j
#include"bios.h"
* y, A- D$ a7 ~6 c( U- Y#define LEFT 75
% M5 I9 b/ \. h @5 @2 ]#define RIGHT 77
2 {& Z1 t4 ]6 _2 ~* n#define UPPER 72
+ g# l, i7 R: L+ x9 D/ d$ i#define DOWN 808 V9 _6 g8 L# c6 `- @# m A
#define ESC 275 D6 m# {. _$ `- S: `
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
# B0 x" ]; k' w5 g: }3 R9 J9 ^{
" b% M! _5 H# B- O5 f" hint x,y;
' A: p h8 k+ O2 E; P( w) h};' {$ B6 t$ z! B3 n1 e
union keyboard /*定义读取键盘码的共用体类型*/
) P% t6 K% b8 ^* M7 y& h( m8 a* d{: L& }) s( d' X# J, v5 x" W
unsigned int iKeyInfo;
/ [# l- Q9 M% \0 J# P- y) s7 n2 zchar chKeyBit[2];
, f ^9 Q( P; d/ {9 [4 K* R- q};
8 {; C! R0 l6 F# w0 xint fnGetKey(void) /*定义读取键盘码的函数*/9 U) l# h6 R8 V/ m) X! ^( y
{
7 R9 Q* s1 J5 C" U& B- }; Zunion keyboard uniKey1; /*定义读取键盘码的共用体变量*/! C. k6 P. h0 {- D8 d$ c! }8 Z
while(bioskey(1)==0); /*检测用户是否按键*/
4 H y& v3 Z1 f# n( E4 B: JuniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/$ K* X E( ]$ _1 [
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/& ]/ B3 X& D( A: I4 h0 L9 o
}
D1 l, W9 Y( w( j/ ~void main(). I' P0 j; U( }4 m7 {9 h
{
. x- ?% k7 K0 l0 u1 d3 Y# L/ Dint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
6 S* `) o, L) }; [0 b- k9 {$ ~4 \struct Boxss Box[4]; /*定义箱子数量*/
9 E: U3 v7 u/ s2 P* Sint chMap[10][10]={ /*用二维数组定义地图*/
7 U: l5 A) w7 G9 c! @ {0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
0 Y6 r' t# x* M* R# A" }! ?* p {0,1,0,0,0,0,1,1,1,0},. x( m- y, R8 n
{0,1,0,2,0,0,1,0,1,0},
$ }. K" P6 y1 ~) {9 `4 w3 { {0,1,0,1,0,0,1,0,1,0},
, {( z. ?2 } T& ?! i$ } {0,1,1,1,0,0,1,0,1,0},
& }+ M* X4 v# | F/ m0 T, @3 F {0,1,0,0,0,0,1,0,1,0}," _; [, g+ J a0 ?
{0,1,1,1,1,1,1,0,1,0},
) i2 U" O! }( t' d {0,1,0,1,0,0,0,0,2,0},# D2 s5 p4 x- j: t& j5 a+ S: H
{0,2,0,1,1,1,1,2,0,0},' U! f: x# k7 m5 v0 P' x
{0,0,0,0,0,0,0,0,0,0},( b/ V+ t; N6 |5 u, O
};$ }7 ~4 k/ T, r
int i,j;1 z3 X( C/ j/ v3 G! {
Box[0].x=13; /*定义箱子的坐标属性*/+ v2 f, I: ?+ p/ R; D5 z
Box[1].x=11;9 v( s, k+ q/ h) Y8 [
Box[2].x=14;
/ M2 y- \' p0 _9 q* |Box[3].x=18;6 X* U6 L+ A, t
Box[0].y=8;& l0 Y' m: a/ I% M7 k/ P6 P: a; I
Box[1].y=7;0 {: M. j C4 Y2 d8 k
Box[2].y=13;
8 i4 F- x+ t5 uBox[3].y=7;
! f0 H h8 _* A0 M3 ] while(1) /*反复进行求移动的坐标运算*/: O2 b W7 C0 k8 T- h6 V2 ?/ ~
{" U. C: {& g, N6 l3 e& ?. Y9 z
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/. W2 ]5 Z1 Q- \8 A1 Y
{
- c8 y3 f$ J$ b$ Y( C2 C gotoxy(10,5+i);
" b7 _+ u) T9 f for(j=0;j<10;j++)
% ? A! k6 N* Y3 M8 O( }6 C {
, V5 Q) e( A/ C if(chMap[j]==0)
8 }4 n5 v% t& N printf("#");/ M3 M9 e2 V' j2 H8 O8 [( L
if(chMap[j]==1)
- B3 o8 Z8 B1 ^+ H- c$ f printf(" ");; H+ k0 d7 g& e) i8 @5 R
if(chMap[j]==2)
. H2 k3 J6 t3 p7 r7 ~. l printf("X");" A( R# @$ h% q; O7 y* R
}
7 i" R! `4 e7 C7 J0 X }. M# {0 h' ~# L( [& G, p
j=0; /*判断是否所有箱子都在目标坐标上*/
+ r9 N0 [% ]" C( d r for(i=0;i<4;i++)8 l, t# r" _& }+ R' Z9 P# n
if(chMap[Box.y-5][Box.x-10]==2)
* ]; O, G, k1 A j++;, W, r& V* C. V) |% p5 a
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/ U# W% S$ X) m2 A7 V- Y0 V7 S2 [
{
# I, Z- F6 |- C8 Y' t clrscr();* y; _' D) n4 E% s- n
printf("You Win!");# P$ J1 k" c( Q5 P0 X
break;7 {+ v9 e* G) t8 u2 {. B8 O9 U8 j
}
# Y9 t* S s- `- A7 C5 _! O for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
2 m1 |( M2 g( P: C( m {
K# m0 _$ z: G- T, {1 ? gotoxy(Box.x,Box.y);
7 B1 X! K/ Y P' U; U0 p printf("0");- G( Q2 w* b' s3 d, R L0 @3 W( F
}# `$ d4 I+ a$ j2 G0 Z( U) |/ k
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/: g" q% z: |$ |* C- e
printf("*\b");
% N; v: U1 \( `- F6 w, y tx=x; /*记录本次移动前的坐标*/
7 F- p- l9 G* P ty=y;
) I: _0 F) ` t6 { iKey=fnGetKey();$ _; e' F# u5 r$ I9 U5 a7 _4 l
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/: U R4 }9 I4 D8 k% k' R) s% t( [
x--;8 L0 R" l5 L3 h* _+ E
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0), e% _; } r$ I$ v6 D8 B) N O
x++;
! R0 a6 r* \4 S if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)7 Q& g8 K, S* f! i6 q6 T2 n
y--;
- j" h$ x; o; ~' Z! x+ _* w if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
: K; D! Q Y% q6 ^( k8 H- s' E y++; /*输入ESC退出并输出"YOU LOST"*/. n n* m! T# m1 E
if(iKey==ESC)3 A" i. }( U( ~0 @; {
{
0 z% J& j4 v' Y* B; e clrscr();# F9 O( x3 X/ |# H
printf("You Lost");
4 C Q) l$ \$ z; D$ P' U break;
& k- Z' s3 I6 u" r' J. ~/ ?6 x }
+ K1 w: A% k, P; l for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/2 g7 A8 x% ?( H- T0 M w/ k P6 d
if(Box.x==x&&Box.y==y)8 a1 {: y. u% T
{! o+ a( t- P$ v7 s' L" t. |$ [# q4 _; f
Box.x+=(x-tx);0 s3 m4 V) f3 G1 E3 W
Box.y+=(y-ty);
8 j* [3 _4 |* Q3 Z. H: J if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
4 b/ ?6 O$ ?$ \+ ]) \. Q+ x" V {
; _4 X$ i! t- W" a. @7 H5 } Box.x-=(x-tx);
9 H3 h0 }3 {, g+ |3 Q Box.y-=(y-ty);$ J" \3 ?: N3 b: M, m
x=tx;
) E' d; a1 H+ j. O8 S, F: o: } e y=ty; u0 g3 ^' h; t3 y
}* f0 f; ^- @. l7 D' ~
break; C5 u* W1 p$ y8 m- p' V! p5 C
}
& }! i! a6 j/ _9 T | clrscr();; z; T$ y* X; b( H& P! }% [& e
}% m# ]+ ^" I; g1 C' |* I1 ?
getch();
% L9 ~- d/ G1 P4 P: E7 ~}7 V- o0 x% u$ g: N* b
$ _3 T, w1 u8 C3 l; V# X
6 t( ?: {- p, m( N
0 F' [/ G9 L" h/ y' a$ {………………………END(复制上面的红色字段)………………………………………………… |
|