#include<stdio.h>#include<alloc.h>#include<string.h>#define N 10 typedefstruct ss
{char num[10];int s;} STU;
STU *fun(STU a[],int m){ STU b[N],*t;int i,j,k;
t=(STU *)calloc(sizeof(STU),m)for(i=0; i<N; i++) b[i]=a[i];for(k=0; k<m; k++){for(i=j=0; i<N; i++)if(b[i].s > b[j].s) j=i;t(k)=b(j);
b[j].s=0;}return t;}outresult(STU a[], FILE *pf){int i;for(i=0; i<N; i++)fprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s);fprintf(pf,"\n\n");}main(){ STU a[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}};
STU *pOrder;int i, m;printf("***** The Original data *****\n");outresult(a,stdout);printf("\nGive the number of the students who have better score: ");scanf("%d",&m);while( m>10){printf("\nGive the number of the students who have better score: ");scanf("%d",&m);}
pOrder=fun(a,m);printf("***** THE RESULT *****\n");printf("The top :\n");for(i=0; i<m; i++)printf(" %s %d\n",pOrder[i].num , pOrder[i].s);free(pOrder);}
#include<stdio.h>#define N 80 intfun(int a[],int n){}main(){int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;printf("The original data :\n");for(i=0; i<n; i++)printf("%3d",a[i]);
n=fun(a,n);printf("\n\nThe data after deleted :\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");NONO();}
解題思路:
本題是刪除已排序過(guò)數(shù)組中的相同數(shù)。
1. 取出數(shù)組中的第1個(gè)數(shù)存放在臨時(shí)變量k中,再利用for循環(huán)來(lái)依次判斷所有的數(shù)。
2. 如果取出的數(shù)和k相比,如果不相同,則仍存放在原數(shù)組中,其中存放的位置由j來(lái)控制, 接著把這個(gè)數(shù)重新存入k。如果相同,則取下一數(shù)。
參考答案:
intfun(int a[],int n){int i, j =1, k = a[0];for(i =1; i < n ; i++)if(k != a[i]){
a[j++]=a[i];
k = a[i];}
a[j]=0;return j ;}