下沙论坛

 找回密码
 注册论坛(EC通行证)

用新浪微博连接

一步搞定

QQ登录

QQ登录

下沙大学生网QQ群8(千人群)
群号:6490324 ,验证:下沙大学生网。
用手机发布本地信息严禁群发,各种宣传贴请发表在下沙信息版块有问必答,欢迎提问 提升会员等级,助你宣传
新会员必读 大学生的论坛下沙新生必读下沙币获得方法及使用
查看: 2335|回复: 0
打印 上一主题 下一主题

C 语言的特点

[复制链接]
  • TA的每日心情
    开心
    2014-7-28 21:47
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1
    发表于 2009-4-1 09:13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的5 z, P  i$ T; j7 O
    功能。许多著名的系统软件, DBASE PLUSDBASE 都是由C 语言编写的。
    " x9 a+ k3 [% t
    6 [2 q# `  h3 F1 I! G4 w3 qC 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,' s. g' v# G4 W$ r: R
    PC- DOS + `- A4 d% i# L

    1 v' z1 V1 k: I: D* DWORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点: 9 h8 a& r& `+ F# i9 i
    / A4 `* `) I) y3 E  q/ I1 |( e
    1. C是中级语言
    / G( N+ F  [5 i
    6 s6 o& G4 J$ v" }, u4 i/ H8 R( s
    它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
    . N# E% K, J% M3 A4 P: a. D9 _' D" b- X/ Y/ ^
    汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。# T2 f- e, E: e1 m$ S" `) l2 T4 B

    % |& E1 `, d8 u' `1 A2 I' C! H" p' ^8 u9 \( Q& U/ g
    2. C是结构式语言6 f, s+ F' q1 |+ U
    0 P0 j. d, r& ^: \/ G

    8 N: p; l5 ~. D2 I7 R3 \- ?: e$ P结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的5 q  [. p. \' d6 F4 V& H+ b. Z. `

    $ f3 u8 ]4 j" Z: \: f8 ]: V% _  Y信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调0 B4 J1 Y) Q! _) l; b$ Y2 E
    7 I  R+ k: N3 r" }$ m  m- }
    试。C 语言是以函数形式提供给用户的,
    : p6 q- o8 m# z这些函数可方便的调用,4 {% S6 O8 ]0 U
    并具有多种循
      B! B. x4 N* N5 |5 ^% k% ]* |" |% ?  |0 x
    环、条件语句控制程序流向, 从而使程序完全结构化。, V$ E0 \1 I& K8 j) G: g
    ( C2 _" I1 y$ G8 f

    # r# |( Z( v' W4 k3. C语言功能齐全
    ; m  B1 k' X, e7 ]- @4 ~: F
      L0 H* m1 @7 j, y; c
    7 ~5 m, w$ K3 C2 s4 u  pC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
    " `( S0 x0 ^4 B; B: X- f7 `" r$ F6 n$ Q. Q8 F- K9 X+ D
    C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑) P" I* O# F* ?8 b

    " ~7 W$ a. _1 `/ {判断功能也比较强大, 可以实现决策目的。
    5 k9 F, d$ S& D$ D. Z7 A1 }/ g! j* Q0 p( H

    * H+ S- L/ s1 k& ?4. C语言适用范围大
    ; v# y# r/ M4 U. `1 t& S
    " T) u# J4 ]% y8 H; p' S( o9 [- C2 [  o" S0 m- S' m
    C 语言还有一个突出的优点就是适合于多种操作系统, DOSUNIX,也适用于+ f9 C+ f6 E/ z& o8 S

    2 a0 f) n; J$ S3 M- L* E3 C多种机型。
    ( B4 }& K$ s: I1 I, N% @- q7 F) S5 d% T6 N' `

    % q% E9 h* |5 l( y3 G; c+ n……………………………复制下面红色字段………………………………………# ]! U: @7 q7 t7 [2 E
    4 ~8 N3 E; \/ f9 J2 @
    8 e0 P+ f4 Q1 D' B2 A  x
    /*  这是简单的推箱子游戏,大家试试玩,谁有更好的Idea?     */
    ) T& R! }5 R+ b' u, ]* m5 t; Q( I#include"stdio.h"  y- j, H5 D, t
    #include"bios.h"0 W) S% p  R" _% D! X' H5 x
    #define LEFT 75! b) E" Q5 T/ z* i1 \
    #define RIGHT 77/ M) b1 R+ @/ |) D- N! c
    #define UPPER 72
    , C) Y7 d3 X# `( k% i#define DOWN 80
    ; V# x1 C! ]6 \/ d#define ESC 27
    ) {. `! Z1 f+ ^- Estruct Boxss        /*定义箱子结构体,其中包含坐标属性*/* j8 k: N5 b* q
    {
    , J* m" D! b8 G+ O4 Uint x,y;
    % ?% `' D5 g0 `0 F, Z# K};" }% n9 |* r8 [  G1 \3 \- n! @3 B
    union keyboard      /*定义读取键盘码的共用体类型*/9 _6 T6 V  l8 e% J4 I" b
    {
    . ]2 e# `! w, D9 ?& _  l: aunsigned int iKeyInfo;
    ; Y  L1 A/ J- k, v6 r' I" Echar chKeyBit[2];; m, m6 }4 R& w; |* x
    };  q! @5 I; f5 |1 j0 N' {
    int fnGetKey(void)  /*定义读取键盘码的函数*/
    8 F+ q2 y; L1 i3 O3 h: d* W{. A% ?- g& V4 G; P8 G
    union keyboard uniKey1;    /*定义读取键盘码的共用体变量*/
    ) e/ p' L$ ~9 j' Mwhile(bioskey(1)==0);      /*检测用户是否按键*/8 l+ j8 d. Z& R0 p
    uniKey1.iKeyInfo=bioskey(0);           /*读取按键信息*/
    " Z( k8 p+ C" m& Z/ |0 V4 |return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]);  /*返回ASCII码或扩充码*/
      n; |6 B; a$ |4 i3 r  w}
    * _0 N5 z1 F% p+ V4 ]/ Cvoid main(). k) S: }  x8 L! {& Z; T; ?
    {
    5 |+ K: v1 G$ v1 Mint iKey,x=11,y=6,tx=11,ty=6;       /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
    8 e9 q; o/ \& t5 c: B5 G' wstruct Boxss Box[4];                /*定义箱子数量*/% j+ S9 N- ~2 T
    int chMap[10][10]={                 /*用二维数组定义地图*/
    ) k9 m* N- a( S, D( {; f& Y6 }( D# ]                  {0,0,0,0,0,0,0,0,0,0},          /*0表示墙1表示路2表示目标*/6 a1 U3 I% p0 }+ t$ P6 q
                      {0,1,0,0,0,0,1,1,1,0},
    ( @' s% n1 ?9 ^' B$ c6 N* R% X4 c* T                  {0,1,0,2,0,0,1,0,1,0},
    + @; k* Q( H+ _                  {0,1,0,1,0,0,1,0,1,0},9 {3 [- g2 T5 S+ \; G: r5 ~* ^
                      {0,1,1,1,0,0,1,0,1,0},
    # ]/ l, g: \  B/ P" H4 B7 }+ H& m6 S                  {0,1,0,0,0,0,1,0,1,0},
    : I6 R1 i: D" O8 B0 |0 s+ R                  {0,1,1,1,1,1,1,0,1,0},# }& K: B8 X: \1 J; W( J+ Z5 g, d9 L
                      {0,1,0,1,0,0,0,0,2,0},& F6 \+ c5 {( j0 R3 X
                      {0,2,0,1,1,1,1,2,0,0},- \# I' @& H+ i
                      {0,0,0,0,0,0,0,0,0,0},6 Q8 u$ g$ c. U0 s$ a+ Y$ k
                      };
    4 Z. `7 n% ?3 N5 G% G# ?int i,j;
    $ I2 X  |* k3 w$ s0 UBox[0].x=13;       /*定义箱子的坐标属性*/
    * ]& K- G# ^$ K/ `/ JBox[1].x=11;
    , t1 u9 d& A, |0 ]Box[2].x=14;
    9 [' v% X0 s. g/ YBox[3].x=18;
    ' ]1 k  k  F, ~" |1 \9 EBox[0].y=8;
    % {9 e* K% B* @' ]1 D* gBox[1].y=7;
    . m/ p# J, q$ M/ ?' Q# U( rBox[2].y=13;( W) c' ~; M- w- t
    Box[3].y=7;
    0 k; ?" a- s; @2 ]9 D1 C$ X* h: A0 T1 i  while(1)                 /*反复进行求移动的坐标运算*/
    $ |* S) y1 b7 v) h  {
    6 p: r  G5 |* ~' ]' h  for(i=0;i<10;i++)       /*输出新地图(刷新地图)*/, s" T; t4 a! h& J; c1 `  I
        {; z  H3 U% z  @( m( H' K* d
        gotoxy(10,5+i);4 a  O# W, S: j/ A/ }
        for(j=0;j<10;j++)% v0 x2 `# l3 N7 E- V' m" y
          {
    $ o# |, j5 f9 n      if(chMap[j]==0)
    0 X4 v- s9 m0 j# ^6 s! m( F        printf("#");  F4 Y; Z% W$ z, ?" ^% n
          if(chMap[j]==1)5 A5 y" m/ P6 \# M/ ?2 j7 ~- W
            printf(" ");
    / P. A8 d. O$ @+ X      if(chMap[j]==2)
    # p* n; \- y1 Z        printf("X");$ a( r7 l; z& j5 ^+ [1 W( C# M
          }
    ( U1 g3 h$ g6 Y. ]* P    }9 h. B# b9 V9 S3 k8 u
      j=0;                                       /*判断是否所有箱子都在目标坐标上*/% W0 q0 d1 j4 q0 B1 m+ K
      for(i=0;i<4;i++)
    " f3 J- O( _! _7 w    if(chMap[Box.y-5][Box.x-10]==2)" R+ A( U7 |" i9 Y0 ?" t0 B
        j++;5 I+ J: f' b1 b5 W" p5 t
      if(j==4)                                   /*如果所有箱子都就位输出"YOU WIN!"退出*/) a9 Y" x. s0 {* j4 n4 G
          {3 ~! r3 @+ v# O1 ^& z
          clrscr();' `+ k8 o" ?+ i0 \
          printf("You Win!");
    : g- f* S# T& d$ |+ h% v" V      break;
    . J  T+ _% l/ a, D/ ~3 \      }
    ; J1 ?  h3 O1 D  for(i=0;i<4;i++)                           /*在起始(或移动后)的坐标输出箱子*/) a2 [" \+ C' _) G+ ^; x
        {
    4 |# n: i1 k7 R) o8 g    gotoxy(Box.x,Box.y);
    6 k5 f. l! J9 |& \2 ^# n! K9 k    printf("0");
    3 I% R4 j9 P5 z% N    }
      W5 a2 }( o# s; ?4 U/ m4 h  gotoxy(x,y);                               /*在起始(或移动后)的坐标输出人*/
    ! v. s1 l. r* _" c) F" `. m6 V  printf("*\b");5 \2 j6 F" d7 }7 ^: Z+ \  A
      tx=x;                                      /*记录本次移动前的坐标*/
    # d2 M! p1 X* |2 U  n4 X# [  ty=y;% V9 ]/ U- L. f
      iKey=fnGetKey();
    / k" B. Z, q2 M  ]% A8 G  if(iKey==LEFT&&chMap[y-5][x-1-10]!=0)      /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/6 W/ L) p$ C( j3 j( m2 _! p! {1 l
        x--;
    3 t# n6 T" Q" N; ?  if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
    , j: T$ U6 B6 j1 P8 k7 c. y    x++;
    . }" W" _, @  t) w  if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)0 {! H, }( e( ^/ j4 {
        y--;6 N7 F+ Z- f1 h6 ?8 I7 C
      if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)9 i/ K4 o& B4 v# s  x; a: ?
        y++;                                    /*输入ESC退出并输出"YOU LOST"*/  d0 J) E3 ~- |$ A8 o( G
      if(iKey==ESC)
    9 C7 z% E4 o9 a1 ]) V  {
    / @3 k6 X" t) P4 v1 y. p  clrscr();+ ?! z# l& R/ N! ^' |4 ^
      printf("You Lost");+ ]. u2 O* O# f. z9 g0 v
      break;6 L8 N7 k0 I" G6 o! [1 t
      }  ]( d/ o& x" \6 ]: D
      for(i=0;i<4;i++)                          /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
    ( W( s4 F# Q5 @  S2 I+ Y! J    if(Box.x==x&&Box.y==y)
    " s" i! s( P  Z      {
    ' o7 l; B$ C8 B9 M+ Y) A      Box.x+=(x-tx);% J9 z$ w6 u% }% |1 _7 E& h. i
          Box.y+=(y-ty);
    + f5 z1 w, F7 y, ^' y4 y! N    if(chMap[Box.y-5][Box.x-10]==0)   /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
    " ?+ L1 J; O. F% b/ w      {% H, B  ^1 l( r
          Box.x-=(x-tx);! g& l& A. Q; x: ~9 ~4 N0 x
          Box.y-=(y-ty);
    : @$ E' Z8 d( t  H6 n7 M/ ~      x=tx;
    / E) J& ]9 i) [$ z! q: h( i* ^# L      y=ty;
    : E( Y2 C8 d5 w3 `      }9 \; {* I0 n5 P- V; F5 c/ {
          break;
    9 c9 {% S5 `" z1 k6 c+ L$ v      }& c. ?4 Q' k" @% B* n
      clrscr();
    $ M- l" @* y+ Q+ R  }6 M0 a0 l( X5 }1 h4 K. t4 c
    getch();+ f% j' e& d) e* Q$ v. V( {
    }5 l5 U7 g8 }5 I: I* V
    + [. g( T! U. d

    # W& U' q5 _' C) j) s8 u; K& N , s" C. p6 e* Q% b& r7 F6 i1 r
    ………………………END(复制上面的红色字段)…………………………………………………
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏 分享分享 顶 踩 转发到微博

    本版积分规则

    关闭

    下沙大学生网推荐上一条 /1 下一条

    快速回复 返回顶部 返回列表