c语言.docx

上传人:b****8 文档编号:29211852 上传时间:2023-07-21 格式:DOCX 页数:13 大小:24.78KB
下载 相关 举报
c语言.docx_第1页
第1页 / 共13页
c语言.docx_第2页
第2页 / 共13页
c语言.docx_第3页
第3页 / 共13页
c语言.docx_第4页
第4页 / 共13页
c语言.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

c语言.docx

《c语言.docx》由会员分享,可在线阅读,更多相关《c语言.docx(13页珍藏版)》请在冰豆网上搜索。

c语言.docx

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,正确的输出结果为___d___.

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是正确

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

当前位置:首页 > 医药卫生 > 基础医学

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

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