第10章 数组和指针—编程练习

编程入门 行业动态 更新时间:2024-10-10 21:33:41

第10章 <a href=https://www.elefans.com/category/jswz/34/1771288.html style=数组和指针—编程练习"/>

第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章 数组和指针—编程练习

本文发布于:2024-02-07 00:03:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1751814.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   指针

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!