c语言笔试招聘,华为招聘--C语言笔试试题

一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分)

1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。(     )

2、int (*ptr) (),则ptr是一维数组的名字。(     )

3、指针在任何情况下都可进行>,=,<=,==运算。(     )

4、switch(c) 语句中c可以是int ,long,char ,float ,unsigned int 类型。(   )

5、#define print(x)  printf("the no, "#x",is ")

二、填空题(共30分)

1、在windows下,写出运行结果,每空2分,共10分。

char str[ ]= "Hello";

char *p=str;

int n=10;

sizeof(str)=(      )

sizeof(p)=(       )

sizeof(n)=(       )

void func(char str[100])

{    }

sizeof(str)=(     )

2、void setmemory(char **p, int num)

{ *p=(char *) malloc(num);}

void test(void)

{  char *str=NULL;

getmemory(&str,100);

strcpy(str,"hello");

printf(str);

}

运行test函数有什么结果?(                                )10分

3、设int arr[]={6,7,8,9,10};

int *ptr=arr;

*(ptr++)+=123;

printf("%d,%d",*ptr,*(++ptr));

(                                   ) 10分

二、编程题(第一小题20,第二小题30分)

1、  不使用库函数,编写函数int strcmp(char  *source, char *dest)

相等返回0,不等返回-1;

2、  写一函数int fun(char *p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1

五、 阅读程序题(每个小题5分,共20分)

1.阅读以下程序,概括地写出程序的功能。

#i nclude

double Exp(double x)

{ double sum=1.0;

double term=x;

double i=1 ;

while (term>=1.0E-8)

{ sum+=term ;

i++;

term=term*x/i ;

}

return sum ;

}

void main()

{ double s;

s=Exp(1.0)+Exp(2.0);

cout.precision(8);

cout<

}

2. 阅读程序,写出程序执行时输出结果。

#i nclude

const int SIZE=10;

class stack

{ char stck[SIZE];

int top;

public:

void init();

void push(char ch);

char pop();

};

void stack::init()

{ top=0; }

void stack::push(char ch)

{ if(top==SIZE)

{ cout<

return ;

}

stck[top++]=ch;

}

char stack::pop()

{ if(top==0)

{ cout<

return 0;

}

return stck[--top];

}

void main()

{ stack s1, s2;

s1.init();

s2.init();

s1.push('a');

s1.push('b');

s1.push('c');

s2.push('x');

s2.push('y');

s2.push('z');

for(int i=0; i<3; i++)

cout<

for(i=0; i<3; i++)

cout<

}

程序结果:

3.阅读程序,写出程序运行时输出结果。

#i nclude

class Tdate

{ public:

Tdate();

Tdate(int d);

Tdate(int m, int d);

Tdate(int m, int d, int y);

protected:

int month;

int day;

int year;

};

Tdate::Tdate()

{ month=4;

day=15;

year=1995;

cout<<

}

Tdate::Tdate(int d)

{ month=4;

day=d;

year=1996;

cout<<

}

Tdate::Tdate(int m, int d)

{ month=m;

day=d;

year=1997;

cout<<

}

Tdate::Tdate(int m, int d, int y)

{ month=m;

day=d;

year=y;

cout<<

}

void main()

{ Tdate aday;

Tdate bday(10);

Tdate cday(2,12);

Tdate dday(1,2,1998);

}

运行结果:

4.阅读程序,写出程序运行时输出结果。

#i nclude

#i nclude

class shape

{ public:

shape(double x, double y):xCoord(x), yCoord(y){}

virtual double Area()const {return 0.0; }

protected:

double xCoord, yCoord;

};

class AA :public shape

{ public:

AA(double x, double y, double r): shape(x,y), rad(r){}

virtual double Area()const { return 3.0 * rad * rad; }

protected:

double rad;

};

class BB :public shape

{ public:

BB(double x1, double y1, double x2, double y2)

:shape(x1, y1), x2Coord(x2), y2Coord(y2){ }

virtual double Area()const;

protected:

double x2Coord, y2Coord;

};

double BB:Area()const

{ return fabs((xCoord-x2Coord)* (yCoord - y2Coord));

//库函数fabs(double t)求得t的绝对值

}

void fun(const shape& sp)

{ cout<<

}

void main()

{ AA aa(2.0, 5.0, 4.0);

fun(aa);

BB bb(2.0, 8.0, 12.0, 17.0);

fun(bb);

}

运行结果:

六、 编写程序题(每小题10分,共20分)

1.编写一个函数int Judge(int *pArray, int n),判断一个n×n二维整数数组pArray 是否为“魔方阵”,若是返回1,否则返回0。所谓魔方阵就是将1到n2的各个数字组成的方阵,它的每一行、每一列以及两个对角线上数字之和均相等。例如,3×3的中,A是魔方阵,而B不是魔方阵。然后在主程序中调用Judge函数判断数组A是否为魔方阵。

参考程序

#i nclude

int Judge(int *pArray, int n)

{ int s1, s2, s3,s4,sum=0;

int *p=pArray;

for(int i=1; i<= n*n; i++)

{ int Found=0; //为0,不在方阵中;

for(int j=0; j

if(p[j]==i)

{ Found=1; //为1,在方阵中

break;

}

if(Found==0) return 0; // 值为 i 的元素不在数组中,显然不是魔方阵

}

for( i=1; i<=n*n; i++)

sum=sum+i;

sum=sum / n; // 各行、各列、对角线元素应当得到的和

s3=0;

s4=0;

for( i=0; i

{ s1=0, s2=0;

p=pArray;

for(int j=0; j

{ s1=s1+p[i*n+j]; //第i行的元素和

s2=s2+p[j*n+i]; //第i列的元素和

}

if ( s1!=sum)

return 0;

if ( s2!=sum)

return 0;

s3=s3+pArray[i*n+i];     // 对角线一元素和

s4=s4+pArray[i*n+(n-1-i)]; // 对角线二元素和

}

if(s3!=sum)

return 0;

if(s4 != sum)

return 0;

return 1;

}

void main()

{ int Array[3][3]={{ 8, 1, 6},{ 3, 5, 7},{ 4, 9, 2}};

当 x 输入值为9999时,函数返回值为多少?

int fun ( unsigned int x )

{ int count = 0;

while(x)

{

x = x & (x-1);

count++;

}

return count;

}

答案:此函数是在计算 x 中含有1的个数,所以返回值为8。

if(Judge((int*)Array, 3))

cout<

else

cout<

}

/*********************************

* 两个超大数相乘算法

*********************************/

#i nclude

void main()

{

int a[30],b[30],c[60];

int i,j;

/* 给乘数和被乘数赋值,并把结果赋零 */

for (i=0;i<30;i++)

{

a[i]=i%10;

b[i]=i%10;

c[2*i]=0;

c[2*i+1]=0;

}

/* 给每位结果赋值,这里应该考虑清楚为什么这么写

还有这里的位的值的最大限度应该是-128 -- +127

所以就算是10*10也可以满足存进去一个char类型里 */

for(i=0;i<30;i++)

for(j=0;j<30;j++)

c[i+j]+=a[i]*b[j];

/* 这里把每个位>10的数进位和把余数重新赋值给这一位 */

for(i=0;i<59;i++)

{

c[i+1]+=c[i]/10;

c[i]=c[i]%10;

}

/* 打印出来 */

for(i=0;i<30;i++)

printf("%d",a[30-i-1]);

printf("\n");

for(i=0;i<30;i++)

printf("%d",b[30-i-1]);

printf("\n");

for(i=0;i<60;i++)

printf("%d",c[60-i-1]);

printf("\n");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值