C语言简易教程_第1页
C语言简易教程_第2页
C语言简易教程_第3页
C语言简易教程_第4页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C 语言简易教程变量 ( Variable)现实生活中我们会找一个小箱子来存放物品, 一来显得不那么凌乱, 二来方便以后找到。 计算机也是这个道理, 我们需要先在内存中找一块区域, 规定用它来存放整数, 并起一个好记的名字,方便以后查找。这块区域就是“小箱子”,我们可以把整数放进去了。C 语言中这样在内存中找一块区域:int a;int 又是一个新单词,它是Integer 的简写,意思是整数。a 是我们给这块区域起的名字;当然也可以叫其他名字,例如abc、 mn123 等。这个语句的意思是:在内存中找一块区域,命名为a,用它来存放整数。注意int 和 a 之间是有空格的,它们是两个词。也注意最

2、后的分号,int a表达了完整的意思,是一个语句,要用分号来结束。不过 int a;仅仅是在内存中找了一块可以保存整数的区域,那么如何将123、100、999这样的数字放进去呢?C 语言中这样向内存中放整数:a=123;=是一个新符号,它在数学中叫“等于号” ,例如 1+2=3 ,但在 C 语言中,这个过程叫做赋值( Assign )。赋值是指把数据放到内存的过程。把上面的两个语句连起来:int a;a=123;就把123 放到了一块叫做a 的内存区域。你也可以写成一个语句:int a=123;a 中的整数不是一成不变的,只要我们需要,随时可以更改。更改的方式就是再次赋值,例如:int a=1

3、23;a=1000;a=9999;第二次赋值,会把第一次的数据覆盖(擦除)掉,也就是说,a 中最后的值是9999, 123、1000因为已经不存在了,再也找不回来了。a 的值可以改变,所以我们给它起了一个形象的名字,叫做变量(Variable)。int a;创造了一个变量a,我们把这个过程叫做变量定义。a=123; 把123 交给了变量a,我们把这个过程叫做给变量赋值;又因为是第一次赋值,也称变量的初始化,或者赋初值。你可以先定义变量,再初始化,例如:int abc;abc=999;也可以在定义的同时进行初始化,例如:int abc=999;这两种方式是等价的。变量定义的位置在 VC 或 VS

4、 下,变量定义要放在函数的开头;也就是说, 在定义变量之前不能有其他代码。数据类型 ( Data Type)数据是放在内存中的,变量是给这块内存起的名字,有了变量就可以找到并使用这份数据。但问题是,该如何使用呢?我们知道,诸如数字、文字、符号、图形、音频、视频等数据都是以二进制形式存储在内存中的, 它们并没有本质上的区别,那么,00010000 该理解为数字16 呢,还是图像中某个像素的颜色呢,还是要发出某个声音呢?如果没有特别指明,我们并不知道。也就是说,内存中的数据有多种解释方式,使用之前必须要确定;上面的inta;就表明,这份数据是整数, 不能理解为像素、 声音等。int有一个专业的称呼

5、, 叫做数据类型 ( Data Type)。顾名思义, 数据类型用来说明数据的类型,确定了数据的解释方式,让计算机和程序员不会产生歧义。在 C 语言中,有多种数据类型,例如:说明字符型短整型整型长整型单精度浮点型双精度浮点型无类型数据类型 charshortintlongfloatdoublevoid这些是最基本的数据类型,是C 语言自带的,如果我们需要,还可以通过它们组成更加复杂的数据类型,后面我们会一一讲解。连续定义多个变量为了让程序的书写更加简洁,C 语言支持多个变量的连续定义,例如:int a, b, c;float m = 10.9, n = 20.56;char p, q = &#

6、39;'连续定义的多个变量以逗号 ,分隔,并且要拥有相同的数据类型;变量可以初始化,也可以不初始化。数据的长度(Length )所谓数据长度(Length ),是指数据占用多少个字节。占用的字节越多,能存储的数据就越多,对于数字来说,值就会更大,反之能存储的数据就有限。多个数据在内存中是连续存储的,彼此之间没有明显的界限,如果不明确指明数据的长度,计算机就不知道何时存取结束。例如我们保存了一个整数1000,它占用 4 个字节的内存,而读取时却认为它占用3 个字节或5 个字节,这显然是不正确的。所以, 在定义变量时还要指明数据的长度。而这恰恰是数据类型的另外一个作用。数据类型除了指明数据

