三个比较经典的c程序
1.成绩排序 #incl destdio.h #incl destring.h #incl destdlib.h str ct st dent { int n m； char name[20]； int mathscore； int englishscore； int comp terscore； int allscore； }*p； void sort(str ct st dent *q,int n) { int i,j； str ct st dent a； for(j=0；jn-1；j) { for(i=0；in-1-j；i) { if((q+i)-allscore(q+i+1)-allscore) { a=*(q+i)； *(q+i)=*(q+i+1)； *(q+i+1)=a； } if((q+i)-allscore==(q+i)-allscore) { if((q+i)-englishscore(q+i+1)-englishscore) {a=*(q+i)； *(q+i)=*(q+i+1)； *(q+i+1)=a；} } } } for(i=0；in；i) { printf("第%d名:",i+1)； printf("学号:%dn",(q+i)-n m)； printf("姓名:%sn",(q+i)-name)； printf("数学成绩:%dn",(q+i)-mathscore)； printf("英语成绩:%dn",(q+i)-englishscore)； printf("计算机成绩:%dn",(q+i)-comp terscore)； printf("总成绩:%dnn",(q+i)-allscore)； } } void main { int i,n,n； str ct st dent *p； printf("==学员成绩管理系统==nn")； printf("请输入学生的人数:")； scanf("%d",&n)； p=(str ct st dent *)malloc(n*sizeof(str ct st dent))； for(i=0；in；i) { printf("请输入相关学生信息n")； printf("请输入学生学号:")； scanf("%d",&(p+i)-n m)； printf("请输入学生姓名:")； scanf("%s",(p+i)-name)； printf("请输入数学成绩:")； scanf("%d",&(p+i)-mathscore)； printf("请输入英语成绩:")； scanf("%d",&(p+i)-englishscore)； printf("请输入计算机成绩:")； scanf("%d",&(p+i)-comp terscore)； (p+i)-allscore=(p+i)-mathscore+(p+i)-englishscore+(p+i)-comp terscore； } for(i=0；in；i) { printf("%d号学生总成绩为:%dnnn",(p+i)-n m,(p+i)-allscore)； } printf("排序后的信息为:n")； sort(p,n)； } 2.链表合并排序 #incl destdio.h #incl destdlib.h #define null 0 #define len sizeof(str ct n mber) 宏定义长度变量,其值为sizeof(str ct st dent) str ct n mber 定义结构体 { long n m； str ct n mber *next； 指向下一个数字的指针 }； void main 主函数 { str ct n mber *p1,*p2,*head； 声明所用到的函数 str ct n mber *inp t； void print(str ct n mber *head)； str ct n mber *insert(str ct n mber *p1,str ct n mber *p2)； printf("说明:此程序是把l1,l2两个链表合并并按升序排列.nnnn")； printf("请输入第一个链表l1:n")； p1=inp t； printf("n请输入第二个链表l2:n")； p2=inp t； head=insert(p1,p2)； printf("n两个链表合并后:n")； print(head)； } str ct n mber *inp t 定义inp t函数 { int n=0； str ct n mber *p1,*p2,*head； head=null； p1=(str ct n mber *)malloc(len)； 为p1、p2动态分配空间 printf("请输入相应数据(输入0表示停止):n")； scanf("%d",&p1-n m)； head=null； while(p1-n m！=0) 当数字为空时退出循环 { n=n+1； 计数器加1 if(n==1) 如果只有一个数字 head=p1； 如果只有一个数字,该数字信息即为头指针 else p2-next=p1； 否则,p2的下一个位置指向p1(将p1赋值给p2的下一位置), p2=p1； p1赋值给p2,即p2保存由p1输入的信息。 p1=(str ct n mber *)malloc(len)； 为p1分配空间 scanf("%d",&p1-n m)； p1-next=null； p1的下一个指针指向为空 } 退出循环,创建完成 p2-next=null； p2最后一个位置置空 ret rn (head)； 返回首地址 } void print(str ct n mber *head) { str ct n mber *p； 定义结构体指针*p p=head； 使p指向头指针 if(head！