#include
#include
#define MAX 100 //这个输入成绩个数的最大数目
int input_grade(int *grade);
int insert_grade(int *grade);
void insert_num(int *grade,int num);//按位置插入,num表示你想要把成绩插在第几个位置
void sort_grade(int *grade);
void print_grade(int *grade);
int search_less_grade(int *grade,int num);
int search_grade(int *grade,int num);//根据你输入的值进行查找,得到其所在名次
int static_grade(int *grade,int low,int upper);
void delete_grade(int *grade);
int static_grade(int *grade);//对结果进行统计 ,根据你输入的上下限进行统计
int N=0;
int new_insert;
int main()
{
int grade[MAX];
input_grade(grade);
print_grade(grade);
sort_grade(grade);
insert_grade(grade);
print_grade(grade);
delete_grade(grade);
print_grade(grade);
static_grade(grade);
system("pause");
return 0;
}
int input_grade(int *grade)
{
int i;
printf("Please input the number of the student:");
scanf("%d",&N);
for(i=0;i
}
return 1;
}
int search_less_grade(int *grade,int num)
{
int i;
for(i=0;i
break;
}
return i;
}
int search_grade(int *grade,int num)
{
int i=search_less_grade(grade,num);
if(grade[i-1]==num){
return i-1;
}
else{
printf("can not find the grade!\n");
return -1;
}
}
int insert_grade(int *grade)
{
int i,j;
printf("please input the grade:");
scanf("%d",&new_insert);
i=search_less_grade(grade,new_insert);
insert_num(grade,i);
return 1;
}
void insert_num(int *grade,int num)
{
int i,j;
i=num;
for(j=N;j>i;j--){
*(grade+j)=*(grade+j-1);
}
*(grade+i)=new_insert;
N++;
}
int comp(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
void sort_grade(int *grade)
{
qsort(grade,N,sizeof(int),comp);
}
void print_grade(int *grade)
{
int i;
for(i=0;i
}
printf("\n");
return;
}
void delete_grade(int *grade)
{
int num;
int i;
printf("please input the grade you want to delete:");
scanf("%d",&num);
i=search_grade(grade,num);
if(i==-1){
printf("Can not find the grade!\n");
return;
}
printf("i=%d\n",i);
for(;i
N--;
return;
}
int static_grade(int *grade)
{
int i,j,k;
int low,upper;
printf("please inpput the limit low and upper:");
scanf("%d%d",&low,&upper);
sort_grade(grade);
i= search_less_grade(grade,low);
if(grade[i-1]==low) i--;
j= search_less_grade(grade,upper);
//if(grade[j-1]==upper) j--;
printf("There are %d students between %d and %d!\n",j-i,low,upper);
for (k=i;k
}
}
这个是我早上写的,应该能满足你的功能需求。
哥这有个连表的,功能齐全,昨晚才修正完毕。但你又不稀罕,数组的其实也一样原理。我书上就有,建议你一边参考书一边做。不懂就参考,慢慢的程序就堆出来了,老是复制别人的代码不是长久之计。硬着头皮去做,开始可能就是晕,慢慢来,做完第一个百行以上的程序,第二个就容易了。不要说自己不会,开始我也不会,画出程序基本结构,然后不懂的就参考书参考代码。弄出一个这样的程序可能你会花费几天甚至更多,但到你真的弄出了,基本语法你就基本学会。接着你会发现自己的技术已经上升到另一高度。我也在自学,但我很少求代码,而经常为别人解题(一次看题我还不知道树是啥东西,但我还是解了)或者做代码。一句话自己硬着头皮去做,挑战极限。希望这番话对你有帮助。