嵌入式系统开发人员C语言测试题(数据类型和变量)

 

                                                                              

嵌入式系统开发人员 C 语言测试题--(数据类型和变量)

1.1 选择题

1C 语言中最简单的数据类型包括____

a.  整型 实型 逻辑型

b.  整型 实型 字符型

c.  整型 字符型 逻辑型

d.  整型 实型 逻辑型 字符型

2)下面符合要求的位段定义是____

要求:

1. a 有两位    2. b 有两位  3. c 有两位  4. d 有四位

a. struct bitfields1

{

    unsigned a, b, c:2;

    unsigned d:4;

}

b. struct bitfields2

{

    unsigned a:2, b:2;

    unsigned c:2, d:4;

}

c. struct bitfields3

{

    unsigned a, b, c:6;

    unsigned d:4;

}

d. struct bitfields4

{

    unsigned a, b:4;

    unsigned c, d:6;

}

3)下面关于枚举类型的说法正确的是_____

a.  可以为枚举元素赋值;

b.  枚举元素可以进行比较;

c.  枚举元素的值可以在类型定义时指定;

d.  枚举元素可以作为常量使用。

4)下面关于结构类型的说法正确的是____

a.  对于结构变量,可以通过运算符".""->",逐个访问其成员;

b.  结构变量和结构变量成员的地址都可以被引用;

c.  如果指针变量 p 已指向某结构数组,则 p+1 指向当前元素的下一个成员;

d.  如果指针变量 p 已经指向一个结构变量(或结构数组),就不能再使之指向结构变量(或结构数组元素)的某一成员。

5)设有语句 char a = '\72';则变量 a____

a.  包含 1 个字符

b.  包含 2 个字符

c.  包含 3 个字符

d.  说明不合法

6)下面关于结构类型的说法正确的是____

a.  结构初始化时,每个成员的值用逗号隔开,可以只对部分成员赋初值;

b.  数组元素的类型可以是结构,结构成员类型也可以是数组;

c.  结构变量、结构地址和结构成员都可以作为函数参数使用;

d.  结构可以嵌套。


 

                                                                          

7)下面关于结构类型的说法正确的是_____

a.  结构是一种复合数据类型,其构成元素既只能是基本数据类型(如 intlongfloat 等)的变量;

b.  缺省条件下,编译器为结构的每个成员按其自然对界(alignment)条件分配空间;

c.  结构成员按照它们被声明的顺序在内存中顺序存储;

d.  结构第一个成员的地址和整个结构的地址相同。

8)下面关于枚举类型的说法正确的是______

a.  枚举值是常量,不能在程序中用赋值语句再对它赋值;

b.  只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量;

c.  把数值直接赋予枚举变量最好用强制类型转换;

d.  枚举元素不是字符常量而是字符串常量。

9)下面关于联合类型说法正确的是______

a.  对联合变量的赋值、使用都只能是对变量的成员进行。

b.  联合变量的成员表示为: 联合变量名.成员名

c.  可以对联合变量作初始化赋值。

d.  一个联合变量,每次只能赋予一个成员值。

10)合法的长整型常数是_____

a. OL       b. 4962710        c. 324562&         d. 216D

11)在 C 语言中,   char 型数据在内存中的存储形式是_____

a.  补码    b.  反码    c.  原码     d. ASCII

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

a. 0255    b. 032767      c. 065535    d. 02147483647

13)已知 ch 是字符型变量,下面不正确的赋值语句是____

a. ch='a+b';    b. ch='\0';    c. ch='7'+'9';     d. ch=5+9;

14)已知 ch 是字符型变量,下面正确的赋值语句是____

a. ch= '123';    b. ch= '\xff';   c. ch= '\08';     d. ch="\";

15)以下选项中不正确的整型常量是_____

a. 12L         b. -10        c. 1,900     d. 123U

16_____是不正确的字符常量。

a. 'n'           b. '1'            c. "a"           d. '101'

17)假设 int 型变量占两个字节的存储单元,若有定义:

    int x[10]={0,2,4};

则数组 x 在内存中所占字节数为______

a. 3            b. 6            c. 10              d. 20

18C 语言中能用八进制表示的数据类型为_____

