文档库 最新最全的文档下载
当前位置:文档库 › DB2 公共表表达式(WITH语句的使用)

DB2 公共表表达式(WITH语句的使用)

DB2 公共表表达式(WITH语句的使用)
DB2 公共表表达式(WITH语句的使用)

WITH语句(DB2 公共表表达式的使用)

----start

说起WITH 语句,除了那些第一次听说WITH语句的人,大部分人都觉得它是用来做递归查询的。其实那只是它的一个用途而已,它的本名正如我们标题写的那样,叫做:公共表表达式(Common Table Expression),从字面理解,大家觉得它是用来干嘛的呢?其实,它是用来定义临时集合的。啊?VALUES语句不是用来定义临时集合的吗?怎么WITH语句也用来定义临时集合呢?它们有什么区别呢?

VALUES语句是用明确的值来定义临时集合的,如下:

[c-sharp]view plaincopyprint?

1.VALUES (1,2), (1,3),(2,1)

WITH语句是用查询(也就是select语句)来定义临时集合的,从这个角度讲,有点像视图,不过不是视图,大家千万别误解。如下:

[c-sharp]view plaincopyprint?

1.CREATE TABLE USER (

https://www.wendangku.net/doc/1d15560453.html, VARCHAR(20) NOT NULL,---姓名

3.SEX INTEGER,---性别(1、男 2、女)

4.BIRTHDAY DATE---生日

5.);

1.WITH TEST(NAME_TEST, BDAY_TEST) AS

2.(

3.SELECT NAME,BIRTHDAY FROM USER--语句1

4.)

5.SELECT NAME_TEST FROM TEST WHERE BDAY_TEST='1949-10-1';--语句2

下面我们来解释一下,首先语句1执行,它会产生一个有两列(NAME,BIRTHDAY)的结果集;接着,我们将这个结果集命名为test,并且将列名重命名为NAME_TEST,

BDAY_TEST;最后我们执行语句2,从这个临时集合中找到生日是1949-10-1,也就是共和国的同龄人。

怎么样?如果你感觉不好理解,请仔细的分析一下上面的语句。下面我们举个VALUES语句和WITH语句结合使用的例子,如下:

[c-sharp]view plaincopyprint?

1.WITH TEST(NAME_TEST, BDAY_TEST) AS

2.(

3.VALUES ('张三','1997-7-1'),('李四','1949-10-1')

4.)

5.SELECT NAME_TEST FROM TEST WHERE BDAY_TEST='1949-10-1'

从上面的介绍和WITH语句不为大多数人所熟悉可以猜测,WITH语句是为复杂的查询为设计的,的确是这样的,下面我们举个复杂的例子,想提高技术的朋友可千万不能错过。考虑下面的情况:

[c-sharp]view plaincopyprint?

1.CREATE TABLE USER

2.(

https://www.wendangku.net/doc/1d15560453.html, VARCHAR(20) NOT NULL,--姓名

4.DEGREE INTEGER NOT NULL,--学历(1、专科 2、本科 3、硕士 4、博士)

5.STARTWORKDATE date NOT NULL,--入职时间

6.SALARY1 FLOAT NOT NULL,--基本工资

7.SALARY2 FLOAT NOT NULL--奖金

8.);

假设现在让你查询一下那些1、学历是硕士或博士 2、学历相同,入职年份也相同,但是工资(基本工资+奖金)却比相同条件员工的平均工资低的员工。(哈哈,可能是要涨工资),不知道你听明白问题没有?该怎么查询呢?我们是这样想的:

1、查询学历是硕士或博士的那些员工得到结果集1,如下:

[c-sharp]view plaincopyprint?

1.SELECT NAME,DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, SALARY1+SALARY2 AS SALAR

Y FROM USER WHERE DEGREE IN (3,4);

2、根据学历和入职年份分组,求平均工资得到结果集2,如下:

[c-sharp]view plaincopyprint?

1.SELECT DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, AVG(SALARY1+SALARY2) AS AVG_S

ALARY

2.FROM USER WHERE DEGREE IN (3,4)

3.GROUP BY DEGREE,YEAR(STARTWORKDATE)

3、以学历和入职年份为条件联合两个结果集,查找工资<平均工资的员工,以下是完整的SQL:

[c-sharp]view plaincopyprint?

1.WITH TEMP1(NAME,DEGREE,WORDDATE,SALARY) AS

2.(

3.SELECT NAME,DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, SALARY1+SALARY2 AS SALAR

Y FROM USER WHERE DEGREE IN (3,4)

4.),

5.TEMP2 (DEGREE,WORDDATE,AVG_SALARY) AS

6.(

7.SELECT DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, AVG(SALARY1+SALARY2) AS AVG_S

ALARY

8.FROM USER WHERE DEGREE IN (3,4)

9.GROUP BY DEGREE,YEAR(STARTWORKDATE)

10.)

11.SELECT NAME FROM TEMP1, TEMP2 WHERE

12.TEMP1.DEGREE=TEMP2.DEGREE

13.AND TEMP1.WORDDATE=TEMP2.WORDDATE

14.AND SALARY

查询结果完全正确,但我们还有改善的空间,在查询结果集2的时候,我们是从user表中取得数据的。其实此时结果集1已经查询出来了,我们完全可以从结果集1中通过分组得到结果集2,而不用从uer表中得到结果集2,比较上面和下面的语句你就可以知道我说的是什么意思了!

[c-sharp]view plaincopyprint?

1.WITH TEMP1(NAME,DEGREE,WORDDATE,SALARY) AS

2.(

3.SELECT NAME,DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, SALARY1+SALARY2 AS SALAR

Y FROM USER WHERE DEGREE IN (3,4)

4.),

5.TEMP2 (DEGREE,WORDDATE,AVG_SALARY) AS

6.(

7.SELECT DEGREE,WORDDATE, AVG(SALARY) AS AVG_SALARY

8.FROM TEMP1

9.GROUP BY DEGREE,WORDDATE

10.)

11.SELECT NAME FROM TEMP1, TEMP2 WHERE

12.TEMP1.DEGREE=TEMP2.DEGREE

13.AND TEMP1.WORDDATE=TEMP2.WORDDATE

