要求:输入一个班25名学生的C语言成绩(整数),求它们的平均分,最高分,最低分,并输出。把成绩按从高到低输出。
有问题可以提哈,给你运行出来了
#include <stdio.h>
#include <stdlib.h>
#define N 25
/*提示用户的输入25个数,找到最大值,找到最小值,计算平均值*/
int main()
{
int i;
int max;
int min;
int total=0;
float average;
//1.定义一个25个整型数的数组
int scores[25]={0};
//2.初始化数组
for(i=0;i<25;i++)
{
//2.1提示用户输入第多少个数
printf("请输入第%d个分数: ",i+1);//0+1=1
//2.2获取用户的输入scanf
scanf("%d",&scores[i]);
if(scores[i]>100 || scores[i]<0)
{
printf("没有这种分数\n");
printf("强制退出\n");
system("pause");
exit(-1);
}
}
for(i=0;i<25;i++)
{
printf("第%d个分数是:%d\n",i+1,scores[i]);
}
//3.找分数,找最高分
max=scores[0];//让max等于数组的第0项,
for(i=0;i<25;i++)
{
if(max<scores[i])
{
max=scores[i];
}
}
printf("最高分是:%d\n",max);
//4.找最低分
min=scores[0];//让min等于数组的第0项,
for(i=0;i<25;i++)
{
if(min>scores[i])
{
min=scores[i];
}
}
printf("最低分是:%d\n",min);
//5.计算平均值
//5.1算出总分
for(i=0;i<25;i++)
{
total+=scores[i];
//total=total+datas[i]
}
//5.2求平均值
average=(float)total/25;
//6.输出结果
printf("平均分是:%f\n",average);
fac(scores);
for(i=0; i<N; i++)
printf("%4d",scores[i]);
system("pause");
return 0;
}
int fac(int ans[]) {
int i,j,t;
for(i=0; i<N-1; i++)
for(j=0; j<N-1-i; j++)
if(ans[j]>ans[j+1]) {
t=ans[i];
ans[j]=ans[j+1];
ans[j+1]=t;
}
}
实现的步骤
#include <stdio.h>
#include <stdlib.h>
#define NMAX 25
/*冒泡法排序*/
void maopao(int ans[]) {
int i,j,t;
for(i=0; i<NMAX-1; i++)
for(j=0; j<NMAX-1-i; j++)
if(ans[j]>ans[j+1]) {
t=ans[i];
ans[j]=ans[j+1];
ans[j+1]=t;
}
}
int main() {
int i,j ;/*用于控制循环的变量*/
int max=0,min=100;/*用于记录最高和最低成绩的变量*/
int sum=0;/*用于记录成绩总和的变量*/
float average;;/*用于记录平均成绩的变量*/
/*1.定义一个NMAX(这里是25)个整型数的数组*/
int scores[NMAX ];
/*2.接收输入成绩来完成初始化数组*/
for(i=0; i<25; i++) {
/*2.1提示用户输入第多少个数*/
printf("请输入第%d个分数: ",i+1);//0+1=1
/*2.2获取用户的输入scanf*/
scanf("%d",&scores[i]);
if(scores[i]>100 || scores[i]<0) {
printf("没有这种分数\n");
printf("强制退出\n");
system("pause");
exit(-1);
}
sum=sum +scores[i];
if(scores[i]>max) max = scores[i]; /*更新最高成绩*/
if(scores[i]<min ) min=scores[i]; /*更新最低成绩*/
}
/*在排序前显示录入的成绩情况*/
printf("排序前成绩列表情况是:\n“);
for(i=0;i<NMAX;i++) printf("第%d个分数是:%d\n",i+1,scores[i]);
/*输出最高、最低成绩*/
printf("最高分是:%d\n",max);
printf("最低分是:%d\n",min);
/*求平均值*/
average= (float)sum / NMAX ;
/*输出平均值(保留2位小数)结果 */
printf("平均分是:%.2f\n\n",average);
/*排序*/
maopao(scores);
/*输出排序后情况*/
printf("排序后成绩排名情况是:\n“);
for(i=0; i<NMAX; i++) printf("第%d个分数是:%d\n",i+1,scores[NMAX-1-i]);
return 0;
}
其实也可以先排序后输出最高和最低成绩(因为排序后这两个分别是数组的首尾元素啦)
先排序,再计算
结构体链表或结构体数组
解答如下
#include <stdio.h>
#include <stdlib.h>
double calave(int t[],int n)
{
double sum=0;
for(int i=0;i<n;i++)
sum+=t[i];
return sum/n;
}
void sort(int arr[],int size)
{
for(int i=0; i<size-1; i++)
{
for(int j=0; j<size-1-i; j++)
{
if(arr[j]<arr[j+1])
{
int tem=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tem;
}
}
}
}
int main()
{
int n=25;
int t[n];
for(int i=0;i<n;i++)
t[i]=rand()%50+50;
for(int i=0;i<n;i++)
{
printf("%d ",t[i]);
if((i+1)%5==0)
printf("\n");
}
printf("\n");
sort(t,n);
printf("平均分:%.2lf\n",calave(t,n));
printf("最高分:%d\n",t[0]);
printf("最低分:%d\n",t[n-1]);
printf("\n");
printf("高到低输出:\n");
for(int i=0;i<n;i++)
{
printf("%d ",t[i]);
if((i+1)%5==0)
printf("\n");
}
return 0;
}