数据结构上机实验答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构实验指导书》答案
实验一:
1、请编写函数int fun(int *a, int *b),函数的功能是判断两个指针a和b所指存储单
元的值的符号是否相同;若相同函数返回1,否则返回0。这两个存储单元中的值都不为0。在主函数中输入2个整数、调用函数fun、输出结果。
#include
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
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
void input(int *a,int n)
{
int i;
for (i=0;i scanf("%d",a+i); /*scanf("%d",&a[i]);*/ } int fun(int *a,int n) { int i,*max; max=a; for (i=1;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 void input(int *a,int n) { int i; for (i=0;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 { 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 void input(int *a,int n) { int i; for (i=0;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 printf("%5d",*(a+i)); /*printf("%d",a[i]);*/ } int fun(int *a, int *b,int n) { int i,j=0; for (i=0;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 void input(int *a,int n) { int i; for (i=0;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 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 { 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;}