考题

来源:互联网 发布:vc数字图像处理编程 编辑:程序博客网 时间:2024/04/29 14:11


1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用/"::/"局部变量可以与全局变量同名,在...
 华为经典C&C++ 笔试题(
1、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用/"::/"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

2、如何引用一个已经定义过的全局变量?
答:extern
可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错
4、语句for( ;1 ;)有什么问题?它是什么意思?
答:和while(1)相同。
5、do……while和while……do有什么区别?


答:前一个循环一遍再判断,后一个判断以后再循环

 


1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。 jobhere.net
static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。
3、设有以下说明和定义:
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
则语句 printf(/"%d/",sizeof(struct date) sizeof(max));的执行结果是:___52____
答:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20
data是一个struct, 每个变量分开占用空间. 依次为int4 DATE20 double8 = 32.

所以结果是 20 32 = 52.
当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 DATE10 double8 = 20
4、队列和栈有什么区别?
队列先进先出,栈后进先出
5、写出下列代码的输出内容
#include
int inc(int a)
{
return( a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);

void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf(/"%d/n/",*arg2);
}

main()
{
int a;
show(multi,10,&a);
return 0;
}
答:110
7、请找出下面代码中的所以错误
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

1、#include/"string.h/"
2、main()
3、{
4、 char*src=/"hello,world/";
5、 char* dest=NULL;
6、 int len=strlen(src);
7、 dest=(char*)malloc(len);
8、 char* d=dest;
9、 char* s=src[len];
10、 while(len--!=0)
11、 d =s--;
12、 printf(/"%s/",dest);
13、 return 0;
职场网


14、}
答:
方法1:
int main(){
char* src = /"hello,world/";
int len = strlen(src);
char* dest = (char*)malloc(len 1);//要为/0分配一个空间
char* d = dest;
char* s = &src[len-1];//指向最后一个字符
while( len-- != 0 )
*d =*s--;
*d = 0;//尾部要加/0
printf(/"%s/n/",dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}
方法2:
#include
#include
main()
{
char str[]=/"hello,world/";
int len=strlen(str);
char t;
for(int i=0; i
{
t=str[i];
str[i]=str[len-i-1]; str[len-i-1]=t;
}
printf(/"%s/",str);
return 0;
}
1.-1,2,7,28,,126请问28和126中间那个数是什么?为什么?
第一题的答案应该是4^3-1=63
规律是n^3-1(当n为偶数0,2,4)
n^3 1(当n为奇数1,3,5)
答案:63
2.用两个栈实现一个队列的功能?要求给出算法和思路!
设2个栈为A,B, 一开始均为空.

入队:
将新元素push入栈A;

出队:
(1)判断栈B是否为空;
(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;
(3)将栈B的栈顶元素pop出;
中国职场在线

 

这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好。3.在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么?
函数名: atol
功 能: 把字符串转换成长整型数
用 法: long atol(const char *nptr);
程序例:
#include
#include
int main(void)
{
long l;
char *str = /"98765432/";

l = atol(lstr);
printf(/"string = %s integer = %ld/n/", str, l);
return(0);
}
2.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C 中应用什么实现?
c用宏定义,c 用inline
3.直接链接两个信令点的一组链路称作什么?
PPP点到点连接
4.接入网用的是什么接口?
5.voip都用了那些协议?
6.软件测试都有那些种类?
黑盒:针对系统功能的测试 白合:测试函数功能,各函数接口
7.确定模块的功能和模块的接口是在软件设计的那个队段完成的?
概要设计阶段
8.enum string
{
x1,
x2,
x3=10,
x4,
x5,
}x;
问x= 0x801005,0x8010f4 ;
9.unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问p1 5= ;
p2 5= ;

10.设有以下说明和定义:
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
则语句 printf(/"%d/",sizeof(struct date) sizeof(max));的执行结果是:___52____

11.队列和栈有什么区别?
队列先进先出,栈后进先出

12.写出下列代码的输出内容
#include
int inc(int a)
{
return( a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(i www.jobhere.nett in);
typedef int(FUNC2) (int*,int*,int*);

void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf(/"%d/n/",*arg2);
}

main()
{
int a;
show(multi,10,&a);
return 0;
}

翻译一下
==================================
#include
using namespace std;

// 返回a 1
int inc(int a){
return a 1;
}
// out = a*b
int multi(int& a, int& b, int& out){
return out = a*b;
}

// 定义两种函数,FUNC1对应inc, FUNC2对应 multi
typedef int(FUNC1) (int in);
typedef int(FUNC2) (int&,int&,int&);

// 诡异的函数,这是模糊C大赛么...
void show( FUNC2* func, int num, int& out ){
FUNC1* pInc = inc;//原文这句写错了...orz... INC根本没定义
int numAdd1 = pInc( num ); jobhere.net
// 等价于 numAdd1 = inc( num );
// 结果 num仍然是10, numAdd1 = 11

// 调用func函数,可以看到, main中传给func的是 multi.
// 所以调用的是 multi( 11, 10, out ), out = 110
func( numAdd1, num, out );
cout<}

int main(){
int a;
show(multi,10, a);
return 0;
}
==================================

13.请找出下面代码中的所以错误
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
==================================
main(){
char*src=/"hello,world/";
char* dest=NULL;

int len=strlen(src);
dest=(char*)malloc(len);//!1 少分配了一字节. strlen计数不包括/0

char* d = dest;
char* s = src[len];//!2 两个错误. 应该为 &src[ len-1 ]
while( len-- != 0 )
d =s--;//!3 *d = *s--;
//!4 尾部要/0,应加上 *d = 0;

printf(/"%s/",dest);
return 0;
}
================================== jobhere.net

修正后的答案:
==================================
int main(){
char* src = /"hello,world/";

int len = strlen(src);
char* dest = (char*)malloc(len 1);.

char* d = dest;
char* s = &src[len-1];
while( len-- != 0 )
*d =*s--;
*d = 0;

printf(/"%s/",dest);
    return 0;
}


结构面试题


#include
void main()
{
union
{
struct
{
unsigned short s1:3;
unsigned short s2:3;
unsigned short s3:3;
}x;
char c;
}
}v;

v.c=100;
printf(/"%d/n/",v.x.s3);
}
A:4 B:0 C:3 D:6
答案是A

但我在TURBO C中运行答案是1
请问 是因为TURBO C 版本在原因而运行结果不一样吗?
我用在TURBO C V2.0版本
能解释一下为甚么是4或1?
而v.x.s1和v.x.s2的 值 在TURBO C V2.0版本运行的结果是?
其中unsigned short s1:3; 中的“:”又是什么意思?
-----------------------------
二、位结构
位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构
比按位运算符更加方便。
位结构定义的一般形式为:
struct位结构名{
数据类型 变量名: 整型常数;
数据类型 变量名: 整型常数;
} 位结构变量;
其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。
变量名是选择项, 可以不命名, 这样规定是为了排列需要。
例如: 下面定义了一个位结构。
struct{
unsigned incon: 8; /*incon占用低字节的0~7共8位*/
unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4位*/
unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3位*/
unsigned blink: 1; /*blink占用高字节的第7位*/
}ch;
位结构成员的访问与结构成员的访问相同。
例如: 访问上例位结构中的bgcolor成员可写成:
ch.bgcolor

注意:
1. 位结构中的成员可以定义为unsigned, 也可定义为signed, 但当成员长度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。

中国职场在线


2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针, 如果是指针, 其成员访问方式同结构指针。
3. 位结构总长度(位数), 是各个位成员定义的位数之和, 可以超过两个字节。
4. 位结构成员可以与其它结构成员一起使用。
例如:
struct info{
char name[8];
int age;
struct addr address;
float pay;
unsigned state: 1;
unsigned pay: 1;
}workers;'
上例的结构定义了关于一个工从的信息。其中有两个位结构成员, 每个位结构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。

-----------------------------
结构struct x,有三个成员s1,s2,s3每一个成员占3 bit,
结构与char c union ;
char 一般机器占一个字节(8 bit ,100 二进制值为:01100100,所以s1后三bit(6,7,8 bit) :100
s2为中间三位(3,4,5 bit)为100 s3为01,所以printf(/"%d/n/",v.x.s3)是1,其它是4
-----------------------------
现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位。
职场网


100 的二进制是 001 100 100

低位在前 高位在后

001----s3

100----s2

100----s1

所以结果应该是 1

如果先申明的在低位则:

001----s1

100----s2

100----s3

结果是 4
-----------------------------
其中unsigned short s1:3; 中的“:”又是什么意思?
指定位段, 3代表预定s1占3bit.

为什么是4?

struct
{
unsigned short s1:3; //一个字节. 虽然预定为3bit,但系统的存储空间为至少一字节.
unsigned short s2:3; //一个字节
unsigned short s3:3; //一个字节
}x;
这样在联合union中最大的成员为三个字节,而最终结果为了内存对齐(对齐为4的倍数).取为4.
1G/2G/2.5G/3G的区别?

  1G(first generation)表示第一代移动通讯技术。如现在以淘汰的模拟移动网。

  2G(second generation)表示第二代移动通讯技术。代表为GSM。以数字语音传输技术为核心。

  2.5G是基于2G与3G之间的过渡类型。代表为GPRS。比2G在速度、带宽上有所提高。可使现有GSM网络轻易地实现与高速数据分组的简便接入。

  3G(third generation)表示第三代移动通讯技术。面向高速、宽带数据传输。国际电信联盟(ITU)称其为IMT-2000(International Mobile Telecom-munication)。最高可提供2Mbp/s的数据传输速率。主流技术为CDMA技术代表有WCDMA(欧,日)、CDMA2000(美)和TD-SCDMA(中)。

三.选择题:
1.Ethternet链接到Internet用到以下那个协议?
A.HDLC;B.ARP;C.UDP;D.TCP;E.ID
2.属于网络层协议的是:
A.TCP;B.IP;C.ICMP;D.X.25 www.jobhere.net
3.Windows消调度机制是:
A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;
4.unsigned short hash(unsigned short key)
{
return (key>>)%6
}
请问hash(16),hash(256)的值分别是:
A.1.16;B.8.32;C.4.16;D.1.32
四.找错题:
1.请问下面程序有什么错误?
int a[60][250][1000],i,j,k;
for(k=0;k<=1000;k )
for(j=0;j<250;j )
for(i=0;i<60;i )
a[i][j][k]=0;
把循环语句内外换一下
2.#define Max_CB 500
void LmiQueryCSmd(Struct MSgCB * pmsg)
{
unsigned char ucCmdNum;
......

for(ucCmdNum=0;ucCmdNum
{
......;
}
死循环
3.以下是求一个数的平方的程序,请找出错误:
#define SQUARE(a)((a)*(a))
int a=5;
int b;
b=SQUARE(a );
4.typedef unsigned char BYTE
int examply_fun(BYTE gt_len; BYTE *gt_code)
{
BYTE *gt_buf;
gt_buf=(BYTE *)MALLOC(Max_GT_Length);
......
if(gt_len>Max_GT_Length)
{
return GT_Length_ERROR;
}
.......
}
五.问答题:
1.IP Phone的原理是什么?
IPV6
2.TCP/IP通信建立的过程怎样,端口有什么作用? 职场网
三次握手,确定是哪个应用程序使用该协议
3.1号信令和7号信令有什么区别,我国某前广泛使用的是那一种?
4.列举5种以上的电话新业务?