C语言高手进来写个小程序

某班有学生n人,从终端读入n及n个人学生的成绩,试编程实现以下功能:
①印出前3个最好成绩及取得每个最好成绩的人数;
②若90分以上计为优,75-89分计为良,60-74分计为中,60分以下计为不及格,试统计各档成绩所,,就是这个程序,感激万分
编写完后再加分

定义数组score记录成绩,record记录名次及成绩分档
*(record+0)记录第一名成绩,*(record+1)记录第一名人数,*(record+2)记录第二名成绩,*(record+3)记录第二名人数,*(record+4)记录第三名成绩,*(record+5)记录第三名人数,*(record+6)记录优的人数,
*(record+7)记录良的人数,
*(record+8)记录中的人数,
*(record+9)记录不及格的人数。

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

void sort_score(int *score,int *record,int total){ //子函数,最好成绩及成绩分档;
int i,j,k; //定义i,j变量;
for(i=0;i<total;i++){ //循环,遍历数组 score;
if(*(score+i)>=90) //成绩大于等于90分时,优 人数加1;
*(record+6) += 1;
else if(*(score+i)>=75) //成绩 75-----89分时, 良 人数加1;
*(record+7)+= 1;
else if(*(score+i)>=60) //成绩 60-----74分时, 中 人数加1
*(record+8) += 1;
else //成绩小于60分时, 及格 人数加1;
*(record+9) += 1;

if(*(score+i)>=*(record+4)){ //分数等于大于第三名时,执行循环。。。;
for(j=2;j>=0;j--)
if(*(score+i)==*(record+2*j)){ //第i人成绩等于 第j+1名 时,第j+1名 人数加1;
*(record+2*j+1) += 1;
break;
}
else if(*(score+i)<*(record+2*j-2) && j>0){ //第i人成绩大于第j+1名但小于第j名时,名次从地j+1名依次向后移动一名,第j+1名替换;
for(k=3;k>=2*j;k--)
*(record+k+2)=*(record+k);
*(record+2*j)=*(score+i);
*(record+2*j+1)=1;
break;
}

if(j==-1){ // 如果j=-1;第二名变为比三名,第一名变为第三名,替换第一名;
for(j=3;j>=0;j--)
*(record+j+2)=*(record+j);
*(record+0)=*(score+i);
*(record+1)=1;
}
}

}
}

void main(){
int total,*score,*record,record_[10]={0},i,j; //第一相关变量;
i=j=0;
record=record_;

printf("请输入学生人数(>=3):\n"); //输入人数n;
scanf("%d",&total);

score=(int *)malloc(sizeof(int)*total); //开辟total个int空间;

printf("输入第 1—— %d人成绩: ",(5<total)? 5:total ); //输入成绩,输入5人成绩按下回车;
for( ;j<total;j++){
scanf("%d",score+j);
if((j+1)%5==0 && j!=0)
if(j+2 != total)
printf("输入第%2d——%2d人成绩: ",j+2,(j+6<total)? j+6:total);
else
printf("输入第 %d人的成绩: ",total);
}

sort_score(score,record,total); //调用子函数;

printf("\n最好成绩:\n"); //输出最好成绩 分数 及 人数;
for(i=0;(*(record+2*i) != 0) && i<3;i++)
printf("第%d名: %d分 %d人\n",i+1,*(record+2*i),*(record+2*i+1));

printf("统计各挡人数:\n");
printf("优 %d 人\n",*(record+6)); //输出 优 人数;
printf("良 %d 人\n",*(record+7)); //输出 良 人数;
printf("中 %d 人\n",*(record+8)); //输出 中 人数;
printf("不及格 %d 人\n",*(record+9)); //输出 不及格 人数;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-03
这好像是书中的一个例子 = = !谭版C语言
第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;
}

相似回答