找出链表中年龄最大的学生

#include
#include
#include
struct student
{
int number;
char name[30];
char sex[3];
int age;
student *next;
};

student* fileInput(char* fileName);
void traversal(student* phead);
int main()
{
student *phead;
char *fileName;
strcpy(fileName,"C:\Users\88450\桌面\周四\students.dat");
phead=fileInput(fileName);
traversal(phead);

return 0;

}

student* fileInput(char* fileName)
{
student s,*pnew,*phead,*ptail;
FILE fp;
fp=fopen("students.dat","rb");
int i=0;
while(fread(&s,sizeof(student),1,fp)!=0)

{
pnew=(student
)malloc(sizeof(student));
pnew->number=s.number;
strcpy(pnew->name,s.name);
strcpy(pnew->sex,s.sex);
pnew->age=s.age;
pnew->next=NULL;

if(i==0)
  {
    phead=pnew;
    ptail=pnew;
  }
else
  {
    ptail->next=pnew;
    ptail=ptail->next; 
  }
i++;
}   
fclose(fp);
return phead;

}

void traversal(student* phead)
{
student *p;
p=phead;
while(p!=NULL)

{
printf ("学号:%d 姓名:%s 性别:%s 年龄:%d\n",p->number,p->name,p->sex,p->age);
p=p->next;

}

}
如何编一个自定义函数,查找出年龄最大的学生(要可实现可找出多个最大年龄的学生),谢谢各位大佬了!

student* findoldest(student* phead)
{
int maxage = 0;
student *pnew,*poldest,*ptail,*p;
p=phead;
while(p!=NULL)
{
if (p->age >= maxage) {
pnew=(student)malloc(sizeof(student));
pnew->number=p->number;
strcpy(pnew->name,p->name);
strcpy(pnew->sex,p->sex);
pnew->age=p->age;
pnew->next=NULL;
if (p->age > maxage) {
if (poldest != NULL) {

            }
    poldest = pnew;
    ptail = pnew;
            maxage = p->age;
  } else {
    ptail->next=pnew;
    ptail=ptail->next; 
  }
}
p=p->next;

}
return poldest;
}

找出年龄最大的学生然后输出年龄和他相同的学生

从你给的代码看不出怎么找到最大年龄的学生的,并没有看到比较语句啊

线性表中由头至尾依次遍历,设置max变量记录学生中最大的年龄,这是第一次遍历。第二次,同样遍历,比较年龄,如果和max值相等,就可以输出相关信息了。

线性表中由头至尾依次遍历,设置max变量记录学生中最大的年龄,这是第一次遍历。第二次,同样遍历,比较年龄,如果和max值相等,就可以输出相关信息了。

比较年龄,如果和max值相等,就可以输出相关信息了

找出年龄最大的学生然后输出年龄和他相同的学生

设置一个临时比较年龄的变量tmpmax = 0;一个临时存放学生信息的对象数组 vector tmpstu;一次遍历得出结果。
1、遇到年龄大于tmpmax的,先清空tmpstu数组,然后将当前学生信息加入
2、遇到年龄等于tmpmax的,将tmpmax更新为当前学生年龄,并添加当前学生信息进入tmpstu数组,
3、遇到年龄小于tmpmax的,不作改变
遍历完所有学生信息后可以得到年龄最大的学生信息的数组tmpstu即所求。

用循环结构来做,找出最大即可

你自己贴出来的程序到处都是错误!!!

全部问答 悬赏 待回答 已解决 标签 专家问答
我要提问
问答规则说明
2 summeraaaaaaaa summeraaaaaaaa 于 2017.12.07 19:20 提问
找出链表中年龄最大的学生 5C
链表
#include
#include
#include
struct student
{
int number;
char name[30];
char sex[3];
int age;
student next;
};
student
fileInput(char* fileName);
void traversal(student* phead);
int main()
{
student phead;
char *fileName;
strcpy(fileName,"C:\Users\88450\桌面\周四\students.dat");
phead=fileInput(fileName);
traversal(phead);
return 0;
}
student
fileInput(char* fileName)
{
student s,*pnew,*phead,*ptail;
FILE fp;
fp=fopen("students.dat","rb");
int i=0;
while(fread(&s,sizeof(student),1,fp)!=0)

{
pnew=(student)malloc(sizeof(student));
pnew->number=s.number;
strcpy(pnew->name,s.name);
strcpy(pnew->sex,s.sex);
pnew->age=s.age;
pnew->next=NULL;
if(i==0)
{
phead=pnew;
ptail=pnew;
}
else
{
ptail->next=pnew;
ptail=ptail->next;
}
i++;
}

fclose(fp);
return phead;
}
void traversal(student* phead)
{
student *p;
p=phead;
while(p!=NULL)

{
printf ("学号:%d 姓名:%s 性别:%s 年龄:%d\n",p->number,p->name,p->sex,p->age);
p=p->next;

}
}
如何编一个自定义函数,查找出年龄最大的学生(要可实现可找出多个最大年龄的学生),谢谢各位大佬了!
同问0 |浏览85| 收藏0 |分享
14个回答
按赞数排序
GongJZhou GongJZhou 2017.12.07 20:00
找出年龄最大的学生然后输出年龄和他相同的学生

 0  1 评论 4 |分享

