CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

结构体类型 求助

楼主hyz0906(超超)2006-03-13 18:04:44 在 C/C++ / C语言 提问

设计一个程序,统计一个班(最多有35人)的学生成绩,要求能实现如下四个功能:  
  (1)由键盘输入每个学生的学号和四门课程的成绩  
  (2)计算每个学生的平均成绩和总成绩  
  (3)按总成绩从高到低排名,并按名次输出每个学生的情况,包括:学号,各科成绩,平均成绩,总成绩,排名  
  (4)根据要求输出某门课程(由键盘输入课程号)成绩在90分(含90分)以上且总分在前5名的学生情况 问题点数:50、回复次数:10Top

1 楼liubucheng(xiapliubuchneg)回复于 2006-03-13 18:12:26 得分 0

你可以用结构类型  
  typedf   struct   student{  
      int   num;  
      char   name[20];  
                float   fs[];         }studs;  
  Top

2 楼hyz0906(超超)回复于 2006-03-13 18:14:32 得分 0

这是我的程序,请帮忙改一下:  
  #define   str   struct   student  
  #define   sc   score  
   
  str  
  {  
  long   num;  
  double   sc[4],sum,ave;  
  };  
   
  static   void   px(p,k,i,l)  
  int   i,l,k;  
  str   *p[];  
   
  {  
  int   m,n;  
  double   t;  
  str   *w;  
  t=(*p[i+k]).sc;w=p[i+k];n=2*(i+1)-1;m=i;  
  while(n<=l-1)  
  {  
  if((n<l-1)&&((*p[n+k]).sc<(*p[n+k+1].sc)))  
  n=n+1;  
  if(t<(*p[n+k]).sc)  
  {p[m+k]=p[n+k];  
  m=n;n=2*(m+1)-1;  
  }  
  else   n=1;  
  }  
  p[m+k]=w;  
  return;  
  };  
   
  void   rkey(p,n,k,m)  
   
  int   n,k,m;  
  str   *p[];  
   
  {  
  int   i,l;  
  str   *w;  
  void   px();  
  if(k<0)   k=0;  
  if(m>n-1)   m=n-1;  
  l=m-k+1;  
  for(i=l-1;i>=0;i--)  
  px(p,k,i,l);  
  for(i=l-1;i>=1;i--)  
  {  
  w=p[k];p[k]=p[i+k];p[i+k]=w;  
  px(p,k,0,i);  
  };  
  return;  
  };  
   
  int   search(p,k,m,a,l)  
  str   p[];  
  double   a;  
  int   k,m;  
  {  
  int   i;  
  i=k;  
  while((i<=m)&&((p[i].sc[l]>=a)))i=i+1;  
  if(i>m)return(-1);  
  return(i);  
  };  
   
  float   sum(a,b,c,d)  
  {  
  float   a,b,c,d,s;  
  s=a+b+c+d;  
  return(s);  
  };  
   
  float   ave()  
  {  
  float   av;  
  av=sum()/4;  
  return(av);  
  };  
   
   
  #include   <stdio.h>  
   
  main()  
  {  
  int   i,j,q,n,m,h;  
  double   a=90.0;  
  str   stu[35];  
   
  printf("1.input   everyone's   num   and   score;\n2.count   average   score   and   whole   score;\n3.line   the   conditions   of   everyone;\n4.output   the   one   whose   one   score   is   more   than   90   and   the   mark   is   one   of   the   frist   5th.\nPlease   input   the   amount   of   the   students  
  and   the   operation   number:");  
  scanf("%d   %d",&m,&n);  
   
  if(m>35)  
  printf("error!the   biggest   amount   is   35.");  
   
  if(m<=35)  
  switch(n)  
   
  case   1:  
  printf("please   input   the   information   of   the   students.\n");  
  for(i=0;i<=m-1;i++)  
  scanf("%l   %f   %f   %f   %f",&stu[i].num,&stu[i].sc[0],&stu[i].sc[1],&stu[i].sc[2],&stu[i].sc[3]);  
  printf("\n");  
  printf("No.       score   1       score   2       score   3       score   4\n");  
  for(i=0;i<=m;i++)  
  printf("%-8d%-5.2f%-5.2f%-5.2f%-5.2f\n",stu[i].num,stu[i].sc[0],stu[i].sc[1],stu[i].sc[2],stu[i].sc[3]");  
   
  case   2:  
  for(i=0;i<=m-1;i++)  
  sum(stu[i].sc[0],stu[i].sc[1],stu[i].sc[2],stu[i].sc[3]);  
  ave();  
   
  case   3:  
  str   *p[m];  
  for(i=0;i<=m-1;i++)  
  p[i]=&stu[i];  
  printf("\n");  
  px(p,m,1,m-2)  
  printf("No.       score   1       score   2       score   3       score   4       mark       average\n");  
  for(i=0;i<=m-1;i++)  
  printf("%-8d%-5.2f%-5.2f%-5.2f%-5.2f%-5.2f%-5.2f\n",stu[i].num,stu[i].sc[0],stu[i].sc[1],stu[i].sc[2],stu[i].sc[3],stu[i].sum,stu[i].ave");  
  printf("\n");  
   
  case   4:  
  printf("please   input   the   num   of   the   score:");  
  scanf("%d",&h);  
  do  
  {  
  q=search(stu,i,m,a,h);  
  for(i=1;i<=5;i++)  
  if(q!=-1)  
  printf("%-8d%-5.2f%-5.2f%-5.2f%-5.2f%-5.2f%-5.2f\n",stu[i].num,stu[i].sc[0],stu[i].sc[1],stu[i].sc[2],stu[i].sc[3],stu[i].sum,stu[i].ave");  
  i=q+1;  
  };  
  while(q=-1)  
  printf("\n");  
  }Top

3 楼luo_luo(骆骆)回复于 2006-03-13 18:15:31 得分 0

不要用i   j     k这样的变量Top

4 楼du51(郁郁思扬)回复于 2006-03-13 19:39:23 得分 50

#include<stdio.h>  
  #include<stdlib.h>  
  #include<string.h>  
  #define   MAX   35  
  typedef   struct   tagSTU  
  {  
          char   id[28];  
          float   scores[4];  
          float   avg;  
          float   tot;  
  }STU;  
  STU*   createSTU()  
  {  
          STU   *stu=(STU*)malloc(sizeof(STU));  
          printf("请输入ID及成绩(以空格分开)\n");  
          scanf("%s%f%f%f%f",stu->id,&stu->scores[0],&stu->scores[1],\  
          &stu->scores[2],&stu->scores[3]);  
          stu->tot=stu->scores[0]+stu->scores[1]+stu->scores[2]+stu->scores[3];  
          stu->avg=stu->tot/4;  
          return   stu;  
  }    
  void   Equal(STU   *a,STU   *b)  
  {  
  a->scores[0]=b->scores[0];  
  a->scores[1]=b->scores[1];  
  a->scores[2]=b->scores[2];  
  a->scores[3]=b->scores[3];  
  strcpy(a->id,b->id);  
  a->avg=b->avg;  
  a->tot=b->tot;  
  }  
  void   Sort(STU   *addr,int   num)  
  {  
          int   i,j;  
          STU   temp;  
          for(i=num-1;i>0;i--)  
          {  
                  for(j=0;j<i;j++)  
                  {  
                          if(addr[j].tot<addr[j+1].tot)  
                          {  
                                  Equal(&temp,&addr[j]);  
                                  Equal(&addr[j],&addr[j+1]);  
                                  Equal(&addr[j+1],&temp);  
                          }  
                  }  
          }    
  }        
   
  void   Show(STU   *addr,int   num)                          
  {  
          int   i=0;  
          while(i<num)  
          {  
                  printf("id:%s\n%.2f   %.2f   %.2f   %.2f   %.2f   %.2f\n",addr[i].id,addr[i].scores[0],\  
                  addr[i].scores[1],addr[i].scores[2],addr[i].scores[3],addr[i].avg,addr[i].tot);  
                  i++;  
          }          
  }          
     
  void   Showsub(STU   *addr,int   num,int   s)  
  {  
          int   i=0;  
          while(i<num&&i<5)  
          {  
                  if(addr[i].scores[s]>89)  
                  printf("id:%s\n%.2f   %.2f   %.2f   %.2f   %.2f   %.2f\n",addr[i].id,addr[i].scores[0],\  
                  addr[i].scores[1],addr[i].scores[2],addr[i].scores[3],addr[i].avg,addr[i].tot);  
                  i++;  
          }    
  }                
  int   main()  
  {  
          int   num,i=0,s=0;  
          STU   stu[MAX];  
          printf("请输入人数(<35)\n");  
          scanf("%d",&num);  
          if(num<1||num>MAX)return   -1;  
          while(i<num)  
          {  
                  stu[i]=*createSTU();  
                  i++;  
          }  
          Sort(stu,num);  
          Show(stu,num);  
          printf("输入课号(0-3)\n");  
          scanf("%d",&s);  
          if(s<0||s>3)return   -1;  
          Showsub(stu,num,s);  
          system("PAUSE");  
          return   0;  
  }          
  Top

5 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-13 21:05:06 得分 0

楼主直接参考   du51(郁郁思扬)   的程序吧   ~  
  看出来   这个老兄特意为你写了程序    
  不要辜负了人家的一片心意哈   ~  
   
  我看楼主你就以身相许好了     ^_^  
  ----------------  
  楼主需要多看看基础啊   ~  
  函数的格式居然还是   那么古老的格式   ...  
  void   rkey(p,n,k,m)  
  int   n,k,m;  
  str   *p[];  
  ==》  
  void   rkey(str   p,   int   n,   int   k,   int   m)Top

6 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-13 21:08:13 得分 0

#define   str   struct   student  
  #define   sc   score  
   
  str  
  {  
  long   num;  
  double   sc[4],sum,ave;  
  };  
   
  楼主啊,你的   define   看起来真是   ...  
  一般操作方式:  
  typedef   struct   student  
  {  
  long   num;  
  double   sc[4],sum,ave;  
  }str;Top

7 楼hyz0906(超超)回复于 2006-03-14 08:59:54 得分 0

大哥,您的程序我看不太懂.我是一名计算机系的大一学生,刚接触c语言半年,上个学期刚开始还可以,这个学期开始编写一些比较复杂的程序,觉得有点困难,请指教!Top

8 楼jinjiajie(leorio)回复于 2006-03-14 09:12:11 得分 0

....大一就有这实力,不错不错Top

9 楼hyz0906(超超)回复于 2006-03-14 09:26:00 得分 0

上面这个程序运行输入数据后为何会有这样的错误提示:  
    scanf:floating   point   formats   not   linked  
  Abnormal   program   termination  
  Top

10 楼hyz0906(超超)回复于 2006-03-15 12:29:12 得分 0

有人能指点一下吗?Top

相关问题

  • 结构体类型问题
  • 关于结构体类型数据的强制类型转换
  • 能不能定义一个没有结构体名的结构体类型?
  • VC中一个static结构体类型赋值的问题
  • 带枚举类型的结构体如何初始化?
  • 关于结构体类型的单链表实现?
  • 求助:这种类型的结构体应该怎么用?
  • JAVA有结构类型吗?
  • 包含了AnsiString类型的结构体,其存储空间是如何分配的?如何保存结构体?
  • windows中的结构体为什么要既定义成普通变量类型又定义成指针类型?

关键词

  • 学生
  • 课程
  • stu
  • scores
  • tot
  • 程序
  • 成绩
  • 总成绩
  • sc
  • floating

得分解答快速导航

  • 帖主:hyz0906
  • du51

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo