可否用C语言再帮我写一个程序?

某班期末考试科目为数学(MT),英语(EN)和物理(PH),有最多不超过30人参加考试
考试后要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
上个问题我弄错要求了,使用C语言,不是C++语言

# include<stdio.h>

# include<string.h>

# define NUM 30

typedef struct{

 char id[20];

 char name[20];

 int rank;

 float MT;

 float EN;

 float PH;

 float SumSocre;

 float AverageScore;

}Student;

void sum(Student *stud)

{

 Student *p;

 for(p=stud;p->id[0]!='\0';p++)

 {

  p->SumSocre=p->MT+p->EN+p->PH;

 }

}

void average(Student *stud)

{

 Student *p;

 sum(stud);

 for(p=stud;p->id[0]!='\0';p++)

 {

  p->AverageScore=p->SumSocre/3.0f;

 }

}

void search(Student *stud,char * searchid)

{

 Student *p;

 for(p=stud;p->id[0]!='\0';p++)

 {

  if(!strcmp(p->id,searchid))

  {

   printf("该学生排名为%d\n数学成绩为%.3f\n英语成绩为%.3f\n物理成绩为%.3f\n",p->rank,p->MT,p->EN,p->PH);

   break;

  }

 }

 if(p->id[0]=='\0')

 {

  printf("您输入的学号不存在!!!");

 }

}

void rank(Student *stud)

{

 Student *p,*q,*k,temp;

 float pre_score;

 for(p=stud;p->id[0]!='\0';p++)

 {

  k=p;

  for(q=p+1;q->id[0]!='\0';q++)

  {

   if(q->SumSocre>k->SumSocre)

   {

    temp=*q;

    *q=*k;

    *k=temp;

   }

  }

 }

 p=stud;

 p->rank=1;

 pre_score=p->SumSocre;

 for(p=stud+1;p->id[0]!='\0';p++)

 {

  if(p->SumSocre==pre_score)

  {

   p->rank=(p-1)->rank;

  }

  else

  {

   p->rank=p-stud+1;

  }

  pre_score=p->SumSocre;

 }

}

void main()

{

 Student stud[NUM]={{"001","liming",0,98,87,93,0,0},{"002","wanghua",0,87,89,90,0,0},{"003","xiaoli",0,78,98,98,0,0},{"004","tangmu",0,87,98,89,0,0}};

 Student *p;

 char searchid[20];

 sum(stud);

 puts("学生总成绩如下:");

 for(p=stud;p->id[0]!='\0';p++)

 {

  printf("学生%s总成绩为%.3f\n",p->id,p->SumSocre);

 }

 average(stud);

 puts("学生平均成绩如下:");

 for(p=stud;p->id[0]!='\0';p++)

 {

  printf("学生%s平均成绩为%.3f\n",p->id,p->AverageScore);

 }

 rank(stud);

 puts("全部学生信息如下:");

 for(p=stud;p->id[0]!='\0';p++)

 {

  printf("学生%s排名为%d\n数学成绩为%.3f\n英语成绩为%.3f\n物理成绩为%.3f\n",p->id,p->rank,p->MT,p->EN,p->PH);

 }

 printf("请输入要查找的学生的学号:");

 gets(searchid);

 search(stud,searchid);

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-01

#include <stdio.h>

#include <stdlib.h>

//可以写更好,不过没有必要


typedef struct info{

char name[50];

int id;

int mt;

int en;

int py;

int total;

int avg;

}info_t;


#define NUM_STUDENT 30

int main(int argc,char *argv[]){

info_t list[NUM_STUDENT];

info_t *p;

info_t swap;

int i,j;

int num;

int over = 0;

int id;


printf("How many students.\n");

scanf("%d",&num);

if(num < 0 || num > NUM_STUDENT){

printf("num > 0 and num < %d\n",NUM_STUDENT);

return 0;

}


for(i = 0 ; i < num;i++){

p = &list[i];

printf("input one student info:\n");

printf("input id:\n");

scanf("%d",&p->id);

printf("input mt:\n");

scanf("%d",&p->mt);

printf("input en:\n");

scanf("%d",&p->en);

printf("input ph:\n");

scanf("%d",&p->ph);

p->total = p->mt + p->en + p->ph;

p->avg = p->total / 3;

}


//sort

for(i = 0; i < num;i++){

over = 1;

for(j = 0; j < num - i - 1;j++){

if(list[j].total < list[j + 1].total){

memcpy(&swap,&list[j],sizeof(info_t));

memcpy(&list[j],&list[j+1],sizeof(info_t));

memcpy(&list[i],&swap,sizeof(info_t));

over = 0;

}

}

if(over)

 break;

}


for(i = 0; i < num;i++){

printf("id:%d mt:%d en:%d ph:%d avg:%d total:%d\n",

list[i].id,list[i].mt,list[i].en,list[i].ph,list[i].avg,list[i].total);

}


while(1){

printf("please input ID:\n");

scanf("%d",&id);

for(i = 0; i < num;i++){

if(list[i].id == id)

 printf("id:%d mt:%d en:%d ph:%d avg:%d total:%d\n",

list[i].id,list[i].mt,list[i].en,list[i].ph,list[i].avg,list[i].total);

}

}








return 0;

}


第2个回答  2013-06-01
这也不是什么难题啊
真的不会写吗追问

真心的不会,这是选修课,我是学美术专业的。大神帮忙

追答

俺也是刚学c
好吧,我去试试

可否用C语言再帮我写一个程序?
include<stdio.h># include<string.h># define NUM 30typedef struct{ char id[20]; char name[20]; int rank; float MT; float EN; float PH; float SumSocre; float AverageScore;}Student;void sum(Student *stud){ Student *p; for(p=stud;p->id[0]!='\\0';p++) { p->SumSo...

如何用C语言编写一个计算机程序?
main(){ int x;printf("请输入一个整数");scanf("%d",&x);if(x%2 == 0) printf("%d是偶数\\n",x);else printf("%d是奇数\\n",x);}

谁能用C语言帮我写几个小程序 急求
int main(){ int max(int x,int y,int z);int a,b,c,d;scanf("%d%d%d",&a,&b,&c); \/\/scanf%d间不能有逗号,后面是输入的地址因此得加& d=max(a,b,c); \/\/输入的是abc,不是x,y,z\/\/x,y,z是形参a,b,c是实参 printf("max=%d",d);\/\/不是print是printf return 0;} in...

求c语言大佬帮助!帮我写个小程序,谢谢
int n);\/\/随机生成元素取值范围在0到99的数组void Short(int *p,int n);\/\/用选择法对数组中的元素从小到大排序void Print(int *p,int n);\/\/在屏幕上输出数组各元素的值(逗号分隔)#define N (10)int main(){ int a[N],b

