鱼C论坛

 找回密码
 立即注册
查看: 2639|回复: 4

这种问题怎么解决

[复制链接]
发表于 2019-12-22 15:01:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
程序进行到一半出现
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;
        }
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-22 17:38:07 | 显示全部楼层
说清楚什么问题.还有超过40行代码最好加注释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-23 23:20:33 | 显示全部楼层
老铁,debug一下,如果不知道怎么debug 找个入门视频看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-25 14:59:28 | 显示全部楼层
题目是:
           编写一个对n个数据从大到小的排序C函数,再编写一个计算最后得分的C函数,计算方法是:去除一个最高分,去除一个最低分,其余的平均分为参赛选手的最后得分。并在主函数中调用它们对有n个评委评分,m个选手参赛的最后得分,从大到小排序输出。

dehug了就是调试时出现的那一串字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-28 18:32:49 | 显示全部楼层
新人 最重要的 不是代码 问题
是解决 问题的 思路、方法
要解决 问题,首先要的是 解决问题的逻辑和方法
很多新人都误以为是 编程 语法 问题
其实 不管 哪种 编程语言,最终解决 问题的 还是在于人的思维
在 真正 开始编程 前 就要在脑海中有一个完整的 解决问题的逻辑,解决这个问题需要几个步骤,这几个步骤可以细分为几个部分,可以分为几个函数,函数参数是啥,最好是形成 伪代码
真正的大神不是编程 高手,是解决问题的高手
就算面对一种 全新的,没见过的 语言,看过基本语法,即可编程实现功能
编程语言,只是一个工具罢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 05:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表