1、Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Click to edit Master title stylea,Logo,计算机等级考试二,级,C,语言自学之高频考点,教材、参考书与课时安排,参考书,1,、全国计算机等级考试二级教程,C,语言程序设计,教育部考试中心 高等教育出版社,2,、二级,C,语言高频考题导航 南开大学出版社,3,、,C,语言真题分析与实战训练 清华大学出版社,课时安排,授课 :,28,学时,往年考题讲解,:,4,学时,2,考试大纲,基本要求,1
2、熟悉,Visual C+6.0,集成开发环境。,2.,掌握结构化程序设计的方法,具有良好的程序设计风格。,3.,掌握程序设计中简单的数据结构和算法并能阅读简单的程序。,4.,在,Visual C+6.0,集成环境下,能够编写简单的,C,程序,并具有基本的纠错和调试程序的能力,3,目录,1.,程序设计基本概念,2.C,程序设计,的初步知识,3.,顺序,结构,4.,选择,结构,5.,循环,结构,6.,字符型,数据,7.,函数,8.,地址和,指针,9.,数组,10.,字符串,11.,对函数的进一步,讨论,12.,用户,标识符,的作用域和存储类,13.,编译预处理和动态存储分配,14.,结构体、共
3、用体和用户定义类型,15.,位运算,16.,文件,4,第,1,章程序设计基本概念,Top1,:各种“程序”的概念,Top3,:结构化程序设计,Top2,:算法的特性,C,程序的上机步骤,5,什么是程序?,?,Top1,:各种,“,程序,”,的概念,人们把需要用计算机完成的工作写成一条条指令,并把这些指令存储在内存中,当人们给出执行命令后,计算机就按指令顺序自动进行操作。这些可以连续执行的一条条指令的集合称为,“,程序,”,。,6,机器语言,汇编语言,高级语言,面向过程,面向对象,CPU,指令系统,由0、1序列构成的指令码组成,如:,10000000,加,10010000,减,用助记符号描述的指
4、令系统,如,ADD A,B,程序设计是数据被加工的过程,客观世界可以分类,对象是类的实例,对象是数据和方法的封装,对象间通过发送和接受消息发生联系,程序设计关键是定义类,并由类派生对象,程序设计语言的发展,Top1,:各种,“,程序,”,的概念,7,程序的“转换”,机器语言,汇编语言,高级语言,C,语言,编译,汇编,源程序,目标程序,.OBJ,Top1,:各种,“,程序,”,的概念,可执行程序,.exe,链接,二进制语言,8,Top1,:各种“程序”的概念,真题分析,(,2007,年,4,月)下列叙述中错误的是,_,A,、计算机不能直接执行用,C,语言编写的源程序,B,、,C,程序经编译后,生
5、成后缀为,.Obj,的文件是一个二进制文件,C,、后缀为,.Obj,的文件,经连接程序生成后缀为,.Exe,的文件是一个二进制文件,D,、后缀为,.Obj,和,.Exe,的二进制文件都可以直接运行,D,9,Top1,:各种“程序”的概念,真题分析,(,2006,年,4,月)以下叙述中错误的是,_,A,、,C,语言源程序经编译后生成后缀为,.OBJ,的目标程序,B,、,C,程序经过编译、连接步骤之后才能形成一个真正可以执行的二进制机器指令文件,C,、用,C,语言编写的程序称为源程序,它以,ASCII,代码形式存放在一个文本文件中,D,、,C,语言中的每条可执行语句和非执行语句最终都将转换成二进制
6、的机器指令,D,只有二进制语句才最终被转换,成二进制机器指令,10,Top1,:各种“程序”的概念,真题分析,(,2008,年,9,月)计算机能直接执行的程序是,_,A,、源程序,B,、目标程序,C,、汇编程序,D,、可执行程序,D,11,Top1,:各种“程序”的概念,真题分析,(,2007,年,9,月),C,语言源程序的后缀是,_,A,、,.exe,B,、,.c,C,、,.obj,D,、,.cp,B,12,Top1,:各种“程序”的概念,真题分析,(,2006,年,9,月)以下说明中正确的是,_,、,C,语言比其它语言高级,、,C,语言可以不用编译就能被计算机执行,、,C,语言以接近英语和
7、数学言语作为语言的表达式,、,C,语言出现最晚,具有其它语言的一切优点,C,13,Top1,:各种“程序”的概念,真题分析,(,2011,年,3,月)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是,_(,选择题第,11,题,),A)C,语言程序仅可以编译执行,B)C,语言程序仅可以解释执行,C)C,语言程序既可以编译执行又可以解释执行,D),以上说法都不对,C,14,Top1,:各种“程序”的概念,真题分析,(,2011,年,3,月)以下叙述中错误的是,_(,选择题第,12,题,),A)C,语言的可执行程序是由一系列机器指令构成的,B),用,C,语言编写的源程序不能直
8、接在计算机上运行,C),通过编译得到的二进制目标程序需要连接才可以运行,D),在没有安装,C,语言集成开发环境的机器上不能运行,C,源程序生成的,.exe,文件,D,15,Top1,:各种“程序”的概念,练习题,1,、以下叙述中正确的是,_,A,、,C,语言的源程序不必通过编译就可以直接运行,B,、,C,语言中的每条可执行语句最终都将被转换成二进制的机器指令,C,、,C,程序经编译形成的二进制代码可直接执行,D,、,C,语言中的函数不可以单独进行编译,B,16,Top2,:算法的特性,什么是算法?,算法是指为解决某个特定问题而采取的确定且有限的步骤。,?,17,算法应具有以下五个特点:,1,有
9、穷性:一个算法包含的步骤是有限的。即在若干个步骤后结束,并且每一步都在合理时间内完成,2,确定性:算法中每一条指令必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的执行结果。,3,可行性:算法中指定的操作,都可以通过已经验证可以实现的基本运算执行有限次后实现。,5,有一个,或多个输出:算法的目的是为了求解。这些“解”只有通过输出得到。,4,有零个,或多个输入:算法都是用来处理数据对象的,通常情况下这些数据对象需要通过输入来得到。,Top2,:算法的特性,18,如何评价算法?,?,时间复杂度,1,空间复杂度,2,对算法的要求有:必须是正确的,必须能高效率执行,即占用内存空间少,所需运行
10、时间短。于是,对算法的评价可以从两个方面进行:,Top2,:算法的特性,19,Top2,:算法的特性,真题分析,(,2007,年,4,月)算法中,对需要执行的每一步骤操作,必须给出清楚、严格的规定,这属于算法的是,_,A,、正当性,B,、可行性,C,、确定性,D,、有穷性,C,20,Top2,:算法的特性,真题分析,(,2006,年,4,月)以下叙述中错误的是,_,A,、算法正确的程序最终一定会结束,B,、算法正确的程序可以有零个输出,C,、算法正确的程序可以有零个输入,D,、算法正确的程序对于相同的输入一定有相同的结果,B,算法必须有一个或多个输出,21,Top2,:算法的特性,练习题,1,
11、一个算法应该具有“确定性”等,5,个特性,下面对另外,4,个特性的描述中错误的是,_,A,、有零个或多个输入,B,、有零个或多个输出,C,、有穷性,D,、可行性,B,22,Top3,:结构化程序设计和模块化结构,执行时按顺序逐条执行,没有分支,没有转移。可由赋值语句、输入,/,输出语句等构成。,顺序结构,根据不同的条件执行不同分支中的语句。可由,if,语句、,switch,语句等构成。,选择结构,根据各自的条件使一组语句重复执行多次或一次也不执行。可由,for,语句、,while,语句等构成。,循环结构,23,什么是模块化结构?,?,将复杂任务分解成若干个子任务,每个子任务又可分解成多个小子
12、任务,每个小子任务只需完成一个简单的功能。在程序设计时用一个小模块实现这些功能。称这样的程序设计方法为,“,模块化,”,方法,由一个个功能模块构成的程序结构为模块化结构。,Top3,:结构化程序设计和模块化结构,24,Top3,:结构化程序设计和模块化结构,真题分析,(,2007,年,4,月)以下叙述中错误的是,_,A,、,C,语言是一种结构化的程序设计语言,B,、,结构化程序由顺序、分支、循环三种基本结构组成,C,、使用三种基本结构构成的程序只能解决简单问题,D,、结构化程序设计提倡模块化的设计方法,C,25,Top3,:结构化程序设计和模块化结构,真题分析,(,2011,年,9,月)以下选
13、项中关于程序模块化的叙述错误的是,_,。(选择题,12,题),A),把程序分成若干相对独立的模块,便于编码和调试,B),把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块,C),可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序,D),可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序,C,26,开始,结束,编辑,编译,连接,运行,运行结果,可执行文件,(.exe),源程序文件 (,.c),目标文件,(.obj),图,C,程序上机调试过程,此两种代码,不能执行,C,程序的上机步骤,27,第,2,章,C,程序设计的初步知识,Top4,:,C,程序的结构
14、和格式,Top5,:标识符的命名规则,Top6,:,C,语言基本数据类型及其定义规则,Top7,:基本类型数据的相互转换,Top8,:常见算术运算符的使用,Top9,:算术运算符的优先级顺序,Top12,:自加,自,减运算符,Top10,:赋值表达式的求值规则,Top11,:逗号表达式的求,值,规则,28,例,2.1,第一个程序,Hello,World!,/*example1.1 The first C Program*/,#include,main(),printf(“Hello,World!”),;,注释,编译预处理,函数,语句,输出:,Hello,World!,Top4,:,C,语言程序
15、的构成和格式,29,例,2.2,/*example1.1 calculate the sum of a and b*/,#include,/*This is the main program */,main(),int a,b,sum;,a=10;,b=24;,sum=add(a,b);,printf(”sum=%dn,sum);,/*This function calculates the sum of x and y */,int add(int x,int y),int z;,z=x+y;,return(z);,运行结果:,sum=34,函数,语句,预处理命令,注释,30,格式特点,习惯
16、用,小写,字母,大小写敏感,不使用行号,,无程序行,概念,可使用空行和空格,常用,锯齿形,书写格式,main(),.,.,.,.,.,.,.,main(),int i,j,sum;,sum=0;,for(i=1;i10;i+),for(j=1;jb _above$123,M.D.John,3days,#33,char,$123,ab,如何命名标识符?,?,41,真题分析,(,2006,年,9,月)下列定义变量的语句中错误的是,_,A,、,int _int;,B,、,double int_;,C,、,char For;,D,、,float US$;,Top5,:标识符的命名规则,D,42,Top
17、5,:标识符的命名规则,真题分析,(,2005,年,9,月)以下叙述中错误的是,_,A,、用户所定义的标识符允许使用关键字,B,、用户所定义的标识符应尽量做到“见名知意”,C,、用户所定义的标识符必须以字母或下划线开头,D,、用户定义的标识符中大、小写字母代表不同标识,A,43,Top5,:标识符的命名规则,真题分析,(,2006,年,4,月)下列不合法的用户标识符是,_,A,、,j2_KEY,B,、,Double,C,、,4d,D,、,_8_,C,44,Top5,:标识符的命名规则,真题分析,(,2007,年,4,月)按照,C,语言规定的用户标识符命名规则,不能出现在标识符中的是:,_,A,
18、大写字母,B,、连接符,C,、数字字符,D,、下划线,B,45,Top5,:标识符的命名规则,真题分析,(,2007,年,9,月),可在,C,程序中用做用户标识符的一组标识符是,_,A,46,Top5,:标识符的命名规则,真题分析,(,2008,年,4,月)以下选项中不合法的标识符是,_,A,、,print,B,、,FOR,C,、,&a,D,、,_00,C,47,Top5,:标识符的命名规则,真题分析,(,2009,年,4,月,),以下选项中合法的标识符是,_,A)1_1,B)1-1,C)_11,D)1_ _,C,48,一般用大写字母,是宏定义预处理命令,不是,C,语句,直接常量,:,整型常
19、量,实型常量,字符常量,字符串常量,如,#define PRICE 30,常量,定义:程序运行时其值不能改变的量(即常数),分类,:,符号常量,:,用标识符代表常量,定义格式:,#define,符号常量 常量,例 符号常量举例,#define PRICE 30,main(),int num,total;,num=10;,total=num*PRICE;,printf(total=%d,total);,运行结果:,total=300,Top6,:,C,语言基本数据类型及其定义规则,49,整型常量(整常数),三种形式:,十进制整数:由数字,0,9,和正负号表示,.,如,123,-456,0,八进制
20、整数:由数字,0,开头,后跟数字,0,7,表示,.,如,0123,011,十六进制整数:由,0 x,开头,后跟,0,9,a,f,A,F,表示,.,如,0 x123,0Xff,问题:,0123 =(),10,0 x123=(),10,0Xff =(),10,83,291,255,问题:,0123 =(),10,0 x123=(),10,0Xff =(),10,Top6,:,C,语言基本数据类型及其定义规则,50,数制,基,权,表示,数码,特点,10,,,10,,,10,,,十进制数,09,10,逢十进一,二进制数,01,2,2,,,2,,,2,,,逢二进一,八进制数,07,8,8,,,8,,,8
21、逢八进一,十六进制数,09,AF,af,16,16,,,16,,,16,,,逢十六进一,十进制:,4956=,410+910+510+6,10,二进制:,1011=12+02+12+12,十六进制:,81AE=816+116+1016+1416,八进制:,4275=48+28+78+58,Top6,:,C,语言基本数据类型及其定义规则,51,整型常量的类型,根据其值所在范围确定其数据类型,在,整常量后加字母,l,或,L,,,认为它是,long int,型常量,整型常量(整常数),三种形式:,十进制整数:由数字,0,9,和正负号表示,.,如,123,-456,0,八进制整数:由数字,0,开
22、头,后跟数字,0,7,表示,.,如,0123,011,十六进制整数:由,0 x,开头,后跟,0,9,a,f,A,F,表示,.,如,0 x123,0Xff,例,30000,为,int,型,65536 为,long int,型,例,12,与,12L,Top6,:,C,语言基本数据类型及其定义规则,32767,32768,0,012 016 0 x10 0X23FD,0568 o45 ox12t -0X12,只能是正数,52,整数在内存中的存储形式,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
23、1,1,FF01,FF02,FF03,FF04,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,FF05,FF06,65535,Top6,:,C,语言基本数据类型及其定义规则,53,实型常量(实数或浮点数),表示形式:,十进制数形式:(,必须有小数点,)如,0.123,.123,123.0,0.0,123.,指数形式:(,e,或,E,之前必须有数字;指数必须为整数)如12.3,e3,123E2,1.23e4,e-5,1.2E-3.5,实型常量的类型,默认,double,型,在,实型常量后加字母,f,或,F,,,认为它是,float,型,Top6,:,C,语言基本数据类型
24、及其定义规则,X,在内存中,实数一律是以指数形式存储的,1,计算机中存储整数不会出现误差,存储实型数往往存入误差。,2,!,注意:,54,字符常量,定义,:,用,单引号,括起来的,单个普通字符,或,转义字符,.,字符常量的,值,:该字符的,ASCII,码,值,=!=,),逻辑运算符:(!,&|,),位运算符 :(,|&,),赋值运算符:(,=,及其扩展),条件运算符:(,?:,),逗号运算符:(,),指针运算符:(*,&,),求字节数 :(,sizeof,),强制类型转换:(类型),分量运算符:(,.-,),下标运算符:(,),其它 :(,()-,),Top8,:常见算术运算符的使用,76,学
25、习运算符应注意:,运算符功能,与运算量关系,要求运算量个数,要求运算量类型,运算符优先级别,结合方向,结果的类型,Top8,:常见算术运算符的使用,77,Top8,:常见算术运算符的使用,知识点,1,、基本的算术运算符有:、,(减法,/,取负),、,/,、,%,(取余数),2,、关于除法运算,/,C,语言规定:,两个整数相除,其商为整数,,小数部分被,舍弃。,例,5/2 =,-5/2.0 =,例,5/2 =,2,-5/2.0=,-2.5,3,、关于求余数运算,要求两侧的操作数均为,整型,数据,否则出错,。,例,5%2 =,-5%2 =,1%10 =,5%1 =,5.5%2,例,5%2 =,1,
26、5%2 =,-1,1%10 =,1,5%1 =,0,5.5%2,(,),78,4,、关于两边运算数类型不一致,系统将自动进行转换,使两边一致后再进行运算。,5,、所有实型数的运算均以双精度方式进行,若是单精度,,则在尾数部分添,0,,转换为双精度。,Top8,:常见算术运算符的使用,6,、算术表达式的概念,(,1,)表达式的概念,用运算符和括号将运算对象(常量、变量和函数等)连接,起来的、符合语言语法规则的式子,称为表达式。,(,2,)算术表达式的概念,表达式中的运算符都是算术运算符。例如:,3+6*9,、,(x+y)/2-1,等,都是算术表达式。,79,Top8,:常见算术运算符的使用,7
27、强制类型转换表达式,转换格式为:,(,要转换成的数据类型,)(,被转换的表达式,),(double)a,等价于,(double)(a),(int)(x+y),(float)5/2,等价于,(float)(5)/2,(float)(5/2),注意:强制转换类型得到的是一个所需类型的中间量,原表达式类型,并不发生变化。例如,,(double)a,只是将变量,a,的值转换成一个,double,型的中间量,其数据类型并未转换成,double,型。,80,Top8,:常见算术运算符的使用,真题分析,(,2011,年,9,月)若有定义语句:,int x=12,y=8,z;,在其后执行语句,z=0.9+
28、x/y,;,则,z,的值为,_,。(选择题,15,题),A)1.9 B)1 C)2 D)2.4,B,“/”,为整除运算符,两边的运算对象都为,整数时,运算结果为整型。,Z,为整型,所以最终结果为整数。,81,Top8,:常见算术运算符的使用,真题分析,(,2007,年,4,月)以下选项中,当,x,为大于,1,的奇数时,数为,0,的表达式为,_,A,、,x%2=1,B,、,x/2,C,、,x%2!=0,D,、,x%2=0,D,%,(求余运算符)的两边都必须是整型。,大于,1,的奇数除以,2,,余数必为,1,。,表达式成立时,整个表达式逻辑值为,1,表达式不成立时,整个表达式逻辑值为,0,。,82
29、Top8,:常见算术运算符的使用,真题分析,(,2011,年,3,月)以下程序运行后的输出结果是,_(,填空题第,6,题,),。,#include,main(),int a;,a=(int)(double)(3/2)+0.5+(int)1.99*2);,printf(%dn,a);,3,83,Top8,:常见算术运算符的使用,练习题,1,、设变量,x,为,float,型且已经赋值,则以下语句中能将,x,中的数值保留到小数点后两位,并将第三位四舍五入的是,_,A,、,x=x*100+0.5/100.0,B,、,x=(x*100+0.5)/100.0,C,、,x=(int)(x*100+0.5)
30、/100.0,D,、,x=(x/100+0.5)*100.0,C,84,Top8,:常见算术运算符的使用,练习题,2,、若有语句,int i=-19,j=i%4;,printf(“%dn”,j);,则输出结果是,_,-3,85,1,、算术运算符的优先级,(),/,%,单目,双目,高,低,Top9,:算术运算符的优先级顺序,2,、算术运算符和圆括号的结合性,所谓结合性是指,当一个操作数两侧的运算符具有相同,的优先级时,该操作数是先与左边的运算符结合,还是,先与右边的运算符结合。,自左至右的结合方向,称为左结合性。反之,称为右结合性。,结合性是语言的独有概念。,除,单目,运算符,、,赋值,运算符,
31、和,条件,运算符,是右结合性外,其它运算符,都是左结合性。,例如,算术运算符的结合方向是“自左至右”,即:,在执行“,a b+c”,时,变量,b,先与减号结合,执行“,a-b”,;,然后再执行加,c,的运算。,86,Top9,:算术运算符的优先级顺序,真题分析,(,2006,年,4,月)表达式,3.6-5,2+1.2+5%2,的值是,_,A,、,4.3,B,、,4.8,C,、,3.3,D,、,3.8,3.6-5,2+1.2+5%2,2,1.6,2.8,1,3.8,D,87,Top9,:算术运算符的优先级顺序,真题分析,(2005,年,9,月,),下列不能正确计算代数式,sin,2,(1/2)/
32、3,值的,C,语言表达式是,_,1/3*sin(1/2)*sin(1/2),A.,sin(0.5)*sin(0.5)/3,B.,pow(sin(0.5),2)/3,C.,1/3.0*pow(sin(1.0/2),2),D.,1/3*sin(0)*sin(0),0.076616,0.000000,A,88,Top9,:算术运算符的优先级顺序,练习题,1,、设有定义:,float a=2,b=4,h=3;,以下,C,语言表达式与代数式计算结果不相符的是,_,A,、,(a+b)*h/2,B,、,(1/2)*(a+b)*h,C,、,(a+b)*h*1/2,D,、,h/2*(a+b),B,89,赋值运算
33、1,赋值符号“,=”,就是赋值运算符,它的作用是将一个表达式,的值赋给一个变量。赋值运算符的一般形式为:,如果表达式值的类型,与被赋值变量的类型不一致,但都是,数值型或字符型时,系统自动地将表达式的值转换成被赋值,变量的数据类型,然后再赋值给变量,.,例,a=3;,d=func();,c=d+2;,b=a;,Top10,:赋值表达式的求值规则,变量,=,赋值表达式,90,几点说明:,(,1,)赋值运算符的优先级只高于逗号运算符,比其它的运算符优先级都低,且具有自右向左的结合性。,如:,a=2+7/3,(,2,)赋值运算符不是数学中的“等于号”,而是进行“赋予”操作。,(,3,)表达式,x=y
34、读作“将,y,的值赋给变量,x”,而不读作”,x,等于,y“,(,4,),赋值运算符左边只能是变量,不能是常量或是表达式。,如,a+b=c,就是错误的。,(,5,)赋值运算符右边也可以是赋值表达式。如,a=b=7+1,而,a=7+1=b,则是错误的。,(,6,)”“视作运算符,,a=19,是一个表达式,,C,语言规定最左边变量中所得到的新值就是赋值表达式的值。,Top10,:赋值表达式的求值规则,91,复合赋值表达式,2,复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。,复合赋值运算的一般格式为:,变量,双目运算符,=,表达式,复合赋值运算符,等价于,:,变量,=,变量,双目运算符
35、表达式,),。,当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能,出错。,例:,x+=3 x=x+3,y*=x+6 y=y*(x+6),Top10,:赋值表达式的求值规则,92,说明,:,结合方向:,自右向左,左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换,规则,:,使赋值号右边表达式值,自动,转换成其左边变量的类型,例,3=x-2*y;,a+b=3;,例,float f;,int i;,i=10;,f=i;,则,f=10.0,例,int i;,i=2.56;/,结果,i=2,;,例,:a=b=c=5,a=(b=5),a=5+(c=6),
36、a=(b=4)+(c=6),a=(b=10)/(c=2),/,表达式值为5,,a,b,c,值为5,/b=5;a=5,/,表达式值11,,c=6,a=11,/,表达式值10,,a=10,b=4,c=6,/,表达式值5,,a=5,b=10,c=2,Top10,:赋值表达式的求值规则,X,93,思考,2:,a=12;,a+=a-=a*a,思考,3:,int a=2;,a%=4-1;,a+=a*=a-=a*=3;,/a=-264,等价于,a=a+(a=a-(a*a),/a=0,等价于,a=a+(a=a*(a=a-(a=a*3),思考,1:,已有变量,a,,其值为,9,,计算表达式,a+=a-=a+a,
37、1,),a+a=9+9,表达式的值为,18,,但是,a,的值不变,仍为,9,(,2,),a=a-18,,表达式的值为,9,,,a,的值变为,9,。,(,3,),a=a+a,,表达式的值为,-18,,,a,的值为,18,Top10,:赋值表达式的求值规则,94,赋值运算中的类型转换,3,在,C,语言的赋值表达式中,赋值号右边的值先转换成与左边的变量相同的类型,然后进行赋值。,注意,:,(,1,)当赋值号左边的变量为短整型,右边的值为长整型时,短整型变量只能接受长整型数据低位上的两个字节的数据,高位上的数据将丢失。也就是说,右边的值不能超过短整型的数值范围。,Top10,:赋值表达式的求值规则
38、95,例:,short a;,unsigned long b;,b=98304;,a=b;,printf(“%dn”,a);,98304D=11000000000000000B,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,高,16,位,低,16,位,结果,a=1000000000000000B=-32768,Top10,:赋值表达式的求值规则,96,(,2,)当赋值号左边的变量为无符号整型,右边的值为有符号整型时,则把内存中的内容原样复制。右边数据的范围不应超出左边变量可以接受的数据范围。同时要注意,这时负数
39、将转换为正数。,例:,unsigned a;,a=-1;,printf(“%dn”,a);,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,的补码,结果,a=1111111111111111,65535,Top10,:赋值表达式的求值规则,97,(,3,)当赋值号左边的变量为有符号整型,右边的值为无符号整型时,复制的机制同上,这时,若符号位为,1,,将按负数处理。,例:,int a;,unsigned b;,b=1000000000000000;,a=b;,printf(“%dn”,a);,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,结果,a=-(11
40、1111111111111+1),-32786,Top10,:赋值表达式的求值规则,98,Top10,:赋值表达式的求值规则,真题分析,(,2006,年,4,月)以下叙述中错误的是,_,A,、,C,程序中的,#include,和,#define,均不是,C,语句,B,、除逗号运算符外,赋值运算符的优先级最低,C,、,C,程序中,,j+,;是赋值语句,D,、,C,程序中,,+,、,-,、*、,/,、,%,是算术运算符,可用于整型和实型数的运算。,D,99,Top10,:赋值表达式的求值规则,真题分析,(,2005,年,9,月)下列能正确定义且赋初值的语句是,_,A,、,int nl=n2=10,
41、B,、,char c=32;,C,、,float f=f+1.1;,D,、,double x=12.3E2.5;,C,语言规定,变量必须先定义,后使用。,A,、,C,错误。,A,如果写成:,int n1,n2;,对待,n1=n2=10,;则正确,C,如果写成:,float f;f=f+1.1;,则正确,选项,D,中,,E,后面必须为整数,不能是实数。,B,100,Top10,:赋值表达式的求值规则,真题分析,(,2006,年,9,月)若变量,x,、,y,已正确定义并赋值,下列符合,C,语言语法的表达式是,_,A,、,+x,y=x-,B,、,x+1=y,C,、,x=x+10=x+y,D,、,
42、double(x)/10,A,赋值表达式的左边必须是变量,不能是常量,或表达式。所以,B,,,C,错误。,D,选项中,强制类型转换应该写成,:,(double)x/10,101,Top10,:赋值表达式的求值规则,真题分析,(,2011,年,3,月)若有定义语句:,int a=3,b=2,c=1;,,以下选项中错误的赋值表达式是,_(,选择题,15,题,),A)a=(b=4)=3;,B)a=b=c+1;,C)a=(b=4)+c;,D)a=1+(b=c=4);,A,赋值运算符左边只能是变量,不能是常量或是表达式,102,Top10,:赋值表达式的求值规则,练习题,1,、以下选项中,非法的表达式是
43、A,、,0=xj=0;,自增、自减运算符只能用于变量,不能用于常量和表达式,C,135,格式,:,putchar(c),参数,:c,为字符常量、变量或表达式,功能:把字符,c,输出到显示器上,返值:正常,为显示的代码值;出错,为,EOF(-1),字符输出函数,Top14,:数据的输出,136,#include,main(),int c;,char a;,c=65;a=B;,putchar(c);putchar(n);putchar(a);,运行结果:,A,B,例,Top14,:数据的输出,137,格式:,printf(,“,格式控制串,”,,输出表),功能:按指定格式向显示器输出数据,返
44、值:正常,返回输出字节数;出错,返回,EOF(-1),格式输出函数,输出表:要输出的数据(可以没有,多个时以“,”分隔),格式控制串:包含两种信息,格式说明:,%,修饰符,格式字符,,用于指定输出格式,普通字符或转义序列:原样输出,格式字符,Top14,:数据的输出,138,Top14,:数据的输出,d,i,x,X,o,u,c,s,e,E,f,g,%,格式字符:,十六进制无符号整数,不带符号十进制整数,十进制整数,指数形式浮点小数,单一字符,字符串,八进制无符号整数,小数形式浮点小数,e,和,f,中较短一种,百分号本身,int a=567;printf(“%d”,a);,int a=255;p
45、rintf(“%x”,a);,int a=65;printf(“%o”,a);,int a=567;printf(“%u”,a);,char a=65;printf(“%c”,a);,printf(“%s”,“ABC”);,float a=567.789;printf(“%e”,a);,float a=567.789;printf(“%f”,a);,float a=567.789;printf(“%g”,a);,printf(“%”);,567,ff,101,567,A,ABC,5.677890,e+02,567.789000,567.789,%,说明,:,格式字符要用小写,格式字符与输出项个
46、数应相同,按先后顺序一一对应,输出转换,:,格式字符与输出项类型不一致,自动按指定格式输出,例,main(),unsigned short u=65535;,printf(”u=%hdn,u);,输出结果:,u=-1,例,int a=3,b=4;,printf(,“,%d%dn,”,a,b);,printf(,“,a=%d,b=%dn,”,a,b);,例,int a=3,b=4;,printf(“%d%dn”,a,b);,printf(“a=%d,b=%dn”,a,b);,输出结果,:,3 4,a=3,b=4,139,附加格式说明符(修饰符),Top14,:数据的输出,140,例,int a=
47、1234;,float f=123.456;,char ch=a;,printf(“%8d,%2dn”,a,a);,printf(“%f,%8f,%8.1f,%.2f,%.2en”,f,f,f,f,f);,printf(“%3cn”,ch);,运行,1234,1234,结果:,123.456000,123.456000,123.5,123.46,1.23e+02,a,例,static char a=“Hello,world!”,printf(“%sn%15sn%10.5sn%2.5sn%.3sn”,a,a,a,a,a);,运行结果:,Hello,world!,Hello,world!,Hell
48、o,Hello,Hel,例,m.n,Top14,:数据的输出,141,例,int a=1234;,float f=123.456;,static char c=“Hello,world!”;,printf(“%8d,%-8dn”,a,a);,printf(“%10.2f,%-10.1fn”,f,f);,printf(“%10.5s,%-10.3sn”,c,c);,运行结果:,1234,,,1234,123.46,123.5,Hello,Hel,例,-,Top14,:数据的输出,142,例,int a=1234;,float f=123.456;,printf(“%08dn”,a);,print
49、f(“%010.2fn”,f);,printf(“%0+8dn”,a);,printf(“0+10.2fn”,f);,例,0、+,例,int a=123;,printf(“%o,%#o,%X,%#Xn”,a,a,a,a);,例,#,例,long a=65536;,printf(“%d,%8ldn”,a,a);,例,l,00 00 00 00 00 00 00 01,00 00 00 00 00 00 00 00,/00001234,/0000123.46,/000+1234,/000+123.56,/173,0173,7B,0X7B,/0,65536,Top14,:数据的输出,143,Top1
50、4,:数据的输出,考点,格式字符、长度修饰符和附加格式字符以及它们各自的功能。,在格式控制字符串中,格式说明与输出项从左到右在类型上必须一一对应匹配。,在格式控制串中,格式说明与输出项的个数应相同,若格式说明明少于输出项,则多余的输出项不输出,相反,对于多余的格式将输出不定值。,在格式控制串中,可以包含任意的合法字符(包括转义字符)。,144,Top14,:数据的输出,真题分析,(,2006,年,4,月)若变量,a,,,b,已定义为,int,类型并赋值,21,和,55,,要求用,printf,函数以,a=21,,,b=55,的形式输出,请写出完整的的输出语句,_,printf,(“,a=%d,






