c Primer Plus 第六版 第十章 编程练习

本文提供了C Primer Plus第六版第十章的编程练习解答,涵盖了从降水量计算到数组操作、平均值计算、最大值查找等多道题目,通过实际代码示例帮助读者理解和掌握C语言编程技巧。

@[c Primer Plus 第六版 第十章 编程练习]

#第一题
//rain.c–计算每年的总降水量、年平均降水量和5年中每月的平均降水量
#include<stdio.h>
#define MONTHS 12
#define YEARS 5
int main(void)
{
//用2010~2014年的降水量数据初始化数组
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;  //5年的总降水量
}
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++)
//5年内每月的降水量总和
{
    for (year=0, subtot=0; year<YEARS; year++)
        subtot +=*(*(rain+year)+month);
    printf("%4.1f ", subtot / YEARS);
}

printf("\n");

getchar();
return 0;

}

#第二题
#include <stdio.h>
void copy_arr(double ar1[], double ar[], int n);
void copy_ptr(double *ar1, double *ar, int n);
void copy_ptrs(double *ar3, double *ar, double *n);
int main(void)
{
int i;

double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
double target1[5];
double target2[5];
double target3[5];

copy_arr(target1, source, 5);
copy_ptr(target2, source, 5);
copy_ptrs(target3, source, source+5);

for(i=0; i<5; i++)
    printf("%f ", target1[i]);
printf("\n");
for(i=0; i<5; i++)
    printf("%f ", target2[i]);
printf("\n");
for (i=0; i<5; i++) 
    printf("%f ", target3[i]);
printf("\n");

getchar();
return 0;

}

void copy_arr(double ar1[], double ar[], int n)
{
int i;
for (i=0; i<n; i++)
{
ar1[i]=ar[i];
}
}

void copy_ptr(double *ar2, double ar, int n)
{
int i;
for (i=0; i<n; i++)
{
ar2[i]=
(ar+i);
}
}

void copy_ptrs(double *ar3, double *ar, double *n)
{
while(ar<=n)
{
*ar3=*ar;
ar3++;
ar++;
}

return;

}

#第三题
#include<stdio.h>
int max(int ar[], int n);
int main(void)
{
int top;
int ar[10]={1, 2, 3, 4, 5, 346, 2545, 254, 28, 9999};
top=max(ar, 10);
printf(“top = %d”, top);

getchar();
return 0;

}

int max(int ar[], int n)
{
int temp, i;
for (i=0, temp=0; i<n; i++)
{
if (ar[i]>temp)
temp=ar[i];
}

    return temp;

}

#第四题
#include<stdio.h>
int sig(double ar[], int n);
int main(void)
{
int x;
double ar[]={45, 1, 2, 3, 56, 5, 6, 7, 8, 9};
x=sig(ar, 10);
printf(“The maximum number is ar[%d] = %f”, x, ar[x]);

getchar();
return 0;

}

int sig(double ar[], int n)
{
int x, i;
double temp;
for (i=0, temp=0.0; i<n; i++)
{
if (ar[i]>temp)
{
temp=ar[i];
x=i;
}
}
return x;
}

#第五题
#include <stdio.h>
double difference(double ar1[], int n);
int main(void)
{
double x;
double ar[]={2,3,4,5,6,7,8,9};
x=difference(ar, 8);
printf(“The difference value into AR is %lf\n”, x);

getchar();
return 0;

}

double difference(double ar1[], int n)
{
double min, max;
int i;
for (i=0, max=0; i<n; i++) //求最大值
{
if (ar1[i]>max)
max=ar1[i];
}
for (i=0, min=ar1[0]; i<n; i++)
{
if (ar1[i]<min)
min=ar1[i];
}
return max-min;
}

