c编程 菜鸟求助

编程,输入一批互不相等的正整数存入一维整型数组a中,直到输入0时终止,要求对这批数(不包括最后输入的表示输入结束的0)作相应的处理并按示例格式依次输出下列结果:⑴最大值和... 编程,输入一批互不相等的正整数存入一维整型数组a中,直到输入0时终止,要求对这批数(不包括最后输入的表示输入结束的0)作相应的处理并按示例格式依次输出下列结果:
⑴ 最大值和最小值及其所在位置下标;

⑵ 平均值(保留1位小数);

⑶ 大于并最接近平均值的数及其所在位置下标;

⑷ 小于平均值的数的个数及其占总数的百分比(保留1位小数);

⑸ 这批数按从小到大的顺序排列。
不知道数组长度如何定义数组
展开
 我来答
cssalp
2011-04-24 · TA获得超过193个赞
知道小有建树答主
回答量:209
采纳率:0%
帮助的人:237万
展开全部
// prob.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include<iostream>
//#include<math.h>

using namespace std;
/*
http://zhidao.baidu.com/question/257648476.html?fr=uc_push&push=core&group=1
编程,输入一批互不相等的正整数存入一维整型数组a中,直到输入0时终止,要求对这批数(不包括最后输入的表示输入结束的0)作相应的处理并按示例格式依次输出下列结果:
⑴ 最大值和最小值及其所在位置下标;

⑵ 平均值(保留1位小数);

⑶ 大于并最接近平均值的数及其所在位置下标;

⑷ 小于平均值的数的个数及其占总数的百分比(保留1位小数);

⑸ 这批数按从小到大的顺序排列。
*/
const int ARRAY_SIZE=15;
int bigger(int a,int b)
{
return (a>b);//比较两数的大小
}
int smaller(int a,int b)
{
return bigger(b,a);
}

int find(int *array,int array_size, int (*fn)(int a,int b))
{
/*如果传入的是bigger,那么就是找最大值
*如果传入的是small,那么就是找最小值
*/
int tmp;
//int index;
int i=0;
int index=i;
while(i<array_size)
{
//cout<<array[i]<<"\t";
if(fn(array[i],array[index]))
{
index=i;
}

i++;
}
//cout<<endl;
return index;
}
int my_abs(int a,int b)
{
//这个求两个数的差的绝对值
if(bigger(a,b))
return a-b;

return b-a;
}
float flaverge(int * array,int array_size)
{//求平均值
float sum=0;
int i=0;
for(i=0;i<array_size;i++)
{
//cout<<(int)array[i]<<endl;
sum+=array[i];
}
cout<<"sum is:"<<sum<<endl;
return sum/array_size;
}
int find_approximate_pos(int * array,int array_size)
{
/*
*array_size<=ARRAY_SIZE
*算法思想是这样的,将数组中的每个数和平均值相减后的绝对值
*然后,在这个绝对值数组中找最小值得位置
*例如{4、3、1、2、5}
*平均值是:3
*得到相差值数组为{1,0,2,1,2}
*所以最接近的位置:1,数据:3
*
*/

int aver=flaverge(array,array_size);
int *abs_array_aver=new int[ARRAY_SIZE];
int i=0,pos=0;
for(i=0;i<array_size;i++)
{
abs_array_aver[i]=my_abs(array[i],aver);
//cout<<abs_array_aver[i]<<"\t";
}
//cout<<aver<<endl;
pos=find(abs_array_aver,array_size,&smaller);
return pos;

}
int count_small(int * array,int array_size)
{
int i=0,count=0;
int aver=flaverge((int*)array,array_size);
for(i=0;i<array_size;i++)
{
if(smaller(array[i],aver))
{
count++;
}
}
return count;
}
void make_order(int * array,int array_size)
{
/*
*使用快速排序算法
*/
int i=0,j=0;
int smaller_index=i;
int sm;
for(i=0;i<array_size;i++)
{
smaller_index=i;
sm=array[smaller_index];
for(j=i+1;j<array_size;j++)
{
if(smaller(array[j],sm))
{
sm=array[j];
smaller_index=j;
}
}
if(smaller_index!=i)
{
int tmp=array[i];
array[i]=array[smaller_index];
array[smaller_index]=tmp;
}
}
cout<<endl;
for(i=0;i<array_size;i++)
{
cout<<array[i]<<"\t";
}
cout<<endl;

}

int _tmain(int argc, _TCHAR* argv[])
{
//int a[5]={4,3,1,5,8};
int a[ARRAY_SIZE];
int i=0;
cout<<"enter intege number (total < "<<ARRAY_SIZE<<") and 0 stands for end "<<endl;
int array_size=0;
int tmp=0;
while(array_size<ARRAY_SIZE&&(cin>>tmp)&&tmp!=0)
{
a[array_size++]=tmp;
//array_size++;
}
//array_size++;
cout<<endl;
int big_pos=find(a,5,&(bigger));
cout<<"最大数是:"<<a[big_pos]<<"\t位置:"<<big_pos<<endl;
int small_pos=find(a,5,&(smaller));
cout<<"最小数是:"<<a[small_pos]<<"\t位置:"<<small_pos<<endl;
//int flaverge(int * array,int array_size)
cout<<"averge is:\t"<<flaverge(a,5)<<endl;

int appr_pos=find_approximate_pos(a,5);
cout<<"最接近平均值得数:"<<a[appr_pos]<<"位置:"<<appr_pos<<endl;
int ct=count_small(a,array_size);
cout<<"小于平均数的个数;\t"<<ct<<"所占百分比:\t"<<(float )ct/array_size<<endl;
cout<<"排序后\n";
make_order(a, array_size);
return 1;
}
嘿_行
2011-04-24 · TA获得超过158个赞
知道答主
回答量:190
采纳率:0%
帮助的人:152万
展开全部
#include<stdio.h>
int main()
{
int i=0,j=0,cnt=0;
int t,k;
int ms,ns;
int test[50];
int test1[50][2];
int m,temp;
int cmax,cmaxi;
double avge=0.0;
printf("输入一批互不相等的正整数存入一维整型数组a中,直到输入0时终止");
scanf("%d",&t);
while(t!=0)
{
scanf("%d",&t);
test[cnt++]=t;
}
maxi=mini=test[0];
for(k=1;k<cnt;k++)
{
if(maxi<test[k])
{
maxi=test[k];
ms=k;
}
if(mini>test[k])
{
mini=test[k];
ns=k;
}
}
printf("最大值:%d,位置:%d",max,ms);
printf("最大值:%d,位置:%d",min,ns);
for(i=0;i<cnt;i++)
avge+=test[i];
avge/=cnt;
printf("平均数:%lf",avge);
for(i=0;i<cnt;i++)
if(test[i]>avge)
{
test1[cmt++][0]=test[i];
test1[cmt-1][1]=i;
}
cmax=test1[0][0];
for(j=1;j<cmt;j++)
if(cmax>test[j][0])
{
cmax=test1[j][0];
cmaxi=test1[j][1];
}
printf("大于并最接近平均值的数:%d,及其所在位置下标:%d",cmax,cmaxi);
for(i=0;i<cnt;i++)
if(test[i]<avge)
m++;
printf("小于平均值的数的个数及其占总数的百分比:%.1f",(double)m/cnt);
for(i=0;i<cnt-1;i++)
for(j=i;j<cnt;j++)
if(test[j]>test[j+1])
{
temp=test[j];
test[i]=test[i+1];
test[i+1]=temp;
}
printf("从小到大的顺序");
for(i=0;i<cnt;i++)
printf("%d",test[i]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式