c语言.docx
- 文档编号:29211852
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:13
- 大小:24.78KB
c语言.docx
《c语言.docx》由会员分享,可在线阅读,更多相关《c语言.docx(13页珍藏版)》请在冰豆网上搜索。
c语言
6.假设所有变量均为整形,则表达式(a=2,b=5,b++,a+b)的值是(b)。
a)7b)8c)6d)2
逗号表达式,返回的是最后一个下面
7.四个选项中,均是不合法的用户标示符的选项是__c___
a)AP_0do
b)floatla0_A
c)b-agotoint
d)_123tempINT
C语言规定的标识符只能由字母、数字、下划线三种字符组成,第一个字符必须为字母或下划线,并且不能使用c语言中关键字作为标识符。
而选项c中的goto和int是关键字,b-a中的“-”不是组成标识符的三种字符之一。
14.在c语言中,要求运算数必须是整型的运算符是__d______.
a)/b)++c)!
=d)%
%整除求余运算,两个运算数必须是整型
17.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为___c____.
a)intb)floatc)doubled)不确定
∙首先计算i*f,因为i为double,f是float,按照自动转换规则,编译器将其结果转换为double
∙然后计算a+i*f,此时+号后面是double,a是整形,因此编译器首相将a转换为double然后进行结算
结果是double
18.以下程序的输出结果是__d______.(注意:
_表示空格)
main()
{
printf("\n*s1=%15s*","chinabeijing");
printf("\n*s2=%-5s*","chi");
}
a)*s1=chinabeijing___*b)*s1=chinabeijing___*
*s2=**chi**s2=chi__*
c)*s1=*__chinabeijingd)*s1=___chinabeijing*
*s2=**chi**s2=chi__*
%ms:
输出的字符串占m列,如果字符串本身长度大于m,则突破获m的限制,将字符串全部输出。
若串长小于m,则左补空格。
%-ms:
如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
19.阅读以下程序,当输入数据的形式为:
25,13,10
main()
{
intx,y,z;
scanf("%d%d%d",&x,&y,&z);
printf("x+y+z=%d\n",x+y+z);
}
a)x+y+z=48
b)x+y+z=35
c)x+z=35
d)不确定值
25,13,10这里的逗号,
正确的输入形式为251310
以空格或回车键分割
21.若有以下定义,则正确的赋值语句是__b________.
inta,b;floatx;
a)a=1,b=2,b)b++;c)a=b=5d)b=int(x);
A是赋值语句,句子和句子之间用分号隔开。
而D是强制性转化,应该写成(int)x。
C中,c语言是允许这样赋值的,但是最后缺分号。
至于B的话,其实,a,b都没有初始化,是一个任意值,不过语法来说的话,B是正确的相当于b=b加1
22.逻辑运算符两侧运算对象的数据类型___d_
a)只能是0或1
b)只能是0或非0正数
c)只能是整型或字符型数据
d)可以是任何类型的数据
如果是C语言,并且不是按位逻辑运算,答案肯定是D
因为C中的规定是非零数字表示真,0表示假,而逻辑运算就是对真假进行计算,所以在C中是任何类型的数据都可以进行逻辑运算,只要是非零数字就会被认为是真,再进行逻辑运算时按真处理。
如果是C语言,并且是按位逻辑运算(比如按位与&运算符),答案C正确,答案A肯定错。
因为对于按位逻辑,是进行的二进制按位计算,因此要求两侧操作数是整型,当然字符型数据可以按ASCII码自动转换为整型,所以字符数据也可以进行按位逻辑运算。
按位逻辑运算不可能只能对0或者1进行计算,因为那样的话就失去意义了,只能对0或者1操作还有什么意义,就是4种结果,可能吗?
23.以下关于运算符优先顺序的描述中正确的是__c___.
a)关系运算符<算术运算符<赋值运算符<逻辑与运算符
b)逻辑与运算符<关系运算符<算术运算符<赋值运算符
c)赋值运算符<逻辑与运算符<关系运算符<算术运算符
d)算术运算符<关系运算符<赋值运算符<逻辑与运算符
算术、关系、逻辑运算符
用来表示各种运算的符号称为运算符。
例如,数值运算中经常用到的加、减、乘、除符号就是运算符。
由于它们是进行算术运算的,所以称为算术运算符。
运算符必须有运算对象。
C语言中的运算符的运算对象可以是一个,称单目运算符;运算对象也可以是两个,称双目运算符;运算对象还可以是三个,称三目运算符。
单目运算符若放在运算对象的前面称为前缀单目运算符;若放在运算对象的后面称为后缀单目运算符。
双目运算符都是放在两个运算对象的中间。
三目运算符在C语言中只有一个(条件运算符),是夹在三个运算对象之间的。
每个运算符都代表对运算对象的某种运算,都有自己特定的运算规则。
每个运算符运算的对象都规定了数据类型,同时运算结果也有确定的数据类型。
用运算符把运算对象连接起来所组成的运算式在C语言中称为"表达式"。
每个表达式都可以按照运算符的运算规则进行运算,并最终获得一个值,称为表达式的值。
当表达式中出现多个运算符,计算表达式值时,就会碰到哪个先算,哪个后算的问题,我们把这个问题称为运算符的优先级。
计算表达式值时,优先级高的运算要先进行。
注意,在复杂的表达式中,用圆括号括住的部分要先算,其优先级别高于任何运算符。
若在圆括号中又有圆括号,则内层圆括号优先于外层圆括号。
┌基本算术运算符(+,-,*,/,%)
┌算术运算符┤
│ └增1减1运算符(++,--)
│
│关系运算符(>,<,==,>=,<=,!
=)
│逻辑运算符(!
,&&,||)
│
│ ┌基本赋值运算符(=)
┌基本运算符┤赋值运算符┤
│ │ └算术自反赋值运算符(+=,-=,*=,/=,%=)
│ │
│ │逗号运算符(,)
│ │条件运算符(?
:
)
C语言运算符┤ │数据长度运算符(sizeof)
│ │
│ │ ┌位逻辑运算符(~,&,|,^)
│ └位运算符┤位移位运算符(>>,<<)
│ └位自反赋值运算符(&=,|=,^=,>>=,<<=)
│
│ ┌强制运算符(( ))
└专用运算符┤下标运算符([])
│成员运算符(->,.)
└指针运算符(&,*,+,-)
C语言运算符分类
注意C语言中的运算符都是键盘上的符号(如|、~、^等)或若干符号的组合(如&&、||、>>、<<、->等),书写或输入时不要出错。
此外,少数运算符号有双重含义,主要有下列几个:
(1)"+"号。
在算术运算中既表示单目的取正运算,又可表示双目的加法运算,在指针运算中表示双目的加法运算。
(2)"-"号。
在算术运算中既表示单目的取负运算,又可表示双目的减法运算,在指针运算中表示双目的减法运算。
(3)"*"号。
在算术运算中表示双目的乘法运算,在指针运算中表示指针变量指向的变量。
(4)"&"号。
在位逻辑运算中表示双目"与"运算,在指针运算中表示取地址的运算。
这些两重含义运算符的理解与当时的运算对象有关,在学习时要注意区分。
一、算术运算符
算术运算符包括基本算术运算符和增1、减1运算符,其中基本运算符常简称为算术运算符。
1.基本算术运算符
基本算术运算符是对数据进行简单算术运算的。
要注意字符型数据也可以看成整型数据,参加基本算术运算。
对象数
名称
运算符
运算规则
运算对象
运算结果
结合性
单目
正负
+
-
取原值
取负值
整型或实型
整型或实型
自右向左
双目
加
减
乘
除
+
-
*
/
加法
减法
乘法
除法
自左向右
模
%
整除取余
整型
整型
双目加(+)、减(-)、乘(*)运算和普通算术运算中的加法、减法和乘法相同。
例如,2.1+3.6的结果是5.7;2.1-3.6的结果是-1.5;2.1*3的结果是6.3。
双目除运算(/)和运算对象的数据类型有关。
若两个对象都是整型数据,该运算称为"整除",即获得的商是整数。
若商有小数,则截去小数部分。
若两个运算对象有一个或两个都是实型,则运算结果是实型。
例如,14/5,结果为2;而14/5.0,则结果为2.8。
双目模运算(%)的对象必须是整型数据,结果是整除后的余数。
例如,14%5的结果为4(商为2);14%4的结果为2(商为3)。
注意运算结果的符号与被除数相同,例如,13%3、13%-3的结果均为1(商分别为4、-4);-13%3、-13%-3的结果均为-1(商分别为-4、4)。
算术运算符的优先级规定如下:
⑴单目基本算术运算符 优先于 双目基本算术运算符
⑵*、/、% 优先于 +、-
⑶同级单目基本算术运算符的结合性是自右向左
⑷同级双目基本算术运算符的结合性是自左向右
【例】基本算术运算符的使用。
设变量定义如下:
intn=10,m=3;
floatf=5.0,g=10.0;
doubled=5.0,e=10.0;
则:
-n的结果是-10
n+m、n-m、n*m、n%m的结果分别为13、7、30、3、1
d+e、d-e、d*e、d/e的结果分别为15.0、-5.0、50.0、0.5
n+m-f*g/d的运算顺序相当于(n+m)-((f*g)/d),结果是3.0
n%m*f*d的运算顺序相当于((n%m)*f)*d,结果是25.0
2.增1减1运算符
增1减1运算符都是单目运算符,是用来对整型、字符型、指针型以及数组的元素等变量进行算术运算的,运算的结果仍是原类型,并存回原运算对象。
用增1减1运算符和运算对象组成表达式时,运算符可以放在运算对象的前面(称前缀),也可以放在运算对象的后面(称后缀),前缀和后缀的功能略有不同。
增1(或减1)运算符作为前缀使用时,是先对运算对象加1(或减1),然后再使用加1(或减1)后的运算对象。
增1(或减1)运算符作为后缀使用时,是先使用不加1(或减1)的运算对象,然后再对运算对象加1(或减1)。
对象数
名称
运算符
运算规则
运算对象
运算结果
结合性
单目
增1(前缀)
增1(后缀)
减1(前缀)
减1(后缀)
++
++
--
--
先加1,后使用
先使用,后加1
先减1,后使用
先使用,后减1
整型或
字符型或
指针型或
下标等
同运算对
象的类型
自右向左
增1减1运算符的优先级如下:
⑴增1减1运算符优先于双目基本算术运算符
⑵增1减1运算符和单目基本算术运算符+、-同级别,结合性是自右向左
例如,设整型变量a为2,则:
++a+1结果为4,变量a为3
a--+1结果为3,变量a为1
当出现难以区分的若干个+或-组成运算符串时,C语言规定,自左向右取尽可能多的符号组成运算符。
例如,设整型变量a、b均为2,则:
a+++b应理解成(a++)+b,结果为4,a为3,b不变
a---b应理解成(a--)-b,结果为0,a为1,b不变
【例】增1减1运算符的使用。
设变量定义如下:
charc1='b',c2='B';(c1、c2可看成整型,其值分别为98、66)
则:
++c1的值是99,运算后c1的值是'c'
c1--的值是98,运算后c1的值是'a'
c1+++c2的值是164,运算后c1的值是'c',c2的值是'B'
c1---c2的值是32,运算后c1的值是'a',c2的值是'B'
二、关系运算符
关系运算符是用来比较两个数据大小的,运算的结果是成立或不成立。
如果成立,则结果为逻辑值"真",用整数"1"表示;如果不成立,则结果为逻辑值"假",用整数"0"表示。
对象数
名称
运算符
运算规则
运算对象
运算结果
结合性
双目
小于
小于或等于
大于
大于或等于
等于
不等于
<
<=
>
>=
==
!
=
满足则为真,
结果为1
不满足为假,
结果为0
整型
或
实型
或
字符型
等
逻辑值
(整型)
自左向右
所有关系运算符都是双目运算符,所组成的表达式称为关系表达式。
关系表达式的结果是逻辑值,若为"真"用整数1表示;若为"假"用整数0表示。
关系运算符可以用来比较两个数值型数据的大小,也可以比较两个字符型数据的大小。
字符数据比较时是按该字符对应的ASCII代码值的大小进行比较,其实质也是数值比较。
关系运算符的优先级如下:
⑴ 算术运算符优先于关系运算符
⑵ <,<=,>,>=优先于==,!
=
⑶ <,<=,>,>=同级,结合性是自左向右
⑷ ==,!
=同级,结合性是自左向右
因此,"3<2<2"作为关系式来说是正确的,先计算"3<2"的结果为"0"(假);再计算"0<1"的结果是"1"(真)。
当然,这个计算过程与原式数学中的含义(3<2并且2<1)是不同的,这一点请同学们特别注意。
【例】关系运算符的使用。
设变量定义如下:
charc1='a',c2='A';(c1、c2可看成整型,其值分别为97、65)
intn1=65,n2=97;
floatf1=0.3E1,f2=3.0001;
则:
c1>c2、n1 c1>=n1、c2>=n2、c1==n2的值依次是1、0、1 f1>c1、f2 c1>c2>=1<=0==1! =0的值是0 注: 运算顺序相当于((((c1>c2)>=1)<=0)==1)! =0 c1>c2>=n1<=n2==f1! =f2的值是1 注: 运算顺序相当于((((c1>c2>)=n1)<=n2)==f1)! =f2 三、逻辑运算符 逻辑运算符是对两个关系式或逻辑值进行运算的,运算结果仍是逻辑值。 在C语言中,逻辑值是用数值非0和0来表示逻辑真和假的,所以逻辑运算符也可以对两个数值型数据进行运算,包括整型、实型、字符型等数据。 对象数 名称 运算符 运算规则 运算对象 运算结果 结合性 单目 逻辑非 ! 参看下表 数值型或 字符型等 逻辑值 (整型) 自右向左 双目 逻辑与 逻辑或 && || 自左向右 a 非运算 ! a 0(假) 非0(真) 1(真) 0(假) 对象1a 对象2b 与运算a&&b 或运算a||b 0(假) 0(假) 非0(真) 非0(真) 0(假) 非0(真) 0(假) 非0(真) 0(假) 0(假) 0(假) 1(真) 0(假) 1(真) 1(真) 1(真) 注意其中的&&是由2个"&"组成的,||是由2个"|"组成的。 单目逻辑运算符(! )是前缀运算符,双目逻辑运算符是插在两个运算对象中间,所组成的表达式称为逻辑表达式。 逻辑表达式的运算结果是逻辑值。 若运算结果为逻辑真,则获得1;若运算结果是逻辑假,由获得0。 要特别注意逻辑真的表示方法,对参加运算的逻辑真,是用非0值来表示的;而运算结果的逻辑真是用数值1来表示的。 而对逻辑假,不管是参加运算,还是运算结果,都是用数值0来表示的。 逻辑运算符的优先级如下: ⑴ ! 优先于 双目算术运算符 优先于 关系运算符 优先于 && 优先于 || ⑵ 单目逻辑运算符! 和单目算术运算符是同级别的,结合性是自右向左 ⑶ 双目逻辑运算符的结合性是自左向右 ! 的结合性是自右向左的,即先计算最右边的! ,再依次向左计算其它的! 。 例如,! ! ! 10的计算顺序相当于! (! (! 10)),结果为0。 &&和||的结合性是自左向右的,即先计算最左边的&&(或||),再依次向右计算其它的&&(或||)。 例如,10&&1&&0的计算顺序相当于(10&&1)&&0,结果为0。 又如,0||0||5的计算顺序相当于(0||0)||5,结果为1。 还要提醒读者注意的是,用&&对两个表达式进行计算时,若第一个表达式的值为"假",则运算结果与第二个表达式的值无关,结果肯定为"假",所以C语言规定此时第二个表达式将不再计算。 同样用||对两个表达式进行计算时,若第一个表达式的值为"真",则运算结果与第二个表达式的值无关,结果肯定为"真",所以C语言规定此时第二个表达式也不再计算。 例如定义a为整型变量,则0&&(a++)的运算结果为0,a值不变;1||(a++)的运算结果为1,a值也不变。 【例】逻辑运算符的使用。 设变量定义如下: charc1='a',c2='A';(c1、c2可看成整型,其值分别为97、65) intn1=65,n2=97; floatf1=3.0,f2=3.0001; 则: ! c1的值是0,n1&&n2的值是1,f1||f2的值是1,! (c2>c1)的值是1,! n2>n1的值是0,f1>f2||! c1的值是0,n1+32==n2&&n1==c2的值是1。 25.判断char型变量ch是否为大写字母的正确表达式是__c_____. a)'A'<=ch<='Z'b)(ch>='A')&(ch<='Z') c)(ch>='A')&&(ch<='Z')d)('A'<=ch)AND('Z'>=ch) A65,a97 29.设有: inta=1,b=2,c=3,d=4,m=2,n=2; 执行(m=a>b)&&(n=c>d)后n的值为___b____. a)1b)2c)3d)4 n的值仍然为2,没有改变! 过程: 先计算a>b,值为0,赋给m的值为0,表达式m=a>b的值也是0。 对于&&逻辑运算,不管后面(n=c>d)的值如何,都不影响(m=a>b)&&(n=c>d)的最终结果,因此,C语言不再对表达式n=c>d进行计算。 因而n的值没有改变! ! 30.已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是_________. if(x>y) z=x;x=y;y=z; a)x=10,y=20,z=30b)x=20,y=30,z=30 c)x=20,y=30,z=10d)x=20,y=30,z=20 如果X>Y 执行Z=X,因为X不大于Y,所以Z=X这句话不执行,继续向下执行 36.下面程序段的运行结果是__a_______. a=1;b=2;c=2; while(a printf("%d,%d,%d",a,b,c); a)1,2,0b)2,1,0c)1,2,1d)2,1,1 a 1<2为1,1 若有下面的程序段: chars[]="china";char*p;p=s;则下列叙述正确的是___D_____问题在下边,求详解 2012-12-2014: 121211情分类: Windows|浏览1965次 A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等 C)s数组长度和p所指向的字符串长度相等D)﹡p与s[0]相等 答案: D A: s是字符数组,p是指向字符串的指针 B: 显然数组s中的内容和指针变量p中的内容不相等,应该换一种说法“数组s中的内容和指针变量p所指向的字符串的内容相等” C: s数组的长度为6(包含结束符'\0'),p所指向的字符串长度为5 D: *p='c',s[0]='c' 37.有下面的程序段 chara[3],b[]="China"; a=b; printf("%s",a); 则_____d__. a)运行后将输出ChinaB)运行后将输出Ch b)运行后将输出ChiD)编译出错 D.编译出错 原因是空间不够 数组a中的空间只有3 b中放到a中溢出 38.判断字符串s1是否大于字符串s2,应当使用__d_____. a)if(s1>s2)b)if(strcmp(s1,s2)) c)if(strcmp(s2,s1)>0)d)if(strcmp(s1,s2)>0) strcmp是比较两个字符串的大小,两个字符串相同时返回0,第一个字符串大于第二个字符串时返回一个正值,否则返回负值. 比较两个字符串的算法是: 逐个比较两个串中对应的字符,字符大小按照ASCII码值确定,从左向右比较,如果遇到不同字符,所遇第一对不同字符的大小关系就确定了两个字符串的大小关系,如果未遇到不同字符而某个字符串首先结束,那么这个字符串是较小的,否则两个字符串相等。 39.下面描述正确的是___d__. a)两个字符串所包含的字符个数相同时,才能比较字符串 b)字符个数多的字符串比字符个数少的字符串大 c)字符串"STOP"与"STOP"相等 d)字符串"That"小于字符串"The" b错,字符串比较是从左到右第一个不一样第开始比较哪个大就哪个大,和字符串的长度没关系,当一个字符串短,他和长第字符串比较,长字符串前面和短字符串完全相同,那么长字符串大。 c前一个字符串末尾有一个空格,后一个则没有,所以不相等。 40.若有说明;int*p,m=5,n;以下正确的程序段的是____d____. a)p=&n;b)p=&n; scanf("%d",&p);scanf("%d",*p); c)scanf("%d",&n);d)p=&n; *p=n;*p=m; D是正确的 A,B中p是n的地址那么如果要输入n应该是scanf("%d",p); C中p还没定义给*p赋值就是给一个没有开辟的地址赋值了 D是正确
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言