15-1.c 编程题#include<stdio.h>typedef struct s{ long id;char name[10];char sex[2];}PS;int delete(PS *p1, int m, PS *p2,int n) ;int merge(PS *p1,int m, PS *p2 ,int n) ;void sort(PS *p,int n);void display(PS *p,int n);main(){ FILE *fp=fopen("d:\\person.txt","w");PS a[5]={{101, "tom","m"},{103,"mary","f"}, {104,"mark","m"}, {105,"julia","f"}, {106, "sara","f"}},b[10]={{102, "mark","m"}, {104,"mark","m"}};int anum=5,bnum=2,i;anum=delete(a,anum,b,bnum);puts("\n a array:"); display(a,anum);bnum=merge(b,bnum,a,anum);puts("\n b array:"); display(b,bnum);sort(b,bnum);puts("\n b: array"); display(b,bnum);for(i=0;i<bnum;i++)fprintf(fp,"\n%-8ld%-10s%3s",b[i].id,b[i].name,b[i].sex);fclose(fp);}int delete(PS *p1, int m, PS *p2,int n){ int i,j,k;for(i=0;i<m;i++)for(j=0;j<n;j++)if(p1[i].id==p2[j].id){ for(k=i;k<m-1;k++)p1[k]=p1[k+1];m--;}return m;}int merge(PS *p1,int m, PS *p2 ,int n){ int i,j,k;for(i=0;i<n;i++){ for(j=0;j<m;j++)if(p1[j].id>p2[i].id)break;for(k=m;k>=j;k--)p1[k]=p1[k-1];p1[j]=p2[i];m++;}return m;}void sort(PS *p,int n){ PS tmp;int i,j,k;for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(strcmp(p[j].sex,p[j+1].sex)>0||strcmp(p[j].sex,p[j+1].sex)==0 &&strcmp(p[j].name,p[j+1].name)>0)tmp=p[j],p[j]=p[j+1],p[j+1]=tmp;}void display(PS *p,int n){ int i;printf("ID NAME SEX");for(i=0;i<n;i++)printf("\n%-8ld%-10s%3s",p[i].id,p[i].name,p[i].sex); getch();}15-2.c#include<stdio.h>typedef struct node{ long num;char name[10];struct node *next;}NODE;NODE *create(FILE *fp){ NODE *p1,*p2, *head=NULL;while(!feof(fp)){ p1=(NODE *)malloc(sizeof(NODE));fscanf(fp,"%ld%s",&p1->num,p1->name);if(head==NULL){ head=p1; p2=p1;}else{ p2->next=p1;p2=p1; }}p2->next=NULL;fclose(fp);return head;}void display( NODE *head){if(head==NULL)printf(" The list is empty!");else{ while(head!=NULL){ printf(" %ld %s\n",head->num, head->name); head=head->next;}}}NODE * delete(NODE *head1,NODE *head2){ NODE *p,*p1,*p2;if(head1==NULL||head2==NULL){ printf("List is empty!");return NULL;}p=head2;while(p!=NULL){ p1=head1; p2=p1->next;if(p1->num==p->num) { head1=p2; free(p1);} else{ while(p2->num!=p->num&&p2->next!=NULL){ p1=p2; p2=p2->next;}if(p2->num==p->num){ p1->next=p2->next; free(p2);}}p=p->next;}return head1;}NODE * insert(NODE *head, NODE *newp){ NODE *p1,*p2;newp->next=NULL;if(head==NULL){ head=newp; return head; }if(newp->num < head->num ){ newp->next=head; head=newp;return head;}if(head->next==NULL){ head->next=newp; return head;}p1=head;p2=p1->next;while(newp->num > p2->num && p2->next!=NULL){ p1=p2; p2=p2->next; }if(newp->num > p2->num){ p2->next=newp; newp->next=NULL; }else{ newp->next=p2; p1->next=newp; }return head;}NODE *merge(NODE *head1, NODE *head2){ NODE *p;while(head2){ p=head2;head2=head2->next;head1=insert(head1,p);}return head1;}main(){ FILE *fp1,*fp2;NODE *a_head=0,*b_head=0,*p;clrscr(); /*清屏*/fp1=fopen("c:\\a.txt","r");if(fp1==NULL){printf("can't open file!");return 0;} fp2=fopen("c:\\b.txt","r");if(fp2==NULL){printf("can't open file");return 0;} a_head=create(fp1);puts("\nlist a:");display(a_head);b_head=create(fp2);puts("\nlist b:");display(b_head);fclose(fp1); fclose(fp2);b_head=delete(b_head,a_head);puts("\nlist b:"); display(b_head);a_head=merge(a_head,b_head);puts("\nlist a:");display(a_head);fp1=fopen("d:\\c.txt","w");p=a_head;while(p!=NULL){ fprintf(fp1,"\n %ld %s",p->num, p->name);p=p->next;}fclose(fp1);}15-3.c 改错题#include<stdio.h>#include<conio.h>struct /* 改为:typedef struct */{ char name[10], degree[10];}ST;void sort(ST x[],int n,char key[][10],int m){ int i,j,k,con1,con2;ST v;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++){ for(k=0;k<m;k++)if(strcmp(x[j].degree,key[k])==0){ con1=k; break; }for(k=0;k<m;k++)if(strcmp(x[j+1].degree,key[k])==0){ con2=k; break; }if(con1>con2||con1==con2&&strcmp(x[j].name,x[j+1].name)<0)/*改为: strcmp(x[j].name,x[j+1].name)>0 */{ v=x[j]; x[j]=x[j+1]; x[j+1]=v; }}}void main( ){ ST s[5]={{"A","master"},{"B","bachelor"},{"C","doctor"},{"D","bachelor"},{"E","master"}};char sortkey[3]={"bachelor","master","doctor"}; /*改为 sortkey[3][10] */int i;sort(s,5,sortkey,3);for(i=0;i<5;i++)printf("\n%s %s",s[i]->name,s[i]->degree); /* 改为s[i].name,s[i].degree */ getch();}。