回复 GongJZhou
评论 qq_41310673 qq_41310673 5123工具箱东方既白 比偶 大约一小时之前 回复 qq_41310673 qq_41310673 找出年龄最大的学生然后输出年龄和他相同的学生就对了 大约一小时之前 回复 qq_41310838 newblue_nn 定义一个 max 变量 把最大的赋值给他,然后定义一个数组,把和他相等的存进数组,最后打印数组,就好了 大约一小时之前 回复 summeraaaaaaaa summeraaaaaaaa 能有具体的代码解释吗?就这么说我不懂 大约 3 小时之前 回复
ZY_Looking ZY_Looking 2017.12.07 20:29
线性表中由头至尾依次遍历,设置max变量记录学生中最大的年龄,这是第一次遍历。第二次,同样遍历,比较年龄,如果和max值相等,就可以输出相关信息了。

 0  1 评论 0 |分享
jljooipu9u09 jymmmd 2017.12.07 21:29
设置一个临时比较年龄的变量tmpmax = 0;一个临时存放学生信息的对象数组 vector tmpstu;一次遍历得出结果。
1、遇到年龄大于tmpmax的,先清空tmpstu数组,然后将当前学生信息加入
2、遇到年龄等于tmpmax的,将tmpmax更新为当前学生年龄,并添加当前学生信息进入tmpstu数组,
3、遇到年龄小于tmpmax的,不作改变
遍历完所有学生信息后可以得到年龄最大的学生信息的数组tmpstu即所求。

 0  1 评论 0 |分享
qq_41310053 qq_41310053 2017.12.07 20:11
找出年龄最大的学生然后输出年龄和他相同的学生

 0  0 评论 1 |分享

回复 qq_41310053
评论 summeraaaaaaaa summeraaaaaaaa 你们能详细点吗 萌新小白 大约 2 小时之前 回复
zw123wu zw123wu 2017.12.07 20:23
student* findoldest(student* phead)
{
int maxage = 0;
student *pnew,*poldest,*ptail,*p;
p=phead;
while(p!=NULL)
{
if (p->age >= maxage) {
pnew=(student)malloc(sizeof(student));
pnew->number=p->number;
strcpy(pnew->name,p->name);
strcpy(pnew->sex,p->sex);
pnew->age=p->age;
pnew->next=NULL;
if (p->age > maxage) {
if (poldest != NULL) {

        }
poldest = pnew;
ptail = pnew;
        maxage = p->age;

} else {
ptail->next=pnew;
ptail=ptail->next;
}
}
p=p->next;
}
return poldest;
}

 0  0 评论 0 |分享
qq_34432960 暖风_lin 2017.12.07 20:24
从你给的代码看不出怎么找到最大年龄的学生的,并没有看到比较语句啊

 0  0 评论 0 |分享
qq_41310784 qq_41310784 2017.12.07 21:13
线性表中由头至尾依次遍历,设置max变量记录学生中最大的年龄,这是第一次遍历。第二次,同样遍历,比较年龄,如果和max值相等,就可以输出相关信息了。

 0  0 评论 0 |分享
qq_41310658 qq_41310658 2017.12.07 21:18
比较年龄,如果和max值相等,就可以输出相关信息了

 0  0 评论 0 |分享
qq_23606855 qq_23606855 2017.12.07 21:18
找出年龄最大的学生然后输出年龄和他相同的学生

 0  0 评论 0 |分享
qq_40090022 qq_40090022 2017.12.07 21:18
if.....erse语句

定义一个max值,赋初值为0,定义一个ans数组,定义一个num=0,作为ans的长度,然后遍历时,更新max值,如果和当前max相等,则将其编号加入ans数组中,即ans[num++]=i;如果,比当前max值大,则将max更新,且num=0,ans[num++]=i;,最后将ans数组输出。

给年龄复值tem 再作比较,if(tem>=max)值 就输出相关信息了

设置一个临时比较年龄的变量tmpmax = 0;一个临时存放学生信息的对象数组 vector tmpstu;一次遍历得出结果。
1、遇到年龄大于tmpmax的,先清空tmpstu数组,然后将当前学生信息加入
2、遇到年龄等于tmpmax的,将tmpmax更新为当前学生年龄,并添加当前学生信息进入tmpstu数组,
3、遇到年龄小于tmpmax的,不作改变
遍历完所有学生信息后可以得到年龄最大的学生信息的数组tmpstu即所求。

这个楼上的兄弟解释的很清楚了,你按这个来没错。 非要别人贴出代码就没意思了,思路都给你了 贴出代码后你就懂了么