C Primer plus
目录
1修改程序10.7的rain.c程序,用指针进行计算(仍然要声明并初始化数组)。
3.编写一个函数,返回存储在int类型数组中的最大值,并在一个简单的程序中测试该函
4.编写一个函数,返回存储在double类型数组中的最大值的下标,并在一个简单程序中测试该函数。
5.编写一个函数,返回储存在double类型数组中最大值和最小值的差值,并在一个简单的程序中测试该函数。
6.编写一个函数,把double类型数组中的数据倒序排列 ,并在一个简单的程序中测试该函数。
13下面有两个函数原型:
viod show(const double ar[],int n);
viod show2(const double ar2[][3],int n);
a,编写一个函数调用,把一个内含8,3,9,2的复合字面量传递给show()函数。
b,编写一个函数调用,把一个2行3列的符合字面量(8,3,9作为第一行,5,4,1作为第二行)传递给show2()函数。
10.3 编程练习
1修改程序10.7的rain.c程序,用指针进行计算(仍然要声明并初始化数组)。
#include <stdio.h>
#define MONTHS 12
#define YEARS 5
int main(void)
{
const float rain[YEARS][MONTHS] =
{
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
{9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
{7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
{7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
};
int year, month;
float subtot, total;
printf(" YEAR RAINFALL (inches)\n");
for (year = 0, total = 0; year < YEARS; year++)
{
for (month = 0, subtot = 0; month < MONTHS; month++)
{
subtot += *(*(rain + year) + month);
}
printf("%5d %15.1f\n", 2010 + year, subtot);
total += subtot;
}
printf("\nThe yearly average is %.1f inches.\n\n", total / YEARS);
printf("MONTHLY AVERAGES:\n\n");
printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct ");
printf(" Nov Dec\n");
for (month = 0; month < MONTHS; month++)
{
for (year = 0, subtot = 0; year < YEARS; year++)
{
subtot += *(*(rain + year) + month);
}
printf("%4.1f ", subtot / YEARS);
}
printf("\n");
return 0;
}
2.![](https://i-blog.csdnimg.cn/blog_migrate/aed7e17dcb454778fefc29f08351f4cd.jpeg)
#include<stdio.h>
void copy_arr(double target1[], const double source[],int n);
void copy_ptr(double *target2, const double *source,int n);
void copy_ptrs(double *target3,const double *source,double *n);
int main(void)
{
double source[5]={1.1,2.2,3.3,4.4,5.5};
double targetl[5];
double target2[5];
double target3[5];
copy_arr(targetl,source,5);
copy_ptr(target2,source,5);
copy_ptrs(target3,source,source+5);
}
void copy_arr(double target1[], const double source[],int n)
{
int a;
for(a=0;a<n;a++)
{
target1[a]=source[a];
printf("target1[%d]=%f\n",a,target1[a]);
}
}
void copy_ptr(double *target2, const double *source,int n)
{
int a;
for(a=0;a<n;a++)
{
target2[a]=source[a];
printf("target2[%d]=%f\n",a,target2[a]);
}
}
void copy_ptrs(double *target3,const double *source,double *n)
{
int a;
for(a=0;a<n-source;a++)
{
target3[a]=source[a];
printf("target3[%d]=%f\n",a,target3[a]);
}
}
3.编写一个函数,返回存储在int类型数组中的最大值,并在一个简单的程序中测试该函
#include<stdio.h>
int size(int *a,int n);
int main()
{
int b,a[5]={1,2,3,4,5};
b=size(a,5);
printf("最大值为%d",b);
}
int size(int *a,int n)
{
int b,c;
c=a[0];
for(b=0;b<n;b++)
{
if(c<a[b])
c=a[b];
}
return c;
}
4.编写一个函数,返回存储在double类型数组中的最大值的下标,并在一个简单程序中测试该函数。
#include<stdio.h>
int size(double *a,int n);//函数原型
int main()
{
int b;
double a[5]={1.1,2.2,3.3,8.8,5.5};
b=size(a,5);
printf("最大值为%d",b);
}
int size(double *a,int n)
{
int b,d=0;
double c=a[0];
for(b=0;b<n;b++)
{
if(c<a[b])
c=a[b];
}
for(d=0;d<n;d++)
if(c==a[d])
break;
return d;
}
5.编写一个函数,返回储存在double类型数组中最大值和最小值的差值,并在一个简单的程序中测试该函数。
#include<stdio.h>
int size(double *a,int n);//函数原型
int main()
{
double b;
double a[5]={1.1,2.2,3.3,9.9,5.5};
b=size(a,5);
printf("最大值与最小值的差值为%f",b);
}
int size(double *a,int n)
{
int b,d=0;
double c=a[0],e=a[0];
for(b=0;b<n;b++)
{
if(c<a[b])
c=a[b];//存最大值
if(e>a[b])
e=a[b];//存最小值
}
printf("最大值为%f\n最小值为%f\n",c,e);
return c-e;
}