今天的面试题,欢迎讨论

coldcrane 2005-04-04 12:21:41
1. 解二次方程:a*x*x+b*x+c
int Quadratic( double a,double b,double c,double& x1,double& x2);
返回值:解的个数

2. 最大公约数
DWORD Divisor( DWORD dwFirst, DWORD dwSecond );
返回值:最大公约数

3. 根据蒙特卡洛算法计算圆周率
double PI( DOWRD dwCount/*测试次数*/ );
返回值:PI

4. 无符号整数乘法,乘数为32bit,结果为64bit
提示:32bit整数分解为16bit相乘
void Multiply( DWORD dwFirst, DWORD dwSecond, DWORD& dwHigh, DWORD& dwLower );

5. 链表排序(从小到大)
节点定义为:
struct Node{
int nValue;
struct Node* pNext;
};
最后一个节点的pNext = NULL.
Node* SortChain( Node* pHead );
返回值:链表头

...全文
1545 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
MagicCarmack 2005-04-06
  • 打赏
  • 举报
回复
学习
coldcrane 2005-04-06
  • 打赏
  • 举报
回复
纠正一下:
题目:写一个函数,检查一个字符串是不是有效的IP地址
函数:int is_valid_ip( char* s_ip );
返回值:
0 :not IP
1 :is IP

同时,写一段测试代码用于测试你的函数。
要求: 简洁有效,可读性强。
coldcrane 2005-04-06
  • 打赏
  • 举报
回复
其实我更想去另一家公司。考虑中......

那家公司的面试题如下:

题目:写一个函数,检查一个字符串是不是有效的IP地址
函数:int is_valid_ip( char s_ip );
返回值:
0 :not IP
1 :is IP

同时,写一段测试代码用于测试你的函数。
要求: 简洁有效,可读性强。
AtaLoss0202 2005-04-05
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "math.h"
#include "iostream"
using namespace std;

int Quadratic(double a, double b, double c, double& x1, double& x2)
{
double b2=b*b;
double fourac=4*a*c;
double delta = double(b2+1) - double(fourac+1);
double sqrtRootOfDelta = sqrt(delta);
x1 = (-b-sqrtRootOfDelta)/(2*a);
x2 = (-b+sqrtRootOfDelta)/(2*a);
printf("delta=%f\n",delta);
cout << "b*b=" << b*b << endl;
cout << "a*c=" << a*c << endl;
cout << "4*a*c=" << 4*a*c << endl;
cout << "delta.cout=" << delta << endl;
cout << "b2 fourac " << b2 << " " << fourac << endl;
if(delta > 0)
return 2;
else if(!delta)
return 1;
else
return 0;
}

void main()
{
double x1,x2;
int n=Quadratic(100000000000.0,1.0,0.0000000000025,x1,x2);
printf("n=%d x1=%f x2=%f\n", n,x1,x2);
cout << "cout: x1=" << x1 << " x2=" << x2 << endl;
}

输出:
delta=0.000000
b*b=1
a*c=0.25
4*a*c=1
delta.cout=0
b2 fourac 1 1
n=1 x1=-0.000000 x2=-0.000000
cout: x1=-5e-012 x2=-5e-012
Press any key to continue

终于换了一种方法解决了上面的问题了...
AtaLoss0202 2005-04-05
  • 打赏
  • 举报
回复
to coldcrane:
对,2*a少了括号是我的失误,而b前少了减号则是因为我把具体的求根公式给忘记了...谢谢你指出我的错误.

引用:浮点数很少是精确的,比如0.1,不可能用浮点数精确的表示出来。在浮点运算中,很可能出现舍入误差。

是不是说浮点数据类型的位长限制导致精确度无法很高?
owsxo 2005-04-05
  • 打赏
  • 举报
回复
楼主 你去的是什么公司呀 怎么连数值分析都考啊....
唉 当年没学好 郁闷 看来得重新学一下数学了......
林初茵 2005-04-05
  • 打赏
  • 举报
回复
up
AtaLoss0202 2005-04-05
  • 打赏
  • 举报
回复
哦,我理解错了.我以为你把这个面试所得到的工作辞了.嘿嘿...好好加油!
jowood_qq 2005-04-05
  • 打赏
  • 举报
回复
顶一下
coldcrane 2005-04-05
  • 打赏
  • 举报
回复
to AtaLoss0202(星空天宇):
呵呵,换工作啊
AtaLoss0202 2005-04-05
  • 打赏
  • 举报
回复
倒...你不是吧?为什么辞职啊?
bitzilla 2005-04-05
  • 打赏
  • 举报
回复
楼主应聘的公司是做 什么的阿,对数据处理的算法要求好高啊!!!

佩服佩服
coldcrane 2005-04-05
  • 打赏
  • 举报
回复
今天正式辞职
dllcyy 2005-04-05
  • 打赏
  • 举报
回复

高手真多
学习
顶一下
coldcrane 2005-04-05
  • 打赏
  • 举报
回复
关于浮点运算的误差分析,与其我在这一知半解的瞎解释,还不如认真参考一下数值分析等相关书籍。
AtaLoss0202 2005-04-04
  • 打赏
  • 举报
回复
另外,偶发上BBS的所有程序都是经过自己测试通过的.
AtaLoss0202 2005-04-04
  • 打赏
  • 举报
回复
恭喜!我测试过了,if(!delta)可以,即使delta=0.0000001也是测试通过,即是说,只要delta不等于0,c就不会把它当0.
coldcrane 2005-04-04
  • 打赏
  • 举报
回复
呵呵,刚接到那家公司的电话,觉得我挺合适!搞定!
MagicCarmack 2005-04-04
  • 打赏
  • 举报
回复
作业里头都有...

哪天,我也把作业发上来让同志们帮我一下!
coldcrane 2005-04-04
  • 打赏
  • 举报
回复
to AtaLoss0202(星空天宇):
>>
>>else if(!delta)
>> return 1;
>>
对于浮点运算,这样的判断是不对的!可以参考前面的代码。

to xxxdg(学习中):
对我来说,做作业是n年前的事了。

加载更多回复(29)

69,322

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