C参考答案与复习题cWord格式文档下载.docx

上传人:b****3 文档编号:14840081 上传时间:2022-10-25 格式:DOCX 页数:15 大小:50.42KB
下载 相关 举报
C参考答案与复习题cWord格式文档下载.docx_第1页
第1页 / 共15页
C参考答案与复习题cWord格式文档下载.docx_第2页
第2页 / 共15页
C参考答案与复习题cWord格式文档下载.docx_第3页
第3页 / 共15页
C参考答案与复习题cWord格式文档下载.docx_第4页
第4页 / 共15页
C参考答案与复习题cWord格式文档下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C参考答案与复习题cWord格式文档下载.docx

《C参考答案与复习题cWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《C参考答案与复习题cWord格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

C参考答案与复习题cWord格式文档下载.docx

特例如赋值“x=y=3”,先计算y=3、再计算x=y。

特例将特别指出,一般按缺省。

主要介绍算术(包括自增自减)、关系、逻辑、赋值、逗号运算符,以及由这些运算符构成的各类表达式。

3.2算术运算符与算术表达式

内容:

算术运算符及其功能,算术表达式,优先级、运算时的类型转换规则。

3.2.1算术运算符

1.算术运算符

C的算术运算符有:

+-*/%(取余)

其中“-”可作单目运算符,如-5,表达式3*-5值为-15。

各运算符优先级:

先乘除、后加减;

取余的优先级和乘除相同。

优先级的讨论,应限于同一层括号内,同级运算一般从左到右执行。

具体规则如下:

•字符类型数据以该字符的ASCII值参加运算,参与运算的字符可以看作一个特殊的整型数。

如12.5+'

A'

的值为77.5,其中'

以该字符ASCII值65参加运算。

•各种类型数据作算术运算的有关规则,详见下页“2.算术运算中的类型转换”。

特别要注意的是,两个整型数据作“/”运算时,结果是整数。

比如:

5/4的结果是1,而5.0/4的结果为1.25。

灵活地应用/的整除性质,有助于我们对整型量作一些特殊处理。

例如,求整型变量k的十位上的数,可以写作k%100/10(验证:

给定k如1765代入,k%100得65,65/10得6)。

•%只能用于整数和字符的运算,不能用于实型数据。

2%3结果为2,34%5的结果为4,'

%6结果为5。

用算术运算符和括号将运算对象连接起来、符合C语法规则的式子称C算术表达式。

运算对象包括常量、变量、函数等。

如下面是合法的表达式:

例1.C的算术表达式示例

[1+x(a+b)1/3]*x写作:

(1+x*(pow(a+b,1.0/3)))*x

写作:

cos(y/sqrt(x*x+y*y))

求整型变量m个、十、百位之和,写作:

m%10+m/10%10+m/100%10

2.算术运算中的类型转换

自动类型转换

同一表达式中参与运算的变量和常量可能有不同类型:

C需要自动转换其中一个操作数值的类型,与另一操作数相同后参加运算。

一般转换规则:

char→short→int→float→double

即:

参加运算的表达式类型转换至其中字长最长的数据类型;

同样字长的情况下的转换应保证计算结果的精度。

如:

计算表达式12-'

3'

则先将字符常量转换为int类型,表达式的值为-39(因为字符'

的ASCII值为51)。

又如:

声明为floatpi=3.14159;

intd=180;

时计算pi/d;

相除的两操作数字长相同,转换d为float类型后,再作除法运算。

注意:

每次转换只涉及参与运算的两个操作数。

如计算5/3+3.9的结果是4.9。

计算5/3时,执行的还是整除运算,结果为1;

在计算1+3.9的时候,才把整数1转换为double类型,和3.9相加。

强制类型转换

除了自动实现类型转换外,还可强制类型转换,其格式为:

(类型标识符)表达式

int类型变量i、j相除,写作(float)i/j、(double)i/j,运算结果分别为float、double类型。

对表达式中变量而言,无论是自动或强制类型转换,仅是为本次运算需要,而不改变变量类型。

如计算(float)i/j并未改变声明为int类型的变量i为float类型。

例2.按照下列要求,写出相应C的算术表达式。

设x是正实数,写出不大于x的最大整数。

(int)x

计算float类型变量x的整数部分与y的小数部分之和。

(int)x+y-(int)y

求正整数m的位数。

(int)log10(m)+1

3.2.2自增、自减运算

自增、自减运算是特殊的算术赋值运算,且只能用于整型变量。

自增运算符为++,自减运算符为--。

前缀格式运算符变量后缀格式变量运算符

功能:

前缀格式先使变量加(减)1,再用其值参加所在表达式运算;

后缀格式则反之。

如果单独使用,前缀、后缀格式没有区别。

如i++和++i都表示i=i+1,i--和--i也是同样。

但当自增、自减运算作为某个表达式的一个组成部分时,不同格式会产生不同效果:

intx=3,y;

y=--x+3;

y=x--+3;

printf("

%d%d\n"

x,y);

printf("

%d%d\n"

先执行x=x-1,x当前值2;

再执行y=x+3,x为2、y为5;

先执行y=x+3,x当前值为3;

再执行x=x-1,x为2、y为6。

例3.分析下面程序的运行结果。

#include<

stdio.h>

voidmain()

{inta,b,c;

a=2;

b=2;

c=++a+b--;

a=%d,b=%d,c=%d\n"

a,b,c);

a=2;

b=2;

c=-a---b;

a=%d\t"

a++);

