软考中级-嵌入式系统设计师-案例题考点-程序语言篇
常见预处理运算符:##运算符也被叫做标记连接运算符,它能够在宏展开时把两个标记连接成一个新的标记。//等价于运算符也被称作字符串化运算符,它能把宏的参数转换为字符串常量。//等价于#if#endif#else#elif在#if#elif等预处理指令中,可以使用常见的算术和逻辑运算符,如==!<=>=&&||!等,用于对常量表达式进行求值判断。
考点一:C语言基础语法
真题(2020年)
王工在红外热像仪系统设计中负责软件模块,其核心功能在于进行人脸检测,调取温度检测模块获取检测到人的体温,将检测到的人脸信息及体温通过网络发送给平台进行存储,软件采用C语言编写。
【问题1】(3分)
请说明在C语言中下列宏定义的含义。
(1) #define f(a,b) a##b
(2)__LINE__
(3)__DATE__
(1)
## 作为预处理运算符,在宏展开时会把它两边的参数连接成一个标识符,它是宏定义中的关键字。
(2)
当前行号
(3)
当前日期
考点:C语言预处理运算符及常见预定义宏
常见预处理运算符:
| ## 运算符也被叫做 “标记连接” 运算符,它能够在宏展开时把两个标记连接成一个新的标记。 | #define f(a, b) a##b int f(a,b) = 20;//等价于int ab = 20; |
| # 运算符也被称作 “字符串化” 运算符,它能把宏的参数转换为字符串常量。 | #define STRINGIT(x) #x print("%s\n",STRINGIT(hello CSDN)); //等价于print("%s\n","hello CSDN"); |
| #if、#endif、#else、#elif | 在 #if、#elif 等预处理指令中,可以使用常见的算术和逻辑运算符, 如 +、-、*、/、%、==、!=、<、>、<=、>=、&&、||、! 等, 用于对常量表达式进行求值判断。 |
| #define #undef | |
| #include <> #include "" | |
| #ifdef、#ifndef、#endif、#else、#elif |
常见预定义宏有:
| __LINE__ | 表示当前源代码所在的行号,是一个整数常量。 | printf("This line number is %d.\n", __LINE__); |
| __FILE__ | 表示当前源文件的文件名,是一个字符串常量。 | printf("This file is %s.\n", __FILE__); |
| __DATE__ | 表示源文件被编译的日期,格式为 "Mmm dd yyyy",字符串常量。 | printf("Compiled on %s.\n", __DATE__); |
| __TIME__ | 表示源文件被编译的时间,格式为 "hh:mm:ss" 的字符串常量。 | printf("Compiled at %s.\n", __TIME__); |
| __STDC__ | 编译器遵循 ANSI C 标准,该宏的值为 1 | #ifdef __STDC__ printf("This compiler conforms to ANSI C.\n"); #endif |
| __cplusplus | 在 C++ 编译环境中,该宏会被定义,其值通常是一个代表 C++ 标准版本的整数,在 C 编译环境中未定义。常用于在头文件中实现 C 和 C++ 的兼容。 | #ifdef __cplusplus extern "C" { #endif // C代码 #ifdef __cplusplus } #endif |
【问题2】 (3分)
王工在利用网络发送所检测到的人脸及对应的体温信息时定义了对应的数据结构FaceTemp_ info, 内容依次包括:检测到人脸框的左上角像素坐标(横向坐标Face _x,纵向坐标Face_ Y), 人脸框的像素大小(横向宽度Face_ w,纵向高度Face_ H),以及人体温度信息Temp。假设人脸框坐标信息、人脸框的像素大小都用unsigned short来表示,人体温度信息用float来表示。请给出FaceTemp_ info 数据结构的定义。

题目直接说明了各成员的类型,其实没说的话还可以根据代码推断。
案例给出了部分代码,需要根据其进行推断。
根据开头声明的FaceDetection函数的形参的指针类型 unsigned short *,
可以知道结构体内像素的数据类型为unsigned short
同理,根据TempDetection函数的返回值类型可以知道
温度的数据结构为float。
然后因为代码里面有Facetemp_info facetemp_info;
可以知道变量名和类型分别是什么。
struct Facetemp_info {
unsigned short Face_X;
unsigned short Face_Y;
unsigned short Face_W;
unsigned short Face_H;
float Temp;
}facetemp_info;
或
typedef struct {
unsigned short Face_X;
unsigned short Face_Y;
unsigned short Face_W;
unsigned short Face_H;
float Temp;
}Facetemp_info;
Facetemp_info facetemp_info;
考点:C语言结构体定义
【问题3】(9分)
在红外热像仪的图像信息处理中,王工设计了如下人脸检测、温度检测及信息发送程序,当检测到温度大于等于37.3C时,需要报警提示。请补全程序中的(1) ~ (6)。
考点:结合题意补全代码
根据题目既可得到当temp大于等于37.3的时候要上报
题目2到5的下一个是给facetemp_info赋值temp,
函数开头表明了Facetemp_info facetemp_info;
所以2-5就应该是把剩下的四个成员变量给赋值了。
然后发送,把地址给send函数,注意SendUDP函数的形参
【问题3】
(1) temp >= 37.3
(2) facetemp_info.Face_X= face_x
(3) facetemp_info.Face_Y= face_y
(4) facetemp_info.Face_W= face_w
(5) facetemp_info.Face_H= face_h
(6) &facetemp_info
(其中(2) ~ (5)顺序可互换)
更多推荐
所有评论(0)