c语言不同数据类型运算例题,基本数据类型和运算典型例题分析与解答

1 在c语言中,不允许有常量的数据类型是()

①整型         ②结构型        ③字符型        ④字符串

【分析】C语言中,允许出现整型、实型、字符型、字符串的常量,其中整型常量又区分为短整 型常量和长整型常量。

【答案】②

2 下列数据中,不属于常量的是()

① 123L       ②'\012'      ③"12.3L"    ④ 12.3L

【分析】④中的数据不是常量,因为实型常量是不区分单精度和双精度的,12.3后跟字母L 是错误的;①中是长整型常量;②中是以转义字符方式出现的字符型常量;③中是字 符串常量。

【答案】④

3 -12345E-3代表的十进制实数是________________________。

【分析】这是用指数形式表示的实型常量,对于指数形式“土aaaaaE土bbb”的实数,其值为“土 aaaaax 10土bbb”。("土"表示正负)

【答案】- 12.345

4 字符串“\\012\012”在内存中占用的字节数是___________________个。

【分析】一个字符串所占用的内存字节数等到于其中字符的数目再加1。题目中给出的字符串中'\\'

是1个转义字符;'0'、'l'、'2'分别都是单个字符;‘\012'是一个用八进制数表示的转义字符,所以其中单个字符的数目为5,该字符串占用的内存字节数等于5+l,其中增加的1个字节用于存放“字符串结束标记”符号‘\0'。

【答案】6

5 设短整型变量x的值为12,假定分配给x的内存单元地址是0xff00,和0xff01,则在程序中能表示变量x的地址是()

① 0xff00     ② oxff01     ③&x    ④&12

【分析】C语言规定,任何变量的地址,在程序中用“&变量名”来表示。

【答案】③

6 下列说法中,错误的是()

①变量的定义可以放在所有函数之外

②变量的定义可以不放在本编译单位中,而放在其他编译单位中

③变量的定义可以放在某个函数的函数头中

④变量的定义可以放在某个复合语句的开头

【分析】①中定义的变量是正确的,这种变量是外部变量;②中定义的变量是正确的,这种变量在本编译单位中要说明为“外部参照型”变量;④中定义的变量是允许的,这种变量称为内部变量,其作用域只能是本复合语句。此外,在任何函数的函数体中都可以定义变量,所定义的变量也是内部变量,其作用域是本函数。但是,在函数中定义变量时,只能在“函数体”的开头定义,不能在“函数头部分”进行定义。

【答案】③

7 变量的存储类型主要是指_______________________________。

【分析】定义变量时的存储类型有4种选择:一是“自动型(auto)”,这时变量被分配在可以重。

复使用的内存难栈区;二是“寄存器型(register)”,这时变量被分配在主机(CPU)中的寄存器;三是“静态型(static)”,这时变量被分配在不能重复使用的内存数据区;四是“外部参照型(extern)”,这时仅说明该变量的定义是在其他编译单位,不在本编译单位中。由上述分析,可以看出,定义变量时选择存储类型,主要是选择给变量分配的单元在何处。

【答案】给变量分配的单元在何处

8 下列说法中,正确的是( )

①自动型变量是分配在内存的数据区

②寄存器型变量是分配在内存的数据区中

③静态型变量是分配在内存的数据区中

④外部参照型变量是分配在内存的数据区中

【分析】按照变量在定义时的存储类型,给变量分配内存将有 3种方式:一是内存的数据区,这个地方的单元是不能重复使用的,它指定分配给“静态型(static)”变量;二是内存的堆栈区,这个地方的单元是能重复使用的,它指定分配给‘启动型(auto)”变量;三是主机(CPU)中的寄存器对,这个地方是可以重复使用的,它指定分配给“寄存器型(register)”变量;至于“外部参照型(extern)”变量不是在本编译单位中定义的,它只是用来说明需要在其他编译单位中去寻找这个变量的定义,以便确定该变量的存储特性和数据类型。

