嵌入式系统开发人员 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[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);