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

1.

#include <stdio.h>
#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++)
    {
    	total = 0;
    	for(month = 0; month < MONTHS; month++)
    	{
    		total += *(*(rain + year) + month);
		}
		printf("%d 	 %lf\n",2010 + year,total);
	}
	 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++)
    {
    	subtot = 0;
    	for(year = 0; year < YEARS; year++)
    		subtot += *(*(rain + year) + month);
    	printf("%4.1f ", subtot/YEARS);
	}
	
	return 0;
}

2.

#include <stdio.h>
#define SIZE 5

void copy_arr(double ar[], double sou[], int n);
void copy_ptr(double *ar, double *sou, int n);
void copy_ptrs(double ar[],double *sou,double *end);

int main(void)
{
	double source[SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5};
	double target1[SIZE];
    double target2[SIZE];
    double target3[SIZE];
    
    copy_arr(target1, source, SIZE);

    copy_ptr(target2, source, SIZE);

    copy_ptrs(target3, source, source + 5);
    
	return 0;
}

void copy_arr(double ar[], double sou[], int n)
{
	int i;
	
	for(i = 0; i < n;i++)
	{
		ar[i] = sou[i];
	}
	for(i = 0; i< n; i++)
    {
        printf("target1[%d] = %.2lf", i, ar[i]);
        printf("\n");
    }
}

void copy_ptr(double *ar, double *sou, int n)
{
	int i;
	
	for(i = 0; i < n;i++)
	{
		*(ar + i) = *(sou + i);
	}
	for(i = 0; i< n; i++)
    {
        printf("target2[%d] = %.2lf", i, ar[i]);
        printf("\n");
    }
}

void copy_ptrs(double ar[],double *sou,double *end)
{
	int i;
	
	while(sou <= end)
	{
		*ar = *sou;
		ar++;
		sou++;
	} 
	 for(i = 0; i < SIZE; i++)
    {
        printf("target3[%d] = %.2lf", i, ar[i]);
        printf("\n");
    }
}

3.

#include <stdio.h>

int comp(int ar[],int n); //n代表数组元素个数 

int main(void)
{
	int test[] = {1,5,3,4,9,8,12,50,1,3};
	int max;
	
	max = comp(test,9);
	printf("The maximum number of the array is %d\n",max);
	
	return 0;
}

int comp(int ar[],int n)
{
	int i;
	int temp;
	
	for(i = 0; i < n-1;i++)
	{
		if(ar[i+1] > ar[i])
			temp = ar[i+1];
		else
			temp = ar[i];
	}
	
	return temp;
}

4.

#include <stdio.h>

int comp(double ar[], int n);  //n代表数组元素个数

int main(void)
{
	int max;
	double array[] = {5.3,6.2,7.8,9.99,9.999,10,8.88};
	
	max = comp(array,7);
	printf("Tag of the largest number is %d",max);
	
	return 0;
} 

int comp(double ar[], int n)
{
	int i;
	int mtag;
	
	for(i = 0; i < (n-1);i++)
	{
		if(ar[i+1] > ar[i])
		{
			mtag = i+1;
		}
		else
		{
			mtag = i;
		}
	}
	
	return mtag;
}

5.

#include <stdio.h>

double sub(double ar[], int n);  //n代表数组元素个数

int main(void)
{
	double subtract;
	double array[] = {5.3,6.2,7.8,9.99,9.999,10,8.88};
	
	subtract = sub(array,7);
	printf("sub of the two numbers is %lf",subtract);
	
	return 0;
} 

double sub(double ar[], int n)
{
	int i;
	double max,min;
	max = min = ar[0];
	
	for(i = 0; i < n;i++)
	{
		if(max < ar[i])
			max = ar[i];
		if(min > ar[i])
			min = ar[i];
	}
	
	return (max - min);
}

6.

#include <stdio.h>

void sort(double ar[],int n);
 
int main(void)
{
	double array[7] = {5.3,6.2,7.8,9.99,9.999,10,8.88};
	
	sort(array,7);
	
	return 0;
}

void sort(double ar[],int n)
{
	int i,k;
	double temp;
	
	if (n % 2 == 0)
	{
		for(i = 0; i < n / 2;i++)
		{
			temp = ar[i];
			ar[i] = ar[n-i-1];
			ar[n-i-1] = temp;
		}
		for(k = 0; k < n; k++)
			printf("array[%d] = %lf\n",k,ar[k]);
	}
	else
			for(i = 0; i < ((int)(n / 2) + 1);i++)
		{
			temp = ar[i];
			ar[i] = ar[n-i-1];
			ar[n-i-1] = temp;
		}
		for(k = 0; k < n; k++)
			printf("array[%d] = %lf\n",k,ar[k]);

}

7.

 #include <stdio.h>
 
 void copy(int m,int n,double arr[m][n]);
 void copy_arr(double ar[], double sou[], int n,int j);
 
 int main(void)
 {
 	int i;
 	double array[3][3] = {{5.3,6.2,7.8},{9.99,9.999,10},{8.88,0,0}};
 	
 		copy(3,3,array);
 	
 	return 0;
 }
 