a.  字符型、整型                 b.  整形、实型

c.  字符型、实型、双精度型       d.  字符型、整型、实型、双精度型

19)以下只有在使用时才为该类型变量分配内存的存储类说明是____

a. auto static               b. auto register

c. register static          d. extern register

20)下面四个选项中,均是合法整型常量的选项是____

a. 160           b. 0xcdf     c. 01         d. 0x48a

    0xffff            01a        986,012         2e5 

011               0xe         0668            0x

21)下面四个选项中,均是不合法的整型常量的选项是____

a. 0f1      b. 0Xcdf c. 018     d. 0x48eg

0xffff         017           999         068

0011           12,456        5e2          03f

22)下面四个选项中,均是不合法的浮点数的选项是____

a. 160.       b. 123       c. 18       d. e3

    0.12           2e4.2        123e4          .234 

e3            .e5           0.0             1e3


 

                                                                     

23)下面四个选项中,均是合法浮点数的选项是____

 a.   +le+1       b. 60.        c. 123e       d. e3

      5e-9.4  12e-4       1.2e-.4       .8e4 

03e2           8e5          +2e            5.e

24)下面四个选项中,均是合法转义字符的选项是____

 a. '\''         b. '\'      c. '\018'    d. '\\0'

     '\\'             '\017'      '\f'          '101' 

'\n'             '\"'         'xab'        'xlf'

25)下面四个选项中,均是不合法的转义字符的选项是____

   a. '\''      b. '\1011'     c. '\011'     d. '\abc'

      '\\'           '\'            '\f'           '\1011' 

     '\xf'           '\a'           '\}'          'xlf' 

26)下面正确的字符常量是____

a. "a"      b. '\\''     c. 'W'     d. ''

27)下面四个选项中,均是不正确的八进制数或十六进制数的选项是____

a.   016       b. oabc       c. 010      d. 0a12

0x8f           017           -0x11       7ff

018            0x8           0x16        -123

28)下面四个选项中、均是正确的数值常量或字符常量的选项是____

    a. 0.0        b. "a"               c.'3'  d. 001

       0f            3.9E-2.5             011           0xabcd 

       8.9e            lel                 0xFFOO        2e2 

'&'            '\'''                0a             50.

29)以下所列的 C 语言常量中,错误的是_____

a. 0xFF  b. 1.2e0.5  c. 2L  d. '\72'

30)下面四个选项中,均是非法常量的选项是______

a.'as'       b.'\\'    c. -0xl8     d. 0xabc

   -0fff        '\01'       01177       '\0' 

'\0xa'         12,456       0xf"a"

31)下面关于 volatile 变量的说法正确的是_______

a.  并行设备的硬件寄存器(如:状态寄存器);

b.  一个中断服务子程序中会访问到的非自动变量(也就是全局变量)

c.  会被几个任务共享的变量;

d.  定时器变量。

1.2 填空题

32)说明下面变量的定义:

char (*p[])();           _____________________

char *p()[];     _____________________

char (*p)[10][10];      _____________________

char(*(*p())[])[];      _____________________

33)下面共同体的存储空间是_____

union BOOKNUMBER

{

     T_S16 age;

     T_S8 title[10];

     T_S8 post[32];

}

34)若整数值范围是  -32768   32767。在执行下面的表达式之后, i  的结果是什么?

int i=32766;

i=i+1;           i =       

i=i+1;           i =      


 

                                                       

35)对于联合类型:

union x

{

     char ch[7];

     int i[2];

     float f;

}tom;

那么, sizeof(tom) =       

36)有以下程序,程序的输出结果是______(注意: ch[0]在低字节,ch[1]在高字节)。

#include<stdio.h>

union pw

{ 

     int i;

     char ch[2];

 }a;

main()

{

     a.ch[0] = 13; 

     a.ch[1] = 0; 

     printf("%d\n", a.i);

}

37)以下程序用以输出结构体变量 bt 所占内存单元的字节数,请在横线内填上适当内容。

struct ps

{

     double i;

     char arr[20];

};

main()

{

      struct ps bt;

      printf("bt size :%d\n", _______);

}

38)设位段的空间分配由右到左,则以下程序的运行结果是_____

struct packed_bit

{

      unsigned a:2;

      unsigned b:3;

      unsigned c:4;

      int i;

}data;

main()

{

     data.a = 1;

     data.b = 2;

     data.c = 3;

     data.i = 0;

     printf("%d\n", data);

}

39)以下程序的运行结果是_____

main()

 

     enum COLOR{

         RED, 

         BLUE = 5,

         YELLOW 

     }cl;                                         
     printf("%d", cl.YELLOW);

}

40)以下程序的运行结果是______

main()

{

     union EXAMPLE{

         struct{ 

             int x;

             int y;

         }in; 

         int a;

         int b;

     }e; 

     e.a = 1;

     e.b = 2;

     e.in.x = e.a * e.b;

     e.in.y = e.a + e.b;

     printf("%d %d", e.in.x, e.in.y);

}

41)请补充下面代码:

#include<al oc.h> 

main() 

{ 

      T_S16 *a; 

      a = (int*)mal oc(_________); 

      *a = 123; 

      ______ = 456; 

      ______ = 789; 

       

}

42)在小类型转大类型时应确保不会改变数据的值,在程序的逻辑上确认后,还应在强制转换代码后加上清高位代码以确保转换正确,请填

充下面的代码以示例:

T_S8 cLocalHeight = 0xfe;

T_U32 g_lHeight = 0;

g_lHeight = _________cLocalHeight;

43)在不同符号位转换时(T_U8?àT_S8, T_U16?àT_S16, T_U32?àT_S32)应在逻辑上确保不会改变数据的符号位或是含义值,请填充下面的

代码以示例:

T_S16 nTop;

T_S16 nBottom;

T_VOID Img_SetHeight(T_U16 nHght)

T_S16 nHeight = nTop - nBottom;

Img_SetHeight(___________);

44)写出判断字符变量 c 是英文字母的表达式____________

45)下面函数的返回值是______

int data()

{



 

 

 

     float x = 9.9;

     return(x); 

}


46)下面程序段的输出结果是______

Union

{

     int b1, b2, b3;

} yy;

yy.b1 = 1; 

yy.b2 = 2; 

yy.b3 = 10 * yy.b1 + yy.b2;

printf("%d, %d, %d", yy.b1, yy.b2, yy.b3);

1.3 问答与设计

47)请说明以下数据类型的表示范围:

T_S8:

T_U8:

T_S16:

T_U16:

T_S32:

T_U32:

T_pVOID:

float:

double:

(:

#define T_S8   signed char

#define T_U8   unsigned char

#define T_S16 signed short

#define T_U16 unsigned short

#define T_S32 signed int

#define T_U32 unsigned int

#define T_pVOID void *

)

48)请说明无值型的用途。

49)浮点型变量可以用'%'求余运算吗?为什么?

50)什么情况下适合使用联合类型?

51)已知联合类型 union data  已被正确定义,指出下面代码的错误并说明原因:

mix()

{

     extern union data mid;

     mid.ival = 5;

     mid->fval = 3.6;

     mid.pval = 'c';

     printf("%d", mid.ival);

     printf("%d", mid.pval);

}

52)找出下面的程序中的错误并改正。

#include <stdio.h>

main()

{

     float a[3] = {0,0};

     int i;

     for (i=0; i<3; i++) 

     { 

         scanf("%d", &a[i]);

     } 

     for (i=1; i<3; i++) 

     { 

         a[0] = a[0] + a[i];

     } 

     printf("%f\n", a[0]);

}

53)可以对结构体变量初始化吗?可以对共同体变量进行初始化吗?为什么?

54)结构体变量可以作为函数参数吗?共同体变量可以作为函数参数吗?为什么?

55)说明位操作提高程序运行效率的原理。

56)变量有哪几种存储类型,它们的关键字、作用范围和生存时间各是什么?

57)什么是结构类型的自然对界条件?

58)如何改变结构类型缺省的对界条件?

59)用变量 a 给出下面的定义:

         a.  一个整型数;

         d.  一个指向整型数的指针;

         c.  一个指向指针的的指针,它指向的指针是指向一个整型数;

         d.  一个有 10 个整型数的数组;

         e. 一个有 10 个指针的数组,该指针是指向一个整型数的;

         f.  一个指向有 10 个整型数数组的指;

         g.  一个指向函数的指针,该函数有一个整型参数并返回一个整型;

         h.  一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数。

 

