当前位置:文档之家› 数据结构上机实验答案

数据结构上机实验答案

《数据结构实验指导书》答案实验一:1、请编写函数int fun(int *a, int *b),函数的功能是判断两个指针a和b所指存储单元的值的符号是否相同;若相同函数返回1,否则返回0。

这两个存储单元中的值都不为0。

在主函数中输入2个整数、调用函数fun、输出结果。

#include <stdio.h>int fun(int *a, int *b){if (*a*(*b)>0) return(1);else return(0);}main(){int x,y;scanf("%d%d",&x,&y);if (fun(&x,&y)) printf("yes\n");else printf("no");}2、计算1+2+3+……+100,要求用指针进行设计。

即设计函数int fun(int *n)实现求1+2+3+……+*n,在主函数中输入、调用、输出结果。

#include <stdio.h>int fun(int *n){int i,sum=0;for (i=1;i<=*n;i++)sum+=i;return(sum);}main(){int x,sum;scanf("%d",&x);printf("the sum is %d\n",fun(&x));}3、函数的功能是求数组a中最大数的位置(位序号)。

在主函数中输入10个整数、调用函数fun、输出结果。

#define N 10#include <stdio.h>void input(int *a,int n){int i;for (i=0;i<n;i++)scanf("%d",a+i); /*scanf("%d",&a[i]);*/}int fun(int *a,int n){int i,*max;max=a;for (i=1;i<n;i++)if (a[i]>*max) max=a+i;return(max-a);}main(){int a[N],maxi;input(a,N);maxi=fun(a,N);printf("\n the max position is %d\n",maxi);}4、请编写函数fun(int *a,int n, int *odd, int *even),函数的功能是分别求出数组a 中所有奇数之和和所有偶数之和。

形参n给出数组中数据的个数;利用指针odd和even分别返回奇数之和和偶数之和。

在主函数中输入10个整数、调用函数fun、输出结果。

#define N 10#include <stdio.h>void input(int *a,int n){int i;for (i=0;i<n;i++)scanf("%d",a+i); /*scanf("%d",&a[i]);*/}void fun(int *a,int n, int *odd, int *even){int i,sum1=0,sum2=0;for (i=0;i<n;i++){if (a[i]%2==0) sum1+=a[i];else sum2+=a[i];}*odd=sum1;*even=sum2;}main(){int a[N],odd,even;input(a,N);fun(a,N, &odd, &even);printf("the odd is %d\tthe even is %d\n",odd,even);}5、请编写函数int fun(int *a, int *b,int n),函数的功能是把数组a中所有为偶数的数,放在另一个数组中b。

在主函数中输入10个整数、调用函数fun、输出结果。

#define N 10#include <stdio.h>void input(int *a,int n){int i;for (i=0;i<n;i++)scanf("%d",a+i); /*scanf("%d",&a[i]);*/}void output(int *a,int n){int i;printf("\nthe odd is:\n");for (i=0;i<n;i++)printf("%5d",*(a+i)); /*printf("%d",a[i]);*/}int fun(int *a, int *b,int n){int i,j=0;for (i=0;i<n;i++)if (a[i]%2==0) { b[j]=a[i]; j++;}return(j);main(){int a[N],b[N],m;input(a,N);m=fun(a,b,N);output(b,m);}6、请编写函数int fun(int *a,,int n),函数的功能是把数组a中最大数和最小数交换。

在主函数中输入10个整数、调用函数fun、输出结果。

#define N 10#include <stdio.h>void input(int *a,int n){int i;for (i=0;i<n;i++)scanf("%d",a+i); /*scanf("%d",&a[i]);*/}void output(int *a,int n){int i;printf("\nthe result is:\n");for (i=0;i<n;i++)printf("%5d",*(a+i)); /*printf("%d",a[i]);*/}void fun(int *a,int n){int i,*max,*min,temp;max=min=a;for (i=1;i<n;i++){if (a[i]>*max) max=a+i;if (a[i]<*min) min=a+i;}printf("the max is %d,the position is %d\n",*max,max-a);printf("the min is %d,the position is %d\n",*min,min-a);if (max!=min){temp=*max;*max=*min;*min=temp;}}main(){int a[N],m;input(a,N);fun(a,N);output(a,N);}7、请编写函数int fun(int a[4][4]),函数的功能是把矩阵a转置。

在主函数中输入、调用函数fun、输出结果。

