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

被折叠的 条评论
为什么被折叠?



