数据结构上机实验答案.docx

上传人:b****8 文档编号:10363167 上传时间:2023-02-10 格式:DOCX 页数:38 大小:24.46KB
下载 相关 举报
数据结构上机实验答案.docx_第1页
第1页 / 共38页
数据结构上机实验答案.docx_第2页
第2页 / 共38页
数据结构上机实验答案.docx_第3页
第3页 / 共38页
数据结构上机实验答案.docx_第4页
第4页 / 共38页
数据结构上机实验答案.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

数据结构上机实验答案.docx

《数据结构上机实验答案.docx》由会员分享,可在线阅读,更多相关《数据结构上机实验答案.docx(38页珍藏版)》请在冰豆网上搜索。

数据结构上机实验答案.docx

数据结构上机实验答案

《数据结构实验指导书》答案

实验一:

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;ilength;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;ilength;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;ilength;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;ilength-1;i++)

{k=i;

for(j=i+1;jlength;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;ilength;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()//判

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1