求助 c语言编程

来源:百度知道 编辑:UC知道 时间:2024/06/01 03:35:42
这个程序总是有个错 请高人指点
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Max_length 3
typedef struct
{
int xh; /*学号*/
char name[35]; /*姓名*/
int c1,c2,c3; /*三门课程成绩*/
} Element;
/*删除第i个学生的记录算法*/
int Delete_list(int i,Element s[ ] ,int *n_pointer)
{
int j,n;
n=*n_pointer;
if((i<1) ||(i>n))
return(0);
for (j=i+1;j<=n;j++)
{/*移动*/
s[j-1].xh=s[j].xh;
// strcopy(s[j-1].name,s[j].name);
s[j-1].name,s[j].name;
s[j-1].c1=s[j].c1;
s[j-1].c2=s[j].c2;
s[j-1].c3=s[j].c3;
}
n--;
*n_pointer=n;
return (1);
}
/*查找学号为x的算法*/
int Locate_list (Element s[ ], int n, int x)
{
int i;
for(i=1;i<=n;i++)
if (s[i].xh==x)
return (i);

return (0);
}
/*修改学号为i的学生的

错误主要是因为数组下标溢出,另外,还有一个执行上的结果错误,两个错误分别如下所示:

int Insert_list (int i,Element s[ ],int *n_pointer)
{
/*n_pointe存放已输入的最大记录数*/
int j,n;
n=*n_pointer;
if((n== Max_length) || (i<1) || (i>n+1)) return (0);
for(j=n;j>=1;j--) s[j+1]=s[j]; /*移动*/ /*看不明白为什么要移动,如果做了这一步,那么事实上就导致输入一组数据时,用前一组数据覆盖了后一组数据,所以,如果不去掉这一行,将会导致输出结果有错误,当然,编译系统是不会报错的*/
printf("Input Data for inserting (XH Name C1 C2 C3) \n");
scanf("%d%s%d%d%d",&s[i].xh,&s[i].name,&s[i].c1,&s[i].c2,&s[i].c3);
n++;
*n_pointer=n;
return (1);
}

void main ( )
{
int i, records=0;
Element s[Max_length]; /*此处设数组时用Max_length是导致数组下标溢出的原因,因为你的其他地方都是从1开始计数,而不是从0开始,所以光用Max_length是不足够的,必须用s[Max_length+1]才行,这样改了之后就不会溢出,也不会报错了。但是还是有错误,详见上面的插入函数。*/
/*创建线性表*/
for (i=1;i<=Max_length;i++)
Insert_list ( i, s, &records);/*创建线性表*/