数据结构上机实验答案.docx
- 文档编号:10363167
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:38
- 大小:24.46KB
数据结构上机实验答案.docx
《数据结构上机实验答案.docx》由会员分享,可在线阅读,更多相关《数据结构上机实验答案.docx(38页珍藏版)》请在冰豆网上搜索。
数据结构上机实验答案
《数据结构实验指导书》答案
实验一:
1、请编写函数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");
}
2、计算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));
}
3、函数的功能是求数组a中最大数的位置(位序号)。
在主函数中输入10个整数、调用函数fun、输出结果。
#defineN10
#include
voidinput(int*a,intn)
{
inti;
for(i=0;i scanf("%d",a+i);/*scanf("%d",&a[i]);*/ } intfun(int*a,intn) { inti,*max; max=a; for(i=1;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 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 { 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 scanf("%d",a+i);/*scanf("%d",&a[i]);*/ } voidoutput(int*a,intn) { inti; printf("\ntheoddis: \n"); for(i=0;i printf("%5d",*(a+i));/*printf("%d",a[i]);*/ } intfun(int*a,int*b,intn) { inti,j=0; for(i=0;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 scanf("%d",a+i);/*scanf("%d",&a[i]);*/ } voidoutput(int*a,intn) { inti; printf("\ntheresultis: \n"); for(i=0;i printf("%5d",*(a+i));/*printf("%d",a[i]);*/ } voidfun(int*a,intn) { inti,*max,*min,temp; max=min=a; for(i=1;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 for(j=0;j scanf("%d",&a[i][j]); } voidoutput(inta[][4],intn) { inti,j; printf("\ntheresultis: \n"); for(i=0;i {printf("\n"); for(j=0;j printf("%4d",*(*(a+i)+j));/*printf("%d",a[i][j]);*/ } } voidfun(inta[][4],intn) { inti,j,temp; for(i=0;i for(j=0;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); }_ 8、请编写函数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 #defineN2 typedefstructstudent/*定义数据结构(数据类型)*/ {longnum; charname[10]; intscore[3];/*存放三门课成绩*/ floataverage;/*/平均成绩*/ }stu; voidintput(stus[],intn)/*输入数据*/ {inti,j;/*i表示处理学生的下标,J表示成绩编号*/ for(i=0;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 { sum=0; for(j=0;j<3;j++) sum+=s[i].score[j]; s[i].average=sum/3.0; } } floatav(stus[],intn)/*求总平均成绩*/ { inti; floatsum=0.0,ave; for(i=0;i sum+=s[i].average; ave=sum/n; return(ave); } intmax(stus[],intn)/*求平均成绩最高学生的下标*/ { inti,maxi=0; for(i=1;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("%5.1f",a[maxi].average); getch(); } 实验二 1、 #include #defineMaxLen50 typedefintelemtype; 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 { printf("输入第%d个元素值: ",i+1); scanf("%d",a->elem+i); } } voidinvert(sqlist*a) { intm=a->length/2,i; elemtypetemp; for(i=0;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 printf("%5d: %d\n",i+1,*(a->elem+i)); getch(); } voidmain() { sqlista; create(&a); disp(&a); invert(&a); disp(&a); } 2、 #include #include #defineNULL0 typedefintelemtype; 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 #defineMaxLen50 typedefstruct {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 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 #defineMaxLen50 typedefstruct {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 {k=i; for(j=i+1;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 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 #defineNULL0 typedefstructlinknode { 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-1’则不是。 intIsReverse()//判
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 上机 实验 答案