数组和指针—编程练习"/>
第10章 数组和指针—编程练习
1、修改程序清单10.7的rain.c程序,用指针进行计算(仍然要声明并初始化数组)。
//计算每年的总的降水量、年平均降水量、5年中每月的平均降水量
#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 years, months;float subtot, total=0;//subtot-每年的降水总量,total-5年降水总量printf("YEAR RAINFALL(inches)\n");for (years = 0; years < YEARS; years++){for (subtot=0,months = 0; months < MONTHS; months++)subtot += *(*(rain + years) + months);printf("%4d %.1f\n", 2010 + years, subtot);total += subtot;}printf("The yearly average is %.1f inches.\n", total / YEARS);printf("MONTHLY AVERAGES:\n");printf("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n");for (months = 0; months < MONTHS; months++){subtot = 0;for (years = 0; years < YEARS; years++)subtot += *(*(rain + years) + months);printf("%.1f ", subtot / YEARS);}printf("\nDone!\n");return 0;
}
2、编写一个程序,初始化一个double类型的数组,然后把该数组的内容拷贝至3个其他数组中(在main()中声明这四个数组)。使用带数组表示法的函数进行第1份拷贝。使用带指针表示法和指针递增的函数进行第2份拷贝。把目标数组名、原数组名和待拷贝的元素个数作为前两个函数的参数。第3个函数以目标数组名和指向原数组最后一个元素后面的元素的指针。也就是说,给定以下声明,则函数调用如下所示:
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);
#include<stdio.h>
void copy_arr(double target[], double source[], int n);
void copy_ptr(double *pa, double *source, int n);
void copy_ptrs(double *pa, double *source, double *end);
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 target[], double source[], int n)
{int index = 0;printf("The first copy of the data is:");for (index = 0; index < n; index++){target[index] = source[index];printf("%.1f ",target[index]);}printf("\n");
}
void copy_ptr(double *pa, double *source, int n)
{int index;printf("The second copy of the data is:");for (index = 0; index < n; index++){*pa = *(source + index);//pa++;printf("%.1f ", *pa);pa++;}printf("\n");
}
void copy_ptrs(double *pa, double *source, double *end)
{printf("The third copy of the data is:");while (source < end){*pa = *source;printf("%.1f ", *pa);pa++;source++;}printf("\n");
}
3、编写一个函数,返回储存在int类型中的最大值,并在一个简单的程序中测试该函数。
//返回在数组5个元素中的最大值
#include<stdio.h>
int arr_max(int arr[], int n);
int main(void)
{int arr[5];int i = 0;int max;printf("Input five integers:");for (i = 0; i < 5; i++)scanf("%d,", &arr[i]);max = arr_max(arr, 5);printf("The maximum value in an array is: %d\n", max);return 0;
}
int arr_max(int arr[], int n)
{int result;int index;result = arr[0];for (index = 1; index< n; index++){if (result < arr[index])result = arr[index];}return result;
}
4、编写一个函数,返回存储在double类型数组中最大值的下标,并在一个简单的程序中测试该函数。
//假设用户输入的最大值只有一个
#include<stdio.h>
#define SIZE 5
int subscript(double *arr, int n);
int main(void)
{double arr[SIZE];int i;int val;printf("Enter fives characters:");for (i = 0; i < SIZE; i++
更多推荐
第10章 数组和指针—编程练习
发布评论