关于C语言程序中隐秘的异常

关于C语言程序中隐秘的错误!
一个错误程序
# define N 51
# define H 123
# include<stdio.h>
  void main()
{  
int sum(int b[],int n);
int a[N],b[N],c[N],e[N],i,j,m,h,k,l,p,s,n1,n2,count;
i=1;
l=1;
count=0;
while(1)
{  
printf("输入退出密码:");
if(scanf("%d",&k)==H)
{  
printf("退出!");
break;
}
else
{  
printf("不退出继续!\n");
printf("输入学号:\n");
for(j=1;j<N-1||j==N-1;j++)
{  
scanf("%d",&a[j]);
}
s=sum(a,N-1);
if(s==1)
{  
printf("输入学号重复有误!\n");
break;
}
printf("显示学生学号:\n");
for(j=1;j<N-1||j==N-1;j++)
printf("学号%d)是%d",j,a[j]);
printf("\n");
printf("输入学生成绩:\n");
for(j=1;j<N-1||j==N-1;j++)
{  
scanf("%d",&b[j]);
}
printf("显示学生成绩:\n");
for(j=1;j<N-1||j==N-1;j++)
printf("第%d个成绩是%d",j,b[j]);
for(m=1;m<N-1||m==N-1;m++)
{  
if(b[m]>80||b[m]==80)
{  
c[i++]=b[m];
e[l++]=a[m];
count++;
}
}
if(count==0)
printf("输入成绩都没有达到80!\n");
else
{  
for(h=1;h<count||h==count;h++)
printf("学号是%d学生成绩是%d",e[h],c[h]);
}
printf("\n");
printf("原学号输入:");
scanf("%d",&p);
for(j=1;j<N-1||j==N-1;j++)
{  
if(a[j]==p)
printf("成绩是%d",b[j]);
}
n1=b[j];
switch(n1/10)
{  
case 10: printf("成绩等级是A");break;
case 9: printf("成绩等级是B");break;
case 8: printf("成绩等级是C");break;
case 7: printf("成绩等级是D");break;
case 6: printf("成绩等级是E");break;
case 5: printf("成绩等级是F");break;
case 4: printf("成绩等级是G");break;
case 3: printf("成绩等级是H");break;
case 2: printf("成绩等级是I");break;
case 1: printf("成绩等级是J");break;
case 0: printf("成绩等级是K");break;
}
  printf("\n");
printf("成绩大于等于80的学生的学号输入:");
scanf("%d",&p);
for(j=1;j<l;j++)
{  
if(e[j]==p)
  printf("成绩是%d",c[j]);
}
  n2=c[j];
  switch(n2/10)
{  
case 10: printf("成绩等级是A");break;
case 9: printf("成绩等级是B");break;
case 8: printf("成绩等级是C");break;
}
}
}
int sum(int b[],int n)
{  
int i,j,k,s;
s=0;
for(i=1;i<n;i++)
{  
k=i;
for(j=i+1;j<n||j==n;j++)
{  
if(b[j]==b[k])
{  
s++;
if(s==1)