数学建模社区-数学中国

标题: c语言入门很简单 书连载 [打印本页]

作者: lili456    时间: 2012-5-28 10:00
标题: c语言入门很简单 书连载

0 p2 ]: s8 c$ z( g6 y" ~内 容 简 介
. d+ o/ D8 Z/ G2 K6 I2 y本书是一本与众不同的C语言学习读物,是一本化繁为简,把“抽象”问题“具体”化,把复杂问题简单化的书。在本书中,避免出现云山雾罩、晦涩难懂的讲解,代之以轻松活泼、由浅入深的剖析,这必将使每一个阅读本书的读者少走弯路,快速上手,从而建立学习C程序设计的信心。- F4 U* A- K/ N# [
本书15章,分为5篇,从实用出发,由遇到的问题引出解决问题的方法来系统讲述C语言的各个特性及程序设计的基本方法。本书内容主要包括常量、变量、程序结构、数组、字符串、指针、结构体、共同体、枚举类型、函数、局部变量和全局变量、预处理命令和文件等一些非常重要的知识。通过阅读本书,读者可以在较短的时间内理解C程序设计的各个重要概念和知识点,为进一步学习打好基础。
! Q* Z  i+ E' r, |  S+ f' j% u本书配带1张DVD光盘,收录了本书重点内容的教学视频和涉及的源代码,光盘中还赠送了大量超值的C语言进阶视频。- |7 ^0 O4 |/ L
本书最为适合没有基础的C语言入门新手阅读;对于有一定基础的读者,可通过本书进一步理解C语言的各个重要知识点和概念;对于大、中专院校的学生和培训班的学员,本书不失为一本好教材。+ L, ]$ X6 B) x0 ?" ?

