admin管理员组文章数量:1530034
2024年7月19日发(作者:)
金山软件面试题
一、请你就C/C++或者JA V A代码行数、注释行数统计工具的
实现,描述一下:
1、需要考虑哪些过滤条件?你如何处理?
答:过滤条件:(取得每行并去掉两头的空格后)
⑴空行,行的长度为0;⑵如果是以//开头,为注释行;⑶//在行中,
并判断不是在字符串中,即―‖中,为代码+注释混合行,//在―‖中时为
代码行;⑷如果/*在行中,判断是否是在―‖内,否则为注释行,*/不
在―‖中时是结束;⑸/* */只在一行,判断行中是否有代码,无代码为
注释行,有代码是混合行;⑹/* */多行,并且/*前无代码,/*后无代码,
去掉其中空行都是注释行;⑺/* */多行,/*在代码后,或*/后有代码,
有混合行;⑻一行中有2个/*并且就1个*/,此行为混合行,其后是注
释行。
2、怎样提升这个工具的易用性?
答:把这个工具设置成图形界面,用户只需输入文件名或者在文
件对话框中选择文件即可点击运行输出结果。
本题只需要提供思路文档,不需要程序代码。
二、给定一个自然数n,试完成如下程序,它输出不大于n的所有
素数(质数)。
1、请提供程序代码,以及思路文档。
答:思路:求出一个数j的平方根sqrt(j),将j除以2~sqrt(j)之
间的数,只要除尽一次,就不是素数,之后数j加2。
#include
#include
void main()
{ int N=1000;
int i,j,k,m=0;
for(j=1;j<="" p="">
{ k=(int)sqrt(j); /*求平方根*/
for(i=2;i<=k;i++)
{ if(j%i==0) /*只要除尽一次,就不是素数*/
break;
}
if(i>k) /*/除到k一直没除尽,是素数*/
printf(―%d ―,j);
}
}
3、请分析一下可以从哪些角度可优化该程序的时间性能?
答:偶数(除了2)不能为素数;判断一个数j是否为素数,只要
将其除以2 ~ sqrt(j)之间的素数,更进一步,没有必要对所有奇数进
行试除,只需对所有sqrt(j)以内的所有质数试除就可以了。
三、高精度乘法
用户输入两个不大于256 位的正整数,由程序进行乘法运算,并
显示运算过程与结果。例:输入:12, 32
输出:
12
×32
————————
24
36
————————
384
#include
#include
#include
#define max 256
int A[max],B[max];
int Alen,Blen;
int S[max *2];
版权声明:本文标题:金山软件面试题 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1721358103a873618.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论