【C语言】【指针与数组】计算平均分及人数统计

本文介绍了如何使用C++编程语言实现统计给定整数数组的平均值,并计算高于平均值和低于平均值的人数或元素比例。涉及到了指针、数组操作、函数定义以及求和和比例计算方法。
摘要由CSDN通过智能技术生成

题目描述

输入一组成绩(不超过50个),求平均分,并统计高于平均分(含等于)与低于平均分的人数

输入

第一行输入一个整数n
第二行输入n个整数(成绩)

输出

平均值(保留2位小数,占一行)

高于平均数(含等于)人数及低于平均数人数,用空格分隔

样例输入

6 10 20 30 40 50 60

样例输出

35.00 3 3

#include"stdio.h"

void inputdata(int *a,int n);//此函数用于输入数组的元素
float getave(int *a,int n);//用于求平均值


int main()
{
    int b[50];
    int n;
    float ave;
    int i,max,min;
    scanf("%d",&n);
    inputdata(b,n);
    ave=getave(b,n);
    //统计高于平均分和低于平均分的人数各是多少
    max=0;min=0;
	for(i=0;i<n;i++)
    {
    	if(b[i]>=ave)
    	max++;
    	else
    	min++;
	}
    printf("%.2f\n%d %d",ave,max,min);
}

void inputdata(int *a,int n)
{
    int *p;
    p=a;   //最后一个数的地址
    for(;p<a+n;p++)
        scanf("%d",p);
        
}
float getave(int *a,int n)
{
	float s=0.00,ave1;
	for(int i=0;i<n;i++)
	{
		s=s+(*(a+i));
	}
	ave1=s/n;
	return ave1;
}
算法:求平均值 :第一步求和,第二步算平均值  ; 统计比平均值高的人数或的的人数只需要和平均值用if函数作比较即可
注意:平均值是一个浮点型,虽然分数定义为整数了,但是便于最后求平均值将求和实参页应该定义为浮点型  或用ave1=1.0*s/n;的形式将整型转化为浮点型
注意:当利用指针输入数组元素使不用取地址符,因为指针本身就是一个地址

指针与一维数组】【统计数组中大于等于平均值和小于平均值的比例】

 

题目描述

输入n(n<20)个整数,统计数组中大于平均值(含相等的值)和小于平均值的比例,并输出结果,其中大于平均值(含相等的值)在前,小于平均值在后

提示:比例应该是最小比值,如6:4,应该输出为3:2

           如果比例中有一个是0,则无需化简,如2:0

输入

第一行 :整数n
第二行:n个整数

输出

比例关系

格式为:大于平均值:小于平均值

样例输入

6 1 2 3 4 5 6

样例输出

1:1

算法:“”统计数组中大于平均值(含相等的值)和小于平均值”同上,主要是求平均值,然后进行比较,“比例应该是最小比值,如6:4,应该输出为3:2”这一操作的目的是要求求高于平均值和低于平均值人数的最大公约数,然后记录他们除以最大公约数的值,最后输出他们的比列形式

求最大公约数的方法:辗转相除法

eg:求a,b的最大公约数

int a,b,t,r;
r=a%b;
t=a*b;
while(r!=0)
{
   a=b;
   b=r;
   r=a%b;
}
printf("输出的最大公约数为:%d\n,b);

注意:如果比例中有一个是0,则无需化简,如2:0  不要遗漏了,要求用If 函数进行一次判断

#include"stdio.h"
main()
{
   int a[20],*p=NULL;
   int great=0,below=0;
   int n,i,s=0;
   float ave=0;
   scanf("%d",&n);
   for(i=0;i<n;i++)       //输入数据
   {
      scanf("%d",&a[i]);
      s=s+a[i];
   }
   ave=1.0*s/n;
   for(p=a;p<a+n;p++)   
   {
   	if(*p>=ave)
   	great++;
   }
   below=n-great;
   int r;
   int k=great,j=below;
   if(great==0||below==0)
   printf("%d:%d",great,below);
   else
   {
   	r=great%below;
   	
   	while(r!=0)
   	{
   		great=below;
   		below=r;
   		r=great%below;
	   }
   }
   printf("%d:%d",k/below,j/below);
   
}

问题 G: 【指针 数组】求数组元素最小值

题目描述

对长度为n的数组a,找到该数组的最小值,并输出结果。

输入

第1行是一个整数n,表示数组长度
第2行是n个整数,表示数组元素

输出

最小元素值

样例输入

7 5 8 9 6 4 7 3

样例输出

3

代码如下

#include <stdio.h>
#define N 100
main()
{
    int a[N],i,n, min;
    int *p;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);   //输入数据
    //利用指针找最小值
    min=a[0];        //假设最小值
        //从第二个单元格到最后一个单元格,
         //依次和min比较如果比min小,更新min的值
    for(p=a;p<=a+n;p++)   
       if(min>*p)
          min=*p;
    printf("%d\n",min);
}

问题 H: 【函数 数组 指针】利用指针求一维数组的数据元素之和

题目描述

输入一组数据,存到数组中,求数组之和并输出结果

要求:设计一个输入数据的函数 void  inputarray(int * a,int *n)    //a是指向数组的指针,n用于返回实际输入数据个数

           设计一个求和的函数  void sumarray(int *a,int n,int *r)  //a是指向数组的指针,r用户返回结果

                                      

输入

一行数据以-1 最为结束标志

输出

和的结果

样例输入

1 2 3 4 5 6 -1

样例输出

21

代码如下:

#include"stdio.h"
void  inputarray(int * a,int *n);
void sumarray(int *a,int n,int *r);

main()
{
    int b[200];
    
int n,sum;


    inputarray(b, &n);
    sumarray(b,n,&sum);

    printf("%d", sum);

}


void  inputarray(int* a, int* n)
{   
    int i;
    for (i=0;i<200;i++)
    {
        scanf("%d",&a[i]);
       
        if (a[i] == -1)
        {
            break;
        } 
     
    }
    *n = i;
}


void sumarray(int *a,int n,int *r)
{
    int *p,s=0;
    for(p=a;      p < a + n  ;p++)
        s=s+      *p;
         *r = s;
}

目录

题目描述

输入

输出

样例输入

样例输出

指针与一维数组】【统计数组中大于等于平均值和小于平均值的比例】

题目描述

输入

输出

样例输入

样例输出

问题 G: 【指针 数组】求数组元素最小值

题目描述

输入

输出

样例输入

样例输出

问题 H: 【函数 数组 指针】利用指针求一维数组的数据元素之和

题目描述

输入

输出

样例输入

样例输出


  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值