编辑: 人间点评 2019-09-12
课程设计答案 程序调试类答案

一、单链表的基本操作 每一个函数的功能:建立单链表、输出单链表、查找值为X的结点、查找Q的前驱P、插入值为X的R结点、删除Q结点、 建立的链表为双向循环链表 #include"stdio.

h" #include"alloc.h" typedef struct lnode { char value;

struct lnode *link;

}llistnode;

llistnode *creat() { llistnode *head,*p;

char ch;

head=(llistnode *)malloc(sizeof(llistnode));

head->link=NULL;

printf("input:");

while((ch=getchar())!='n') { p=malloc(sizeof(llistnode));

p->value=ch;

p->link=head->link;

head->link=p;

} return head;

} void print(llistnode *head) { llistnode *p;

printf("n");

p=head->link;

while(p) { printf("%c",p->value);

p=p->link;

} } llistnode *visitll(llistnode *h,char x) { llistnode *p;

p=h;

while((p->value!=x)&&(p!=NULL)) p=p->link;

return(p);

} llistnode *predall(llistnode *h,llistnode *q) { llistnode *p;

if(q==h) p=NULL;

else { p=h;

while((p->link!=q)&&(p!=NULL)) p=p->link;

} return(p);

} void insertll(llistnode *h,llistnode *q,char x) { llistnode *p,*r;

r=(llistnode *)malloc(sizeof(llistnode));

r->value=x;

if(h==q) h=r;

else { p=predall(h,q);

p->link=q;

} } void deletell(llistnode *h,llistnode *q) { llistnode *p;

if(h==q) h=q->link;

else { p=predall(h,q);

p->link=q->link;

} free(q);

} main() { llistnode *a;

llistnode *result=NULL;

int choice;

char data,data_cz;

a=creat();

while(1) { printf("n以下是单链表的应用,请选择:");

printf("n1:遍历链表并输出其的结点值: ");

printf("n2: 在链表中查找是否存在某结点 ");

printf("n3: 在链表中查找某结点的前驱 ");

printf("n4: 在链表中查找某结点的后距 ");

printf("n5: 在链表中插入结点 ");

printf("n6: 在链表中删除结点 ");

printf("n7: 退出");

scanf("%d",&choice);

switch(choice) { case 1: print(a);

break;

case 2: getchar();

printf("请输入待查结点的值: ");

data=getchar();

result=visitll(a,data);

if(result!=NULL) printf("%c在链表中",data);

else printf("%c不在链表中",data);

result=NULL;

break;

case 3: getchar();

printf("请输入待查结点 ");

data=getchar();

result=visitll(a,data);

if(result==NULL) { printf("%c不在链表中",data);

break;

} result=predall(a,result);

if(result!=NULL) printf("%c的前驱是%c",data,result->value);

else printf("%c没有前驱",data);

result=NULL;

break;

case 4: getchar();

printf("请输入待查结点的值 ");

data=getchar();

result=visitll(a,data);

if(result==NULL) { printf("%c不在链表中",data);

break;

} if(result->link!=NULL) printf("%c的后距是",data);

result=NULL;

break;

case 5: getchar();

printf("请输入待查结点的值 ");

data=getchar();

getchar();

printf("9请输入插入在哪个结点前面 ");

data_cz=getchar();

result=visitll(a,data_cz);

if(result==NULL) { printf("%c不在链表中",data);

break;

} insertll(a,result,data);

break;

case 6: getchar();

printf( "请输入删除结点的值 ");

data=getchar();

result=visitll(a,data);

if(result==NULL) { printf("%c不在链表中",data);

break;

} deletell(a,result);

break;

case 7: break;

default: break;

} if(choice==7) break;

} }

二、用单链表编制集合运算的程序 #include "stdio.h" #include "alloc.h" #include "string.h" #define max

100 int n;

struct node { char data;

struct node *next;

};

typedef struct node chnode;