【答案】③

9 从变量的存储类型来看,不能对变量进行初始化的是()

① extern     ② auto     ③ register      ④ static

【分析】因为“外部参照型(extern)”变量的定义不是在这儿定义的,这儿仅是说明该变量的定义在其他编译单位中,所以这种存储类型的变量不能初始化。

【答案】①

10 下列说法中,正确的是()

①从变量的作用域角度,我们把变量分为“全局变量”和“局部变量”

②从不同编译单位的角度,我们把变量分为“内部变量”和“外部变量”

③外部变量总是全局变量,它的作用域是从定义点到本程序的末尾

④静态型变量总是全局变量,它的作用域是从定义点到本程序的末尾

【分析】①的分析:全局变量和局部变量是从变量的生存期角度来划分的,在程序运行期间内始终存活的变量一律是全局变量;在程序运行期间内,局部时间内存活的变量一律是局部变量。②的分析:内部变量和外部变量是从变量的定义位置来划分的,在函数内部定义的变量一律是局部变量;在函数外部定义的变量一律是外部变量。④的分析:静态型变量的存活期是整个程序的运行期,所以它是全局变量,但是,如果该变量是在函数内部定义的,那它就是内部变量,内部变量的作用域只能是所定义的函数内部,不是从定义点到程序的末尾。

【答案】③

11 麦达式“13.5>13L<2.5”的值是________________。

【分析】注意这样的表达式在语法上是正确的。按照“关系运算将的优先级和结合性”可知,要先计算“>”,后计算“<”。计算“13.5>13L”,结果为真(值为1);接着计算“1<2.5”,结果为1。

【答案】l

12 设字符型变量ch中存放字符“A”,则执行“ch+++2”后,ch中的字符是________。

【分析】按照多个运算符结合在一起时的确认规则:自左向右选择尽可能多的合法运算符来看,表达式“ch+++2”应理解“(ch++)+2”,由于“++”是后缀运算符,所以先取出ch的值(字符“A”的ASCll代码值为 65),执行“65+ 2”的运算,结果为 67。注意这是表达式的值,并不是变量由中的值。由于变量 oh还要进行“后缀”的“++”运算,所以变量ch的值是“65+ 1”,其值为 66,是字符“B”。

【答案】B

13 关于表达式“2>l>0?3>2>l:4>3>2?5>4>3:6>5>4”的准确说法是()

①语法出错     ②表达式值为非0     ③表达式值为l      ④表达式值为0

【分析】分析结出的表达式可知是一个条件表达式。按照条件运算符和关系运算符的优先级来说,整个表达式相当于“(2>1>0)?(3>2>1):(4>3>2)?(5>4>3):(6>5>4)”;再从条件运算符的结合性来说,整个表达式相当于“(2>1>0)?(3>2>1):((4>3>2)?(5>4>3):(6>5>4))",所以该表达式的语法是正确的。接下来我们可以具体计算这个表达式的值:首先计算局部表达式“(4>3>2)?(5>4>3):(6>5>4)”,(4>3>2)的结果是((4>3)>2)= (1>2)=o;显然这个局部表达式的值就是表达式"6>5>4".其值为0,再计算整个表达式“(2>1>0)?(3>2>1):0”,其中(2>1>0)的结果是((2>1)>0)=(1>0)=1,所以这个表达式的值是(3>2>1),其值为0,所以整个表达式的值为0。

【答案】④

14 设字符型变量ch1中存放的字符是“A”,字符型变量ch2中存放的字符是“B”,则执行“(ch1='B')||(ch2='C')”的运算后,变量ch2中的字符是_____________。

