笔试题1

来源:互联网 发布:云计算判断题 编辑:程序博客网 时间:2024/06/15 22:18
  1. 一、请填写BOOL, float, 指针变量 与 “零值”比较的if语句。
请写出BOOL  flag 与 "零值"比较的if语句:if(flag)if(!flag)整型变量与零值比较if(value == 0)if(value != 0)浮点变量与零值比较float x = 0.000001;float 4位 精度为7位有效数字, 如果小于0.000001,则不在有效精度范围内,被认为都是0if(DATA >= -X && DATA <= X);指针变量与0比较if(p == NULL);if(p != NULL);不要写成if(p == 0);//容易让人误解P是整型变量if(p != 0);

2.二、以下为Windows NT下的32位C++程序,请计算sizeof的值

char str[] = "hello";char *p = str;int n = 10;    sizeof(str) = 6; //不要忘记“/0”    sizeof(p) = 4; //32位指针是4个字节    sizeof(n) = 4; 
void Func(char str[100]){    sizeof(str) = 4; //STR是指针}void *p = malloc(100)    sizeof(p) = 4; 

1 头文件中的ifndef/define/endif作什么用?

1,比如你有两个C文件,都加了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。
2 //#include <filename.h>和#include "filename.h"有什么区别//<>查系统文件比较快 ,"" 查路径快

3 const有什么用途(请至少说明两种)

//const修饰的数据类型是指常类型1.可以定义const常量const int i = 100;2.可以保护被修饰的东西,防止意外的修改。3.便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改;4.可以节省空间,避免不必要的内存分配。 例如:#define PI 3.14159 //常量宏const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......double i=Pi; //此时为Pi分配内存,以后不再分配!double I=PI; //编译期间进行宏替换,分配内存double j=Pi; //没有内存分配double J=PI; //再进行宏替换,又一次分配内存!const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。5. 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。 

请简述以下两个for循环体的优缺点

第一个for(i =0; i < n; i++){    if(conditon)        DoSomething();    else        DoSomething();}第二个if(condition){    for(i = 0; i < n; i++)        DoSomething();}else    {    for(i = 0; i < n; i++)        DoSomething();}第一个缺点:性能较低,每次循环都有一次条件判断;优点:可读性高,可扩展性高。第二个优点:性能较高,循环内没有条件判断。缺点:不好扩展,如果加入新的条件,改动的代码过多,体积臃肿。

四、有关内存的思考题

第一道void GetMemory(char *p){    p = (char *)malloc(100);}void Test(void){    char *str = NULL;    GetMemory(str);    strcpy(str, "hello world");    printf(str);}请问运行Test函数会有什么样的结果?程序崩溃。 str一直指向NULL。char *GetMemory(void){    char p[] = "hello world";    return p;}void Test(void){    char *str = NULL;    str = GetMemory();    printf(str);}请问运行Test函数会有什么样的结果?可能是乱码。 GetMemory 返回是指向 “栈内存” 的指针。

五、编写strcpy函数
已知strcpy函数的原型是:char *strcpy(char *strDest, const char *strSrc)
其中strDest是目的字符串,strSrc是源字符串

#include <stdio.h>char *strcpy(char *strDest, const char *strSrc){    if(strDest == NULL || strSrc == NULL)        return NULL;    if(strDest == strSrc)        return strDest;    char *ret = strDest;    while((*strDest++ = *strSrc++)!= '\0');        return ret;}