14.AND SALARY

可能有些朋友会说,我不用WITH语句也可以查出来,的确是这样,如下:

[c-sharp]view plaincopyprint?

1.SELECT https://www.wendangku.net/doc/1d15560453.html, FROM USER AS U,

2.(

3.SELECT DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, AVG(SALARY1+SALARY2) AS AVG_S

ALARY

4.FROM USER WHERE DEGREE IN (3,4)

5.GROUP BY DEGREE,YEAR(STARTWORKDATE)

6.) AS G

7.WHERE U.DEGREE=G.DEGREE

8.AND YEAR(U.STARTWORKDATE)=G.WORDDATE

9.AND (SALARY1+SALARY2)

那使用WITH 和不使用WITH,这两种写法有什么区别呢?一般情况下这两种写法在性能上不会有太大差异,但是,

1、当USER表的记录很多

2、硕士或博士(DEGREE IN (3,4))在USER表中的比例很少

当满足以上条件时,这两种写法在性能的差异将会显现出来,为什么呢?因为不使用WITH 写法的语句访问了2次USER表,如果DEGREE 字段又没有索引,性能差异将会非常明显。

当你看到这时,如果很好的理解了上面的内容,我相信你会对WITH语句有了一定的体会。然而WITH语句能做的还不止这些,下面给大家介绍一下,如何用WITH语句做递归查询。递归查询的一个典型的例子是对树状结构的表进行查询,考虑如下的情况:

[c-sharp]view plaincopyprint?

1.论坛首页

2.--数据库开发

3.----DB2

4.------DB2 文章1

5.--------DB2 文章1 的评论1

6.--------DB2 文章1 的评论2

7.------DB2 文章2

8.----Oracle

9.--Java技术

以上是一个论坛的典型例子,下面我们新建一个表来存储以上信息。

[c-sharp]view plaincopyprint?

1.CREATE TABLE BBS

2.(

3.PARENTID INTEGER NOT NULL,

4.ID INTEGER NOT NULL,

https://www.wendangku.net/doc/1d15560453.html, VARCHAR(200) NOT NULL---板块、文章、评论等。

6.);

7.insert into bbs (PARENTID,ID,NAME) values

8.(0,0,'论坛首页'),

9.(0,1,'数据库开发'),

10.(1,11,'DB2'),

11.(11,111,'DB2 文章1'),

12.(111,1111,'DB2 文章1 的评论1'),

13.(111,1112,'DB2 文章1 的评论2'),

14.(11,112,'DB2 文章2'),

15.(1,12,'Oracle'),

16.(0,2,'Java技术');

现在万事兼备了,我们开始查询吧。假设现在让你查询一下‘DB2 文章1’的所有评论,有人说,这还不简单,如下这样就可以了。

[c-sharp]view plaincopyprint?

1.SELECT * FROM BBS WHERE PARENTID=(SELECT ID FROM BBS WHERE NAME='DB2');

答案完全正确。那么,现在让你查询一下DB2的所有文章及评论,怎么办?传统的方法就很难查询了,这时候递归查询就派上用场了,如下:

[c-sharp]view plaincopyprint?

1.WITH TEMP(PARENTID,ID,NAME) AS

2.(

3.SELECT PARENTID,ID,NAME FROM BBS WHERE NAME='DB2'---语句1

4.UNION ALL---语句2

5.SELECT B.PARENTID,B.ID,https://www.wendangku.net/doc/1d15560453.html, FROM BBS AS B, TEMP AS T WHERE B.PARENTID=T.ID

---语句3

6.)

7.SELECT NAME FROM TEMP;---语句4

运行后,我们发现,结果完全正确,那它到底是怎么运行的呢?下面我们详细讲解一下。

1、首先,语句1将会执行,它只执行一次,作为循环的起点。得到结果集:DB2

2、接着,将循环执行语句3,这里我们有必要详细介绍一下。

首先语句3的意图是什么呢?说白了,它就是查找语句1产生结果集(DB2)的下一级,那么在目录树中DB2的下一级是什么呢?是‘DB2 文章1’和‘DB2 文章2’,并且把查询到的结果集作为下一次循环的起点,然后查询它们的下一级,直到没有下一级为止。

怎么样?还没明白?哈哈,不要紧,我们一步一步来:

首先,语句1产生结果集:DB2,作为循环的起点,把它和BBS表关联来查找它的下一级,查询后的结果为:‘DB2 文章1’和‘DB2 文章2’

接着,把上次的查询结果(也就是‘DB2 文章1’和‘DB2 文章2’)和BBS表关联来查找它们的下一级,查询后的结果为:‘DB2 文章1 的评论1’ 和‘DB2 文章1 的评论2’。

然后,在把上次的查询结果(也就是‘DB2 文章1 的评论1’ 和‘DB2 文章1 的评论2’)和BBS表关联来查找它们的下一级,此时,没有结果返回,循环结束。

3、第三,将执行语句2,将所有的结果集放在一起,最终得到temp结果集。

4、最后,我们通过语句4 从temp临时集合中得到我们期望的查询结果。

怎么样,这回理解了吧,如果还没有理解,那么我也无能为力了。需要特别提醒的是

1、一定要注意语句3的关联条件,否则很容易就写成死循环了。

2、语句2必须是UNION ALL

最后请大家猜想一下,把语句1的where子句去掉,将会产生什么样的结果呢?

DB2递归实现字符串分组连接操作

db2中的递归查询使用with来实现,也称为公共表达式,公共表达式在select语句的开始部分采用with子句的形式,在使用公共表达式的查询中可以多次使用它,并且公共表达式还可以通过取别名来连接到他本身,这样的话就可以达到循环的目的。

递归查询通常有3个部分需要定义:

一:一个公共表达式形式的虚拟表。

二:一个初始化表。

三:一个与虚拟表进行完全内连接的辅助表。

需要使用UNION all合并上边3个查询,然后用select从递归输出中得到最终的结果。

大体上如下形式

with XX(x1,x2,x3) as -------@0

(

select a.s,a.s1 from a ----@1

union all ----@2

select * from a,xx where a.s=xx.x1 ------@3

)

