实验一
题目:原样输入实验指导书实验六exp6_1.c源代码。要求: ① 编辑、编译、链接并运行程序,观察运行结果。 ② 观察4个用于交换的函数,观察对应的形参与实参,注意正确的调用形式。分析为什么有的能实现实参变量的交换而有的不能。 ③ 用F10键单步跟踪程序,运行到函数调用语句时改用F11键,进入被调函数内再用F10键观察每一步程序运行时实参与形参的作用域以及值的变化情况。
源代码:
`#include<stdio.h>
void input(double a[], int n)
{
double* p = a;
for (p = a; p < a + n; p++);
scanf_s("%lf", p);
}
void output(double a[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%5.2f\t%p\n", a[i],a+i);
}
double ave(double a[], int n, double* pmax, double* pmin)
{
int i;
double s = a[0];
*pmax = *pmin = a[0];
for (i = 1; i < n; i++)
{
if (a[i] > *pmax)
*pmax = a[i];
else if (a[i] < *pmin)
*pmin = a[i];
s += a[i];
}
return s / n;
}
void sort(double a[], int n)
{
double* p, * q,t;
for(p=a;p<a+n-1;p++)
for (q = p + 1; q < a + n; q++)
{
if (*p > *q)
{
t = *p;
*p = *q;
*q = t;
}
}
}
int main()
{
double array[10], * p;
return 0;
}`
运行结果:
after swap1,x=3,y=5
after swap1,x=5,y=5
after swap1,x=5,y=3
after swap1,x=3,y=5
报告结果:
实验二
题目:定义一维数组和一级指针double array[10],*p,并依次完成如下功能: ①从键盘读入10个实数,保存到array数组中,通过指针p间接引用所有元素。 ②打印这10元素及其对应的地址,通过下标法访问所有的元素。 ③分别找出这组数的最大最小值,计算平均值并输出,通过指针p间接引用元素。 ④对这10个数自选某种方法进行由小到大的排序,通过指针p间接引用所有元素。 ⑤打印排序后数组的所有元素,通过指针p间接引用所有元素。 要求:所有的功能均定义函数,在主函数中进行调用实现,注意参数的正确使用。
源代码:
#include<stdio.h>
void input(double a[], int n)
{
double *p;
for (p = a;p < a + n;p++)
scanf_s("%lf", p);
}
void output(double a[], int n)
{
int i;
for (i = 0;i < n;i++)
printf("%5.2f\t%p\n", a[i],a+i);
}
double ave(double a[], int n, double* pmax, double* pmin)
{
int i;
double s = a[0];
*pmax = *pmin = a[0];
for (i = 0;i < 0;i++)
{
if (a[i] > *pmax)
*pmax = a[i];
else if (a[i] < *pmin)
*pmin = a[i];
s += a[i];
}
return s / n;
}
void sort(double a[], int n)
{
double* p, * q,t;
for (p = a;p < a + n - 1;p++)
for(q = p + 1;q < a + n;q++)
{
if (*p > *q)
{
t = *p;
*p = *q;
*q = t;
}
}
}
int main()
{
double array[10], *p,max,min,average;
p = array;
input(p, 10);
output(p, 10);
average = ave(p, 10, &max, &min);
printf("max=%f,min=%f,average=%f\n", max, min, average);
sort(p, 10);
output(p, 10);
return 0;
}
上面是成功运行出来的,下面是博主尝试了n次还是失败的代码:
#include <stdio.h>
void input(double a[], int n)
{
double* p;
for (p = a; p < a + n; p++);
scanf_s("%lf", p);
}
void output(double a[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%5.2f\t%p\n", a[i], a + i);
}
double ave(double a[], int n, double* pmax, double* pmin)
{
int i;
double s = a[0];
*pmax = *pmin = a[0];
for (i = 1; i < n; i++)//后来发现了这边不一样,但修改后还是那样显示错误
{
if (a[i] > *pmax)
*pmax = a[i];
else if (a[i] < *pmin)
*pmin = a[i];
s += a[i];
}
return s/n;
}
void sort(double a[], int n)
{
double* p, * q, t;
for (p = a; p < a + n - 1; p++)
for (q = p + 1; q < a + n; q++)
{
if (*p > *q)
{
t = *p;
*p = *q;
*q = t;
}
}
}
int main()
{
double array[10], * p, max, min, average;
p = array;
input(p, 10);
output(p, 10);
average = ave(p, 10, &max, &min);
printf("max=%f,min=%f,average=%f\n", max, min, average);
sort(p, 10);
output(p, 10);
return 0;
}
错误显示:
还会开始调试
未完待续。