void copy(int m,int n,double arr[m][n]) //arr[m][n]是指向一维数组的指针 
{
	int i,j;
	double target[3];
	
	for (i = 0,j = 0; i < n; i++,j++)
	{
		copy_arr(target,*(arr+i),3,j);
		printf("\n");
	} 
}

  void copy_arr(double ar[], double sou[], int n,int j)
{
	int i;
	
	for(i = 0; i < n;i++)
	{
		ar[i] = sou[i];
	}
	
	for(i = 0; i < n; i++)
    {
        printf("target[%d][%d] = %.5lf",j, i, ar[i]);
        printf("\n");
    }
}

8.

#include <stdio.h>

void copy_ptrs(int copy[],int *sou,int *end);

int main(void)
{
	int array[7] = {1,3,5,8,9,8,6};
	int arr[3];
	
	copy_ptrs(arr,&array[2],&array[4]);
	
	return 0;
}

void copy_ptrs(int copy[],int *sou,int *end)
{
	int i;
	
	printf("%d\n\n",sou[0]);

	for (i = 0; i < 3; i++)
	{
		*(copy+i) = *(sou+i);
	} 
	 for(i = 0; i < 3; i++)
    {
        printf("copy[%d] = %d", i, copy[i]);
        printf("\n");
    }
}

9.

#include <stdio.h>


void copy(int row,int col,double coar[row][col],double sou[row][col]);
int main(void)
{
	int rows = 4;
	int cols = 5;
	double array[4][5] = {{4.3,4.3,4.3,3.0,2.0},
	                      {1.2,0.2,0.2,0.4,2.4},
						  {8.5,8.2,1.2,1.6,2.4},
						  {4.3,5.5,6.3,5.5,4.0}
						  };
	double target[rows][cols];
	copy(rows,cols,target,array);
	
	return 0;
} 

void copy(int row,int col,double coar[row][col],double sou[row][col])
{
	int i,j;
	
	for(i = 0; i < row; i++)
	{
		for(j = 0; j < col; j++)
		{
			coar[i][j] = sou[i][j];
		}
	}
	
	for(i = 0; i < row; i++)
	{
		for(j = 0; j < col; j++)
		{
			printf("target[%d][%d]=%lf ",i,j,coar[i][j]);
		}
		printf("\n");
	}
}

10.

#include <stdio.h>

void sum(int n,int sou1[n],int sou2[n],int summ[n]);

int main(void)
{
	int n;
	int arr1[6] = {5,6,7,1,2,3};
	int arr2[6] = {1,9,5,8,4,2};
	int arr3[n];
	
	sum(6,arr1,arr2,arr3);
	
	return 0;
}

void sum(int n,int sou1[n],int sou2[n],int summ[n])
{
	int i;
	
	for(i = 0; i < n; i++)
	{
		*(summ + i) = *(sou1 + i) + *(sou2 + i);
	}
	
	for(i = 0; i < n; i++)
		printf("summ[%d] = %d  ",i,summ[i]);
}

11.

#include <stdio.h>

void print(int n,int sou[][5]);
int multi(int n,int sou[][5]);

int main(void)
{
	int array[3][5] = {{4,4,4,3,2},
	                   {1,0,2,4,2},
					   {8,2,1,6,4}
					   };
	
	print(3,array);
	printf("**************\n");
	multi(3,array);
	print(3,array);
	
	return 0;
}

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

int multi(int n,int sou[][5])
{
	int i,j;
	
	for(i = 0; i < n; i++)
	{
		for(j = 0; j < 5; j++)
		{
			sou[i][j] *= 2;
		}
	}
	
	return sou[n][5];
}

12.

循环拿出来单独写一个函数

13.

#include <stdio.h>

void eve_ave(int n,double sou[n]);
double ave(int m,int n,double sou[m][n]);
double max(int m,int n,double sou[m][n]);

int main(void)
{
	double array[3][5];
	int i,j;
	double aver;
	double maxi;
	
	printf("Enter a 3 × 5 array:");
	
	for(i = 0; i < 3; i++)
	{
		for(j = 0; j < 5; j++)
		{
			scanf("%lf",&array[i][j]);
		}
	}
	
	for(i = 0; i < 3; i++)
		eve_ave(5,array[i]);
		
	aver = ave(3,5,array);
	printf("The average of these 15 numbers is %lf\n",aver);
	
	maxi = max(3,5,array);
	printf("The largest number of the array is %lf\n",maxi);
	
	return 0;
}

void eve_ave(int n,double sou[n])
{
	double sum = 0.0;
	double average;
	int i;
	
	for(i = 0; i < n; i++)
		sum += sou[i];
	average = sum / n;
	
	printf("The average of these 5 numbers is %lf\n",average);
}

double ave(int m,int n,double sou[m][n])
{
	double average;
	int i,j;
	double sum = 0.0;
	
	for(i = 0; i < m; i++)
	{
		for(j = 0; j < n; j++)
			sum += sou[i][j];
	}
	average = sum / (m*n);
	
	return average;
}

double max(int m,int n,double sou[m][n])
{
	int i,j;
	double max = sou[0][0];
	
	for(i = 0; i < m; i++)
	{
		for(j = 0; j < (n-1); j++)
		{
			if(sou[i][j+1] > max)
				max = sou[i][j+1];
			else
				max = max;
		}
	}
	
	return max;
}

14.

13题直接用VLA做的,不用VLA的话,函数形参改为(double arr[][5],int rows)即可。

猜你喜欢

转载自blog.csdn.net/o707191418/article/details/81384331