标题:初学结构体变量,求助
只看楼主
c语言小白。
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-4-24
结帖率:100%
 问题点数:0 回复次数:5 
初学结构体变量,求助
有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入3个学生的数据,要求输出3门课总平均成绩,以及单科最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数),成绩都大于85分的学生的信息
#include <stdio.h>
#define N 10
struct student
{
   int num;
   char name[20];
   float score[3];
};
void main()
{   struct student stu[N],*p;

   void input(struct student stu[N]);
   void average(struct student stu[N]);
   void search(struct student stu[N]);
   void search85(struct student stu[N]);
   p=stu;

   input(p);
   printf("各科总平均成绩:\n");
   average(p);
   printf("单科最高分学生信息:\n");
   search(p);
   printf("各科成绩都大于85的学生信息:\n");
   search85(p);
}


void input(struct student stu[N])
{
  int i,j;
  for (i=0;i<N;i++)
    {
         printf("请输入第%d名学生的信息: \n",i+1);
         printf("学号: ");
         scanf("%d",&stu[i].num);
         printf("姓名: ");
         scanf("%s",stu[i].name);
          for (j=0;j<3;j++)
            {
              printf("课程%d成绩: ",j+1);
              scanf("%f",&stu[i].score[j]);
          }
    }
}


void average(struct student stu[N])
{   
    int i,j;  
    float sum,aver[3];
    for(i=0;i<3;i++)
    {sum=0;
     for(j=0;j<N;j++)
     { sum+=stu[i].score[j];}
     aver[i]=sum/N;
     printf("课程%d的总平均成绩:%f",i+1,aver[i]);
}


void search(struct student stu[N])
{  
    float max,avg;
    int k,m,i,j;
    for(i=0;i<3;i++)
    {   max=stu[0].score[i];
        for(j=0;j<N;j++)
        if(max<stu[j].score[i]) max=stu[j].score[i];
        k=i;m=j;
        avg=stu[m].score[0]+stu[m].score[1]+stu[m].score[2];
    }

    printf("学号: %d,姓名: %s,课程1成绩: %f,课程2成绩: %f,课程3成绩: %f,平均成绩: %f\n",stu[m].num,stu[m].name,stu[m].score[0],stu[m].score[1],stu[m].score[2],avg/3);
}
   

void search85(struct student stu[N])
{
   int i,j,label;
   float avg;
  for (i=0;i<N;i++)
  {
      avg=0;
      label=0;
      for (j=0;j<3;j++)
   {
      if (stu[i].score[j]>85)    label++;
      avg +=stu[i].score[j];
   }
   if (label==3)
   {   
    printf("学号: %d,姓名: %s,课程1成绩: %f,课程2成绩: %f,课程3成绩: %f,平均成绩: %f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],avg/3);
    }
  }   
踢错是\c语言\cdaf.c(60) : error C2143: syntax error : missing ';' before 'type'
C:\c语言\cdaf.c(63) : error C2143: syntax error : missing ';' before 'type'
C:\c语言\cdaf.c(65) : error C2065: 'max' : undeclared identifier
C:\c语言\cdaf.c(65) : warning C4244: '=' : conversion from 'float ' to 'int ', possible loss of data
C:\c语言\cdaf.c(67) : warning C4244: '=' : conversion from 'float ' to 'int ', possible loss of data
C:\c语言\cdaf.c(68) : error C2065: 'k' : undeclared identifier
C:\c语言\cdaf.c(68) : error C2065: 'm' : undeclared identifier
C:\c语言\cdaf.c(69) : error C2065: 'avg' : undeclared identifier
C:\c语言\cdaf.c(69) : warning C4244: '=' : conversion from 'float ' to 'int ', possible loss of data
C:\c语言\cdaf.c(94) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.

cdaf.obj - 1 error(s), 0 warning(s)
感觉没错,不知道怎么改,希望各位老师不吝赐教!
搜索更多相关主题的帖子: include average search 结构体 键盘 
2017-06-10 22:14
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
检查下括号是否匹配?~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-10 22:18
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
这里不是包含错误语句所在的行号
按行号去一一寻找

DO IT YOURSELF !
2017-06-10 22:19
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 3楼 wp231957
括号不匹配这个问题不一定在本行能发现错误~建议进行缩进处理~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-10 22:20
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
void average(struct student stu[N])
{   
    int i,j;  
    float sum,aver[3];
    for(i=0;i<3;i++)
    {sum=0;
     for(j=0;j<N;j++)
     { sum+=stu[i].score[j];}
     aver[i]=sum/N;
     printf("课程%d的总平均成绩:%f",i+1,aver[i]);
}

然后再认真看看~还是在这里~

[此贴子已经被作者于2017-6-10 22:24编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-10 22:21
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
程序代码:
#include <stdio.h>
#define N 10
struct student
{
   int num;
   char name[20];
   float score[3];
};
void main()//int main( void )
{   struct student stu[N],*p;

   void input(struct student stu[N]);
   void average(struct student stu[N]);
   void search(struct student stu[N]);
   void search85(struct student stu[N]);
   p=stu;//既然stu 是一个数组,那么定义一个指针指向这个数组,目的就是为了传递给函数?你就不觉得多此一举?而且这样还会造成参数类型不匹配。

   input(p);//这些行调用函数,应该都有参数类型不匹配的报错。
   printf("各科总平均成绩:\n");
   average(p);//这些行调用函数,应该都有参数类型不匹配的报错。
   printf("单科最高分学生信息:\n");
   search(p);//这些行调用函数,应该都有参数类型不匹配的报错。
   printf("各科成绩都大于85的学生信息:\n");
   search85(p);//这些行调用函数,应该都有参数类型不匹配的报错。
//return 0;
}


void input(struct student stu[N])
{
  int i,j;
  for (i=0;i<N;i++)
    {
         printf("请输入第%d名学生的信息: \n",i+1);
         printf("学号: ");
         scanf("%d",&stu[i].num);
         printf("姓名: ");
         scanf("%s",stu[i].name);
          for (j=0;j<3;j++)
            {
              printf("课程%d成绩: ",j+1);
              scanf("%f",&stu[i].score[j]);
          }
    }
}


void average(struct student stu[N])
{    
    int i,j;  
    float sum,aver[3];
    for(i=0;i<3;i++)
    {sum=0;//换个行会死啊。
     for(j=0;j<N;j++)
     { sum+=stu[i].score[j];}//换个行会死啊,下面的代码同一货色,懒得看了,所有代码挤在一起,好看吗?还是有提升效率的BUFF?
     aver[i]=sum/N;
     printf("课程%d的总平均成绩:%f",i+1,aver[i]);
}


void search(struct student stu[N])
{  
    float max,avg; 
    int k,m,i,j;
    for(i=0;i<3;i++)
    {   max=stu[0].score[i];
        for(j=0;j<N;j++)
        if(max<stu[j].score[i]) max=stu[j].score[i];
        k=i;m=j;
        avg=stu[m].score[0]+stu[m].score[1]+stu[m].score[2];
    }

    printf("学号: %d,姓名: %s,课程1成绩: %f,课程2成绩: %f,课程3成绩: %f,平均成绩: %f\n",stu[m].num,stu[m].name,stu[m].score[0],stu[m].score[1],stu[m].score[2],avg/3);
}
    

void search85(struct student stu[N])
{ 
   int i,j,label;
   float avg;
  for (i=0;i<N;i++)
  {
      avg=0;
      label=0;
      for (j=0;j<3;j++)
   {
      if (stu[i].score[j]>85)    label++;
      avg +=stu[i].score[j];
   }
   if (label==3)
   {    
    printf("学号: %d,姓名: %s,课程1成绩: %f,课程2成绩: %f,课程3成绩: %f,平均成绩: %f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],avg/3);
    }
  } 


[此贴子已经被作者于2017-6-10 22:28编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-10 22:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-477810-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045213 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved