C语言基础(01-引言及预备知识)
C语言是一门功能强大的编程语言,它也是C++语言的基础。C语言属于中级语言。这里所说的中级是相对于计算机的底层硬件而言的。汇编语言是最低级的语言,它可以直接与硬件打交道。高级语言有Pascal、Basic、Fortran等等。高级语言的一条语句对应低级语言的很多条语句,任何高级语言编写的程序都要经过编译程序的编译、连接才能成为可以运行的程序。编译连接的过程也就是把高级语言翻译成机器语言(二进制机器码)的过程,而汇编语言是基本上与机器语言一 一对应的一种语言。这个翻译过程是由编译程序自动完成的。把C语言定为中级语言是有它的道理的,因为C语言既有汇编语言的存取底层硬件的能力,又具有高级语言的许多特点。熟练掌握了C语言,学习其它的各种编程语言应该是很轻松的了。; E% Z: c# q/ w9 B ^* q: u
; L8 e7 |7 E- p* d0 r D
C语言的书写格式:. ^$ D) a7 ]' B8 u4 z# E! L
1) 一个C语言编写的源程序,必定有一个主程序(称为main()函数,在C语言中子程序称为“函数”(当然,不要理解成为数学里面的“函数”)。但是决不能有一个以上的main函数(即只能有一个)。
. ~ `! c% M0 {+ N* r6 g/ ?; C2) 函数语句块用‘{’括号开始, 以‘}’反括号结束。这样的花括号必须成对出现。9 F+ W1 @8 I, Z3 m4 ^' o% D
3) 表达式写在小括号里面,以‘(’括号开始,以‘)’反括号结束。1 w( I( W7 v" O: J% p
4) 函数不能嵌套,即函数里面不能再套函数。(每一个函数是完成一个特定功能的函数模块)) w6 v1 i! i, {4 F
! h/ w& V/ h6 }6 e& N
C语言的组成:
6 b* u$ j, H, ^" S C语言是由许多函数组成的。其中只有一个主函数(main()函数)。C程序执行时总是从main函数的‘{’处开始,至main函数的反大括号'}'处结束。当然还有其它一些规则,这将在以后的学习中去熟悉它。
3 s! I# F6 \3 z/ S
( s- `' g) @# ^, o7 lC语言的书写规则:
/ M. r) h7 x$ i3 Y6 y C语言在书写时有它自身的特点:书写格式比较自由,在一行里可以写多条语句,一个语句也可以分写在多行上。虽然如此,在书写源程序时还是要注意哪些可以自由书写,而哪些必须要按照书写规则来书写。
$ J9 ~- h" f3 o% F6 F* d: N几条规则写在下面:( O% E2 S' C+ K5 H( [6 v
1) 一行内可以写几个语句,建议一行不超过两条语句;
9 l. c! ~0 P6 |4 K2) 一条语句可以写在多行上;
/ d b0 F& O2 N @3 j3) C语句不需要写行标号;/ O- g* W2 Y! d7 b6 b4 B
4) 每条语句及数据定义的后面要写上分号以表示该语句结束;
5 q0 V) f+ I* |0 C H Q( ^5) C语言中注释用 /* */来表示;3 S: Z+ H- s8 s' E2 u
6) 建议书写时采用缩进格式;1 Y: q& ]/ j3 L
7) 花括号、小括号都是成对出现的。5 U1 `: N. {+ u n+ _
8 H o$ G2 g0 L
一个最简单的C程序的编写:
- j% k- [2 D! H, Y8 z1 I! f- X/* 程序代码*/ /* 注释部分*/% L0 a# o+ V5 u# C8 S4 Z# @
main() /*main是主函数名。紧跟在main后面的括号是放参数的。
4 b9 J4 h, E7 ?! }0 P 括号里面为空说明main函数不需要参数*/* U0 C, j! \9 b7 y" _" q* l
{ /*正写的大花括号表示main函数从这里开始*/
5 _% A' A u' N4 w" V t" y2 J3 ?+ o+ L p
} /*反写的大花括号表示main函数到这里结束*/' t' V( |4 B, o E9 {1 B
6 q8 q* i2 x Y" p" I
说明:由于是一个演示程序,在函数体内并没有任何可以执行的语句,也就是这个程序什么事也不做。% M f n9 [. o+ I K" n
这个程序就是这么简单: 写在一行上就是 main() { }
( r, G1 Z; G1 Y3 y9 Y' C# ~你在TC的编辑环境下把这段代码输入进去,按F9键编译连接,按CTRL_F5运行,一定很正常。但是什么结果也不会有,因为在main函数里面什么代码也没有。0 z& I( Y& _+ r
( p* z& w& L; }3 B* J7 @1 ?下面再举一个可以向屏幕上输出一条信息的例子:
' ^: X" d) w( O" ?& s- tmain()
) M0 w2 Q$ W* p{8 L1 ]4 p" e& l/ X: Y3 m
printf("这就是C语言编写的程序!"); /*这一条语句的作用是向屏幕输出一条信息
( k1 x4 Z1 ^6 Q% l0 Y ”这就是C语言编写的程序!"*/
* a1 o1 g, ~4 N}
+ v9 W3 O, S+ U0 U/ H在这个程序中,main函数只有一条语句:printf("这就是C语言编写的程序!");这个语句的作用是向屏幕输出一个字符串。有关这个语句的知识以后再讲。现在要注意的是一个C语言程序的框架是怎样组成的。" M8 g4 p" f/ m% c/ ]* }
& j+ s! X' w: L. o X' OC语言程序的几种文件格式:
# H7 ~' b b& f2 X# ?0 X2 g 1、 源程序---在TC集成环境中输入的程序文本称为源程序。源程序是一种文本文件。它是我们看得见并认识的一种文件。其扩展名为.C。例如你把文件保存为TEST,那么在磁盘上应看得到TEST.C这个文件。这样的文件可以用记事本打开。& H! b$ i: T2 q: K$ z
2、二进制文件---写完了源程序后接着要做的是编译这个文件。在TC集成环境里是按ALT_F9键,编译后生成了一个二进制文件,这个二进制文件名为TEST.OBJ,也就是扩展名为OBJ的目标文件。9 u w6 K, D$ v4 x" a r
3、运行文件---最后一步是make(或Link),在TC集成环境里是按F9键Make之后生成了一个可以在DOS下运行的文件,其扩展名为EXE。如TEST.EXE。这个EXE文件是由第2步中的OBJ文件生成的。OBJ文件虽然是二进制文件,而电脑又是可以运行二进制文件的,为什么还要把OBJ文件Link为EXE文件才能运行?这里的知识就比较多了,这里不能多讲。但是要明白一点,在DOS下仅仅有了一个二进制文件还不能运行,因为操作系统要把这些二进制文件加以规划,把相应的数据、程序代码放到应该放的内存位置,这样的经过严密规划和组织好了的二进制文件才能运行。而这些只有在生成的EXE文件里面才做完了这些工作。5 f! U3 c& z3 N) L7 b2 e# z
2 V/ }2 \; y) S% ~4 M7 [, a---------------------------------------8 ]* z5 m1 X, I6 d _' d; ` K
/ m4 R: G |$ i+ i9 ]8 h4 v
作业题:
, b- X" E' ?' r5 g z1、下列程序中格式错在( )处。7 e4 x0 S: Z6 D1 g# y1 x
A. main() B. int a,b,z;
( p, z5 r0 a3 u x- E' m C. a=2:b=3; D. z=a+b; P# ^" i/ i7 O; V7 F
& ~: ]- n% y: S! F: f1 m
分析:A,B,D 没有错误。 C 中在a=2后面应该是分号而不应是":"号
. b, {. |- N* k答: C1 u6 x+ i z v2 D; R2 a
$ z2 Y/ R' A! ]0 A
2、C语言允许将一条语句写在两行上,下列语句不正确的是
8 q" a O k$ f& J' M A. int a,/ |( p! j! U$ x4 B3 j- z' \1 U
B;
6 t& D$ ?6 B J/ @ B. int a
) x: p0 c8 y( A; p, R ,b;" {$ }2 d. S) Y# i
C. int
- R& y+ m' r2 x n* `. e" s' {( p a,b4 c6 c( b( b+ W0 t v
D. int a,b
7 D# v2 g. J) u# d+ Y; C ;
1 @/ ^5 D8 c" D. Y分析:C语言规定可以在语句中的任何一个分隔符或空格处换行。上面4个选项中D.有问题因为在D.中第一行的最后没有分隔符,而第二行只有一个分号,可以看做一个语句。所以D中的错误为:第一行是一个独立的语句,但是少了一个分号。
7 U* ]6 o1 @4 L答: D+ S' V- D) `; T5 \
3. C语言的一行写不下时,可以5 c; ^0 b7 h2 H2 ~0 V. L
A. 用逗号换行 B. 用分号换行% p0 c% h1 k% e+ H4 c! p8 m# h: H4 I
C. 在任意一空格处换行 D. 用回车符换行" h J2 F5 M! }& ?
分析:C语言可以在任何一个分隔符或空格处换行,所以此题的正确答案是 C) C6 ^7 ?3 Z" x2 m' ^3 a) M8 C
答: C
; _5 {; }" ?; k# ?0 r2 S. d4. 下列程序段中,哪一个是错误的注释方法?' Y7 }% Y9 P* _% t9 i8 V7 q
A. #in/*包含*/clude<stdio.h>8 s4 E9 m3 [6 h/ T7 U
void main()1 X- E8 G; H( @* a. J/ Y9 s- e5 B/ N
{! N$ e5 P0 R6 L) C, K- [, g& |% ^
" H5 W T2 R; b* I8 \7 {$ k" \/ s/ H: v
/ b% ` y2 [' q }
! Y; N* o% B0 m7 L- w* ^
! K( L7 v# T* _+ wB. #include<stdio.h>
# v4 g' W+ J6 r/ m void main/* */(/*主函数*/)
5 ?5 J% W% O- s# j" M j {. I# O! j( u+ \" ?) G l, U* @" D
# i$ c# Y. D: r- Y2 ?7 n }- }* L- a, E4 d) [8 B& N7 ~/ w
5 `" q! s/ v) U2 w# rC. #include<stdio.h>; R+ Q' @, j; \ e. R* r# x
void main()
3 Z! }5 S- {' D6 z& N; w { int x/*初始化*/=10;7 W/ x4 G2 w' v8 n L6 n. H0 [( T
/*打印*/printf("%d",x);
5 `4 i3 \) o* |/ ?9 u3 a8 _+ M2 F }0 Y% ?8 ?0 _& G! B( G$ R7 O
5 z9 E' k) c) z0 E( eD. #include<stdio.h>
/ B+ @ Z$ S' m0 x/ S( j6 l/ o! v void main()3 T& r1 y7 ^- \; r/ d- U
{
: U% c& ?8 G; D2 { _8 e. y int x=10;
8 a; a, v. C4 o8 w7 i* z9 x printf("%d",x);& `, l3 V( [+ W5 C. H
/*打印x的值*”*=10*/
. f& o; A& f* [0 R8 [+ J4 s4 R- h( j }
0 O6 k, {) [- h) a: e9 _8 I分析:根据C语言的规定:注释不能插在标识符的中间,在其它有分隔符的地方都可以插入注释,上面四个程序段中只有A是将注释插入在标识符的中间了。所以A是错误的。
8 u5 ]4 `& Q5 z u2 v答: A& z8 X2 Z- B. X. P8 G
! ~3 ]2 @0 s! p5 [
5. C语言程序是由( )组成的?
9 T; c2 ~6 e& X3 z% H1 y) C答:C程序是由函数组成的。
/ y9 M4 J# Q& ~# c2 b; x+ {6 G3 s
! i& ]& D0 V( l+ F' ^6. C程序运行时,运行的是什么文件?, y! u+ u! i, \. s* ^
答:运行的是EXE文件。