#define N 4#include <stdio.h>void input(int a[][4],int n){int i,j;for (i=0;i<n;i++)for (j=0;j<n;j++)scanf("%d",&a[i][j]);}void output(int a[][4],int n){int i,j;printf("\nthe result is:\n");for (i=0;i<n;i++){printf("\n");for (j=0;j<n;j++)printf("%4d",*(*(a+i)+j)); /*printf("%d",a[i][j]);*/}}void fun(int a[][4],int n){int i,j,temp;for (i=0;i<n;i++)for (j=0;j<i;j++){temp=a[i][j];a[i][j]=a[j][i];a[j][i]=temp;}}main(){int a[N][N];input(a,N);fun(a,N);output(a,N);}8、请编写函数int fun(char *a),函数的功能是分别求出字符串a 的长度。

在主函数中输入1个字符串、调用函数fun、输出结果。

#include <stdio.h>int fun(char *a){int i=0;char *p;p=a;while (*p){i++;p++;}return(i);}main(){char str[20],*cp;cp=str;gets(cp);printf("the length of %s is %d\n",cp,fun(cp));}9、10、#include <stdio.h>#include <string.h>#define N 2typedef struct student /*定义数据结构(数据类型)*/{long num;char name[10];int score[3]; /*存放三门课成绩 */float average; /*/平均成绩*/} stu;void intput(stu s[],int n) /*输入数据 */{int i,j; /*i表示处理学生的下标,J表示成绩编号 */for (i=0;i<n;i++){printf("input num:\n");scanf("%ld",&s[i].num);printf("input name:\n");scanf("%s",s[i].name);printf("input 3 score:\n");for (j=0;j<3;j++)scanf("%d",&s[i].score[j]);}}void stu_av(stu s[],int n)/*求每个学生的平均成绩*/ {int i,j,sum;for (i=0;i<n;i++){sum=0;for (j=0;j<3;j++)sum+=s[i].score[j] ;s[i].average=sum/3.0;}}float av(stu s[],int n)/*求总平均成绩*/{int i;float sum=0.0,ave;for (i=0;i<n;i++)sum+=s[i].average;ave=sum/n;return(ave);}int max(stu s[],int n)/*求平均成绩最高学生的下标*/ {int i,maxi=0;for (i=1;i<n;i++)if (s[i].average>s[maxi].average)maxi=i;return(maxi);}main(){int maxi,j;stu a[N];/*定义变量 */intput(a,N);stu_av(a,N);printf("the score average is %f\n", av(a,N));maxi=max(a,N);printf("the max average student data:\n");printf("%10ld",a[maxi].num);printf("%10s",a[maxi].name);for (j=0;j<3;j++)printf("%5d",a[maxi].score[j]);printf("%5.1f",a[maxi].average);getch();}实验二1、#include <stdio.h>#define MaxLen 50typedef int elemtype;struct datatype{elemtype *elem;int length;};typedef struct datatype sqlist;void create (sqlist *a){int i,n;a->elem=(elemtype *)malloc(MaxLen*sizeof(elemtype)); printf("创建一个顺序表\n");printf("输入元素个数\n");scanf("%d",&a->length);for (i=0;i<a->length;i++){printf("输入第%d个元素值:",i+1);scanf("%d",a->elem+i);}}void invert(sqlist *a){int m=a->length/2,i;elemtype temp;for (i=0;i<m;i++){temp=*(a->elem+i);*(a->elem+i)=*(a->elem+a->length-1-i);*(a->elem+a->length-1-i)=temp; }}void disp(sqlist *a){ int i;for (i=0;i<a->length;i++)printf("%5d:%d\n",i+1,*(a->elem+i));getch();}void main(){sqlist a;create(&a);disp(&a);invert(&a);disp(&a);}2、#include <stdio.h>#include <malloc.h>#define NULL 0typedef int elemtype;typedef struct linknode{elemtype data;struct linknode *next;}nodetype;nodetype *create(){elemtype d;nodetype *h,*s,*t;int i=1;h=NULL;printf("建立一个单链表\n");while (1){printf("输入第%d节点data域值:",i);scanf("%d",&d);if (d==0) break ; /*以0表示输入结束*/if(i==1) /*建立第一个结点*/ {h=(nodetype *)malloc(sizeof(nodetype));h->data=d;h->next=NULL;t=h;}else{s=(nodetype *)malloc(sizeof(nodetype));s->data=d;s->next=NULL;t->next=s;t=s; /*t始终指向生成的单链表的最后一个结点*/}i++;}return h;}void disp(nodetype *h){nodetype *p=h;printf("输出一个单链表:\n");if (p==NULL) printf("空表");while (p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");getch();}int len(nodetype *h){int i=0;nodetype *p=h;while (p){i++;p=p->next;}return(i);}nodetype *invert(nodetype *h){nodetype *p,*q,*r;if (len(h)<=1){printf("逆置的单链表至少有2个节点\n"); return(NULL);}else{p=h;q=p->next;while (q!=NULL){r=q->next;q->next=p;p=q;q=r;}h->next=NULL;h=p;return h;}}void main(){nodetype *head;head=create();disp(head);head=invert(head);disp(head);}4、(1)#include <stdio.h>#define MaxLen 50typedef struct{long num;int score;}elemtype;typedef struct datatype{elemtype *elem;int length;}sqlist;void create (sqlist *a){long i=0,n;int s;a->elem=(elemtype *)malloc(MaxLen*sizeof(elemtype));printf("创建一个顺序表\n");printf("输入学生学号和成绩:0作为结束标志\n");scanf("%ld%d",&n,&s);while (n!=0){(a->elem)[i].num=n;(a->elem)[i].score=s;i++;scanf("%ld%d",&n,&s);}a->length=i;}void disp(sqlist *a){ int i;for (i=0;i<a->length;i++)printf("%5d:%ld %d\n",i+1,(a->elem)[i].num,(a->elem)[i].score); getch();}void main(){sqlist a;create(&a);disp(&a);}(2)见5(2)5、(1)#include <stdio.h>#define MaxLen 50typedef struct{long num;int score;}elemtype;typedef struct datatype{elemtype *elem;int length;}sqlist;void create (sqlist *a){long i=0,n;int s;a->elem=(elemtype *)malloc(MaxLen*sizeof(elemtype));printf("创建一个顺序表\n");printf("输入学生学号和成绩:0作为结束标志\n");scanf("%ld%d",&n,&s);while (n!=0){(a->elem)[i].num=n;(a->elem)[i].score=s;i++;scanf("%ld%d",&n,&s);}a->length=i;}void sort(sqlist *a){ int i,j,k,s;long n;for (i=0;i<a->length-1;i++){k=i;for (j=i+1;j<a->length;j++)if ((a->elem)[j].score<(a->elem)[k].score) k=j;if (k!=i){n=(a->elem)[i].num;(a->elem)[i].num=(a->elem)[k].num;(a->elem)[k].num=n;s=(a->elem)[i].score;(a->elem)[i].score=(a->elem)[k].score; (a->elem)[k].score=s;}}}void disp(sqlist *a){ int i;for (i=0;i<a->length;i++)printf("%5d:%ld %d\n",i+1,(a->elem)[i].num,(a->elem)[i].score); getch();}void main()sqlist a;create(&a);disp(&a);sort(&a);disp(&a);}(2)#include <stdio.h>#include <malloc.h>#define NULL 0typedef struct linknode{long num;int score;struct linknode *next;}nodetype;nodetype *create(){long n;int sc;nodetype *h,*s,*t;h=(nodetype *)malloc(sizeof(nodetype));;h->next=NULL;t=h;printf("创建一个顺序表\n");printf("输入学生学号和成绩:0作为结束标志\n"); scanf("%ld%d",&n,&sc);while (n!=0){s=(nodetype *)malloc(sizeof(nodetype));s->num=n;s->score=sc;t->next=s;t=s;scanf("%ld%d",&n,&sc);}t->next=NULL;return h;}void disp(nodetype *h)nodetype *p=h->next;printf("输出一个单链表:\n");while (p!=NULL){printf("%ld %d\n",p->num,p->score);p=p->next; }printf("\n");getch();}nodetype *insertorder(nodetype *h,nodetype *s) {nodetype *p,*q;q=h;p=q->next;while (p!=NULL && s->score>p->score){q=p;p=p->next;}s->next=p;q->next=s;return(h);}nodetype *sort(nodetype *h){nodetype *p,*s;p=h->next;h->next=NULL;while (p!=NULL){s=p->next;h=insertorder(h,p);p=s;}return h;}void main(){nodetype *head;head=create();disp(head);head=sort(head);disp(head);}实验三:7、试写一个算法,识别依次读入的一个以为结束符的字符序列是否为形如‘序列1&序列2’模式的字符序列。

相关主题