TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的
+ @+ I" A: l% p% q% B' v1 V功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。
& c+ ?# C, L1 c8 V1 I# Y* P1 l3 ~7 {4 x" n# L+ U
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,
) \# S6 B) S) x6 v象PC- DOS 、5 t0 u6 c/ w7 Z
3 {1 o6 I" L3 U
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
% E) w8 j; o; @& Q$ u
9 |2 }/ C& f: h9 J4 e; j1. C是中级语言
/ j- V) q, A1 \' ]
- |+ ^6 ~. r1 j! Z) v2 \
, n( j3 [- A1 R' h8 P它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
& ]" |% W3 {/ f$ s7 L$ _2 Q/ N% m1 o4 ?( P8 Y+ G
汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。' [* P/ [; a. N' r. g
_8 R# l! R7 @) b# `
8 t3 r/ x8 P, ~( a% ^ H6 H! H2. C是结构式语言
( `8 L2 R* `( b3 K$ q& Z! x8 h% r D, \: C7 ?& x
( s- q2 p( t# F9 C结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的; C& c7 w0 L. U! c" z+ z
- F4 Y3 i4 \9 U& R: w
信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调, o. K( g5 x2 x% M# z, G7 M' q
) \2 E# w* d+ C试。C 语言是以函数形式提供给用户的,
' O- b2 `2 X$ \. ^8 w. F) V7 X这些函数可方便的调用,# R- x( \, j3 I/ I
并具有多种循
4 `5 A) N# I4 l3 L8 d" @, e* S- `1 A" R c- ^1 I
环、条件语句控制程序流向, 从而使程序完全结构化。
$ K* v6 ]8 v5 x3 m( A4 K
9 E8 @' o. A) o5 c
* A' f+ o5 l: I. y/ \4 T3 D3. C语言功能齐全
& f, U! r4 d, S/ P% I
, z- m9 \# g' K8 o J* A! M
' S4 ^4 Q* q! d9 ?/ AC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另+ n' \6 m1 e; c' E: Y
) L" ]) v6 s+ A" i1 d) B外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑1 F7 \8 L% W9 h; Y" i6 P
0 N* ~1 F+ _8 o" g& \判断功能也比较强大, 可以实现决策目的。
5 M b4 ~9 W' o. }" ?: G) d$ N U) h6 x* S4 R) r% \
2 K- ~) o& f+ B) {
4. C语言适用范围大
( d6 E8 G: g7 R0 f+ B f) q' H- E$ i2 U$ s3 A
; w5 \9 t- C% u" v9 ?% h
C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于3 J9 J" @' ~5 ~
( k# E6 Y, K; {1 c
多种机型。6 `: h2 E; F* A* M! |; Q% |
. t7 i' N1 V/ x6 S; _
( D5 Q4 i9 e% G. m d( D……………………………复制下面红色字段………………………………………. u/ i& Q' t7 Y9 w0 R. L
5 G W- e) L4 @; ]& Y$ C; j& m0 V) B
/ [2 f/ E- l* q2 h/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
7 W. i; c) F' b6 U* K* `+ ?#include"stdio.h", v* m. e9 b0 }& l. Y$ k. n
#include"bios.h"4 R) K% L4 j6 M3 ^3 K4 K, L
#define LEFT 75+ Z4 H8 t: a; I* J1 T8 f% b; v+ H
#define RIGHT 775 h2 N' U. p3 ]1 i/ F
#define UPPER 72. M- E1 C3 R9 n+ W, y4 s
#define DOWN 80. K+ v& R' U8 x; ~/ J
#define ESC 27
3 _. o' `6 Q3 ]% F& ^9 estruct Boxss /*定义箱子结构体,其中包含坐标属性*/0 L2 j' S; K4 Q
{) w: w: J+ M0 ?2 s! [+ m
int x,y;5 V3 c% I0 ]$ m4 A8 O
};* `# ?# R8 a- {5 r, ]9 i5 A" J
union keyboard /*定义读取键盘码的共用体类型*/
& g! A5 M8 n% [8 A5 |5 e{9 {& C( n% g/ d7 A1 v4 ?$ l V
unsigned int iKeyInfo;
- |, Z9 {- {2 c% Z Dchar chKeyBit[2];
. ?( p; P; M" b |, ^};1 ?5 x% ]7 T3 t6 C0 s
int fnGetKey(void) /*定义读取键盘码的函数*/
. ^5 B' ~ D6 M1 f N3 ?8 b9 O{ G" L) L S6 f/ p6 x
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/. U+ h0 W4 v% K) n
while(bioskey(1)==0); /*检测用户是否按键*/
$ L( ]$ \- S! S p' n7 LuniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
: r) k5 K% M0 zreturn(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/
5 l _1 |) W8 H' c6 @$ @}
+ a0 b! R& }" O& O! Rvoid main()
P5 e- X0 J+ Y+ O2 ]; {{( P$ f I6 d, @* Y( K
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
1 j5 s* a4 f5 fstruct Boxss Box[4]; /*定义箱子数量*// b% y% {4 t. H# c% u6 c3 o
int chMap[10][10]={ /*用二维数组定义地图*/- X( C, J% `, r/ V
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
1 ^9 o* {% C }8 n: x1 w {0,1,0,0,0,0,1,1,1,0},2 L; a5 o( J% U- |' Q
{0,1,0,2,0,0,1,0,1,0},5 `1 c1 D4 \+ q, L Z
{0,1,0,1,0,0,1,0,1,0},
( _ O3 _8 k+ g0 f {0,1,1,1,0,0,1,0,1,0},
7 ]( W$ ^+ a' I5 L {0,1,0,0,0,0,1,0,1,0},
4 N3 g3 ]& W' N V {0,1,1,1,1,1,1,0,1,0},
7 l/ H) _+ w$ R1 p! k% W {0,1,0,1,0,0,0,0,2,0},$ J5 ^8 g; g$ }3 H$ ]
{0,2,0,1,1,1,1,2,0,0},( S2 K. B0 \- P. c- w) w8 K
{0,0,0,0,0,0,0,0,0,0}," Z, D9 {% [; w% S Y) P8 U5 Z
};
" ]" m8 L. h3 L5 Yint i,j;
# |9 P' i4 A4 o- iBox[0].x=13; /*定义箱子的坐标属性*/* O/ i. f. n- ?" r
Box[1].x=11;6 t0 r5 B1 g7 r- T* I' M" r
Box[2].x=14;8 V, S6 W3 n: ~7 v9 ]0 W
Box[3].x=18;
- o2 B# ^; p& M; V1 eBox[0].y=8;; E9 a7 l5 i' o& d6 X2 J
Box[1].y=7;3 }, C4 [# w8 R( V- u: Y+ w7 B1 ^( B
Box[2].y=13;1 M0 |3 p4 M5 @( A3 G! Y- m( S; H
Box[3].y=7;
" I# }: A, m' q; _( B while(1) /*反复进行求移动的坐标运算*/
) h9 o" t" O# Y {
8 L2 `. Q$ Q8 W. r( ~ for(i=0;i<10;i++) /*输出新地图(刷新地图)*/# M3 t/ b2 L7 b/ @# s/ _5 ^8 {" z
{% t* Z& P; U1 |, U
gotoxy(10,5+i);
7 E; H% f( x+ y2 h for(j=0;j<10;j++)
+ `5 n5 {) f0 R( L; t {! K& p. L! ^& _, t) ^
if(chMap[j]==0) J' G1 T) s4 H! J
printf("#");! V+ l4 e0 o, D! q" ~
if(chMap[j]==1)' G& Y' _; Z0 r- @8 s7 G; f% Q; ]
printf(" ");+ _9 Z! a; l2 R0 i% s
if(chMap[j]==2)
" x" s8 L& s4 R: H7 A+ K' v printf("X");9 l% m6 D( S6 a
}: ]+ m: h0 v7 v7 J0 U! M
}, u( D m0 J% b2 X
j=0; /*判断是否所有箱子都在目标坐标上*/
; K* K! o' I; \0 J: j for(i=0;i<4;i++)
/ N6 O& o" @% s2 z if(chMap[Box.y-5][Box.x-10]==2)* d4 t1 I# n# P, [9 ]
j++;9 _; M% y; @+ T9 P( |& Q/ W6 c
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
4 u+ d6 I1 P$ {+ \0 s. M {4 F; F8 f/ ?1 |% {& Y# b
clrscr();
* e4 N6 i$ U% u printf("You Win!");
" X" O+ ~4 s' v break;
0 w& K# k6 J. D3 ~( S" Q } A: A* g' t" ~' I6 c+ Z- h; M0 l+ m
for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/% I& G% k8 [2 { t8 j
{3 Z, Y5 C0 q" x$ \" x8 b* Y' j& ]
gotoxy(Box.x,Box.y);
$ w8 v6 M8 W u( @+ T printf("0");- r) ?( @/ I( W* K) {- O
}7 z, j9 r4 V9 g" I' e
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/1 d& Z& E( {9 U: R0 e' r6 R1 j* ?+ Q
printf("*\b");
" C9 L0 _9 i# t5 Q tx=x; /*记录本次移动前的坐标*/
6 q' X- c( |* W# `. c ty=y;
# K6 A* }# y" s5 R/ H% I5 F" w iKey=fnGetKey();* K' h" P& |/ H! [
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/" E& a3 Y5 U& W& {8 M
x--;
2 y' n& c; K; ~+ D if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
8 D( `- |: `2 U/ \7 h8 w2 f+ N; T- N x++;
( r- l( {6 |! n6 b if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)! {6 \ ` Z! c8 \/ j4 G- v. P* S
y--;" B+ w" F9 b" b3 e. {2 t' p. W
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
# P6 a+ E U, \ y++; /*输入ESC退出并输出"YOU LOST"*/; N$ v: ]2 D* j5 P8 r
if(iKey==ESC)
9 t" Q) e. K( j, j {
7 H2 q: K) p- i' ~1 C2 j2 \2 h clrscr();+ o: K$ N7 R( F9 i8 g, `3 l
printf("You Lost");5 m, I; I0 ]' J) c$ k$ d
break;+ p1 o$ ^' R% X: E; m
}
! Q# F, Z7 V9 s4 ~0 V- o for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
9 U1 `8 G' g7 j5 H& b* g% C if(Box.x==x&&Box.y==y)' |7 \3 M7 F5 [/ z& s7 O
{) X5 i4 Y' s! v* d: v
Box.x+=(x-tx);4 D/ E; w7 j2 i+ E$ r/ X. j
Box.y+=(y-ty);
: L w. D% d" K, [/ U1 }+ P* k& h if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
4 p# C) i: J Y5 k2 ] {# w t8 s8 H. x9 J
Box.x-=(x-tx);, X' }2 A- U2 N& e' @0 f
Box.y-=(y-ty);" {: k( f4 `3 H8 y( o
x=tx;
1 N1 W% I( u* A7 b$ b. ? y=ty;5 W" W( n; z% |# g4 n* y8 _% K
}
6 u0 [ k+ e" p6 j2 p( b break;
7 }3 N! E: W! ]- n, @/ V6 X% b }
# n8 @! [ _1 Q clrscr();
0 {4 @0 ~. u/ }3 T }
5 V# w2 U' l# F4 h, s/ [getch();
W& B8 b) g0 O6 k! M}! |! X& {$ a1 w. `( C; b ^
" O# p4 E4 d6 X6 `2 }, E9 V7 b
& q7 {" M5 z6 y& h6 A Y/ H
) U- B3 v: c) H8 E2 n* Q" p………………………END(复制上面的红色字段)………………………………………………… |
|