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

xiaoxiao2021-02-28  98

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

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

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

#include<stdio.h> 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<stdio.h> 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<stdio.h> 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<n; i++) { k = 0; for (j = 0; j< n-i; j++) { if (*(pt+j)>*(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("m",*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<stdio.h> 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("m",*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<n; i++) { k = 0; for (j = 0; j< n - i; j++) { if (*(pt + j)>*(pt + j + 1)) { temp = *(pt + j); *(pt + j) = *(pt + j + 1); *(pt + j + 1) = temp; } k = 1; } if (k == 0) { break; } } }具体写的两个文件如下图所示:

        

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

转载请注明原文地址: https://www.6miu.com/read-70578.html

最新回复(0)