题目描述
输入一组成绩(不超过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; }
目录
指针与一维数组】【统计数组中大于等于平均值和小于平均值的比例】
问题 H: 【函数 数组 指针】利用指针求一维数组的数据元素之和