chnode *creat() { chnode *head,*p,*q;

char str[25];

int i;

printf("input a string :n");

scanf("%s",str);

if(!strlen(str)) printf("there is no list.n");

for(i=0;

str[i]!='';

i++) { if(i==0) head=p=malloc(sizeof(chnode));

q=malloc(sizeof(chnode));

p->next=q;

p=q;

p->data=str[i];

} p->next=NULL;

return (head);

} void print(chnode *head) { chnode *p;

p=head->next;

if(!p) printf("the list is empty!n");

while(p) { printf("%c", p->data);

p=p->next;

} printf("n");

} chnode *sort(chnode *head) { chnode *p,*q,*p1,*p2,*h;

char ch;

h=(chnode *)malloc(sizeof(chnode));

h->next=NULL;

if(!head->next) printf("there is no list!n");

while(head->next!=NULL) {p=head->next;

ch=p->data;

p=p->next;

while(p) { if(p->datadata;

p=p->next;

} p1=head;

p2=head->next;

while((p2->data!=ch)&&p2) { p1=p2;

p2=p2->next;

} if(p2) { p1->next=p2->next;

q=h;

while(q->next) q=q->next;

q->next=p2;

p2->next=NULL;

} } print(h);

return(h);

} chnode *add(chnode *head1,chnode *head2) { chnode *p1,*p2;

p1=head1->next;

while(p1->next) p1=p1->next;

p1->next=head2->next;

head1=sort(head1);

p1=head1->next;

p2=p1->next;

while(p2) { if(p1->data==p2->data) { p1->next=p2->next;

free(p2);

} p2=p2->next;

} return(head1);

} chnode *or(chnode *head1,chnode *head2) { chnode *p1,*p2,*q2,*h,*p;

h=p=malloc(sizeof(chnode));

p->next=NULL;

p1=head1->next;

while(p1) { p2=head2;

q2=p2->next;

while((q2->data!=p1->data)&&q2) { p2=q2;

q2=q2->next;

} if(p1->data==q2->data) p2->next=q2->next;

if(q2) { while(p->next) p=p->next;

p->next=q2;

p=q2;

q2->next=NULL;

} p1=p1->next;

} return(h);

} chnode *sub(chnode *head1,chnode *head2) { chnode *p1,*p2,*q1;

p2=head2->next;

while(p2) { p1=head1;

q1=p1->next;

while(q1) { while((q1->data!=p2->data)&&(q1)) { p1=q1;

q1=q1->next;

} if(p2->data==q1->data) { p1->next=q1->next;

free(q1);

} p1=q1;

q1=q1->next;

} p2=p2->next;

} head1=sort(head1);

return(head1);

} main() { int flag;

chnode *str1,*str2,*str;

str1=creat(str1);

str2=creat(str2);

printf("运算前 str1 为:");

print(str1);

printf("n");

printf("运算前 str2 为:");

print(str2);

printf("n");

while(1) { printf("n1: 并运算: ");

printf("n2: 交运算: ");

printf("n3: 差运算: ");

printf("n4: 退出: ");

printf("请输入选择 :");

scanf("%d",&flag);

switch(flag) { case 1: str1=add(str1,str2);

print(str);

break;

case 2: str1=or(str1,str2);

print(str);

break;

case 3: str1=sub(str1,str2);

print(str);

break;

case 4: break;

} if(flag==4) break;

} }

三、用数组实现两个非稀疏矩阵的相乘运算. #include "stdio.h" #define N

6 int r[N][N];

void mult(int a[N][N],int b[N][N]) { int i,j,k;

for(i=0;

idata=ch;

bt->lchild=creat();

bt->rchild=creat();

} else bt=NULL;

return bt;

} void level(blink bt) { blink p;

p=bt;

initq(q);

if(p) { printf("%c",p->data);

enq(q,p);

} while(!qempty(q)) { p=deq(q);

if(p->lchild) { printf("%c",p->lchild->data);

enq(q,p->lchild);

} if(p->rchild) { printf("%c",p->rchild->data);

enq(q,p->rchild);

} } } main() { blink root;

root=creat();

printf("n");

level(root);

printf("n");

}

五、快速排序 #include "stdio.h" #define max

100 int r[max];

void quicksortl(int r[],int s,int t) { int i,j;

i=s;

j=t;

r[0]=r[s];

while(inext=a.arry[x].first;

a.arry[x].first=p;

c++;

} }while(x>0);

a.arry[i].have=c;

} return a;

} /*void disp(md a) { node *p;

int i;

for(i=1;

inumber].vex_num);

p=p->next;

} printf("n");

} } */ void select(int quee[],int i,int j,md a) /* 该函数的目的是使课程集中在前面 */ { /* 从下标i到j扫描数组quee,将学分最少的编号与quee[i]交换 */ int k,temp,min;

min=i;

for(k=i+1;

knext;

} } else /* 已学课程的学分超过了上限 */ { total_score=0;

printf("n%d term study:",j++);

} } } main() { md h;

h=init();

/* disp(h);

*/ arrage(h);

getch();

} 程序实现: enter class total:12 enter term total:

6 enter socre limit:10 enter class arrange enter

1 class number and score:1

2 enter

1 prior class:0 enter

2 class number and score:2

3 enter

2 prior class:1

0 enter

3 class number and score:3

4 enter

3 prior class:1

2 0 enter

4 class number and score:4

3 enter

4 prior class:1

0 enter

5 class number and score:5

2 enter

5 prior class:3

4 0 enter

6 class number and score:6

3 enter

6 prior class:11

0 enter

7 class number and score:7

4 enter

7 prior class:5

3 0 enter

8 class number and score:8

4 enter

8 prior class:3

6 0 enter

9 class number and score:9

7 enter

9 prior class:0 enter

10 class number and score:10

5 enter

10 prior class:9

0 enter

11 class number and score:11

2 enter

11 prior class:9

0 enter

12 class number and score:12

3 enter

12 prior class:9

10 1

0 1 term study:1

4 2

2 term study:3

5 7

3 term study:9

11 4 term study:6

8 5 term study:10

12 五.成绩分析问题 [问题描述] 录入、保存一个班级学生多门课程的成绩,并对成绩进行分析. [基本要求] (1)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat. (2)对文件input.dat中的数据进行处理,要求具有如下功能: 1)按各门课程成绩排序,并生成相应的文件输出. 2)计算每人的平均成绩,按平均成绩排序,并生成文件. 3)求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数. 4)根据姓名或学号查询某人的各门课成绩,重名情况也能处理. (3)界面美观. #define maxsize1

100 /* maxsize1为学生名字的最大字符数 */ #define maxsize2

10 /* maxsize2为学生的最大个数 */ typedef struct { int number;

/* 学号域 */ char name[maxsize1];

/* 姓名域 */ int pro[5];

/* pro[1]为math成绩,pro[2]为english成绩,pro[3]为computer成绩,pro[4]为平均成绩 */ }node;

typedef struct { node stu[maxsize2];

/* 存放学生信息 */ int num;

/* 存放学生人数 */ }md;

md creat() /* 创建学生信息 */ { md a;

int i;

printf("enter student ON.:");

scanf("%d",&a.num);

for(i=1;

i

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题