73
#include <stdio.h> #define N 200 #define SCORES 5 #define NUMLEN 10 struct std_type{ char no[NUMLEN];/*学号*/ char *name;/*名字符串指针*/ int scores[SCORES];/*五门功课的成绩*/ }; struct std_type students[N]; int order[N]; int total[N]; /*[函数]输入一个学生信息函数*/ int readastu(struct std_type *spt) { int len,j; char buf[120];/*输入字符串的缓冲区*/ printf("\nNumber : ");/*输入学号*/ if(scanf("%s",buf)==1) strncpy(spt->no,buf,NUMLEN-1); else return 0;/*Ctrl+Z结束输入*/ printf("Name : ");/*输入姓名*/ if(scanf("%s",buf)==1) { len=strlen(buf); spt->name=(char *)malloc(len+1);/*申请存贮姓名的空间*/ strcpy(spt->name,buf); } else return 0;/*Ctrl+Z结束输入*/ printf("Scores : ");/*输入成绩*/ for(j=0;j<SCORES;j++) if(scanf("%d",spt->scores+j)!=1) break; if(j==0)/*一个成绩也未输入*/ { free(spt->name);/*释放存贮姓名的空间*/ return 0; } for(;j<SCORES;j++)/*少数未输入的成绩用0分代之*/ spt->scores[j]=0; return 1; } /*[函数]输出一个学生信息的函数*/ int writeastu(struct std_type *spt) { int i; printf("Number : %s\n",spt->no);/*输出学号*/ printf("Name : %s\n",spt->name);/*输出姓名*/ printf("Scores : ");/*输出成绩*/ for(i=0;i<SCORES;i++) printf("%4d",spt->scores[i]); printf("\n\n"); } main() { int n,i,j,t; clrscr(); for(n=0;readastu(students+n);n++); /*采用冒泡法对学生信息数组排序*/ for(i=0;i<n;i++) { order[i]=i;/*预置第i个输入的学生*/ for(t=0,j=0;j<SCORES;j++)/*求第i个学生的总分*/ t+=students[i].scores[j]; total[i]=t; } /*冒泡排序*/ for(i=0;i<n-1;i++)/*共扫视n-1遍*/ for(j=0;j<n-1-i;j++) if(total[order[j]]<total[order[j+1]]) {/*交换名次*/ t=order[j]; order[j]=order[j+1]; order[j+1]=t; } for(j=0;j<n;j++)/*输出*/ writeastu(students+order[j]); printf("\n Press any key to quit...\n"); getch(); }
74
#include <stdio.h> struct ele{ int no; struct ele *link; } main() { int n,m,i; struct ele *h,*u,*p; clrscr(); printf("Please input n&m:\n"); scanf("%d%d",&n,&m);/*输入n和m*/ h=u=(struct ele *)malloc(sizeof(struct ele));/*形成首表元*/ h->no=1; for(i=2;i<=n;i++)/*形成其余的n-1个表元*/ { u->link=(struct ele *)malloc(sizeof(struct ele)); u=u->link; u->no=i;/*第i个表元置编号i*/ } u->link=h;/*末表元后继首表元,形成环*/ puts("\nThe numbers of who will quit the cycle in turn are:"); while(n) { for(i=1;i<m;i++)/*掠过m-1个表元*/ u=u->link; p=u->link;/*p指向第m个表元*/ u->link=p->link;/*第m个表元从环中脱钩*/ printf("%4d",p->no); free(p);/*释放第m个表元占用的空间*/ n--; } printf("\n\n Press any key to quit...\n"); getch(); }
#include <stdio.h> #define CHILDREN 5 struct person{ char *name;/*名字符串指针*/ char sex;/*性别:男用字符'M';女用字符'F'*/ struct person *father;/*指向父亲*/ struct person *mother;/*指向母亲*/ struct person *mate;/*指向配偶*/ struct person *children[CHILDREN];/*指向子女*/ }; /* [函数]newperson增加新人 */ struct person *newperson(char *name,char sex) { struct person *p; int index; p=(struct person *)malloc(sizeof(struct person)); p->name=(char *)malloc(strlen(name)+1); strcpy(p->name,name); p->sex=sex; p->father=NULL; p->mother=NULL; p->mate=NULL; for(index=0;index<CHILDREN;index++) p->children[index]=NULL; return p; }