作者: lili456    时间: 2012-5-28 10:01
目录
' D% {& k2 |5 J& A5 D  N7 {8 W第1篇  一切从基础开始# q; H6 }0 l( J5 }9 P/ u
第1章  概述' h4 M/ a3 u5 H9 k; F; R+ ^0 B
1.1  C语言简介7 T5 Z" \  f+ B% z" `3 Z; X
1.1.1  C语言的位置
: u/ l, E" L& h1 I$ L+ @3 H& E1.1.2  C语言的优缺点5 }- |2 S* h# G- q5 {6 w
1.1.3  C适合什么开发. f2 N- B: K) B2 F
1.2  C语言的开发环境* C% |) B( p3 E' u
1.2.1  编辑器、编译器和链接器
' `& D& V2 L' Y' @1 |7 ^# j5 `3 {0 _1.2.2  集成开发环境) M! N  F5 m5 j5 [" Y* A
1.3  Visual Studio使用简介* S! _3 ?0 x$ l0 }0 W
1.3.1  Visual Studio版本& r, W* ]! C1 W6 U5 O5 j. B
1.3.2  Visual Studio的安装
. h7 b( _; y1 X1.3.3  新建项目
6 y9 C4 D3 b- y1 E1.3.4  编写代码* W9 ]  H* i1 D% c8 p
1.3.5  编译链接
3 I- K" R: Z7 m/ b8 e3 O1.3.6  运行可执行程序0 m$ n3 Q/ q) Z8 |! I) |  C6 J
1.4  如何学好C语言
) b0 {( J) h+ W' F; j' q1.5  小结
& J4 i7 T) Z1 `; M) ?: v6 \1.6  习题# [$ }, s9 P! X2 F0 y
第2章  开始C语言之旅
- ^/ W8 [! k& X- K2 @& G6 a2.1  为什么要写代码
. U8 }( G! _0 W0 w- Y$ f  `( U2.1.1  为什么要写程序
/ ?& o8 j5 l, A9 G8 {2.1.2  从本书开始学编程
6 ^6 C" v, g5 O! c2.1.3  从一个现实的例子开始
3 K9 U1 {+ n# n5 `+ }; _2.2  编程的核心——数据6 I+ [! j* k' i/ ^
2.2.1  数据从哪里来
* T) d! a4 e1 K8 B3 E+ V2.2.2  数据的表示
4 m; |* {1 w4 v# p( W9 ~2.2.3  数据类型面面观——精度和范围5 k, K; d9 |7 t, `
2.2.4  C语言基本数据类型8 i+ }) t. Y9 @4 f8 b/ f2 v3 t2 n2 S
2.2.5  数据的变与不变——变量、常量
8 _9 J/ e! ?' |( I) o: F& j3 t2.3  使用变量和常量; }) ~! {$ `3 P
2.3.1  变量的使用1 `$ j" h. ?# T" v- R* O0 g
2.3.2  命名的方式& m2 ^4 T- b4 N! e; `- G
2.3.3  关键字
1 u- \6 Z" E+ D- G2 ?  ^: O2.3.4  常量的使用
$ V* L+ m. H4 f: c- ]& m% k2.4  小结
" @6 h" a5 _6 V2.5  习题$ [+ G% ^: @/ h  x# d
第2篇  简单程序的构建
" E  i+ x# |+ Z第3章  简单数**算
6 ^3 `* Q6 O# k9 @3.1  什么是赋值" q( h2 W( S9 M- l
3.1.1  赋值的作用——把数据存起来
' r! L2 k4 E9 E0 M! U! V4 t3.1.2  赋值运算的形式, b& x. K- o& R: }+ h* t
3.1.3  赋值表达式
: A0 k/ _: ]% ?/ t+ r3.1.4  机动灵活的赋值——scanf()8 w1 a2 B& O7 ]
3.1.5  看看我们的劳动成果——printf()
& u4 x) S2 J& N& G- t9 y( {3.1.6  赋值的重要性! a1 J, Q! R  d; L. t8 D
3.2  开始赋值——整型赋值4 j# s* m& D* K# T$ N1 U4 w. S
3.2.1  整数在计算机中的表示——二进制
$ Y0 U1 Z, ?1 J8 c; P$ X. ~+ R3.2.2  更先进的表示方法——八进制和十六进制
6 C$ ]5 t9 N1 A- ]7 R) G! L3 K3.2.3  进制之间的转化——以二进制为桥梁
; C) m% f! m7 f; w, _2 }0 f3.2.4  给整型赋值
, D( L0 D* i# k# B8 [# j2 C3.3  浮点型赋值; e& i- {$ E/ d, ?( C# {% l
3.3.1  小数在计算机的表示
  V* }* x3 _7 y# y4 d, S  U! s3.3.2  给浮点型赋值
3 B, Q2 S( u, W9 n, j3.4  字符型赋值
0 _- A/ G1 u! W3.4.1  字符在计算机中的表示——ASCII
9 U. |( K5 J2 C; Z+ c3.4.2  给字符赋值, b3 R; F/ s1 t9 S: @  I$ G3 @4 w4 O
3.5  类型转化
  W- O  j4 _9 I% P( K3.5.1  什么是类型转换( |0 n6 d+ N) y
3.5.2  类型转换的利弊
/ Z6 @0 |- U8 n: }3.5.3  隐式类型转化和显示类型转换
5 k9 T5 g" D9 j1 H* {5 H! r* C3.5.4  赋值中的类型转换7 _9 P2 X2 B. Q' M# \% j5 ^9 C
3.6  基本数**算
; R  Z8 K3 j9 U: E! P9 S3.6.1  数**算和数学表达式
, _( i; \2 [& D7 a) w* R8 A" r3.6.2  商与余数
9 U+ P7 n* Z* Z4 c% _& X3.6.3  位运算
/ M) V# y# _( J  }* ]3.6.4  优先级的奥秘$ n: w6 g& J2 t5 G' {" z, B1 `
3.6.5  数**算中的类型转换7 {: c' ~7 L' Q# Y
3.7  复合赋值运算
! i% a. Q; k5 Y. k# O3.7.1  复合赋值运算+ W; v/ N; q5 J, t7 E
3.7.2  自增自减运算——特殊的复合赋值0 n4 J' C* e. y- z, p
3.7.3  自增自减的使用* h/ S" r* |9 p6 \% c$ X
3.8  小结9 e$ C1 B; S' A1 s$ S" M
3.9  习题
% h% R! @3 ]5 J' l. Q2 ?, j  L6 H第4章  程序结构
+ [8 t& l0 c+ {6 L/ V% p* p4.1  语句和语句块/ n# _8 ]7 Q, C$ P
4.1.1  简单语句& I' W8 @7 s6 x# H- a9 ^
4.1.2  语句块  `. Q7 `2 {7 u* z/ \
4.2  变量的作用域& I8 d7 n$ v  d* A0 X; E
4.2.1  局部变量的声明定义位置规则4 h+ N5 o1 {% i6 P& u" }6 F
4.2.2  局部变量的作用域规则
% g6 [7 A1 O' P6 k- Z4.2.3  嵌套语句块的同名变量作用域规则
$ \, U/ l* }6 s; ?& k7 N( O+ Y: m" N4.3  最常见的语句执行顺序——顺序结构! \! M2 v7 O! P! r1 l
4.4  判断结构2 D0 C+ D" W6 z
4.4.1  判断的基础——逻辑真假/ \  Y$ T, M  ~" s" w+ i
4.4.2  基础的判断——关系运算
; I- Y. T! W* ^9 p# ?! c+ ^' n4.4.3  复杂的判断——逻辑运算' s* w2 l+ C6 I. w3 \
4.5  if判断结构$ z  P# T! B5 l# Q! s) t
4.5.1  基本if结构
, G0 b0 K, k+ U! v6 [4.5.2  if…else…结构
8 @2 c+ B: e+ y: P! Q# R+ G+ z. M4.5.3  另类的条件判断——?运算符的使用
6 r& b5 r# j( S" ?! o% R2 w+ U/ t4.5.4  if…else if…else结构
: Y9 M% o4 F% a4.5.5  嵌套的if结构/ `: R% [# W; k  [8 X% z$ T. G
4.6  switch判断结构
2 f4 D4 j8 A3 t$ k$ D) m' P  m4.6.1  switch基本结构/ I; s0 a2 q; u( D/ L
4.6.2  果断结束——break的使用
* w+ X$ Z8 t/ p6 k( t$ G1 [4.7  循环结构
3 n5 {6 N+ [+ p& t3 v5 K5 e4.7.1  while循环结构; M5 g+ F, e& d' l- |# t  g  _
4.7.2  for循环结构9 }! `8 I0 j4 f) s- Q& f; v/ g/ W
4.7.3  goto语句
  c5 A$ x& N1 l% @( J4.7.4  循环嵌套; G! O  b* }7 S! e6 w8 D& T
4.7.5  break和continue
/ T' H1 N7 X& x7 b! W4.8  真正的程序——三种结构的揉和4 `: V; ~# k6 h& W4 m+ ~
4.9  小结- y/ I* x& s7 |7 ]
4.10  习题
4 D8 J2 i3 d- C% c( j
作者: lili456    时间: 2012-5-28 10:02
第3篇  复杂数据的表示
9 @7 t& r3 Q. Z2 ^* _' ^$ P. D第5章  数组
6 ?( e0 m2 ?  m; K, |! n) ]5.1  数组简介
0 o6 C  x; E6 A8 y2 R5.1.1  数组的用途
/ O, b: T( {! \! Z( m7 i; H5.1.2  数组变量的定义' b+ \1 h: N" f& U: r
5.2  数组变量初始化和赋值
% E% m- N0 t1 R% R4 B/ [7 Q5 b; J5.2.1  数组的初始化9 R1 l4 k6 \# L4 y7 f8 t
5.2.2  数组的下标
) l' k' b7 `; `5.2.3  给数组赋值; \- G* E) Z4 l* u
5.2.4  数组元素的引用
% z; `! O! O9 E; t6 S5.3  二维数组4 Z/ Q; Y8 T: _2 l
5.3.1  数组的维
* w6 m1 c! t8 d8 ?2 a/ W% G5.3.2  二维数组表示和含义1 ?$ s5 K7 N: {
5.3.3  二维数组的初始化- f2 B0 R, T& E3 k5 b2 u) d% v+ n
5.3.4  二维数组的赋值4 A. E1 {6 x1 }; L; V" U& ~  }; s
5.3.5  二维数组的引用
! s4 M- X$ R) J5.4  多维数组
0 r- ], K5 @# m# S* s5 K/ q5.4  小结
8 g4 S( p  [' `0 ]5.5  习题! X( Z$ O# F, d. W3 Z% M2 n
第6章  字符的数组——字符串" n) L) J% j4 g
6.1  字符数组: h9 S. I" a3 D% _0 ?. N+ Q
6.1.1  字符数组的表示, G6 v& b) m1 Q* `# e2 b" b
6.1.2  字符数组的初始化$ x  {# t6 E0 S$ p9 S( w
6.1.3  字符数组的赋值和引用1 n6 t" D* ]7 v# P( _) o
6.2  字符串
0 x& D( c( A" z& P( r$ E3 s6.2.1  字符串的C语言表示' R; i6 w3 I" ]5 k2 C1 {, h
6.2.2  使用字符串为字符数组初始化- i/ z7 g2 v% t  l% X; A5 K
6.2.3  字符串的保存形式
! s0 Y1 h  i4 J4 C3 q( `6.3  字符串的输入输出——scanf和printf字符串; i5 A5 d7 b5 G3 T9 a8 f
6.3.1  输入输出字符串的C语言表示: \9 f& U& J3 H7 m  u
6.3.2  scanf()函数对字符串的特殊处理
0 b6 }# d/ y3 S* A; s6.4  小结
0 s0 O: I* K5 u& [3 @. ^& v6.5  习题
9 r+ @9 j, w3 X  {第7章  指针
' W/ l; F+ c$ f& f7.1  地址的概念
& H' n' ]5 C! p) W7.1.1  地址的含义; b* _* I1 U/ t1 S- ]1 c: i
7.1.2  为什么要用地址
& A1 S& U8 O4 t' }, X; P1 H: _7.1.3  地址的表示与取址运算
$ ~+ e0 n# p' {- h7.2  指针和指针变量
8 \  m5 u: r( [* Q* B7.2.1  指针的含义和用途
& j9 p8 F8 L: @8 f7 u9 G6 ~3 i7.2.2  指针类型
0 k2 M+ O+ d" s9 c5 t! d% `7.2.3  指针变量的定义和使用
3 p: Q& R" U, Q( V( [, f" J6 v3 ~7 X# C. }7.2.4  void指针. L* s( K7 l/ c/ S. T( \1 i
7.3  指针运算+ \' j1 p- Z0 b* e' p; n$ k$ o
7.3.1  取指针元素% Q9 h4 @+ C& [
7.3.2  指针的自加自减: f" w% Y( c5 L) G* S1 [7 D: d
7.3.3  指针的类型转换
! j7 R' ]4 w% t9 C9 z8 ]7 ]7.4  数组和指针
6 D( m/ X/ C* ^6 c4 W/ ?5 B7.4.1  数组名也是指针+ P& k# l7 ?2 {$ b
7.4.2  数组名是指针常量1 J) }# ?  y) e- ?1 o' v5 ?$ ]
7.4.3  使用数组名访问数组元素
3 z3 a# e7 {/ y0 E( z/ Z7.4.4  三种访问数组元素的方法
9 Q. M' H( k; H2 [% W' ^/ @7.4.5  数组指针和指针数组
- Z* h& x' M; X3 L7.5  多重指针和多维数组$ |2 f1 ~) O7 b/ b, F4 T# }2 k1 t' l
7.5.1  多重指针
# U7 f" u) T: o3 q5 U0 ?7.5.2  取多重指针元素运算
0 d9 p. {( Z0 c% N7.5.3  多维数组名和各维元素
( g6 u% Z) ^2 m  H. x7.5.4  使用指针访问多维数组
6 C; M5 ?, o6 @  T7.6  字符串和指针
/ t2 R6 C  e! G7.6.1  字符指针
4 W) n0 j+ ~( e1 r! R" y$ ?7.6.2  字符指针和字符串  h0 U' q& y( n7 X' `# \
7.6.3  scanf()、printf()函数和字符指针% A5 `( Z) E* I$ C/ |6 k
7.7  小结
9 m  W3 R! Q* H) j' C$ q* J4 u7.8  习题
9 A. q4 J) {7 K; {; Y/ v第8章  结构体+ [. K! F( S, h; u$ z5 Y3 ~6 W. R# Q
8.1  结构体的含义8 r0 C5 L' q7 ^- ]5 U
8.2  结构体类型的表示& y: c) o; y! e
8.2.1  结构体类型的一般格式
6 Z$ ~9 X0 u/ N3 u" P2 v) K  k8.2.2  结构体的成员变量$ x* [0 _7 s6 G& t9 M" G0 y
8.2.3  复杂的结构体5 |5 y+ t( \+ X7 ]1 z: x5 h
8.3  结构体变量) `+ |; ~  x( E
8.3.1  结构体变量的声明定义
0 r$ u- [! x/ Y8.3.2  结构体变量初始化
, A/ m- V( d  R2 f1 o' P8.3.3  取结构体成员运算3 p; \  R; |+ m
8.4  结构体数组5 ]) [; f  |' g3 N' @" Q
8.5  结构体指针
2 L% ?* b! J: G9 v8.5.1  一重结构体指针; U1 h& y5 `' I- i4 u: @
8.5.2  使用结构体指针取结构体数据+ T% G. j+ a2 B8 `
8.5.3  结构体指针例子+ D+ y; V4 o2 }6 p
8.6  回到问题
: v  ~- \4 J3 k+ g! e: S$ N8.7  小结
4 B3 n- G. l( f! A  H9 w8.8  习题
4 ]. _# N. i/ |) V第9章  共同体类型
1 n9 X& ]; j: e8 u9.1  共同体的含义与表示
; S$ [' i2 ?9 {" A- ?% N! q9.1.1  共同体的用途
6 R/ w  Y3 L" [# `, ~' V. s9.1.2  共同体的表示
1 f- t  J9 U9 `3 x7 ]+ T9.1.3  复杂的共同体
2 `5 t" X5 u# m) y; E$ _1 ~9.2  共同体变量
( I5 K% a! R  V  s9.2.1  共同体变量# x9 s, ]5 Y7 c8 `4 A
9.2.2  共同体成员变量的相互覆盖# c* z7 x# b2 |! [" T& N- A/ Z
9.2.3  使用共同体变量9 r* w1 @( N3 ?# @8 S3 K7 s$ g
9.3  共同体数组
# B+ s" Z( N7 N2 ^* }5 Y9.4  共同体的指针. I& a, K/ _6 |0 R0 d
9.4.1  一重共同体指针类型
* S, y& [+ k- `: K8 [2 `9.4.2  共同体指针变量9 [0 @* x9 ^, B2 g3 u5 @+ m& W
9.4.3  完整的例子
! V( |! c3 L. o0 w' k9.5  小结" @6 @3 G- J! T# P# L8 ^
9.6  习题
3 ]1 J  C7 S) n$ ?+ ~第10章  枚举类型/ p! N. S4 H9 a0 G- H# G* u. H' X
10.1  枚举类型的含义与表示9 X4 Y8 _0 c% A8 n5 G% R: ]
10.1.1  枚举类型的含义% E) L. j$ c% v
10.1.2  枚举类型的表示
' }, B0 |7 N; Z7 P' Q: @' N10.2  枚举常量和枚举变量; ]+ N3 i" d# p6 X) x1 z, I
10.2.1  枚举常量5 U# t, w& b0 o. \; |: P
10.2.2  枚举变量的定义
) Y% o7 {/ C! q6 S$ \1 I8 E10.2.3  枚举变量的使用: a; r& S5 p0 K: s2 l1 t! d
10.3  枚举数组和指针6 q  d4 j" [1 A" Y# Y2 W% h
10.3.1  枚举数组+ C  h1 D5 _" z" A7 o
10.3.2  枚举指针
- n! }: m  u: U% n. B10.3.3  用枚举指针来访问枚举数组
+ r& F3 |' ?0 a$ r5 r% G10.4  typedef类型定义符
6 u- A9 U) h- W$ W% |) Y3 g10.5  小结" R: @; V0 C5 C) V' u/ n
10.6  习题! Y! ^( E4 ]2 }% d) ]& a

作者: lili456    时间: 2012-5-28 10:02
第4篇  复杂功能的实现
) u; T; M( k2 P! g: d) h& D% W- i第11章  函数
% |% P( f" Y3 d4 y: V0 O* L+ O11.1  函数的意义
  C( G  \% o8 Y# O+ K11.2  函数的形式
' C* d6 g! K- G1 Q3 A" D11.2.1  函数的一般形式
( w, q) v( ?3 p% }! F5 X$ y11.2.2  函数的参数列表; U/ N, p# j; o3 k* B- @
11.2.3  函数的返回值类型- a/ G( N- C5 A% Z6 S* D2 p0 g, h
11.3  函数声明和定义
8 {3 N6 w0 n( F4 M9 i4 `11.3.1  函数的声明
! S4 J6 O+ a& A# S8 A3 T$ z7 b11.3.2  函数的定义形式8 d: b& u9 ~9 h3 ]7 P+ m% d2 t  o7 Q
11.3.3  函数的形参4 d0 Y0 i' a: A( I( L
11.3.4  return返回值语句
" ?( k. m1 R% K' r8 O8 O2 a4 k11.4  自己动手写一个函数——加法函数
  Q  Z/ H5 V, J11.4.1  确定加法函数的样子+ u% N* l+ Z$ p$ j5 h
11.4.2  实现加法函数体
8 x- N/ e: P7 O11.4.3  完整的加法函数定义
5 z5 v$ v. \+ O/ @# e$ g11.5  函数调用. z& e& w0 C" a/ s3 k( r( P
11.5.1  函数的调用作用
* B* p! l# h9 \: R. }11.5.2  函数调用表达式/ \- L8 L, E1 C' H
11.5.3  函数的实参/ j) [9 H# t# p8 x! K2 z6 I! k
11.5.4  简单函数的调用
$ L: Q9 a; y$ \6 K/ g( S11.6  复杂参数
0 ~. P. V. y. d( @$ @0 v$ |7 g11.6.1  数组参数
' z) _  F4 Z5 {( i. M' C& q11.6.2  指针参数4 ^! s% }' R) h) a: l% S( e
11.6.3  结构体、共同体和枚举参数
, J9 Q# _7 k, @5 A' _11.7  小结
+ C% m0 T" Q, B$ U+ `) O) e11.8  习题
* x' _! A% H# [# u第12章  特殊的函数——main()函数
" \6 a* S, D/ K" G12.1  main()函数的作用
* ^, U9 ]5 f$ z' `  |* t0 u12.2  main()函数的声明定义
! O4 d8 o# `- X% P' i& W12.2.1  main()函数的声明形式
0 e/ [% L7 t) ~, ~9 b  C12.2.2  main()函数的参数  _5 j+ D7 s; R7 ?4 Y$ S9 _# O
12.2.3  main()函数的返回值8 ]$ _! p' B: @% j/ r- N
12.3  小结
; d: V  X' H/ D" x12.4  习题) i' L9 t+ k+ u8 R. }0 f. m: F- ?- z/ ^
第13章  局部变量和全局变量
, i) a$ }6 u. N4 V4 y13.1  变量的作用域和生命周期6 S; [$ _) v0 ?- G' ?# T. i" n  d
13.2  函数内的局部变量
' j2 q( `* a7 y13.2.1  局部变量的作用域
+ {% W" p- p0 S# d13.2.2  局部变量的生命周期& O! X" g2 C/ w
13.2.3  局部变量的覆盖作用. a7 P" c3 p! W/ X
13.3  函数外的全局变量. g2 V5 W% y2 o! }% q: F7 F
13.3.1  全局变量的作用域
% V8 P; ^" S' S* q; B: S" r# l13.3.2  全局变量的生命周期
1 f- @4 k% S0 X+ Z0 |9 E2 a13.3.3  局部变量对全局变量的覆盖作用( q3 S( `) G$ _7 i7 p
13.4  变量修饰符  [, g* ?9 y$ O& R: Z( ], S2 ?2 K
13.4.1  使用修饰符改变变量的作用域和生命周期! o, O# n1 m& W
13.4.2  C语言中常用变量修饰符的作用+ @, J# S- U" e1 s
13.5  小结( k% O7 \" J' _4 {7 \8 E" V
13.6  习题0 k2 ]- F2 Y, f" X  l
第5篇  C语言的高级内容$ e9 a: u1 x2 B) B5 J/ s
第14章  预处理命令、文件包含6 r0 t' i# H. M& C
14.1  预处理命令的作用
) ~& \1 K7 P. [& ]1 l! H14.1.1  程序预处理4 y: Y, w+ O' B
14.1.2  预处理命令
7 E: U) H1 o7 Q4 y6 i; s9 U( `6 T9 K14.1.3  C语言的几类预处理命令8 c# T' M4 V6 {6 v# \& j; R/ }; t
14.2  C语言中的宏定义
: b7 T- b$ \# ~& ~- P3 ?14.2.1  C语言的宏定义形式
) @0 e4 e% E5 u/ k14.2.2  不带参宏定义
  _- |3 m% `  k& j14.2.3  带参数的宏定义
: D2 v' x+ W0 f! x  |14.3  预编译控制. j3 T1 y! F, C6 H
14.3.1  C语言预编译控制- K+ J& U* X7 w* C( X0 I4 ?- I$ L
14.3.2  三种预编译控制组合形式
" ?/ h6 ?' `! {4 j8 c$ F14.3.3  一个简单的例子: J! R4 o# T, O8 j) u
14.4  文件包含$ f% ?9 E( r+ [3 y" W6 Z# u( C
14.4.1  头文件和源文件的文件名- s. e8 X. g1 W9 P! f# I0 x% Q
14.4.2  头文件和源文件的内容
# E6 Q, x. B4 ^$ m0 z3 i: v14.5  include包含头文件
9 D, j: @; M9 m) e8 U/ j) i6 K+ |14.5.1  自定义头文件和系统头文件
7 Q1 G0 S3 w3 K) D  b6 O14.5.2  文件包含的两种形式$ L# F- {; t) _- G& D5 O, ^, f6 j
14.5.3  完整的circle例子
: `& k1 [8 G. g14.5.4  C语言中的标准头文件, w. T2 J3 j8 ]! {1 D- n
14.6  小结
. t7 Y% {! N, F5 S14.7  习题4 f% Y/ f- L- y3 f  I1 F2 Z5 E
第15章  文件操作2 S/ |. T* Z3 h. H
15.1  文件
7 R4 ^3 c6 \: Z" P15.1.1  重新认识文件, Y# w/ L9 ^# G: S+ [2 k* G
15.1.2  计算机眼里的文件
4 K" _+ p; x3 r5 @# l* y15.1.3  开发人员能对文件干些什么
/ ~% O/ v9 F( ^. _- U, |15.2  文件的打开关闭
& z6 r) K" S$ Q9 A* ?$ r! h2 A* G15.2.1  文件指针
6 |# E, G/ l7 a5 A/ Y- G* B15.2.2  文件打开函数
" E: j" Z2 F5 R4 c/ ^. R% r8 G# _15.2.3  文件关闭函数
4 h7 L8 I1 r# o% h7 D6 T# ^9 a% o15.3  文件读写2 p7 I, c0 ^5 F
15.3.1  读写一个字符9 ]1 P8 A: P9 \7 Z/ Z6 `
15.3.2  读写一个字符串
  [- O+ \' m1 o4 I; g15.3.3  读写一个数据块
- @! J, w. i$ j3 k15.4  文件的其他操作
% n3 Q4 @$ K1 x1 y15.4.1  随机读写文件
2 X; I" z2 f! q5 V* b% O, v15.4.2  出错检验6 Z/ ^9 I; t) J) _. Y3 w' `5 ?7 l
15.5  小结- n4 q/ P" n. @) c* _5 m
15.6  习题
' e& W8 E1 D  v+ N* K
作者: lili456    时间: 2012-5-28 10:03
第2章  开始C语言之旅% R) ~' T) K# k; a& p# y2 {
从这一章开始我们就算真正进入了C语言的世界了!不过,不要着急动手写代码,欲速则不达。先从最基本的C语言概念开始打好基本功,本章先从数据有关的C语言基本概念开始。. ^6 l5 l+ X$ F/ B
2.1  为什么要写代码
7 k3 C3 R& M* c! o计算机语言是用来编写代码的,C语言也不例外!那么,再往深的想一想,为什么要写代码呢?难道仅仅只是因为好玩吗?不是的,如果仅仅是因为好玩,玩完之后就没意思了,也不会有那么多丰富多彩的软件了。, H" J  P* ]8 y1 X. k: [6 T. ?
2.1.1  为什么要写程序4 c, l9 {: t( _6 ]% V
“工具都是给懒人发明的”。铁器时代之前,人们都是用手或者未经雕琢的木头来挖掘食物或者攻击猎物。人们发现这样很费力,然后就把石头进行打磨做出了石头工具。懒人可以用石头工具偷懒了。后来的青铜器时代、铁器时代也是如此。到了计算机时代,最伟大的发明就是计算机了。它可是很多懒人的福音啊!. P0 n! I6 o' W4 q/ X
呵呵…,开个玩笑。不一定用计算机的都是懒人了,不然我也是懒人一个了。不过计算机确实从各个方面给人们的生活带来很大的方便。
3 N# S7 r  d* n: L: m; B1.计算机很给力$ n9 O9 ]7 M6 z. I
买东西可以用淘宝,足不出户,就可以货比三家,挑出理想的宝贝。再也不用为一封家书,而苦苦等待好几个星期了,E-mail瞬间可以传递你的问候,或者收到家人的祝福。记录和保存文档再也不必费力的用草稿纸去手写,电子文档传输方便而且易于保管……。诸如此类计算机确实是个很给力的工具。
4 Z, o+ N7 @! t3 V" S2.程序让计算机更给力& l- h0 f+ v  A: i
计算机是个又笨又努力的家伙,空有一身蛮力,但是不知道该干什么!需要程序告诉它,什么时候该做什么,什么时候不该做什么。! w* E) m2 i. `; X* h
只有写出好的程序才可以发挥计算机最大的潜力,操作系统(如Windows)就是一个很实用的程序。但是,只有操作系统还不够,操作系统只是为各种优秀的软件提供一个公共的平台。你可以想想一下,要是Windows上没有装任何软件,要它有啥用?练习开机和关机吗?所以,类似于Word、QQ、浏览器、音乐播放器这些多姿多彩的应用程序配合操作系统使得计算机更加给力。
  J5 v2 Z$ Z7 M6 T+ d6 Z2.1.2  从本书开始学编程; g- K2 s1 L2 v. {2 `, W0 A7 Z
有这样一群人,他们或许已经具备普通计算机使用的能力,或者连普通的计算机使用能力不具备,如不清楚QQ为何物。但是,他们立志做一个软件开发者,编写一个Office。如果你是这类人,那本书就非常适合你。
" I3 m- X0 q/ ~& ?- t在书中,我们将会告诉读者,开发者是如何用语言告诉计算机自己的意思,来完成想要完成的目的。在这里,我们使用C语言来阐述我们的观点的,同时给出大量的C语言编程例子,来满足大家强烈的动手**。
$ n  S, a& W$ X我们所要达到的目标就是不仅仅是使初学者学会C语言的语法规则,还能够知道计算机语言是什么,以后遇到新的计算机语言学习时能够很快的搞定。当学习完本书,说出“C语言也就那样!”、“计算机程序设计语言也不过如此!”的豪言壮语,我们的目的就达到了。3 j  C5 C) H7 \: F
2.1.3  从一个现实的例子开始) o2 j8 k4 l. r5 C
再远大的理想,还是需要一步步来走。这里先从第一个例子开始。例如,我们工作一个月,老板要给发薪水了。在合同中规定好了,每个月3000块钱,按照国家的法律,每个人要交5%的个人所得税。那么,我们辛辛苦苦一个月到底能够拿到多少血汗钱呢?
: n* {) T: g' D6 `3 j% \+ ~/ e/ d1.普通人的做法
* s7 r. S4 S4 l) v3 \0 F聪明人脑瓜子一转,这么简单。3000乘以5%是150。3000去掉150就是2850了。反应稍微慢点的人可能会拿出一支笔,一张纸,写出如下的计算式子:
  1. 3000-3000×5%=?' H  ?/ d; B6 L) O6 c' H% E3 Q7 M
  2.                          3000
    , G' @' Z6 U+ J1 `9 l$ B* S* }' s, e
  3.                      ×  0.05
    $ P1 I) X3 o  f, k9 w' \: t
  4.                      -----------------
    9 F8 r) u" d# [. e* j, X! L& e
  5.                          150.00
    * f" d! u. p$ {1 o
  6.                         
    - v$ o( M0 _2 u% x* S/ S1 l
  7. 30004 t! M2 j- o; S) K7 P: N
  8.                       —  150
    ; a7 H  K+ f# H. D, C# P0 }. w" M  d
  9.                      -----------------
    7 i# w# A8 f! [& ^3 S8 o1 H
  10.                          2850' c; N/ C' O# L. x" c! n5 L; ~8 E
  11. 所以,3000-3000×5%=2850。
复制代码
2.程序员的做法  R7 W( j- N, l( w& r- E* k3 _
那程序员是如何做的呢?咣、咣、咣…敲几行代码,然后按了几个按钮,弹出了一个黑色的窗口。窗口上面写着2850。如果你只惊叹的喊出一句:“哇,好牛啊!”,如图2.1所示。然后不去思考,不去查资料,不去学习那个如何做到的,恭喜你,你没有做一个软件开发者或者说程序员的潜质。呵呵,开个玩笑,我是希望大家都要有求知欲。6 X0 M% N) C7 \' U/ h, I
那我们求知一回,程序员咣、咣、咣…,敲了什么代码?代码的意思是什么?按下的那几个按钮干了什么?弹出的黑色窗口是什么?窗口上为啥会显示2850…?大家一下变成“十万个为什么”了。而本书主要就是解决这些问题的!
! q) d  _, k4 q. f6 i' H
5 ^5 E" b3 Q9 r) c! \4 A; `! O3.如何解决“十万个为什么”
) ^* [/ k- W$ {! T敲的代码是什么?代码的意思是什么?黑色的窗口上为啥会显示2850?……?这些都是编程语言的问题了,将在本书中占大量篇幅。程序员按的那几个按钮是什么,干了什么?弹出的黑色窗口是什么?……?这些都是开发环境的问题了…这也是本书的一个重点来通过实例来满足大家的动手**。
& f% z& d9 s# x! r0 h; m带着这些问题,开始我们的C语言之旅!相信“旅游”回来时,会很好的回答这些问题,并且觉得这些问题好傻瓜啊!呵呵…,但是记住,这些问题现在并不傻瓜,而且还很有意义!5 I( Y7 k2 Q# c5 \

作者: lili456    时间: 2012-5-28 10:07
2.2  编程的核心——数据
, H( b3 P. D' ?$ u, M3 P计算机有个最核心的工作,那就是运算,对什么进行运算呢?对数据进行运算!计算机程序设计语言是用来指导计算机进行运算的。因此,我们使用计算机语言进行编程的核心,就是操作数据了。* R9 [" M  e* _' {
2.2.1  数据从哪里来+ G0 n1 @* Z0 D3 w. D% G+ X
再来看看举的那个发工资的例子:工资3000、税5%,税后工资是多少钱?闭上眼睛,你还能记得起这句话中什么样的信息,或许最应该记住的就是3000和5%了。要计算税后工资,恐怕没有这两个数字是不行的吧?!这两个数字正是这句话的关键数据了。接下来看看什么是数据。
8 k5 i3 R' K7 N$ q4 L9 Z8 f数据是对客观事物的符号表示,是用于表示客观事物未经加工的原始素材。它可以是图型符号、数字、字母等等。在C语言中,简单的说,数据就是表示一定有用信息的事物元素的符号或者信号。分解开来说吧,首先,数据是事物元素;其次,数据必须包含有用信息;最后,数据应该是个符号。, Y& b, c: W9 o8 r/ \
知道了要成为数据必须满足的三个条件之后,就一步一步的来看看在我们举的那个发工资的例子中,哪些是数据,哪些不是数据?为什么是,为什么不是?
2 `# t2 m' k% w5 l. e- o1.数据是事物元素: ]2 v7 q# S, |# X* E/ u' f( l
我们看看发工资的例子中都有哪些事物元素,图2.2更直观的表示了出来。  A; [; B8 F9 e' M1 ]6 s! `2 A

* U" u4 B$ v5 E! @4 [% W图2.2  发工资中的事物元素6 y+ W' ?5 i; O  T
2.数据是包含有用信息的$ f& V; x" A, _% A
那到底什么是有用信息呢?有没有用要看对什么而言。例如,一块橡皮,对于写错字的人可谓是雪中送炭,但是对于不写字的人,那简直都没有石头有用。信息的有没有用是相对于要描述的事物而言。例如,要计算税后工资,那3000的基本工资和5%的税率就是有用的信息。发工资的老板是谁,就不是有用信息了。再例如,要完成公司财务报表的打印,那发工资的财务经理的名字以及发工资的时间就是有用信息了,财务报表要填写这些信息的。对于这两种场景的有用信息的比较,如表2.1所示。
6 V8 |3 p. o7 Y/ v! T7 t. c4 z0 V. f1 B8 z
3.数据应该是个符号
% l3 `" j, s5 ?/ X2 \那到底什么是符号?符号就是具有一定意义的数字、字母、汉字、图片、声音等。例如,数字符号1、字母符号'A'、汉字符号“我”都是符号。7 D) B0 X" U4 T& j. x$ C+ ~

9 c& A: w! e( Y图2.3  发工资中的数据
/ [2 }5 [7 z: `, o9 o以发工资为例,里面包含的数据如图2.3所示,有3000、5%和2850,分别是税前工资、税率和税后工资,都是数字符号。" K3 T* i9 F( e" j5 T' h
7 I4 f. M. @' ~. n8 K
# {+ o; S1 G. x
5 p$ l" g- J2 {4 V6 M5 v7 e+ V

作者: lili456    时间: 2012-5-28 10:12
2.2.2  数据的表示4 E3 ^& F0 b% h0 O! ?' a
在前面描述计算税后工资的例子中,要告诉计算机:工资是3000元、税率5%,计算它的税后工资。该怎么告诉计算机呢?而且,要确定告诉计算机工资是3000而不是2999.99,税率是5%而不是5‰,这就涉及到数据在C语言中的表示了。5 X9 w, p& ]" d) P
为了数据能在C语言中容易表示,数据被分为了好多的类!每一类的数据被叫做属于同一种数据类型。对于每一种运算,不同的数据类型计算出来的结果都是不一样的。这就好比同样的化学纤维做出来的衣服类型不同使用就不同了。男士的西服让女士穿着就显着别扭,女士的裙子要是被男士穿着就要闹出尴尬了,更甚者总不能把裤子穿在头上吧!所以,得分清楚数据的数据类型然后才能正确的使用它们。
. |% }: G1 E9 S6 T2.2.3  数据类型面面观——精度和范围3 q6 A; k7 ?& T: u
在了解C语言数据类型之前,先了解两个概念——精度和范围,这是讨论数据类型的重点。# h6 A7 e8 ^8 A) s& h% A
1.精度
0 [" J. p+ y; \5 j精度是用来说明可以表示数据的最小的粒度,也就是可以表示的精细程度。讲个笑话,一个人过收费站,过磅整车重4.29吨。然后司机上了一趟厕所,又过收费站,过磅,整车重4.20吨。一趟厕所下来,减少了0.09吨,共90公斤。电子称只能称到0.1吨,所以司机上不上厕所对于称重没有影响,因为电子称的精度不够。这个故事告诉我们不必憋尿来增加车重,没必要,呵呵…
! J  E. s0 A( `7 e! A/ U) G2.范围: q1 I3 w8 [% s, Y4 A
范围是用来说明可以表示的数据的最大尺度,也就是可以表示的广度。不同数据表示的要使用不同的广度,不然就会出现用游标卡尺去量万里长城的笑话了。游标卡尺虽然精度很细,但是范围远远不够,估计把长城量完也至少也得好几年吧。还不如用卫星直接去测呢,瞬间搞定!0 @& I7 p& m4 @! C/ K0 [- k+ ^
2.2.4  C语言基本数据类型! _7 O7 l8 n, Y' U4 P
精度和范围(也就是广度)之间得有个权衡,很多时候有精度没有广度的,或者是有广度没精度的。就像游标卡尺和卫星测量一样,需要我们选择合适。在C语言中,有三种基本的数据类型供我们选择,它们有着不同的精度和广度,可以根据自己的需要选择合适的。这三种数据类型分别是整形、浮点型、字符型,它们可谓是C语言数据的三大变形金刚。
* p3 f/ f3 u9 O# F/ p! t8 Q1.整型: F4 ~* N! }; {; Y4 f6 r& L, C9 h
整型在C语言中是用来表示整数的,主要是用符号int表示。为了满足不同的需要,整型按照可表示的范围分为以下几类:整型(或者叫一般整型)、短整型、长整型。短整型用来表示较小范围的数,长整型用来表示较大范围的数。这就好像你要装水得有瓢、或有水桶、或又有缸一样,都是用来装水,但是分别用于不同的用途。对于不同的整型,在C语言中使用不同的符号表示:
% \2 M4 e( P5 Y) `5 }4 F        整型:使用int关键字表示;
, @8 z$ k: t$ w        短整型:使用short int关键字表示,简写为short;# }  z3 ]' q) V6 [+ `" J4 ?
        长整型:使用long int关键字表示,简写为long,可以省略int不写。
5 n9 R8 F+ R( b: O整数分为正整数、负整数和零。有的时候需要表示整数的既可以是正的也可以是负的,有的时候只需要表示正的整数。就像我们表示人民币的时候用的都是正数或者零元,表示温度的时候既可以是负一度,也可以是正一度。
9 k& a" [; D0 p2 X3 ?! V为了满足上面的需求,C语言中的整型又可以分为有符号的和无符号的。有符号整型可以表示正整数、零和负整数,有符号使用signed符号表示。无符号整型只可以表示正整数和零,无符号使用unsigned符号表示。
( l, E: q2 L: V) g# ?1 F! D4 J1 _; z因此,三种整型分别和有符号、无符号组合,因此整型总共有六种:0 I; ]5 }8 \/ g' b9 ~8 z/ g
        有符号整型:简称整型,用signed int关键字表示,简写为int;
  I; ~, b8 `/ ~/ S        有符号短整型:简称短整型,用signed short int关键字表示,简写为short int或者short;
4 L1 }7 I& i5 I; i) r* O$ k# F0 ^: `        有符号长整型:简称长整型,用signed long int关键字表示,简写为long int或者long;
. J  y* e5 D9 U* N1 n# [        无符号整型:用unsigned int关键字表示;
- J* t2 V; P" z" S        无符号短整型:用unsigned short int关键字表示,简写为unsigend short;
8 k( Z3 r2 Y: V7 D        无符号长整型:用unsigned long int关键字表示,简写为unsigned long。, \9 d3 _( ~4 u- c- d% b4 q
我们列表来表示每一种整型的范围和适合表示的数,如表2.2所示。- U, h4 Z! \5 Q4 B" o! N' F& f

4 M- r0 Y* a$ ^& n3 w! ?从表2.2中可以看出长整型和整型是一样的,其实对于不同的系统,这个范围是不一样的,长整型会比整型的范围大,但是现在一般系统都是把它们定义为一样。
; J* v4 K5 x* _2.浮点型
. X9 ?% T+ Z, {9 e. c; V浮点型在C语言中主要用来表示小数,分为单精度浮点类型和双精度浮点类型。它们的区别仅仅是表示的精度不一样,双精度的表示精度会更细点,并且表示的范围也会更大。单精度浮点类型使用float关键字表示;双精度浮点类型使用double float表示,简写为double。浮点型没有有符号和无符号的区别,都是有符号的。下面做表加以比较,如表2.3所示
' v  B7 T8 V6 l0 Y; y' T' x
" f" o7 I6 e$ `1 q3.字符型  Q3 `) L  W6 ?
字符型在C语言来表示各种字符,如英文字母、标点、数字之类。它只是一种符号表示,就像我们用‘A’,一撇、一拉、一横来表示大写英文字母A。像我们用‘1’,一个竖线来表示数字;用‘,’,类似于豆芽的东西表示语文中的逗号分隔符。% G. W; b8 W) T1 l: z/ ]: x
所以,从上面几种数据类型的表示,可以使用整数来表示3000元的工资,用浮点型来表示税率5%。; \; U* z' S. A6 K' u

作者: lili456    时间: 2012-5-28 10:15
2.2.5  数据的变与不变——变量、常量
; b  ]  G7 B  h$ T当了解数据后,就会发现身边到处都是数据。万事万物都可以用数据表示。就像黑客帝国酷哥尼奥看待自己所在的虚拟世界一样:神马都是数据。我们老祖宗更超前:“万变不离其宗”、“道生一、一生二、二生三、三生万物”。万物已经变成“一、二、三”了。我们没有那么高深,只能看到数据是变与不变的。
# v- F5 P8 e2 b& A; J, R0 }例如,当需要计算圆的面积时,事先,圆的半径是不知道的。半径是变化的,计算出来的圆的面积也是随着圆的半径而不断变化的。然而,计算过程中有一个量是一直不变的,那就是圆周率3.1415926(为了便于大家阅读,本人这里省略后面圆周率的后面无数位。有兴趣的读者,可以自己手工计算)。在C语言中把这些计算中变化的量叫做“变量”,把这些不变的量叫做“常量”。
2 w/ ~; d6 V) S* s1.如何区分变量和常量
  l+ h. r7 E. U' J: F为了区分常量和变量,再来看看我们那个发工资的例子:工资是3000、税率是5%,问税后可以拿到多少薪水?在计算过程中,工资是不变的(3000),是一个常量。税率5%也是不变的,也是一个常量。计算结果虽然我们还不知道,但是可以肯定它也是不变的,也是一个常量。
" i0 @) J* l8 _有人会问,在这个例子中就看不到变量了吗?我们把这个例子改改,或者说把计算的问题改改,就会出现变量了。% ]4 h' x- O, S# p+ |. ~- f
假如,你是公司的会计,老板要发工资了,要你计算出该给每个人发多少薪水。这时,你得考虑了,每个人的税前工资都是不一样的,按照国家规定,处于每个工资段的税率也是不一样的。这样,要计算每个员工的税后工资时,税前工资、税率都是变化的了,如图2.4所示。
5 M# I6 b+ `& j8 `, ?6 T% G; T
! P! p1 C+ `/ y' A! ?5 `4 M图2.4  常量和变量示例
: z2 |6 R& ?( l% h3 L在图2.4中,我们看到有三个员工,他们的工资分别是3000、2000和3000,税率为5%。我们可以看出税前工资是变化的,要给每个人发工资,就得用一个变量来表示税前工资了。税率不变,我们就用常量表示吧!
% j% Q' p/ b; o这个时候,就出现变量了。同样计算,对于不同的工资和不同的税率,结果也是不同的。所以在C语言编程是,就得用变量来处理。' p  [. j# Z1 r1 B" Y; b
2.回到C语言
' p9 Y! `' M+ z; H) @! f6 x从上面的描述,可以看出这样一条准则:在要进行C语言编程先得确定出,哪些数据是要作为变量处理,哪些数据是要作为常量处理的。判断的依据就是在用C语言处理时,这个数据是一直变化的还是一直不变的,这就是我们区分变量和常量的准则。
# V/ I3 ^( S, v. r/ }2.3  使用变量和常量
0 D' Y8 _7 c, E. _  g8 U在数据的世界中,数据被分为一成不变的常量和一直变化的变量。这样划分以后,使计算机操作数据也变得方便多了,只要计算机能操作变量和常量,那么它就可以操作任何数据了,这就叫做真正的提纲挈领。这一章就来看看在C语言中如何使用变量和常量!0 w! Z/ F9 L( Q0 R; T7 I+ m
2.3.1  变量的使用. K* J8 r; a8 a$ b3 L2 ~
在C语言中,要使用变量就得先对变量声明和定义。变量的声明是说明变量的类型的,而变量定义是创建要求的变量。通俗地说,声明变量就是告诉计算机“我要的是浮点型的变量,记住,一定是浮点型的!”;变量定义就是告诉计算机“我要的是浮点型的变量,现在我就要了!”,如图2.5所示。两者差别在于,声明变量的时候,只是要求,计算机并没有创建,而只有定义的时候才会创建变量。7 ^& W$ ~! s1 w; r$ _# b4 d

/ s$ c7 B. l7 a+ D. m1 K图2.5  变量声明定义示意
' d$ b6 J0 h: R. R% b, P在C语言中,变量的声明和定义是一体的。其语法形式如下:
) c6 w5 Q9 G% v0 n变量类型 变量名;  G2 B/ C$ p( B( y& m" M4 T) _2 |
其中,变量类型是要求计算机给的变量的类型;变量名是我们给问计算机要的变量取一个名字,我们以后就可以用这个名,来“召唤”计算机给我们的变量了。8 f2 f$ E8 M& v; ]( I9 }  z+ e
好了,有人要问了,就像你说的,我要计算圆的面积,半径事先不知道,按照变量来,我也事先确定了半径是小数。我需要一个浮点型的变量来表示半径,在C语言中,浮点型的变量该怎么表示呢?+ ~( g3 {6 r2 H) [* N# x# y7 ~/ O
要计算圆的面积定义的半径可以表示为:
! x6 e: L% E* H4 {* A& efloat  radius;
0 s# k; m, n+ b! X% X' q其中,float是变量的类型名称,radius是变量的名字。像上面的表示做了两件事情,半径变量的声明和定义。即告诉计算机,“给我一个浮点型的变量,记住一定要浮点型的”,又告诉计算机,“给我一个浮点型的变量,现在就给我”!, P; g4 p+ ]- z' i! z

作者: lili456    时间: 2012-5-28 10:17
2.3.2  命名的方式8 s* d& f- k2 s
在上一节,进行变量的定义和声明的时候,使用了两个概念:类型名和变量名,其实它们都是C语言中的标识符。标识符就是用来表示C语言中的各种东西的符号,如用来表示类型、变量等等。每一个标识符,是类型名也罢,是变量名也罢,都是一个名字。只要名字都要遵循一定的命名方式。命名方式涉及到两方面的内容:构成元素和构成方式。2 }- g* t( b0 s. a4 P6 `
构成元素就是C语言标识符的组成符号,构成方式就是C语言标识符的命名规则。, ]: v$ r9 O8 P: F0 P; j! U6 g3 A
1.构成元素——符号- H+ O' H) y- M, W8 j5 b# [
一门语言是由不同的符号组成。例如,汉语是由不同的汉字和标点符号构成。同样,C语言也是一门语言,组成它的符号有三类:命名符号、分隔计算符号、数值符号。这样表述简洁,如表2.4所示。$ o) J0 h7 H# j2 P
        命名符号主要用于组成标识符,如英文字母和阿拉伯数字。给孩子取名字的时候,姓名都是汉字,而且姓得是百家姓。这里的汉字就类似我们的命名符号。7 d. a$ x% O: [+ z: i8 U7 d2 b
        分隔符是用于C语言分块和计算的。例如,大括号用于主要分块,小括号主要用于数学计算等诸如此类。
+ V0 P# Q# u: i  R5 W4 H        数值符号在C语言中是表示数值。
" [% D! E4 Y* k4 p* |  O- H这节只关注第一类用于命名标识符的符号,其它两类我们暂且不用关注。0 `1 b- b6 }8 r

7 n) C* R. b  A* L+ P2.构成方式
" D' H+ @: E$ {6 p' @* h5 R5 }( f就像我们的姓名一样,C语言的标识符构成也有规范标准。在C语言中,标识符由首部和其他部分构成,如图2.6所示。首部就相当于我们的姓,其他就相当于我们的名。+ \8 Q. G  T( a: C8 _" N" ^

! q: H4 r; d; m  R4 w8 h3 F图2.6  标识符组成
& ~1 b6 e  n9 {2 p) G0 d        首部(姓)就是变量名的第一个组成元素。C语言要求首部只能使用大写或者小写的英文字母和下划线。5 @8 T+ j4 Y* Q" ~7 l
        其他(名)是变量名中除过首部以外的部分。C语言对此没有要求,只要是大小写的英文字母、数字和下划线就可以。
! m1 b" ^, ^8 d7 i( d为了理解标识符各个部分的差异。我们举个例子,在给孩子取名字的时候,姓名都是必须是汉字,姓还必须是百家姓里的一个。标识符也是如此,首部和其他都是命名符号,首部还一定不能是数字。1 _( ~% p* K0 x0 [1 o+ |
按照C语言对标识符名称的规范,像我们之前见到的,浮点数据类型“float”和变量名“radius”都是合格的标识符。
$ w$ i- g0 d9 F) H" r  w+ u
作者: lili456    时间: 2012-5-28 10:18
2.3.3  关键字$ e, D2 R% I  C# A6 p
关键字就是C语言系统自己保留的标识符。就像我们生活中的“**”、“医生”之类的词语,一旦有人冒用,就会受到严厉的惩罚。C语言中的关键字如表2.2所示。
$ W  j" z) N( w9 T) o
4 E& m6 l$ t* l! @) {" u在此就不做赘述了。
8 v# W1 I5 J/ N8 N注意:C语言规定,用户自定义的标识符不能和关键字相同。0 A' G6 B2 v7 b# k$ ?
像提到的浮点类型的类型名float就是关键字,它们都不能再被用做其他用途了。像变量名radius就是一个用户自定义标识符,它既可以在我们的例子里标识圆的半径,下次再计算关于球体的体积时也可以用radius标识球体的半径。0 K+ ^9 j2 j) g
2.3.4  常量的使用; Q7 E9 K& X. ~; [
常量用来表示各种不变的东西。在C语言中,提供了好些常量的表示方法,先来学习其中最简单的两种。
2 D0 {) S1 Z% X- m: G$ e1.直接表示
# S/ M: K# y7 F$ X! {: n" d" t' l: p这种方法最简单,就是直接用数字、字母来表示就可以了。- m. G2 Z* A6 j! f# `- i
像发工资的那个例子,税前工资3000,税率为5%,要求计算税后应该拿多少的薪水?其中数字常量有工资3000和税率5%,我们就可以直接使用整型常量3000和浮点型常量0.05来表示。C语言不能直接使用百分数,没有这样的分数类型,所以用浮点型0.05来表示5%。
+ i5 f7 o7 Q8 q0 R9 _3 Q2.const变量表示
4 b1 P9 S6 A. h/ E$ Z& Dconst变量也是一个变量,只不过是一个很特殊的变量。它的特殊之处在于不用来表示变量,而只用来表示常量。9 K/ V2 Q. E& r  H' F, U0 s) S2 h" M
const变量就是告诉计算机,“我要一个变量,而且我往变量里放了东西以后就不准拿出来再放其它东西了,这个变量被我这个东西永久性独占!”是不是太霸道了?!因此,const变量拥有了常量的一切特性,用来表示常量,人们也不把它叫变量了,干脆直接叫常量。
5 N$ G2 G+ X# }! k6 w" IC语言中const常量使用const关键字+变量定定义的形式,具体如下:: B6 F1 Y7 ]' R2 Z3 D
const 变量类型名 变量名=变量要赋的值;
* f: l' ?. f, G, l7 c工资3000和税率5%的const常量表示形式如下所示:
6 p9 ?; `; a5 q5 ^$ Z8 H( l3 J8 xconst  int    salary   =  3000;6 c9 v. ^! z4 A/ D0 W8 ]/ q& ^
const  float  tax_rate  =  0.5;% L4 S  j# y9 K; v5 {) m
通过这两种方式,就可以告诉计算机一个在程序中保留一个一直不变的常量了。
& {, ]9 ?1 e. M) N$ q2.4  小结& y) z& D$ r1 K8 ?5 i
在这一章中主要了解了几个计算机中的概念:数据、变量和常量,以及进行计算机编程的作用。本章的重点就是理解这几个概念的含义,难点是如何进行变量的命名、定义,还有就是常量的使用形式。在下一章中将继续深入,看看C语言中的简单数**算,看看这些运算是如何使用变量和常量来操作数据的。
8 D* g3 |1 @' w" e' G2.5  习题
$ Y% Q. u% z9 m: h8 n, T【题目1】“地球”是不是一个数据?
; y0 L6 n! [' v【分析】要成为一个数据的话,必须满足三个条件:首先,数据是事物元素;其次,数据必须包含有用信息;最后,数据应该是个符号。“地球”要想成为一个数据,就得满足这三个条件,在描述银河系的时候,“地球”算得上是一个事物元素。地球是银河系的一员,具有一定有用的信息。我们可以在计算机中使用汉字符号“地球”来表示。所以,对于描述银河系这件事情上来说,“地球”是一个数据。但是,对于其他事物上,地球就不见得是数据了!4 k  |5 G4 u! u8 |; n' _% p) v( l

* j8 O1 l4 y$ @' s1 X【题目2】从精度上来说,浮点型的精度比整型精确,从表示范围上来说,浮点型表示的范围比整型表示的范围大。那么,为什么还需要整型呢?9 u- l; T  v+ P8 F0 d
【分析】“尺有所长,寸有所短!”,使用雕刻刀去森林里砍木材,不是不可以,但是总觉得很别扭,有的整数浮点型是表示不出来的!每种数据类型都有优缺的,有的时候可以互相代替,但是有的时候就非得某种类型不可了。至于这些特殊时候,深入理解了各种数据类型之后,自然就会发现的。  a- P5 E& w# \: d
( b# C1 D# e' F9 G% T
【题目3】假设,要在程序中表示一个班学生的身高信息,你是打算使用常量还是变量呢?
8 D+ K( y3 k' \+ [+ K4 w【分析】判断该使用常量还是该使用变量的依据是在计算过程中,要表示的数据是一直变化还是一成不变的。我们要表示一个班学生的身高信息,从整个班级来看,这是一个变化的数据,得使用变量来表示。从具体某个学生上来看,这个数据是一成不变的,得使用常量来表示!所以,要使用变量还是要使用常量看你针对的是什么具体的事物了。就像身高这个数据,如果你想一下把全班的身高在程序中都表示了,就使用变量吧,如果你只是表示某个学生的身高,常量就够了!2 g; B1 f/ R! J1 w( y! d

: w# p9 N+ x6 H  r+ g) F【题目4】在C语言中,能不能使用5%、1/4、6‰这样的数字表示作为常量呢?
! [, v& {$ l7 V$ T+ n8 k【分析】C语言有三种基本数据类型:整型、浮点型和字符型。整型是用来表示整数的,浮点型是用来表示小数的,字符型是用来表示字母或者符号的。5%、1/4、6‰准确的来说都是分数,虽然分数可以化成小数,但是它们毕竟不是小数,所以不可以使用浮点型来表示,更不用说是整型和字符型了。所以,既然5%、1/4、6‰不属于任何类型,那么,它们就不可以作为常量出现在C语言的代码中。
* |! h/ q% t# Z, m& q* z0 D# L; o6 H) M9 T$ R. u
【题目5】声明定义一个变量,表示6月8号,街道上的人数。# [" l6 M% E  _% F* \+ K
【分析】街道上的人数,是一个整数,而且数目估计会比较大,因为这天天气不错,风和日丽!另外,人数总不可能是负的吧?!因此,就可以使用unsigned long int类型来表示人数了,这个类型可以表示的整数确实大的可以,绝对超过64亿了,不会全世界的人都集中在这条街吧?!) ^8 X. h- M1 O5 `: k( M
C语言中,要给变量命名得用英文字母和数字,6月8号的人数,翻译一下,有这些单词和数字6、8、month、day、person和number。另外,C语言规定数字不能作为变量名的首部,我们可以写出这样的名字person_number_6_month_8_day,这个变量名是符合C语言要求的,就是太长了,再压缩一下,会比较好看点,persons_6_8。
! j: G0 X( O$ t& F  W" `【核心代码】: z& V$ C5 M3 g7 ]
unsigned long int  persons_6_8;
0 h' Y, g. p: I0 x1 i* {
; N  e8 b7 e$ Q7 k3 t【题目6】要定义一个类型为char型,名字为案例的变量,该怎么给它取名字呢?
7 `* B+ S- n+ H" ?  |8 ]6 `$ s) n0 L【分析】要给变量取名字,就得遵循C语言变量命名规范了!首先组成必须是字母、数字和下划线,案例的单词是case,完全符合C语言命名规范,而且首部不是数字,是不是我们就可以使用它来给这个变量命名了?不行,case是C语言中的一个关键字,C语言规定关键字是不能作为变量名的!那该怎么办呢?很简单,只要和关键字case不一样就可以了,如Case、CASE、case_、_case、_case_、case1都是可以的。
/ b5 y: Z, P2 K7 n: V2 M【核心代码】
8 v- Z. z: W/ ], X, h" S char  Case;  Q: m0 s8 W) h- N! P: ]
6 N' e5 Q) A$ x8 B/ ]" {! z

作者: 小星真没用!    时间: 2012-5-28 12:14

作者: 混淆    时间: 2012-6-25 13:06

作者: 依燃520    时间: 2012-7-28 23:29
楼主 求更新啊
作者: 上课不睡觉    时间: 2013-1-23 13:51
为啥不直接打包体力下载。。?求。。
作者: 箫声匿迹    时间: 2013-1-28 19:23





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5