二级C语言-运算符与表达式
- 格式:doc
- 大小:50.42 KB
- 文档页数:19
所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
其它的都是从左至右结合。
具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。
()是与函数相关,[]与数组相关,而->及.是取结构成员。
其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。
接下来是算术运算符,*、/、%的优先级当然比+、-高了。
移位运算符紧随其后。
其次的关系运算符中,< <= > >=要比== !=高一个级别,不大好理解。
所有的逻辑操作符都具有不同的优先级(单目运算符出外,!和~)逻辑位操作符的"与"比"或"高,而"异或"则在它们之间。
跟在其后的&&比||高。
接下来的是条件运算符,赋值运算符及逗号运算符。
在C语言中,只有4个运算符规定了运算方向,它们是&&、| |、条件运算符及赋值运算符。
&&、| |都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。
如 a = 0 && b; &&运算符的左边位0,则右边表达式b 就不再判断。
在条件运算符中。
如a?b:c;先判断a的值,再根据a的值对b或c之中的一个进行求值。
赋值表达式则规定先对右边的表达式求值,因此使 a = b = c = 6;成为可能。
C语言运算符优先级顺口溜[转]醋坛酸味灌味落跳福豆共44个运算符醋-初等,4个: ( ) [ ] -> 指向结构体成员 . 结构体成员坛-单目,9个: ! ~ ++ -- -负号 (类型) *指针 &取地址 sizeof长度(结合方向:自右向左)酸-算术,5个: * / % + -减味-位移,2个: << >>灌-关系,6个: < <= > >= == 等于 != 不等于味-位逻,3个:& 按位与 ^ 按位异或 | 按位或落-逻辑,2个: && 逻辑与 || 逻辑或跳-条件,1个,三目: ? :(结合方向:自右向左)福-赋值,11个: = += -= *= /= %= >>= <<= &= ^=|= (结合方向:自右向左)豆-逗号,1个: ,结合方向自右向左的只有三类:赋值、单目和三目,其它的都是从左至右结合。
数据类型、运算符和表达式一、C 语言的基本数据类型数据是程序处理的对象。
C 中将数据分为不同的数据类型,任何数据都属于某一种特定的数据类型。
数据类型的作用有两个:一是指明为数据分配多大的存储空间和规定了数据的存储结构,进而规定了数据的取值范围;二是规定了数据所能进行的操作。
C 的数据类型分为基本数据类型和构造类型。
基本数据类型是系统定义的,用户可以直接使用。
构造类型由用户自行定义。
C 的数据类型如图所示。
C 标准没有规定各类数据所占用内存位数。
所以不同c 编译系统的各类数据所占用内存位数是不一样的。
上机使用时,应注意使用的c 编译系统的具体规定。
Turbo C 基本类型 所占位数 数的范围 [signed] char 8 -128~127 unsigned char 8 0~255 [signed]int 16 -32768~32767 short [int] 16 -32768~32767long [int] 32 -2147483648~2147483647 unsigned [int] 16 0~65535 unsigned short [int] 16 0~65535 unsigned long [int]320~4294967295C++数据类型基本类型字符型(char) 空类型(void)整型短整型(short int) 无符号整型(unsigned int)长整型(long int)基本整型(int) 实型(浮点型) 双精度型(double)单精度型(float) 指针构造类型枚举(enum) 联合(union)结构体(struct)数组float 32 约6位有效数字double 64 约12位有效数字在Visual C++中:char:1 Byteint:4 Byteshort:2 Bytelong:4 Bytefloat:4 Bytedouble:8 Byte二、常量常量:整型常量、实型常量、字符常量、字符串常量、符号常量1.整型常量C语言程序中可以使用十进制、八进制和十六进制来表示整型常量。
计算机⼆级C语⾔基础知识C语⾔程序的结构认识⽤⼀个简单的c程序例⼦,介绍c语⾔的基本构成、格式、以及良好的书写风格,使⼩伙伴对c语⾔有个初步认识。
例1:计算两个整数之和的c程序:#include main() {int a,b,sum; /*定义变量a,b,sum为整型变量*/a=20; /*把整数20赋值给整型变量a*/b=15; /*把整数15赋值给整型变量b*/sum=a+b; /*把两个数之和赋值给整型变量sum*/printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); /*把计算结果输出到显⽰屏上*/ }重点说明:1、任何⼀个c语⾔程序都必须包括以下格式:main() { }这是c语⾔的基本结构,任何⼀个程序都必须包含这个结构。
括号内可以不写任何内容,那么该程序将不执⾏任何结果。
2、main()----在c语⾔中称之为“主函数”,⼀个c程序有且仅有⼀个main函数,任何⼀个c 程序总是从main函数开始执⾏,main 函数后⾯的⼀对圆括号不能省略。
3、被⼤括号{ }括起来的内容称为main函数的函数体,这部分内容就是计算机要执⾏的内容。
4、在{ }⾥⾯每⼀句话后⾯都有⼀个分号(;),在c语⾔中,我们把以⼀个分号结尾的⼀句话叫做⼀个c语⾔的语句,分号是语句结束的标志。
5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); ----通过执⾏这条c语⾔系统提供给我们直接使⽤的屏幕输出函数,⽤户即可看到运⾏结果,本程序运⾏后,将在显⽰器上显⽰如下结果:a=20,b=15,sum=356、#include注意:(1)以#号开头(2)不以分号结尾这⼀⾏没有分号,所以不是语句,在c语⾔中称之为命令⾏,或者叫做“预编译处理命令”。
7、程序中以/*开头并且以*/结尾的部分表⽰程序的注释部分,注释可以添加在程序的任何位置,为了提⾼程序的可读性⽽添加,但计算机在执⾏主函数内容时完全忽略注释部分,换⽽⾔之就是计算机当做注释部分不存在于主函数中。
第 1 页 共 2 页 C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明
1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) 对象.成员名 -- -> 成员选择(指针) 对象指针->成员名 --
2 - 负号运算符 -表达式 右到左 单目运算符 ~ 按位取反运算符 ~表达式 ++ 自增运算符 ++变量名/变量名++ -- 自减运算符 --变量名/变量名-- * 取值运算符 *指针变量 & 取地址运算符 &变量名 ! 逻辑非运算符 !表达式 (类型) 强制类型转换 (数据类型)表达式 --
sizeof 长度运算符 sizeof(表达式) --
3 / 除 表达式/表达式 左到右 双目运算符 * 乘 表达式*表达式 % 余数(取模) 整型表达式%整型表达式
4 + 加 表达式+表达式 左到右 双目运算符 - 减 表达式-表达式
5 << 左移 变量<左到右 双目运算符 >> 右移 变量>>表达式
6 > 大于 表达式>表达式 左到右 双目运算符 >= 大于等于 表达式>=表达式 < 小于 表达式<= 小于等于 表达式<=表达式
7 == 等于 表达式==表达式 左到右 双目运算符 != 不等于 表达式!= 表达式
8 & 按位与 表达式&表达式 左到右 双目运算符 第 2 页 共 2 页
9 ^ 按位异或 表达式^表达式 左到右 双目运算符 10 | 按位或 表达式|表达式 左到右 双目运算符 11 && 逻辑与 表达式&&表达式 左到右 双目运算符 12 || 逻辑或 表达式||表达式 左到右 双目运算符
13 ?: 条件运算符 表达式1? 表达式2: 表达式3 右到左 三目运算符
14 = 赋值运算符 变量=表达式 右到左 -- /= 除后赋值 变量/=表达式 -- *= 乘后赋值 变量*=表达式 -- %= 取模后赋值 变量%=表达式 -- += 加后赋值 变量+=表达式 -- -= 减后赋值 变量-=表达式 -- <<= 左移后赋值 变量<<=表达式 -- >>= 右移后赋值 变量>>=表达式 -- &= 按位与后赋值 变量&=表达式 -- ^= 按位异或后赋值 变量^=表达式 -- |= 按位或后赋值 变量|=表达式 --
c语言表达式优先级
c语言中运算顺序十分重要,经常记也经常忘,为了好找,copy了一份。
C语言的运算符包括单目运算符、双目运算符、三目运算符,优先级如下:
第1优先级:各种括号,如()、[]等、成员运算符 . ;
第2优先级:所有单目运算符,如++、–、!、~等;
第3优先级:乘法运算符*、除法运算符/、求余运算符%;
第4优先级:加法运算符+、减法运算符-;
第5优先级:移位运算符<<、>>;
第6优先级:大于运算符>、大于等于运算符>=、小于运算符<、小于等于运算符<=;
第7优先级:等于运算符==、不等于运算符!=;
第8优先级:按位与运算符&;
第9优先级:按位异或运算符^;
第10优先级:按位或运算符|;
第11优先级:逻辑与运算符&&;
第12优先级:逻辑或运算符||;
第13优先级:三目条件运算符?: ;
第14优先级:各种赋值运算符,如=、+=、-=、*=、/= 等;第15优先级:逗号运算, 。
计算机二级C语言考试内容及重点计算机二级C语言试采用全国统一命题,统一考试的形式,各科目均为上机操作考试。
下面是2017年计算机二级C语言考试内容及重点。
欢迎阅读。
考试内容一、C语言程序的结构1. 程序的构成,main函数和其他函数。
2. 头文件,数据说明,函数的开始和结束标志以及程序中的注释。
3. 源程序的书写格式。
4. C语言的风格。
二、数据类型及其运算1. C的数据类型(基本类型,构造类型,指针类型,无值类型)及其定义方法。
2. C运算符的种类、运算优先级和结合性。
3. 不同类型数据间的转换与运算。
4. C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。
三、基本语句1. 表达式语句,空语句,复合语句。
2. 输入输出函数的调用,正确输入数据并正确设计输出格式。
四、选择结构程序设计1. 用if 语句实现选择结构。
2. 用switch语句实现多分支选择结构。
3. 选择结构的嵌套。
五、循环结构程序设计1. for循环结构。
2. while和do-while循环结构。
3. continue语句和break语句。
4. 循环的嵌套。
六、数组的定义和引用1. 一维数组和二维数组的定义、初始化和数组元素的引用。
2. 字符串与字符数组。
七、函数1. 库函数的正确调用。
2. 函数的定义方法。
3. 函数的类型和返回值。
4. 形式参数与实在参数,参数值的传递。
5. 函数的正确调用,嵌套调用,递归调用。
6. 局部变量和全局变量。
7. 变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。
八、编译预处理1. 宏定义和调用(不带参数的宏,带参数的宏)。
2. “文件包含冶处理。
九、指针1. 地址与指针变量的概念,地址运算符与间址运算符。
2. 一维、二维数组和字符串的地址以及指向变量、数组、字符串、函数、结构体的指针变量的定义。
通过指针引用以上各类型数据。
3. 用指针作函数参数。
重庆计算机二级c语言知识点总结重庆计算机二级C语言知识点总结一、C语言基础知识1. C语言的概念和特点- C语言是一种通用的高级编程语言,具有简洁的语法和强大的表达能力。
- C语言能够直接操作内存,对硬件进行底层控制,具有高效的性能。
- C语言具有丰富的标准库,可以方便地进行文件操作、字符串处理等任务。
2. C语言的基本语法- 变量和常量的定义和使用。
- 运算符和表达式的使用。
- 控制语句(if、switch、for、while等)的使用。
- 函数的定义和使用。
3. C语言的数据类型- 基本数据类型(int、float、char等):用于表示整数、浮点数和字符。
- 指针类型:用于表示内存地址。
- 数组类型:用于表示一组相同类型的数据。
- 结构体类型:用于表示一个复合的数据结构。
- 枚举类型:用于表示一组离散的值。
4. C语言的输入和输出- 标准输入函数(scanf):用于从键盘读取输入数据。
- 标准输出函数(printf):用于向屏幕输出结果。
5. C语言的内存管理- 内存的分配和释放:使用malloc和free函数进行动态内存分配和释放。
- 内存的访问和操作:使用指针对内存地址进行读写操作。
二、C语言高级特性1. 指针和内存管理- 指针的概念和用法:指针是内存地址的表示,可以用于访问和操作内存。
- 指针的运算和应用:指针可以进行算术运算,并用于实现数据结构和算法。
2. 结构体和联合体- 结构体的定义和使用:结构体是一种复合的数据类型,可以包含多个不同类型的成员变量。
- 结构体的嵌套和引用:结构体可以嵌套定义和引用,用于表示更复杂的数据结构。
- 联合体的定义和使用:联合体是一种特殊的结构体,可以共享存储空间。
3. 指针和函数- 函数指针的定义和使用:函数指针可以指向函数,并用于实现回调函数等功能。
- 指针作为函数参数:可以使用指针作为函数参数,实现对变量的引用传递。
4. 动态内存管理- 动态内存分配和释放:使用malloc、calloc和realloc函数进行动态内存分配,使用free函数进行内存释放。
二级C语言-运算符与表达式 (总分:60.00,做题时间:90分钟) 一、{{B}}选择题{{/B}}(总题数:38,分数:38.00) 1.设变量已正确定义并赋值,以下合法的C语言赋值语句是______。
A.x=y==5
B.x=n%2.5
C.x+n=i
D.x=5=4+1
(分数:1.00) A. √ B. C. D. 解析:[解析] 赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项C和D错误。“%”运算符两侧都应当是整型数据,选项B错误。 2.在x值处于-2~2、4~8时值为“真”,否则为“假”的表达式是______。
A.(2>x>-2)||(4>x>8)
B.!(((x<-2)||(x>2))&&((x<=4)||(x>8)))
C.(x<2)&&(x>=-2)&&(x>4)&&(x<8)
D.(x>-2)&&(x>4)||(x<8)&&(x<2)
(分数:1.00) A. B. √ C. D. 解析:[解析] 本题是考查关系运算和逻辑运算的混合运算。要给出此题的正确答案,首先需要了解数学上的区间在C语言中的表示方法,如x在[a, b]区间,其含义是x既大于等于a又小于等于b,相应的C语言表达式是x>=a&&x<=b。本例中给出了两个区间,一个数只要属于其中一个区间即可,这是“逻辑或”的关系。在选项A中,区间的描述不正确。选项B把“!”去掉,剩下的表达式描述的是原题中给定的两个区间之外的部分,加上“!”否定正好是题中的两个区间的部分,是正确的。选项C是恒假的,因为它的含义是x同时处于两个不同的区间内。选项D所表达的也不是题中的区间。 3.sizeof(double)是______。
A.一种函数调用
B.一个整型表达式
C.一个双精度表达式
D.一个不合法的表达式
(分数:1.00) A. B. √ C. D. 解析:[解析] sizeof是一个C语言关键字,有着特定的功能。在C语言中,一个函数的调用格式是:函数名(参数列表)。虽然“sizeof(double)”与函数调用有着相同的格式,但sizeof是一个C语言关键字,因此,它不是一个函数调用。sizeof在C语言中是表示求一个变量或数据类型所占用的内存字节数的运算符,所以“sizeof(double)”表示求双精度浮点型数据占用内存的字节数。显然,该表达式返回的是一个整数,而不是一个双精度数。 4.对于条件表达式(M)? (a++):(a--),其中的表达式M等价于______。
A.M==0
B.M==1
C.M!=0
D.M!=1
(分数:1.00) A. B. C. √ D. 解析:[解析] 因为条件表达式e1?e2:e3的含义是e1为真时,其值等于表达式e2的值,否则为表达式e3的值。“为真”就是“不等于假”,因此M等价于M!=0。 5.设变量已正确定义并赋值,以下正确的表达式是______。
A.x=y*5=x+z
B.int(15.8%5)
C.x=y+z+5, ++y
D.x=25%5.0
(分数:1.00) A. B. C. √ D. 解析:[解析] 求余运算符“%”两边的运算对象必须是整型数据,而选项B和D中“%”两边的运算对象有浮点整型数据,所以选项B和D是错误的表达式。在选项A中赋值表达式两边出现相同的变量x,也是错误的。选项C是一个逗号表达式,所以正确的答案为C。 6.设变量已正确定义为整型,则表达式n=i=2,i=n+1,i+n的值为______。
A.2
B.3
C.4
D.5
(分数:1.00) A. B. C. D. √ 解析:[解析] 本题考查的是C语言逗号表达式相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔的各表达式的值,整个逗号表达式的值等于其中的最后一个表达式的值。本题中,首先i和n被赋值为2,i再加上n和1为3,最后i+n等于2+3=5。本题答案为D。 7.若已定义x和y为double类型,则表达式“x=1, y=x+3/2”的值是______。
A.1
B.2
C.2.0
D.2.5
(分数:1.00) A. B. C. √ D. 解析:[解析] 本题中的表达式为逗号表达式,此表达式的结果为y=x+3/2的值。y=x+3/2的运算次序为:先进行3/2运算,两个运算数均为整型量,结果也为整型量,等于1,此结果将与double类型数进行相加,要转换为1.00...00。最后将x的值1转换成double型,与1.00...00相加。 8.设变量已正确定义并赋值,以下正确的表达式是______。
A.x=y*5=x+z
B.int(15.8%5)
C.x=y+z+5, ++y
D.x=25%5.0
(分数:1.00) A. B. C. √ D. 解析:[解析] 求余运算符“%”两边的运算对象必须是整型,而选项B、D中“%”两边的运算对象有浮点整型数据,所以选项B、D是错误的表达式。在选项A中赋值表达式的两边出现相同的变量“x”,也是错误的。选项C是一个逗号表达式,所以正确的答案为C。 9.现有定义int a;double b;float c;char k;,则表达式a/b+c-k的值的类型为______。
A.int
B.double
C.float
D.char
(分数:1.00) A. B. √ C. D. 解析:[解析] 双目运算中两边运算量类型转换规则。 运算数1 运算数2 转换结果类型
短整型 整型 字符型 有符号整型 整型 长整型 长整型 整型 无符号整型 浮点型 短整型->长整型 整型->长整型 字符型->整型 有符号整型->无符号整型 整型->浮点型
在a/b的时候,a、b的类型不一致,根据类型转换规则,要把整型转换成double类型,之后的加、减类似。转换规则char,short→int→unsigned→long→double→float。 10.设有定义:int k=0;,以下选项的4个表达式中与其他3个表达式的值不相同的是______。
A.k++
B.k+=1
C.++k
D.k+1
(分数:1.00) A. B. C. D. √ 解析:[解析] 选项A、B、C都使k的值增加1,D选项不改变k的值。本题答案为D。 11.以下关于单目运算符++、--的叙述中正确的是______。
A.它们的运算对象可以是任何变量和常量
B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量
C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D.它们的运算对象可以是char型变量、int型变量和float型变量
(分数:1.00) A. B. C. D. √ 解析:[解析] “++”和“--”运算符都是单目运算符,其运算对象可以是整型变量,也可以是实型变量,但不能是常量或表达式。当运算对象是字符型时,系统自动将其转换成该字符所对应的ASCII码值。 12.以下选项中,与k=n++完全等价的表达式是______。
A.k=n, n=n+1
B.n=n+1, k=n
C.k=++n
D.k+=n+1 (分数:1.00) A. √ B. C. D. 解析:[解析] 题中的表达式是先让n参与赋值运算,然后再对本身进行自加,所以选A。 13.以下非法的赋值语句是______。
A.n=(i=2, ++i)
B.j++
C.++(i+1)
D.x=j>0
(分数:1.00) A. B. C. √ D. 解析:[解析] 自加或自减运算的操作数不能是表达式。 14.以下程序的输出结果为______。 #include <stdio.h> main() { int i=4, a; a=i++; printf("a=% d, i=% d", a, i); }
A.a=4, i=4
B.a=5, i=4
C.a=4, i=5
D.a=5, i=5
(分数:1.00) A. B. C. √ D. 解析:[解析] 本题考查的是自增运算符及赋值运算符的综合使用问题。自增运算符是一元运算符,其优先级比赋值运算符高,要先计算。把表达式i++的值赋予a,由于i++的结果为当前i的值(当前i的值为4),所以i++的值为4,得到a的值为4。同时,计算了i++后,i由4变为5。 15.若变量已正确定义并赋值,以下符合C语言语法的表达式是______。
A.a:=b+1
B.a=b=c+2
C.int18.5%3
D.a=a+7=c+b