动态申请一个具有10个float类型元素的内存空间,从一个已有的数组中拷贝数据,并找出第一次出现 12.35 的下标位置,并输出。

74 阅读1分钟
#include <stdio.h>
#include <stdlib.h> // 包含malloc和free函数
#include <string.h> // 包含memcpy函数
#include <math.h> //包含了fabs函数

int main() {
    // 1. 已有数组
    float src_array[10] = {1.1f, 2.2f, 12.35f, 4.4f, 5.5f, 
                          12.35f, 7.7f, 8.8f, 9.9f, 10.0f};

    // 2. 动态申请10个float的内存空间
    float *dynamic_array = (float*)malloc(10 * sizeof(float));
    if(dynamic_array == NULL) {
        printf("内存分配失败!\n");
        return -1;
    }

    // 3. 拷贝数据
    memcpy(dynamic_array, src_array, 10 * sizeof(float));
  

    // 4. 查找12.35首次出现的下标
    int index = -1;
    const float target = 12.35f;
    for(int i = 0; i < 10; i++) {
        // 浮点数比较需考虑精度问题
        //1.  浮点数比较:
        //不能直接用==比较(精度问题)
       //使用fabs(a - b) < epsilon方法(这里epsilon取0.0001),此时可视为a和b相等
       //fabs是取绝对值的函数,#include <math.h>  // 必须包含的头文件

        if(fabs(dynamic_array[i] - target) < 0.0001f) {
            index = i;
            break;
        }
    }

    // 5. 输出结果
    if(index != -1) { //上述循环结果结束后判断,若为-1,则没找到,若不为-1,则找到了;
        printf("12.35首次出现在下标: %d\n", index);
    } else {
        printf("未找到12.35\n");
    }

    // 6. 释放内存
    free(dynamic_array);
    dynamic_array = NULL;
    
    //记住,在堆内存中创建的内存:1.创建堆内存 2.判断是否创建成功 3.释放内存 4.置为NULL;

    return 0;
}

image.png

image.png

image.png