全国计算机等级考试二级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各种“程序”的概念,,可执行程序 .,链接,,,二进制语言,Company Logo,Top1各种“程序”的概念,真题分析 (2007年4月)下列叙述中错误的是______ A、计算机不能直接执行用C语言编写的源程序 B、C程序经编译后,生成后缀为.Obj的文件是一个二进制文件 C、后缀为.Obj的文件,经连接程序生成后缀为.的文件是一个二进制文件 D、后缀为.Obj和.的二进制文件都可以直接运行,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、. B、.c C、.obj D、.cp,B,Company Logo,Top1各种“程序”的概念,真题分析 (2006年9月)以下说明中正确的是_____ A、C语言比其它语言高级 B、C语言可以不用编译就能被计算机执行 C、C语言以接近英语和数学言语作为语言的表达式 D、C语言出现最晚,具有其它语言的一切优点,C,Company Logo,Top1各种“程序”的概念,真题分析 (2011年3月)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是_____(选择题第11题) AC语言程序仅可以编译执行 BC语言程序仅可以解释执行 CC语言程序既可以编译执行又可以解释执行 D以上说法都不对,C,Company Logo,Top1各种“程序”的概念,真题分析 (2011年3月)以下叙述中错误的是_____(选择题第12题) AC语言的可执行程序是由一系列机器指令构成的 B用C语言编写的源程序不能直接在计算机上运行 C通过编译得到的二进制目标程序需要连接才可以运行 D在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.文件,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,,,,,运行结果,可执行文件 .,,,,,源程序文件 (.c,,,,,目标文件 .obj,,,图 C程序上机调试过程,,此两种代码 不能执行,C程序的上机步骤,Company Logo,第2章 C程序设计的初步知识,Top4C程序的结构和格式,Top5标识符的命名规则,Top6C语言基本数据类型及其定义规则,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,Top4C语言程序的构成和格式,Company Logo,例2.2,/* example1.1 calculate the sum of a and b*/ include /* This is the main program */ main { int a,b,sum; a10; b24; sumadda,b; printf”sum d\n“,sum; } /* This function calculates the sum of x and y */ int addint x,int y { int z; zxy; returnz; },运行结果 sum34,Company Logo,格式特点 习惯用小写字母,大小写敏感 不使用行号,无程序行概念 可使用空行和空格 常用锯齿形书写格式,,,main { . . . . },main { int i , j , sum; sum0; fori1; i10;i { forj1;j10;j { sumi*j ; } } printf“d\n”,sum; },优秀程序员的素质之一 使用TAB缩进 {}对齐 有足够的注释 有合适的空行,Top4C语言程序的构成和格式,Company Logo,结构特点 函数与主函数 程序由一个或多个函数组成 必须有且只能有一个主函数main 程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。 程序语句 C程序由语句组成 用“;”作为语句终止符 注释 /* */为注释,不能嵌套 不产生编译代码,例 /*This is the main /* of example1.1*/ */,编译预处理命令,Top4C语言程序的构成和格式,例 include “stdio.h”,,命令行,不是C语句,Company Logo,真题分析 (2011年9月)以上叙述中错误的是____(选择题11题)。 AC语言编写的函数源程序,其文件名后缀可以是C B C语言编写的函数都可以作为一个独立的源程序文件 C C语言编写的每个函数都可以进行独立的编译并执行 D一个C语言程序只能有一个主函数,Top4C语言程序的构成和格式,C,Company Logo,真题分析 (2007年4月)对于一个正常运行的C程序,以下叙述中正确的是_____ A、程序的执行总是从main函数开始,在main函数结束 B、程序的执行总是从程序的第一个函数开始,在main函数中结束 C、程序的执行总是从main函数开始,在程序的最后一个函数中结束。 D、程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束。,Top4C语言程序的构成和格式,A,Company Logo,Top4C语言程序的构成和格式,真题分析 (2005年9月)以下关于函数的叙述中正确的是_____ A、 每个函数都可以被其他函数调用(包括main 函数) B、每个函数都可以被单独编译 C、每个函数都可以单独运行 D、在一个函数内部可以定义另一个函数,B,Company Logo,Top4C语言程序的构成和格式,真题分析 (2007年9月)以下叙述中正确的是_____ A、 C语言程序将从源程序中第一个函数开始执行 B、可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 C、C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D、main可作为用户标识符,用以命名任意一个函数作为主函数,C,Company Logo,Top4C语言程序的构成和格式,真题分析 (2008年9月)以下叙述中正确的是_____ A、 C程序的基本组成单位是语句 B、 C程序中每一行只能写一条语句 C、简单C语句必须以分号结束 D、 C语句必须在一行内写完,C,Company Logo,Top4C语言程序的构成和格式,练习题 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,M.D.John,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_KEY B、Double C、 4d D、_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、print B、FOR C、 num10; totalnum*PRICE; printf“totald“,total; },运行结果total300,Top6C语言基本数据类型及其定义规则,Company Logo,整型常量(整常数) 三种形式 十进制整数由数字09和正负号表示.如 123,-456,0 八进制整数由数字0开头,后跟数字07表示.如0123,011 十六进制整数由0 x开头,后跟09,af,AF表示. 如0 x123,0Xff,问题 0123 10 0 x123 10 0Xff 10,Top6C语言基本数据类型及其定义规则,Company Logo,十进制4956 410³910² 510¹610º,二进制101112³02² 12¹12º,十六进制81AE816³116² 1016¹1416º,八进制427548³28² 78¹58º,Top6C语言基本数据类型及其定义规则,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,Top6C语言基本数据类型及其定义规则,32767 -32768 0 012 016 0 x10 0X23FD,0568 o45 ox12t -0X12,,只能是正数,,Company Logo,整数在内存中的存储形式,FF01,FF02,FF03,FF04,,,+5,-1,FF05,FF06,,65535,Top6C语言基本数据类型及其定义规则,Company Logo,实型常量(实数或浮点数) 表示形式 十进制数形式(必须有小数点) 如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 型,Top6C语言基本数据类型及其定义规则,,X,注意,Company Logo,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 \x42 C\n“; printf“I say\“How are you\“\n“; printf“\\C Program\\\n“; printf“Turbo \ C\ “; },运行结果屏幕显示 A B C Isay”How are you” \C Program\ Turbo ‘C’,Top6C语言基本数据类型及其定义规则,Company Logo,字符常量与字符串常量不同,字符串常量 定义用双引号“”括起来的字符序列 存储每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志,例 char ch; ch“A”;,Top6C语言基本数据类型及其定义规则,Company Logo,变量 概念其值可以改变的量 变量的定义,变量初始化定义时赋初值,例 int a,b,c; float data;,例 int a2,b,c4; float data3.67; char ch‘A’; int x1,y1,z1; int xyz1;,变量的使用先定义,后使用,例1 int student; stadent19; //Undefined symbol ‘statent’ in function main,例2 float a,b,c; cab; //Illegal use of floating point in function main,变量定义位置一般放在函数开头,Top6C语言基本数据类型及其定义规则,Company Logo,整型变量 占字节数随机器不同而不同,一般占一个机器字 short≤int≤long 可用sizeof类型标识符)测量,实型变量 float占4字节,提供7位有效数字 double占8字节,提供1516位有效数字,字符型变量 字符变量存放字符ASCII码 char与int数据间可进行算术运算,例 float a; a111111.111; /* a111111.1*/ double b; b111111.111; /* b111111.111*/,例 a‘D’; /* a68; */ x‘A’5; /* x655; */ s‘’‘G’ /* s3371; */,没有字符串变量,用字符数组存放,Top6C语言基本数据类型及其定义规则,Company Logo,Top6C语言基本数据类型及其定义规则,真题分析 (2007年4月)有以下程序,其中u表示按无符号整数输出,程序运行后的输出结果是_____ include “stdio.h” main { unsigned int xoxFFFF; /* x的初值为16进制数 */ printf“u\n”,x; },-1,A.,65535,B.,32767,C.,D.,0 xFFFF,B,Company Logo,Top6C语言基本数据类型及其定义规则,真题分析 (2006年4月)下列不合法的数值常量是_____ A、 011 B、 1e1 C、 8.0E0.5 D、0 xabcd,C,Company Logo,Top6C语言基本数据类型及其定义规则,真题分析 (2005年9月)以下程序运行后的输出结果是_____,main { int x0210; printf“X\n“,x; },0210,0,1,0,八进制数,,,0,0,1,,0,0,0,,,,0,0,0,8,8,0,二进制数,88,mpany Logo,Top6C语言基本数据类型及其定义规则,真题分析 (2011年3月)以下选项中不能用作C程序合法常量的是_____(选择题13题) A1.234 B 123 C123 D“\x7G“,B,mpany Logo,Top6C语言基本数据类型及其定义规则,真题分析 (2011年3月)以下选项中可用作C程序合法实数的是____选择题14题) A.1e0 B3.0e0.2 CE9 D9.12E,A,mpany Logo,Top6C语言基本数据类型及其定义规则,真题分析 (2011年9月)以下选项中关于C语言常量的叙述错误的是___选择题13题) A所谓常量,是指在程序运行过程中,其值不能被改变的量 B常量分为整型常量、实型常量、字符常量和字符串常量 C常量可分为数值型常量和非数值型常量 D经常被使用的变量可以定义成常量,D,常量是指在程序中不变的量,既然程序中已定义为变量,则不可能再定义为常量,Company Logo,Top6C语言基本数据类型及其定义规则,练习题 1、以下选项中,不能作为合法常量的是____ A、1.234e04 B、1.234e0.4 C、1.234e4 D、1.234e0,B,Company Logo,Top6C语言基本数据类型及其定义规则,练习题 2、以下选项中,可作为C语言合法整数的是_____ A、1011B B、0386 C、0 xffa D、x2a2,C,Company Logo,隐式转换 什么情况下发生 运算转换-----不同类型数据混合运算时 赋值转换----把一个值赋给与其类型不同的变量时 输出转换------输出时转换成指定的输出格式 函数调用转换------实参与形参类型不一致时转换 运算转换规则不同类型数据运算时先自动转换成同一类型,Top7基本数据类型间的转换,Company Logo,Company Logo,显式转换(强制转换) 一般形式(类型名)(表达式) 例 intxy intxy double3/2 int3.6 说明强制转换得到所需类型的中间变量,原变量类型不变,例 main { float x; int i; x3.6; iintx; printf“xf,id”,x,i; } 结果x3.600000,i3,精度损失问题,Top7基本数据类型间的转换,Company Logo,真题分析 (2006年9月)以下选项中值为1的表达式是_____ A、 1- 0 B、 1- \0 C、 1 -0 D、 \0 - 0 ,Top7基本数据类型间的转换,1是整型,’0’、’\0’、’1’都是字符型。 ‘0’换成整型的ASCII码值为48,’1’为49 ‘\0’是转义字符,表示0或空。,B,Company Logo,真题分析 (2006年9月)设有定义float x123.4567;,则执行下列语句 printf“f\n“,intx*1000.5/100.0; 后的输出结果是_________,Top7基本数据类型间的转换,int x*1000.5 / 100.0,x*1000.5,,123.4567*1000.5,,12345.670.5,,12346.17,int,,12346,100.0,,123.46,123.460000,Company Logo,真题分析 (2005年9月)设有定义int k1,m2; float f7;则下列选项中错误的表达式是_______ A、kk> k B、-k C、kintf 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 ; ba 6 - 2 ; printf“d c\n“,a,b; },Top7基本数据类型间的转换,d,c,a A 5 - 3 ;,,a‘C’,,67,ba‘6 -‘2 ;,,a674,,G,67 G,Top7基本数据类型间的转换,真题分析 (2011年9月)若有定义语句int a10; double b3.14;,则表达式‘A’ab值的类型是_____。(选择题14题) A.char Bint C double Dfloat,Company Logo,C,Company Logo,练习题 1、以下程序运行后的输出结果是__________ main {int a,b,c; a25;b025;c0 x25; printf“d d d\n”,a,b,c; },Top7基本数据类型间的转换,025,,2*815*80,,21,0 x25,,2*1615*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、关于求余数运算% 要求两侧的操作数均为整型数据,否则出错。,例 52 -52 110 51 5.52,例 52 1 -52 -1 110 1 51 0 5.52 ,Company Logo,4、关于两边运算数类型不一致 系统将自动进行转换,使两边一致后再进行运算。,5、所有实型数的运算均以双精度方式进行,若是单精度, 则在尾数部分添0,转换为双精度。,Top8常见算术运算符的使用,6、算术表达式的概念,(1)表达式的概念 用运算符和括号将运算对象(常量、变量和函数等)连接 起来的、符合C语言语法规则的式子,称为表达式。,(2)算术表达式的概念 表达式中的运算符都是算术运算符。例如 3 6 * 9、x y / 2 - 1等,都是算术表达式。,Company Logo,Top8常见算术运算符的使用,7、强制类型转换表达式,转换格式为 要转换成的数据类型被转换的表达式,doublea 等价于doublea intx y float5 / 2 等价于float5/2 float5 / 2,注意强制转换类型得到的是一个所需类型的中间量,原表达式类型 并不发生变化。例如,doublea 只是将变量a的值转换成一个double 型的中间量,其数据类型并未转换成double型。,Top8常见算术运算符的使用,真题分析 (2011年9月)若有定义语句 int x12,y8,z; 在其后执行语句z0.9x/y; 则z的值为___________。(选择题15题) A1.9 B1 C2 D2.4,Company Logo,B,“/”为整除运算符,两边的运算对象都为 整数时,运算结果为整型。 Z为整型,所以最终结果为整数。,Company Logo,Top8常见算术运算符的使用,真题分析 (2007年4月)以下选项中,当x为大于1的奇数时,数为0的表达式为______ A、x21 B、x/2 C、x20 D、x20,D,(求余运算符)的两边都必须是整型。 大于1的奇数除以2,余数必为1。 表达式成立时,整个表达式逻辑值为1 表达式不成立时,整个表达式逻辑值为0。,Top8常见算术运算符的使用,真题分析 (2011年3月)以下程序运行后的输出结果是 _____(填空题第6题) 。 include main { int a; aintdouble3/20.5int1.99*2; printf“d\n“,a; },Company Logo,3,Company Logo,Top8常见算术运算符的使用,练习题 1、设变量x为float型且已经赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是______ A、xx*1000.5/100.0 B、xx*1000.5/100.0 C、xintx*1000.5/100.0 D、xx/1000.5*100.0,C,Company Logo,Top8常见算术运算符的使用,练习题 2、若有语句 int i-19,ji4; printf“d\n”,j; 则输出结果是 _______,-3,Company Logo,1、算术运算符的优先级 () + - * / + -,单目,双目,,高,低,Top9算术运算符的优先级顺序,2、算术运算符和圆括号的结合性 所谓结合性是指,当一个操作数两侧的运算符具有相同 的优先级时,该操作数是先与左边的运算符结合,还是 先与右边的运算符结合。,自左至右的结合方向,称为左结合性。反之,称为右结合性。 结合性是C语言的独有概念。 除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符 都是左结合性。,例如,算术运算符的结合方向是“自左至右”,即 在执行“a – b c”时,变量b先与减号结合,执行“a - b”; 然后再执行加c的运算。,Company Logo,Top9算术运算符的优先级顺序,真题分析 (2006年4月)表达式3.6-5/21.252 的值是___ A、4.3 B、4.8 C、3.3 D、3.8,3.6-5/21.252,,2,,1.6,,2.8,,1,,3.8,D,Company Logo,Top9算术运算符的优先级顺序,真题分析 2005年9月下列不能正确计算代数式sin21/2/3值的C 语言表达式是____,1/3 *sin1/2*sin1/2,A.,sin0.5*sin0.5/3,B.,powsin0.5,2/3,C.,1/3.0*powsin1.0/2,2,D.,1/3*sin0*sin0,,0.076616,0.000000,A,Company Logo,Top9算术运算符的优先级顺序,练习题 1、设有定义float a2,b4,h3;以下C语言表达式与代数式计算结果不相符的是 ______ A、ab*h/2 B、1/2*ab*h C、ab*h*1/2 D、h/2*ab,B,Company Logo,,赋值运算,赋值符号“”就是赋值运算符,它的作用是将一个表达式 的值赋给一个变量。赋值运算符的一般形式为,如果表达式值的类型,与被赋值变量的类型不一致,但都是 数值型或字符型时,系统自动地将表达式的值转换成被赋值 变量的数据类型,然后再赋值给变量.,例 a3; dfunc; cd2; ba;,Top10赋值表达式的求值规则,变量 赋值表达式,Company Logo,几点说明,(1)赋值运算符的优先级只高于逗号运算符,比其它的运算符优先级都低,且具有自右向左的结合性。 如a27/3,(2)赋值运算符不是数学中的“等于号”,而是进行“赋予”操作。,(3)表达式xy读作“将y的值赋给变量x”而不读作”x等于y“,(4)赋值运算符左边只能是变量,不能是常量或是表达式。如abc就是错误的。,(5)赋值运算符右边也可以是赋值表达式。如ab71,而a71b则是错误的。,(6)”=“视作运算符,a19是一个表达式,C语言规定最左边变量中所得到的新值就是赋值表达式的值。,Top10赋值表达式的求值规则,Company Logo,,复合赋值表达式,复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。,复合赋值运算的一般格式为 变量 双目运算符 表达式 └──┬──┘ 复合赋值运算符 等价于变量 变量 双目运算符 表达式。 当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能 出错。,例 x 3 xx3 y * x 6 yy*x6,Top10赋值表达式的求值规则,Company Logo,说明 结合方向自右向左 左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则使赋值号右边表达式值自动转换成其左边变量的类型,例 3x-2*y; ab3;,例 float f; int i; i10; fi; 则 f10.0,例 int i; i2.56; //结果i2;,例 abc5 ab5 a5c6 ab4c6 ab10/c2,//表达式值为5,a,b,c值为5,// b5;a5,//表达式值11,c6,a11,//表达式值10,a10,b4,c6,//表达式值5,a5,b10,c2,Top10赋值表达式的求值规则,X,Company Logo,思考2 a12; aa-a*a,思考3 int a2; a4-1; aa*a-a*3;,//a-264 等价于aaaa-a*a,//a0 等价于aaaa*aa-aa*3,思考1已有变量a,其值为9,计算表达式aa-aa,(1)aa99,表达式的值为18,但是a的值不变,仍为9 (2)aa-18 ,表达式的值为-9,a的值变为-9。 (3)aaa,表达式的值为-18,a的值为-18,Top10赋值表达式的求值规则,Company Logo,,赋值运算中的类型转换,在C语言的赋值表达式中,赋值号右边的值先转换成与左边的变量相同的类型,然后进行赋值。,注意 (1)当赋值号左边的变量为短整型,右边的值为长整型时,短整型变量只能接受长整型数据低位上的两个字节的数据,高位上的数据将丢失。也就是说,右边的值不能超过短整型的数值范围。,Top10赋值表达式的求值规则,Company Logo,例 short a; unsigned long b; b98304; ab; printf“d\n”,a;,98304D11000000000000000B,高16位,低16位,结果a1000000000000000B-32768,Top10赋值表达式的求值规则,Company Logo,(2)当赋值号左边的变量为无符号整型,右边的值为有符号整型时,则把内存中的内容原样复制。右边数据的范围不应超出左边变量可以接受的数据范围。同时要注意,这时负数将转换为正数。,例 unsigned a; a-1; printf“d\n”,a;,-1的补码,结果a1111111111111111=65535,Top10赋值表达式的求值规则,Company Logo,(3)当赋值号左边的变量为有符号整型,右边的值为无符号整型时,复制的机制同上,这时,若符号位为1,将按负数处理。,例 int a; unsigned b; b1000000000000000; ab; printf“d\n”,a;,结果a-1111111111111111=-32786,Top10赋值表达式的求值规则,Company Logo,Top10赋值表达式的求值规则,真题分析 (2006年4月)以下叙述中错误的是_____ A、C程序中的include和define均不是C语句 B、除逗号运算符外,赋值运算符的优先级最低 C、C程序中,j; 是赋值语句 D、C程序中,、-、*、/、是算术运算符,可用于整型和实型数的运算。,D,Company Logo,Top10赋值表达式的求值规则,真题分析 (2005年9月)下列能正确定义且赋初值的语句是_____ A、 int nln210; B、char c32; C、float ff1.1; D、 double x12.3E2.5;,C语言规定,变量必须先定义,后使用。 A、C错误。 A如果写成int n1,n2;对待n1n210;则正确 C如果写成float f; ff1.1; 则正确 选项D中,E后面必须为整数,不能是实数。,B,Company Logo,Top10赋值表达式的求值规则,真题分析 (2006年9月)若变量x、y 已正确定义并赋值,下列符合C 语言语法的表达式是_____ A、x,yx-- B、 x1y C、xx10xy D、 doublex/10,A,赋值表达式的左边必须是变量,不能是常量 或表达式。所以B,C错误。 D选项中,强制类型转换应该写成doublex/10,Company Logo,Top10赋值表达式的求值规则,真题分析 (2011年3月)若有定义语句 int a3,b2,c1;,以下选项中错误的赋值表达式是______(选择题15题) Aab43; Babc1; Cab4c; Da1bc4;,A,赋值运算符左边只能是变量,不能是常量或是表达式,Company Logo,Top10赋值表达式的求值规则,练习题 1、以下选项中,非法的表达式是______ A、0x100 B、ij0 C、char653 D、x1x1,D,Company Logo,Top11 逗号表达式的运算规则,形式表达式1,表达式2,表达式n 结合性从左向右 优先级所有运算符中,逗号运算符优先级最低 逗号表达式的值等于表达式n的值 用途常用于循环for语句中,例 a3*5,a*4 a3*5,a*4,a5 例 xa3,6*3 xa3,6*a 例 a1;b2;c3; printf“d,d,d”,a,b,c; printf“d,d,d”,a,b,c,b,c;,//a15,表达式值60,//a15,表达式值20,//赋值表达式,表达式值18,x18,//逗号表达式,表达式值18,x3,//1,2,3,//3,2,3,Company Logo,例 include main { int x,y7; float z4; xyy6,y/z; printf“xd\n“,x; },运行结果x3,形式表达式1,表达式2,表达式n 结合性从左向右 优先级所有运算符中,逗号运算符优先级最低 逗号表达式的值等于表达式n的值 用途常用于循环for语句中,Top11 逗号表达式的运算规则,Company Logo,Top11 逗号表达式的运算规则,考点 逗号运算符的结合性为从左到右,先计算表达式1,最后计算表达式n,最后一个表达式的值即为该逗号表达式的值。 逗号运算符在所有运算符中,优先级最低。,Company Logo,Top11 逗号表达式的运算规则,真题分析 (2007年4月)执行以下程序后的输出结果是_____ main { int a10; a3*5,a4; printf“ad\n“,a; },a3*5,a4;,,①,15,,②,104,14,,,,14,Company Logo,Top11 逗号表达式的运算规则,真题分析 (2005年9月)有以下程序, main { char a1 M ,a2 m ; printf“c\n”,a1,a2;} 则下列说法正确的是_____ A、程序输出大写字母M B、程序输出小写字母m C、格式说明符不足,编译出错 D、程序运行时产生出错信息,B,Company Logo,Top11 逗号表达式的运算规则,练习题 1、有如下程序,运行该程序的输出结果是_____ main { int y3,x3,z1; printf“d d\n”,x,y,z2; } A、3 4 B、4 2 C、4 3 D、3 3,D,Company Logo,Top12 自加、自减运算符,,自加运算符++、自减运算符--,i或i--表示在使用该表达式值之后将i值加1(或减1)。,i或--i表示在使用该表达式值之前将i值加1(或减1),说明 (1)和--仅适用于变量(整型和实型),不能用于常量或表达式。 (2)和--运算符的结合方向是“至右向左”。,例 -i -i i3; printf“d,d”,-i,i; //-3 ,4,例 -i i3; printf“d,d”,-i,i;,Company Logo,例自增、自减运算符的用法与运算规则示例。 main { int a100; printf“ad\n”,a; printf“ad\n”,a; printf“a--d\n”,a--; printf“--ad\n”,--a; },/*输出a++100,a的值变为101*/,/*输出++ a102,a的值变为102*/,/*输出a--102,a的值变为101*/,/*输出--a100,a的值变为100*/,Top12 自加、自减运算符,Company Logo,例自增、自减运算符的用法与运算规则示例。 main { int x6, y; printf“xd\n“,x; y x; /*前置运算*/ printf“yx xd,yd\n“,x,y; y x--; /*后置运算*/ printf“yx-- xd,yd\n“,x,y; },程序运行结果 x6 yx x7,y7 yx-- x6,y7,Top12 自加、自减运算符,Company Logo,考点,Top12 自加、自减运算符,1、自增、自减运算符只能用于变量,不能用于常量和表达式。5、--ab等都是非法的。,2、自增、自减运算符和其它运算符混合使用时,其结合性为至右向左。,3、自增、自减运算符,无论作为前缀(a,--a)还是后缀( a , a --)运算符,对于变量本身来说自增1或自减1都具有相同的效果,但对表达式来说却有着不同的值。,Company Logo,Top12 自加、自减运算符,真题分析 (2007年4月)设有定义int k0;,以下选项的四个表达式中与其他三个表达式的值不相同的是__