孙泽恩 发表于 2019-12-22 15:01:35

这种问题怎么解决

程序进行到一半出现
Unhandled exception in 001.exe:0xC0000005:Access Violation.


#include <stdio.h>
#include <malloc.h>

#define LEN sizeof(struct student)//student结构大小
#define STU sizeof(struct teacher)//teacher结构大小

struct student *stu();//创建链表
float average_number(int *p);//求平均数


struct student
{
        float score;
        struct student *next;
};

struct teacher
{
        float average;
        struct teacher *next;
};

int n,m;//   n为有多少老师打分,m为有多少学生参加考试

struct student *stu()//构建链表
{
        struct student *head = NULL;
        struct student *p1,*p2;
        float score;
       
        n = 1;
        do
        {
                printf("\n第%d位老师的分数:",n);
                scanf("%f",&score);
                if(score != 0)                         //输入0时结束输入
                {
                        p1 = (struct student *)malloc(LEN);
                        p1->score = score;
                        p1->next = NULL;
                        if(head == NULL)
                        {
                                head = p1;
                                p2 = p1;
                        }
                        else
                        {
                                p2->next = p1;
                                p2 = p1;
                        }
                        n++;
                }
                else
                {
                        break;
                }
        }while(1);
        return head;
}

float average_number(struct student *head)
{
        struct student *p1,*p2,*number;
        int i;
        float t,sum,average;

        p1 = number = head;
        p2 = head->next;
        for(i = 1;i < (n-1);i++)
        {
                while(p1->next != NULL)
                {
                        if(p1->score < p2->score)
                        {
                                t = p1->score;
                                p1->score = p2->score;
                                p2->score = t;
                                p1 = p2;
                                p2 = p2->next;
                        }
                        else
                        {
                                p2 = p1;
                                p2 = p2->next;
                        }
                }
        }
        sum = 0;
        for(i = 1;i <= (n-3);i++)
        {
                number = number->next;
                sum = sum + number->score;
                number = number->next;
        }
        average = sum/(n-3);
        return average;
}

void main()
{
        struct teacher *p1,*p2,*head = NULL;
        int i;
        float t,number;

        do
        {
                m = 1;
                printf("第%d位同学的得分:",m);
                stu();

                p1 = (struct teacher *)malloc(STU);
                number = average_number(head);
                p1->average = number;
                p1->next = NULL;
                if(head == NULL)
                {
                        head = p1;
                        p2 = p1;
                }
                else
                {
                        p2->next = p1;
                        p2 = p1;
                }

                m++;

        }while(getchar() != '!');

        p1 = head;
        p2 = head->next;
        for(i = 1;i < (m-1);i++)
        {
                while(p1->next != NULL)
                {
                        if(p1->average < p2->average)
                        {
                                t = p1->average;
                                p1->average = p2->average;
                                p2->average = t;
                                p2 = p1;
                                p2 = p2->next;
                        }
                        else
                        {
                                p2 = p1;
                                p2 = p2->next;
                        }
                }
        }
       
        p1 = head;
        for(i = 1;i < (m-1);i++)
        {
                printf("%s",p1->average);
                p1 = p1->next;
        }
}

bin554385863 发表于 2019-12-22 17:38:07

说清楚什么问题.还有超过40行代码最好加注释

编程难 发表于 2019-12-23 23:20:33

老铁,debug一下,如果不知道怎么debug 找个入门视频看看。

孙泽恩 发表于 2019-12-25 14:59:28

题目是:
         编写一个对n个数据从大到小的排序C函数,再编写一个计算最后得分的C函数,计算方法是:去除一个最高分,去除一个最低分,其余的平均分为参赛选手的最后得分。并在主函数中调用它们对有n个评委评分,m个选手参赛的最后得分,从大到小排序输出。

dehug了就是调试时出现的那一串字符

Mondayisgood 发表于 2019-12-28 18:32:49

新人 最重要的 不是代码 问题
是解决 问题的 思路、方法
要解决 问题,首先要的是 解决问题的逻辑和方法
很多新人都误以为是 编程 语法 问题
其实 不管 哪种 编程语言,最终解决 问题的 还是在于人的思维
在 真正 开始编程 前 就要在脑海中有一个完整的 解决问题的逻辑,解决这个问题需要几个步骤,这几个步骤可以细分为几个部分,可以分为几个函数,函数参数是啥,最好是形成 伪代码
真正的大神不是编程 高手,是解决问题的高手
就算面对一种 全新的,没见过的 语言,看过基本语法,即可编程实现功能
编程语言,只是一个工具罢了
页: [1]
查看完整版本: 这种问题怎么解决