标题:怎样用链表输出数组的内容?
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
提醒一下:不要试图一揽子做,讲究效率,会想到只遍历一次把所有功夫做完,但那样只会令你写出意大利面条代码,给以后的维护和扩展带来麻烦,所以不要那样做,老老实实逐个功能写,在这个过程中,尽量把可重复使用的代码提炼成函数,不过这是后话,目前先逐个完成功能再说,写多了,自然看得出哪些代码是重复的、以及如何提炼成函数。

授人以渔,不授人以鱼。
2014-12-12 23:39
mosquiyan
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2014-12-12
得分:0 
回复 11楼 TonyDeng
#include "stdio.h"
#include "stdlib.h"
#define STUDENT struct student
#define LEN sizeof(STUDENT)
#define N 3
STUDENT
{
    int num;
    char name;
    float score[3];
    STUDENT *next;
};
STUDENT *create(int n)
{
    STUDENT *head,*last,*p;
    int i,j;
    head=last=NULL;
    for(i=0;i<n;i++)
    {
        p=(STUDENT *)malloc(LEN);
        printf("\nplease input%d student's number,name:",i+1);
        scanf("%d,%s",&p->num,&p->name);
        printf("\nplease input score1,score2,score3:");
        for(j=0;j<3;j++)
        scanf("%f",&p->score[j]);
        
        p->next=NULL;
        if(i==0)
          head=last=p;
        else
        {
            last->next=p;
            last=p;
        }
    }
    return head;     
}

float average(STUDENT *head)
{
    STUDENT *p;
    float sum[N],avg[N];
    int i,j;
    p=head;
    while(p!=NULL)
    {
        for(i=0;i<N;i++)
        {
            for(j=0;j<3;j++)
            {
                 sum[i]+=p->score[j];
                }
        avg[i]=sum[i]/3;
            }
    p=p->next;   
}

void output(STUDENT *head)
{
    STUDENT *p;
    int i;
    float avg[N];
    p=head;
    while(p!=NULL)
    {
        printf("number name score1 score2 score3 average");
        printf("%d %-20s",p->num,p->name);
        for(i=0;i<3;i++)
        {
            printf("%.2f",p->score[i]);
        }
        avg[i]=average(head);
        printf("%.2f",avg[i]);
        p=p->next;
    }
}

main()
{
    STUDENT *head;
    head=create(N);
    output(head);
}

修改了一下,average函数那里不知道哪里出错了,显示in function。而output函数那里说要以表格的形式输出,可是我不知道怎么把一个数组里面的内容输出来呢
2014-12-13 00:15
mosquiyan
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2014-12-12
得分:0 
最近写作业好像都养成习惯了,就是打一个程序,自己总是没有办法想出那些算法出来,然后又急着要交,就去问同学或者上网查,虽然后来弄懂了,可是感觉自己就是没法独立思考出一个程序的思路
2014-12-13 00:19
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:0 
刚学完链表 给楼主个答案了...
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define N 5

struct student {
    int num;
    char name[20];
    float score[3];
    struct student *next;
};
float avg[N] = {0.0};

float *average(struct student *p) {
    int i = 0;

    while(p != NULL) {
        avg[i] = (p->score[0] + p->score[1] + p->score[2]) / 3.0;
        p = p->next;
        i++;
    }

    return (avg);
}

struct student *create(int n) {
    struct student *head, *last, *p;
    int i;
    head = last = p = NULL;
    printf("Input student num name score1 score2 score3:\n");
    p = (struct student *)malloc(sizeof(struct student));

    if(p == NULL) {
        printf("malloc error!\n");
        exit(1);
    }

    p->next = head;
    head = p;
    scanf("%d%s%f%f%f", &p->num, p->name,
          &p->score[0], &p->score[1], &p->score[2]);

    for(i = 1; i < n; i++) {
        last = p;

        while(last->next != NULL) {
            p->next = last;
        }

        p = (struct student *)malloc(sizeof(struct student));
        last->next = p;
        p->next = NULL;
        scanf("%d%s%f%f%f", &p->num, p->name,
              &p->score[0], &p->score[1], &p->score[2]);
    }

    return (head);
}

void output(struct student * p) {
    int i = 0;
    average(p);
    printf("num\tname\tscore\t\t\tavg\n");

    while(p != NULL) {
        printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
               p->num, p->name,
               p->score[0], p->score[1], p->score[2],
               avg[i]);
        p = p->next;
        i++;
    }
}

int main(void) {
    struct student *stu;
    stu = create(N);
    output(stu);
    return 0;
}


Only the Code Tells the Truth             K.I.S.S
2014-12-13 03:33
mosquiyan
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2014-12-12
得分:0 
可以给我说说我的存在问题吗?
2014-12-13 10:13
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:0 
回复 15楼 mosquiyan
我这刚学完链表几个小时的人是没法子给你说透的
多看书 多写几遍 多调试找找错 把自己的代码跟别人的对比看看

Only the Code Tells the Truth             K.I.S.S
2014-12-13 10:27
mosquiyan
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2014-12-12
得分:0 
我在做的时候就以为要用循环才可以利用和输出数组的内容,所以就搞到思路很乱
2014-12-13 10:35
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:0 
成员才3个
建个数组显然有点多此一举
如果更多学科的成绩 不建数组也不好
从通用的角度来说 建数组未尝不可
我是偷懒的

Only the Code Tells the Truth             K.I.S.S
2014-12-13 11:14



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




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

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