在阅读代码前,先说一下这本书的在版编目(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;
}
}
}
具体写的两个文件如下图所示:
业精于勤荒于嬉,行成于思毁于随。撸代码的你,好好加油吧!