下沙论坛

标题: C 语言的特点 [打印本页]

作者: 秋风舞落叶    时间: 2009-4-1 09:13
标题: C 语言的特点
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的
  B2 j% _$ ^2 _# w$ b- T& a功能。许多著名的系统软件, DBASE PLUSDBASE 都是由C 语言编写的。
/ c& r. d# w+ q' G  K9 E4 E6 k! E2 s6 o
$ E+ F% O0 [) j7 k0 AC 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,
. Z: ]' {0 v' fPC- DOS
2 c9 C' F: u; x5 U" v
4 V# l/ H5 f. p& l6 z: g' c! jWORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
6 G4 }# K0 F: n2 g
3 b0 g/ W' G  e0 K& J) {" @+ o1. 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  x2. 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 d4 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 A4. C语言适用范围大) x: \- `  F8 p- B

) v) A. N9 R& g0 P! Z8 N$ ^( L% w" a7 j" H/ n
C 语言还有一个突出的优点就是适合于多种操作系统, DOSUNIX,也适用于; @  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' rint x,y;. {) c& T" M* Q" l/ L* _- Y
};
9 @' n: J7 _3 b) Funion keyboard      /*定义读取键盘码的共用体类型*/+ D) @$ n- {$ \. j2 V- r+ o
{
- U5 R) K3 y& Y+ [9 S% Z( nunsigned int iKeyInfo;
2 J: N& ^" y) M! _& H, Ychar 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* zvoid 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 ~% kBox[0].x=13;       /*定义箱子的坐标属性*/
+ t! G0 d% L( w2 dBox[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( NBox[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