【高分悬赏】用C语言的指针与结构解决一道题【请一定看清要求,别复制啊,谢谢】

有4名学生,每个学生的数据包括学号、姓名、成绩,找出成绩最高者的姓名和成绩。要求:用函数实现求最高分,并分别用传值和传址的方式给函数调用传递结构。在屏幕上显示出来。一定要... 有4名学生,每个学生的数据包括学号、姓名、成绩,找出成绩最高者的姓名和成绩。
要求:用函数实现求最高分,并分别用传值和传址的方式给函数调用传递结构。在屏幕上显示出来。
一定要用结构体啊
另外,,最好请大家用tc解决,,,因为我们这个作业时要用它完成的

还有,,,我编了一个传值的程序,,编译显示好多错误,,,不会改啊,,请高手指点一下!感激不尽
#include<stdio.h>
struct student
{int num;
char name[20];
float score;
};stu[4];
void main()
{void print(struct student stu[]);
int i,k,max;
for(i=0;i<4;i++)
{printf("Plase input a student's No.,name and score:\n");
scanf("%d,%s,%f".&stu[i].num,stu[i].name,&stu[i].score);
}
max=stu[0].score;
for(i=1;i<4;i++)
{if(stu[i].score>max)
{max=stu[i].score;k=i;}
}
print(stu[k]);
}
void print(struct student stu[])
{printf("The student who has the highest score is:\n");
printf("%d\n%s\n%f\n",stu[].num,stu[].name,stu[].score);
}
展开
 我来答
zt_yes
2011-12-10 · TA获得超过544个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:58.3万
展开全部
/*有4名学生,每个学生的数据包括学号、姓名、成绩,找出成绩最高者的姓名和成绩。
要求:用函数实现求最高分,并分别用传值和传址的方式给函数调用传递结构。在屏幕上显示出来。
一定要用结构体啊
另外,,最好请大家用tc解决,,,因为我们这个作业时要用它完成的*/
//没有给出几门成绩,按一门成绩处理************
/*******值传递***********/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 4
typedef struct{
int num[N];
char name[4][20];
float score[N];
}stu,*pstu;
int max_linklist(stu p){
int i,max=0;
for(i=0;i<N;i++)
if(p.score[i]>p.score[max])
max=i;
return max;
}
stu creat_linklist(stu p){
int i;
printf("输入学号,姓名,成绩\n");
for(i=0;i<N;i++){
scanf("%d",&p.num[i]);
scanf("%s",p.name[i]);
scanf("%f",&p.score[i]);
}
return p;
}
void print_linklist(stu p,int i){
printf("最高成绩的学生信息:");
printf("学号:%d\n姓名:%s\n成绩:%.2f\n",p.num[i],p.name[i],p.score[i]);
}
void main(){
pstu p;
stu L;
int i;
p=(pstu)malloc(sizeof(stu));
L=creat_linklist(*p);
i=max_linklist(L);
print_linklist(L,i);
}

/**********指针传递*********/
pstu creat_linklist(pstu p){
int i;
p=(pstu)malloc(sizeof(stu));
printf("输入学号,姓名,成绩\n");
for(i=0;i<N;i++){
scanf("%d",&p->num[i]);
scanf("%s",p->name[i]);
scanf("%f",&p->score[i]);
}
return p;
}
void print_linklist(pstu p,int i){
printf("最高成绩的学生信息:");
printf("学号:%d\n姓名:%s\n成绩:%f\n",p->num[i],p->name[i],p->score[i]);
}
void main(){
pstu p;
int i;
p=creat_linklist(p);
i=max_linklist(p);
print_linklist(p,i);
}

参考资料: http://hi.baidu.com/zt_yes/blog/item/b256697110b2171629388a2e.html

adoqq_bd
2011-12-10 · TA获得超过7050个赞
知道大有可为答主
回答量:1818
采纳率:63%
帮助的人:1625万
展开全部
/*改了下*/
#include<stdio.h>
struct student
{
int num;
char name[20];
float score;
}stu[4];
void main()
{
void print(struct student* stu);
int i,k,max;
for(i=0;i<4;i++)
{
printf("Plase input a student's No.,name and score:\n");
scanf("%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);
}
print(stu);
}
void print(struct student* stu)
{
int i,k=0, max=stu[0].score;
for(i=0;i<4;i++)
{
if(stu[i].score>max)
{
max=stu[i].score;
k=i;
}
}
printf("The student who has the highest score is:\n");
printf("%d\n%s\n%f\n",stu[k].num,stu[k].name,stu[k].score);
}

Plase input a student's No.,name and score:
1 王大 789
Plase input a student's No.,name and score:
2 张三 922
Plase input a student's No.,name and score:
3 李四 666
Plase input a student's No.,name and score:
3 胡九 4732
The student who has the highest score is:
3
胡九
4732.000000
请按任意键继续. . .
更多追问追答
追问
真的是这样吗???为什么我一运行输入四个人的以后,,还有Plase input a student's No.,name and score出来?
追答
那估计就是你输入的格式不对了
我又试了一次
Plase input a student's No.,name and score:
1 dhdh 222
Plase input a student's No.,name and score:
2 ancd 223
Plase input a student's No.,name and score:
3 dkidj 928
Plase input a student's No.,name and score:
4 jdus 8882
The student who has the highest score is:
4
jdus
8882.000000
请按任意键继续. . .
再试一次
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
haiyongsong
2011-12-10 · 超过17用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:52.4万
展开全部
如果是把学生对象放到数组中,然后要通过函数求出数组中的最高分学生,是不能通过值传递来实现的,就是说给函数传递数组,参数只能是指针,函数不会在栈内逐个拷贝数组元素的,只会传递数组指针,也就是第一个元素的地址,通过读你的程序,大概理解你的意思,写了如下程序:

struct student
{
int num;
char name[20];
float score;
};//定义学生结构体
void print(struct student* stu,int size)
{
for (int i = 0; i < size; ++i)
{
printf("%d \t %s \t %f \n",stu[i].num,stu[i].name,stu[i].score);
}

}//逐个打印数组中的学生对象
student findBestOne(struct student* stu , int size)
{
student tmp = stu[0];
for (int i = 1; i < size ; ++i)
{
if (stu[i].score > tmp.score)
{
tmp = stu[i];
}
}
return tmp;
} //寻找数组中成绩最高的学生,并返回
void printBestone(struct student stu)
{
printf("%s has the highest score and the score is %f ",stu.name,stu.score);
}//输出单个学生姓名,成绩,
int _tmain(int argc, _TCHAR* argv[])
{
student stu[3] = {10,"tom10",55,11,"tom11",60,12,"tom12",65};
print(stu,3);//先输出所有学生信息
student best = findBestOne(stu,3);//寻找最优成绩学生
printBestone(best);//打印最优学生信息
return 0;
}
追问
这、、、、两个警告,,四个错啊!
追答
我用的是vs2005,运行的没问题,结果如下,可能是编译器不同的差异导致,建议你将我_tmain中的内容考到你main中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hczmao
2011-12-10
知道答主
回答量:1
采纳率:0%
帮助的人:1685
展开全部
你的结构体后面多了个分号,至于你说多编译错误,那是因为你没有声明函数,你在main函数开头那里声明一下void pintf(struct student stu[]);
追问
在里边声明,,在外边声明不都是一样的吗!,,,我声明了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无极小屁孩
2011-12-10 · TA获得超过3.1万个赞
知道大有可为答主
回答量:3021
采纳率:66%
帮助的人:1298万
展开全部
我给你发的代码中有一段。找找看吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式