1.完成使链表逆置函数reverse:
链表结点的结构如下:
struct node { int num; struct node *next; }; struct node* reverse(struct node *head) // head 链表头结点 { struct node *p, *temp1, *temp2; if(head==NULL 不填 ) return head; p=head->next; head->next=NULL; while( p!=NULL )//当p不为空的时候 { temp1=head; head = p; temp2 = p; P = p->next; p = temp2; } return head; }
2.程序功能是倒序输出各给定的字符串。找出下面程序中的语法错误,并纠正。
#include <stdio.h> void main() { char str[5][] = {“First”, “Second”, “Third”, “Forth”, “Fifth”}; //char str[5][10]= char *cp[] = {str[4], str[3], str[2], str[1], str[0]}; //char cp[5][10] = int i; while(i<=5) { printf(“%c”, *(cp+i)); //printf(“%s”,cp[i]); i++; } }
3.程序功能是将各个平方根值放入数组中。找出下面程序中的语法错误,并纠正。
#include <stdio.h> //#include<math.h> void main() { int max, a, i; //int max = 255; scanf(“%d%d”, max, a); //scanf(“%d%d”,&max.&a); double x[max]; for(i=0; i<max; i++) x[i]=sqrt(a*i): //; }
4.嵌入式多任务操作系统按照任务调度的方式可以分为哪两类?请简要描述它们的特点。
协作式任务调度
任务必须主动让出CPU,才能进行任务切换。
任务的执行时间不受限制,可以一直持有CPU直到自己完成或者主动让出。任务之间需要遵循一定的协议,如任务主动挂起,通过调用特定的函数或接口来进行任务切换。
优点:简单、低延迟、低开销,适用于相对简单的系统和对实时响应要求不高的应用场景。
抢占式任务调度
操作系统有任务调度权,根据策略对任务进行抢占,强制将CPU从一个任务切换到另一个任务。任务的执行时间受到时间片或优先级的限制,当时间片耗尽或有更高优先级的任务就绪时,当前任务会被暂停执行。
优点:能够保证高优先级任务的实时响应能力、提供较好的系统稳定性和可靠性,适用于对实时性要求较高的嵌入式系统。
5.嵌入式多任务操作系统任务间同步和和通信的方式有哪些?
信号量,互斥锁,事件标志,消息队列。
6.将下列10进制数转成一字节的16进制数格式。
192 0xC0(1100 0000) 35 0x23(0010 0011) 255 FF -12 F4
二.选择题
7.下列能与case:匹配的类型有哪些( )
A.float
B.char *
C.char
D.int
8.以下代码的输出结果是( )
char var[10];
int test(char var[])//退化为指针类型char*,看操作系统32 4字节 64 8字节
{
return sizeof(var);
}
A.10
B.9
C.11
D.4
9.下面程序的输出结果是什么?( )
static int a[3][3] = {1,3,5,7,9,11,13,15,17}, y, x, *p = &a[2][2];
for(x=0; x<3; x++)
y+=*(p-4*x); //*p - 4*0 = 17 *p - 4*1 = 9 *p - 4*2 = 1 17+1+9 =27
printf(“\n%d”, y);
A.45
B.33
C.17
D.27
10.下面哪些数组的声明是错误的?( )
A.int a[3];
B.int n = 10, a[n]; //数组大小是一个常量
C.int a[10+1] = {0};
D.int a[3] = {1,2,3,4};//数组大小和数组成员大小不匹配
11.请不使用库函数将字符串pStr1, pStr2组拼起来,如:pStr1=”123”, pStr2=”abc”, 组成123abc。
void Fuc(unsigned char *pStr1, unsigned char *pStr2) { int len1 = 0, len2 = 0; unsigned char *result = NULL; // 计算字符串长度 while (pStr1[len1] != '\0') len1++; while (pStr2[len2] != '\0') len2++; // 分配足够的内存来存储组拼后的字符串 result = (unsigned char *)malloc((len1 + len2 + 1) * sizeof(unsigned char)); // 将第一个字符串复制到结果字符串中 for (int i = 0; i < len1; i++) result[i] = pStr1[i]; // 将第二个字符串连接到结果字符串末尾 for (int i = 0; i < len2; i++) result[len1 + i] = pStr2[i]; }
12.关于继承的说法正确的是( )
子类在继承父类时,会继承父类的所有属性和方法,包括公有(public)、保护(protected)和私有(private)的成员。通过继承,子类可以直接访问父类的非私有属性和方法,并且还可以在子类中添加自己的属性和方法。
A.子类将继承父类所有的属性和方法
B.子类将继承父类的非私有属性和方法
C.子类只继承父类public方法和属性
D.子类只继承父类的方法,而不继承属性
13.关于Qt,描述错误的是( )
A.基于面向对象的C++语言
B.提供了信号槽的对象通信机制
C.有可查询和可设计属性
D.不适用指针
14.Qt中使用的数据库是( )
A.sqlLite
B.Oracle
C.Sql Server
D.Db23
15.在Qt中使用QRadioButton时,要想实现分组需要用的组件是( )
A.QButttonGroup//QButtonGroup是一个特殊的组件,用于对一组按钮进行逻辑分组。
B.QRadioButtons//QRadioButtons 是描述单选按钮的术语,不是Qt中提供的特定组件。
C.QCheckBox//QCheckBox 是用于实现复选框的类
D.QRadioGroup//QRadioGroup 不是Qt的现有组件
16.int a = 3; a= a<<2, a = 12 。
17.面向对象程序的主要特征: 封装 、 继承 、 多态 。
18.在Qt中,有一个类是所有类的父类,这个类的名称是 QObject 。
19.OSI模型中,最顶层是 物理层 ,其中运输层主要用到的协议有 TCP/UDP 。
20.栈通常采用的两种存储结构: 顺序栈 、 链式栈 。