C语言练习碰到的题
我认为的顺序是,读取数据,然后提取正数,从大到小排列,标记正数的个数,计算正数的平均数,最后计算最大值最小值差值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int array[1000] ;
int Max = 0;
int Min = 0;
double Avg = 0;
bool bFirst = false;
int Count = 0;
int Cha = 0;
for ( int i = 0; i < 1000; ++i )
{
if (array[i] > 0 )
{
Avg += array[i] * 1.0;
++Count;
if ( !bFirst )
{
Max = array[i];
Min = array[i];
bFirst = true;
}
if ( bFirst )
{
if ( Max < array[i] )
{
Max = array[i];
}
if ( Min > array[i] )
{
Min = array[i];
}
}
}
}
if ( Count > 0 )
{
Avg /= Count;
}
Cha = Max - Min;
printf("正数平均值:%lf,正数最大值:%d,正数最小值%d,差:%d\n", Avg, Max, Min, Cha);
return 0;
}
解题代码如下,程序结果已验证,望采纳:
#include<stdio.h>
void main()
{
int a[1000] = {0};
int max=0,min=0,diff=0,sum=0,pos_num = 0,i;
float aver=0;
printf("请输入数字,最多1000个,范围-10000~10000(以超出范围作为结束输入):\n");
for(i = 0;i <1000;i++){
scanf("%d",&a[i]);
if((a[i] < -10000)||(a[i]>10000)){
a[i] = 0;
break;
}
}
max = a[0];
min = a[0];
for(i = 0;i < 1000;i++){
if(a[i]>0){
sum += a[i];
pos_num++;
if(max < a[i])
max = a[i];
if(min > a[i])
min = a[i];
}
}
aver = sum*1.0/pos_num;
diff = max-min;
printf("平均值:%f,最大值:%d,最小值:%d,差值:%d\n",aver,max,min,diff);
}
结果验证如下:
请输入数字,最多1000个,范围-10000~10000(以超出范围作为结束输入):
100
200
99
1
100000
平均值:100.000000,最大值:200,最小值:1,差值:199
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void calc(int *arr, int length, float *dmin, float *dmax)
{
//由于最大数才10000,所以不用考虑越界
double sum = 0, avg = 0;
int count = 0;
*dmin = *dmax = 0.f;
for (int i = 0; i < length; ++i)
{
if (arr[i] > 0)
{
count++;
sum += arr[i];
//查找最小正数
if (arr[i] < *dmin)
{
*dmin = arr[i];
}
//最大正数
if (arr[i] > *dmax)
{
*dmax = arr[i];
}
}
}
avg = sum / length;
*dmin = *dmin - avg;
*dmax = *dmax - avg;
}
int main(int argc, char** argv)
{
srand(time(NULL));
int array[1000];
float dmin, dmax;
//生成10000个随机测试数据
for (int i = 0; i < 1000; ++i)
{
array[i] = rand() % 20000 - 10000;
}
calc(array, 1000, &dmin, &dmax);
printf("dmin=%.1f, dmax=%.1f", dmin, dmax);
return 0;
}
大家看我写的有问题吗?