《C Primer Plus 第五版》第十章编程练习
来源:互联网 发布:js控制div缓慢移动 编辑:程序博客网 时间:2024/05/01 15:47
2、编写一个程序,初始化一个double数组,然后把数组内容复制到另外两个数组(3个数组都需要在主程序中声明)。制作第一份拷贝的函数使用数组符号。制作第二份拷贝的函数使用指针符号,并使用指针的增量操作。把目标数组名和要复制的元素数目作为参数传递给函数。也就是说,如果给定了下列声明,函数调用应该如下面所示:
double source[5]={1.1,2.2,3.3,4.4,5.5};
double target1[5];
double target2[5];
copy_arr(source,target1,5);
copy_ptr(source,target2,5);
#include <stdio.h>void copy_arr(double [],double [],int);void copy_ptr(double *,double *,int);int main(void){double source[5]={1.1,2.2,3.3,4.4,5.5};double target1[5];double target2[5];int num=5;int a;printf(" Source:");for(a=0;a<5;a++)printf(" %g ",source[a]);copy_arr(source,target1,5);copy_ptr(source,target2,5);return 0;}void copy_arr(double source[],double target1[],int i){int a;printf("\ntarget1:");for(a=0;a<i;a++){target1[a]=source[a];printf(" %g ",target1[a]);}}void copy_ptr(double *source,double *target2,int i){int b;printf("\ntarget2:");for(b=0;b<i;b++){ *(target2 + b) = *(source + b) ; printf(" %g ",target2[b]);}}
4.编写一个函数,返回一个double数组中储存的最大数值的索引,并在一个简单程序中测试这个函数。
#include <stdio.h>#define N 6 int max_arr(const double [], int );void show_arr(const double [], int );int main(void){ double num[N] = {2.1,2.2,4.2,1.3,5.2,3.1}; int max; show_arr(num,N); max = max_arr(num,N); printf("[%d] = largest\n", max); return 0;}int max_arr(const double ar[], int n){ int i,m=0; int max = ar[0]; for (i = 1; i < n; i++) if (max < ar[i]){ max = ar[i]; m=i;} return m;}void show_arr(const double ar[], int n){ int i; for (i = 0; i < n; i++) printf("%g ", ar[i]); putchar('\n');}
6.编写一个程序,初始化一个二维数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的函数来复制数组的每一个子数组)。
#include <stdio.h>#define A 4#define B 6void copy_arr(double [][6],double [][6],int,int);int main(void){double source[A][B]={{1.1,2.2,3.3,4.4,5.5,6.6},{6.6,5.5,4.4,3.3,2.2,1.1},{1.1,2.2,3.3,4.4,5.5,6.6},{6.6,5.5,4.4,3.3,2.2,1.1},};double target[A][B];int a,b;printf("Source:\n");for(a=0;a<A;a++){for(b=0;b<B;b++)printf(" %g ",source[a][b]);putchar('\n');}copy_arr(source,target,4,6);return 0;}void copy_arr(double source[][6],double target[][6],int i,int ii){int a,b;printf("Target:\n");for(a=0;a<i;a++)for(b=0;b<ii;b++)target[a][b]=source[a][b];for(a=0;a<A;a++){for(b=0;b<B;b++)printf(" %g ",target[a][b]);putchar('\n');}}
7.利用练习2中的复制函数,把—个包含7个元素的数组内第3到第5元素复制到一个包含3个元素的数组中。函数本身不需要修改,只需要选择合适的实际参数(实际参数不需要是数组名和数组大小,而只须是数组元素的地址和需要复制的元素数目)。
#include <stdio.h>#define A 7#define B 3void copy_arr(int [],int [],int );int main(void){const int source[A]={2,4,6,8,10,12,14};int target[B];int a;printf("Source:\n");for(a=0;a<A;a++)printf(" %d ",source[a]);copy_arr(&source[2],target,3);return 0;}void copy_arr(int source[],int target[],int i) { int a; printf("\nTarget:\n"); for(a=0;a<i;a++) { target[a]=source[a]; printf(" %d ",target[a]); } }
9.编写一个函数,把两个数组内的元素相加,结果存到第三个数组内。也就是说,如果数组1具有值2、4、5、8,数组2具有值1、0、4、6,则函数对数组3赋值为3、4、9、14。函数的参数包含3个数组命和数组大小。并在一个简单的程序中测试这个函数。
#include <stdio.h>#define A 4void add(int [],int [],int [],int );int main(void){const int one[A]={1,3,5,7};const int two[A]={2,4,6,8};int three[A];int a;printf("one:");for(a=0;a<A;a++)printf(" %d ",one[a]);printf("\ntwo:");for(a=0;a<A;a++)printf(" %d ",two[a]);add(one,two,three,A);return 0;}void add(int one[],int two[],int three[],int i) { int a; printf("\none+two=:"); for(a=0;a<i;a++) { three[a]=one[a]+two[a]; printf(" %d ",three[a]); } }
2.编写一个程序,提示用户输入3个数集,每个数集包括5个double值。程序应当实现下列所有功能:
a.把输入信息存储到一个3x5的数组中
b.计算出每个数集(包含5个数值)的平均值
c.计算所有数值的平均数
d.找出这15个数中的最大值.
e.打印出结果
每个任务需要用一个单独的函数来实现(使用传统C处理数组的方法)。对于任务b,需要编写计算并返回一维数组平均值的函数,循环3次调用该函数来实现任务b。对于其他任务,函数应当把整个数组做为参数,并且完成任务c和d的函数应该向它的调用函数返回答案。
#include <stdio.h>#define ROWS 3#define COLS 5 void store(double [], int n);double average2d(int , int , double [][5]);double max2d(int , int , double [][5]);void showarr2(int , int , double [][5]);double average(const double [], int );int main(void){ double stuff[ROWS][COLS]; int row; for (row = 0; row < ROWS; row++) { printf("Enter %d numbers for row %d\n", COLS, row + 1); store(stuff[row], COLS); } printf("array contents:\n"); showarr2(ROWS, COLS, stuff); for (row = 0; row < ROWS; row++) printf("average value of row %d = %g\n", row + 1, average(stuff[row], COLS)); printf("average value of all rows = %g\n", average2d(ROWS, COLS, stuff)); printf("largest value = %g\n", max2d(ROWS, COLS, stuff)); printf("Bye!\n"); return 0;}void store(double ar[], int n){ int i; for (i = 0; i < n; i++) { printf("Enter value #%d: ", i + 1); scanf("%lf", & ar[i]); }} double average2d(int rows, int cols, double ar[][5]){ int r, c; double sum = 0.0; for (r = 0; r < rows; r++) for (c = 0; c < cols; c++) sum += ar[r][c]; if (rows * cols > 0) return sum / (rows * cols); else return 0.0;}double max2d(int rows, int cols, double ar[][5]){ int r, c; double max = ar[0][0]; for (r = 0; r < rows; r++) for (c = 0; c < cols; c++) if (max < ar[r][c]) max = ar[r][c]; return max;}void showarr2(int rows, int cols, double ar[][5]){ int row, col; for (row = 0; row < rows; row++) { for (col = 0; col < cols; col++) printf("%g ", ar[row][col]); putchar('\n'); }}double average(const double ar[], int n){ int i; double sum = 0.0; for (i = 0; i < n; i++) sum += ar[i]; if (n > 0) return sum / n; else return 0.0;}
- 《C Primer Plus 第五版》第十章编程练习
- C primer plus(第五版)编程练习第十章
- c++.primer.plus第五版第十章编程练习答案
- 记录——《C Primer Plus (第五版)》第十章编程练习第十题
- 记录——《C Primer Plus (第五版)》第十章编程练习第五题
- 《C Primer Plus 第五版》第十章(数组和指针)编程练习
- 记录——《C Primer Plus (第五版)》第九章编程练习第十题
- 记录——《C Primer Plus (第五版)》第十章编程练习第一题
- 记录——《C Primer Plus (第五版)》第十章编程练习第二题
- 记录——《C Primer Plus (第五版)》第十章编程练习第三题
- 记录——《C Primer Plus (第五版)》第十章编程练习第四题
- 记录——《C Primer Plus (第五版)》第十章编程练习第六题
- 记录——《C Primer Plus (第五版)》第十章编程练习第七题
- 记录——《C Primer Plus (第五版)》第十章编程练习第八题
- 记录——《C Primer Plus (第五版)》第十章编程练习第九题
- 记录——《C Primer Plus (第五版)》第十章编程练习第十一题
- 记录——《C Primer Plus (第五版)》第十章编程练习第十二题
- C primer plus(第五版)编程练习第五章
- c语言保留字(关键字)汇总
- struts中Action相关
- 【Java学习笔记】基础知识学习5【数组排序,复制】
- Linux 内核配置方式详解
- LINUX core dump详解
- 《C Primer Plus 第五版》第十章编程练习
- python的socket服务器组件
- Trapping Rain Water
- nyist-63
- 报这个错误的原因:No identifier specified for entity:
- <!DOCTYPE>标签的定义与用法
- html自定义checkbox、radio、select —— select篇
- Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
- hdu 1518 Square