数据结构上机实验答案_第1页
数据结构上机实验答案_第2页
数据结构上机实验答案_第3页
数据结构上机实验答案_第4页
数据结构上机实验答案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构上机实验答案数据结构上机实验答案数据结构上机实验答案xxx公司数据结构上机实验答案文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度《数据结构实验指导书》答案实验一:请编写函数intfun(int*a,int*b),函数的功能是判断两个指针a和b所指存储单元的值的符号是否相同;若相同函数返回1,否则返回0。这两个存储单元中的值都不为0。在主函数中输入2个整数、调用函数fun、输出结果。#include<>intfun(int*a,int*b){if(*a*(*b)>0)return(1);elsereturn(0);}main(){intx,y;scanf("%d%d",&x,&y);if(fun(&x,&y))printf("yes\n");elseprintf("no");}计算1+2+3+……+100,要求用指针进行设计。即设计函数intfun(int*n)实现求1+2+3+……+*n,在主函数中输入、调用、输出结果。#include<>intfun(int*n){inti,sum=0;for(i=1;i<=*n;i++)sum+=i;return(sum);}main(){intx,sum;scanf("%d",&x);printf("thesumis%d\n",fun(&x));}函数的功能是求数组a中最大数的位置(位序号)。在主函数中输入10个整数、调用函数fun、输出结果。#defineN10#include<>voidinput(int*a,intn){inti;for(i=0;i<n;i++)scanf("%d",a+i);/*scanf("%d",&a[i]);*/}intfun(int*a,intn){inti,*max;max=a;for(i=1;i<n;i++) if(a[i]>*max)max=a+i;return(max-a);}main(){inta[N],maxi;input(a,N);maxi=fun(a,N);printf("\nthemaxpositionis%d\n",maxi);}4、请编写函数fun(int*a,intn,int*odd,int*even),函数的功能是分别求出数组a中所有奇数之和和所有偶数之和。形参n给出数组中数据的个数;利用指针odd和even分别返回奇数之和和偶数之和。在主函数中输入10个整数、调用函数fun、输出结果。#defineN10#include<>voidinput(int*a,intn){inti;for(i=0;i<n;i++)scanf("%d",a+i);/*scanf("%d",&a[i]);*/}voidfun(int*a,intn,int*odd,int*even){inti,sum1=0,sum2=0;for(i=0;i<n;i++){ if(a[i]%2==0)sum1+=a[i];elsesum2+=a[i];}*odd=sum1;*even=sum2;}main(){inta[N],odd,even;input(a,N);fun(a,N,&odd,&even);printf("theoddis%d\ttheevenis%d\n",odd,even);}5、请编写函数intfun(int*a,int*b,intn),函数的功能是把数组a中所有为偶数的数,放在另一个数组中b。在主函数中输入10个整数、调用函数fun、输出结果。#defineN10#include<>voidinput(int*a,intn){inti;for(i=0;i<n;i++)scanf("%d",a+i);/*scanf("%d",&a[i]);*/}voidoutput(int*a,intn){inti;printf("\ntheoddis:\n");for(i=0;i<n;i++)printf("%5d",*(a+i));/*printf("%d",a[i]);*/}intfun(int*a,int*b,intn){inti,j=0;for(i=0;i<n;i++) if(a[i]%2==0){b[j]=a[i];j++;}return(j);}main(){inta[N],b[N],m;input(a,N);m=fun(a,b,N);output(b,m);}6、请编写函数intfun(int*a,,intn),函数的功能是把数组a中最大数和最小数交换。在主函数中输入10个整数、调用函数fun、输出结果。#defineN10#include<>voidinput(int*a,intn){inti;for(i=0;i<n;i++)scanf("%d",a+i);/*scanf("%d",&a[i]);*/}voidoutput(int*a,intn){inti;printf("\ntheresultis:\n");for(i=0;i<n;i++)printf("%5d",*(a+i));/*printf("%d",a[i]);*/}voidfun(int*a,intn){inti,*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("themaxis%d,thepositionis%d\n",*max,max-a);printf("theminis%d,thepositionis%d\n",*min,min-a);if(max!=min) {temp=*max;*max=*min;*min=temp;}}main(){inta[N],m;input(a,N);fun(a,N);output(a,N);}7、请编写函数intfun(inta[4][4]),函数的功能是把矩阵a转置。在主函数中输入、调用函数fun、输出结果。#defineN4#include<>voidinput(inta[][4],intn){inti,j;for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);}voidoutput(inta[][4],intn){inti,j;printf("\ntheresultis:\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]);*/}}voidfun(inta[][4],intn){inti,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(){inta[N][N];input(a,N);fun(a,N);output(a,N);}请编写函数intfun(char*a),函数的功能是分别求出字符串a的长度。在主函数中输入1个字符串、调用函数fun、输出结果。#include<>intfun(char*a){inti=0;char*p;p=a;while(*p) {i++; p++; }return(i);}main(){charstr[20],*cp;cp=str;gets(cp);printf("thelengthof%sis%d\n",cp,fun(cp));}9、10、#include<>#include<>#defineN2typedefstructstudent/*定义数据结构(数据类型)*/{longnum;charname[10];intscore[3];/*存放三门课成绩*/floataverage;/*/平均成绩*/}stu;voidintput(stus[],intn)/*输入数据*/{inti,j;/*i表示处理学生的下标,J表示成绩编号*/for(i=0;i<n;i++){printf("inputnum:\n");scanf("%ld",&s[i].num);printf("inputname:\n");scanf("%s",s[i].name);printf("input3score:\n");for(j=0;j<3;j++)scanf("%d",&s[i].score[j]);}}voidstu_av(stus[],intn)/*求每个学生的平均成绩*/{inti,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/;}}floatav(stus[],intn)/*求总平均成绩*/{inti;floatsum=,ave;for(i=0;i<n;i++)sum+=s[i].average;ave=sum/n;return(ave);}intmax(stus[],intn)/*求平均成绩最高学生的下标*/{inti,maxi=0;for(i=1;i<n;i++)if(s[i].average>s[maxi].average)maxi=i;return(maxi);}main(){intmaxi,j;stua[N];/*定义变量*/intput(a,N);stu_av(a,N);printf("thescoreaverageis%f\n",av(a,N));maxi=max(a,N);printf("themaxaveragestudentdata:\n");printf("%10ld",a[maxi].num);printf("%10s",a[maxi].name);for(j=0;j<3;j++)printf("%5d",a[maxi].score[j]);printf("%",a[maxi].average);getch();}实验二1、#include<>#defineMaxLen50typedefintelemtype;structdatatype{elemtype*elem;intlength;};typedefstructdatatypesqlist;voidcreate(sqlist*a){inti,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);}}voidinvert(sqlist*a){intm=a->length/2,i;elemtypetemp;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;}}voiddisp(sqlist*a){inti;for(i=0;i<a->length;i++)printf("%5d:%d\n",i+1,*(a->elem+i));getch();}voidmain(){sqlista;create(&a);disp(&a);invert(&a);disp(&a);}2、#include<>#include<>#defineNULL0typedefintelemtype;typedefstructlinknode{elemtypedata;structlinknode*next;}nodetype;nodetype*create(){elemtyped;nodetype*h,*s,*t;inti=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++;}returnh;}voiddisp(nodetype*h){nodetype*p=h;printf("输出一个单链表:\n");if(p==NULL)printf("空表");while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");getch();}intlen(nodetype*h){inti=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;returnh;}}voidmain(){nodetype*head;head=create();disp(head);head=invert(head);disp(head);}4、(1)#include<>#defineMaxLen50typedefstruct{longnum;intscore;}elemtype;typedefstructdatatype{elemtype*elem;intlength;}sqlist;voidcreate(sqlist*a){longi=0,n;ints;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;}voiddisp(sqlist*a){inti;for(i=0;i<a->length;i++)printf("%5d:%ld%d\n",i+1,(a->elem)[i].num,(a->elem)[i].score);getch();}voidmain(){sqlista;create(&a);disp(&a);}(2)见5(2)5、(1)#include<>#defineMaxLen50typedefstruct{longnum;intscore;}elemtype;typedefstructdatatype{elemtype*elem;intlength;}sqlist;voidcreate(sqlist*a){longi=0,n;ints;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;}voidsort(sqlist*a){inti,j,k,s;longn;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;}}}voiddisp(sqlist*a){inti;for(i=0;i<a->length;i++)printf("%5d:%ld%d\n",i+1,(a->elem)[i].num,(a->elem)[i].score);getch();}voidmain(){sqlista;create(&a);disp(&a);sort(&a);disp(&a);}(2)#include<>#include<>#defineNULL0typedefstructlinknode{longnum;intscore;structlinknode*next;}nodetype;nodetype*create(){longn;intsc;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;returnh;}voiddisp(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;}returnh;}voidmain(){nodetype*head;head=create();disp(head);head=sort(head);disp(head);}实验三:7、试写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中不包含字符’&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属于该模式的字符序列,而‘1+2&2-1intIsReverse()0’(3)本小题中一条对角线是A[i][i],其中(0≤i≤m-1),另一条对角线是A[m-i-1,i],其中(0≤i≤m-1),因此用循环实现即可。实现本题功能的程序如下:#include<>/*实现(1)小题功能的函数*/voidproc1(maxixA){ints=0,i,j;for(i=0;i<m;i++)/*第一列*/s=s+A[i][1];for(i=0;i<m;i++)/*最后一列*/s=s+A[i][n];for(j=0;j<n;j++)/*第一行*/s=s+A[1][j];for(j=0;j<m;j++)/*最后一行*/s=s+A[m][j];for(j=0;j<n;j++)/*第一行*/s=s+A[1][j];for(j=0;j<m;j++)/*最后一行*/s=s+A[m][j];s=s-A[0][0]-A[0][n-1]-A[m-1][0]-A[m-1][n-1];/*减去4个角的重复元素值*/printf("s=%d\n",s);}/*实现(2)小题功能的函数*/voidproc2(maxixA){ints=0,i,j;i=0;while(i<m){j=0;while(j<n){s=s+A[i][j];j=j+2;/*跳过一列*/}i=i+2;/*跳过一行*/}printf("s=%d\n",s);}/*实现(3)小题功能的函数*/voidproc3(maxixA){inti,s;if(m!=n)printf("m≠n");else{s=0;for(i=0;i<m;i++)s=s+A[i][i];/*求第一条对角线之和*/for(i=0;i<n;i++)s=s+A[n-i-1][i];/*累加第二条对角线之和*/printf("s=%d\n",s);}}main(){intm,n,i,j;maxixA;printf("m,n:");scanf("%d,%d",&m,&n);printf("元素值:\n");for(i=0;i<m;i++)/*建立数组A*/for(j=0;j<n;j++)scanf("%d",&A[i][j]);proc1(A);/*调用proc1()*/proc2(A);/*调用proc2()*/proc3(A);/*调用proc3()*/}8、假设稀疏矩阵A采用三元组表示,编写一个函数计算其转置矩阵B,要求B也采用三元组表示。解:三元组表示中要求按行的顺序存放,所有转置过程不能直接将行下标和列下标

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论