b=%d\t"

++b);

c=a+b;

c=%d\n"

c);

}

【运行结果】a=3,b=1,c=5

a=1,b=2,c=-4

a=2b=3c=6

通过以上例题,可以得出关于自增、自减运算优先级的结论:

表达式中前缀格式自增、自减运算符的优先级,高于表达式中其它运算符;

表达式中后缀格式自增、自减运算符的优先级,低于表达式中其它运算符。

例4.运行下列程序,分析结果。

{inti=6,j=6,k,m;

k=++i+i+++i++;

m=j+++j+++j++;

i=%dj=%d\nk=%dm=%d\n"

i,j,k,m);

}

【运行结果】i=9j=9

k=21m=18

【程序说明】在BC++或其他运行环境下可能会得出不同结果。

同一个程序,在不同的运行环境中得到不同结果。

在保证程序正确性的前提下,应以易读性标准为第一。

建议不要用自增、自减运算构造颇具复杂性的表达式,以避免损害程序易读性而导致错误。

3.3赋值运算符与赋值表达式

通过赋值运算,可以把一个表达式的值赋给一个变量,赋值的对象只能是变量(包括下标变量)。

3.3.1赋值运算符

格式:

变量名=表达式

能:

先计算表达式的值,再将计算结果送给变量。

赋值表达式后加分号即为赋值语句,即:

变量名=表达式;

例如a=1+2*3.14159;

执行步骤:

计算1+2*3.14159的值赋给a。

•“=”左边只能是变量,3=x;

、3+x=y;

都不是合法的语句。

•赋值运算自右向左

语句a=b=c=5;

先执行c=5再执行b=c,最后执行a=b。

建议不要写出类似“i=(k=j+1)+(j=5);

”的赋值语句,因为不同系统处理可能不同,先执行k=j+1或先执行j=5会导致不同结果。

3.3.2赋值运算时的数据类型转换

1.数据类型的赋值转换

在x=e中,若x与e类型不同,C会自动完成类型转换:

将表达式的值转换为与变量同类型的数据再赋值,具体规则如表2-4所示。

若x是值为3的int类型变量,则表达式x=x+1.8的值是4。

若c是字符变量,执行c=1345;

putchar(c);

后输出字符A。

因为整数1345的补码00000000000000000000010101000001,赋值给单字节的c,只能取其低字节内容01000001,为65。

2.有符号数和无符号数的转换问题

因为两者编码上有差异,当有符号整数赋值给无符号整型变量时会产生变化,例如声明shorta=-1;

unsignedshortb;

,执行语句b=a;

后b的值为65535。

因为值为-1的短整型数的补码表示为1111111111111111,如赋值给b,b的编码也是1111111111111111。

由于b是一个无符号数,其最高位的1代表一个正的值215,所以b的值为65535。

shorta=1;

执行语句b=a;

后b的值也是1。

3.3.3复合算术赋值运算

形如i=i+2、s=s*(x-9.81)的算术赋值语句,C提供了缩写的运算符,表示为i+=2、s*=x-9.81。

实际是算术、位运算等运算符与赋值运算符的合成、简化,称为复合赋值运算符。

+=复合加赋值)-=复合减赋值*=复合乘赋值

/=复合除赋值%=复合取余赋值

例如:

a+=3等价于a=a+3,x*=y+8等价于x=x*(y+8),y/=4等价于y=y/4,m%=3等价于m=m%3。

在运算中,表达式作为运算的一个整体。

如s*=x-9.81等同于s=s*(x-9.81),不能理解为s=s*x-9.81。

不是非使用不可,初学者可少用、不用复合赋值运算符。

但作为C程序员,应理解这些运算符。

3.4关系运算符、逻辑运算符与逻辑表达式

程序中,往往需要根据某些条件作出判断,由条件的成立(真)与否(假)决定流程。

C中用逻辑表达式来实现条件判断。

用关系运算符可构成关系表达式。

关系表达式的值是逻辑值,因此关系表达式也是逻辑表达式。

逻辑表达式用逻辑运算符做正确连接后,也是逻辑表达式。

C中逻辑表达式使用广泛。

if语句根据其中逻辑表达式的值决定执行哪一个分支,循环语句for、while要根据其中逻辑表达式值决定循环过程是否继续。

如何根据条件写出C逻辑表达式,是本节学习应掌握的内容。

3.4.1关系运算符

关系运算是双目运算,用于比较两个运算量间的大小关系。

关系表达式格式:

表达式关系运算符表达式

关系表达式成立,其值为1;

关系表达式不成立,其值为0。

1.关系运算符

>

>

=<

<

===!

=

运算结果:

成立为1,不成立为0。

关系表达式也是逻辑表达式。

例如下列语句作用是输出i、i+1、i+2、…,当i为21时终止。

while(i<

=20){

%d\n"

i);

i++;

关系运算符比较两操作数的数量关系。

如i<

=20,若i不大于20那么表达式的值为1(真);

否则为0(假)。

易犯错误:

误将==写作=。

x==3和x=3完全不同!

前者判断x和3是否相等,是关系运算,对x的值并没有影响;

后者是赋值运算,经过赋值后,x的值为3。

一般不对实型数作相等或不等判断。

由于浮点编码的特殊性,某些实数(如0.3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1