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)即可。