全国计算机等级考试二级C语言笔试高频考点.ppt
计算机等级考试二级C语言自学之高频考点,余敦辉,Company Logo,教材、参考书与课时安排,参考书1、全国计算机等级考试二级教程C语言程序设计 教育部考试中心 高等教育出版社2、二级C语言高频考题导航 南开大学出版社3、C语言真题分析与实战训练 清华大学出版社课时安排授课:28学时往年考题讲解:4学时,Company Logo,考试大纲,基本要求1.熟悉 Visual C+6.0 集成开发环境。2.掌握结构化程序设计的方法,具有良好的程序设计风格。3.掌握程序设计中简单的数据结构和算法并能阅读简单的程序。4.在 Visual C+6.0 集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力,Company Logo,目录,1.程序设计基本概念,2.C程序设计的初步知识,3.顺序结构,4.选择结构,5.循环结构,6.字符型数据,7.函数,8.地址和指针,9.数组,10.字符串,11.对函数的进一步讨论,12.用户标识符的作用域和存储类,13.编译预处理和动态存储分配,14.结构体、共用体和用户定义类型,15.位运算,16.文件,Company Logo,第1章程序设计基本概念,Top1:各种“程序”的概念,Top3:结构化程序设计,Top2:算法的特性,C程序的上机步骤,Company Logo,什么是程序?,?,Top1:各种“程序”的概念,人们把需要用计算机完成的工作写成一条条指令,并把这些指令存储在内存中,当人们给出执行命令后,计算机就按指令顺序自动进行操作。这些可以连续执行的一条条指令的集合称为“程序”。,Company Logo,机器语言,汇编语言,高级语言,面向过程,面向对象,CPU指令系统,由0、1序列构成的指令码组成如:10000000 加 10010000 减,用助记符号描述的指令系统如 ADD A,B,程序设计是数据被加工的过程,客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系,程序设计关键是定义类,并由类派生对象,程序设计语言的发展,Top1:各种“程序”的概念,Company Logo,程序的“转换”,机器语言,汇编语言,高级语言,C语言,编译,汇编,源程序,目标程序.OBJ,Top1:各种“程序”的概念,可执行程序.exe,链接,二进制语言,Company Logo,Top1:各种“程序”的概念,真题分析(2007年4月)下列叙述中错误的是_A、计算机不能直接执行用C语言编写的源程序B、C程序经编译后,生成后缀为.Obj的文件是一个二进制文件C、后缀为.Obj的文件,经连接程序生成后缀为.Exe的文件是一个二进制文件D、后缀为.Obj和.Exe的二进制文件都可以直接运行,D,Company Logo,Top1:各种“程序”的概念,真题分析(2006年4月)以下叙述中错误的是_A、C语言源程序经编译后生成后缀为.OBJ的目标程序B、C程序经过编译、连接步骤之后才能形成一个真正可以执行的二进制机器指令文件C、用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中D、C语言中的每条可执行语句和非执行语句最终都将转换成二进制的机器指令,D,只有二进制语句才最终被转换成二进制机器指令,Company Logo,Top1:各种“程序”的概念,真题分析(2008年9月)计算机能直接执行的程序是_A、源程序B、目标程序C、汇编程序D、可执行程序,D,Company Logo,Top1:各种“程序”的概念,真题分析(2007年9月)C语言源程序的后缀是_A、.exeB、.cC、.objD、.cp,B,Company Logo,Top1:各种“程序”的概念,真题分析(2006年9月)以下说明中正确的是_、C语言比其它语言高级、C语言可以不用编译就能被计算机执行、C语言以接近英语和数学言语作为语言的表达式、C语言出现最晚,具有其它语言的一切优点,C,Company Logo,Top1:各种“程序”的概念,真题分析(2011年3月)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是_(选择题第11题)A)C语言程序仅可以编译执行B)C语言程序仅可以解释执行C)C语言程序既可以编译执行又可以解释执行D)以上说法都不对,C,Company Logo,Top1:各种“程序”的概念,真题分析(2011年3月)以下叙述中错误的是_(选择题第12题)A)C语言的可执行程序是由一系列机器指令构成的B)用C语言编写的源程序不能直接在计算机上运行C)通过编译得到的二进制目标程序需要连接才可以运行D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件,D,Company Logo,Top1:各种“程序”的概念,练习题1、以下叙述中正确的是_A、C语言的源程序不必通过编译就可以直接运行B、C语言中的每条可执行语句最终都将被转换成二进制的机器指令C、C程序经编译形成的二进制代码可直接执行D、C语言中的函数不可以单独进行编译,B,Company Logo,Top2:算法的特性,什么是算法?,算法是指为解决某个特定问题而采取的确定且有限的步骤。,?,Company Logo,算法应具有以下五个特点:,Top2:算法的特性,Company Logo,如何评价算法?,?,对算法的要求有:必须是正确的,必须能高效率执行,即占用内存空间少,所需运行时间短。于是,对算法的评价可以从两个方面进行:,Top2:算法的特性,Company Logo,Top2:算法的特性,真题分析(2007年4月)算法中,对需要执行的每一步骤操作,必须给出清楚、严格的规定,这属于算法的是_A、正当性B、可行性C、确定性D、有穷性,C,Company Logo,Top2:算法的特性,真题分析(2006年4月)以下叙述中错误的是_A、算法正确的程序最终一定会结束B、算法正确的程序可以有零个输出C、算法正确的程序可以有零个输入D、算法正确的程序对于相同的输入一定有相同的结果,B,算法必须有一个或多个输出,Company Logo,Top2:算法的特性,练习题1、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是_A、有零个或多个输入B、有零个或多个输出C、有穷性D、可行性,B,Company Logo,Top3:结构化程序设计和模块化结构,执行时按顺序逐条执行,没有分支,没有转移。可由赋值语句、输入/输出语句等构成。,顺序结构,根据不同的条件执行不同分支中的语句。可由if语句、switch语句等构成。,选择结构,根据各自的条件使一组语句重复执行多次或一次也不执行。可由for语句、while语句等构成。,循环结构,Company Logo,什么是模块化结构?,?,将复杂任务分解成若干个子任务,每个子任务又可分解成多个小子任务,每个小子任务只需完成一个简单的功能。在程序设计时用一个小模块实现这些功能。称这样的程序设计方法为“模块化”方法,由一个个功能模块构成的程序结构为模块化结构。,Top3:结构化程序设计和模块化结构,Company Logo,Top3:结构化程序设计和模块化结构,真题分析(2007年4月)以下叙述中错误的是_A、C语言是一种结构化的程序设计语言B、结构化程序由顺序、分支、循环三种基本结构组成C、使用三种基本结构构成的程序只能解决简单问题D、结构化程序设计提倡模块化的设计方法,C,Company Logo,Top3:结构化程序设计和模块化结构,真题分析(2011年9月)以下选项中关于程序模块化的叙述错误的是_。(选择题12题)A)把程序分成若干相对独立的模块,便于编码和调试B)把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C)可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序D)可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序,C,Company Logo,运行结果,可执行文件(.exe),源程序文件(.c),目标文件(.obj),图 C程序上机调试过程,此两种代码不能执行,C程序的上机步骤,Company Logo,第2章C程序设计的初步知识,Top4:C程序的结构和格式,Top5:标识符的命名规则,Top6:C语言基本数据类型及其定义规则,Top7:基本类型数据的相互转换,Top8:常见算术运算符的使用,Top9:算术运算符的优先级顺序,Top12:自加自减运算符,Top10:赋值表达式的求值规则,Top11:逗号表达式的求值规则,Company Logo,例2.1 第一个程序 Hello,World!,/*example1.1 The first C Program*/#include main()printf(“Hello,World!”);,输出:Hello,World!,Top4:C语言程序的构成和格式,Company Logo,例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,Company Logo,格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式,main().,main()int i,j,sum;sum=0;for(i=1;i10;i+)for(j=1;j10;j+)sum+=i*j;printf(“%dn”,sum);,优秀程序员的素质之一:使用TAB缩进对齐有足够的注释有合适的空行,Top4:C语言程序的构成和格式,Company Logo,结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/*/为注释,不能嵌套不产生编译代码,例:/*This is the main/*of example1.1*/*/,编译预处理命令,Top4:C语言程序的构成和格式,例:#include“stdio.h”,命令行,不是C语句,Company Logo,真题分析(2011年9月)以上叙述中错误的是_(选择题11题)。A)C语言编写的函数源程序,其文件名后缀可以是CB)C语言编写的函数都可以作为一个独立的源程序文件C)C语言编写的每个函数都可以进行独立的编译并执行D)一个C语言程序只能有一个主函数,Top4:C语言程序的构成和格式,C,Company Logo,真题分析(2007年4月)对于一个正常运行的C程序,以下叙述中正确的是_A、程序的执行总是从main函数开始,在main函数结束B、程序的执行总是从程序的第一个函数开始,在main函数中结束C、程序的执行总是从main函数开始,在程序的最后一个函数中结束。D、程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束。,Top4:C语言程序的构成和格式,A,Company Logo,Top4:C语言程序的构成和格式,真题分析(2005年9月)以下关于函数的叙述中正确的是_A、每个函数都可以被其他函数调用(包括main 函数)B、每个函数都可以被单独编译C、每个函数都可以单独运行D、在一个函数内部可以定义另一个函数,B,Company Logo,Top4:C语言程序的构成和格式,真题分析(2007年9月)以下叙述中正确的是_A、C语言程序将从源程序中第一个函数开始执行B、可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C、C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束D、main可作为用户标识符,用以命名任意一个函数作为主函数,C,Company Logo,Top4:C语言程序的构成和格式,真题分析(2008年9月)以下叙述中正确的是_A、C程序的基本组成单位是语句 B、C程序中每一行只能写一条语句 C、简单C语句必须以分号结束 D、C语句必须在一行内写完,C,Company Logo,Top4:C语言程序的构成和格式,练习题1、在一个程序中,_A、main函数必须出现在所有函数之前B、main函数可以在任何地方出现C、main函数必须出现在所有函数之后D、main函数必须出现在固定位置,B,Company Logo,Top5:标识符的命名规则,什么是标识符?,?,标识符是用来标识变量、符号常量、函数、数组、类型、标号以及一些具有专门含义的有效字符序列。通俗地讲,标识符就是一个名字。,Company Logo,标识分为三类:,预定义标识符,用户标识符,关键字,(1)数据类型关键字12个(2)控制语句关键字12个(3)存储类型关键字4个(4)其它关键字4个,一般指C语言提供的库函数名和编译预处理命令。,在编程时,需要用户给一些变量、函数、数组等命名,这类由用户根据需要自定义的标识符称为用户标识符,Top5:标识符的命名规则,Company Logo,组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字长度:最长32个字符命名原则:见名知意不宜混淆 如l与I,o与0,例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$123,3days,#33,char,$123,ab,如何命名标识符?,?,Company Logo,真题分析(2006年9月)下列定义变量的语句中错误的是_A、int _int;B、double int_;C、char For;D、float US$;,Top5:标识符的命名规则,D,Company Logo,Top5:标识符的命名规则,真题分析(2005年9月)以下叙述中错误的是_A、用户所定义的标识符允许使用关键字B、用户所定义的标识符应尽量做到“见名知意”C、用户所定义的标识符必须以字母或下划线开头D、用户定义的标识符中大、小写字母代表不同标识,A,Company Logo,Top5:标识符的命名规则,真题分析(2006年4月)下列不合法的用户标识符是_A、j2_KEYB、DoubleC、4dD、_8_,C,Company Logo,Top5:标识符的命名规则,真题分析(2007年4月)按照C语言规定的用户标识符命名规则,不能出现在标识符中的是:_A、大写字母B、连接符C、数字字符D、下划线,B,Company Logo,Top5:标识符的命名规则,真题分析(2007年9月)可在C程序中用做用户标识符的一组标识符是_,A,Company Logo,Top5:标识符的命名规则,真题分析(2008年4月)以下选项中不合法的标识符是 _A、printB、FORC、&aD、_00,C,Top5:标识符的命名规则,真题分析(2009年4月)以下选项中合法的标识符是_A)1_1B)1-1C)_11D)1_ _,Company Logo,C,Company Logo,一般用大写字母是宏定义预处理命令,不是C语句直接常量:整型常量 实型常量 字符常量 字符串常量,如#define PRICE 30,常量定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量定义格式:#define 符号常量 常量,例 符号常量举例#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);,运行结果:total=300,Top6:C语言基本数据类型及其定义规则,Company Logo,整型常量(整常数)三种形式:十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0开头,后跟数字07表示.如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xff,问题:0123=()100 x123=()100Xff=()10,Top6:C语言基本数据类型及其定义规则,Company Logo,十进制:4956=410+910+510+610,二进制:1011=12+02+12+12,十六进制:81AE=816+116+1016+1416,八进制:4275=48+28+78+58,Top6:C语言基本数据类型及其定义规则,Company Logo,整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L,认为它是long int 型常量,整型常量(整常数)三种形式:十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0开头,后跟数字07表示.如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xff,例 30000 为int型 65536 为long int 型,例 12 与 12L,Top6:C语言基本数据类型及其定义规则,32767327680012 016 0 x10 0X23FD,0568 o45 ox12t-0X12,只能是正数,Company Logo,整数在内存中的存储形式,FF01,FF02,FF03,FF04,5,1,FF05,FF06,65535,Top6:C语言基本数据类型及其定义规则,Company Logo,实型常量(实数或浮点数)表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,实型常量的类型默认double型在实型常量后加字母f或F,认为它是float 型,Top6:C语言基本数据类型及其定义规则,X,!注意:,Company Logo,55,字符常量定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101-A 012-n 376-x61-a 60-0 483-(),例:A-101-x41-65,如 A65,a97,048,n10,如 a A?n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例 main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);,运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C,Top6:C语言基本数据类型及其定义规则,Company Logo,字符常量与字符串常量不同,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志,例:char ch;ch=“A”;,Top6:C语言基本数据类型及其定义规则,Company Logo,变量概念:其值可以改变的量变量的定义,变量初始化:定义时赋初值,例:int a,b,c;float data;,例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;,变量的使用:先定义,后使用,例1 int student;stadent=19;/Undefined symbol statent in function main,例2 float a,b,c;c=a%b;/Illegal use of floating point in function main,变量定义位置:一般放在函数开头,Top6:C语言基本数据类型及其定义规则,Company Logo,整型变量占字节数随机器不同而不同,一般占一个机器字shortintlong可用sizeof(类型标识符)测量,实型变量float:占4字节,提供7位有效数字double:占8字节,提供1516位有效数字,字符型变量字符变量存放字符ASCII码char与int数据间可进行算术运算,例 float a;a=111111.111;/*a=111111.1*/double b;b=111111.111;/*b=111111.111*/,例 a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G/*s=33+71;*/,没有字符串变量,用字符数组存放,Top6:C语言基本数据类型及其定义规则,Company Logo,Top6:C语言基本数据类型及其定义规则,真题分析(2007年4月)有以下程序,其中%u表示按无符号整数输出,程序运行后的输出结果是:_#include“stdio.h”main()unsigned int x=oxFFFF;/*x的初值为16进制数*/printf(“%un”,x);,1,A.,65535,B.,32767,C.,D.,0 xFFFF,B,Company Logo,Top6:C语言基本数据类型及其定义规则,真题分析(2006年4月)下列不合法的数值常量是_A、011B、1e1C、D、0 xabcd,C,Company Logo,Top6:C语言基本数据类型及其定义规则,真题分析(2005年9月)以下程序运行后的输出结果是_,main()int x=0210;printf(%Xn,x);,0210,0,1,0,八进制数,0,0,1,0,0,0,0,0,0,8,8,0,二进制数,88,mpany Logo,Top6:C语言基本数据类型及其定义规则,真题分析(2011年3月)以下选项中不能用作C程序合法常量的是_(选择题13题)A)1.234 B)123C)123 D)x7G,B,mpany Logo,Top6:C语言基本数据类型及其定义规则,真题分析(2011年3月)以下选项中可用作C程序合法实数的是_(选择题14题)A).1e0 C)E9 D)9.12E,A,mpany Logo,Top6:C语言基本数据类型及其定义规则,真题分析(2011年9月)以下选项中关于C语言常量的叙述错误的是_(选择题13题)A)所谓常量,是指在程序运行过程中,其值不能被改变的量B)常量分为整型常量、实型常量、字符常量和字符串常量C)常量可分为数值型常量和非数值型常量D)经常被使用的变量可以定义成常量,D,常量是指在程序中不变的量,既然程序中已定义为变量,则不可能再定义为常量,Company Logo,Top6:C语言基本数据类型及其定义规则,练习题1、以下选项中,不能作为合法常量的是_A、1.234e04B、C、1.234e+4D、1.234e0,B,Company Logo,Top6:C语言基本数据类型及其定义规则,练习题2、以下选项中,可作为C语言合法整数的是_A、1011BB、0386C、0 xffaD、x2a2,C,Company Logo,隐式转换什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型,Top7:基本数据类型间的转换,Company Logo,Company Logo,显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变,例 main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3,精度损失问题,Top7:基本数据类型间的转换,Company Logo,真题分析(2006年9月)以下选项中值为1的表达式是_A、1-0B、1-0C、1-0D、0-0,Top7:基本数据类型间的转换,1是整型,0、0、1都是字符型。0换成整型的ASCII码值为48,1为490是转义字符,表示0或空。,B,Company Logo,真题分析(2006年9月)设有定义:float x=123.4567;,则执行下列语句 printf(%fn,(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,Company Logo,真题分析(2005年9月)设有定义:int k=1,m=2;float f=7;则下列选项中错误的表达式是_A、k=k=kB、-k+C、k%int(f)D、k=f=m,Top7:基本数据类型间的转换,C,%(求余运算符)的两边都必须是整型。f为float型,需要强制转换为int型。正确的写法为(int)f 而不是 int(f),Company Logo,真题分析(2005年9月)已经字母A的ASCII码为65。以下程序运行后的输出结果为_main()char a,b;a=A+5-3;b=a+6-2;printf(%d%cn,a,b);,Top7:基本数据类型间的转换,d,c,a=A+5-3;,a=C,67,b=a+6-2;,a=67+4,G,67 G,Top7:基本数据类型间的转换,真题分析(2011年9月)若有定义语句:int a=10;double b=3.14;,则表达式A+a+b值的类型是_。(选择题14题)A).char B)int C)double D)float,Company Logo,C,Company Logo,练习题1、以下程序运行后的输出结果是_main()int a,b,c;a=25;b=025;c=0 x25;printf(“%d%d%dn”,a,b,c);,Top7:基本数据类型间的转换,025,2*81+5*80,21,0 x25,2*161+5*160,37,25 21 37,Company Logo,Top8:常见算术运算符的使用,Company Logo,学习运算符应注意:运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型,Top8:常见算术运算符的使用,Company Logo,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=-1 1%10=1 5%1=0 5.5%2(),Company Logo,4、关于两边运算数类型不一致系统将自动进行转换,使两边一致后再进行运算。,5、所有实型数的运算均以双精度方式进行,若是单精度,则在尾数部分添0,转换为双精度。,Top8:常见算术运算符的使用,6、算术表达式的概念,(1)表达式的概念 用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子,称为表达式。,(2)算术表达式的概念表达式中的运算符都是算术运算符。例如:3+6*9、(x+y)/2-1等,都是算术表达式。,Company Logo,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月)若有定义语句:int x=12,y=8,z;在其后执行语句z=0.9+x/y;则z的值为_。(选择题15题)A)1.9 B)1 C)2 D)2.4,Company Logo,B,“/”为整除运算符,两边的运算对象都为整数时,运算结果为整型。Z为整型,所以最终结果为整数。,Company Logo,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()int a;a=(int)(double)(3/2)+0.5+(int)1.99*2);printf(%dn,a);,Company Logo,3,Company Logo,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,Company Logo,Top8:常见算术运算符的使用,练习题2、若有语句int i=-19,j=i%4;printf(“%dn”,j);则输出结果是 _,-3,Company Logo,1、算术运算符的优先级()/%,单目,双目,高,低,Top9:算术运算符的优先级顺序,2、算术运算符和圆括号的结合性所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。,自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。,例如,算术运算符的结合方向是“自左至右”,即:在执行“a b+c”时,变量b先与减号结合,执行“a-b”;然后再执行加c的运算。,Company Logo,Top9:算术运算符的优先级顺序,真题分析(2006年4月)表达式3.6-52+1.2+5%2 的值是_A、4.3B、4.8C、3.3D、3.8,3.6-52+1.2+5%2,2,1.6,2.8,1,3.8,D,Company Logo,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,Company Logo,Top9:算术运算符的优先级顺序,练习题1、设有定义:float a=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,Company Logo,赋值运算,赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。赋值运算符的一般形式为:,如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量.,例 a=3;d=func();c=d+2;b=a;,Top10:赋值表达式的求值规则,变量=赋值表达式,Company Logo,几点说明:,(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:赋值表达式的求值规则,Company Logo,复合赋值表达式,复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。,复合赋值运算的一般格式为:变量 双目运算符=表达式 复合赋值运算符等价于:变量=变量 双目运算符(表达式)。当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能出错。,例:x+=3 x=x+3 y*=x+6 y=y*(x+6),Top10:赋值表达式的求值规则,Company Logo,说明:结合方向:自右向左左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,例 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)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,Company Logo,思考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,(1)a+a=9+9,表达式的值为18,但是a的值不变,仍为9(2)a=a-18,表达式的值为9,a的值变为9。(3)a=a+a,表达式的值为-18,a的值为18,Top10:赋值表达式的求值规则,Company Logo,赋值运算中的类型转换,在C语言的赋值表达式中,赋值号右边的值先转换成与左边的变量相同的类型,然后进行赋值。,注意:(1)当赋值号左边的变量为短整型,右边的值为长整型时,短整型变量只能接受长整型数据低位上的两个字节的数据,高位上的数据将丢失。也就是说,右边的值不能超过短整型的数值范围。,Top10:赋值表达式的求值规则,Company Logo,例:short a;unsigned long b;b=98304;a=b;printf(“%dn”,a);,高16位,低16位,结果,Top10:赋值表达式的求值规则,Company Logo,(2)当赋值号左边的变量为无符号整型,右边的值为有符号整型时,则把内存中的内容原样复制。右边数据的范围不应超出左边变量可以接受的数据范围。同时要注意,这时负数将转换为正数。,例:unsigned a;a=-1;printf(“%dn”,a);,-1的补码,结果65535,Top10:赋值表达式的求值规则,Company Logo,(3)当赋值号左边的变量为有符号整型,右边的值为无符号整型时,复制的机