下沙论坛
标题:
C 语言的特点
[打印本页]
作者:
秋风舞落叶
时间:
2009-4-1 09:13
标题:
C 语言的特点
C
语言发展如此迅速
,
而且成为最受欢迎的语言之一
,
主要因为它具有强大的
B2 j% _$ ^2 _# w$ b- T& a
功能。许多著名的系统软件
,
如
DBASE
Ⅲ
PLUS
、
DBASE
Ⅳ
都是由
C
语言编写的。
/ c& r. d# w+ q' G K9 E4 E6 k! E2 s6 o
$ E+ F% O0 [) j7 k0 A
用
C
语言加上一些汇编语言子程序
,
就更能显示
C
语言的优势了
,
. Z: ]' {0 v' f
象
PC- DOS
、
2 c9 C' F: u; x5 U" v
4 V# l/ H5 f. p& l6 z: g' c! j
WORDSTAR
等就是用这种方法编写的。归纳起来
C
语言具有下列特点
:
6 G4 }# K0 F: n2 g
3 b0 g/ W' G e0 K& J) {" @+ o
1. C
是中级语言
/ {$ b/ T1 z' A2 v
+ q( K+ z2 O2 }( ?
Z- A( ^$ o( v0 R
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C
语言可以象
! w2 G0 y% `7 g
+ E1 L( a8 ^/ ^; f. J; P
汇编语言一样对位、字节和地址进行操作
,
而这三者是计算机最基本的工作单元。
$ I+ H t8 r) o: C
% X# y% s$ K. q& E
9 b0 q( l) @+ h+ u& t x
2. C
是结构式语言
, V; {6 `4 f% n$ }2 J
( P/ f6 J3 l' F1 q$ W9 a/ G9 p% K
7 P2 o" ^# c# \
结构式语言的显著特点是代码及数据的分隔化
,
即程序的各个部分除了必要的
6 z/ J. a1 K) ^' N$ c
: ]) _, {& s; D; q z0 J
信息交流外彼此独立。这种结构化方式可使程序层次清晰
,
便于使用、维护以及调
' M: s* K8 d& Y- ^! V- i% y
* M: x8 W, `% X, I+ C- B8 K' k$ z
试。
C
语言是以函数形式提供给用户的
,
z P9 F% g5 ~0 h1 B% x
这些函数可方便的调用
,
# y) ^1 T$ ]2 f2 u1 a9 Q4 C) l
并具有多种循
" ~$ ?, r$ y; P& a1 D
: K3 S. @" y a# a
环、条件语句控制程序流向
,
从而使程序完全结构化。
E' o9 d' V8 c9 d
4 Y- R$ O$ q- x' g, W$ _
% F" ?8 H# l1 b& \, ^. J' m9 E1 V4 H
3. C
语言功能齐全
0 C( z! d( h& C% @
# k4 J$ x1 r5 K8 U) ?7 E) @
9 T' p- S" _7 z8 ]9 }
C
语言具有各种各样的数据类型
,
并引入了指针概念
,
可使程序效率更高。另
! a" z I4 q9 a5 _3 r
- I% }) b9 s! D- V" E
外
C
语言也具有强大的图形功能
,
支持多种显示器和驱动器。而且计算功能、逻辑
0 O' l0 a, {& K, Y( |+ X
0 P/ Q# `- t* Y/ C F, R( ~: Q
判断功能也比较强大
,
可以实现决策目的。
% [+ ^$ O O. B+ M
. m: Q8 q3 O" }1 [# O
7 |" Z% M7 P m8 C d9 A
4. C
语言适用范围大
) x: \- ` F8 p- B
) v) A. N9 R& g0 P! Z8 N
$ ^( L% w" a7 j" H/ n
C
语言还有一个突出的优点就是适合于多种操作系统
,
如
DOS
、
UNIX,
也适用于
; @ n$ Q: y3 h% k: f: `; @
6 N! l0 E1 t% P8 Z* l% m7 u
多种机型。
. l0 M# B; I$ Q9 W/ V' g. f0 i4 t
$ R. y2 R6 w. P6 ^/ P0 Q
5 ` J; U S0 O0 N; q% y
……………………………复制下面红色字段………………………………………
% v R6 X) _% d3 A
O* D+ A* L4 p5 c- e
^: Z1 v b( z9 s8 x
/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
( B" u8 e7 t5 E8 W+ V
#include"stdio.h"
, T$ O$ t1 O5 b
#include"bios.h"
0 b8 v' M1 I1 [: Q y9 Q
#define LEFT 75
) O6 f- J! w8 c$ [
#define RIGHT 77
* q$ }' N2 d8 A% a- N3 [. H) J/ X
#define UPPER 72
0 n8 {' I& S+ O/ u, d5 x
#define DOWN 80
) L9 Q1 a; w; N2 a
#define ESC 27
& E2 f. @5 @8 N& U& |
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
! d. K# ~2 P, t/ ?3 n* V/ o
{
* @' Y q( d5 y+ j9 f' r
int x,y;
. {) c& T" M* Q" l/ L* _- Y
};
9 @' n: J7 _3 b) F
union keyboard /*定义读取键盘码的共用体类型*/
+ D) @$ n- {$ \. j2 V- r+ o
{
- U5 R) K3 y& Y+ [9 S% Z( n
unsigned int iKeyInfo;
2 J: N& ^" y) M! _& H, Y
char chKeyBit[2];
& D- T. F" d% B: X: \
};
]) U4 v+ E9 a! q, J
int fnGetKey(void) /*定义读取键盘码的函数*/
3 o. ~2 ~+ a; I8 f
{
2 q; Q, s' W2 ^1 h9 r4 n
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
9 v( D! {0 O$ q. @
while(bioskey(1)==0); /*检测用户是否按键*/
8 {1 l8 r2 |" X+ O: `' I$ a; Q
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
q U2 g6 n6 ?0 ^3 b( ~ b. H
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/
/ _: u4 f. @ N
}
/ t! e, R! `- J- w% F* z
void main()
* ?' P( {$ _4 N1 Y* A9 J6 i
{
7 B0 ^8 A. V/ ]+ P# ?
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
, f) I4 `* x4 w
struct Boxss Box[4]; /*定义箱子数量*/
) M" ?* G. J0 }4 I- E) Z2 i
int chMap[10][10]={ /*用二维数组定义地图*/
# X. Y& q& {7 Q; e, I6 p
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
5 P# |- i" [$ z2 @
{0,1,0,0,0,0,1,1,1,0},
6 i! E D5 f( q# l5 c: u
{0,1,0,2,0,0,1,0,1,0},
( U5 T6 ^* c. `- O+ H3 D
{0,1,0,1,0,0,1,0,1,0},
/ s& z4 M3 n Q" T: i/ R
{0,1,1,1,0,0,1,0,1,0},
! P, P' I3 G9 g
{0,1,0,0,0,0,1,0,1,0},
V, Q) J" G! G, y( b/ \
{0,1,1,1,1,1,1,0,1,0},
+ u% R; N4 W6 x! N* ~
{0,1,0,1,0,0,0,0,2,0},
7 p; m" n' O) B$ z8 T
{0,2,0,1,1,1,1,2,0,0},
" ]2 a' H( \7 L7 c
{0,0,0,0,0,0,0,0,0,0},
( ~, F- r, [3 ~% b
};
% ^0 D# H& ?$ s- f. W1 g5 E- |, ]- @
int i,j;
+ }! v4 `" o7 ~% k
Box[0].x=13; /*定义箱子的坐标属性*/
+ t! G0 d% L( w2 d
Box[1].x=11;
! d7 D$ G1 e- B$ N# w
Box[2].x=14;
* C4 W% C$ l( e; w5 ]
Box[3].x=18;
( M, y- r6 y$ {+ q0 y+ k( N
Box[0].y=8;
S* E4 O8 s2 ^: b; c9 \) T) `
Box[1].y=7;
" m E. U1 {4 D5 Q4 M
Box[2].y=13;
$ D% K5 K8 u9 g% X- O1 ?
Box[3].y=7;
. Q5 I6 X$ @7 P' G
while(1) /*反复进行求移动的坐标运算*/
, w; W7 `& S" f9 K2 M/ Z
{
0 F3 u8 H* k3 ^# V' ^ n
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/
, E8 {% }# z: M3 E; I" E8 R0 h
{
0 \0 a* }" F3 q8 ?
gotoxy(10,5+i);
; y( J$ O% V" V+ o5 |3 X& E
for(j=0;j<10;j++)
; F6 o0 N/ j* V: F3 ~
{
' A; m2 J) T2 v l7 s: o d
if(chMap
[j]==0)
- K6 b- L2 Z' n" y W- H' j
printf("#");
1 V" |8 z& G7 @/ {
if(chMap
[j]==1)
2 j9 r* ]7 l5 s' B/ {$ ~+ h
printf(" ");
, n. i" l1 e2 A9 D
if(chMap
[j]==2)
/ I7 S$ n# e! w* Y# N5 g! e2 j! a: Y
printf("X");
# R$ l, M# b4 U5 K) l
}
7 ^5 a- p; s2 w) ?, ?# e8 l
}
/ B' H% r* x/ t5 R. o
j=0; /*判断是否所有箱子都在目标坐标上*/
4 c: c" x) T6 D7 ^
for(i=0;i<4;i++)
9 y# R: }2 L6 ~
if(chMap[Box
.y-5][Box
.x-10]==2)
1 \, D. l4 @+ k
j++;
- _: } D# ~$ r: {6 B
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
+ E& m% g' h0 y# _& V2 a2 u' O
{
! e6 P& t5 f( P2 v0 Z0 ?% {
clrscr();
; Y7 [. H, p' O& ]
printf("You Win!");
9 c2 d9 N# J8 k# `/ Z
break;
$ _5 ^/ L8 c( Q: q- Q
}
0 X2 z' {, B4 y& U2 s
for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
# ]) T4 @2 B- _
{
& G/ Q) R& @6 Y- |
gotoxy(Box
.x,Box
.y);
7 D) v7 Y7 V0 m' Z+ W2 f
printf("0");
2 I: U8 ?6 F6 V7 [ \ O% a( A
}
* G. Y$ p+ M* Y
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
7 @5 C0 R. O% Q5 @1 @
printf("*\b");
% G' T! i: ]; W, E8 {- Q8 y; W
tx=x; /*记录本次移动前的坐标*/
, l ]8 B& R' E, v4 Y+ n8 O) p
ty=y;
]( O# W8 ^) L# F- X! |# Y1 x
iKey=fnGetKey();
+ o/ M* F$ f5 e2 K
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
9 _3 \' N" k6 G. t& v
x--;
9 b4 C$ u9 A% I5 S( E
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
, h! f& k7 N8 R2 C$ ~" V
x++;
4 N# [9 Z0 U& y7 L; a3 H7 W
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
$ W$ d$ Y' l+ N# S8 Y) ]
y--;
3 n1 m$ l9 ]7 a2 G
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
8 G+ c, F' }- c# i
y++; /*输入ESC退出并输出"YOU LOST"*/
1 l$ e" R, m1 @0 g& K: G+ Z* k
if(iKey==ESC)
H0 L2 p2 c- i* @' ^
{
: |* ?0 O: [1 I+ o
clrscr();
1 b: \3 U5 g% O( E
printf("You Lost");
+ N( l% i* A( b/ T+ }; V
break;
4 M/ U1 N8 F% o$ K4 {
}
( F, n. P$ c2 I6 s, y# m" m, R! q
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
7 ?0 w4 a9 [4 D- o" ~3 A
if(Box
.x==x&&Box
.y==y)
, W; a3 D9 y$ z+ W4 @, B
{
' k6 F( B( v+ K, y" g. l; v
Box
.x+=(x-tx);
5 {2 j1 T& f% u" I3 X0 y" m% R1 O
Box
.y+=(y-ty);
. B) ]' W- f& X2 f$ Q6 F, q
if(chMap[Box
.y-5][Box
.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
" }- U# p7 j! ~
{
% W; J+ G9 h4 i/ g) S
Box
.x-=(x-tx);
# c2 L9 |: J. j" H+ P
Box
.y-=(y-ty);
6 N; y' i9 }6 D+ `0 s! e3 s
x=tx;
( J- r$ Y9 A. {; l" {; I& W
y=ty;
1 P& L! s, T& N* k
}
$ V% @% M8 m0 A7 x. Y# ^9 A
break;
: y# x! D6 r3 W2 y: s
}
$ X+ Z, ]8 t: U/ C. E, y9 Y, ^
clrscr();
, @& i# ~, ^4 [% j9 u# C0 W
}
! z. |: F& g& x/ c" |' T+ K
getch();
+ B( O0 K8 v- [6 ?% p; v. g y' l
}
0 M* N0 x: n8 l5 t: R9 |: t0 [
3 S' a: Q! `. r+ x
' r( b$ G/ h3 x& ~4 l
6 n8 Y0 a* U3 s8 G" S* h4 p5 V
………………………END(复制上面的红色字段)…………………………………………………
欢迎光临 下沙论坛 (http://bbs.xiasha.cn/)
Powered by Discuz! X3.3