select ... from xx where .... -------@4

@0:为with体,即虚拟表

@1:为初始化表,这里需要定义初始化的一些行,也就是你递归的出发点,或者说父行,这部分逻辑只执行一次,它的结果作为虚拟表递归的初始化内容。

@2:这里必须用UNION all

@3:这里需要定义递归的条件(辅助表),这里定义递归的逻辑,需要注意的是父行和子行进行连接的时候逻辑一定要清楚父子关系,不然很容易变成死循环的,这里首先将初始化表的结果作为条件进行查询,在把执行的结果添加到虚拟表中,只要这里能查询出来记录,那么就会进行下一步递归循环。

@4:这里就是对虚拟表的查询语句。

需求:一张实时表,一个人每到一个地方,就有一条记录存在,存放样例:

张三上海

张三杭州

.....

要求,按人名进行汇总,将他到过的地方拼接,中间用'#'分隔

数据准备:

--创建表:

CREATE TABLE Recursive_Test

(User_Name VARCHAR(12),

City VARCHAR(12));

--数据插入

INSERT INTO Recursive_Test(User_Name,City)

values ('张三','杭州'),('张三','郑州'),('李四','杭州'),

('张三','南昌'),('李四','广州'),('王五','北京');

-----递归实现:

WITH Recursive_Test_Par(User_Name,City,Rk_Num) as(

SELECT User_Name,City,ROW_NUMBER() OVER(PARTITION BY User_Name) --分组,生成序列,自我关联之用

FROM Recursive_Test

),

City_Join(User_Name,City,R_Num) as(

SELECT User_Name,CAST(City AS VARCHAR(100)),Rk_Num from Recursive_Test_Par WHERE Rk_Num=1

UNION ALL

SELECT https://www.wendangku.net/doc/1d15560453.html,er_Name,CAST(a1.City||'#'||b1.City AS

VARCHAR(100)),a1.R_Num+1

from City_Join a1,Recursive_Test_Par b1

WHERE https://www.wendangku.net/doc/1d15560453.html,er_Name=https://www.wendangku.net/doc/1d15560453.html,er_Name and a1.R_Num=b1.Rk_Num-1

)

SELECT https://www.wendangku.net/doc/1d15560453.html,er_name,a.City FROM City_Join a INNER JOIN

(SELECT User_Name,max(R_Num) R_Num from City_Join

GROUP BY User_Name) b

ON https://www.wendangku.net/doc/1d15560453.html,er_name=https://www.wendangku.net/doc/1d15560453.html,er_name and a.R_Num=b.R_Num;

(另:

WITH RECURSIVE_TEST_PAR( USER_NAME, CITY, RK_NUM) AS(

SELECT USER_NAME, CITY, ROW_NUMBER() OVER(PARTITION BY USER_NAME) FROM RECURSIVE_TEST)

,CITY_JOIN( USER_NAME, CITY, R_NUM)AS(

SELECT USER_NAME, CAST(CITY AS VARCHAR(100)), RK_NUM

FROM RECURSIVE_TEST_PAR WHERE RK_NUM=1

UNION ALL

SELECT https://www.wendangku.net/doc/1d15560453.html,ER_NAME, CAST(A.CITY AS VARCHAR(100)||'#'||B.CITY), A.RK_NUM

FROM RECURSIVE_TEST_PAR A, CITY_JOIN B

WHERE https://www.wendangku.net/doc/1d15560453.html,ER_NAME=https://www.wendangku.net/doc/1d15560453.html,ER_NAME AND B.R_NUM=A.RK_NUM-1

)

SELECT https://www.wendangku.net/doc/1d15560453.html,ER_NAME,A. CITY FROM CITY_JOIN A INNER JOIN

(SELECT USER_NAME,MAX(R_NUM) R_NUM FROM CITY_JOIN

GROUP BY USER_NAME) B

ON https://www.wendangku.net/doc/1d15560453.html,ER_NAME=https://www.wendangku.net/doc/1d15560453.html,ER_NAME AND A.R_NUM=B.R_NUM)

--结果:

王五

北京

李四

杭州#广州

张三

杭州#郑州#南昌

C语言试题:数据类型、运算符与表达式

3 数据类型、运算符与表达式 一、单项选择题 1、以下选项中,不正确的 C 语言浮点型常量是( C )。 A. 160. B. 0.12 C. 2e4.2 D. 0.0 分析:e 后面的指数必须为整数。 2、以下选项中,( D )是不正确的 C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" 分析:在C 语言中,’a ’表示字符常量,”a ”表示字符串。 3、 在 C 语言中,字符型数据在计算机内存中,以字符的(C )形式存储。 A.原码 B.反码 C. ASCII 码 D. BCD 码 分析:将一个字符常量放入一个字符变量中,实际上并不是将字符本身放到内存单元中,而是将字符的对应的ASCII 码放到储存单元中。 4、若x 、i 、j 和k 都是int 型变量,则计算下面表达式后,x 的值是( C )。 x=(i=4,j=16,k=32) A. 4 B. 16 C.32 D.52 分析:(i=4,j=16,k=32)的值为最后一个表达式的值,即为32,所以x=32. 5、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B )。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 分析:算术运算符包括加法运算“+”符减法运算“-”符乘法运算符“*”以及除法运算符“/”,赋值运算符包括“=、+=、-=、*=、/=、……”,关系运算符包括“<、<=、>、>=”。 6、若有代数式bc ae 3 ,则不正确的C 语言表达式是( C )。 A.a/b/c*e*3 B. 3*a*e/b/c C.3*a*e/b*c D. a*e/c/b*3 分析:C 选项表达的是3ace/b 。 7、表达式!x||a==b 等效于( D )。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) 分析:由符优先级先后顺序在!x||a==b 中应先算“||”再算“!”,最后算“==”。选项B 不影响运算顺序。 8、设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是( A )。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 分析:先算括号里面的,a 不大于b ,则m=0,c 不大于d ,则n=0. 9、 设有语句 int a=3;,则执行了语句 a+=a-=a*=a;后,变量 a 的值是( B )。 A. 3 B. 0 C. 9 D. -12 分析:从后往前算,a*=a 即a=a*a ,a=9;然后a-=a=9,a=a-9,=0;a+=0,a=a+a=0. 10、在以下一组运算符中,优先级最低的运算符是( D )。

3表达式和语句

一、表达式 前面已经提到过表达式,相信大家对表达式也有了一个初步的认识,它是由常量、变量、运算符组合(到以后讲函数时,函数也可以是组成表达式的元素),计算以后返回一个结果值。表达式的结束标志是分号(;),C语言中所有的语句和声明都是用分号结束,在分号出现之前,语句是不完整的。 例如: 1+2; Counter/3+5; Height*Width; 表达式本身什么事情都不做,只是返回结果值。在程序不对返回的结果值做任何操作的情况下,返回的结果值不起任何作用,表达式的作用有两点,一个是放在赋值语句的右边,另一个是作为函数的参数(以后再介绍)。 表达式返回的结果值是有类型的。表达式隐含的数据类型取决于组成表达式的变量和常量的类型。因此,表达式的返回值有可能是某种大小的整型,或者是某精度的浮点型,或者是某种指针类型。 这里面就有类型转化的问题了,在前面说整型运算的时候也提到过。类型转化的原则是从低级向高级自动转化(除非人为的加以控制)。计算的转换顺序基本是这样的: 字符型-->整型-->长整型-->浮点型-->单精度型-->双精度型 就是当字符型和整型在一起运算时,结果为整型,如果整型和浮点型在一起运算,所得的结果就是浮点型,如果有双精度型参与运算,那么答案就是双精度型了。 强制转换是这样的,在类型说明符的两边加上括号,就把后面的变量转换成所要的类型了。如: (int) a; (float) b; 第一个式子是把a转换成整型,如果原先有小数部分,则舍去。 第二个式子是把b转换成浮点型,如果原先是整数,则在后面补0。 每一个表达式的返回值都具有逻辑特性。如果返回值为非0,则该表达式返回值为真,否则为假。这种逻辑特性可以用在程序流程控制语句中。 有时表达式也不参加运算,如: if(a||b) ………… 5>3?a++:b++; 当a为真时,b就不参加运算了,因为不管b如何,条件总是真。 二、语句 (一)、赋值语句 其实这个问题,在讲赋值运算符的时候已经讲了一些了。 Amount=1+2; Total=Counter/3+5; Area=Height*Width; 也许你会发现,这些赋值语句很象代数方程,在某些情况下,我们的确可以这样理解,但有时它们是不一样的。看下面: Num=Num+1; 这显然不是一个等式。

运算符与表达式练习题附答案

1. 以下运算符中优先级最高的是()。 A.&&B.+ C.!= D.?: 2.能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是()。 A.a>=10 or a<=0 B.a>=10| a<=0 C.a>=10 && a<=0 D.a>=10||a<=0 3. C语言中运算对象必需是整型的运算符是()。(A)+ (B)/ (C)% (D)* 4. 已知int i;float f;正确的表达式是()。 A)(int f)%i B) int(f)%i C) int(f % i) D) (int)f % i 5. 下列程序的输出结果是()。 void main( ) { int a=7,b=5; printf("%d\n",b=b%a); } (A)0 (B)1 (C)5 (D)不确定值6. 若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;

