CC++语言程序设计笔试面试题5.docx

上传人:b****3 文档编号:2968445 上传时间:2022-11-16 格式:DOCX 页数:9 大小:19.28KB
下载 相关 举报
CC++语言程序设计笔试面试题5.docx_第1页
第1页 / 共9页
CC++语言程序设计笔试面试题5.docx_第2页
第2页 / 共9页
CC++语言程序设计笔试面试题5.docx_第3页
第3页 / 共9页
CC++语言程序设计笔试面试题5.docx_第4页
第4页 / 共9页
CC++语言程序设计笔试面试题5.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

CC++语言程序设计笔试面试题5.docx

《CC++语言程序设计笔试面试题5.docx》由会员分享,可在线阅读,更多相关《CC++语言程序设计笔试面试题5.docx(9页珍藏版)》请在冰豆网上搜索。

CC++语言程序设计笔试面试题5.docx

CC++语言程序设计笔试面试题5

一、输入一个n,然后在屏幕上打印出NxN的矩阵!

例如,输入一个3,则

123

894

765

输入一个4,则

1   2 3 4

1213145

1116156

10 9 8 7

参考答案:

#include

#include

#defineN10

voidprintCube(inta[][N],intn);

voidmain()

{

  inta[N][N],n;

  printf("inputn:

\n");

  scanf("%d",&n);

  printCube(&a[0],n);

  getch();

}

voidprintCube(inta[][N],intn)

{

  inti,j,round=1;

  intm=1;

  for(i=0;i

a[0]=m++;

  for(i=n-1;i>=n/2;i--)

  {

for(j=round;j<=i;j++)

  a[j]=m++;

for(j=i;j>=round;j--)

  a[j-1]=m++;

for(j=i;j>round;j--)

  a[j-1][round-1]=m++;

for(j=round;j

  a[round][j]=m++;

round++;

  }

  for(i=0;i

for(j=0;j

 printf("%3d",a[j]);

printf("\n");

  }

}

二、朗讯面试题:

Therearetwointvariables:

aandb,don’tuse“if”,“?

:

”,“switch”orotherjudgementstatements,findoutthebiggestoneofthetwonumbers.

参考答案:

方案一

intmax=((a+b)+abs(a-b))/2

方案二

intc=a-b;

char*strs[2]={"a大","b大"};

c=unsigned(c)>>(sizeof(int)*8-1);

三、朗讯面试题:

如何打印出当前源文件的文件名以及源文件的当前行号?

参考答案:

通常使用的就是__FILE__,__LINE__,在调试函数中利用“%s","%ld",打印就好了。

四、朗讯面试题:

main主函数执行完毕后,是否可能会再执行一段代码,给出说明?

参考答案:

crt会执行另一些代码,进行处理工作。

如果你需要加入一段在main退出后执行的代码,可以使用atexit()函数,注册一个函数。

语法:

#include

intatexit(void(*function")(void));

#include

#include

voidfn1(void),fn2(void),fn3(void),fn4(void);

intmain(void)

{

  atexit(fn1);

  atexit(fn2);

  atexit(fn3);

  atexit(fn4);

  printf("Thisisexecutedfirst.\n");

}

voidfn1()

{

  printf("next.\n");

}

voidfn2()

{

  printf("executed");

}

voidfn3()

{

  printf("is");

}

voidfn4()

{

  printf("This");

}

五、朗讯面试题:

如何判断一段程序是由C编译程序还是由C++编译程序编译的?

参考答案:

c++编译时定义了__cplusplus

c编译时定义了_STDC_

六、下面这道面试题怎么做(指针)?

#include

main(){

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

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

for(intj=0;j<3;j++)

printf("%ld\n",&c[j]);

printf("-------------------------\n");

printf("%ld\n",(c+1));

printf("%ld\n",(*c+1));

printf("%ld\n",&c[0][0]);

printf("%ld\n",**c);

printf("%ld\n",*c[0]);

if(int(c)==int(*c))

printf("equl");

}

为什么c,*c的值相等,(c+1),(*c+1)的值不等

c,*c,**c,代表什么意思?

参考答案:

c是第一个元素的地址,*c是第一行元素的首地址,其实第一行元素的地址就是第一个元素的地址,这容易理解。

**c是提领第一个元素。

为什么c,*c的值相等?

intc因为直接用c表示数组c[0][0]

printf("%ld\n",*c[0]);语句已将指针移到数组头。

int(*c)表示c0的值为1,所以相等。

数组c的存放空间示意如下:

(机器中是行优先存放的)

c[0][0]c[0][1]c[0][2]

c[1][0]c[1][1]c[1][2]

c[2][0]c[2][1]c[2][2]

c是一个二维数组名,实际上它是一个指针常量,不能进行自加、自减运算,即:

c++、c--、++c、--c

都是不允许的;

c:

 数组名;是一个二维指针,它的值就是数组的首地址,也即第一行元素的首地址(等于*c),也

    等于第一行第一个元素的地址(&c[0][0]);可以说成是二维数组的行指针。

*c:

第一行元素的首地址;是一个一维指针,可以说成是二维数组的列指针。

**c:

二维数组中的第一个元素的值;即:

c[0][0]

所以:

    c和*c的值是相等的,但他们两者不能相互赋值,(类型不同);

    (c+1):

c是行指针,(c+1)是在c的基础上加上二维数组一行的地址长度,即从&c[0][0]

    变到了&c[1][0];

   (*c+1):

*c是列指针,(*c+1)是在*c的基础上加上二数组一个元素的所占的长度,即从

    &c[0][0]变到了&c[0][1]

    从而(c+1)和(*c+1)的值就不相等了

七、定义int**a[3][4],则变量占有的内存空间为:

_____

参考答案:

int**p;/*16位下sizeof(p)=2,32位下sizeof(p)=4*/

总共 3*4*sizeof(p)

八、编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。

如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。

参考答案:

判断年份是否是闰年,月份的大小月,

月(12进制)、日(与闰年、大小月有关)、时(24进制)、分(60进制)、妙(60进制)

 

九、给出下面代码的输出

floata=1.0f;

cout<<(int)a<

cout<<(int&)a<

cout<

floatb=0.0f;

cout<<(int)b<

cout<<(int&)b<

cout<

输出结果是:

1

1065353216

false

0

0

true

 

许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。

企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?

我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。

读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。

此外,还有一些面试题考查面试者敏捷的思维能力。

分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身的内功。

2.找错题

试题1:

voidtest1()

{

  charstring[10];

  char*str1="0123456789";

   strcpy(string,str1);

}

试题2:

voidtest2()

{

    charstring[10],str1[10];

    inti;

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

    {

       str1[i]='a';

    }

    strcpy(string,str1);

}

试题3:

voidtest3(char*str1)

{

 charstring[10];

 if(strlen(str1)<=10)

    {

           strcpy(string,str1);

    }

}

解答:

试题1字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界;

对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string,str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式(停止条件)的给10分;

对试题3,if(strlen(str1)<=10)应改为if(strlen(str1)<10),因为strlen的结果未统计’\0’所占用的1个字节。

剖析:

考查对基本功的掌握:

(1)字符串以’\0’结尾;

(2)对数组越界把握的敏感度;

(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:

2分

voidstrcpy(char*strDest,char*strSrc)

{

 while((*strDest++=*strSrc++)!

=‘\0’);

}

4分

voidstrcpy(char*strDest,constchar*strSr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1