标题:关于结构体的代码,运行时出错了,求指教
只看楼主
血雨萧瑟
Rank: 5Rank: 5
来 自:福州大学
等 级:职业侠客
帖 子:155
专家分:320
注 册:2012-11-19
结帖率:100%
已结贴  问题点数:30 回复次数:7 
关于结构体的代码,运行时出错了,求指教
原题如下:
    有十个学生,每个学生的数据包括学号,姓名,3门课的成绩,从键盘输入十个学生的数据,要求输出十个学生3门课程总平均成绩,最高分学生的数据,以及第N个学生的成绩。
   以下是我写的代码,只输出了十个学生3门课程总平均成绩就终止了,求指教。大的框架请不要改动。
#include <stdio.h>
#define N 10
#define M 3  
struct student
{
   int num;
   char name[8];
   float score[3];
   float avg;
};

int main()
{
   void input(struct student stu[],int n);
   void average(struct student stu[],int n);
   int search(struct student stu[],int n);
   void print(struct student stu[],int n);

   struct student stu[N];
   int max;
   input(stu,N);
   average(stu,N);
   max=search(stu,N);
   print(stu,max);
   return 0;
}
void input(struct student stu[],int n)   
{  int i,j;
   for(i=0;i<n;i++)
   {
           scanf("%d%s",&stu[i].num,&stu[i].name[8]);
    for(j=0;j<M;j++)
    {
        scanf("%f",&stu[i].score[j]);
    }   
   }
}

void average(struct student stu[],int n)   
{
   int i;
   for(i=0;i<n;i++)
   {   
       stu[i].avg=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
       printf("Average score of No.%d:%.2f\n",i,stu[i].avg);
    }   
}
int search(struct student stu[],int n)     
{
   int max;
   max=n;
   for(;n--;)
   if (stu[max].avg<stu[n].avg)
           max=n;
   return max;
}
void print(struct student stu[],int n)  
{
   printf("No.%d,Name:%s,score:%.2f,%.2f,%.2f,average:%.2f",stu[n]);
}
搜索更多相关主题的帖子: average include 结构体 
2012-12-20 22:25
血雨萧瑟
Rank: 5Rank: 5
来 自:福州大学
等 级:职业侠客
帖 子:155
专家分:320
注 册:2012-11-19
得分:0 
呃,写的时候旁边没写注释,直接粘贴过来了,在这补充吧,主函数下面,第一个函数是输入函数,第二个是求平均值的函数,第三个是最高成绩的,第四个是输出第N个学生信息。

新手初学,可以拍砖。
游戏不是猛虎,网络在怎么发展网游都不可能消失只会越来越像一个世界。
2012-12-20 22:30
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:8 
好像没什么问题啊
就是           scanf("%d%s",&stu[i].num,&stu[i].name[8]);这个地址符用加吗?

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-20 22:36
血雨萧瑟
Rank: 5Rank: 5
来 自:福州大学
等 级:职业侠客
帖 子:155
专家分:320
注 册:2012-11-19
得分:0 
回复 3楼 yaobao
额,新人初学,没考虑过,只是例题上输入有地址符就加上了,求解释。

新手初学,可以拍砖。
游戏不是猛虎,网络在怎么发展网游都不可能消失只会越来越像一个世界。
2012-12-20 22:57
weishen2011
Rank: 2
等 级:论坛游民
帖 子:92
专家分:70
注 册:2012-10-16
得分:6 
路过一下!
2012-12-20 23:12
血雨萧瑟
Rank: 5Rank: 5
来 自:福州大学
等 级:职业侠客
帖 子:155
专家分:320
注 册:2012-11-19
得分:0 
末日了,也没人答疑解惑了。

新手初学,可以拍砖。
游戏不是猛虎,网络在怎么发展网游都不可能消失只会越来越像一个世界。
2012-12-21 00:37
SLmask
Rank: 2
等 级:论坛游民
帖 子:14
专家分:27
注 册:2012-10-18
得分:8 
嗯,说几个错误
1.scanf("%d%s",&stu[i].num,&stu[i].name[8]);应该是scanf("%d%s",&stu[i].num,stu[i].name);
   name是字符数组名嘛,本身就是地址了,要是按你那样写的话就是给name字符串里面的第九个字符赋值了
2.search里面的    max=n-1;//max=n;
    for(n=n-2;n>=0;n--)//for(;n--;)
明白我的意思吧,注释掉的是你写的
    你在写的时候访问超出数组的边界了,OK?至于for里边n=n-2只是想简捷一点,因为一开始max就是n-1了嘛,for的括号里面第二个部分是判断是否循环的,而不是设置循环变量的,当然这只是一个说法,你最好复习一下for循环语句的执行顺序这类知识
3.每次输出NO多少的时候,相应位置的变量应该是结构体里面的num变量,这样比较符合吧
4.最后print函数,我是觉得不能只用stu[n]啦,但是这个我真的不清楚,懒得测试了,LZ自己试一下吧
2012-12-21 02:21
daniel_
Rank: 5Rank: 5
等 级:职业侠客
帖 子:212
专家分:307
注 册:2012-11-13
得分:8 
#include <stdio.h>

#define N 10
#define M 3  

typedef struct student
{
   int num;
   char name[8];
   float score[3];
   float avg;
}STU;


void input(STU stu[],int n);
void average(STU stu[],int n);
int search(STU stu[],int n);
void print(STU stu[],int n);

int main()
{
   
   STU stu[N];
   int max = 0;
   input(stu,N);
   average(stu,N);
   max = search(stu,N);
   print(stu,max);
   return 0;
}

void input(STU stu[],int n)   
{  int i,j;
   for(i = 0;i < n;i++)
   {
           printf("please input  NO.%d and a char name:\n",i);
           scanf("%d%s",&stu[i].num,&stu[i].name);
         
    for(j = 0;j < M;j++)
    {
         printf("please input three scores:\n");
         printf("please input NO.%d score:\n",j+1);
        scanf("%f",&stu[i].score);
    }   
   }
}

void average(STU stu[],int n)   
{
   int i;
   for(i = 0;i < n;i++)
   {   
       stu[i].avg = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2])/3.0;
       printf("Average score of No.%d = %.2f\n",i,stu[i].avg);
    }   
}
int search(STU stu[],int n)     
{
   int max;
   max = n;
   for(;n--;)
   if (stu[max].avg < stu[n].avg)
           max = n;
   return max;
}
void print(STU stu[],int n)  
{
    printf("No.%d,Name:%s,score:%.2f,average:%.2f",stu[n-1].num,stu[n-1].name ,stu[n-1].score,stu[n-1].avg);
}
2012-12-21 09:10



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




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

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