后,c的值为()。 (A)1.4 (B)1 (C)2.0 (D)2 7. 已知x=4.5,y=2.5,求表达式(x+y)/2+(int)y%(int)x的值()。 A) 3 B) 5 C) 3.5 D) 5.5 8. 已知各变量的类型如下 int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下符合C语言语法的表达式是()。 (A)a+=a-=(b=4)*(a=3)(B)a=a*3+2 (C)x%(-3)(D)y=float(i) 9. 已知int a,b;执行语句a=(b=3*2,b*4),a+6;后变量a的值为()。 A) 6 B) 12 C) 24 D)30 10. 若有以下程序 main() { int k=2,i=2,m; m=(k+=i*=k);

If引导条件状语从句的详细用法解答

If引导条件状语从句的详细用法解答 引导条件状语从句最常用的连词是if,常见的if条件状语从句表示在某条件下,某事很可能发生,条件是可能存在的,主句中某种情况发生的概率也是很高的。如: If you ask him,he will help you.如果你请他帮忙,他会帮你的。 If you fail in the exam,you will let him down.如果你考试不及格,你会让他失望的。 If you have finished the homework,you can go home.如果你作业做完了就可以回家了。 另外,if从句还表示不可实现的条件或根本不可能存在的条件,也就是一种虚拟的条件或假设。从句多用一般过去时或过去完成时,表示对现在或过去的一种假设。如: If I were you,I would invite him to the party.如果我是你,我会邀请他参加聚会。 I would have arrived much earlier if I had not been caught in the traffic.要不是交通堵塞,我本会来得早一些。 另外你还要注意if 条件句的时态搭配 1.if从句用一般现在时,主句用一般将来时 If he runs he’ll get there in time. 如果他用跑的,他就会及时赶到那儿。 The cat will scratch you if you pull her tail. 如果你拉猫的尾巴,它就会抓你。2.if从句用一般现在时,主句用may/might/can If the fog gets thicker the plane may/might be diverted. 如果雾在大一些,飞机可能就会改在别的机场降落。 If it stops snowing we can go out. 如果雪停了,我们就可以出去。 3.if从句用一般现在时,主句用must/should If you want to lose weight you must/should eat less bread. 如果你想减肥,你必须少吃面包。 4.if从句用一般现在时,主句用一般现在时 If you heat ice it turns to water. (也可用will turn)如果把冰加热,它就会化成水。5.if从句用现在进行时,主句用一般将来时 If you are looking for Peter you’ll find him upstairs. 如果你是在找彼得,上楼就会找到他。 6.if从句用现在完成时,主句用一般将来时 If you have finished dinner I’ll ask the waiter for the bill. 如果你吃完了,我就叫服务生来算账 注意: 学习" if " 引导的条件状语从句的用法,现在总结一下: if 条件句不一般,几个要点记心间; 条件句,放在前,逗号要放句中间。 条件句表可能,主句多用将来时; 条件句表事实,主句常用现在时。

C语言中的表达式及其知识要点

C语言中的表达式及其知识要点 绍兴文理学院沈红卫 C语言中数据类型、运算符等语法点最终归一到表达式(expression)。表达式是C语言的重点和难点。 何为表达式?表达式就是,由运算符、变量和常量组成的具有一个确定结果(值)的一个式子。由于C语言中运算符的广泛性和广义性,所以,C语言中的表达式也是广义的一个概念,与数学中的表达式既有相同之处,又有许多不同的地方。例如:y=x=3,这是一个赋值表达式;x+3,y*5,这也是一个表达式,是逗号表达式,因为“,”(逗号)在C里也是一个运算符。这些是数学所没有的。 说它是重点,是因为几乎所有语句都会涉及到表达式;说它是难点,是因为表达式的广义性,以及求解表达式的复杂性。 为了学好表达式,首先必须掌握C语言中的表达式的种类。C语言表达式的种类较多,主要有以下类型: 算术表达式:大家最熟悉的,例如:x+5*y,算术运算的表达式 关系表达式:x>=5,x<6,x==8,大小关系判断的表达式 逻辑表达式:ans==’y’||ans==’Y’,与、或、非三种逻辑运算的表达式 赋值表达式:x=6+y,进行变量赋值的表达式 条件表达式:x>y?1:0,如果x>y则取1,否则取0 逗号表达式:x+3,y*5,z-3,有逗号运算符组成的表达式 表达式结果求解是必须掌握的内容。求解一个表达式,必须使用三条规则:一是混合运算规则;二是优先级规则;三是结合性规则。 混合运算规则:当表达式涉及到不同的数据类型时,必须使用该规则,以确定表达式的结果的类型。该规则即教材P35中的“表达式中的自动类型转换规则”。 优先级规则:表达式涉及到多种运算符、优先级又各不相同时,必须使用该规则,就好像数学中的“先乘除后加减”。每种运算符的优先级参见教材P434“附录C”。例如:假设x=3,则算术表达式x+x*5,先乘后加,结果等于18。再如:假设x=3,则逻辑表达式x>5

(完整word版)C语言运算符与表达式的练习题答案

C语言运算符与表达式的练习题 单项选择题 (1)以下选项中,正确的 C 语言整型常量是(D)。 A. 32L B. 510000 C. -1.00 D. 567 (2)以下选项中,(D)是不正确的 C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" (3)字符串的结束标志是(C)。 A. 0 B. '0' C. '\0' D. "0" (4)算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B)。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 (5)逻辑运算符中,运算优先级按从高到低依次为(D)。 A. && ! || B. || && ! C. && || ! D. ! && || (6)表达式!x||a==b 等效于(D)。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) (7)设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是(A)。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 *(8)设有语句 int a=3;,则执行了语句 a+=a-=a*=a; 后,变量 a 的值是(B)。 A. 3 B. 0 C. 9 D. -12 (9)在以下一组运算符中,优先级最低的运算符是(D)。 A. * B. != C. + D. = (10)设整型变量 i 值为2,表达式(++i)+(++i)+(++i)的结果是(B,上机13)。 A. 6 B. 12 C. 15 D. 表达式出错 (11)若已定义 x 和 y为double 类型,则表达式的值是(D)。

if条件状语从句练习及答案

if_条件状语从句的时态练习及答案_初中习题集 I.单项选择 1.If you _____ to the party, you’ll have a great time. a. will go b. went c. go d. going 2.It will be a long time ____ peter _____ his work. a. since, has finished b. after, finishes c. when, will finish d. before, finishes. 3. what will father _____ us from Japan? a. take b. bring c. carry d. make 4. Weifang is famous ______ kites a. for b. to c. on d. with 5.I____ her the answer if she ____me. a. can tell, will ask b. will tell, will ask c. would tell, ask d. will tell, asks 6. – what are you going to do tomorrow? --we’ll go to the library tomorrow if it ___. a. isn’t rain b. rain c. won’t rain d. doesn’t rain 7.—Do you know when he will come back tomorrow? --sorry, I don’t know. when he ____ back, I’ll tell you. a. comes b. will come c. come d. may come 8. what will you do if you _____ to the old folk’s home visit? a. go b. went c.going d. will go

C语言运算符与表达式的练习题

C语言运算符与表达式的练习题 (作业写到纸质作业本上,在规定时间内交给助教批阅,不要 再网上提交) 一、单项选择题 (1) 以下选项中,正确的C 语言整型常量是。 A. 32L B. 510000 C. -1.00 D. 567 (2) 以下选项中,是不正确的C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" (3) 在C 语言中,字符型数据在计算机内存中,以字符 的形式存储。 A. 原码 B. 反码 C. ASCII 码 D. BCD码 (4) 字符串的结束标志是。 A. 0 B. '0' C. '\0' D. "0" (5) 算术运算符、赋值运算符和关系运算符的运算优先级按 从高到低依次为。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运 算、赋值运算

C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 (6) 逻辑运算符中,运算优先级按从高到低依次为。 A. &&,!,|| B. ||,&&,! C. &&,||,! D. !,&&,|| (7) 表达式!x||a==b 等效于。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) (8) 设整型变量m,n,a,b,c,d 均为1,执行(m=a>b)&&(n=c>d)后, m,n 的值是。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 (9) int b=0,x=1;执行语句if(x++) b=x+1; 后,x,b 的值依次为。 A. 2,3 B. 2,0 C. 3,0 D. 3,2 (10) 设有语句int a=3;,则执行了语句a+=a-=a*=a; 后,变量 a 的值是。 A. 3 B. 0 C. 9 D. -12 (11) 在以下一组运算符中,优先级最低的运算符是。 A. * B. != C. + D. =

if条件状语从句中虚拟语气

if条件状语从句中的虚拟语气 一、if条件状语从句中虚拟语气的判断判断是真实条件句还是非真实条件句。 只有在非真实条件句中才使用虚拟语气。通过句子意思,看假设的条件是否能够实现, 能够实现是真实条件句,不能使用虚拟语气; 假设的条件不能实现则是非真实条件句,要用虚拟语气。 1. “后退一步法”后退一步法是指在准确地判断了该句与哪一事实相反后,按虚拟语气的后退一步法处理从句谓语动词的时态。即:在非真实条件状语从句中,谓语动词按正常情况“后退一步”。也就是: ①与过去事实相反,在从句中用过去完成时形式表示。 ②与现在事实相反,在从句中用过去一般时形式表示。 ③与将来事实可能相反,在从句中用过去将来时形式表示。主句中则用情态动词would, should, could 等加一个与从句一致的动词形式。 例:⑴、If I had come her yesterday, I would have seen him. ⑵、If I were a teacher, I would be strict with my students. ⑶、If it should snow tomorrow, they couldn't go out. 2、注意事项: ①if条件句中如有were, should, had,可以省去if,并使用倒装语序。 ②在现代英语中if条件状与从句中的谓语动词如果是be其过去形式一般用were。 二、虚拟语气在if 引导的条件句中的用法: 1. If it weren’t for your help, we would get into trouble. 如果没有你们的帮助,我们就会陷入困境。(而事实上得到了你们的帮助) 2.If the weather were fine, I would go there. 如果天气好,我去那儿。(事实天气不好) 3.If I were you, I would read it again. 如果我是你的话,我再读一遍。(事实上我不是你) 4.If time permitted, I would write it again. 如果时间允许的话,我再写一遍。(事实上时间不允许) 5.If it weren’t snowing, we wouldn’t stay in the house. 要是现在不下雪的话,我们就不会待在屋里。(事实上现在下雪) 6.What would I do if I were in your place?要是我处于你地位我会怎么办?(事实上我不在你的位置上) 7.If he hurried, he could catch the first bus. 他要是快点能够赶上头班公共汽车。(可是他不着急) 8. If I were you, I should buy it. (从句用过去式动词were,主句用动词原形buy) 9. If I had time, I would study French. (如果有时间,我会学习法文。)(从句用过去式动词had,主句用动词原形study) 10. If she knew English, she would not ask me for help. (如果她懂英文,她就不必要我帮了。)(从句用过去式动词knew, 主句用动词原形ask) 注意:如果动作在进行中,主句要用:"主语+ would be + 进行式动词+ ……" 14. If they were here, he would be speaking to them now. (从句用过去式动词were, 主句用would be speaking)

第3章表达式与运算符测试

C语言第3章《运算符与表达式》测试题 一、选择题(每题2分,共50分) 1、表达式“2,4,6,8”的值为() A.2 B.4 C.6 D.8 2、以下程序的输出结果是() main() {int a=12,b=0x12; printf(“%d%d\n”,--a,++b); } A.12 12 B.12 18 C.11 10 D.11 19 3、设x和y都是int型变量,则执行表达式“x=(y=4,z=16),k=32”后,x的值为() A.4 B.16 C.32 D、52 4、设x为int型变量,执行语句“x=’A’;x*=2+2;”后,的值为() A.65 B.260 C.132 D.语句错误 5、若有语句“int a=5;a++*2;”则表达式“a++*2”的值为() A.7 B.12 C.5 D.10 6、设x和y为int型变量,表达式“x+=y;y=x-y;x-=y;”的功能是() A.把x和y按从小到大排列 B.把x和y按从大到小排列 C.无确定结果 D.交换x和y的值 7、下面程序的输出结果是() main() {int x=’\23’; printf(“%d\n”--x); } A.19 B.18 C.23 D.24 8、若变量f已定义为float型, i为int 型,则下面()表达式(或语句)能够实现将f的数值保留小数点后两位,第3位进行四舍五入的运算。 A.f=(f*100+0.5)/100.0 B.i=f*100+0.5,f=i/100.0; C.f=(int)(f*100+0.5)/100 D.f=(f/100+0.5)*100.0 9、下面表达式正确的是() A. a+b=5 B.56=a11 C.5.6+6.2%3.1 D.a=5,b=6,c=7 10、若t为double型变量,执行逗号表达式“t=(x=0,x+5),t++;”的输出结果是()

表达式与语句

表达式与语句 前面已经提到过表达式,相信大家对表达式也有了一个初步的认识,它是由常量、变量、运算符组合(到以后讲函数时,函数也可以是组成表达式的元素),计算以后返回一个结果值。表达式的结束标志是分号(;),C语言中所有的语句和声明都是用分号结束,在分号出现之前,语句是不完整的。例如: 1+2; Counter/3+5; Height*Width; 表达式本身什么事情都不做,只是返回结果值。在程序不对返回的结果值做任何操作的情况下,返回的结果值不起任何作用,表达式的作用有两点,一个是放在赋值语句的右边,另一个是作为函数的参数(以后再介绍)。 表达式返回的结果值是有类型的。表达式隐含的数据类型取决于组成表达式的变量和常量的类型。因此,表达式的返回值有可能是某种大小的整型,或者是某精度的浮点型,或者是某种指针类型。 这里面就有类型转化的问题了,在前面说整型运算的时候也提到过。类型转化的原则是从低级向高级自动转化(除非人为的加以控制)。计算的转换顺序基本是这样的:

字符型-->整型-->长整型-->浮点型-->单精度型-->双精度型 就是当字符型和整型在一起运算时,结果为整型,如果整型和浮点型在一起运算,所得的结果就是浮点型,如果有双精度型参与运算,那么答案就是双精度型了。 强制转换是这样的,在类型说明符的两边加上括号,就把后面的变量转换成所要的类型了。如: (int) a; (float) b; 第一个式子是把a转换成整型,如果原先有小数部分,则舍去。 第二个式子是把b转换成浮点型,如果原先是整数,则在后面补0。 每一个表达式的返回值都具有逻辑特性。如果返回值为非0,则该表达式返回值为真,否则为假。这种逻辑特性可以用在程序流程控制语句中。 有时表达式也不参加运算,如: if(a||b) ………… 5>3?a++:b++; 当a为真时,b就不参加运算了,因为不管b如何,条件总是真。 二、语句 (一)、赋值语句

习题三(运算与表达式)

