汇编语言%3c%3e符号作用,全国计算机等级考试二级C语言笔试高频考点.ppt

计算机等级考试二级C语言自学之高频考点,余敦辉,CompanyLogo,教材、参考书与课时安排,参考书1、全国计算机等级考试二级教程—C语言程序设计教育部考试中心高等教育出版社2、二级C语言高频考题导航南开大学出版社3、C语言真题分析与实战训练清华大学出版社课时安排授课:28学时往年考题讲解:4学时,CompanyLogo,考试大纲,◆基本要求1.熟悉VisualC++6.0集成开发环境。2.掌握结构化程序设计的方法,具有良好的程序设计风格。3.掌握程序设计中简单的数据结构和算法并能阅读简单的程序。4.在VisualC++6.0集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力,CompanyLogo,目录,1.程序设计基本概念,2.C程序设计的初步知识,3.顺序结构,4.选择结构,5.循环结构,6.字符型数据,7.函数,8.地址和指针,9.数组,10.字符串,11.对函数的进一步讨论,12.用户标识符的作用域和存储类,13.编译预处理和动态存储分配,14.结构体、共用体和用户定义类型,15.位运算,16.文件,CompanyLogo,第1章程序设计基本概念,Top1:各种“程序”的概念,Top3:结构化程序设计,Top2:算法的特性,C程序的上机步骤,CompanyLogo,什么是程序?,?,Top1:各种“程序”的概念,人们把需要用计算机完成的工作写成一条条指令,并把这些指令存储在内存中,当人们给出执行命令后,计算机就按指令顺序自动进行操作。这些可以连续执行的一条条指令的集合称为“程序”。,CompanyLogo,机器语言,汇编语言,高级语言,,,面向过程,面向对象,,,CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减,用助记符号描述的指令系统如ADDA,B,面向机器的语言,程序设计是数据被加工的过程,客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系,程序设计关键是定义类,并由类派生对象,程序设计语言的发展,Top1:各种“程序”的概念,CompanyLogo,程序的“转换”,机器语言,汇编语言,高级语言,C语言,编译,汇编,源程序,目标程序.OBJ,Top1:各种“程序”的概念,,可执行程序.exe,链接,,,二进制语言,CompanyLogo,Top1:各种“程序”的概念,真题分析(2007年4月)下列叙述中错误的是______A、计算机不能直接执行用C语言编写的源程序B、C程序经编译后,生成后缀为.Obj的文件是一个二进制文件C、后缀为.Obj的文件,经连接程序生成后缀为.Exe的文件是一个二进制文件D、后缀为.Obj和.Exe的二进制文件都可以直接运行,D,CompanyLogo,Top1:各种“程序”的概念,真题分析(2006年4月)以下叙述中错误的是______A、C语言源程序经编译后生成后缀为.OBJ的目标程序B、C程序经过编译、连接步骤之后才能形成一个真正可以执行的二进制机器指令文件C、用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中D、C语言中的每条可执行语句和非执行语句最终都将转换成二进制的机器指令,D,只有二进制语句才最终被转换成二进制机器指令,CompanyLogo,Top1:各种“程序”的概念,真题分析(2008年9月)计算机能直接执行的程序是____A、源程序B、目标程序C、汇编程序D、可执行程序,D,CompanyLogo,Top1:各种“程序”的概念,真题分析(2007年9月)C语言源程序的后缀是_____A、.exeB、.cC、.objD、.cp,B,CompanyLogo,Top1:各种“程序”的概念,真题分析(2006年9月)以下说明中正确的是_____A、C语言比其它语言高级B、C语言可以不用编译就能被计算机执行C、C语言以接近英语和数学言语作为语言的表达式D、C语言出现最晚,具有其它语言的一切优点,C,CompanyLogo,Top1:各种“程序”的概念,真题分析(2011年3月)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是_____(选择题第11题)A)C语言程序仅可以编译执行B)C语言程序仅可以解释执行C)C语言程序既可以编译执行又可以解释执行D)以上说法都不对,C,CompanyLogo,Top1:各种“程序”的概念,真题分析(2011年3月)以下叙述中错误的是_____(选择题第12题)A)C语言的可执行程序是由一系列机器指令构成的B)用C语言编写的源程序不能直接在计算机上运行C)通过编译得到的二进制目标程序需要连接才可以运行D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件,D,CompanyLogo,Top1:各种“程序”的概念,练习题1、以下叙述中正确的是_____A、C语言的源程序不必通过编译就可以直接运行B、C语言中的每条可执行语句最终都将被转换成二进制的机器指令C、C程序经编译形成的二进制代码可直接执行D、C语言中的函数不可以单独进行编译,B,CompanyLogo,Top2:算法的特性,什么是算法?,算法是指为解决某个特定问题而采取的确定且有限的步骤。,?,CompanyLogo,算法应具有以下五个特点:,Top2:算法的特性,CompanyLogo,如何评价算法?,?,对算法的要求有:必须是正确的,必须能高效率执行,即占用内存空间少,所需运行时间短。于是,对算法的评价可以从两个方面进行:,Top2:算法的特性,CompanyLogo,Top2:算法的特性,真题分析(2007年4月)算法中,对需要执行的每一步骤操作,必须给出清楚、严格的规定,这属于算法的是_____A、正当性B、可行性C、确定性D、有穷性,C,CompanyLogo,Top2:算法的特性,真题分析(2006年4月)以下叙述中错误的是_____A、算法正确的程序最终一定会结束B、算法正确的程序可以有零个输出C、算法正确的程序可以有零个输入D、算法正确的程序对于相同的输入一定有相同的结果,B,算法必须有一个或多个输出,CompanyLogo,Top2:算法的特性,练习题1、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是_____A、有零个或多个输入B、有零个或多个输出C、有穷性D、可行性,B,CompanyLogo,Top3:结构化程序设计和模块化结构,,,执行时按顺序逐条执行,没有分支,没有转移。可由赋值语句、输入/输出语句等构成。,,,,,,顺序结构,根据不同的条件执行不同分支中的语句。可由if语句、switch语句等构成。,,,,,,选择结构,根据各自的条件使一组语句重复执行多次或一次也不执行。可由for语句、while语句等构成。,,,,,,循环结构,,CompanyLogo,什么是模块化结构?,?,将复杂任务分解成若干个子任务,每个子任务又可分解成多个小子任务,每个小子任务只需完成一个简单的功能。在程序设计时用一个小模块实现这些功能。称这样的程序设计方法为“模块化”方法,由一个个功能模块构成的程序结构为模块化结构。,Top3:结构化程序设计和模块化结构,CompanyLogo,Top3:结构化程序设计和模块化结构,真题分析(2007年4月)以下叙述中错误的是_____A、C语言是一种结构化的程序设计语言B、结构化程序由顺序、分支、循环三种基本结构组成C、使用三种基本结构构成的程序只能解决简单问题D、结构化程序设计提倡模块化的设计方法,C,CompanyLogo,Top3:结构化程序设计和模块化结构,真题分析(2011年9月)以下选项中关于程序模块化的叙述错误的是____。(选择题12题)A)把程序分成若干相对独立的模块,便于编码和调试B)把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C)可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序D)可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序,C,CompanyLogo,,,,,运行结果,可执行文件(.exe),,,,,源程序文件(.c),,,,,目标文件(.obj),,,图C程序上机调试过程,,此两种代码不能执行,C程序的上机步骤,CompanyLogo,第2章C程序设计的初步知识,Top4:C程序的结构和格式,Top5:标识符的命名规则,Top6:C语言基本数据类型及其定义规则,Top7:基本类型数据的相互转换,Top8:常见算术运算符的使用,Top9:算术运算符的优先级顺序,Top12:自加自减运算符,Top10:赋值表达式的求值规则,Top11:逗号表达式的求值规则,CompanyLogo,例2.1第一个程序Hello,World!,/*example1.1ThefirstCProgram*/#includemain(){printf(“Hello,World!”);},输出:Hello,World!,Top4:C语言程序的构成和格式,CompanyLogo,例2.2,/*example1.1calculatethesumofaandb*/#include/*Thisisthemainprogram*/main(){inta,b,sum;a=10;b=24;sum=add(a,b);printf(”sum=%d\n",sum);}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){intz;z=x+y;return(z);},运行结果:sum=34,CompanyLogo,格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式,,main(){……………….…………………………..…………..……………….………………………….……………….………………..},main(){inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;jb_above$123,M.D.John,3days,#33,char,$123,a>b,如何命名标识符?,?,CompanyLogo,真题分析(2006年9月)下列定义变量的语句中错误的是_____A、int_int;B、doubleint_;C、charFor;D、floatUS$;,Top5:标识符的命名规则,D,CompanyLogo,Top5:标识符的命名规则,真题分析(2005年9月)以下叙述中错误的是_____A、用户所定义的标识符允许使用关键字B、用户所定义的标识符应尽量做到“见名知意”C、用户所定义的标识符必须以字母或下划线开头D、用户定义的标识符中大、小写字母代表不同标识,A,CompanyLogo,Top5:标识符的命名规则,真题分析(2006年4月)下列不合法的用户标识符是____A、j2_KEYB、DoubleC、4dD、_8_,C,CompanyLogo,Top5:标识符的命名规则,真题分析(2007年4月)按照C语言规定的用户标识符命名规则,不能出现在标识符中的是:_____A、大写字母B、连接符C、数字字符D、下划线,B,CompanyLogo,Top5:标识符的命名规则,真题分析(2007年9月)可在C程序中用做用户标识符的一组标识符是_____,A,CompanyLogo,Top5:标识符的命名规则,真题分析(2008年4月)以下选项中不合法的标识符是_____A、printB、FORC、num=10;total=num*PRICE;printf("total=%d",total);},运行结果:total=300,Top6:C语言基本数据类型及其定义规则,CompanyLogo,整型常量(整常数)三种形式:十进制整数:由数字0~9和正负号表示.如123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如0123,011十六进制整数:由0 x开头,后跟0~9,a~f,A~F表示.如0 x123,0Xff,问题:0123=()100 x123=()100Xff=()10,Top6:C语言基本数据类型及其定义规则,CompanyLogo,十进制:4956=410+910+510+610,二进制:1011=12+02+12+12,十六进制:81AE=816+116+1016+1416,八进制:4275=48+28+78+58,Top6:C语言基本数据类型及其定义规则,CompanyLogo,整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L,认为它是longint型常量,整型常量(整常数)三种形式:十进制整数:由数字0~9和正负号表示.如123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如0123,011十六进制整数:由0 x开头,后跟0~9,a~f,A~F表示.如0 x123,0Xff,例30000为int型65536为longint型,例12与12L,Top6:C语言基本数据类型及其定义规则,32767-3276800120160 x100X23FD,0568o45ox12t-0X12,,只能是正数,,CompanyLogo,整数在内存中的存储形式,FF01,FF02,FF03,FF04,,,+5,-1,FF05,FF06,,65535,Top6:C语言基本数据类型及其定义规则,CompanyLogo,实型常量(实数或浮点数)表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5,实型常量的类型默认double型在实型常量后加字母f或F,认为它是float型,Top6:C语言基本数据类型及其定义规则,,X,!注意:,CompanyLogo,55,字符常量定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------(),例:‘A’-------’\101’-------’\x41’--------65,如‘A’——65,‘a’——97,‘0’——48,‘\n’——10,如‘a’‘A’‘?’‘\n’‘\101’,转义字符:反斜线后面跟一个字符或一个代码值表示,例转义字符举例main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\C\");},运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’,Top6:C语言基本数据类型及其定义规则,CompanyLogo,字符常量与字符串常量不同,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个‘\0’作为字符串结束标志,例:charch;ch=“A”;,Top6:C语言基本数据类型及其定义规则,CompanyLogo,变量概念:其值可以改变的量变量的定义,变量初始化:定义时赋初值,例:inta,b,c;floatdata;,例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;intx=y=z=1;,变量的使用:先定义,后使用,例1intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain,例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain,变量定义位置:一般放在函数开头,Top6:C语言基本数据类型及其定义规则,CompanyLogo,整型变量占字节数随机器不同而不同,一般占一个机器字short≤int≤long可用sizeof(类型标识符)测量,实型变量float:占4字节,提供7位有效数字double:占8字节,提供15~16位有效数字,字符型变量字符变量存放字符ASCII码char与int数据间可进行算术运算,例floata;a=111111.111;/*a=111111.1*/doubleb;b=111111.111;/*b=111111.111*/,例a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/,没有字符串变量,用字符数组存放,Top6:C语言基本数据类型及其定义规则,CompanyLogo,Top6:C语言基本数据类型及其定义规则,真题分析(2007年4月)有以下程序,其中%u表示按无符号整数输出,程序运行后的输出结果是:_____#include“stdio.h”main(){unsignedintx=oxFFFF;/*x的初值为16进制数*/printf(“%u\n”,x);},-1,A.,65535,B.,32767,C.,D.,0 xFFFF,B,CompanyLogo,Top6:C语言基本数据类型及其定义规则,真题分析(2006年4月)下列不合法的数值常量是_____A、011B、1e1C、8.0E0.5D、0 xabcd,C,CompanyLogo,Top6:C语言基本数据类型及其定义规则,真题分析(2005年9月)以下程序运行后的输出结果是_____,main(){intx=0210;printf("%X\n",x);},0210,0,1,0,八进制数,,,0,0,1,,0,0,0,,,,0,0,0,8,8,0,二进制数,88,mpanyLogo,Top6:C语言基本数据类型及其定义规则,真题分析(2011年3月)以下选项中不能用作C程序合法常量的是_____(选择题13题)A)1.234B)123C)123D)"\x7G",B,mpanyLogo,Top6:C语言基本数据类型及其定义规则,真题分析(2011年3月)以下选项中可用作C程序合法实数的是____(选择题14题)A).1e0B)3.0e0.2C)E9D)9.12E,A,mpanyLogo,Top6:C语言基本数据类型及其定义规则,真题分析(2011年9月)以下选项中关于C语言常量的叙述错误的是___(选择题13题)A)所谓常量,是指在程序运行过程中,其值不能被改变的量B)常量分为整型常量、实型常量、字符常量和字符串常量C)常量可分为数值型常量和非数值型常量D)经常被使用的变量可以定义成常量,D,常量是指在程序中不变的量,既然程序中已定义为变量,则不可能再定义为常量,CompanyLogo,Top6:C语言基本数据类型及其定义规则,练习题1、以下选项中,不能作为合法常量的是____A、1.234e04B、1.234e0.4C、1.234e+4D、1.234e0,B,CompanyLogo,Top6:C语言基本数据类型及其定义规则,练习题2、以下选项中,可作为C语言合法整数的是_____A、1011BB、0386C、0 xffaD、x2a2,C,CompanyLogo,隐式转换什么情况下发生运算转换-----不同类型数据混合运算时赋值转换----把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型,Top7:基本数据类型间的转换,CompanyLogo,CompanyLogo,显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变,例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3,精度损失问题,Top7:基本数据类型间的转换,CompanyLogo,真题分析(2006年9月)以下选项中值为1的表达式是_____A、1-0B、1-\0C、1-0D、\0-0,Top7:基本数据类型间的转换,1是整型,’0’、’\0’、’1’都是字符型。‘0’换成整型的ASCII码值为48,’1’为49‘\0’是转义字符,表示0或空。,B,CompanyLogo,真题分析(2006年9月)设有定义:floatx=123.4567;,则执行下列语句printf("%f\n",(int)(x*100+0.5)/100.0);后的输出结果是_________,Top7:基本数据类型间的转换,(int)(x*100+0.5)/100.0,(x*100+0.5),,(123.4567*100+0.5),,12345.67+0.5,,12346.17,int,,12346,100.0,,123.46,123.460000,CompanyLogo,真题分析(2005年9月)设有定义:intk=1,m=2;floatf=7;则下列选项中错误的表达式是_______A、k=k>=kB、-k++C、k%int(f)D、k>=f>=m,Top7:基本数据类型间的转换,C,%(求余运算符)的两边都必须是整型。f为float型,需要强制转换为int型。正确的写法为(int)f而不是int(f),CompanyLogo,真题分析(2005年9月)已经字母A的ASCII码为65。以下程序运行后的输出结果为_______main(){chara,b;a=A+5-3;b=a+6-2;printf("%d%c\n",a,b);},Top7:基本数据类型间的转换,d,c,a=A+5-3;,,a=‘C’,,67,b=a+‘6-‘2;,,a=67+4,,G,67G,Top7:基本数据类型间的转换,真题分析(2011年9月)若有定义语句:inta=10;doubleb=3.14;,则表达式‘A’+a+b值的类型是_____。(选择题14题)A).charB)intC)doubleD)float,CompanyLogo,C,CompanyLogo,练习题1、以下程序运行后的输出结果是__________main(){inta,b,c;a=25;b=025;c=0 x25;printf(“%d%d%d\n”,a,b,c);},Top7:基本数据类型间的转换,025,,2*81+5*80,,21,0 x25,,2*161+5*160,,37,252137,CompanyLogo,Top8:常见算术运算符的使用,CompanyLogo,学习运算符应注意:运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型,Top8:常见算术运算符的使用,CompanyLogo,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-5%2=-11%10=15%1=05.5%2(),CompanyLogo,4、关于两边运算数类型不一致系统将自动进行转换,使两边一致后再进行运算。,5、所有实型数的运算均以双精度方式进行,若是单精度,则在尾数部分添0,转换为双精度。,Top8:常见算术运算符的使用,6、算术表达式的概念,(1)表达式的概念用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合C语言语法规则的式子,称为表达式。,(2)算术表达式的概念表达式中的运算符都是算术运算符。例如:3+6*9、(x+y)/2-1等,都是算术表达式。,CompanyLogo,Top8:常见算术运算符的使用,7、强制类型转换表达式,转换格式为:(要转换成的数据类型)(被转换的表达式),(double)a等价于(double)(a))(int)(x+y)(float)5/2等价于(float)(5)/2(float)(5/2),注意:强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,(double)a只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。,Top8:常见算术运算符的使用,真题分析(2011年9月)若有定义语句:intx=12,y=8,z;在其后执行语句z=0.9+x/y;则z的值为___________。(选择题15题)A)1.9B)1C)2D)2.4,CompanyLogo,B,“/”为整除运算符,两边的运算对象都为整数时,运算结果为整型。Z为整型,所以最终结果为整数。,CompanyLogo,Top8:常见算术运算符的使用,真题分析(2007年4月)以下选项中,当x为大于1的奇数时,数为0的表达式为______A、x%2==1B、x/2C、x%2!=0D、x%2==0,D,%(求余运算符)的两边都必须是整型。大于1的奇数除以2,余数必为1。表达式成立时,整个表达式逻辑值为1表达式不成立时,整个表达式逻辑值为0。,Top8:常见算术运算符的使用,真题分析(2011年3月)以下程序运行后的输出结果是_____(填空题第6题)。#includemain(){inta;a=(int)((double)(3/2)+0.5+(int)1.99*2);printf("%d\n",a);},CompanyLogo,3,CompanyLogo,Top8:常见算术运算符的使用,练习题1、设变量x为float型且已经赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是______A、x=x*100+0.5/100.0B、x=(x*100+0.5)/100.0C、x=(int)(x*100+0.5)/100.0D、x=(x/100+0.5)*100.0,C,CompanyLogo,Top8:常见算术运算符的使用,练习题2、若有语句inti=-19,j=i%4;printf(“%d\n”,j);则输出结果是_______,-3,CompanyLogo,1、算术运算符的优先级()+-*/%+-,单目,双目,,高,低,Top9:算术运算符的优先级顺序,2、算术运算符和圆括号的结合性所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。,自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。,例如,算术运算符的结合方向是“自左至右”,即:在执行“a–b+c”时,变量b先与减号结合,执行“a-b”;然后再执行加c的运算。,CompanyLogo,Top9:算术运算符的优先级顺序,真题分析(2006年4月)表达式3.6-5/2+1.2+5%2的值是___A、4.3B、4.8C、3.3D、3.8,3.6-5/2+1.2+5%2,,2,,1.6,,2.8,,1,,3.8,D,CompanyLogo,Top9:算术运算符的优先级顺序,真题分析(2005年9月)下列不能正确计算代数式sin2(1/2)/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,CompanyLogo,Top9:算术运算符的优先级顺序,练习题1、设有定义:floata=2,b=4,h=3;以下C语言表达式与代数式计算结果不相符的是______A、(a+b)*h/2B、(1/2)*(a+b)*hC、(a+b)*h*1/2D、h/2*(a+b),B,CompanyLogo,,赋值运算,赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。赋值运算符的一般形式为:,如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量.,例a=3;d=func();c=d+2;b=a;,Top10:赋值表达式的求值规则,变量=赋值表达式,CompanyLogo,几点说明:,(1)赋值运算符的优先级只高于逗号运算符,比其它的运算符优先级都低,且具有自右向左的结合性。如:a=2+7/3,(2)赋值运算符不是数学中的“等于号”,而是进行“赋予”操作。,(3)表达式x=y读作“将y的值赋给变量x”而不读作”x等于y“,(4)赋值运算符左边只能是变量,不能是常量或是表达式。如a+b=c就是错误的。,(5)赋值运算符右边也可以是赋值表达式。如a=b=7+1,而a=7+1=b则是错误的。,(6)”=“视作运算符,a=19是一个表达式,C语言规定最左边变量中所得到的新值就是赋值表达式的值。,Top10:赋值表达式的求值规则,CompanyLogo,,复合赋值表达式,复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。,复合赋值运算的一般格式为:变量双目运算符=表达式└──┬──┘复合赋值运算符等价于:变量=变量双目运算符(表达式)。当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能出错。,例:x+=3x=x+3y*=x+6y=y*(x+6),Top10:赋值表达式的求值规则,CompanyLogo,说明:结合方向:自右向左左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,例3=x-2*y;a+b=3;,例floatf;inti;i=10;f=i;则f=10.0,例inti;i=2.56;//结果i=2;,例:a=b=c=5a=(b=5)a=5+(c=6)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,CompanyLogo,思考2:a=12;a+=a-=a*a,思考3:inta=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,(1)a+a=9+9,表达式的值为18,但是a的值不变,仍为9(2)a=a-18,表达式的值为-9,a的值变为-9。(3)a=a+a,表达式的值为-18,a的值为-18,Top10:赋值表达式的求值规则,CompanyLogo,,赋值运算中的类型转换,在C语言的赋值表达式中,赋值号右边的值先转换成与左边的变量相同的类型,然后进行赋值。,注意:(1)当赋值号左边的变量为短整型,右边的值为长整型时,短整型变量只能接受长整型数据低位上的两个字节的数据,高位上的数据将丢失。也就是说,右边的值不能超过短整型的数值范围。,Top10:赋值表达式的求值规则,CompanyLogo,例:shorta;unsignedlongb;b=98304;a=b;printf(“%d\n”,a);,98304D=11000000000000000B,高16位,低16位,结果a=1000000000000000B=-32768,Top10:赋值表达式的求值规则,CompanyLogo,(2)当赋值号左边的变量为无符号整型,右边的值为有符号整型时,则把内存中的内容原样复制。右边数据的范围不应超出左边变量可以接受的数据范围。同时要注意,这时负数将转换为正数。,例:unsigneda;a=-1;printf(“%d\n”,a);,-1的补码,结果a=1111111111111111=65535,Top10:赋值表达式的求值规则,CompanyLogo,(3)当赋值号左边的变量为有符号整型,右边的值为无符号整型时,复制的机制同上,这时,若符号位为1,将按负数处理。,例:inta;unsignedb;b=1000000000000000;a=b;printf(“%d\n”,a);,结果a=-(111111111111111+1)=-32786,Top10:赋值表达式的求值规则,CompanyLogo,Top10:赋值表达式的求值规则,真题分析(2006年4月)以下叙述中错误的是_____A、C程序中的#include和#define均不是C语句B、除逗号运算符外,赋值运算符的优先级最低C、C程序中,j++;是赋值语句D、C程序中,+、-、*、/、%是算术运算符,可用于整型和实型数的运算。,D,CompanyLogo,Top10:赋值表达式的求值规则,真题分析(2005年9月)下列能正确定义且赋初值的语句是_____A、intnl=n2=10;B、charc=32;C、floatf=f+1.1;D、doublex=12.3E2.5;,C语言规定,变量必须先定义,后使用。A、C错误。A如果写成:intn1,n2;对待n1=n2=10;则正确C如果写成:floatf;f=f+1.1;则正确选项D中,E后面必须为整数,不能是实数。,B,CompanyLogo,Top10:赋值表达式的求值规则,真题分析(2006年9月)若变量x、y已正确定义并赋值,下列符合C语言语法的表达式是_____A、++x,y=x--B、x+1=yC、x=x+10=x+yD、double(x)/10,A,赋值表达式的左边必须是变量,不能是常量或表达式。所以B,C错误。D选项中,强制类型转换应该写成:(double)x/10,CompanyLogo,Top10:赋值表达式的求值规则,真题分析(2011年3月)若有定义语句:inta=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,赋值运算符左边只能是变量,不能是常量或是表达式,CompanyLogo,Top10:赋值表达式的求值规则,练习题1、以下选项中,非法的表达式是______A、0<=xj=0;,自增、自减运算符只能用于变量,不能用于常量和表达式,C,CompanyLogo,格式:putchar(c)参数:c为字符常量、变量或表达式功能:把字符c输出到显示器上返值:正常,为显示的代码值;出错,为EOF(-1),字符输出函数,Top14:数据的输出,CompanyLogo,#includemain(){intc;chara;c=65;a=B;putchar(c);putchar(\n);putchar(a);},运行结果:AB,例,Top14:数据的输出,CompanyLogo,格式:printf(“格式控制串”,输出表)功能:按指定格式向显示器输出数据返值:正常,返回输出字节数;出错,返回EOF(-1),格式输出函数,输出表:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息格式说明:%[修饰符]格式字符,用于指定输出格式普通字符或转义序列:原样输出格式字符,Top14:数据的输出,CompanyLogo,Top14:数据的输出,inta=567;printf(“%d”,a);,inta=255;printf(“%x”,a);,inta=65;printf(“%o”,a);,inta=567;printf(“%u”,a);,chara=65;printf(“%c”,a);,printf(“%s”,“ABC”);,floata=567.789;printf(“%e”,a);,floata=567.789;printf(“%f”,a);,floata=567.789;printf(“%g”,a);,printf(“%%”);,567,ff,101,567,A,ABC,5.677890e+02,567.789000,567.789,%,例main(){unsignedshortu=65535;printf(”u=%hd\n",u);}输出结果:u=-1,例inta=3,b=4;printf(“%d%d\n”,a,b);printf(“a=%d,b=%d\n”,a,b);,例inta=3,b=4;printf(“%d%d\n”,a,b);printf(“a=%d,b=%d\n”,a,b);输出结果:34a=3,b=4,CompanyLogo,附加格式说明符(修饰符),Top14:数据的输出,CompanyLogo,例inta=1234;floatf=123.456;charch=‘a’;printf(“%8d,%2d\n”,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);printf(“%3c\n”,ch);,运行1234,1234结果:123.456000,123.456000,123.5,123.46,1.23e+02a,例staticchara[]=“Hello,world!”printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);,运行结果:Hello,world!Hello,world!HelloHelloHel,例m.n,Top14:数据的输出,CompanyLogo,例inta=1234;floatf=123.456;staticcharc[]=“Hello,world!”;printf(“%8d,%-8d\n”,a,a);printf(“%10.2f,%-10.1f\n”,f,f);printf(“%10.5s,%-10.3s\n”,c,c);,运行结果:1234,1234123.46,123.5Hello,Hel,例-,Top14:数据的输出,CompanyLogo,例inta=1234;floatf=123.456;printf(“%08d\n”,a);printf(“%010.2f\n”,f);printf(“%0+8d\n”,a);printf(“0+10.2f\n”,f);,例0、+,例inta=123;printf(“%o,%#o,%X,%#X\n”,a,a,a,a);,例#,例longa=65536;printf(“%d,%8ld\n”,a,a);,例l,//00001234,//0000123.46,//000+1234,//000+123.56,//173,0173,7B,0X7B,//0,65536,Top14:数据的输出,CompanyLogo,Top14:数据的输出,考点格式字符、长度修饰符和附加格式字符以及它们各自的功能。在格式控制字符串中,格式说明与输出项从左到右在类型上必须一一对应匹配。在格式控制串中,格式说明与输出项的个数应相同,若格式说明明少于输出项,则多余的输出项不输出,相反,对于多余的格式将输出不定值。在格式控制串中,可以包含任意的合法字符(包括转义字符)。,CompanyLogo,Top14:数据的输出,真题分析(2006年4月)若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的的输出语句______,printf(“a=%d,b=%d”,a,b);,CompanyLogo,Top14:数据的输出,真题分析(2004年9月)有以下程序,程序运行后的输出结果是_____main(){intm=0256,n=256;printf(“%o%o\n”,m,n);}A、02560400B、0256256C、256400D、400400,C,CompanyLogo,Top14:数据的输出,真题分析(2004年4月)有以下程序,执行后的结果是_____main(){intx=102,y=012;printf(“%2d,%2d\n”,x,y);}A、10,01B、02,12C、102,10D、02,10,C,格式控制符%2d中的2表示输出数据的最小宽度为2,如果指定的宽度不够,并不影响数据的完整输出。,Top14:数据的输出,真题分析(2011年9月)若程序中已给整型变量a和b赋值10和20,请写出按以下格式输出a、b值的语句_____(填空题第6题)。****a=10,b=20****,CompanyLogo,printf(“****a=%=d,b=%d****\n”);,Top14:数据的输出,真题分析(2011年9月)以下程序运行后输出结果是_____(填空题第7题)。#includemain(){inta=37;a%=9;printf("%d\n",a);},CompanyLogo,1,Top14:数据的输出,真题分析(2011年9月)以下不能输出字符A的语句是_____。(注:字符A的ASCII码值为65,字符a的ASCII码值为97)(选择题21题)printf("%c\n",a-32);B)printf("%d\n",A);C)printf("%c\n",65);D)printf("%c\n",B-1);,CompanyLogo,B,CompanyLogo,Top14:数据的输出,练习题1、有以下程序,程序运行后的输出结果是_____main(){inta=666,b=888;printf(“%d\n”,a,b);}A、错误信息B、666C、888D、666,888,B,CompanyLogo,格式:getchar()功能:从键盘读一字符返值:正常,返回读取的代码值;出错,返回EOF(-1),字符输入函数,例,#includemain(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x\n",c,c);},运行结果:Enteracharacter:AA--->hex41,Top15数据输入,CompanyLogo,格式输入函数,格式:scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束返值:正常,返回输入数据个数,地址表:变量的地址,常用取地址运算符charch;scanf(“%d”,执行:123输出:x=123,ch=10,例intx;charch;scanf(“%d”,执行:123输出:x=123,ch=10,解决方法:(1)用getchar()清除(2)用函数fflush(stdin)清除全部剩余内容(3)用格式串中空格或“%*c”来“吃掉”,例intx;charch;scanf(“%d”,,,Top15数据输入,CompanyLogo,Top15数据输入,考点熟知各种格式字符的功能scanf函数中的输入项必须是“地址量”输入数据时,各个数据间可以用空格符、回车符或Tab键作为分隔符除了3中所述分隔符外,还可以自己指定其它字符作为分隔符,但在输入时应输入与这些字符相同的字符。输入数据时,遇到以下情况时该数据被认为表示结束:遇到空格、Tab键或回车符按指定的宽度结束,如”%4d“,只取4列遇到非法输入。,CompanyLogo,Top15数据输入,真题分析(2005年4月)下列程序运行时若从键盘输入:102030。输出结果是__________,#includemain(){inti=0,j=0,k=0;scanf("%d%*d%d",},10300,Top15数据输入,真题分析(2011年9月)若有定义:inta,b;,通过语句scanf(“%d;%d”,5D)35,CompanyLogo,C,Top15数据输入,真题分析(2011年3月)有以下程序(说明:字符0的ASCII码值为48)若程序运行时从键盘输入48,则输出结果_____(填空题第8题)。,CompanyLogo,#includemain(){charc1,c2;scanf("%d",},0,9,CompanyLogo,Top15数据输入,练习题1、有定义语句:intx,y;若要通过scanf(“%d,%d”,语句使变量x得到数值11,变量y得到数值12,下面的四组输入形式中,错误的是_____A、1112B、11,12C、11,12D、11,12,A,CompanyLogo,Top16复合语句和空语句,C语句,,控制语句,函数调用语句,表达式语句,空语句,9种,复合语句,例:printf(“cworld!”);,例:a=23;b=a+6;,只有一个分号;,用{}把一些语句括起来构成,CompanyLogo,,复合语句,用{…}括起来的一组语句一般形式:{[数据说明部分;]执行语句部分;}说明:“}”后不加分号语法上和单一语句相同复合语句可嵌套,main(){inta,b=4;a=3;printf(“%d”,a);for(i=1;i<5;i++){b=b+i;printf(“%d\n”,b);}},Top16复合语句和空语句,CompanyLogo,,空语句,main(){;},Top16复合语句和空语句,CompanyLogo,Top16复合语句和空语句,真题分析(2005年9月)以下叙述中错误的是_____A、C语句必须以分号结束B、复合语句在语法上被看作一条语句C、空语句出现在任何位置都不会影响程序运行D、赋值表达式末尾加上分号就构成赋值语句,C,C程序中所有语句都必须以“;”作为结束,如果只有一个分号,也当成一条语句,称为“空语句”,执行时不产生任何动作。程序设计中有时候需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,影响程序运行。,CompanyLogo,第4章选择结构,Top17:关系运算,Top19:条件表达式及其构成的选择结构,Top20:几类运算符的优先级,Top21:If语句,Top22:含else的If语句,Top23:嵌套的If语句,Top24:switch语句及其与break语句构成的选择结构,Top18:逻辑运算,Top25:语句标号和goto语句,CompanyLogo,C语言的逻辑值,逻辑值,,真,假,非零,零,关系运算,逻辑运算,,CompanyLogo,所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。,Top17关系运算,在C语言中,“等于”关系运算符是双等号“==”而不是单等号“=”(赋值运算符)。,注意:,=(大于或等于),,==(等于),,!=(不等于),1.关系运算符(6种):,CompanyLogo,2.优先级,(2)与其它种类运算符的优先级关系,关系运算符的优先级低于算术运算符但高于赋值运算符。,Top17关系运算,(1)在关系运算符中,且前4个高于后2个。,前4个优先级相同(、>=),后2个也相同(==、!=),CompanyLogo,Top17关系运算,3.关系表达式,所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。,a>b,a+b>c-d,(a=3)=b,(a>b)==(b>c),CompanyLogo,例,假设n

展开阅读全文

你可能感兴趣的:(汇编语言%3c%3e符号作用)