C++笔试题数学算法类

匿名网友 匿名网友 发布于: 2015-08-30 00:00:00
阅读 154 收藏 0 点赞 0 评论 0

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 );

返回值:最大公约数

long Divisor( long dwFirst, long dwSecond )

{

if (dwFirst < dwSecond)

{

long temp = dwFirst;

dwFirst = dwSecond;

dwSecond = temp;

}

if (dwSecond == 0)

{

return dwFirst;

}

if (dwFirst % 2 == 0)

{

if (dwSecond % 2 == 0)

{

return(Divisor(dwFirst >> 1,dwSecond >> 1) << 1);

}

else

{

return Divisor(dwFirst >> 1,dwSecond);

}

}

else

{

if (dwSecond % 2 == 0)

{

return Divisor(dwFirst,dwSecond >> 1);

}

else

{

return Divisor(dwSecond,dwFirst – dwSecond);

}

}

}

3. 根据蒙特卡洛算法计算圆周率

double PI( DOWRD dwCount/*测试次数*/ );

返回值:PI

/**//*

利用蒙特卡洛算法近似求圆周率PI

VC++6.0

ZZH

*/

#include<iostream>

#include<cmath>

#include<ctime>

#define COUNT 500000 //循环取样次数

using namespace std;

bool InCircle(double x,double y)//是否在1/4圆范围之内

{

if((x*x+y*y)<=1)return true;

return false;

}

void main()

{

double x,y;

int num=0;

int i;

srand((unsigned)time(NULL));

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

{

x=rand()*1.0/RAND_MAX;

y=rand()*1.0/RAND_MAX;

if(InCircle(x,y)) num++;

}

cout<<“PI:”<<(num*4.0)/COUNT<<endl;

}

结果:测试5次的结果显示:3.13958,3.14041,3.13729,3.13859,3.14186

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 );

返回值:链表头

冒泡排序,插入排序等。为避免繁琐可以不交换指针,只交换值;也可以将值存入数组,对数组排序,再存入链表中。

改错并说明原因

file: 1.c

int a[10]={0};

file: 2.c

int main ()

{ extern int *a;

printf (“%dn”, a[0]);

return 0;

}

评论列表
文章目录