嵌入式软件工程师综合测试试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
综合测试试题
第一部分:C语言
一、请填写BOOL , float, 指针变量与“零值”比较的if 语句。
提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如int 变量n 与“零值”比较的if 语句为:
if ( n == 0 )
if ( n != 0 )
以此类推。
请写出BOOL flag 与“零值”比较的if 语句:
请写出float x 与“零值”比较的if 语句:
请写出char *p 与“零值”比较的if 语句:
二、以下为Windows NT下的32位C++程序,请计算sizeof的值
char str[] = “Hello” ; char *p = str ;
int n = 10;
请计算
sizeof (str ) =
sizeof ( p ) =
sizeof ( n ) = void Func ( char str[100]) {
请计算
sizeof( str ) =
}
void *p = malloc( 100 ); 请计算
sizeof ( p ) =
三、简答题
1、头文件中的ifndef/define/endif 干什么用?
2、#include
3、const 有什么用途?(请至少说明两种)
4、在C++ 程序中调用被C编译器编译后的函数,为什么要加extern “C”声明?
5、请简述以下两个for循环的优缺点
// 第一个
for (i=0; i if (condition) DoSomething(); else DoOtherthing(); } // 第二个 if (condition) { for (i=0; i } else { for (i=0; i 优点:缺点:优点:缺点: 四、有关内存的思考题 void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); } 请问运行Test函数会有什么样的结果?答:char *GetMemory(void) { char p[] = "hello world"; return p; } void Test(void) { char *str = NULL; str = GetMemory(); printf(str); } 请问运行Test函数会有什么样的结果?答: Void GetMemory2(char **p, int num) { *p = (char *)malloc(num); } void Test(void) { char *str = NULL; GetMemory(&str, 100); strcpy(str, "hello"); printf(str); } 请问运行Test函数会有什么样的结果?答:void Test(void) { char *str = (char *) malloc(100); strcpy(str, “hello”); free(str); if(str != NULL) { strcpy(str, “world”); printf(str); } } 请问运行Test函数会有什么样的结果?答: 五、编写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)); char *address = strDest; while ( (*strDest++ = *strSrc++) != '\0' ) ; return address; } (2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?为了实现链式表达式 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;