你想输入多少输入多少,我就输入4个分数测试。
#include
#include
typedef struct stud
{
int score;
struct stud *next;
}STD;
STD *insertScore(STD *stdHead,STD *stdTail);//录入成绩
void printfSTD(STD *stdHead);//打印链表数据
int *tjSTD(STD *stdHead);//统计 返回[3]数组,分别表示最高分 最低分 超过平均分人数
int main()
{
int *redata=NULL;
STD *stdHead=(STD *)malloc(sizeof(STD));
stdHead->next=NULL;
STD *stdTail=NULL;
do{
stdTail=insertScore(stdHead,stdTail);
}while(stdTail);
printfSTD(stdHead);
redata=tjSTD(stdHead);
printf("最高分:%d,最低分:%d,超过平均分的人数:%d\n",redata[0],redata[1],redata[2]);
return 0;
}
void printfSTD(STD *stdHead)//打印数据
{
while(stdHead->next!=NULL)
{
printf("%d\n",stdHead->next->score);
stdHead=stdHead->next;
}
}
int *tjSTD(STD *stdHead)//统计 返回[3]数组,分别表示最高分 最低分 超过平均分人数
{
int max=-1,min=-1,sum=0,count=0,*reData;
float ave;
STD *stdHeadSave=stdHead;
reData=(int *)malloc(sizeof(int)*3);
while(stdHead->next!=NULL)
{
if(max==-1 || maxnext->score)
max=stdHead->next->score;
if(min==-1 || min>stdHead->next->score)
min=stdHead->next->score;
sum=sum+stdHead->next->score;
count++;
stdHead=stdHead->next;
}
ave=(float)sum/count;
printf("总人数:%d,平均分:%f\n",count,ave);
count=0;
stdHead=stdHeadSave;
while(stdHead->next!=NULL)
{
if(stdHead->next->score>ave)
count++;//大于平均分的人数
stdHead=stdHead->next;
}
reData[0]=max;reData[1]=min;reData[2]=count;
return reData;
}
STD *insertScore(STD *stdHead,STD *stdTail)//录入成绩
{
int score;
printf("输入成绩(输入-1结束录入):");
scanf("%d",&score);
if(score==-1)
return NULL;
STD *stdNew=(STD *)malloc(sizeof(STD));
stdNew->score=score;
stdNew->next=NULL;
if(stdHead->next==NULL)
stdHead->next=stdNew;
else
stdTail->next=stdNew;
stdTail=stdNew;
return stdTail;
}
#include
int main()
{
int n,a[100],count=0,i;
double avg;
printf("请输入学生个数:");
scanf("%d",&n);
printf("请输入学生考试成绩:\n");
for(i=0;iscanf("%d",&a[i]);
int max=a[0],min=a[0];
int sum = 0;
for(i=0;i{
if(max max = a[i];
if(min>a[i])
min = a[i];
sum += a[i];
}
avg = sum / n;
for(i=0;i{
if(a[i]>avg)
count++;
}
printf("最高分:%d\n",max);
printf("最低分:%d\n",min);
printf("超过平均分的人数:%d\n",count);
return 0;
}
随便写的,没有经过测试。自己测试一下,然后修改一下!
#include
#include
#include
int main(int argc, char * argv[]){
int n = 0, x = 0;
int *p;
//n用于取输入的数值,x用于空间的数量创建
printf("输入数值,输入非数值即停止:\n");
while( scanf("%d",&n) == 1 ){
getchar(); //获取缓冲区回车 或者 空格,即清空缓存
x++;
if( x == 1 )
p = (int *)malloc( sizeof(int) * x ); //x是建立空间的数量,如果是1,就分配空间,如果大于1,就重新扩充分配
else
p = (int *)realloc(p, sizeof(int) * x);
//realloc自行百度解释
p[x-1] = n; //赋值
}
int i;
int temp_1 = p[0] , temp_2 = p[0] ,temp_3 = 0;
double average;
for( i=0;i
temp_1 = temp_1 > p[i] ? temp_1:p[i]; //temp_1永远是最大的
temp_2 = temp_2 < p[i] ? temp_2:p[i]; //temp_2永远是最小的
temp_3 = temp_3 + p[i]; //temp_3累加所有分数
}
n = i; //将数组数量赋值给其他变量,用于记录数组长度
average = (double)temp_3 / n; //计算平均分
printf("最高分:%d 最低分:%d 平均分:%lf\n",temp_1,temp_2,average);
printf("超过或等于平均分的分数为:\n");
for( i=0;i
if( p[i] >= average ) //大于或等于平均分就输出
printf("%d ",p[i]);
}
printf("\n");
free(p); //释放空间
p = NULL; //将指针指向空指针
return 0;
}
#include
#include
#include
typedef struct sss
{
float score;
struct sss *next;
}SC;
int main()
{
int count=0,above=0,i=0;
float tmp,maxs=0,mins=0,total=0,avr=0;
SC *Head=NULL,*r=NULL,*p=NULL;
Head = (SC*)malloc(sizeof(SC));
r=p=Head;
printf("please input score(end with -1 ):\n");
while(1)
{
scanf("%f",&tmp);
if(tmp==-1)
{
break;
}
p = (SC*)malloc(sizeof(SC));
p->score = tmp;
p->next = NULL;
r->next = p;
r=p;
total+=tmp;
if (count==0)
{
maxs =mins = tmp;
}
if (tmp>maxs)
{
maxs=tmp;
}
if (tmp{
mins =tmp;
}
count++;
}
r = Head->next;
while (r)
{
if (r->score>avr)
{
above++;
}
r = r->next;
}
printf("Max Score [%.2f],Min Score [%.2f],above aver [%d]students\n",maxs,mins,above);
return 0;
}
please input score(end with -1 ):
60
56
76
78
89
76
89
67
-1
Max Score [89.00],Min Score [56.00],above aver [8]students
Press any key to continue