7、的解释方式,还指明了数据的长度。因为在C 语言中,每一种数据类型所占用的字节数都是固定的,知道了数据类型,也就知道了数据的长度。在 32 位环境中,各种数据类型的长度一般如下:说 明字符型短整型整型长整型单精度浮点型双精度浮点型数据类型charshortintlongfloatdouble长 度1 2444 8C 语言有多少种数据类型,每种数据类型长度是多少、该如何使用,这是每一位 C 程序员都必须要掌握的,后续我们会一一讲解。最后的总结数据是放在内存中的,在内存中存取数据要明确三件事情:数据存储在哪里、数据的长度以及数据的处理方式。变量名不仅仅是为数据起了一个好记的名字,还告诉我们数据存储在

8、哪里,使用数据时,只要提供变量名即可;而数据类型则指明了数据的长度和处理方式。所以诸如 int n;、char c;、 float money;这样的形式就确定了数据在内存中的所有要素。最后需要说明的是:数据类型只在定义变量时指明,而且必须指明;使用变量时无需再指明,因为此时的数据类型已经确定了。这一节主要讲解C 语言中的几个基本概念。标识符定义变量时,我们使用了诸如“a”“abc”“mn123 ”这样的名字,它们都是程序员自己起的,一般能够表达出变量的作用,这叫做标识符(Identifier )。标识符就是程序员自己起的名字,除了变量名,后面还会讲到函数名、宏名、结构体名等。不过,名字也不能

9、随便起, C 语言规定,标识符只能由字母 (AZ, az) 、数字 (09) 和下划线 (_) 组成,并且第一个字符必须是字母或下划线。以下标识符是合法的:a, x,x3, BOOK_1, sum5以下标识符是非法的:3s不能以数字开头s*T出现非法字符*-3x不能以减号 (-)开头bowy-1出现非法字符减号(-)在使用标识符时还必须注意以下几点:C 语言虽然不限制标识符的长度,但是它受到不同编译器的限制,同时也受到具体机器的限制。 例如在某个编译器中规定标识符前128 位有效, 当两个标识符前128 位相同时, 则被认为是同一个标识符。在标识符中,大小写是有区别的,例如BOOK 和 boo

10、k 是两个不同的标识符。标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号,因此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。关键字关键字( Keywords )是由 C 语言规定的具有特定意义的字符串,通常也称为保留字, 例如int 、char、 long、 float 、 unsigned 等。我们定义的标识符不能与关键字相同,否则会出现错误。你也可以将关键字理解为具有特殊含义的标识符,它们已经被系统使用,我们不能再使用了。标准 C 语言中一共规定了32 个关键字, 大家可以参考C 语言关键字及其解释共 32 个 ,后续我们会一一讲解。注释注释( Comments)

11、可以出现在代码中的任何位置,用来向用户提示或解释程度的意义。程序编译时,会忽略注释,不做任何处理,就好像它不存在一样。C 语言支持单行注释和多行注释:单行注释以 / 开头,直到本行末尾(不能换行);多行注释以 /* 开头,以 */ 结尾,注释内容可以有一行或多行。运算符C 语言也可以进行加减乘除运算,但是运算符号与数学中的略有不同,见下表。加法减法乘法除法求余数数学+-×÷无C 语言+-*/%加号、减号与数学中的一样,乘号、除号不同,另外C 语言还多了一个求余数的运算符。一个整数自身加一可以这样写:a+=1;它等价于a=a+1;。但是在C 语言中还有一种更简单的写法,就是a

12、+;或者 +a;。这种写法叫做自加或自增;意思很明确,就是自身加一。相应的,也有a-和 -a,叫做自减,表示自身减一。+和 -分别称为自增和自减运算符。自增自减完成后,会用新值替换旧值,并将新值保存在当前变量中。自增自减只能针对变量,不能针对数字,例如10+是错误的。值得注意的是,+ 在变量前面和后面是有区别的:+ 在前面叫做前自增(例如+a)。前自增先进行自增操作,再进行其他操作。+ 在后面叫做后自增(例如 a+)。后自增先进行其他操作,再进行自增操作。自减( -)也一样,有前自减和后自减之分。int a=10, a1=+a;int b=20, b1=b+;结果:a=11, a1=11b=2

