当前位置:编程学习 > C/C++ >>

写一道C语言题目(必须是要用C语言写的)

要求如下(尽量不要用指针和链表):有十个学生,每个学生的成绩包括:学号,姓名,三门课程的成绩,输入十个学生的数据,求每个学生的平均成绩,并按平均成绩由高到低输出学生的姓名,学号,和平均成绩。欢迎回答!不甚感激!
追问:来自手机问问大哥,我要的是不要用链表的……
答案:学校的题目出来出去都是这种题目

#include<stdlib.h>
#include<stdio.h>
void xuesheng()
{
 struct date
 {
  int num;
  char name[20];
  int score[3];
  float average;
 }stu[5];
 struct date *p=stu,*t;
 struct date *p1[5]={&stu[0],&stu[1],&stu[2],&stu[3],&stu[4]};
 int i,j;
 char c;
    FILE *fp;
 printf("本程序是上机课写的,现改进一下输入过程,不会混乱\n");
 for(i=0;i<5;i++)
 {
  printf("输入学号:");
  scanf("%d",&(p+i)->num);
  c=getchar();
  while(c!='\n')
  {
   c=getchar();
  }
  printf("输入名字:");
  scanf("%[^\n]",&(p+i)->name);
  printf("输入三科成绩:");
  for(j=0;j<3;j++)
   scanf("%d",&(p+i)->score[j]);
  getchar();
 }
    for(i=0;i<5;i++)
  (p+i)->average=((p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2])/3;
 for(i=0;i<4;i++)
  for(j=0;j<5-i;j++)
   if(p1[j]->average>p1[j+1]->average)
   {
    t=p1[j];
    p1[j]=p1[j+1];
    p1[j+1]=t;
   }
 printf("   学号      姓名    成绩1    成绩2    成绩3     平均分\n");
 printf("   (num)     (name) (score1) (score2) (score3)  (average)\n");
    for(i=0;i<5;i++)
 {
  printf("%7d%11s",p1[i]->num,p1[i]->name);
  for(j=0;j<3;j++)
   printf("%8d",p1[i]->score[j]);
  printf("      %9f",p1[i]->average);
  printf("\n");
 }
    if((fp=fopen("C:\\Documents and Settings\\All Users\\桌面\\studsort.txt","w+"))==NULL)
 {printf("error:");
 exit(0);
 }
    fprintf(fp,"   学号      姓名    成绩1    成绩2    成绩3     平均分\n");
 fprintf(fp,"   (num)     (name) (score1) (score2) (score3)  (average)\n");
    for(i=0;i<5;i++)
 {
  fprintf(fp,"%7d%11s",p1[i]->num,p1[i]->name);
  for(j=0;j<3;j++)
   fprintf(fp,"%8d",p1[i]->score[j]);
  fprintf(fp,"      %9f",p1[i]->average);
  fprintf(fp,"\n");
 }
 fclose(fp);
}

#include <stdio.h>
#include <string.h>

#define MAXLen 3

struct student {
 int code;
 char name[20];
 double aver;
}students[MAXLen];

void mswap(struct student *stua,struct student *stub) {
 int tcode;
 char tname[20];
 double taver;
 tcode = stua->code;
 stua->code = stub->code;
 stub->code = tcode;
 strcpy(tname,stua->name);
 strcpy(stua->name,stub->name);
 strcpy(stub->name,tname);
 taver = stua->aver;
 stua->aver = stub->aver;
 stub->aver = taver;
}

void bubble_sort(struct student *stu, unsigned n) { // 选择排序函数
 unsigned i,j,k;
 double tmp;
 for(i = 0; i < n - 1; i++) {
  k = i;
  tmp = stu[i].aver;
  for(j = i + 1; j < n; j++) if(stu[j].aver > tmp) {
   k = j;
   tmp = stu[j].aver;
  }
  if(k != i) mswap(&stu[i],&stu[k]);
 }
}

int main() {
 int i,j;
 char *courses[3] = {"英语成绩","物理成绩","C语言成绩"};
 double sum,grade;
 for(i = 0;i < MAXLen;i++) {
  printf("第%d个学生的学号 : ",i + 1);
  scanf("%d",&students[i].code);
  printf("第%d个学生的姓名 : ",i + 1);
  scanf("%s",students[i].name);
  sum = 0.0;
  for(j = 0;j < 3;j++) {
   printf("%s : ",courses[j]);
   scanf("%lf",&grade);
   sum = sum + grade;
  }
  students[i].aver = sum/3.0;
 }
 bubble_sort(students, MAXLen);
 printf("*********************\n");
 printf(" 序号 姓  名 平均成绩\n");
 printf("*********************\n");
 for(i = 0;i < MAXLen;i++) {
  printf(" %4d",students[i].code);
  printf(" %-6s",students[i].name);
  printf(" %6.2lf\n",students[i].aver);
 }
 return 0;
}

上一个:C语言中的createprocess()函数参数是什么?
下一个:6进制转化成10进制的c语言程序

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,