C Primer Plus第十章复习题参考答案

C Primer plus

 

目录

10.12复习题

13下面有两个函数原型:

10.3 编程练习

1修改程序10.7的rain.c程序,用指针进行计算(仍然要声明并初始化数组)。

2.​

3.编写一个函数,返回存储在int类型数组中的最大值,并在一个简单的程序中测试该函

4.编写一个函数,返回存储在double类型数组中的最大值的下标,并在一个简单程序中测试该函数。

5.编写一个函数,返回储存在double类型数组中最大值和最小值的差值,并在一个简单的程序中测试该函数。

6.编写一个函数,把double类型数组中的数据倒序排列 ,并在一个简单的程序中测试该函数。

7.编写一个函数,初始化一个double类型的二维数组,使用编程练习2中的一个拷贝函数把该数组中的数据拷贝至另一个二维数组中(因为二维数组是数组的数组,所以可以使用处理一维函数的拷贝函数处理数组中每个子数组)。

8,使用编程练习2中的拷贝函数,把一个内含7个元素的数组中第3~第5个元素拷贝至内含3个元素的数组中。该函数本身不需要修改,只需要选择合适的参数(实际参数不需要是数组名和数组的大小,只需要是数组的地址和待处理元素的个数)。

9.编写一个程序,初始化一个double类型的3*5二维数组,使用一个处理变长数组的函数将其拷贝至另一个二维函数中。还要编写一个以变长数组为形参的函数以显示二个数组的内容。这两个函数应该能处理任意N*M数组(如果编译器不支持变长数组,就使用传统c函数处理n*5的数组)。

10.编写一个函数,把两个数组中相对应的元素相加,然后把结果存到第3个数组中。也就是说,如果数组1中包含的是2,4,5,8,数组2中包含的是1,0,4,6,那该函数把3,4,9,14赋给第三个数组。函数接受3个数组名和一个数组大小。在一个简单的程序中测试该函数。

11.编写一个程序,声明一个int类型的3*5的数组,并用合适的值初始化它。该程序打印数组中的值,然后各值翻倍(即是原来值的二倍),并显示出个元素的新值。编写一个函数显示数组内容、在编写一个值把各元素的值翻倍。这两个函数都已函数名和行数作为参数。

 12.

13.​

 14,


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 
#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.C Primer Plus第十章复习题参考答案_第1张图片

#include
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

3.编写一个函数,返回存储在int类型数组中的最大值,并在一个简单的程序中测试该函

#include
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

4.编写一个函数,返回存储在double类型数组中的最大值的下标,并在一个简单程序中测试该函数。

#include
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

5.编写一个函数,返回储存在double类型数组中最大值和最小值的差值,并在一个简单的程序中测试该函数。

#include
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;ba[b])
        e=a[b];//存最小值
    }
    printf("最大值为%f\n最小值为%f\n",c,e);
    return c-e;
}   

6.编写一个函数,把double类型数组中的数据倒序排列 ,并在一个简单的程序中测试该函数。

#include
void dog(double a[],int n);
int main()
{
    double a[6]={1.1,2.2,3.3,4.4,5.5,6.6};
    dog(a,6);
}
void dog(double a[],int n)
{
    int b;
    n=n-1;
    for(b=-1;b

7.编写一个函数,初始化一个double类型的二维数组,使用编程练习2中的一个拷贝函数把该数组中的数据拷贝至另一个二维数组中(因为二维数组是数组的数组,所以可以使用处理一维函数的拷贝函数处理数组中每个子数组)。

#include
void copy(double a[][2], double b[][2],int n);
int main()
{
    double a[2][2]={{1.1,2.2},{3.3,4.4}};
    double b[2][2];
    copy(a,b,2);   
}
void copy(double a[][2], double b[][2],int n)
{
    int c,d;
    for(c=0;c

8,使用编程练习2中的拷贝函数,把一个内含7个元素的数组中第3~第5个元素拷贝至内含3个元素的数组中。该函数本身不需要修改,只需要选择合适的参数(实际参数不需要是数组名和数组的大小,只需要是数组的地址和待处理元素的个数)。

#include
void copy(int a[],int b[],int n);
int main()
{
    int a[7]={[2]=3,4,5};
    int b[3];
    copy(a,b,3);
}
void copy(int a[],int b[],int n)
{
    int c;
    for(c=0;c

9.编写一个程序,初始化一个double类型的3*5二维数组,使用一个处理变长数组的函数将其拷贝至另一个二维函数中。还要编写一个以变长数组为形参的函数以显示二个数组的内容。这两个函数应该能处理任意N*M数组(如果编译器不支持变长数组,就使用传统c函数处理n*5的数组)。

#include
void copy(int a,int b,double c[a][b],double d[a][b]);
void print(int a,int b,double c[a][b]);
int main()
{
    double a[3][5]={{1.1,2.2,3.3,4.4,5.5},
                    {1.1,2.2,3.3,4.4,5.5},
                    {1.1,2.2,3.3,4.4,5.5}};
    double b[3][5];
    copy(3,5,a,b);
    print(3,5,a);
    print(3,5,b);
}
void copy(int a,int b,double c[a][b],double d[a][b])
{
    int e,n;
    for(e=0;e

10.编写一个函数,把两个数组中相对应的元素相加,然后把结果存到第3个数组中。也就是说,如果数组1中包含的是2,4,5,8,数组2中包含的是1,0,4,6,那该函数把3,4,9,14赋给第三个数组。函数接受3个数组名和一个数组大小。在一个简单的程序中测试该函数。

#include
void copy(int n,int a[],int b[],int c[]);
int main()
{
    int a1[4]={2,4,5,8};
    int a2[4]={1,0,4,6};
    int a3[4];
    copy(4,a1,a2,a3);
}
void copy(int n,int a[],int b[],int c[])
{
    int d;
    for(d=0;d

11.编写一个程序,声明一个int类型的3*5的数组,并用合适的值初始化它。该程序打印数组中的值,然后各值翻倍(即是原来值的二倍),并显示出个元素的新值。编写一个函数显示数组内容、在编写一个值把各元素的值翻倍。这两个函数都已函数名和行数作为参数。

#include
void print(int (*a)[5],int n);
void double2(int (*a)[5],int n);
int main()
{
    int a[3][5]={{1,2,3,4,5},
                   {1,2,3,4,5},
                   {1,2,3,4,5},
                   {1,2,3,4,5},
                   {1,2,3,4,5}};
    print(a,3);
    double2(a,3);
}
void print(int (*a)[5],int n)//打印数组的函数
{
    int c,d;
    printf("数组的值:\n");
    for(c=0;c

 12.太累了歇会。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~奥力给~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

13.C Primer Plus第十章复习题参考答案_第2张图片

#include
void store(double a[][5],int n);//把用户输入的数据存储在3*5的数组中
void average(double a[][5],int n);//计算每组的平均值
void average1(double a[][5],int n);//计算所有数的平均值
void size(double a[][5],int n);//所有数字的最大值
int main()
{
    printf("请输入3组数,每组5个小数:\n");
    double a[3][5];
    store(a,3);//把用户输入的数据存储在3*5的数组中
    average(a,3);//计算每组的平均值
    average1(a,3);//计算所有数的平均值
    size(a,3);//所有数字的最大值
}
void store(double a[][5],int n)//把用户输入的数据存储在3*5的数组中
{
    int e,c;
    for(e=0;e

 14,

void size(int n,int b,a[n][b])//a是一个变长数组

bye bye开启下一章的学习之旅。

你可能感兴趣的:(开发语言,c语言)