怎样用C语言编写一个简单的程序?
int main(){ int a[7]; \/\/ 建立一个 7 元素的数组 int i;int sum = 0;int max = a[0];int min = a[0];\/\/ 手动输入 7 个元素 for (i = 0; i < 7; i++){ printf("请输入第 %d 个元素的值: ", i+1);scanf("%d", &a[i]);} \/\/ 求这 7 个元素的和 for (i...

C语言高手来一下帮我编个小程序
首先,我可以用字符串来做。我现在先把代码贴上:include <stdio.h> int main(){ char *str , *ch , *c[] = {"个位为:" , "十位为:" , "百位为:" , "千位为:" , "万位为:"};scanf("%s",str);int i = 0 ;\/\/要求1.求出它是几位数 printf("此数为%d位数\\n",(size...

求帮我编一个程序,用c语言编写
choice=1;else if(gongzi>=2000&&gongzi<3000)choice=2;else if(gongzi>=3000)choice=3;switch(choice){ case 1:shui=(gongzi-1500)*0.05;case 2:shui=(gongzi-2000)*0.1;case 3:shui=(gongzi-3000)*0.15;} gongzi-=shui;printf("gongzi=%f\\n",gongzi);return 0;} include <stdio.h...

用c语言编写一个浮点运算程序
include<stdio.h> int main(){ float a,b,c,D,max;scanf("%f%f%f",&a,&b,&c);if(a>b)D=a;else D=b;if(D>c)max=D;else max=c;printf("%f",max);return 0;}

谁能用C语言给我写一个可以计算加减乘除的程序(只用算整数就OK)_百度...
char operator ;printf("请输入两个数,输入的两个数用空格分隔\\n");scaf("%d %d",&a,&b);printf("请指定你要输入的运算+或1表示加,-或2表示减,*或3表示乘,\/或4表示除!\\n") ;scanf("%c",&operator) ;switch operator { case ‘1’:‘+’result=a+b;break ;case ‘2’:‘...

如何用C语言编写一个简单的程序!
1、鼠标左键双击c语言软件,打开,打开后界面如图,点击关闭即可 2、点击上方程序窗口左上角的文件,选择新建 3、在打开的窗口中选择文件,下边一般是第四个 c++Source file,输入文件名(hellw.c),一定要以“.c”为后缀结尾 4、进入编辑页面在,页面编辑源代码就可以 includestdio.h void main()...

相似回答
大家正在搜