C语言&C++公司笔试经典题目及答案

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*
* 本资料来自:编程资料库(Programme Library)
* 版权(Copyright) (C)2009.05.23 紫色代码[PurpleCode]
*/

1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。
答案:
#define Max(a,b) ( a/b)?a:b

2.如何输出源文件的标题和目前执行行的行数?
答案:
printf("The file name: %s\n", __FILE__);
printf("The current line No:%d\n", __LINE__);

ANSIC标准预定义宏:

__LINE__

__FILE__

__DATE__

__TIME__

__STDC__ 当要求程序严格遵循ANSI C标准时该标识符被赋值为1。

C++版本:
#include

#include
using namespace std;

int main(int argc,char **argv)
{
int line = __LINE__; //注意:LINE前后分别是两个下划线“_”(半角状态下)
string file = __FILE__;
cout<cout<}

C版本:
#include

void main()
{
int line = __LINE__;
char * file = __FILE__;
printf("%d\n", line);
printf("%s\n", file);
}

3.两个数相乘,小数点后位数没有限制,请写一个高精度算法。
答案:
#include
#include

int n,dotaddr,dotnum;
char r[7];
char res[160],tres[160];

void multiple(char *num1,char *num2,char *res){
char t2[160];
int len1,len2;
int tres,add,co;
int offset;
int lt;

offset = 0;
for(len2=0;len2add = 0;
co = 0;
memset(t2,'\0',sizeof(t2));
for(len1=0;len1tres = (num2[len2]-'0')*(num1[len1]-'0')+add;
add = tres/10;
tres = tres%10;
t2[co++] = tres+'0';
}
if(add != 0)
t2[co] = add+'0';
add = 0;
for(lt=0;ltif(res[lt+offset] != '\0'){
tres = res[lt+offset]-'0' + t2[lt]-'0'+add;
add = tres/10;
res[lt+offset] = tres%10+'0';
}
else{
tres = t2[lt]-'0'+add;
add = tres/10;
res[lt+offset] = tres%10+'0';
}
}
if(add != 0){
res[lt+offset] = add+'0';
}
offset++;
}
//printf("%s\n",res);
}

void output(char *s){
int lt;
int tzp;
int intnum;

for(lt=0;ltif(s[lt] != '0')
break;
tzp = lt;
if(dotnum>0)
dotnum = dotnum*n;
else
dotnum = 0;
intnum = strlen(s)-dotnum;
if(dotnum==0){
for(lt=0;lt<=intnum;lt++)
printf("%c",s[strlen(s)-1-lt]);
printf("\n");
}
else{
for(lt=strlen(s)-1;lt>=strlen(s)-intnum;lt--)
if(s[lt]>'0')
break;
for(lt=lt;lt>=strlen(s)-intnum;lt--)
printf("%c",s[lt]);
printf(".");
for(lt=lt;lt>=tzp;lt--)
printf("%c",s[lt]);
printf("\n");
}
}

int main(int argv,char args[]){
char tr[7];
int lt;
int co;

while(scanf("%s %d",tr,&n)==2){
co = 0;
dotaddr = 6;
memset(r,'\0',sizeof(r));
for(lt=0;ltif(tr[lt] != '.')
r[co++] = tr[lt];
else
dotaddr = lt;
}
for(lt=strlen(tr)-1;lt>=0;lt--){
if(tr[lt]!='0')
break;
}
dotnum = lt-dotaddr;
for(lt=strlen(r)-1;l

t>=dotaddr;lt--)
if(r[lt] != '0')
break;
for(co=strlen(r)-1;co>lt;co--)
r[co]='\0';
strcpy(tr,r);
co = 0;
for(lt=strlen(tr)-1;lt>=0;lt--){
r[co++] = tr[lt];
}
if(n==0)
printf("1\n");
else{
strcpy(tres,r);
for(lt=0;ltmemset(res,'\0',sizeof(res));
multiple(tres,r,res);
strcpy(tres,res);
}
}
output(tres);
}
}

4.写一个病毒。
答案:
while (1)
{
int *p = new int[10000000];
}

5.Internet采用哪种网络协议?该协议的主要层次结构?
答案:
Tcp/Ip协议;
主要层次结构为: 应用层/传输层/网络层/数据链路层/物理层。

6.static有什么用途?(请至少说明两种)
答案:
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

7.引用与指针有什么区别?
答案:
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。

8.描述实时系统的基本特性。
答案:
在特定时间内完成特定的任务,实时性与可靠性。

9.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
答案:
全局变量储存在全局静态存储区,局部变量在堆栈。

10.什么是平衡二叉树?
答案:
左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。

11.堆栈溢出一般是由什么原因导致的?
答案:
没有回收内存垃圾资源。

12.什么函数不能声明为虚函数?
答案:
构造函数。

13.分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。
答案:
BOOL: if ( !a ) or if(a)

int: if ( a == 0)

float: const EXPRESSION EXP = 0.000001
if ( a < EXP && a >-EXP)

pointer: if ( a != NULL) or if(a == NULL)

14.Internet物理地址和IP地址转换采用什么协议?
答案:
ARP (Address Resolution Protocol)(地址解析协议)

15.IP地址的编码分为哪俩部分?
答案:
IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

16.不能做switch()的参数类型
答案:
实型。

17.某32位系统下, C++程序,请计算sizeof的值。
char str[] = “”
char *p = str ;
int n = 10;
请计算
sizeof (str ) = ?(1)
sizeof ( p ) = ?(2)
sizeof ( n ) = ?(3)
void Foo ( char

str[100]){
请计算
sizeof( str ) = ?(4)
}
void *p = malloc( 100 );
请计算
sizeof ( p ) = ?(5)
答案:
17 (字符1个字节一个,17个字符)
4 (指针类型的长度都是4个字节)
4 (int类型4个字节)
4 (传到函数里面的是指针,还是4个字节)
4 (指针,或叫地址就是4个字节)

18.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值。
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答案:
C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11。

19.头文件中的 ifndef/define/endif 干什么用?预处理
答案:防止头文件被重复引用。

20.#include 和 #include “filename.h” 有什么区别?
答案:
前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件

21.在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
答案:
函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。

22.
答案:

23.
答案:

24.
答案:

25.
答案:

相关文档
最新文档