您的位置:首页 > 编程语言 > C语言/C++

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

2015-01-28 18:24 344 查看
嵌入式系统开发人员 C 语言测试题--(数据类型和变量)


1.1
选择题

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

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.
结构是一种复合数据类型,其构成元素既只能是基本数据类型(如
int、long、float
等)的变量;

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. 0~255
b. 0~32767
c. 0~65535
d. 0~2147483647

(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

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

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
;

(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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: