qq_28901839 2015-06-10 10:40 采纳率: 0%
浏览 1677

C语言 访问位置冲突 冒泡排序

程序运行到冒泡排序法的地方总是会出现访问冲突
#include
#include
#include
#include
#include
#define n 2//学校数目
#define m 2//男子项目数目
#define w 2//女子项目数目
#define null 0

typedef struct
{
int itemnum; //项目编号
int num; //取名次的数目
int range[5]; //名次
int mark[5]; //分数
}item; //定义项目结点的类型

typedef struct
{
int schoolnum; //学校编号
int score; //学校总分
int mscore; //男团体总分
int wscore; //女团体总分
item c[m+w]; //项目数组
}school;

school h[n];

void inputinformation() //输入信息,建立系统
{
int i,j,k,s;
for(i=0;i<n;i++)
{
h[i].score=0;
h[i].mscore=0;
h[i].wscore=0;
} //初始化头结点
for(i=0;i<n;i++)
{
printf("*****学校编号:");
scanf_s("%d",&h[i].schoolnum); //输入头结点信息
for(j=0;j<m+w;j++)
{

printf("*****项目编号:");
scanf_s("%d",&h[i].c[j].itemnum);
printf("*****取前名or前名:");
scanf_s("%d",&h[i].c[j].num);
printf("*****获得几个名次:");
scanf_s("%d",&k); //输入项目信息
for(s=0;s<5;s++)
h[i].c[j].range[s]=0, h[i].c[j].mark[s]=0; //初始化排名和分数
for(s=0;s<k;s++)
{

printf("*****名次:");
scanf_s("%d",&h[i].c[j].range[s]); //输入所获名次信息
if(h[i].c[j].num==3)
switch(h[i].c[j].range[s])
{
case 0: h[i].c[j].mark[s]=0; break;
case 1: h[i].c[j].mark[s]=5; break;
case 2: h[i].c[j].mark[s]=3; break;
case 3: h[i].c[j].mark[s]=2; break;
}
else
switch(h[i].c[j].range[s])
{
case 0: h[i].c[j].mark[s]=0; break;
case 1: h[i].c[j].mark[s]=7; break;
case 2: h[i].c[j].mark[s]=5; break;
case 3: h[i].c[j].mark[s]=3; break;
case 4: h[i].c[j].mark[s]=2; break;
case 5: h[i].c[j].mark[s]=1; break;
}

            h[i].score=h[i].score+h[i].c[j].mark[s];

//按取前三名还是取前五名分别记分
if(j<=m-1)
h[i].mscore=h[i].mscore+h[i].c[j].mark[s];
//是男子项目则记到男子分数里面去
else
h[i].wscore=h[i].wscore+h[i].c[j].mark[s];
//是女子项目则记到女子项目里面去
}
printf("\n");
}
}
}

void output() //输出函数
{
int b;
int remember[5];
int i,j,k;
int a;
do
{
printf("*******************1.按学校编号输出.*******************\n");
printf("*******************2.按学校总分输出.*******************\n");
printf("*******************3.按男团总分输出.*******************\n");
printf("*******************4.按女团总分输出.*******************\n");
printf("\n\n******************* 请选择编号*************************\n\n:");
scanf_s("%d",&b);
switch(b)
{
case 1:
for(i=0;i<n;i++)
{
printf("\n\n*****学校编号:%d\n",h[i].schoolnum);
printf("*****学校总分:%d\n" ,h[i].score);
printf("*****男团总分:%d\n",h[i].mscore);
printf("*****女团总分: %d\n\n\n",h[i].wscore);
} //按编号顺序输出
break;

    case 2:    
        for(i=0;i<n;i++)
            remember[i]=i;

        for(i=0;i<n;i++)
        { 
            for(j=i+1;j<n;j++)
            if(h[remember[i]].score<h[j].score)
                    k=remember[i];

remember[i]=remember[j];
remember[j]=k;

        }              // 用冒泡排序方法,用辅助数组记住头结点下标
        for(i=0;i<n;i++)
        {
             printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);                                           
           printf("*****学校总分:%d\n" ,h[remember[i]].score);
             printf("*****男团总分:%d\n",h[remember[i]].mscore);
             printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore);

//按所记下标顺序输出
} //按学校总分输出
break;

    case 3:      
        for(i=0;i<n;i++)
            remember[i]=i;
        for(i=0;i<n;i++)
        { 
            for(j=i+1;j<n;j++)
            if(h[remember[i]].score<h[j].score)
                    k=remember[i];
        remember[i]=remember[j];
        remember[j]=k;

        }         

        for(i=0;i<n;i++)
        {
              printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);                                           
           printf("*****学校总分:%d\n" ,h[remember[i]].score);
             printf("*****男团总分:%d\n",h[remember[i]].mscore);
             printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore);

        }                                      //按男团总分输出
        break;

   case 4:       
          for(i=0;i<n;i++)
            remember[i]=i;
        for(i=0;i<n;i++)
        { 
            for(j=i+1;j<n;j++)
            if(h[remember[i]].score<h[j].score)
                    k=remember[i];
                   remember[i]=remember[j];
                   remember[j]=k;

        }

       for(i=0;i<n;i++)
       {
            printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);                                           
           printf("*****学校总分:%d\n" ,h[remember[i]].score);
             printf("*****男团总分:%d\n",h[remember[i]].mscore);
             printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore);

       }
       break;                                  //按女团总分输出
    }
    printf("请选择2 继续,0 跳出\n");
    scanf_s("%d",&a);
}while(a==2);                              //循环执行输出语句

}

void refer() //查询函数
{

int a,i,j,k,s;
printf("\n*****1:按学校编号查询\n");
printf("\n*****2:按项目编号查询\n");
printf("\n\n*****请选择查询方式:");                //提供两种查询方式
scanf_s("%d",&a);
switch(a)
{  
 case 1:
    do
    { 
        printf("要查询的学校编号:");
        scanf_s("%d",&i);
        if(i>n)
            printf("错误:这个学校没有参加此次运动会!\n\n\n");
        else
        {
            printf("要查询的项目编号:");
            scanf_s("%d",&j);
            if(j>m+w||j==0)
                printf("此次运动会没有这个项目\n\n\n");

//学校编号超出范围,则输出警告
else
{

printf("这个项目取前%d名,该学校的成绩如下:\n", h[0].c[j-1].num);
for(k=0;k<5;k++)
if(h[i-1].c[j-1].range[k]!=0)
printf("名次:%d\n",h[i-1].c[j-1].range[k]);
//输出要查询学校项目的成绩
}
}
printf("请选择继续, 0 跳出\n");
scanf_s("%d",&s);
printf("\n\n\n");
}while(s==2); //循环执行输出语句
break;

case 2:
    do
    { 
        printf("要查询的项目编号:");
        scanf_s("%d",&s);
        if(s>m+w||s==0)
            printf("此次运动会不包括这个项目.\n\n\n");

//项目编号超出范围则输出警告
else
{
printf("该项目取前%d名,取得名次的学校\n",h[0].c[s-1].num);
for(i=0; i<n;i++)
for(j=0;j<5;j++)
if(h[i].c[s-1].range[j]!=0)
printf("学校编号:%d,名次:%d\n",h[i].schoolnum,
h[i].c[s-1].range[j]);
} //输出该项目取得名次学校的成绩
printf("\n\n\n继续,跳出\n");
scanf_s("%d",&i);
printf("\n\n\n");

    }while(i==2);
    break;

}
}

int main()
{
int i;
printf("======================欢迎使用======================\n");

printf("\n\n*****************运动会分数统计系统********************\n");
printf("\n\n********************1.输入信息*************************\n");
printf("********************2.输出信息*************************\n");
printf("********************3.查询信息*************************\n");
printf("********************4.退出系统*************************\n");
printf("================================================\n\n");
printf("********请选择要实现步骤的编号:\n\n");
scanf_s("%d",&i);
switch(i)
{
case 1:
inputinformation();main();
case 2:
output();main();
case 3:
refer();main();
case 4:
printf("谢谢使用\n");
}
return 0;
}

  • 写回答

5条回答 默认 最新

  • 一路向北-bruce 2015-06-10 10:51
    关注

    注意 没有大括号,在if语句的后边

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)