c语言week4

1-2.表达式 ( (ch = getchar() ) != '\n') 是关系表达式。T

意思是:

输入回车后跳出循环
((ch = getchar()) != '\n')
先做 ch=getchar() 然后把这个表达式的值 与'\n'进行判断 做为循环跳出条件

1-4.

以下C语言表达式的值为“真”。

'D' - 'A' == 'd' - 'a'

1-5。

1-6。优先级排序如下:算术大于关系大于逻辑。但逻辑非除外,它比以上说的优先级都高。

1-8.逻辑值只有两个值,即true(真)和false(假),在C语言中true用1表示,false用0表示。

2-1.0,8>6为真即1,1>3为假即0,验证如下:

#include <stdio.h>

int main()

{

printf("%d\n",8>6>3);

}

输出结果:0

2-3.逻辑运算符两侧运算对象的数据类型(可以是任意类型的数据)。

2-6。下列选项中,值为1的表达式是____。   A. 1-'0'   B. 1-'\0'   C. '1'-0   D. '\0'-'0'

我们要得到的结果,是内存中两个值得差
而千万不要以它们在我们面前的表现形式而误导,这么写只是为了方便而已
A:‘\0’ ASCII码 值就是0 所以 1-0 =1
B:'0' ASCII码 值应该是48(貌似)值不是1
C:'1'-0 同上
D 0 - 48 != 1

2-7.

设有定义:

int a = 1, b = 2, c = 3, d = 4, m = 2, n = 2; 

则执行表达式

(m = a < b) && (n = c > d);

后,n的值为(0)

m=1,n=0;解释如下,如果a<b成立,则系统认为其为真,真值为1,反之若不成立,则为假,真值为0。

因为(m=a<b)这个式子值为1,在&&这个运算符中,先判断&&左边的表达式是否为真,为真才会对&&右边的(n=c>d)进行处理。

此题因为&&左边的表达式为真(若左边的表达式为假,则此题n=2,),所以会处理&&右边的(n=c>d)这个式子,由以上分析,(c>d)为假,其真值为0,所以n为0。

则执行表达式

(m = a > b) && (n = c > d);

后,n的值为(2)

执行之后 m =0 n=3
因为 执行到 m=a>b时候 这个值返回是0 不成立 所以后面的 n=c>d 就不执行了 也就是 n 还是原来的值没有变

2-8.表达式(x%3)等价于表达式( x%3!=0)。考点,C语言中的逻辑表达式,非0为真。

2-11.设 int x=1, y=1; 表达式(!x||y--)的值是( 1 )。

1.先算!x,结果为0;

2.再算y--,结果为1,y的值变为0;

3.再算逻辑或||,0或1,结果为1。所以最后结果为1

优先级:自减运算符>逻辑非运算符>逻辑或

基本的优先级需要记住:

指针最优,单目运算优于双目运算,如正负号。

先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7。

逻辑运算最后结合。简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。

扩展资料:

运算符计算的时候还要注意左结合性和右结合性:

C语言中各运算符的结合性分为两种:左结合性和右结合性。

例如:算术运算符的结合性是自左至右,即先左后右。

如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。

而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。

C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。(上文的优先级有分辨左右结合性)。

2-12.?

2-13.

判断char型变量ch是否为大写字母的c语言表达式是ch>='A' && ch<='Z' 。

char用于C或C++中定义字符型变量,取值是字符常量,只占一个字节。系统在表示一个char型变量时,是将变量的ASCII码存入内存。取值范围为 -128 ~ +127。所以可以直接用大写字母对应的ASCII码进行判断。即判断char型变量ch是否为大写字母的c语言表达式是ch>='A' && ch<='Z' 。

扩展资料:

C语言中如int、long、short等不指定signed或unsigned时都默认为signed,但char在标准中不指定为signed或unsigned,编译器可以编译为带符号的,也可以编译为不带符号的。

字符型变量的值由单引号括起来,字符串变量的值由双引号括起来。字符变量只能是单个字符,字符串变量则可以含一个或多个字符。可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。

大写字母的ascii码值连续,所以只需要判断头尾即可
ch>='A' && ch<='Z'             符合 则为大写,否则不是大写。

