有关C++/C语言编程题,有相当的挑战性,谢谢高手们参与,干掉它们

wangping832 2009-02-18 10:09:26
您好!
很高兴在CSDN这个平台能认识您,有几个C++程序编程题,帮我看一下,谢谢!

1、试用C语言,对一数组去除最大值、最小值后求算术平均。
以函数形式给出。例如 float GetInterquartileMean(float * a, int length) {……};
2、现有匪徒靶纸n种(0~n-1),平民靶纸m种(n~m),每种无数张。现要随机抽取x张,构成一个出靶序列。要求匪徒靶的出靶概率在max和min之间。试用C语言编写或阐述算法、思路。
以函数形式给出。例如 bool CreateSequence(int * TargetSequence, int n, int m, float max, float min) {……};
3、现有目标矩形rcD、像源矩形rcS,现要将像源输出到目标矩形中,要求保持纵横比、面积最大、居中显示。编制一函数计算像源在目标矩形中的位置。
以函数形式给出。例如 CRect ScaledConstrainProportions (CRect rcS, CRect rcD) {……};
4、试用VS2003 C++、DXSDK编写如下功能软件。在一个对话框窗口中,显示计算机上第一个WDM视频捕捉设备的实时画面。
...全文
765 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjwantong 2009-06-22
  • 打赏
  • 举报
回复
http://www.bjwtnd.cn/zgc
hogak 2009-03-25
  • 打赏
  • 举报
回复
我不是帮你搞定了,我都去面试过了,可惜我是编程经验不够啊,只会参照代码写程序,以后一定要多多学习,多多记忆代码才能所向披靡啊
yinlijun610 2009-03-17
  • 打赏
  • 举报
回复
mark
weidong0210 2009-03-13
  • 打赏
  • 举报
回复
mark
大宝 2009-03-13
  • 打赏
  • 举报
回复
不错 学习
caixin99 2009-03-11
  • 打赏
  • 举报
回复
UP
lnever 2009-03-08
  • 打赏
  • 举报
回复
mark
BuleRiver 2009-03-04
  • 打赏
  • 举报
回复
float GetInterquartileMean(float * a, int length)
{
float sum = 0.0;
float max = a[0], min = a[0];
for (int i = 0; i < length; i++)
{
sum += a[i];
if (a[i] > max)
{
max = a[i];
}
else if (a[i] < min)
{
min = a[i];
}
}

return (sum - max - min) / (length - 2);
}
kostion 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xtting_8984313 的回复:]
引用 1 楼 waizqfor 的回复:
其实都挺简单的 帮你说说思路吧
第一个 就是先交换排序 然后去掉 数组的第一个元素 和最后一个元素 然后直接循环像加求平均值 就可以了



有点麻烦了,在循环里始终加,同时记录当前的最大、最小值;
循环玩减去记录的最大最小就可以了

感觉是作业,不评论了。
[/Quote]
恩,没必要排序
就呆在云上 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xtting_8984313 的回复:]
引用 1 楼 waizqfor 的回复:
其实都挺简单的 帮你说说思路吧
第一个 就是先交换排序 然后去掉 数组的第一个元素 和最后一个元素 然后直接循环像加求平均值 就可以了



有点麻烦了,在循环里始终加,同时记录当前的最大、最小值;
循环玩减去记录的最大最小就可以了

感觉是作业,不评论了。
[/Quote]
right
attributemismatch 2009-03-04
  • 打赏
  • 举报
回复
up
xtting_8984313 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 waizqfor 的回复:]
其实都挺简单的 帮你说说思路吧
第一个 就是先交换排序 然后去掉 数组的第一个元素 和最后一个元素 然后直接循环像加求平均值 就可以了
[/Quote]


有点麻烦了,在循环里始终加,同时记录当前的最大、最小值;
循环玩减去记录的最大最小就可以了

感觉是作业,不评论了。
左岸fans 2009-03-04
  • 打赏
  • 举报
回复
路过,好像遇见过类似的问题,确实有点难
s04312134 2009-03-04
  • 打赏
  • 举报
回复
等他妈有时间经常上上csdn传点东西好下载,要不然东西都搞不下来干
s04312134 2009-03-04
  • 打赏
  • 举报
回复
/*试用C语言,对一数组去除最大值、最小值后求算术平均。
以函数形式给出。例如 float GetInterquartileMean(float * a, int length) {……};*/

float GetInterquartileMean(float *group, int length) {
int i;
float *p,*m,*n,sum,ave;
m = group;
n = group;
p = group;
sum=*p;
for(i=1;i<length;i++){
sum+=*(p+i);
if(*(p+i)>*m){
m=p+i;
}
if(*(p+i)<*n){
n=p+i;
}
}
ave=(sum-*m-*n)/(length-2);
return ave;
}



