C primer plus (第六版)第十章 编程练习第3,4,5,6题

因为第3题,第4题,第5题,第6题的程序类似,基本都是在之前题目的基础上进行的程序的修改,所以合并这几个题目的程序为一篇;

题目:

3.编写⼀个函数,返回存储在int类型数组中的最⼤值,并在⼀个简单的程序中测试该函数。

思路:

将数组中的第一个数赋值给temp,然后让temp与第二个数比较,如果第二个数大,则更新temp的值,与接下来的数比较,如果temp的值不大,则跳过temp的值的跟新,接着比较下一个数,所有数值比较一遍后找出最大的数;

cpp 复制代码
#include <stdio.h>
#define SIZE 5
int max_in_ar(int *ar, int n);
int main()
{
    int i = 0;
    int temp;
    int ar[SIZE];
    printf("Please input the data inside the array:\n");
    while (scanf("%d",&ar[i]) && (i < SIZE-1))
    {
        //printf("%d\n",ar[i]);             //显示输入的值,测试用
        i++;
    }

    printf("Your input data in array:\n");  //我们输入到数组的数回显一下
    for ( i = 0; i < SIZE; i++)      
    {                                
        printf("ar[%d] = %d\n",i, ar[i]);        
    }
    temp = max_in_ar(ar, SIZE);             //函数返回最大值
    printf("The maximum number in array is: %4d", temp);
    return 0;
}

int max_in_ar(int *ar, int n)
{
    int i;
    int max;
    for ( i = 1,max = ar[0]; i < SIZE; i++)
    {
        if(max < ar[i])
            max = ar[i];        //如果ar[i]比max大,则替换max值
        else
            continue;           //否则继续循环比较
    }
    return max;
}

题目:

4.编写⼀个函数,返回存储在double类型数组中最⼤值的下标,并在⼀个简单的程序中测试该函数。

思路:

与第三题类似,但是需要在函数中新增一个变量用于记录最大值的下标,也就是在给最大值赋值的同时,把下标也赋值给一个记录下标的变量;

cpp 复制代码
#include <stdio.h>
#define SIZE 5
int maxpos_in_ar(double *ar, int n);
int main()
{
    int i = 0;
    int temp;
    double ar[SIZE];
    printf("Please input the data inside the array:\n");
    while (scanf("%lf",&ar[i]) && (i < SIZE-1))
    {
        //printf("%d\n",ar[i]);             //显示输入的值,测试用
        i++;
    }

    printf("Your input data in array:\n");  //我们输入到数组的数回显一下
    for ( i = 0; i < SIZE; i++)      
    {                                
        printf("ar[%d] = %lf\n",i, ar[i]);        
    }
    temp = maxpos_in_ar(ar, SIZE);             //函数返回最大值
    printf("The maximum number position in array is: ar[%d]", temp);
    return 0;
}

int maxpos_in_ar(double *ar, int n)
{
    int i;
    int maxpos;
    double max;
    for ( i = 1,max = ar[0], maxpos = 0; i < SIZE; i++)
    {
        if(max < ar[i])
        {
            max = ar[i];        //如果ar[i]比max大,则替换max值
            maxpos = i;
        }            
        else
            continue;           //否则继续循环比较
    }
    return maxpos;
}

题目:

5.编写⼀个函数,返回存储在double类型数组中最⼤值和最⼩值的差值,并在⼀个简单的程序中测试该函数。

cpp 复制代码
#include <stdio.h>
#define SIZE 5
double maxmindiff_in_ar(double *ar, int n);
int main()
{
    int i = 0;
    double temp;
    double ar[SIZE];
    printf("Please input the data inside the array:\n");
    while (scanf("%lf",&ar[i]) && (i < SIZE-1))
    {
        //printf("%d\n",ar[i]);             //显示输入的值,测试用
        i++;
    }

    printf("Your input data in array:\n");  //我们输入到数组的数回显一下
    for ( i = 0; i < SIZE; i++)      
    {                                
        printf("ar[%d] = %lf\n",i, ar[i]);        
    }
    temp = maxmindiff_in_ar(ar, SIZE);             //函数返回最大值
    printf("The maximum and minimum difference in array is %lf", temp);
    return 0;
}

double maxmindiff_in_ar(double *ar, int n)
{
    int i;
    int maxpos, minpos;
    double min, max;
    for ( i = 1,max = ar[0], maxpos = 0; i < SIZE; i++)
    {
        if(max < ar[i])
        {
            max = ar[i];        //如果ar[i]比max大,则替换max值
            maxpos = i;
        }            
        else
            continue;           //否则继续循环比较
    }
    for ( i = 1,min = ar[0], minpos = 0; i < SIZE; i++)
    {
        if(min > ar[i])
        {
            min = ar[i];        //如果ar[i]比min大,则替换min值
            minpos = i;
        }            
        else
            continue;           //否则继续循环比较
    }    
    return ( ar[maxpos] - ar[minpos] );
}

题目:

6.编写⼀个函数,把double类型数组中的数据倒序排列,并在⼀个简单的程序中测试该函数。

思路:

最直接的思路是需要新建一个和原数组相同大小的数组,将原数组的数据重新从后往前给新数组按照顺序赋值,然后再将新数组的数据重新按照顺序赋值给原数组就完成了原数组的数据倒序排列;

cpp 复制代码
#include <stdio.h>
#define SIZE 5
void rearrange_ar(double *ar, int n);
int main()
{
    int i = 0;
    int temp;
    double ar[SIZE];
    printf("Please input the data inside the array:\n");
    while (scanf("%lf",&ar[i]) && (i < SIZE-1))
    {
        //printf("%d\n",ar[i]);             //显示输入的值,测试用
        i++;
    }

    printf("Your input data in array:\n");  //我们输入到数组的数回显一下
    for ( i = 0; i < SIZE; i++)      
    {                                
        printf("ar[%d] = %lf\n",i, ar[i]);        
    }
    rearrange_ar(ar, SIZE);             //函数返回最大值
    printf("Rearrange the array:\n");  //我们输入到数组的数回显一下
    for ( i = 0; i < SIZE; i++)      
    {                                
        printf("ar[%d] = %lf\n",i, ar[i]);        
    }    
    return 0;
}

void rearrange_ar(double *ar, int n)
{
    double rear[SIZE];
    int i;
    for ( i = 0; i < SIZE; i++)
        rear[SIZE-i-1] = ar[i];
    for ( i = 0; i < SIZE; i++)
        ar[i] = rear[i];    
}