2-14.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是( C)
A、c=b=a; B、(a=c)||(b=c); C、(a=c)&&(b=c); D、a=c=b;
A和D都是错误的表达式,
B只能把C的值赋给变量a,因为c不为零。所以(a=c)的值也不零,那么不管“||”后面的值是否为零,(a=c)||(b=c)的值始终为1,所以计算机不会再浪费时间去处理“||”后面的表达式,因为计算机已经得到(a=c)||(b=c)的值了。同理,如果(a=c)的值为零,计算机也不会再去处理“&&”后面的表达式。

关于自增自减运算符的优先级

1注意运算符的运算对象
自增、自减运算符只能作用于变量,而不能作用于常量或表达式。因为自增、自减运算符具有对运算量重新赋值的功能,而常量、表达式无存储单元可言,当然不能做自增、自减运算。只要是标准类型的变量,不管是整型、实型,还是字符型、枚举型都可以作为这两个运算符的运算对象。如以下四个表达式都是合法的:i+++j++、++i+(++j)、++a+b++、++array〔--j〕;而++6、(i+j)++、‘A’++、++i+++j、(&p)++这五个表达式却是不合法的。为什么i+++j++合法,而++i+++j却不合法?C的编译器对程序编译时,从左到右尽可能多地将字符组合成一个运算符或标识符,因此i+++j++等效于(i++)+(j++),两个“++”作用的对象都是变量,这是合法的;而++i+++j等效于++(i++)+j,第1个“++”作用的对象是表达式“i++”,这是不允许的。

2注意运算符的结合方向
表达式k=-i++等效于k=(-i)++还是k=-(i++)?因为负号运算符和自增运算符优先级相同,哪一个正确就得看结合方向。自增、自减运算符及负号运算符的结合方向是从右向左。因此,上式等效于k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为6。此赋值表达式的值即为所赋的值-5。不要因为k=-i++等效于k=-(i++)就先做“++”运算!这里采用的是“先用后变”,即先拿出i的值做负号“-”运算,把这个值赋给变量k之后变量i才自增。

2-15.

设x、y、t均为int型变量,则执行语句:

x=y=3;t=++x||++y;

后,y的值为()

解答:||x=y=3;首先3赋值给x和y,x=3;y=3

然后t=++x||++y;这个语句要理解||这个的含义

例如:A||B当A为真(不等于0为真)时,这个语句就成立了,不再考虑B的值,也不再处理B的表达式;所以,t=++x||++y;x=3时候,t=++x(就t=4);++y不用处理的

如果:A||B当A为假时候(等于0)就处理B的表达式

就这样:x=3,y=3,t=4;

||是符号或,优先级是从左到右判断。如果第一个语句为真则结果为真,不执行第二个语句直接跳出;如果第一个语句为假则执行第二个语句,当第二个语句为真时结果是真,为假时结果为假。因为x是3,++x就是4,所有非零的数字都是真,所以t的值直接为1,不执行++y,所以y还是最初赋值的3.

2-16.执行printf("%f",(x=3,y=5,x>y?1:1.5));后的输出结果是(1.50000)。

?:是一个表达式的方式,相当于x>y成立吗?成立就是1,不成立就是1.5。

2-18.

已知int i, a; 执行语句后,变量i的值是(30)

i=(a=2*3,a*5),a+6;

这里考察的是C语言中运算符的优先级,先执行括号的程序,然后执行逗号运算符,先执行a=2*3,再执行a*5,取右操作数,然后赋值给i,就是30。

拓展训练:在C程序中,逗号运算符的优先级最低。

C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。

如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。

而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。

C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级

关于int main()和int main(void)

C语言 int main0 和 int main(void) 的区别?
int main(void)指的是此函数的参数为空,不能传入参数,如果你传入参数,就会出错。
int main() 表示可以传入参数。

2-19. 定义变量int a,b;,则表达式a = (b = 3, 4), 5;执行过后,ab的值分别是4,3。

4-1.下列程序运行后的输出结果是 10200

int a=10, b=20,c;
c=(a%b<1)‖(a/b>1);
printf("%d %d %d\n", a, b, c);

输出a=10,b=20,因为=(赋值运算符)比||逻辑或运算符优先级低,所以c最后被判断为0

5-1. 解答:2#5#

当a=1,b=2,c=3时,打印语句printf(“%d#%d#”,(a, b), a>b?(c=4):(c=5))的输出是__

逗号表达式,它将以逗号为界,从左到右依次计算每个表达式的值,最后返回最右边的表达式的值。

5-4.三角形:a+b>c&&a+c>b&&b+c>a||a==b==c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值