嵌入式软件工程师综合测试试题答案
更新时间:2023-09-21 19:05:01 阅读量: 工程科技 文档下载
- 嵌入式软件工程师前景推荐度:
- 相关推荐
----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- 综合复习试题
第一部分:C语言
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。 提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。 请写出 BOOL flag 与“零值”比较的 if 语句: if ( flag ) if ( !flag ) 请写出 float x 与“零值”比较的 if 语句: 标准答案示例: const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 不可将浮点变量用“==”或“!=”与数字 比较,应该设法转化成“>=”或“<=”此 类形式。 请写出 char *p 与“零值”比较的 if 语句: 标准答案: if (p == NULL) if (p != NULL) 二、以下为Windows NT下的32位C++程序,请计算sizeof的值 char str[] = “Hello” ; void Func ( char str[100]) char *p = str ; { int n = 10; 请计算 请计算 sizeof( str ) = 4 sizeof (str ) = 6 } sizeof ( p ) = 4 void *p = malloc( 100 ); 请计算 sizeof ( n ) = 4 sizeof ( p ) = 4 三、简答题
1、头文件中的 ifndef/define/endif 干什么用? 答:防止该头文件被重复引用。
2、#include
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- 对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h
3、const 有什么用途?(请至少说明两种) 答:
(1)可以定义 const 常量
(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被 const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
答:C++语言支持函数重载,C 语言不支持函数重载。函数被 C++编译后在库中的名字
与 C 语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被 C 编译器编译后在库中的名字为_foo,而 C++编译器则会产生像 _foo_int_int 之类的名字。
C++提供了 C 连接交换指定符号 extern“C”来解决名字匹配问题。
5、请简述以下两个for循环的优缺点 // 第一个 // 第二个 for (i=0; i ----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------- ----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- void GetMemory(char *p) char *GetMemory(void) { { p = (char *)malloc(100); char p[] = \} return p; void Test(void) } { void Test(void) char *str = NULL; { GetMemory(str); char *str = NULL; strcpy(str, \str = GetMemory(); printf(str); printf(str); } } 请问运行Test函数会有什么样的结请问运行Test函数会有什么样的结果? 果? 答:程序崩溃。 答:可能是乱码。 因为 GetMemory 并不能传递动态内因为 GetMemory 返回的是指向“栈内存, 存” Test 函数中的 str 一直都是 NULL。 的指针,该指针的地址不是 NULL,但strcpy(str, \将使程其原现的内容已经被清除,新内容不可序崩 知。 溃。 Void GetMemory2(char **p, int num) void Test(void) { { *p = (char *)malloc(num); char *str = (char *) } malloc(100); void Test(void) strcpy(str, “hello”); { free(str); char *str = NULL; if(str != NULL) GetMemory(&str, 100); { strcpy(str, \ strcpy(str, “world”); printf(str); printf(str); } } 请问运行Test函数会有什么样的结} 果? 请问运行Test函数会有什么样的结答:(1)能够输出 hello 果? (2)内存泄漏 答:篡改动态内存区的内容,后果难以预 料,非常危险。 因为 free(str);之后,str 成为野指针, if(str != NULL)语句不起作用。 ----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------- ----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- 五、编写strcpy函数 已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。 (1)不调用C++/C的字符串库函数,请编写函数 strcpy char *strcpy(char *strDest, const char *strSrc); { assert((strDest!=NULL) && (strSrc !=NULL)); // 2分 char *address = strDest; // 2分 while( (*strDest++ = * strSrc++) != ‘\\0’ ) // 2分 NULL ; return address ; // 2分 } (2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值? 答:为了实现链式表达式。 // 2 分 例如 int length = strlen( strcpy( strDest, “hello world”) ); 六:编程题 1、写出程序把一个链表中的接点顺序倒排 listNode* reverse_list( listNode* head) //逆序 { ListNode* new_head=head; if(head==NULL || head->next==NULL) return head; new_head = reverse_list(head->next); head->next->next=head; head->next=NULL; //防止链表成为一个环,这是最关键的。 return new_head; } 2、写出程序删除链表中的所有接点 void del_all(node *head) { node *p; while(head!=NULL) { p=head->next; free(head); head=p; } ----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------- ----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- cout<<\释放空间成功!\} 3、使用冒泡、选择法、快速排序法对数组进行排序 1)“冒泡法” 冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较, 若a[0]>a[i],则交换它们,一直比较到a[n]。 同理对a[1],a[2],...a[n-1]处理,即完成排序。 void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/ { int i,j,temp; for(i=0;i for(j=i+1;j temp=a[i]; a[i]=a[j]; a[j]=temp; } }/*注意循环的上下限*/ } } 冒泡法原理简单,但其缺点是交换次数多,效率低。 下面介绍一种源自冒泡法但更有效率的方法“选择法”。 (2)“选择法” 选择法循环过程与冒泡法一致,它还定义了记号k=i 然后依次把a[k]同后面元素比较,若a[k]>a[j],则使k=j. 最后看看k=i是否还成立,不成立则交换a[k],a[i] 这样就比冒泡法省下许多无用的交换,提高了效率。 void choise(int *a,int n) { int i,j,min,temp; for(i=0;i min=i; /*给记号赋值*/ for(j=i+1;j if(a[min]>a[j]) min=j; /*是min总是指向最小元素*/ ----------------------------精品word文档 值得下载 值得拥有---------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------
正在阅读:
嵌入式软件工程师综合测试试题答案09-21
济南时报电子版02-11
2010年行政管理学题纲 - 副本07-29
word基础试题12-10
湖南网络工程职业学院09-14
叶子的四季作文600字07-11
2013年7月奥鹏中国医科大学《康复护理学》网上试题04-13
REACH法规 第四卷译稿-212-22
各大搜索引擎高级搜索语法整理及语法详解06-02