《C语言程序设计教程》(主编黄迪明、余勤)第七章课后习题答案

       在阅读代码前,先说一下这本书的在版编目(CIP)数据:C语言程序设计教程/黄迪明、余勤主编.--北京:国防工业出版社,2006.5    ISBN 7-118-04516-0

       所有代码均在 VS2013中成功运行。第一次写博客,若有不妥之处,非常欢迎您提出问题,若能提出改进意见,不胜感激!


7.1  编写函数,计算20个数中的最大值、最小值和平均值,由main()函数调用该函数,并输出结果。(要求:使用全局变量max和min返回最大值和最小值)

#include
void input(int *pt, int n);
int max(int *pt, int n);
int min(int *pt, int n);
float average(int *pt, int n);
void output(int ma, int mi,float ave);
void input(int *pt, int n)
{
	int *p, i = 1;
	p = pt;
	for (; p < pt+n; p++)
	{
		printf("请输入第 %d 个数:",i++);
		scanf("%d",p);
	}
}
int max(int *pt, int n)
{
	int *p;
	int ma = *pt;
	p = pt;
	for (; p < pt+n; p++)
	{
		if (ma<*p)
		{
			ma = *p;
		}
	}
	return ma;
}
int min(int *pt, int n)
{
	int *p;
	int mi = *pt;
	p = pt;
	for (; p < pt + n; p++)
	{
		if (mi>*p)
		{
			mi = *p;
		}
	}
	return mi;
}
float average(int *pt, int n)
{
	int sum = 0, *p;
	float ave = 0;
	p = pt;
	for (; p < pt+n; p++)
	{
		sum = sum + *p;
	}
	ave = (float)sum / n;
	return ave;
}
void output(int ma, int mi, float ave)
{
	printf("最大值为:%d\n",ma);
	printf("最小值为:%d\n", mi);
	printf("平均值为:%f\n", ave);
}
void main()
{
	printf("编写函数,计算20个数中的最大值、最小值和平均值,由main()函数调用该函数,并输出结果。\n\n");
	int n = 0, *pt;
	printf("请输入要输入数的个数:");
	scanf("%d",&n);
	pt = (int*)malloc(sizeof(int)*n);
	int ma = 0, mi = 0;
	float ave = 0;
	input(pt,n);
	ma=max(pt,n);
	mi=min(pt, n);
	ave=average(pt,n);
	output(ma,mi,ave);
	getch();
}


7.2  编写函数,计算两个整数的最大公约数和最小公倍数。由main()调用该函数,并输出结果,这两个数由键盘输入。

#include
int maxyue(int a,int b);
int minbei(int a, int b);
int maxyue(int a, int b)
{
	if (a%b==0)
	{
		return b;
	}
	else
	{
		maxyue(b, a%b);
	}
}
int minbei(int a, int b)
{
	return a*b / maxyue(a, b);
}
void main()
{
	printf("计算两个整数的最大公约数和最小公倍数。\n\n");
	int a = 0, b = 0, gysh = 0, gbsh = 0;
	printf("请输入第一个数的值:");
	scanf("%d",&a);
	printf("请输入第二个数的值:");
	scanf("%d", &b);
	gysh = maxyue(a,b);
	gbsh = minbei(a, b);
	printf("\n%d 和 %d 的最大公约数是:%d\n",a,b,gysh);
	printf("\n%d 和 %d 的最小公倍数是:%d\n", a, b, gbsh);
	getch();
}


7.3  编写程序,使用动态内存分配方式,对10个数从小到大排序。

#include
void input(int *pt, int n);
void range(int *pt, int n);
void output(int *pt,int n);
void input(int *pt, int n)
{
	int *p, i = 1;
	p = pt;
	for (; p < pt + n; p++)
	{
		printf("请输入第 %d 个数:", i++);
		scanf("%d", p);
	}
}
void range(int *pt, int n)
{
	int i=0,j=0, temp=0, k = 0;
	for (i=1;i*(pt+j+1))
			{
				temp = *(pt + j);
				*(pt + j) = *(pt + j + 1);
				*(pt + j + 1) = temp;
			}
			k=1;
		}
		if (k==0)
		{
			break;
		}
	}
}
void output(int *pt, int n)
{
	int *pt1, k = 0;
	for ( pt1 = pt; pt1 < pt+n; pt1++)
	{
		printf("%6d",*pt1);
		k = k + 1;
	}
	if (k%5==0)
	{
		printf("\n");
	}
}
void main()
{
	printf(" 编写程序,使用动态内存分配方式,对10个数从小到大排序。\n\n");
	int *pt=NULL, n=0;
	printf("请输入数的个数:");
	scanf("%d",&n);
	pt = (int*)malloc(sizeof(int)*n);
	input(pt, n);
	range(pt, n);
	output(pt, n);
	getch();
}



7.4  分别编写两个源程序文件,在一个文件中输入10个整数并输出结果,在另一个文件中对这10个数进行排序。

      (1)输入10个整数并输出结果的文件:

#include
void input(int *pt, int n);
void range(int *pt, int n);
void output(int *pt,int n);
void input(int *pt, int n)
{
	int *p, i = 1;
	p = pt;
	for (; p < pt + n; p++)
	{
		printf("请输入第 %d 个数:", i++);
		scanf("%d", p);
	}
}

void output(int *pt, int n)
{
	int *pt1, k = 0;
	for ( pt1 = pt; pt1 < pt+n; pt1++)
	{
		printf("%6d",*pt1);
		k = k + 1;
	}
	if (k%5==0)
	{
		printf("\n");
	}
}
void main()
{
	int *pt=NULL, n=0;
	printf("请输入数的个数:");
	scanf("%d",&n);
	pt = (int*)malloc(sizeof(int)*n);
	input(pt, n);
	range(pt, n);
	output(pt, n);
	getch();
}
         (2) 对这10个数进行排序的文件

void range(int *pt, int n)
{
	int i = 0, j = 0, temp = 0, k = 0;
	for (i = 1; i*(pt + j + 1))
			{
				temp = *(pt + j);
				*(pt + j) = *(pt + j + 1);
				*(pt + j + 1) = temp;
			}
			k = 1;
		}
		if (k == 0)
		{
			break;
		}
	}
}
具体写的两个文件如下图所示:

《C语言程序设计教程》(主编黄迪明、余勤)第七章课后习题答案_第1张图片




        

                                                                                               业精于勤荒于嬉,行成于思毁于随。撸代码的你,好好加油吧!



你可能感兴趣的:(余勤课后习题答案)