|
2005年11月神州数码华工笔试题C++部分两个大题
1.char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?
答:可能是乱码。
因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
2.输入一个整数,要求每一位的数字相加,直至结果为一位数,如552,相加得12,再次相加得3.
解答:1递归实现
#include<stdio.h>
int add(int a)
{
int b=0;
while(a!=0)
{
b+=a%10;
a=a/10;
}
if(b/10==0)
printf("\nthe result:%d",b);
else add(b);
return 1;
}
void main()
{
int num;
printf("input a integer:");
scanf("%d",&num);
if(num<0)num=-num;
if(num/10==0)
printf("\nthe result:%d",num);
else add(num);
}
2.迭代实现
#include<stdio.h>
void main()
{
int num,total;
total=0;
printf("input a integer:");
scanf("%d",&num);
if(num<0)num=-num;
while(num!=0)
{
total+=num%10;
num=num/10;
if(num==0)
if(total/10==0)break;
else {num=total;total=0;}
}
printf("\nthe result:%d",total);
}
注意:递归与迭代的比较,递归可能受到堆栈的可利用容量的限制,其次,递归占用较多的运行内存,频繁调用函数会在堆栈中产生较多的运行开销. |
|