| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1626 人关注过本帖
标题:[求助]结构体问题
只看楼主 加入收藏
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
 问题点数:0 回复次数:36 
[求助]结构体问题

大家晚上好
又有问题请教大家了以下是原题和程序:
有10个学生,每个学生的数据包括学号,姓名,3门课的成绩,从键盘输入10个学生的
数据,要求打印吵出每个学生学的平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课
成绩,平均分数).

输入和输出函数都可以执行,中间那个void AccountAver(struct student *p)函数却不能实现计算各个学生的平均成绩和总平均成绩的功能,看观之许久未能发现问题所在,请大家指点迷津,万分感谢!

#include "stdio.h"
struct student
{
int num;
char name[20];
int score[3];
float aver;
} stu[10];

float averz=0,max=0;/*定义三个全局变量*/
int k;

void Print(struct student *p)
{
int i;
printf("\nNO. name score1 score2 score3 average\n");
for(i=0;i<10;i++,p++)
printf(" %d%4s%6d%7d%7d%9.2f\n",p->num,p->name,p->score[0],p->score[1],
p->score[2],p->aver);
printf("the total average is %f\n",averz);
printf("the %d student of hight score:\n",k+1);
p=stu;
p=p+k;
printf("%d %s %d %d %d%5.2f\n",p->num,p->name,p->score[0],p->score[1],
p->score[2],p->aver);
}


void Input(struct student *p)
{
int i,j;
for(i=0;i<10;i++,p++)
{
printf("Input the %dth student Number and Name:\n",i+1);
printf("Number:");
scanf("%d",&p->num);
printf("Name:");
scanf("%s",p->name);
printf("Input the %dth student score:\n",i+1);
for(j=0;j<3;j++)
{
printf("Score%d:",j+1);
scanf("%d",&p->score[j]);
}
printf("\n");
}
}

void AccountAver(struct student *p)
{
int i,j;
float sum=0;
for(i=0;i<10;i++,p++)
{
for(j=0;j<3;j++);
sum=p->score[j]+sum;
p->aver=sum/3;
if(max<p->aver)
{
max=p->aver;
k=i;
}
averz=p->aver+averz;
}
averz=averz/10;
}

main()
{
struct student *p;
p=stu;
Input(p);
p=stu;
AccountAver(p);
p=stu;
Print(p);
getch();
}

m/?u=157

搜索更多相关主题的帖子: 结构体 
2006-05-15 23:33
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
float averz=0,max=0;/*定义三个全局变量*/

这是三个吗

我晕,看错了,后边还一个呢

[此贴子已经被作者于2006-5-15 23:36:06编辑过]


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-15 23:35
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
for(j=0;j<3;j++);


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-15 23:37
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

建议你重写一个,有点烦琐


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-15 23:39
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
兄弟都学到结构了,上几天不还指针呢吗?挺快了,不用忙,学习不是忙的事情,功到自然成

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-15 23:44
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
得分:0 
呵呵,写的是有点乱
结构体快学完了,搞潭的练习题呢
这几天还挺忙,要不练习应该做完了,现在才开始做,感觉不是特好理解

程序 是一门语言的艺术,讲究学练读写!
2006-05-15 23:47
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

也没简单多少,不过这个可以正确运行,TC估计得连接下浮点库
[CODE]
#include "stdio.h"
struct student
{
int num;
char name[20];
int score[3];
float aver;
} stu[10];

int main()
{
int i,j,maxn=0;
float aver,total_aver=0;

for(i=0;i<10;i++)
{
aver=0;
printf("Input the %dth student Number and Name:\n",i+1);
printf("Number:");
scanf("%d",&stu[i].num);
printf("Name:");
scanf("%s",stu[i].name);
printf("Input the %dth student score:\n",i+1);
for(j=0;j<3;j++)
{
printf("Score%d:",j+1);
scanf("%d",&stu[i].score[j]);
aver+=stu[i].score[j];
}
stu[i].aver=aver/3;
total_aver+=stu[i].aver;
if(stu[i].aver > stu[maxn].aver)
maxn=i;
printf("\n");
}
total_aver/=10;
for(i=0;i<10;i++)
printf("The %dth stedent's averscore=%.2f\n",i+1,stu[i].aver);
printf("\nThe total_aver is %.2f\n",total_aver);
printf("\nHighest score:\n");
printf("%d %s %4d%4d%4d %4.2f\n",stu[maxn].num,stu[maxn].name,
stu[maxn].score[0],stu[maxn].score[1],
stu[maxn].score[2],stu[maxn].aver);
return 0;
}

[/CODE]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-16 00:04
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
得分:0 

[CODE]我重新写了一个,应该简单一点,不过调用函数的时候还是回出现问题#include "stdio.h"
struct student
{
int num;
char name[20];
int score[3];
float aver;
} stu[10];

float averz=0,max=0;
int k;

void AccountAver(struct student *p)
{
int i,j;
float sum=0;
for(i=0;i<10;i++,p++)
{
for(j=0;j<3;j++);
sum=p->score[j]+sum;
p->aver=sum/3;
if(max<p->aver)
{
max=p->aver;
k=i;
}
averz=p->aver+averz;
}
averz=averz/10;
}


main()
{ int i,j;
for(i=0;i<10;i++)
{
printf("\ninput score of student %d:\n",i+1);
printf("No.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
}
AccountAver(stu);
printf("NO. name score1 score2 score3 average\n");
for(i=0;i<10;i++)
{ printf("%5s%10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]);
printf("%8.2f\n",stu[i].aver);
}
printf("average=%6.2f\n",averz);
printf("The highest score is: %s,score total: %d",stu[k+1].name,stu[k+1].aver);

getche();
}


[/CODE]


程序 是一门语言的艺术,讲究学练读写!
2006-05-16 00:08
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

楼主都学完指针了,给你出个题,不难

用递归方式对字符串进行逆序输出,就是ABCDEF输出FEDCBA

条件是必须递归


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-16 00:09
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
for(j=0;j<3;j++);

我都把错误给你找出来了,你怎么不看,你的FOR后面多个';'它

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-16 00:10
快速回复:[求助]结构体问题
数据加载中...
 
   



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

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