【分析】按照圆括号优先的原则,先计算(ch1='b'),则字符型变量ch1中存放的是字符'B';由于(chl='B')是一个赋值表达式,该表达式的值就是赋予变量chl的值“B”,这个值是非以真)。由于下面要进行的运算是“逻辑或”,C语言规定当出现“表达式l:表达式2”这样的运算时,如果“表达式1”的值为真,则这个结果为真,表达式2将不再计算。按照这个原则,上述表达式中的“(ch2='C')”将不再计算,所以字符型变量ch2中的值木改变。

【答案】B

15 设整型变量x1和x1的值均为10,则表达式“x1/=x2-4'的值是_______________。

【分析】C语言规定,对于自反赋值运算符来说,“变量自反赋值运算符表达式”中的表达式将会自动增加圆括号,所以,本题中的表达式相当于“x1=x1/x2-4)”,很容易看出该表达式的值就是: x1/=(x2-4)=10/(l0-4)=10/6=l(注意这儿是整除)。

【答案】 l

16 设字符型变量x的值是064,表达式“-x^x<<2&x”的值是()

①0333     ②333     ③0x333      ④020

【分析】首先注意变量x的值是八进制整型常量,表示成8位二进制数为:001 10100。其次,分析表达式中的位运算符的优先级别,可知该表达式相当于“(~x)^((x<<2)&x)”,下面可以依次进行计算,部分计算结果如下:

x                       00110100

~x                      l1001011

x<<2                  11010000

(x<<2)&x             00010000

(~x)^((x<<2)&x)    110ll011

二进制数“11011011'对应的八进制数是0333,所以备选答案①是正确的。

【答案】 ①

17 在C语言中,如果某个关系表达式成立(真),则该关系表达式的值是____;如果某个逻辑表达式为假,则该逻辑表达式的值是_________。

【分析】在C语言中,数据类型中没有设置逻辑型数据,而是用数值型数据来代替。具体的规则如下:

当计算一个逻辑型表达式时,结果为真则值为肝结果为假则值为0。

当把一个任意表达式作为逻辑表达式看待时,其值为非0则看作真;其值为0时看作假。

【答案】 1     0

18 设有整型变量x,如果表达式“!x”值为0,则x的值为_________;如果表达式“!x”值为1,则x的值为___________。

【分析】“!x”的值为1,显然x的值为0,这是很简单的。“!x”的值为0时,则要具体分析x的值。一般读者很容易想到x的值为1,这个答案不能说是错误的,但是不完全。例如x的值为2,“!x”的值也为0;x的值为-1,“!x”的值也为见由此想到,C语言中从逻辑角度来判断某个表达式时,原为:表达式值为0,代表假;表达式值为非0,代表真。

【答案】非0

0

19 表达式“(short)10L*1.l”的数据类型是__________________型。

【分析】C语言规定的数据类型强制转换形式是:(数据类型符)(表达式),其结果是将指定表达式值强制转换成指定的数据类型。如果其中的表达式是常量或变量,则可以不要圆括号,例如,“(数据类型符)变量运算符表达式”,则只有“变量”的数据类型被转换,而不是“变量运算符表达式”的运算结果值被转换。按照上述原则,题目中的“(Short)”仅将长整型常量10转换成短整型数据,再和单精度实数“1.1”运算,这时将利用运算时的类型转换原则(就长不就短,数据长度小的转换成数据长度大的),先将短整型的10转换成单精度数据,再进行运算,结果是单精度型。

【答案】单精度

20 下列表达式中,不属十逗号表达式的是()

①a=b,c     ②a,b=c      ③a=(b,c)     ④a,(b=c)

【分析】4个备选答案中的表达式都很简单,仅含有两个运算符:赋值运算符和远号运算符。按照运算符的优先级别,“=”优先于“,”,所以赋值运算要先计算,这样备选答案①、②中显然最后计算的是远号运算符,当然是远号表达式;备选答案④中赋值运算用圆括号括住,显然是返号表达式;备选答案③中圆括号括住的是逗号运算符,所以赋值运算要后算,这个表达式是赋值表达式。

【答案】③

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值