习题三 一、选择题 1.若有代数式 bc ae 3,则不正确的C 语言表达式是( C )。 A. a/b/c*e*3 B. 3*a*e/b/c C. 3*a*e/b*c D. a*e/c/b*3 2.在C 语言中,要求运算数必须是整型的运算符是( D )。 A. / B. = C. ++ D. % 3.若有定义语句:int a=7;float x=2.5,y=4.7; 则表达式x+a%3*(int)(x+y)%2/4的值( A )。 A.2.500000 B. 2.750000 C.3.500000 D.0.000000 4.若有定义int x=5,y=2,则表达式5/2的结果为(B )。 A. 2.5 B. 2 C. 2.0 D. 3 5.判断char 型变量ch 是否为大写字母的正确表达式是( C )。 A. …A ?<=ch<=?Z ? B. (ch>=?A ?)&(ch<=?Z ?) C. (ch>=?A ?)&&(ch<=?Z ?) D. (ch>=?A ?)and(ch<=?Z ?) 6.为表示关系a ≥b ≥c,则正确的C 语言表达式为( C )。 A. a>=b>=c B. (a>=b)&(b>=c) C. (a>=b)&&(b>=c) D. (a>=b)||(b>=c) 7.逻辑运算符两侧运算对象的数据类型(D )。 A.只能是0或1 B.只能是0或非0正数 C.只能是整型或字符型 D.可以是任何数据类型 8.下列运算符中,优先级最高的是( B )。 A. < B. + C. && D. == 9.设x 、y 、z 是int 型变量,且有x=3,y=4,z=5,则下面表达式中值为0的是( D )。 A. …x ?&&?y ? B. x<=y C. x||y+z&&y-z D. !((x=y&&chb )&&(n=c>d)后,n 的值为( C )。 A. 0 B. 1 C. 2 D. 3 13.判断char 型变量c 是否为0到9的数字的正确表达式为( C )。 A. …0?<=c<=?9? B. 0<=c<=9 C. c>=?0?&&c<=?9? D.c>=0&&c<=9 14.设有int x=3,y=4,z=5,则执行表达式!(x+y )+z-1&&y+z/2的结果是( D )。 A. 6 B. 0 C. 2 D. 1

if引导的条件状语从句知识点及练习题

if引导的条件状语从句 (一)定义 if引导的句子在复合句中表示条件,假如if从句的动作发生,主句的动作就(不)会发生,因此称为条件状语从句。 (二)位置 if 引导的条件状语从句位置灵活,可直接放在主句后面,也可以放在句首。放在句首时,从句后面要用逗号和主句隔开。 ① If I have enough money, I will travel around the world. ② I will travel around the world if I have enough money. (三)用法 ① Work hard, and you?ll pass the exam easily. 努力学习,你将很容易通过考试。 →If you work hard, you?ll pass the exam easily. ② Hurry up, or you?ll miss the train. 快点儿,否则你就赶不上火车了。 →If you don?t hurry up, you?ll miss the train. (3)当主句含有情态动词时,if引导的条件状语从句通常用一般现在时。 We must study hard if we want to pass the final exam. 如果想通过期末考试,我们必须努力学习。 (4)用含介词with或without的介词短语转换。 ① If you help me, I'll finish my job soon. →With your help, I'll finish my job soon. 如果你帮我,我将很快完成我的工作。 ② If there is no water, fish can?t live. → Fish can?t l ive without water. 离开水,鱼不能生存。 (四)if引导的条件状语从句与if引导的宾语从句的区别 if引导宾语从句时表示“是否”,位于及物动词之后; if引导的条件状语从句时表示“假如,如果”,位于句首或句中。 ①I don't know if he will come tomorrow. ②If he comes, I'll call you. 练习 一、选择题 1. _____ you don't go to bed earlier, you will feel tired in the morning. A. Unless B. If C. Though D. Until 2. Why not look up the new word in a dictionary _____ you don't know it? A. if B. that C. though D. whether 3. Talk to your teacher and you will get help _____ you have a problem. A. unless B. if. C. until D. so 4. I won't go to tomorrow's party _____ I'm invited. A. if B. unless C. when 5. The children will climb the hill if it _____ tomorrow.

运算符和表达式

运算符和表达式 上课到这一课相隔了好长一段时间,这些日子里收到不少网友的来信支持和鼓励,要求尽快完成余下的部分。出门在外的人不得不先为吃饭而努力,似乎这也成为我的借口,以后每晚抽空打一些吧这样大家也就可以不用隔太久就能看到一些新东西。或许我的笔记并不是很正确,但我尽量的保证每课的实验都会亲自做一次,包括硬件的部分,已求不会误人子弟。 随着访问量不断的增加,网站已启用了https://www.wendangku.net/doc/1d15560453.html,的国际域名,在这里我感谢各位一直支持磁动力工作室的朋友,更要感激身在远方一直默默支持我的女友。 明浩2003-7-14 晚 呵,费话少说了。上两课说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧。这个语句就是typedef,这是个很好用的语句,但我自己却不常用它,通常我定义变量的数据类型时都是使用标准的关键字,这样别人可以很方便的研读你的程序。如果你是个DELPHI编程爱好者或是程序员,你对变量的定义也许习惯了DELPHI的关键字,如int类型常会用关键字Integer来定义,在用C51时你还想用回这个的话,你可以这样写: typedef int integer; integer a,b; 这两句在编译时,其实是先把integer定义为int,在以后的语句中遇到integer就用int置换,integer就等于int,所以a,b也就被定义为int。typedef不能直接用来定义变量,它只是对已有的数据类型作一个名字上的置换,并不是产生一个新的数据类型。下面两句就是一个错误的例子: typedef int integer; integer = 100; 使用typedef可以有方便程序的移植和简化较长的数据类型定义。用typedef还可以定义结构类型,这一点在后面详细解说结构类型时再一并说明。typedef的语法是typedef 已有的数据类型新的数据类型名 运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。表达式则是由运算及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。 赋值运算符 对于"="这个符号大家不会陌生的,在C中它的功能是给变量赋值,称之为赋值运算符。它的作用不用多说大家也明白,就是但数据赋给变量。如,x=10;由此可见利用赋值运

if条件状语句

if引导的条件状语从句 if引导的条件状语从句是初中阶段英语学习的重要语法,请观察下面的例句,然后补全结论部分所缺的内容。 【例句】 1. If the children study hard, they’ll get good grades. 2. If I don’t get up early, I can’t catch the early bus. 3. She’ll give her mother a hand if she has enough time. 4. If you learn to listen to others, you’ll have many friends. = Learn to listen to others, and you’ll have many friends. 5. If you don’t write carefully, you’ll make a mistake. = Write carefully, or you’ll make a mistake. 【结论】 根据观察可知:if是从属连词,意为“如果”,用来引导条件状语从句。 1. 结构:通过观察例句可知,在含有if引导的条件状语从句的复合句中,if 引导的条件状语从句既可放在主句之前(此时常用逗号将其与主句隔开),也可放在主句之后。 2. 时态:通过观察例句可知,如果主句的谓语动词用一般将来时或主句的谓语动词中含有情态动词时,if引导的条件状语从句的谓语动词常用________时表示将来的含义。 3. 转换:在含有if引导的条件状语从句的复合句中,当主句的主语和从句的主语都是________时,可以与其他句型进行同义句的转换:可转换为“祈

If引导条件状语从句的用法

◆if引导的条件状语从句 条件状语从句是在复合句中作条件状语的句子。表示假如有从句的动作发生就会有主句的动作发生。条件状语从句常由从属连词if引导。 ◆if引导的条件状语从句使用须知: 一、位置 if引导的条件状语从句,既可放在主句之前也可放在主句之后。当从句置于主句之前时,常用逗号与主句隔开。例如: You will catch the bus if you get up early. =If you get up early, you will catch the bus. 如果你早起的话,就能赶上公共汽车。 二、时态 应遵循主、从句时态呼应的原则。当主句是一般现在时(包含祈使句和含情态动词can, may, must等的句子),从句也用一般现在时。例如: You must see the doctor if you are ill. 如果你生病了,你必须去看医生。 If you want to go skating, wear warm clothes. 如果你想去滑冰,穿上暖和点的衣服。 一.选择正确答案。 1. It was raining heavily___ we got to Paris. A. while B. if C. when D. because 2. I don’t know if ___ tomorrow. A. it doesn’t rain B. the rain will stops C. the rains won’t stop D. it won’t rain 3 . The volleyball match will be put off if it___ . A. will rain B. rains C. rained D. is raining 4. Difficulties are nothing if we ___ not afraid of them A. will B. shall C. are D. do 5. We ___ Beijing tomorrow if it doesn’t rain. A. are going to B. would C. shall D. will go 6. I don’t like to be interrupted if I___ . A. speak B. will speak C. am speaking D. spoke 7. If you ___ the book you will understand the story better. A. will be reading B. have read C. will have read D. read 8. If you ___ I will go with you

第3章练习 表达式和语句

编程题: 1.输入一名学生的成绩,判断该成绩的等级。 如>=60的,显示“合格”,<60的显示“不合格”。 程序: #include //输入输出流对象的头文件 void main() { int score; //声明成绩变量,用来保存分数 cout<<”输入成绩:”; //提示用户的信息 cin>>score; //从键盘上输入分数传递给score if( score>=60) //判断该条件是否真或假 cout<<”合格”<=60是真的时候,运行该语句 else cout<<”不合格”<=60是假的时候,运行该语句 } 分析: (1)首先该题目要求输入一个分数,则事先声明一个整型变量score。 (2)其次从键盘上输入该分数,应有输入语句cin,并由上面定义的变量来保存分数。 (3)然后根据分数来判断等级,有两种情况应该用if语句。 (4)输出的信息是根据不同条件显示字符串,用到cout输出流对象。 (5)用到标准输入输出流对象,所以在程序前加相应头文件。 2.编写一个能输出以下信息的程序。 How are you. Fine,thank you. 程序: #include V oid main() { Cout<<”How are you.”< void main() { int sum=0; sum=78+45; //求和 cout<<"78+45= "< void main() { int a,b,c,sum; //定义变量 cout<<"input three number:\n"; cin>>a>>b>>c; //从键盘输入三个数给变量a和b、c sum=a+b+c; //求和

第三章 运算符与表达式

第三章运算符与表达式 3、1 C运算符简介 运算符:狭义的运算符是表示各种运算的符号。 表达式:使用运算符将常量、变量、函数连接起来,构成表达式。 C语言运算符丰富,范围很宽,把除了控制语句和输入/输出以外的几乎所有的基本操作都作为运算符处理,所以C语言运算符可以看作是操作符。C语言丰富的运算符构成C语言丰富的表达式(是运算符就可以构成表达式)。运算符丰富、表达式丰富、灵活。 在C语言中除了提供一般高级语言的算术、关系、逻辑运算符外,还提供赋值符运算符,位操作运算符、自增自减运算符等等。甚至数组下标,函数调用都作为运算符。 C的运算符有以下几类: ++,-- 本章主要介绍算术运算符(包括自增自减运算符)、赋值运算符、逗号运算符,其它运算符在以后相关章节中结合有关内容陆续进行介绍。 3、2 算术运算符和算术表达式

1、算术运算符 +(加法运算符。如3+5) -(减法运算符或负值运算符。如5-2,-3) *(乘法运算符。如3*5) /(除法运算符。如5/3,5.0/3) %(模运算符或求余运算符,%要求两侧均为整型数据。如7%4的值为3)。 除了负值运算符-单目运算符外,其它都是双目运算符。 说明: (1)两个整数相除的结果为整数,如5/3的结果为1,舍去小数部分。但是如果除数或被除数中有一个为负值,则舍入的方向是不固定的,多数机器采用“向0取整”的方法(实际上就是舍去小数部分,注意:不是四舍五入)。 (2)如果参加+,-,*,/运算的两个数有一个为实数,则结果为double型,因为所有实数都按double型进行计算。 (3)求余运算符%,要求两个操作数均为整型,结果为两数相除所得的余数。求余也称为求模。一般情况,余数的符号与被除数符号相同。 例如:-8%5=-3;8%-5=3 2、算术表达式 算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为算术表达式。运算对象可以是常量、变量、函数等。 例如,下面是一个合法的C算术表达式。a*b/c-1.5+’a’。

相关文档