数据类型及表达式练习题

更新时间:2024-01-18 04:17:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数据类型及表达式习题

1. 选择题

1. 若x、i、j、k都是int型变量,则计算下面表达式后,x的值为 x=(i=4,j=16,k=32) A) 4 B) 16

C) 32

D) 52

2. 下列四组选项中,均不是C语言关键字的选项是( ) A) define

IF

type

B) getc char printf C) include case scanf D) while go pow

3.下列四组选项中,均是不合法的用户标识符的选项是( A) W P_0 do B) b-a goto int C) float la0

_A D) -123 abc TEMP

4. 下列四组选项中,均是合法转义字符的选项是( )

)

A) ‘\\”’ ‘\\\\’ ‘\\n’

B) ‘\\’ ‘\\017’ ‘\\”’ C) ‘\\018’ ‘\\f’

‘xab’

D) ‘\\\\0’ ‘\\101’ ‘xlf’

5. 下面正确的字符常量是( ) A) “c” B) ‘\\’’

6. 以下叙述不正确的是( )

A) 在C程序中,逗号运算符的优先级最低 B) 在C程序中,MAX和max是两个不同的变量

C) 若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变

D) 当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值

7. 以下叙述正确的是( )

A) 在C程序中,每行只能写一条语句

B) 若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数

C) 在C程序中,%是只能用于整数运算的运算符

D) 在C程序中,无论是整数还是实数,都能被准确无误地表示

C) ‘’ D) ‘K’

8. 已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=‘A’+‘6’-‘3’后,c2中的值为( ) A) D

9. sizeof(float)是( )

A) 一个双精度型表达式 B) 一个整型表达式 C) 一种函数表达式 D) 一个不合法的表达式

10.设C语言中,一个int型数据在内存中占2个字节,则unsigned int 型数据的取值范围为( )

A) 0~255 B) 0~32767 C) 0~65535 D) 0~2147483647

11.设有说明:char w; int x; float y; double z;则表达式w*x+z-y值的数据类型为( )

A) float B) char C) int D) double

12.设以下变量均为int类型,则值不等于7的表达式是( ) A) (x=y=6,x+y,x+1) B) (x=y=6,x+y,y+1) C) (x=6,x+1,y=6,x+y) D) (y=6,y+1,x=y,x+1)

13、如下所示,执行以下程序段后,变量a,b,c的值分别是()

B) 68 C) 不确定的值 D) C

int x =10, y = 9; int a, b, c;

a = (--x == y++)? –-x : ++y; b = x++; c = y;

A、a = 9, b = 9, c = 9 B、a = 8, b = 8, c = 10 C、a = 9, b = 10, c = 9 D、a = 1, b = 11, c = 10

14、若有以下定义,int k = 7, x = 12; 则能使值为3的表达式是() A、x %= (k %= 5) B、x %= (k - k %= 5) C、x %= k - k%5 D、(x %= k) - (k %= 5)

15.若已定义x是int和y为double类型,则表达式:x=1,y=x+3/2的值是( )

A)1

B)2 C)2.0 D)2.5

16.若有以下定义和语句 char c1='b',c2='e';

printf(\则输出结果是( ) A)2,M C)2, E 定

17.设 a、b、c、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式 (m=a>b)&&(n=c>d)

运算后,n的值为( ) A) 0

B) 1

C) 2

D) 3

B)3,E

D)输出项与对应的格式控制不一致,输出结果不确

2. 填空题

1. 若有以下定义,则计算表达式y+=y-=m*=y后的y值是__2y-m*y___

2. 在C语言中,一个short型数据在内存中占2个字节,则 short型数据的取值范围为___(-32768-32767)__

3. 若s是int型变量,且s=6,则下面表达式的值为__1__

4. 若a是int型变量,则下面表达式的值为_46___ (a=4*5,a*2),a+6

s%2+(s+1)%2

5. 若x和a均是int型变量,则计算表达式(1)后的x值为 12__,计算表达式(2)后的x 值为_4__ (1) x=(a=4,6*2)

(2) x=a=4,6*2

6. 若a是int型变量,则计算下面表达式后a的值为_2___ a=25/3%3

7. 若x和n均是int型变量,且x和n的初值均为5,则计算表达式后x的值为___10_ ,n的值__5_____。 X += n++;

8. 若有定义:char c=‘\\010’;则变量c中包含的字符个数为 __3__

9. 若有定义:int x=3,y=2;float a=2.5,b=3.5;则下面表达式的值为__1__

(x+y)%2+(int)a/(int)b

10. 已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=‘a’+‘8’-‘3’的值为____f____.

11.看下列程序,请填空: #include int a;

int main(void) {

static int b; int sum = 0; a++; b++;

printf(“a = %d b = %d\\n”, a, b);

return 0;

}

a的值为:____1___,b的值为____1___

12.看下列程序,请填空: #include int main(void) { int a = 5; int b = 5; b = a++ + ++a + a++;

printf(“a = %d b = %d\\n”, a, b); return 0;

}

程序会输出:___18 8__________________

3. c面试题

1. 关键字static的作用是什么?

2. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

3. 局部变量能否和全局变量重名?

4.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

5.程序的内存分配方式?

6.位运算实现指定位清零/写入操作?

4. c面试题答案

1. 关键字static的作用:

这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:

1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。

2. 全局变量和局部变量的区别:

答 :全局变量储存在静态数据区有初始值为0,局部变量在堆栈中没有初始值。

3. 局部变量能否和全局变量重名?

答:能,局部会屏蔽全局。局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

4.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答 :可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错

5. 程序的内存分配方式?

答:一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序

结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。

4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放。

5、程序代码区—存放函数体的二进制代码 6. 例子程序 #include #include #include int a=0; //全局初始化区 char *p1; //全局未初始化区 main() { intb;栈

char s*+=”abc”; //栈 char *p2; //栈

char *p3=”123456″; //123456\\0在常量区,p3在栈上。 static int c=0; //全局(静态)初始化区

p1 = (char*)malloc(10);

p2 = (char*)malloc(20); //分配得来得10和20字节的区域就在堆区。 strcpy(p1,”123456″); //123456\\0放在常量区,编译器可能会将它与p3所向”123456″优化成一个地方。 }

6.位运算实现指定位清零/写入操作?

答: 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。 对这个问题有以下基本的反应

1)不知道如何下手。该被面者从没做过任何嵌入式系统的工作。 2) 用 #defines 和 bit masks 操作。这是一个有极高可移植性的方法,是应该被用到的方法。最佳的解决方案如下: #define BIT3 (0x1 << 3) static int a; void set_bit3(void) { a |= BIT3; }

void clear_bit3(void) {

a &= ~BIT3; }

一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、|=和&=~操作。

本文来源:https://www.bwwdw.com/article/chto.html

Top