13、1, b1=20C 语言提供了以下关系运算符:关系运算符含义数学中的表示<小于<<=小于或等于 >大于>>=大于或等于 =等于=!=不等于关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、 >=的优先级相同,高于=和 != ,=和 != 的优先级相同。在 C 语言中,有的运算符有两个操作数,例如 10+20, 10 和 20 都是操作数, + 是运算符。 我们将这样的运算符称为双目运算符。 同理,将有一个操作数的运算符称为单目运算符,将有三个操作数的运算符

14、称为三目运算符。常见的双目运算符有+、-、*、/ 等,单目运算符有+、-等,三目运算符只有一个,就是? :,我们将在C 语言条件运算符中详细介绍。关系运算符的两边可以是变量、数据或表达式,例如:1) a+b > c-d2) x > 3/23) 'a'+1 < c4) -i-5*j = k+1关系运算符的运算结果只有0 或1。当条件成立时结果为1,条件不成立结果为0。例如:5>0 成立,其值为1;34-12>100 不成立,其值为0;(a=3)>(b=5)由于 3>5 不成立,故其值为0。我们将运算结果 1 称为“真” ,表示条件成立,将

15、0 称为“假”,表示条件不成立。需要提醒的是, =才表示等于,而 =表示赋值,大家要注意区分,切勿混淆。在 C 语言中,也有类似的逻辑运算:运算符说明结合性举例&&与运算,双目,对应数学中的“且”左结合1&&0 、 (9>3)&&(b>a)|或运算,双目,对应数学中的“或”左结合1|0、 (9>3)|(b>a)!非运算,单目,对应数学中的“非”右结合!a、 !(2<5)逻辑运算的结果在编程中,我们一般将零值称为“假”,将非零值称为“真”。逻辑运算的结果也只有“真”和“假” ,“真”对应的值为1,“假”对应的值为0。1

16、) 与运算 (&&)参与运算的两个表达式都为真时,结果才为真,否则为假。例如:5&&05 为真, 0 为假,相与的结果为假,也就是0。(5>0) && (4>2)5>0 的结果是1,为真, 4>2 结果是 1,也为真,所以相与的结果为真,也就是1。2) 或运算 (|)参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。例如:10| 010为真, 0 为假,相或的结果为真,也就是1。(5>0) | (5>8)5>0 的结果是1,为真, 5>8 的结果是0,为假,所以相或的结果

17、为真,也就是1。3) 非运算 (!)参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。例如:!00 为假,非运算的结果为真,也就是1。!(5>0)5>0 的结果是1,为真,非运算的结果为假,也就是0。优先级逻辑运算符和其它运算符优先级从低到高依次为:赋值运算符 (=) < && 和| < 关系运算符< 算术运算符< 非 (!)&& 和 | 低于关系运算符, ! 高于算术运算符。前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条、第三条一直到最后一条语句,这称为顺序结构。但是对于很多情况,顺

18、序结构的代码是远远不够的,比如一个程序限制了只能成年人使用, 儿童因为年龄不够,没有权限使用。这时候程序就需要做出判断,看用户是否是成年人,并给出提示。在 C 语言中,使用if 和 else 关键字对条件进行判断。if和 else 是两个新的关键字,if意为“如果”,else 意为“否则” ,用来对条件进行判断,并根据判断结果执行不同的语句。总结起来,if else 的结构为:if( 判断条件)语句块1else语句块2意思是,如果判断条件成立,那么执行语句块1,否则执行语句块2 。其执行过程可表示为下图:所谓语句块( Statement Block ),就是由 包围的一个或多个语句的集合。如果

