繁体   English   中英

创建一个程序,将两个数字以相等的间隔相除

[英]To create a program that divides two numbers at equal intervals

我做了程序的第一部分,但我不明白动态内存分配和使用指针计算的部分。 我应该编码什么? 节目内容。

  1. 考虑通过将两个数字以相等的间隔相除来创建一个数字序列。 例如,如果要创建5个0.0到2.0之间等距的数字,可以将0到2的区间分成4等份(考虑最后的值),每0.5个数字排列。 它变成 0.0, 0.5, 1.0, 1.5, 2.0。
  2. 然后,当您输入第一个数字、最后一个数字和值的总数时,通过动态内存分配创建一个包含从“第一个数字”到“最后一个数字”等间隔的值的数组,并每个价值都被创造出来。 显示后,创建一个程序(参见执行示例),该程序也显示每个值的平方。
  3. “第一个数字”和“最后一个数字”是浮点数,“值的总数”是一个整数。 动态内存分配分配的内存应该是根据“值总数”要求的最小值。 显示每个值 在第一次显示时,按原样输出存储在数组中的值。

我的源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

    
    int main ()
    {
       int num, i;
       double dfirst, dlast;
       double * x;
    
       / * Enter the first value, the last value, and the number to divide * /
       printf ("Input first, last, total number of x []:");
       scanf ("% lf% lf% d", & dfirst, & dlast, & num);
    
       / * Create after this * /
    
       / * Allocate memory * /
    
      / * Determine the value to store.
         Be careful not to divide by an integer and decide the number of divisions in consideration of the end value * /
    
       / * Display results * /
    
       / * Post-processing * /
       return 0;
    }

执行结果想做什么

% ./a.out
Input first, last, total number of x[]: 0.0  2.0  5
Values of x
0.000 0.500 1.000 1.500 2.000
Values of x^2
0.000 0.250 1.000 2.250 4.000
% ./a.out
Input first, last, total number of x[]: 1.0  2.0  11
Values of x
1.000 1.100 1.200 1.300 1.400 1.500 1.600 1.700 1.800 1.900 2.000
Values of x^2
1.000 1.210 1.440 1.690 1.960 2.250 2.560 2.890 3.240 3.610 4.000

在 C 中,您使用函数malloc动态分配内存。 这个函数是相当低级的,程序员必须非常小心地指定所请求内存的正确大小。 为了使函数更易于使用,可以方便地定义一个也提供错误处理的宏:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NEW_ARRAY(ptr, n) \
    (ptr) = malloc((n) * sizeof (ptr)[0]); \
    if ((ptr) == NULL) { \
        fprintf(stderr, "Memory allocation failed: %s\n", strerror(errno)); \
        exit(EXIT_FAILURE); \
    }

宏功能到位后,您只需添加

NEW_ARRAY(x, num);

给你的程序分配一个由num 个元素组成的数组x 当您完成x 时,您可以使用free ( x ) 释放内存。 在您的程序中,您还需要检查scanf的结果以确保输入有效。 祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM