C primer plus10.13

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值