19、语句块中只有一个语句,也可以省略 ,例如:if(age>=18) printf(" 恭喜,你已经成年,可以使用该软件!n");else printf(" 抱歉,你还未成年,不宜使用该软件!n");由于 if else 语句可以根据不同的情况执行不同的代码,所以也叫分支结构或选择结构只使用 if 语句有的时候,我们需要在满足某种条件时进行一些操作,而不满足条件时就不进行任何操作,这个时候我们可以只使用if语句。也就是说,if else 不必同时出现。单独使用if 语句的形式为:if( 判断条件 )语句块意思是,如果判断条件成立就执行语句块,否则直接跳

20、过。其执行过程可表示为下图:多个 if else 语句if else 语句也可以多个同时使用,构成多个分支,形式如下:if( 判断条件1)语句块 1 else if( 判断条件 2)语句块 2elseif( 判断条件3)else语句块 3if( 判断条件m)语句块melse语句块 n意思是,从上到下依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳到整个if else 语句之外继续执行其他代码。如果所有判断条件都不成立,则执行语句块n,然后继续执行后续代码。也就是说,一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行。在 C 语言中,共有三大常

21、用的程序结构:顺序结构:代码从前往后执行,没有任何“拐弯抹角”选择结构:也叫分支结构,重点要掌握if else、 switch循环结构:重复执行同一段代码。;以及条件运算符;前面讲解了顺序结构和选择结构,本节开始讲解循环结构。所谓循环(复地执行同一段代码,例如要计算1+2+3+ +99+100 的值,就要重复进行Loop ),就是重99 次加法运算。whilewhile循环循环的一般形式为:while( 表达式)语句块意思是,先计算“表达式”的值,当值为真(非 0)时, 执行“语句块” ;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”这个过程会一直重复,直到表达式的值为假(

22、 0),就退出循环,执行 while 后面的代码。我们通常将“表达式”称为循环条件,把“语句块”称为循环体,整个循环的过程就是不停判断循环条件、并执行循环体代码的过程。用 while 循环计算 1 加到 100 的值:#include <stdio.h>int main()int i=1, sum=0;while(i<=100)sum+=i;i+;printf("%dn",sum);return 0;运行结果:5050代码分析:1) 程序运行到while时,因为i=1 , i<=100 成立,所以会执行循环体;执行结束后i的值变为2, sum 的值变

23、为1。2) 接下来会继续判断 i<=100 是否成立,因为此时 i=2 , i<=100 成立,所以继续执行循环体;执行结束后 i 的值变为 3, sum 的值变为 3。3) 重复执行步骤 2)。4) 当循环进行到第100 次,i 的值变为101,sum 的值变为5050 ;因为此时i<=100 不再成立,所以就退出循环,不再执行循环体,转而执行while 循环后面的代码。while循环的整体思路是这样的:设置一个带有变量的循环条件,也即一个带有变量的表达式;在循环体中额外添加一条语句, 让它能够改变循环条件中变量的值。这样,随着循环的不断执行, 循环条件中变量的值也会不断变

24、化,终有一个时刻,循环条件不再成立,整个循环就结束了。如果循环条件中不包含变量,会发生什么情况呢?1) 循环条件成立时的话,while循环会一直执行下去,永不结束,成为“死循环”。例如:#include <stdio.h>int main()while(1)printf("1");return 0;运行程序,会不停地输出“1”,直到用户强制关闭。2) 循环条件不成立的话,while循环就一次也不会执行。例如:#include <stdio.h>int main()while(0)return 0; printf("1"); 运行程

25、序,什么也不会输出。do-while 循环除了 while 循环,在C 语言中还有一种do-while循环。do-while循环的一般形式为:do语句块while( 表达式 );do-while 循环与while 循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此, do-while 循环至少要执行一次“语句块” 。用 do-while 计算 1 加到 100 的值:#include <stdio.h>int main()int i=1, sum=0;dosum+=i;i+;while(i<=100);printf("%dn", sum);return 0;运行结果:5050注意 while(i<=100); 最后的分号 ;,这个必须要有。while 循环和 do-while 各有特点, 大家可以适当选择,实际编程中使用while 循环较多。除了while循环, C语言中还有for循环,它的使用更加灵活,完全可以取代while循环。上节我们使用while循环来计算1 加到100 的值,代码如下:#include <stdio.h>int main()int i, sum=0;i = 1;/语句while(i<=100 /* 语句 */ )sum+=i;i+;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论