博文
一道autodesk笔试题的解答(2008-01-19 15:43:00)
摘要:第一题:
实现N*N矩阵,
如N=2时
1 2
4 3
N=4时
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
#define N 5
int M[N][N];
void Matrix()
{
int T = (N+1)/2;
int num = 0;
for(int t=0; t<T; t++)
{
for(int i=t; i<=N-1-t; i++)
M[t][i] = ++num;
for(int i= t+1; i<=N-1-t-1; i++)
M[i][N-1-t] = ++num;
for(int i=N-1-t; i>=t; i--)
M[N-1-t][i] = ++num;
for(int i=N-1-t-1; i>=t+1; i--)
M[i][t] = ++num;
}
if(N%2 != 0)
M[N/2][N/2] = N*N;
}
void Print()
{
for(int i=0; i<=N-1; i++)
{
for(int j=0; j<=N-1; j++)
&n......
BitBlt函数的参数说明(2007-05-22 15:04:00)
摘要:BitBlt函数的参数说明如下:
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );
x 目的地的左上角X坐标;
y 目的地的左上角Y坐标;
nWidth 目的地的区域宽度;
nHeight 目的地的区域高度;
pSrcDC 存储源位图的设备描述表;
xSrc 源位图的左上角X坐标;
ySrc 源位图的左上角Y坐标;
dwRop为柵格运算标志,一般我们选择SRCCOPY,直接拷贝源位图到目标。还可以让源位图和目标位图进行XOR,AND,OR等等的操作。
......
求直线与三角形有效交点的算法(2007-05-04 21:38:00)
摘要:/*已知直线(方向),和空间3个点构成的三角形,求直线与该三角形有效交点的算法。*/
//在Visual C++6.0及Turbo C3.0下编译通过
#include "stdio.h"
#include "conio.h"
#include "math.h"
#define MINERROR 0.0001
//定义空间点坐标结构
typedef struct SpacePoint
{
float x;
float y;
float z;
}SpacePoint;
//定义空间向量结构
typedef struct SpaceVector
{
float m;
float n;
float p;
}SpaceVector;
float Distance(SpacePoint p1, SpacePoint p2);
float Area(float a, float b, float c);
int ValidPoint(SpacePoint LinePoint, SpaceVector LineV, SpacePoint TrianglePoint1,
SpacePoint TrianglePoint2, SpacePoint TrianglePoint3);
void main()
{
//空间直线上的一个点
SpacePoint LinePoint;
//构成三角形的空间三个点
SpacePoint TrianglePoint1, TrianglePoint2, TrianglePoint3;
//空间直线的方向向量
SpaceVector LineV;
/*------------输入数据------------*/
printf("Input the coordinate of the point in the line:\n");
......
CArray 剖析【转载】(2007-05-04 21:31:00)
摘要:C++并不支持动态数组,MFC提供了一个CArray类来实现动态数组的功能。有效的使用CArray类,可以提高程序的效率。
MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。CArray即为其中的一个,用来实现动态数组的功能。CArray是从CObject派生,有两个模板参数,第一个参数就是CArray类数组元素的变量类型,后一个是函数调用时的参数类型。有一个类 class Object,要定义一个Object的动态数组,那么可以用以下两种方法:
CArray<Object,Object> Var1;
CArray<Object,Object&> Var2;
Var2的效率要高。
先了解一下CArray中的成员变量及作用。TYPE* m_pData; // 数据保存地址的指针
int m_nSize; // 用户当前定义的数组的大小
int m_nMaxSize; // 当前实际分配的数组的大小
int m_nGrowBy; // 分配内存时增长的元素个数
构造函数,对成员变量进行了初始化。
CArray<TYPE, ARG_TYPE>::CArray()
{
m_pData = NULL;
m_nSize = m_nMaxSize = m_nGrowBy = 0;
}
SetSize成员函数是用来为数组分配空间的。SetSize的函数定义如下:
void SetSize( int nNewSize, int nGrowBy = -1 );
nNewSize 指定数组的大小
nGrowBy 如果需要增加数组大小时增加的元素的个数。
对SetSize的代码,进行分析。
void CArray<TYPE, ARG_TYPE>::SetSize(int nNewSize, int nGrowBy)
{
if (nNewSize == 0)
{
// 第一种情况
// 当nNewSize为0时,需要将数组置为空,
// 如果数组本身即为空,则不需做任何处理
// 如果数组本身已含有数据,则需要清除数组元素
if (m......
"英特尔杯"全国计算机多核程序设计大赛[初赛试题](2007-04-26 08:04:00)
摘要:
1 .
英特尔线程档案器有助于有效利用处理器,当 –
A、多进程应用程序运行在单核心处理器
B、多进程应用程序运行在多核心处理器
C、多线程应用程序运行在单核心处理器
D、多线程应用程序运行在多核心处理器
2 .
我们应该在产品生命周期中的哪个阶段考虑产品的性能?
A、设计阶段
B、测试阶段
C、需求收集阶段
D、以上全部
3 .
英特尔集成性能函数库(Intel® IPP)涵盖了下哪些领域?
A、音频、视频编解码
B、图像处理和信号处理
C、语音编解码和语音识别
D、计算机视觉
E、数据压缩、字符串处理以及加解密算法
F、向量数学与矩阵处理
G、以上都包括
4 .
假定一个串行应用程序可被优化为50%的串行工作量和50%的并行工作量, 这个应用程序运行于双核心处理器,在理论上描述“加速的上限” = T(原串行程序的执行时间) / T(现并行程序的执行时间)。 请问下列哪个值是正确的?
A、1.25
B、1.33
C、1.50
D、1.67
5 .
“如果这两条指令都是简单指令,处理器会将两条指令合并为单个微操作指令(micro-op)”,是哪个功能的定义:
A、Macro-Fusion
B、Instruction-Meld™
C、Micro-op-Combination
6 .
Vtune性能分析器不搜集以下哪个执行上下文(Execution context)中的信息?
A、线程号(Thread ID)
B、操作系统的进程(Operating system process)
C、执行代码在内存中的......
点到一空间直线的垂足【程序实现】(2007-04-25 16:43:00)
摘要:考试程序:
case 9: //"检验空间点到一空间直线的垂足"
{
float xo,yo,zo;
float x0,y0,z0,xp,yp,zp,xv,yv,zv;
......
点到一空间直线的垂足[证明](2007-04-25 16:41:00)
摘要:题目:设nL是直线L的单位方向向量,P0是L上的任意一点,P是空间中的任意一点,则P在L上的垂足点P v是:Pv=P+ ((P-P0)×nL)×nL
证明:如图4.4-1所示(在单位立方体下测试的状态),将P0看作为相对坐标原点,有:
(Z1-P0)=(P-P0)×nL
(Z2-P0) = (Z1-P0)×nL
P0,P,P v,Z2四点构成一个平行四边形,有,Pv-P=Z2-P0,即Pv=P+(Z2-P0),于是:
Pv=P+(Z2-P0)=P+(Z1-P0)×nL=P+((P-P0)×nL)×nL
......
error LNK2001错误(2007-04-20 10:38:00)
摘要:在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
下面介绍解决的方法:
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/s......
获取鼠标点的颜色(2007-04-17 20:14:00)
摘要:VC++的关键代码实现如下:
1、获取屏幕DC
HDC hDC = ::GetDC(NULL); //获取屏幕DC
2、获取当前鼠标位置像素值
CPoint pt;
GetCursorPos(&pt); //得到当前鼠标所在位置
COLORREF clr = ::GetPixel(hDC, pt.x, pt.y); //获取当前鼠标点像素值
3、分解出像素点中的红、绿、蓝颜色值
CString ClrText;
ClrText.Format("%d",GetRValue(clr)); //分解出红色值
ClrText.Format("%d",GetGValue(clr)); //分解出绿色值
ClrText.Format("%d",GetBValue(clr)); //分解出蓝色值
::ReleaseDC(NULL, hDC); //释放屏幕DC
......
多进程调度模拟程序(2007-04-16 18:18:00)
摘要:#include <windows.h>
#include <dos.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream.h>
#define P_NUM 5 //进程数
#define P_TIME 50//时间片长度
#define MIN -9999 //最小优先级
enum state{
ready, //就绪
execute, //执行
block, //阻塞
finish //完成
};
struct pcb{ //进程控制块结构
char name[4]; //进程名
int priority; //优先级
int cputime; //占用CPU时间
int needtime; //还需要执行的时间
int count;
int round;
state process; //进程状态
pcb * next;
};
pcb * get_process()//获取进程信息
{
pcb *q;
pcb *t;
pcb *p;//进程链表头指针
int i=0;
cout<<"input "<<P_NUM&l......