/*现有匪徒靶纸n种(0~n-1),平民靶纸m种(n~m),每种无数张。
现要随机抽取x张,构成一个出靶序列。要求匪徒靶的出靶概率在max和min之间。
试用C语言编写或阐述算法、思路。
以函数形式给出。例如 bool CreateSequence(int * TargetSequence, int n, int m, float max, float min) {……};*/

//因题目要求用C语言编写,而在函数中传递数组指针时不能够传递数组的长度故在函数形参中添加进数组长度x。
bool CreateSequence(int * TargetSequence, int x, int n, int m, float max, float min)
{ bool flag = true;
if((n>m)||(min>max)){
flag = false;
}
srand((unsigned)time(NULL));
for(int i=0;i<x;i++){
float num = (float) rand();
if((num >= 0)&&(num <= (32767* (rand()/32767*max+min))))
*TargetSequence=rand()%n;//n种随机选一种
else if(num > (32767*(rand()/32767*max+min))&& num <= 32767)
*TargetSequence=rand()%(m-n+1)+n;//n~m种随机选一种
printf ("%d\n",*TargetSequence);
TargetSequence++;
}
return flag;
}



/*现有目标矩形rcD、像源矩形rcS,现要将像源输出到目标矩形中,要求
保持纵横比、面积最大、居中显示。编制一函数计算像源在目标矩形中的位置。*/

CRect ScaledConstrainProportions ( CRect rcS, CRect rcD) {
int swidth = rcS.Width();
int sheight = rcS.Height();
int dwidth = rcD.Width();
int dheight = rcD.Height();
int sprop=swidth/sheight,dprop=dwidth/dheight;
CPoint cp,tl,br;
if(abs(sprop)>abs(dprop)){
swidth = rcD.Width();
sheight = swidth/sprop;
}
else{
sheight = rcD.Height();
swidth = sheight*sprop;
}
cp = rcD.CenterPoint();
cp.Offset(-abs(swidth/2),abs(sheight/2));
tl = cp;
cp.Offset(abs(swidth),-abs(sheight));
br = cp;
return CRect(tl, br );
}
第四题看DirectShow的例子
AMcap
pengzhixi 2009-02-20
  • 打赏
  • 举报
回复
mark
梅文海 2009-02-20
  • 打赏
  • 举报
回复
我也说说第三题,不知道是不是你想要的,这是我五年前写的代码 pascal 的,应该很容易转换成 c 代码

////////////////////////////////////////////////////////////////////////////////
// 功能 : 获得一个图片在一个容器中显示的形式
// 参数 :
// APanelRect : 容器的大小
// APicRect : 图片的大小
// AAutoZoomIn : 是否自动放大
// AWidthSpace : 预留边框的大小(默认为0)
// AHeightSpace : 预留边框的大小(默认为0)
// 返回值 :
// 日期 : 2003.9.14
////////////////////////////////////////////////////////////////////////////////
function GetPictionRect(const APanelRect,APicRect:TPoint;const AAutoZoomIn,AAutoZoomOut:boolean;const AWidthSpace:integer=0;const AHeightSpace:integer=0):TRect;
var
dblPencent:double; // 缩放比
wx:double; // 宽缩放比
hx:double; // 高缩放比
ptPanel :TPoint;
x,y :integer;
r :TRect;
begin
result:=r;
if APicRect.X<=0 then exit;
if APicRect.Y<=0 then exit;

ptPanel.X:=APanelRect.X-AWidthSpace*2;
ptPanel.Y:=APanelRect.Y-AHeightSpace*2;

// 获得缩放比
wx:=ptPanel.X/APicRect.X;
hx:=ptPanel.Y/APicRect.Y;
if wx>hx then dblPencent:=hx
else dblPencent:=wx;
// 是否自动缩小
if not AAutoZoomOut then
begin
if dblPencent<1 then dblPencent:=1;
end;

// 是否不会自动放大
if not AAutoZoomIn then if dblPencent>1 then dblPencent:=1;

// 获得图片最后的大小
x:=Trunc(dblPencent*APicRect.X);
y:=Trunc(dblPencent*APicRect.Y);

// 计算出图片的位置

r.Left:=(ptPanel.X-x) div 2+AWidthSpace;
r.Top:=(ptPanel.Y-y) div 2+AHeightSpace;

//r.Left:=AWidthSpace;
//r.Top:=AHeightSpace;

r.Right:=r.Left+x;
r.Bottom:=r.Top+y;

result:=r;
end;
  • 打赏
  • 举报
回复
mark。
VirGhost 2009-02-19
  • 打赏
  • 举报
回复
我来说一下第三题吧,方法比较笨,但可以实现。
分4种情况讨论:
1、源的长宽都比目标小,直接返回源
2、仅仅源的长比目标的大,按源长和目标长的比例缩放
3、仅仅源的宽比目标的大,按源宽和目标宽的比例缩放
4、源的长宽都比目标的大,...
zalu 2009-02-19
  • 打赏
  • 举报
回复
学习
加载更多回复(2)

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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