C语言实验报告5_56学时

  • Post author:
  • Post category:其他


实验一

题目:原样输入实验指导书实验六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;
}

错误显示:





还会开始调试

未完待续。



版权声明:本文为Seven1_xwx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。