《C语言基本语法归纳.pptx》由会员分享,可在线阅读,更多相关《C语言基本语法归纳.pptx(262页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、提 纲C C语言概况语言概况C C程序的结构程序的结构数据类型、运算符与表达式数据类型、运算符与表达式最简单的最简单的C C程序设计程序设计顺序程序设计顺序程序设计选择结构程序设计选择结构程序设计循环控制循环控制数组数组函数函数指针指针第1页/共262页C C语言概况语言概况C的优点1)、高效2)、可移植3)、灵活C的缺点可读性差,学习应用较难。第2页/共262页C C语言概况语言概况-简单的简单的C C程序程序 例1.1 main()printf(This is a C program.n);该程序的作用:在屏幕上输出一行信息:This is a C program.1 1、main()ma
2、in()表示“主函数”,每一个C C程序都必须有且只有一个主函数。2 2、mainmain函数体由大括号 括起来。3 3、语句后面有一个分号。.4 4、printf()printf()是C C语言的输出函数。双引号内的字符 被原样输出。5 5、“nn”是换行符,即在输出This is a C programThis is a C program之后换行。第3页/共262页 例1.2求两数之和。main()int a,b,sum;/*定义三个整型变量。(int=integer)。*/a=123;b=456;/*把常数123赋给变量a,把常数456赋给变量b*/sum=a+b;/*计算a、b之和,
3、并把和值赋变量给sum*/printf(“Sum is%dn”,sum);/*输出sum的值*/程序的输出信息为:sum is 579/*/中间的内容表示“注释”。注释是程序员对程序某部分的功能和作用所做的说明,是给人看的,对编译和运行不起作用。%d表示输出的数据类型是十进制整数类型。在输出时,该位置用对应变量sum的值代替。第4页/共262页例1.3输入两个整数,输出其中的最大值。int max(int x,int y)/*求两数最大值函数max*/int z;if(xy)z=x;else z=y;return(z);/*将z的值返回给主函数main*/*返回值通过函数名max带回main函
4、数调用处*/main()/*主函数*/int a,b,c;scanf(“%d,%d”,&a,&b);/*输入a,b的值*/c=max(a,b);/*调用max函数,将实参a,b的值给形参x,y*/printf(“max=%d”,c);/*输出最大值*/第5页/共262页C C程序的结构程序的结构、C 程序是由函数构成的。一个C源程序至少包括一个函数(main函数:它代表程序开始执行的起始位置),也可以包括一个main函数和若干其它函数。因此,函数是C程序的基本单位。第6页/共262页C程序中有三种类型的函数:1).main():主函数,每一个C程序必须且只有一个main()函数。2).开发系统
5、提供的特殊函数,如printf()、scanf()等。Turbo C开发系统提供三百多个函数。3).程序员自己设计的函数,如例1.3中的函数max()。C的函数相当于其它语言中的子程序。用函数来实现特定的功能。可以说C是函数式的语言。程序全部工作都是由函数来完成的。C的这种特性很容易实现模块化。C C程序的结构程序的结构第7页/共262页C C程序的结构程序的结构、一个函数由两部分组成:()函数的说明部分。包括函数名、函数类型、函数属性、函数参数(形参)名、形式参数类型。如int max (int x,int y)函数类型 函数名 函数参数类型 函数参数名 函数参数类型 函数参数名()函数体。
6、即函数说明部分下面的大括弧.内的部分。如果一个函数内有多个大括弧,则最外层的一对 为函数体的范围。第8页/共262页函数体一般包括:变量定义。如例1.3中main函数中的“int a,b,c;”执行部分。由若干个语句组成。当然,在某些情况下也可以没有变量定义部分(例如例1.1)。甚至可以既无变量定义也无执行部分,如:dump()它是一个空函数,什么也不干,但这是合法的。C C程序的结构程序的结构第9页/共262页、一个C程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前在另一些函数之后)。、C程序书写
7、格式自由,一行内可以写几个语句,一个语句可以分写在多行上。C程序没有行号,也不象fortran或cobol那样严格规定书写格式(语句必须从某一列开始书写)。C C程序的结构程序的结构第10页/共262页、每个语句和数据定义的最后必须有一个分号。分号是C语句的必要组成部分。例如:c=a+b;分号不可少。即使是程序中最后一个语句也应包含分号(这是和pascal语言不同的)。、C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。、可以用/*/对C程序中的任何部分作注释。可以增加程序的可读性。C C程序的结构程序的结构第11页/共2
8、62页程序开发过程程序开发过程v v C源代码编译程序目标代码链接程序可执行代码库C源代码编译程序目标代码第12页/共262页数据类型、运算符与表达式第13页/共262页3.1 信息在计算机中的存储与表示计算机的基本功能是进行数据的计算和加工处理,程序和数据在计算机的存储是用二进制形式表示的。数与字符是自然信息与计算机二进制信息的中转环节。数制:就是用一组固定的数字和一套统一的规则来表示数据的方法。日常使用的十进制(逢十进一)机器内部的二进制(逢二进一)其它常用的数制:八进制,十六进制第14页/共262页不同数制之间的对应表示十进制decimal二进制binary八进制octal十六进制hex
9、decimal000011112102231133410044510155611066711177第15页/共262页十进制decimal二进制binary八进制octal十六进制hexdecimal810008910019101010111011121100131101141110151111161000010ABCDEF201011121314151617第16页/共262页数制间的转换1.二、八、十六进制转换为十进制按权展开法。例:(101.11)2=122+021+120+12-1+12-2 =(5.75)10(127.4)8=182+281+780+42-1 =(87.5)10第17
10、页/共262页数制间的转换2.十进制转换为二、八、十六进制整数部分:除R取余法(先余为低,后余为高)小数部分:乘R取整法(先整为高,后整为低)转换精度问题例:(4.6875)10=(?)2 结果:(100.1011)2(87.5)10=(?)8 结果:(127.47)8 第18页/共262页数制间的转换3.二进制与八、十六进制之间的转换八、十六进制转换为二进制一分为三、一分为四例:(23.54)8=(010011.101100)2 =(10011.1011)2(13.B)16=(00010011.1011)2 =(10011.1011)2二进制转换为八、十六进制合三为一、合四为一第19页/共2
11、62页3.2 3.2 C C的数据类型的数据类型数据结构指的是数据的组织形式。不同的计算机语言所允许定义和使用的数据结构是不同的。处理同一类问题,如果数据结构不同,算法也会不同。所以,我们应当综合考虑算法和数据结构,选择最佳的数据结构和算法。数据结构+算法=程序对程序当中所用到的所有数据都必须指定其数据类型。C语言的数据结构是以数据类型形式出现的。第20页/共262页C C的数据类型如下的数据类型如下:第21页/共262页3.2 3.2 常量与变量常量与变量3.2.1 常量和符号常量3.2.2 变量第22页/共262页3.2.1 3.2.1 常量和符号常量常量和符号常量在程序运行过程中,其值不
12、能被改变的量称为常量。常量分为:(1)整型常量;如12,0,3等;(2)实型常量;如4.6,1.23等;(3)字符常量;如a,d等;(将在后面的小节中详细讲解)常量一般从其字面形式即可判别,这种常量称为字面常量或直接常量。也可以用一个标识符代表一个常量。如例3.1第23页/共262页例例 3.1 3.1 符号常量的使用。符号常量的使用。#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(“total=%d”,total);程序中用#define 命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代
13、表30,可以和常量一样进行运算。程序运行结果为:total=300第24页/共262页符号常量符号常量用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。注意:符号常量不同于变量。符号常量的值在其作用域(例3.1中即为main()函数)内不能被改变,也不能被再次赋值。如:在主函数main中再次用“PRICE=40”语句对PRICE赋值是错误的。为了方便区分符号常量与变量,习惯上符号常量名大写,变量名小写。第25页/共262页使用符号常量的好处使用符号常量的好处(1)含义清楚。定义符号常量名时应考虑“见名知意”,在一个规范的程序中不提倡使用很多的常数,如:sum=15*30*23.5*
14、43.在检查程序时搞不清各个常数究竟代表什么。应尽量使用“见名知意”的变量名和符号常量。(2)在需要改变一个常量时能够做到“一改全改”。例如,在程序中多处用到某物品的价格,如果价格用常数表示,则在价格进行调整时,需要在程序中作多处修改;若使用符号常量PRICE代表价格,则只需在定义该符号常量处作一次修改即可。如:#define PRICE=35 第26页/共262页3.2.2 3.2.2 变量变量其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放该变量的值。注意:变量名与变量值的区别。3a变量名(一个符号地址,在对程序编译时系统分配给它一个内存地址
15、)变量值(在程序中对变量取值,实际上是通过变量名找到相应内存地址,从其存储单元中读取数据)存储单元第27页/共262页变量的使用是程序设计的中心环节之一,应掌握:(1)变量的定义:某一时刻值是确定的,不同时刻可能取不同的值,其改变是不连续的。(2)变量的两个要素 变量名:它是一个标识符,代表一定的内存存储单元,存储单元有一个地址。C语言以“&变量名”表示变量的地址。变量值:它存放在相应的存储单元中,C语言在使用变量名时,实际上是在使用存储单元中存放的变量的值。第28页/共262页变量的命名规则变量的命名规则变量的命名符合一般标识符(名字)的命名规则。(1)“字母数字串”;以字母开头,后边跟以字
16、母或者数字,下划线等同于字母。(汉字看作字母,但编程时尽量避免使用汉字,因为汉字的兼容性不好)(2)建议长度不超过8个字符(可移植性要求);(3)区分大小写(一般使用小写字母);(4)尽量做到“见名知意”,避免使用代数符号(如a,b);(5)不能有空格,不能有小数点。第29页/共262页变量的强制定义变量的强制定义在C语言中,要求对所有用到的变量作强制定义,就是“先定义,后使用”。这样做的目的是:(1)凡是没有被事先定义的,不作为变量名,这就能保证程序中变量名使用的正确;(2)每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元;(3)制定每一变量属于一个类型,这就便于在编译时,据
17、此检查该变量所进行的运算是否合法。第30页/共262页3.3 3.3 整型数据整型数据3.3.1 整型常量的表示方法3.3.2 整型变量3.3.3 整型常量的类型 第31页/共262页3.3.1 3.3.1 整型常量的表示方法整型常量的表示方法整形常量即整常数。C整常数可用以下三种形式表示:(1)十进制整数。如123、-456、0 (2)八进制整数。以0开头的数是八进制数。如0123表示八进制数123,即(123)8,等于十进制数83(18228138083)。-011表示八进制数-11,即十进制数-9。(3)十六进制整数。以0 x开头的数是16进制数。如0 x123,代表16进制数123。第
18、32页/共262页3.3.2 3.3.2 整型变量整型变量1.整型数据在内存中的存放形式2.整型变量的分类3.整型变量的定义4.整型数据的溢出第33页/共262页整型变量的分类整型变量的分类(1)基本型,以int表示。(2)短整型,以short int表示,或以short表示。(3)长整型,以long int表示,或以long表示。(4)无符号型,以存储单元中全部二进位(bit)存放数本身,而不必空出最高位作为符号位。无符号型中又分为无符号整型、无符号短整型和无符号长整型,分别以unsigned int,unsigned short,unsigned long表示。如果整量在内存中占2个字节(
19、16位),则int型变量数的范围为-3276832767。而unsigned int型变量数的范围为065535.第34页/共262页各类数据所占内存字节数各类数据所占内存字节数C标准没有具体规定以上各类数据所占内存的字节数,只要求long型数据长度不短于int型,short型不长于int型。具体如何实现,有各计算机系统自行决定。通常的做法是:把long定为32位,把short定为16位,而int可以是16位,也可以是32位。在微机上用long型可以得到大范围的整数,但同时会降低运算速度,因此不要随便使用long型。第35页/共262页整型变量的定义整型变量的定义前面已提到,C规定在程序中所有
20、用到的变量都必须在程序中指定其类型,即“定义”。这和BASIC,FORTRAN不同,而和PASCAL相类似。例如:int a,b;(指定变量a,b为整型)unsigned short c,d;(指定变量c,d为无符号短整型)long e,f(指定变量e,f为长整型)对变量的定义,一般是放在一个函数的开头部分的声明部分,变量的作用域是整个函数;也可以放在函数中的某一分程序内,但变量的作用域只限于该分程序内(这将在第8章介绍)。第36页/共262页例例3.2 3.2 整型变量的定义与使用整型变量的定义与使用main()int a,b,c,d;/*指定a,b,c,d为整型变量*/unsigned u
21、;/*指定u为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%dn”,c,d);运行结果为:a+u=22,b+u=-14 可以看到:不同种类的整型数据可以进行算术运算。在本例中是int型数据与unsigned int型数据进行加减运算。第37页/共262页3.4 3.4 实型数据实型数据3.4.1 实型常量的表示方法3.4.2 实型变量3.4.3 实型常量的类型第38页/共262页3.4.1 3.4.1 实型常量的表示方法实型常量的表示方法实数在C语句中又称为浮点数。实数有两种表示形式:(1)十进制数形式。它由数字和小数点组成(
22、注意必须有小数点)。0.123,.123,123.0,123.,0.0都是十进制数形式。(2)指数形式。如123e3或123E3都代表123103。但注意字母e(或E)之前必须有数字,且e后面指数必须为整数,如e3,2.1e3.5,.e3,e等都不是合法的指数形式。第39页/共262页3.4.2 3.4.2 实型变量实型变量1.实型数据在内存中的存放形式2.实型变量的分类3.实型数据的舍入误差第40页/共262页3.4.2 3.4.2 实型变量实型变量1.实型数据在内存中的存放形式2.实型变量的分类3.实型数据的舍入误差第41页/共262页3.5 3.5 字符型数据字符型数据3.5.1 字符常
23、量3.5.2 字符变量3.5.3 字符数据在内存中的存储形式3.5.4 字符串常量第42页/共262页3.5.1 3.5.1 字符常量字符常量C的字符常量是用单引号括起来的一个字符。如a,D,?等都是字符常量。注意,a和A是不同的字符的常量。除了以上形式的字符常量外,C还允许用一种特殊的字符常,就是以一个“”开关的字符序列。例如,前面已经遇到过的,在printf函数中的n,它代表一个“换行”符,这种非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。这类特殊的字符称为“转义字符”。第43页/共262页转义字符转义字符a.控制字符:t 水平制表(跳到下一个tab位置);r 回车;n 换
24、行;b.疑难字符:单引号字符 反斜杠字符c.指定ASCII码对应的字符:格式1:xhh:1到2位十六进制数ASCII码对应的字符如:x42表示字符“B”;格式2:ddd:1到3位八进制数ASCII码对应的字符 如:102同样表示字符“B”;第44页/共262页3.5.2 3.5.2 字符变量字符变量字符型变量用来存放字符常量,注意只能放一个字符,不要以为在一个字符变量中可以放一个字符串(包括若干字符)。字符变量的字义如下:char c1,c2;它表示c1和c2为字符型变量,各可以放一个字符。因此可以用下面语句对c1,c2赋值:c1=a;c2=b 一般以一个字节来存放一个字符,或者说一个字符变量
25、在内存中占一个字节。第45页/共262页3.5.3 3.5.3 字符数据在内存中的存储形式字符数据在内存中的存储形式将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中,而是将该字符的ASCII码放到存储单元中,而且以二进制形式存放。例如:执行赋值语句c1=a;c2=b;字符a的ASCII码为97,b为98,在内存中变量c1,c2的值如图所示:既然在内存中,字符数据以ASCII码存放,它的存储形式就与整数的存储类似,这使得字符型数据和整型数据之间可以通用。9798c1c20110000101100010c1c2第46页/共262页字符型数据和整型数据的通用性字符型数据和整型数据的
26、通用性一个字符数据既可以以字符形式输出,也可以以整数形式输出。两种通用形式的输出;以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出;以整数形式输出时,直接将ASCII码作为整数输出。对字符数据进行算术运算;相当于对它们的ASCII码进行整数的算术运算。相互赋值;字符数据与整型数据可以相互赋值。第47页/共262页两种通用形式的输出两种通用形式的输出 main()char c1,c2;c1=97;c2=98;(等价于c1=a;c2=b;)printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);将97和98两个整数直接存放到c1和c2的内存
27、单元中。先将字符a 和b化成ASCII码97和98,然后放到内存单元中。两者的作用和结果是完全相同的程序输出如下:a b97 98第48页/共262页对字符数据进行算术运算对字符数据进行算术运算例3.7 大小写字母的转换。main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“%c%c”,c1,c2);运行结果为:A Ba的ASCII码为97,A为65;b为98,B为66。从ASCII代码表中可以发现:每一个小写字母比它相应的大写字母的ASCII码大32。C语言允许字符数据与整数直接进行算术运算。第49页/共262页相互赋值相互赋值字符数据与整
28、型数据可以相互赋值。main()int i;char c;i=a;c=97;printf(“%c,%dn”,c,c);printf(“%c,%dn”,i,i);运行结果:a,97 a,97第50页/共262页3.5.4 3.5.4 字符串常量字符串常量前面已提到,字符常量是由一对单引号括起来的单个字符。C语言除了允许使用字符常量外,还允许使用字符串常量。字符串常量是一对双引号括起来的字符序列。如:“How do you do.”,“CHINA”,“$123.45”都是字符串常量。可以输出一个字符串,如printf(How do you do.);第51页/共262页不要将字符常量与字符串常混淆
29、。a是字符常量,“a”是字符串常量,二者不同。假设C被指定为字符变量:char c;c=a;是正确的;而 c=“a”;是错误的。c=“CHINA”,也是错误的。不能把一个字符串赋给一个字符变量。究竟为什么c=a就是正确的,而c“a”就错了呢?第52页/共262页3.6 3.6 变量赋初值变量赋初值程序中常需要对一些变量预先设置初值。C语言允许在定义变量的同时使变量初始化。int a=3;/*指定a为整型变量,初值为3*/float f=3.56;/*指定f为实型变量,初值为3.56*/char c=a;/*指定c为字符变量,初值为a*/也可以使被定义的变量的一部分赋初值。int a,b,c=5
30、;/*指定a,b,c为整型变量,只对c初始化*/如果对几个变量赋予初值3,应写为:int a=3,b=3,c=3;不能写成:int a=b=c=3 第53页/共262页初始化不是在编译阶段完成的(只有在第8章中介绍的静态存储变量和外部变量的初始化时在编译阶段完成的)。如:int a=3;相当于:int a;/*指定a为整型变量*/a=3;/*赋值语句,将3赋给a*/如:int a,b,c=5;相当于:int a,b,c;/*指定a,b,c为整型变量*/c=5;/*赋值语句,将5赋给c*/第54页/共262页3.7 3.7 算术运算符和算术表达式算术运算符和算术表达式3.7.1 C运算符简介3.
31、7.2 算术运算符和算术表达式 1.基本的算术运算符 2.算术表达式和运算符的优先级与结合性 3.强制类型转换运算符 4.自增、自减运算符 5.有关表达式使用中的问题说明第55页/共262页3.7.1 C3.7.1 C运算符简介运算符简介C语言是表达式语言,除了控制语句和输入输出外几乎都是表达式。如:赋值符“”作为赋值运算符,而方括号“”作为下标运算符等。C的运算符有13类之多。第56页/共262页C C的运算符的运算符1.算术运算符(+,-,*,/,%,即加,减,乘,除,求余)2.关系运算符(,=,=,!=)3.逻辑运算符(!,&,|)4.位运算符(,|,&)5.赋值运算符(=及其扩展赋值运
32、算符)6.条件运算符(?,:)7.逗号运算符(,)8.指针运算符(*和&)9.求字节数运算符(sizeof)10.强制类型转换运算符(类型)11.分量运算符(.)12.下标运算符()13.其他(如函数调用运算符()运算符详见本书附录III第57页/共262页基本的算术运算符基本的算术运算符四则运算:(加法运算符,或正值运算符。如35、3)(减法运算符,或负值运算符。如52、2)*(乘法运算符。如3*5)/(除法运算符。如5/3)%(模运算符,或求余运算符,%两则应均为整型数据)说明:/运算如果除数或被除数中有一个为负数,则舍入的方向是不固定的。如5/3有的机器上结果为1,有的为2。但多数机器采
33、取“向零取整”的方法,即5/3=1,-5/3=-1,取整后向零靠拢。第58页/共262页算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象(操作数)连接起来,符合C语法规则的式子,称C算术表达式。运算对象包括常量、变量、函数。合法的C算术表达式如:a*b/c-1.5+a 优先级:若运算对象两侧运算符的优先级不同,则先乘除后加减。结合性:若一个运算对象两侧的运算符的优先级相同,则满足结合性规则,自左向右,左结合性(运算对象先与左面的运算符结合)。第59页/共262页自增、自减运算符自增、自减运算符有前置和后置两种形式:前置形式:+变量名,变量名后置形
34、式:变量名+,变量名 功能:对变量的值进行自加1(自减1)的运算。例:语句+a;相当于执行a=a+1;前置形式运算规则:先对表达式中含有前置自增(减)运算符的变量进行自加(减)1,然后用这些变量的新值参与表达式运算。后置形式运算规则:先用变量原值参与表达式运算,然后对含有后置自加(减)运算符的变量进行自加(减)1运算。第60页/共262页main()main()int j,i=3;int j,i=3;j=+i;(相当于i=i+1;j=i)j=i+;(相当于j=i;i=i+1)printf(“%d,%d”,i,j);printf(“%d,%d”,i,j);运行结果:4,4 运行结果:4,3(1)
35、自增运算符()和自减运算符(),只能用于变量,不能用于常量或表达式;(2)和的结合方向为“自右至左”。考虑:若i的初值为3,那么print(“%d”,-i+)的结果 应该为多少呢?第61页/共262页3.8 3.8 赋值运算符和赋值表达式赋值运算符和赋值表达式1.赋值运算符2.类型转换3.复合的赋值运算符4.赋值表达式第62页/共262页1.1.赋值运算符赋值运算符赋值符号“”就是赋值运算符,作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算),把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。如“a=3+5-8%5”,相当于把结果值5赋给变量a(“a=5”
36、)。第63页/共262页2.2.类型转换类型转换如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。第64页/共262页3.3.复合的赋值运算符复合的赋值运算符在赋值符“”之前加上其他运算符,可以构成复合的运算符。如:a+=3等价于a=a+3,x%=3等价于x=x%3。注意:赋值符“”右边看作一项。凡是二元运算符,都可以与赋值符一起组成复合赋值符。C语言规定了10种复合赋值运算符:+=,-=,*=,/=,%=,=,&=,=,|=规则:(1)“=”后边先加括号;(2)“=”前边复制到“=”后边;第65页/共262页4.4.赋值表达式赋值表达式由赋值运算符将一个变量和一
37、个表达式连接起来的式子称为“赋值表达式”。一般形式为:赋值表达式求解过程:将赋值运算符右侧“表达式”的值赋给左侧的变量。表达式的值就是被赋值的变量的值。上述一般形式中的“表达式”还可以是一个赋值表达式。如:a=(b=5)。所以,C语言允许连续赋值。第66页/共262页int a,b,c;a=b=c=0;连续使用等号时,从右向左顺序赋值:a=(b=(c=0);赋值表达式也可以包含复合的赋值运算符。如:a+=a-=a*a也是一个赋值表达式。若a的初值为12,则:先进行“a-=a*a”,相当于a=a-a*a,a的值为 12-144=-132;再进行“a+=-132”的运算,相当于“a=a+(-132
38、)”,a的值为-132-132=-264。第67页/共262页3.9 3.9 逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算符(又称顺序求值运算符):,逗号表达式:用逗号运算符把两个表达式连接起来的表达式。一般形式为:表达式1,表达式2,.,表达式n逗号表达式的值:表达式n的值.如:逗号表达式“3+5,6+8”的值为14。如:“a=3*5,a*4”,由于赋值运算符的优先级高于逗号运算符(逗号运算符在所有运算符中级别最低),因此应先求解a=3*5,再求解a*4,得到逗号表达式的值60。第68页/共262页一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如:(a=3*5,a*4),
39、a+5,先计算出a的值为15,由于a*4的操作并没有改变a的值,所以a+5的值为20。因此,逗号表达式最终的值为20。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值。逗号表达式最常用于循环(for)语句。注意:并不是任何地方出现的逗号都作为逗号运算符。例如函数参数也是用逗号来间隔的,如:printf(“%d,%d,%d”,a,b,c);第69页/共262页课堂作业:2.1 指出下面哪些是合法的变量名:123 abc a+b a_b pad?12 Li_Li *P2.2 a在内存中占 个字节,“a”在在内存中占 个字节.2.3 写出下面程序的运行结果:main()char ch;
40、ch=B;/*B的ascii码的值为66*/printf(“%c,%dn”,ch,ch)1 2B 66第70页/共262页2.4 写出下面程序的运行结果:main()int a=10,b,c,d;int b,c;a+=6;b=(c=20,6,a+2);printf(a=%d,b=%d,c=%dn,a,b,c);运行结果:a=16,b=18,c=20第71页/共262页2.5写出下面程序的运行结果:main()int a=4;int b,c;c=a+(b=2);a+=a-=a*a;printf(%d,%d,%dn,a,b,c);2.6 写出下面程序的运行结果:main()int a,b,c=9;
41、a=3,b=4;c%=a+b;printf(“%dn”,c)运行结果:-24,2,6运行结果:2第72页/共262页2.7 写出下面程序的运行结果:main()int i,j,m,n;i=8;j=10;m=+i;n=j+;printf(%d,%d,%d,%dn,i,j,m,n);运行结果:9,11,9,10第73页/共262页2.8 写出下面程序的运行结果:main()float x=5.4;int i;i=(int)x;printf(”x=%f,i=%dn,x,i);运行结果:x=5.400000,I=5第74页/共262页第四章第四章 最简单的最简单的C C程序设计程序设计顺序程序设计顺序
42、程序设计第75页/共262页4.1 C语句概述4.2 赋值语句4.3 数据输入输出的概念及实现4.4 字符数据输入输出函数4.5 格式输入与输出4.6 顺序结构程序设计举例第76页/共262页4.1 C4.1 C语句概述语句概述与其他高级语言一样,C语言的语句用来向计算机系统发出操作指令。一个语句经编译后产生若干条机器指令。一个实际的程序应当包含若干条语句。C语句都是用来完成一定的操作任务的;声明部分的内容不应称为语句。如:int a;不是一个C语句,它不产生机器操作,而只是对变量的定义。第77页/共262页C C程序结构程序结构C程序源程序文件1源程序文件2源程序文件n预处理命令全局变量声明
43、函数1函数n函数首部函数体局部变量声明执行语句.第78页/共262页C C语句分类语句分类C语句可以分为以下5类:1.控制语句;2.函数调用语句;3.表达式语句;4.空语句;5.复合语句;第79页/共262页1.1.控制语句控制语句完成一定的控制功能。C只有9种控制语句:if()else (条件语句)for()(循环语句)while()(循环语句)dowhile()(循环语句)continue (结束本次循环语句)break (中止switch或循环语句)switch (多分支选择语句)goto (转向语句)return (从函数返回语句)()表示条件,表示内嵌的语句。第80页/共262页2.
44、2.函数调用语句函数调用语句由一次函数调用加一个分号构成一个语句。如:printf(“This is a C statement.”);一次函数调用分号第81页/共262页3.3.表达式语句表达式语句由一个表达式构成一个语句;最典型的是,由赋值表达式构成一个赋值语句(表达式后面加分号即构成语句)。如:a=3是一个赋值表达式,而a=3;是一个赋值语句。一个语句必须在最后出现分号。任何表达式都可以加上分号而成为语句。如:x+y;是语句,但没有意义(没有将相加之和赋给另一个变量)。表达式能构成语句是C语言的一个重要特色。C中大多数语句是表达式语句(包括函数调用语句),所以有人称C语言为“表达式语言”
45、。第82页/共262页4.4.空语句空语句 空语句:仅包含一个分号的语句,它什么都不做。有时用来做被转向点,或是循环语句中的循环体(循环体是空语句,表示循环体什么也不做。)如:;第83页/共262页5.5.复合语句复合语句 由大括号括起来的语句序列,称为复合语句,或是分程序。如:z=x+y;t=z/100;printf(%f,t);注意:复合语句中最后一个语句最后的分号不能忽略不写。C语言允许一行写几个语句,也可以一个语句拆开写在几行上。第84页/共262页4.2 4.2 赋值语句赋值语句C语言的赋值语句具有其他高级语言赋值语句的一切特点和功能,但也有不同之处:1、C语言中的赋值号“=”是一个
46、运算符,而其它大多数语言中赋值号“=”不是运算符。2、关于赋值表达式和赋值语句的概念。其他大多数高级语言中没有“赋值表达式”这一概念。作为赋值表达式可以包括在其他表达式之中,如:if(a=b)0)t=a;(先赋值,将b的值赋给a;再判断a是否0,若0,则执行t=a;)if(a=b;)0)t=a;(不合法:if条件不能包含赋值语句)第85页/共262页4.3 4.3 数据输入输出的概念及实现数据输入输出的概念及实现所谓输入输出是以计算机主机为主体而言的。从计算机向外部输出设备(显屏,打印机)输出数据称为“输出”;从输入设备(键盘,磁盘)向计算机输入数据称为“输入”。C语言本身不提供输入输出语句,
47、输入和输出操作是由函数来实现的。在C的标准函数库中提供了一些输入输出函数,例如,printf函数和scanf函数。在使用它们时,千万不要简单地认为它们是C语言的“输入输出语句”。printf和scanf不是C语言的关键字。完全可以不用printf和scanf这两个名字,而另外编两个函数,另用其它函数名。第86页/共262页C提供的函数以库的形式存放在系统中,它们不是C语言文本中的组成部分。因此各函数的功能和名,在各种不同的计算机系统所不同。有些通用的函数(如printf和scanf等),各种计算机系统都提供,成为各种计算机系统的标准函数(标准输入输出库的一部分)。在程序编译连接时,用户程序与标
48、准文件相连,所以在程序中可以直接使用printf和scanf函数。注意:在源程序中有printf函数,在编译时并不把它翻译成目标指令,而是在执行阶段中调用已被连接的函数库中的printf函数。第87页/共262页C语言函数库中有一批“标准输入输出函数”,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。其中有:putchar(输出字符)getchar(输入字符)printf(格式输出)scanf(格式输入)puts(输出字符串)gets(输入字符串)第88页/共262页在使用标准I/O库函数时,要用预编译命令“#include”将“stdio.h”文件包括到用户源文件中。即#incl
49、ude“stdio.h”(或#include)。stdio.h是standartinput&output的缩写,它包括了标准I/O库有关的变量定义和宏定义(有关预编译命令见第九章)。在需要使用标准I/O库中的函数时,应在程序前使用上述预编译命令,但在用printf和scanf函数时,则可以不要(只有printf和scanf例外)。预编译命令“#include”都是放在程序的开头,因此这类文件被称为“头文件”。第89页/共262页4.4 4.4 字符数据输入输出函数字符数据输入输出函数4.4.1 putchar函数(字符输出函数)4.4.2 getchar函数(字符输入函数)第90页/共262页
50、4.4.1 putchar4.4.1 putchar函数函数putchar函数的作用是向终端输出一个字符。例如:putchar(c)输出字符串变量C的值。C可以是字符型变量或整型变量。例4.1:#includestdio.hmain()chara,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);运行结果:BOY第91页/共262页也可以输出控制字符,如putchar(n)输出一个换行符。如果将例4.1程序最后一行改为:putchar(a);putchar(n);putchar(b);putchar(n);putchar(c);putchar(n