1) { quiz(m/2); quiz(m/2); } pri">

网新恒天笔试题目

时间:2019-11-07 04:20:58 笔试题目 我要投稿

网新恒天笔试题目

#include \"stdio.h\" #include \"stdlib.h\" void quiz(int m) { if(m>1) { quiz(m/2); quiz(m/2); } printf(\"*\"); } int main(void) { quiz(5); system(\"pause\"); return 0; } 请问:输出几个*???(多次递归,*******7个 面试题目: 一、费波纳茨数列的非递归表示:(类似于求最大公约数的辗转相除法) int f(int n) //求第n个费波纳茨数
{
int a=1,b=1,c,i;
for(i=3;i<=n;i++)
{
c=a+b;
a=b;
b=c;
}
return c;
}
int gcd(int m,int n) //求最大公约数
{
int r;
while(r=m%n)
{
m=n;
n=r;
}
return n;
}
二、变量的存储位置 int m; int main(void)
{
int k;
static int p;
char *s=(char *)malloc(2);
return 0;
}
上述4个变量的存放位置在哪里?其默认输出值是多少??
答案:全局变量m与静态变量p存放的位置是一样的,共同占用同一块内存区,都在全局/静态存储区。 注意:全局变量和静态变量如果没有手工初始化,则有编译器初始化为0,局部变量的值不可知,是随机的。(m、p的默认输出值为0) 局部变量k是在需要的时候申请的,存放位置在栈上,由于局部变量没有初始化,其默认输出值是一个随机值。 char *s=(char *)malloc(2); 这条短短的语句包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针s呢? 它分配的是一块栈内存,所以这句话的意思就是:在栈内存中存放了一个指向一块堆内存的指针s。在程序运行中,会首先确定在堆中分配内存的大小,然后调用operator new 分配内存,然会返回这块地址的首地址,放入栈中。 在C++中,内存分成了5个区,它们分别是全局/静态存储区、堆、栈、自由存储区和常量存储区。 全局/静态存储区被分配到了同一块内存区中。 栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区,里面的变量通常是局部变量、函数参数等。
堆:就是那些由new分配的内存块,他们的释放编译器不去管的,由我们的应用程序来手工控制释放的,一般一个new就要对应一个。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区:就是那些由malloc等分配的内存块,它和堆是十分相似的,不过它是由free来结束自己的生命的。

int main(void) { int i=3,*j,z=5; j=&i; cout<<\"i的地址\"<<j<<endl; cout<<\"指针的地址\"<<&j<<endl; cout<<sizeof(j)<<endl; j=&z; cout<<\"z的地址\"<<j<<endl; cout<<\"指针的地址\"<<&j<<endl; system(\"pause\"); return 0; } 输出的第二个与第四个值完全是一样的,就是j这个指针首先指向i这个变量,然后又改变为指向z这个变量,但是指针的地址还是没有变的,只是指向发生了变化。
struct node { int data; struct node *next; }*s; int main(void) { int *p,k; s=(node *)malloc(sizeof(node)); k=int(s); // s是一个结构体指针,是一个十六进制的数,强制类型转换为十进制的int类型变量k p=(int*)(s); //s是一个结构体指针,若要给int类型的指针进行赋值,需要进行强制类型转换,否则无法通过编译的。 cout<<k<<endl; // 将s这个结构体指针指向的十六进制地址,转化为int类型的变量 cout<<p<<endl; //s转换为int类型的指针后,p跟s的值还是一样的,只不过p不能通过->来操作data、next了 cout<<s<<endl; system(\"pause\"); return 0; } 三、请问怎样用两个栈实现一个队列?
照着这个思路做:
假设两个栈 A 和B,且都为空。
可以认为栈 A 为提供入队列的功能,栈 B 提供出队列的功能。
入队列: 入栈 A
出队列:
1、如果栈 B 不为空,直接弹出栈 B 的数据。
2、如果栈 B 为空,则依次弹出栈 A 的`数据,放入栈 B 中,再弹出栈 B 的数据。
四、要对外存储器上的4G文件进行排序,内存只有2G大,如何实现? 五、对于一个频繁使用的短小函数,在C语言中应该使用什么来实现,在C++中应该使用什么来实现?
答案:C用宏定义,C++用inline函数。
内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接镶嵌到目标代码中。
  内联函数要做参数类型检查,这是内联函数跟宏相比的优势。
  inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说,inline可以带来一定的效率提升,而且和C时代的宏函数相比,inline更安全可靠。可是这个是以增加空间消耗为代价的。
宏是在代码处不加任何验证的简单替代,而内联函数是将代码直接插入调用处,而减少了普通函数调用时的资源消耗。
  宏不是函数,只是在编译前(编译预处理阶段)将程序中有关字符串替换成宏体。
  inline函数是函数,但在编译中不单独产生代码,而是将有关代码嵌入到调用处。
内联函数与宏定义区别
(1)内联函数在编译时展开,宏在预编译是展开;
(2)内敛函数直接嵌入到目标代码中,宏是简单的做文本替换;
(3)内敛函数有类型检测、语法判断等功能,而宏没有;
(4)inline函数是函数,宏不是;
(5)宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义;
六、自己编程实现strcpy、strlen字符串操作函数 char *strcpy(char *dest,char *src)
{
if(dest==NULL || src==NULL)
return NULL;
if(dest==src)
return dest;
char *temp=dest;
while((*dest++=*src++)!=\\\0\);
return temp;
}
int strlen(char *src)
{
if(src==NULL)
return 0;
char *p=src;
int length=0;
while(*p++)
length++;
return length;
}

【网新恒天笔试题目】相关文章:

1.海信网申笔试题目

2.笔试题目

3.金立笔试题目

4.KPMG笔试题目

5.笔试题目4

6.笔试题目1

7.笔试题目5

8.Sony笔试题目