| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 421 人关注过本帖
标题:关于链表建立的问题,求高手。。
只看楼主 加入收藏
F_Andriy7
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2011-11-1
结帖率:75%
收藏
已结贴  问题点数:32 回复次数:4 
关于链表建立的问题,求高手。。
N名学生的成绩在主函数中放入一个带头节点(头节点包括学号、成绩、姓名和下一个节点的指针)的链表结构中,创建节点时可以直接指定节点成员数值。h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。主函数中调用该函数测试函数功能。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define NULL 0
double fun(struct st a,struct st b,struct st c);
struct st
{
    long num;
    double gra;
    char n[20];
    struct st *next;
};
int main()
{
    struct st a,b,c, *head,*p;
    double i;
    //第1个学生
    printf("please input No.1 student's name:\n");
    gets(a.n);
    printf("please input No.1 student's number:\n");
    scanf("%ld",&a.num);
    printf("please input No.1 student's grade:\n");
    scanf("%f",&a.gra);
    //第2个学生
    printf("please input No.2 student's name:\n");
    gets(b.n);
    printf("please input No.2 student's number:\n");
    scanf("%ld",&b.num);
    printf("please input No.2 student's grade:\n");
    scanf("%f",&b.gra);
    //第3个学生
    printf("please input No.3 student's name:\n");
    gets(c.n);
    printf("please input No.3 student's number:\n");
    scanf("%ld",&c.num);
    printf("please input No.3 student's grade:\n");
    scanf("%f",&c.gra);
    head=&a;
    a.next=&b;
    b.next=&c;
    c.next=NULL;
    p=head;
    i=fun(a,b,c);
    printf("the highest score is %ld",i);
    return 0;
}
double fun(struct st a,struct st b,struct st c)
{
    double m;
    if(a.gra>=b.gra)
        m=a.gra;
    else m=b.gra;
    if(m<c.gra)
        m=c.gra;
    return m;
}

运行后自动跳过了输入学生2和学生3的名字的过程。。。求解啊。。
搜索更多相关主题的帖子: 函数 测试 color 
2012-03-08 16:13
icysky
Rank: 5Rank: 5
来 自:心灵世界
等 级:职业侠客
威 望:1
帖 子:172
专家分:399
注 册:2011-5-17
收藏
得分:8 
程序代码:
#include<stdio.h>
#include<stdlib.h>
struct st
{
    long num;
    double gra;
    char n[20];
    struct st *next;
};
int main()
{
    double fun(struct st a,struct st b,struct st c);
    struct st a,b,c, *head,*p;
    double i;
    //第1个学生
    printf("please input No.1 student's name:\n");
    gets(a.n);
    printf("please input No.1 student's number:\n");
    scanf("%ld",&a.num);
    printf("please input No.1 student's grade:\n");
    scanf("%lf",&a.gra);
    //第2个学生 


    fflush(stdin); //windows
    setbuf(stdin,NULL); //linux



    printf("please input No.2 student's name:\n");
    gets(b.n);
    printf("please input No.2 student's number:\n");
    scanf("%ld",&b.num);
    printf("please input No.2 student's grade:\n");
    scanf("%lf",&b.gra);
    //第3个学生 



    fflush(stdin);
    setbuf(stdin,NULL); 




    printf("please input No.3 student's name:\n");
    gets(c.n);
    printf("please input No.3 student's number:\n");
    scanf("%ld",&c.num);
    printf("please input No.3 student's grade:\n");
    scanf("%lf",&c.gra);
    head=&a;
    a.next=&b;
    b.next=&c;
    c.next=NULL;
    p=head;
    i=fun(a,b,c);
    printf("the highest score is %lf",i);
    return 0;
}
double fun(struct st a,struct st b,struct st c)
{
    double m;
    if(a.gra>=b.gra)
        m=a.gra;
    else m=b.gra;
    if(m<c.gra)
        m=c.gra;
    return m;
}


[ 本帖最后由 icysky 于 2012-3-8 16:26 编辑 ]

不管怎么走、总有一个终点...
2012-03-08 16:25
davidlv419
Rank: 2
等 级:论坛游民
帖 子:24
专家分:69
注 册:2009-4-30
收藏
得分:8 
回复 楼主 F_Andriy7
几处错误
1.函数fun()的声明应该放到机构体st定义之后。

2.gets()函数使用存在不确定风险,建议用fgets()或scanf()函数替代。

3.获取学生成绩语句
 scanf("%f",&b.gra);
应改为
 scanf("%lf",&b.gra);

一点建议
1.既然已经创建了链表就要充分利用,
所以建议你把求最高分函数用链表实现。
例如:
double max_score(struct st list);

2.获取学生和成绩信息用循环实现。

2012-03-08 17:33
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:8 
回复 楼主 F_Andriy7
gets()接受了scanf产生的回车字符。
2012-03-08 19:10
姚杰
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:169
专家分:477
注 册:2010-6-1
收藏
得分:8 
建议你用一个循环语句,要几个学生就输出几个学生的。。
scanf("%d",&len);//len表示学生个数
for(i=0;i<len;i++);
{
}

持之以恒,别留遗憾,加油
2012-03-12 12:26
快速回复:关于链表建立的问题,求高手。。
数据加载中...
 
   



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

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