第2个回答 2010-06-29
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int score_count(int *arr, int arr_size, int score)
{
int total = 0, i;
for(i = 0; i < arr_size; i++)
{
if( arr[i] == score )
{
total++;
}
}
return total;
}
int search_first(int *arr, int arr_size)
{
int temp = 0, i;
for(i = 0; i < arr_size; i++)
{
if(arr[i] > temp)
{
temp = arr[i];
}
}
return temp;
}
int search_second(int *arr, int arr_size)
{
int temp = 0, i;
int first = search_first(arr, arr_size);
for(i = 0; i < arr_size; i++)
{
if( arr[i] == first )
continue;
if(arr[i] > temp)
{
temp = arr[i];
}
}
return temp;
}
int search_third(int *arr, int arr_size)
{
int temp = 0, i;
int first,second;
first = search_first(arr, arr_size);
second = search_second(arr, arr_size);
for(i = 0; i < arr_size; i++)
{
if( arr[i] == first || arr[i] == second)
continue;
if(arr[i] > temp)
{
temp = arr[i];
}
}
return temp;
}
void search_level(int *arr, int arr_size)
{
int i,excellent = 0,well = 0,middle = 0,fail = 0;
for(i = 0; i < arr_size; i++)
{
if( arr[i] >= 90)
{
excellent++;
}
else if( arr[i] < 90 && arr[i] >=75)
{
well++;
}
else if( arr[i] >= 60 && arr[i] < 75 )
{
middle++;
}
else
{
fail++;
}
}
printf("统计各档成绩:\n");
printf("得优的人数:%d\n", excellent);
printf("得良的人数:%d\n", well);
printf("得中的人数:%d\n", middle);
printf("不及格人数:%d\n", fail);
}
void main()
{
int i, total, *score, first, second, third;
printf("请输入学生数(>=3):");
scanf("%d", &total);
if(total < 3)
total = 3;
score = (int *) malloc ( sizeof(int) * total );
for(i = 0; i < total; i++)
{
printf("请输入学生%d的分数:", i+1);
scanf("%d", &score[i]);
}
first = search_first(score, total);
second = search_second(score, total);
third = search_third(score, total);
printf("最好成绩:\n");
printf("%d分:%d人\n", first, score_count(score, total, first));
printf("%d分:%d人\n", second, score_count(score, total, second));
printf("%d分:%d人\n", third, score_count(score, total, third));
search_level(score, total);
}本回答被提问者采纳
第3个回答 2018-06-13
#include<stdio.h>
int main()
{
int n,i=1,a[3]={0,0,0},cj;
//a[]用于存放前三名成绩
int aa=0,b=0,c=0;//用于存放前三名成绩的人数
float k;
int y=0,l=0,z=0,bj=0;
printf("请输入学生中人数:");
scanf("%d",&n);
for(i;i<=n;i++)
{
printf("请输入第%d个学生的成绩:",i);
scanf("%d",&cj);
//每输入一个成绩就排列一次
//这一连串的判断用于找出前三名及其所对应的人数
//只考虑六种情况:cj>a[0];cj=a[0];a[0]>cj>a[1];cj=a[1];a[1]>cj>a[2];cj=a[2]。
if(cj>a[0])//如果有个数比原来的最大还要大,就代替a[0],其余后移。下面的以此类推,不同的是比较第二大的数、第三大的数
{
a[2]=a[1];
a[1]=a[0];
a[0]=cj;
c=b=aa=1;
//如果原a[0]不是最大,则之前的计数清零
}
else if(cj==a[0])aa++;
else if(cj>a[1])
{
a[2]=a[1];
a[1]=cj;
c=b;
b=1;
}
else if(cj==a[1])b++;
else if(cj>a[2])
{
a[2]=cj;
c=1;
}
else if(cj==a[2])c++;
if(cj>=90)y++;
else if(cj>=75)l++;
else if(cj>=60)z++;
else bj++;
}
printf("第一名的成绩为%d,人数有%d\n",a[0],aa);
printf("第二名的成绩为%d,人数有%d\n",a[1],b);
printf("第三名的成绩为%d,人数有%d\n",a[2],c);
k=n;
printf("优所占百分比为%.2f%%\n",100*y/k);
printf("良所占百分比为%.2f%%\n",100*l/k);
printf("中所占百分比为%.2f%%\n",100*z/k);
printf("不及格所占百分比为%.2f%%\n",100*bj/k);
return 0;
}