#第六题
#include<stdio.h>
double reverse(double ar[], int n);
int main(void)
{
int i;
double ar[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
reverse(ar, 11);

printf("ar[]={");
for (i=0; i<10; i++)
    printf("%.2lf, ", ar[i]);
printf("%.2lf}", ar[10]);

getchar();
return 0;

}

double reverse(double ar[], int n)
{
int i;
double temp;
for(i=0; i<n/2; i++)
{
temp=ar[i];
ar[i]=ar[n-i-1];
ar[n-i-1]=temp;
}
}

#第七题 我做错了

#第八题
#include<stdio.h>
#define SIZE 3
void trans(int *ar1, int *ar2, int num);
int main(void)
{
int i;
int arr[7]={1,2,3,4,5,6,7};
int arr2[3];
int *par;
par=arr;
trans(arr2, arr, SIZE);
for (i=0; i<7; i++)
printf("%d “, arr[i]);
printf(”\n");
for (i=0; i<SIZE; i++)
printf("%d ", arr2[i]);

getchar();
return 0;

}

void trans(int *ar1, int *ar2, int num)
{
int i;
int j=2;
for (i=0; i<num; i++)
{
(ar1+i)=(ar2+i+j);
}
}

#第九题
#include <stdio.h>
void cop_y(int m, int n, double ar1[m][n], double ar2[m][n]);
void print_f(int m, int n, double ar[m][n]);
int main(void)
{
double arr[3][5]={
{35.0, 35456.0, 45.0, 546.0, 365.0},
{35.0, 35.0, 3564.0, 3451.0, 1.2},
{321.0, 54.0, 6546.0, 21.0, 21.0}
};
double arr2[3][5];
cop_y(3, 5, arr, arr2);

printf("There is array1:\n");
print_f(3, 5, arr);
printf("\n");
printf("There is array2:\n");
print_f(3, 5, arr2);

getchar();
return 0;

}

void cop_y(int m, int n, double ar1[m][n], double ar2[m][n])
{
int i, j;
for (i=0; i<m; i++)
for (j=0; j<n; j++)
ar2[i][j]=ar1[i][j];
}

void print_f(int m, int n, double ar[m][n])
{
int i, j;
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
printf("%-10.2lf", ar[i][j]);
printf("\n");
}
printf("\n");
}

#第十题
#include <stdio.h>
void add(int n, int *ar1, int *ar2, int *ar3);
void print_f(int n, int ar[n]);
int main(void)
{
int arr1[4]={2,4,5,8};
int arr2[4]={1,0,4,6};
int arr3[4];

add(4, arr1, arr2, arr3);
print_f(4, arr1);
print_f(4, arr2);
print_f(4, arr3);

getchar();
return 0;

}

void add(int n, int *ar1, int *ar2, int *ar3)
{
int i, temp;
for (i=0; i<n; i++)
ar3[i]=ar1[i]+ar2[i];
}

void print_f( int n, int ar[n])
{
int i;
for (i=0; i<n; i++)
printf("%-10d", ar[i]);
printf("\n");
}

#第十一题
#include <stdio.h>
void f_double(int n, int ar[][5]);
void print_f(int n, int ar[][5]);
int main(void)
{
int arr1[3][5]={
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}
};

print_f(3, arr1);
f_double(3, arr1);
print_f(3, arr1);

getchar();
return 0;

}

void f_double(int n, int ar[][5])
{
int i, j;
for (i=0; i<n; i++)
for (j=0; j<5; j++)
((ar+i)+j)=((ar+i)+j) *2;
}

void print_f (int n, int ar[][5])
{
int i, j;
for (i=0; i<n; i++)
{
for (j=0; j<5; j++)
printf("%10d", ((ar+i)+j));
printf("\n");
}
printf("\n");
}

#第十二题
//refer to 11.c

#第十三题
#include <stdio.h>
void f_input(int n, int m, double ar[n][m]);
double f_average(int n, int m, double ar[n][m]);
double f_total_aver(int n, int m, double ar[n][m]);
double f_max(int n, int m, double ar[n][m]);

int main(void)
{
int i, j;
i=3;
j=5;
double ar[i][j];
//录入数组
f_input(i, j, ar);

int x;
for (x=0; x<i; x++)
{
//求每组平均数
    printf("The average of array[%d] is %-10lf", x, f_average(x, j, ar));
}
printf("\n");

//求总平均数
printf("Total average is %-10lf\n", f_total_aver(i, j, ar));

//求最大值
printf("The maximum of total array is %lf.\n", f_max(i, j, ar));

getchar();
getchar();
return 0;

}

void f_input(int n, int m, double ar[n][m])
//录入数组
{
int i, j;
for (i=0; i<n; i++)
for(j=0; j<m; j++)
scanf("%lf", &ar[i][j]);
}

double f_average(int n, int m, double ar[n][m])
//求每组数的平均数
{
int i;
double sum;
for (i=0; i<m; i++)
sum +=ar[n][i];
printf("\n");
return sum/m;
}

double f_total_aver(int n, int m, double ar[n][m])
//求总平均数
{
int i, j;
double sum;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
sum+=ar[i][j];
printf("\n");
return sum/(nm); //nm等于所有元素的数量
}

double f_max(int n, int m, double ar[n][m])
{
int i, j;
double temp=0.0;
//找最大值
for (i=0; i<n; i++)
for(j=0; j<m; j++)
{
if (ar[i][j]>temp)
temp=ar[i][j];
}
printf("\n");

return temp;

}

#第十四题
//refer to 14.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值