60)关键字 static 的作用是什么?

61)下面的声明都是什么意思?

         const int a;

         int const a;

         const int *a;

         int * const a;

         int const * a const;

 

62)关键字 volatile 有什么含意?并给出三个不同的例子。

63)一个参数既可以是 const 还可以是 volatile 吗?为什么?

64)一个指针可以是 volatile  吗?为什么?

65)嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量 a,写两段代码,第一个设置 a bit 3,第二个清除 a bit 3

在以上两个操作中,要保持其它位不变。

66)能够把一个整型数强制转换为一指针吗?说明理由。

67)假定 PI 宏已正确定义,请指出下面代码的错误:

__interrupt double compute_area (double radius) 

{ 

     double area = PI * radius * radius; 

     printf("\nArea = %f", area); 

     return area; 

}

68)评价下面代码的合理性:

     unsigned int zero = 0; 

     unsigned int compzero = 0xFFFF;


 

 

69)请分别写出 BOOL , float,  指针变量 与"零值"比较的  if  语句。

70)外部变量的定义性声明与引用性声明在应用上的区别是什么?

71)请说明外部变量的特性。(至少三点)

72)外部变量和静态变量的区别是什么?

73)对控制寄存器正确赋值要注意些什么?

74)请区别如下代码?

     const int a;

     int const a;

     const int *a;

     int * const a;

     int const * a const;

 

75)已知 a 为整数,比较下面代码的效率并说明原因:

         a++; 

         a = a+1;

 

76)已知 a 为整数,比较下面代码的效率并说明原因:

         a = a*4;

         a << 2;

 

77)说明一个变量和定义一个变量有什么区别?

78)可以在头文件中说明 static 变量吗?

79)全局变量的缺省关键字是什么?

80)局部变量的缺省关键字是什么?

81)静态局部变量的使用范围和生命周期是什么?

82)全局变量的使用范围和生命周期是什么?

83)静态全局变量和全局变量的区别是什么?

84)寄存器变量的使用有什么限制?能用取址运算符"&"来获取 register 变量的地址吗,原因是什么?

85)为什么指针型变量在使用前必须初始化?

86)请指出下面代码的缺陷:

main()

{ 

     T_S16 *i; 

     T_S8 *str; 

     *I = 100; 

     str = "Good";

}

87)分别从大转小、小转大两方面说明类型转换可能存在的隐患,并给出解决措施。

88)减少全局变量使用的原因是什么?

89)为什么禁止在符号变量上进行移位操作?

90)请从类型转换精度损失的角度分析以下代码。

#define DELAY_MILLISECONDS 10000

T_S8 cTime;

cTime = DELAY_MILLISECONDS;

WaitTime(cTime)

91)结构体中的位域为什么要尽可能相邻?

92)判断下面语句是否正确并说明原因。

float a;

scanf("%7.2f", &a);


 

        @老梁 359699505@qq.com                                                                                www.jsetc.com

93)判断下面语句是否正确并说明原因。

#include <stdio.h>

void main(void)

{

     int x;

     scanf("%d", x);

     printf("%d", x);

}

94)判断下面语句是否正确并说明原因。

main()

{

     int a = 5;

     printf("%d", a);

}

95)判断下面语句是否正确并说明原因。

main()

{

     float a, b;

     printf("%d", a%b);

}

96)判断下面语句是否正确并说明原因。

int a, b;

scanf("%d%d", a, b);

97)判断下面语句是否正确并说明原因。

int n;

scanf("%d", &n);

int a[n];

98)全局变量与局部变量、动态存储变量与静态存储变量的区别?

99)为什么说使用尽量小的数据类型能够优化代码?

100)已知整型变量 I,那么 I++;  I = I + 1;那个效率高,说明原因。

101)要求设置一绝对地址为 0x67a9 的整型变量的值为 0xaa66。编译器是一个纯粹的 ANSI 编译器。写代码实现这一要求。

102) 描述下列变量说明:

short int a;

float b[3];

long (* c)[3];

unsigned * d[3];

void (*f)(int);

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值