#小型胃肠诊断系统
#设计要求是些什么。需要的整个功能,
界面设计问题
数据存储问题
#设计重点。
看你怎么诊断。按照我的理解,消化道的诊断,这个需要内窥镜检查,它不是说通过静态的拍照(比如断层扫描或者超声)以及化验报告之类的就可以诊断的。
1:设float a=2, b=4, c=3;,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是
A.(a+b)*c/2
B.(1/2)*(a+b)*c
C.(a+b)*c*1/2
D.c/2*(a+b)
参考答案:B,因为a,b,c三个变量都是浮点数,B答案(1/2)为整形除以整形,得到的结果也是整形,结果为0;如果改成1/2.0就正确了。代数式中1/2为0.5,其余都是先进行浮点型数据运算或浮点型与整数型运算,得到的结果为浮点型。
2:为了向二进制文件尾部增加数据,打开文件的方式应采用
A.″ab″
B.″rb+″
C.″wb″
D.″wb+″
参考答案:D
3:下述程序执行后的输出结果是
#include
main()
{
int x='f';
printf("%c\n",'a'+(x-'a'+1));
}
A.g
B.h
C.i
D.j
参考答案:A
4:C语言中,下列运算符优先级最高的是
A.!
B.%
C.>>
D.= =
参考答案:A
5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。
A.*a
B.a [ 0 ]
C.a
D.a++
参考答案:D
6:执行语句“ k=7>>1; ”后,变量 k 的当前值是
A.15
B.31
C.3
D.1
参考答案:C
7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型
A.void
B.char
C.float
D.int
参考答案:D
8:若main()函数带参数,参数个数最多是
A.0
B.1
C.2
D.3
参考答案:C 只知道有定义形式main(int argc,char* argv[]))
9:若有宏定义:#define MOD(x,y) x%y
则执行以下语句后的输出结果是
int a=13,b=94;
printf(″%d\n″,MOD(b,a+4));
A.5
B.7
C.9
D.11
参考答案:B
10:下列各个错误中,哪一个不属于编译错误
A.改变 x 原值 3 为 5 ,写作“ x==5 ;”
B.花括号不配对
C.复合语句中的最后一条语句后未加分号
D.变量有引用、无定义
参考答案:A
11:下列程序段运行后, x 的值是( )
a=1;b=2;x=0;
if(!( -- a))x -- ;
if(!b)x=7;else ++x;
A.0
B.3
C.6
D.7
参考答案:A
12:设
#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉
13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是
A.def
B.d
C.e
D.0
参考答案:C
14:下列转义字符中错误的是
A.′\000′
B.′\14′
C.′\x111′
D.′\2′
参考答案:C error C2022: '273' : too big for character
15:算术运算符,赋值运算符和关系运算符的`运算优先级按从高到低依次为
A.算术运算、赋值运算、关系运算
B.算术运算、关系运算、赋值运算
C.关系运算、赋值运算、算术运算
D.关系运算、算术运算、赋值运算
参考答案:B
16:设#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:B
17:表达式 strcmp( “ 3.14 ”,“ 3.278 ” ) 的值是一个
A.非零整数
B.浮点数
C.0
D.字符
参考答案: A
18:设struct
{ short a;
char b;
float c;
}cs;
则sizeof(cs)的值是
A.4
B.5
C.6
D.7
参考答案: D 字节对齐的话应该是8
19:若变量已正确定义,表达式( j=3 , j++ )的值是
A.3
B.4
C.5
D.0
参考答案:A
20:C 语言中运算对象必须是整型的运算符是
A.%
B./
C.!
D.**
参考答案:A
简答题
21、在多任务实时系统中,任务间或者中断服务与任务间常需要交换信息,这种信息交换分别为以下哪两个途径()
A、开/关中断和信息邮箱
B、共享存储区和消息传递
C、邮箱机制和数据共享机制
D、非占先式内核和占先式内核机制
22、(多选)有声明
void fun5(int *);
void fun4(int &a);
int a;
int *p = &a;
在下列选项中,正确的调用是( )。
1
2
3
4
5
6
A、fun5(&a);
B、fun5(p);
C、fun4(&a);
D、fun4(p);
答案:A、B
解析:
fun5()的参数是指针,fun4()的参数是普通int
23、μC/OS-II操作系统通过事件控制块ECB支持任务间通信。下列说法中错误的是( )。
A、中断服务程序不能等待信号
B、任务可以通过ECB向其他任务发信号
C、多个任务可以同时等待同一事件发生。当该事件发生后,所有等待该事件的任务都能得到该事件并进入运行状态
D、中断服务程序可以通过ECB发信号
答案:C
解析:
μC/OS-II信号量管理的工作原理
μC/OS-II中信号量主要数据结构由两部分组成:(1)信号量的计数值Cnt。当数值为正时用于记录可使用的资源数,当数值为负,其绝对值表示等待当前信号量的任务个数;(2)等待该信号量的任务列表。信号量的基本数据结构需要申请一个ECB来存储。一个任务或ISR可以通过ECB向另外的任务发信号,一个任务可以等待另一个任务或中断服务子程序给它发送信号(中断服务只能发送信号),多个任务可同时等待同一个事件的发生。当事件发生后,等待该事件的优先级最高的任务进入就绪状态,触发一次任务调度。任务或者中断服务子程序都可以给ECB发信号,对ECB进行操作。
24、ARM指令完成的功能是如果清除R7中的bit0,1,5位,正确的指令是( )
A、ORR R7,R7,#0x00000023
B、AND R7,R7,#0xFFFFFFDC
C、BIC R7,R7,#0xFFFFFFDC
D、XOR R7,R7,#0xFFFFFFDC
答案:B;
解析:
and,按位与,0XDC二进制是1110 1100可见bit0,bit1,bit5位是零。 选择B。
25、8段共阴极LED数码管示意如下图所示,为显示英文字母b,其编码(按dp g f e d c b a的顺序排列)是( )。
A、01111101
B、01110111
C、01111100
D、01111001
答案:C
26、下面关于UART的叙述中,正确的是( )。
A、UART不能实现全双工通信
B、UART即为通用异步收发器
C、UART通信波特率固定为115200bps,不能调节
D、UART发送字符的长度固定为8位
答案:B
27、一主一从式SPI连接示意如下图所示。从机SPI的4根信号线的名称已在图中标出,为保证主机与从机之间的正确连接及系统正常工作,图中主机的①、②、③、④的信号名称分别应该是什么?
A 、MOSI、MISO、SCK、SSEL
B、SCK、MOSI、MISO、SSEL
C、MISO、MOSI、SCK、SSEL
D、SSEL、MOSI、SCK、MISO
答案:C
解析:
(1)MOSI:主出从入;
(2)MISO:主入从出;
28. int i =1;const int j =2;以下说法不正确的是
A const int *p1 = &i;
B const int *p2 = &j;
C int *const p3 = &i;
D int *const p4 = &j;
D
int *const p4 ,p4为指针常量,p4指向的内存位置不能改变,但是,p4所指内存存放的值是可以改变的。j表示常量,其数值不能被改变。
将j的地址赋给p4后,p4可以执行其他操作( 如*p4=4;),将j的值改变,因此,int *const p4 = &j;是错误的。
29. 32位系统中,该程序的输出为
//参数传递 退化为指针
void Func(char str_arg[100])
{
printf("%d\n",sizeof(str_arg));
}
int main()
{
char str[] = "Hello";
printf("%d\n",sizeof(str));
printf("%d\n",strlen(str));
char *p = str;
printf("%d\n",sizeof(p));
Func(str);
return 0;
}
A 5 5 4 4
B 6 5 4 4
C 6 5 6 4
D 5 5 5 100
B 6 5 4 4
使用函数**strlen()求某个字符串的长度时是不包括结尾标志符'\0'的,但当你用sizeof()**求某个字符串占用的内存空间时,结尾字符'\0'是被包括在里面的。
strlen用来计算字符串的长度(在C/C++中,字符串是以"\0"作为结束符的),它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描直到碰到第一个字符串结束符\0为止,然后返回计数器值。
sizeof是C语言的关键字,它以字节的形式给出了其操作数的存储大小,操作数可以是一个表达式或括在括号内的类型名,操作数的存储大小由操作数的类型决定。
30. 有以下程序,求输出结果
#include<stdio.h>
int fun(int i)
{
int cnt = 0;
while(i)
{
cnt++;
i=i&(i-1);
}
return cnt;
}
int main()
{
printf("%d\n\r",fun(2021));
return 0;
}
8
&是按位与,对应位都为1时该位得1,否则得0。所以 i&(i-1) 的作用:将i的二进制表示中的最右边的1置为0。
在本题中即数出2021转换成二进制有几个1就会走几次循环(不断除2)。2021对应的二进制是:10100111111,一共8个1,故走8次。
扩展:(n > 0 && ((n & (n - 1)) == 0)是判断n是不是2的次幂
31. 若 int x = 5&6,那么x的值为()
A 3
B 4
C 5
D 6
B
5: 0101
6: 0110
x: 0100
32. 以下错误的表达式为
struct {
inr a;
char b;
}Q,*p=&Q;
A Q.a
B (*p).b
C p->a
D *p.b
D
*p=&Q ,把Q的地址赋值给了指针p,对p解引用其实就是Q。
A 选项肯定是对的,结构体的正常访问方法。
B 选项 (*p).b 等价于 Q.b
C p->a p为指针访问结构体用->没问题。
D *p.b 优先级问题,.的优先级高于 *,所以 *p.b == *(p.b),p为指针,访问结构体成员要用->。
扩展:结构体中.和->两种访问区别
定义结构体指针,访问成员时就用->
定义结构体变量,访问成员时就用.
struct A {
int a;
char b;
};
struct A q; //访问成员就用:q.a;
struct A *p; //访问成员就用:p->a;
针对医疗辅助诊断系统的界面设计,可以从以下角度进行优化:
界面简洁明了:应该避免界面过于复杂,尽可能减少不必要的按钮和选项,以降低使用复杂度和操作难度。
根据用户需求设计:应该尽可能从医护人员的使用需求出发,考虑如何最大限度地满足他们的诊断需要,例如通过分析医疗数据、提供各种工具等,提升用户的使用体验和效率。
支持多设备:考虑到医疗场景需要多种设备协同工作,要求界面能够适配并兼容各种设备。
使用友好:提供可视化的反馈和易于理解的交互方式,例如拖拽和下拉等,以使用户可以快速操作系统。
针对医疗辅助诊断系统的数据存储问题,可以从以下角度进行优化:
确保数据的安全性:可以使用加密算法和数据备份等方式,以确保系统中的数据存储安全。
提高存储可靠性:可以通过 RAID 技术、镜像备份等方式,确保数据不因磁盘故障等原因丢失。
优化数据查询:对于海量的医疗数据,需要考虑如何在保证查询性能的基础上优化查询速度,用户不应该等待太久就能查询到他们需要的数据。
数据分析:通过数据挖掘和机器学习等技术,对医疗数据进行深度分析,为医生的决策制定提供更准确、更实用的指导。
针对以上问题,具体的解决方案如下:
可以使用以下技术来实现一个用户友好的界面:
使用响应式布局技术,使界面能够适配多种设备。
设置快捷方式以帮助用户快速访问频繁使用的功能。
提供可视化的反馈和易于理解的交互方式,例如拖拽和下拉等。
使用易于识别的颜色和图标来帮助用户快速理解界面元素的作用。
对于医疗数据的存储,以下方案可供选择:
使用云端存储,可增强数据的安全性和可靠性。
使用内存缓存机制,增加查询速度和查询灵活性。
使用分布式存储架构,可增加系统可扩展性和高可用性。
使用 Hbase 等海量数据存储系统,进行海量数据的存储和分析。
以下操作优化方案可以帮助医护人员更高效地使用系统:
使用语音指令,帮助医护人员快速完成某些操作。
使用人工智能技术,自动生成报告和建议,节省医护人员的时间和精力。
提供学习机制,定期帮助医护人员了解系统的新功能和技巧。
仔细监测系统使用情况和数据源的变化,如在系统中添加新功能或变更数据源,必须仔细监测这些变化是否会影响系统的性能。
使用故障定位技术,及时发现和解决系统中的错误和故障。