有什么不对的地方,欢迎给我留言
no1.c
// 修改程序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 ;
float (* p)[MONTHS] = rain ;
for (year = 0 , total = 0 ; year < YEARS ; year++)
{
for (month = 0 , subtot = 0 ; month < MONTHS ; month++)
subtot += p[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 Nov Dec\n");
for(month = 0 ; month < MONTHS; month++)
{
for (year = 0 , subtot = 0 ; year < YEARS ; year++)
subtot += p[year][month] ;
printf("%4.1f " , subtot / YEARS);
}
printf("\n");
return 0 ;
}
no2.c
//编写一个程序,初始化一个double类型的数组, 然后把该数组的内容拷贝至3个其他数组中(在main()函数中声明这4
//个数组).使用带数组表示法的函数进行第1份拷贝.使用带指针表示法和指针递增的函数进行第2份拷贝.把目标数组
//名,源数组名和待拷贝的元素的个数作为前两个函数的参数.第3个函数以目标数组名,源数组名和指向源数组最后一个
//元素后面的元素的指针,也就是说,给定以下声明, 则函数调用如下所示.
//double source[5] = {1.1 , 2.2 , 3.3 , 4.4 , 5.5};
//double targer1[5] ;
//double targer2[5] ;
//double targer3[5] ;
//copy_arr(target1 , source , 5) ;
//copy_ptr(target2 , source , 5) ;
//copy_ptrs(target3 , source , 5) ;
# include <stdio.h>
void copy_arr(double target[] , double source[] , int n);
void copy_ptr(double * target , double * source , int n);
void copy_ptrs(double * target , double * source , double * tarend);
void print_arr(double ar[] , int n);
int main(void)
{
double source[5] = {1.1 , 2.2 , 3.3 , 4.4 , 5.5};
double target1[5] ;
double target2[5] ;
double target3[5] ;
print_arr(source , 5);
copy_arr(target1 , source , 5) ;
copy_ptr(target2 , source , 5) ;
copy_ptrs(target3 , source , target3 + 5) ;
print_arr(target1 , 5);
print_arr(target2 , 5);
print_arr(target3 , 5);
return 0 ;
}
void copy_arr(double target[] , double source[] , int n)
{
for (int i = 0 ; i < n ; i++)
target[i] = source[i] ;
}
void copy_ptr(double * target , double * source , int n)
{
for (int i = 0 ; i < n ; i++ , target++)
*target = source[i] ;
}
void copy_ptrs(double * target , double * source , double * tarend)
{
while (target < tarend)
{
*target++ = *source++ ;
}
}
void print_arr(double ar[] , int n)
{
for (int i = 0 ; i < n ; i++)
printf("%lf " , ar[i]);
printf("\n");
}
no3.c
//编写一个函数,返回储存在int类型数组中最大的值,并在一个简单的程序中测试
# include <stdio.h>
# define SIZE 10
int max_arr(int ar[] , int n );
int main(void)
{
int ar[SIZE] ;
for (int i = 0 ; i < SIZE ; i++)
{
ar[i] = i + 1 ;
printf("%d " , ar[i]);
}
printf("\n");
printf("The array max is %d\n" , max_arr(ar, SIZE));
return 0 ;
}
int max_arr(int ar[] , int n )
{
int max = ar[0];
for (int i = 0 ; i < n ; i++)