C primer plus 10.13
10.13.1
/* rain.c 计算每年的总降水量、年平均降水量和五年中每月的平均降水量*/
#include <stdio.h>
#define MONTHS 12 // 一年的月份数
#define YEARS 5 // 年数
int main(void)
{
// 用2010 - 2014年的降水量初始化数组
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++)
{ // 每个月五年的总降水量
for (year = 0, subtot =0; year < YEARS; year++)
{
subtot += *(*(rain+year)+month);
}
printf("%4.1f ", subtot/YEARS);
}
printf("\n");
return 0;
}
10.13.2
#include<stdio.h>
void copy_arr(double m[5],double n[5],int k);
void copy_ptr(double * m,double * n,int k);
void copy_ptrs(double * m,double * n,double * k);
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];
copy_arr(target1,source,5);
copy_ptr(target2,source,5);
copy_ptrs(target3,source,source+5);
return 0;
}
void copy_arr(double m[5],double n[5],int k)
{
int i;
for(i=0;i<k;i++)
{
m[i]=n[i];
}
for(i=0;i<5;i++)
{
printf("%.1lf ",m[i]);
}
printf("\n");
}
void copy_ptr(double * m,double * n,int k)
{
int i;
for(i=0;i<k;i++)
{
*(m+i)=*(n+i);
}
for(i=0;i<5;i++)
{
printf("%.1lf ",*(m+i));
}
printf("\n");
}
void copy_ptrs(double * m,double * n,double * k)
{
int i;
for(i=0;n<k;n++)
{
*(m+i)=*n;
i++;
}
for(i=0;i<5;i++)
{
printf("%.1lf ",*(m+i));
}
printf("\n");
}
10.13.3
#include<stdio.h>
int bigest_num(int * nums,int SIZE);
int main(void)
{
int nums[10]={10,15,1,23,46,79,56,52,100,41};
printf("%d",bigest_num(nums,10));
return 0;
}
int bigest_num(int * nums,int SIZE)
{
int size;
int i=1;
for(size=1;size<SIZE;size++)
{
if(*nums<*(nums+i))
{
*nums=*(nums+i);
}
i++;
}
return *nums;
}
10.13.4
#include<stdio.h>
int bigest_num(int * nums,int SIZE);
int main(void)
{
int nums[10]={10,15,1,23,46,150,56,52,100,41};
printf("%d",bigest_num(nums,10));
return 0;
}
int bigest_num(int * nums,int SIZE)
{
int size;
int i=1;
int big;
for(size=1;size<SIZE;size++)
{
if(*nums<*(nums+i))
{
*nums=*(nums+i);
big=i;
}
i++;
}
return big;
}
10.13.5
#include<stdio.h>
int bigest_num(int * nums,int SIZE);
int main(void)
{
int nums[10]={62,15,798,23,46,150,56,52,100,41};
printf("%d",bigest_num(nums,10));
return 0;
}
int bigest_num(int * nums,int SIZE)
{
int size;
int i;
int bignum,smallnum;
i=1;
bignum=*nums;
for(size=1;size<SIZE;size++)
{
if(bignum<*(nums+i))
{
bignum=*(nums+i);
}
i++;
}
i=1;
smallnum=*nums;
for(size=1;size<SIZE;size++)
{
if(smallnum>*(nums+i))
{
smallnum=*(nums+i);
}
i++;
}
return bignum-smallnum;
}
10.13.6
#include<stdio.h>
int bigest_num(int * nums,int SIZE);
int main(void)
{
int nums[10]={62,15,798,23,46,150,56,52,100,41};
bigest_num(nums,10);
return 0;
}
int bigest_num(int * nums,int SIZE)
{
int size;
int i;
int k;
for(i=0;i<(SIZE/2);i++)
{
k=*(nums+SIZE-1-i);
*(nums+SIZE-1-i)=*(nums+i);
*(nums+i)=k;
}
for(i=0;i<SIZE;i++)
{
printf("%d",nums[i]);
printf("\n");
}
}
10.13.7
#include<stdio.h>
void copy_ptr(double m[2][5],double n[2][5],double p,double q);
int main(void)
{
double source[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
double target[2][5];
copy_ptr(target,source,2,5);
return 0;
}
void copy_ptr(double m[2][5],double n[2][5],double p,double q)
{
int i;
int j;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
m[i][j]=n[i][j];
}
}
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
printf("%.1lf ",m[i][j]=n[i][j]);
}
printf("\n");
}
}
10.13.8
#include<stdio.h>
void copy_ptr(double * m,double * n,int SIZE);
int main(void)
{
double source[7]={1,2,3,4,5,6,7};
double target[7];
copy_ptr(target,source,3);
return 0;
}
void copy_ptr(double * m,double * n,int SIZE)
{
int size=0;
for(size=0;size<SIZE;size++)
{
*(m+size)=*(n+3+size);
}
for(size=0;size<SIZE;size++)
{
printf("%.2lf ",*(m+size));
}
}
10.13.9
#include<stdio.h>
#define m 3
#define n 5
void copy(int p,int q,double nums[p][q],double copy_target[p][q]);
void show(int p,int q,double nums[p][q],double copy_target[p][q]);
int main(void)
{
double nums[m][n]=
{
{1,2,3,4,5,},
{6,7,8,9,10,},
{11,12,13,14,15}
};
double copy_target[m][n];
copy(m,n,nums,copy_target);
return 0;
}
void copy(int p,int q,double nums[p][q],double copy_target[p][q])
{
int i=0;
int j=0;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
copy_target[i][j]=nums[i][j];
}
}
show(p,q,nums,copy_target);
}
void show(int p,int q,double nums[p][q],double copy_target[p][q])
{
int i=0;
int j=0;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
printf("%6.2lf",nums[i][j]);
}
printf("\n");
}
printf("****************************************\n");
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
printf("%6.2lf",copy_target[i][j]);
}
printf("\n");
}
printf("****************************************\n");
}
10.13.10
#include<stdio.h>
#define num 4
int add(int k,int nums1[k],int nums2[k],int sumnum[k]);
int main(void)
{
int nums1[num]={2,4,5,8};
int nums2[num]={1,0,4,6};
int sumnum[num];
add(num,nums1,nums2,sumnum);
return 0;
}
int add(int k,int nums1[k],int nums2[k],int sumnum[k])
{
int i=0;
for(i=0;i<k;i++)
{
sumnum[i]=nums1[i]+nums2[i];
printf("%d ",sumnum[i]);
}
}
10.13.12
#include <stdio.h>
#define MONTHS 12
#define YEARS 5
void average1(int p,int q,float nums[p][q]);
void average2(int p,int q,float nums[p][q]);
int main(void)
{
// initializing rainfall data for 2010 - 2014
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}
};
average1(YEARS,MONTHS,rain);
printf("MONTHLY AVERAGES:\n\n");
printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct ");
printf(" Nov Dec\n");
average2(YEARS,MONTHS,rain);
return 0;
}
void average1(int p,int q,float nums[p][q])
{
int year, month;
float subtot, total;
printf(" YEAR RAINFALL (inches)\n");
for (year = 0, total = 0; year < p; year++)
{ // for each year, sum rainfall for each month
for (month = 0, subtot = 0; month < q; month++)
subtot += nums[year][month];
printf("%5d %15.1f\n", 2010 + year, subtot);
total += subtot; // total for all years
}
printf("\nThe yearly average is %.1f inches.\n\n",
total/p);
}
void average2(int p,int q,float nums[p][q])
{
int year, month;
float subtot, total;
for (month = 0; month < q; month++)
{ // for each month, sum rainfall over years
for (year = 0, subtot =0; year < YEARS; year++)
subtot += nums[year][month];
printf("%4.1f ", subtot/p);
}
printf("\n");
}
10.13.13
#include<stdio.h>
#define A 3
#define B 5
void average_group(int m,int n,double nums[m][n]);
double average_all(int m,int n,double nums[m][n]);
double bigest(int m,int n,double nums[m][n]);
int main(void)
{
double nums[A][B];
double averageall_;
double bigest_;
int i=0;
int j=0;
printf("请输入三组数,每组五个数字");
for(i=0;i<A;i++)
{
for(j=0;j<B;j++)
{
scanf("%lf",&nums[i][j]);
}
}
average_group(A,B,nums);
averageall_=(average_all(A,B,nums));
bigest_=(bigest(A,B,nums));
printf("%6.2lf\n",averageall_);
printf("%6.2lf\n",bigest_);
return 0;
}
void average_group(int m,int n,double nums[m][n])
{
int i=0;
int j=0;
double total=0;
double average_group;
for(i=0;i<m;i++)
{
total=0;
for(j=0;j<n;j++)
{
total+=nums[i][j];
}
average_group=total/n;
printf("%6.2lf",average_group);
}
printf("\n");
}
double average_all(int m,int n,double nums[m][n])
{
int i=0;
int j=0;
int average_all=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
average_all=average_all+nums[i][j];
}
}
return average_all;
}
double bigest(int m,int n,double nums[m][n])
{
int i=0;
int j=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(nums[0][0]<nums[i][j])
{
nums[0][0]=nums[i][j];
}
}
}
return nums[0][0];
}
10.13.14
同13
#include<stdio.h>
#define A 3
#define B 5
void average_group(int m,int n,double nums[m][n]);
double average_all(int m,int n,double nums[m][n]);
double bigest(int m,int n,double nums[m][n]);
int main(void)
{
double nums[A][B];
double averageall_;
double bigest_;
int i=0;
int j=0;
printf("请输入三组数,每组五个数字");
for(i=0;i<A;i++)
{
for(j=0;j<B;j++)
{
scanf("%lf",&nums[i][j]);
}
}
average_group(A,B,nums);
averageall_=(average_all(A,B,nums));
bigest_=(bigest(A,B,nums));
printf("%6.2lf\n",averageall_);
printf("%6.2lf\n",bigest_);
return 0;
}
void average_group(int m,int n,double nums[m][n])
{
int i=0;
int j=0;
double total=0;
double average_group;
for(i=0;i<m;i++)
{
total=0;
for(j=0;j<n;j++)
{
total+=nums[i][j];
}
average_group=total/n;
printf("%6.2lf",average_group);
}
printf("\n");
}
double average_all(int m,int n,double nums[m][n])
{
int i=0;
int j=0;
int average_all=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
average_all=average_all+nums[i][j];
}
}
return average_all;
}
double bigest(int m,int n,double nums[m][n])
{
int i=0;
int j=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(nums[0][0]<nums[i][j])
{
nums[0][0]=nums[i][j];
}
}
}
return nums[0][0];
}
完。
今天的犯过的错误:
第一,使用scanf函数时忘记用&符号
第二,测试程序效果时,没有用1 2 3 4 5 使用了1,2,3,4,5