1. 動態申請一個具有10個float類型元素的內存空間,從一個已有的數組中拷貝數據,并找出第一次出現 12.35 的下標位置,并輸出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{// 動態申請10個float類型元素的內存空間float *a = (float*)malloc(10 * sizeof(float));if (a == NULL) {printf("內存分配失敗\n");return 1;}// 已有數組float originalArray[10] = {1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 12.35};// 拷貝數據memcpy(a, originalArray, 10 * sizeof(float));// 查找第一次出現12.35的下標int index = -1;for (int i = 0; i < 10; i++) {if (a[i] == 12.35f) {index = i;break;}}// 輸出結果if (index != -1) {printf("第一次出現12.35的下標是: %d\n", index);} else {printf("未找到12.35\n");}// 釋放內存free(a);return 0;
}
2. 動態申請一個整型數組,并給每個元素賦值,要求刪除第3個元素。
#include <stdio.h>
#include <stdlib.h>int main()
{int n = 5; // 數組初始大小// 動態申請整型數組int *a = (int*)malloc(n * sizeof(int));if (a == NULL) {printf("內存分配失敗\n");return 1;}// 給每個元素賦值for (int i = 0; i < n; i++) {a[i] = i;}// 輸出原始數組printf("原始數組: ");for (int i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n");// 刪除第3個元素,移動元素覆蓋要刪除的元素for (int i = 2; i < n - 1; i++) {a[i] = a[i + 1];}// 重新分配內存n--;int *temp = (int*)realloc(a, n * sizeof(int));if (temp == NULL) {printf("內存重分配失敗\n");free(a);return 1;}a = temp;// 輸出刪除后的數組printf("刪除第3個元素后的數組: ");for (int i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n");// 釋放內存free(a);return 0;
}
3. 動態申請一個整型數組,并給每個元素賦值,要求在第4個元素后插入100。
#include <stdio.h>
#include <stdlib.h>int main()
{int n = 5; // 數組初始大小// 動態申請整型數組int *a = (int*)malloc(n * sizeof(int));if (a == NULL) {printf("內存分配失敗\n");return 1;}// 給每個元素賦值for (int i = 0; i < n; i++) {a[i] = i;}// 輸出原始數組printf("原始數組: ");for (int i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n");// 在第4個元素后插入10086,重新分配內存n++;int *temp = (int*)realloc(a, n * sizeof(int));if (temp == NULL) {printf("內存重分配失敗\n");free(a);return 1;}a = temp;// 移動元素,為插入新元素騰出空間for (int i = n - 1; i > 4; i--) {a[i] = a[i - 1];}// 插入新元素a[4] = 100;// 輸出插入后的數組printf("插入100后的數組: ");for (int i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n");// 釋放內存free(a);return 0;
}
4. 編寫一個函數,實現 memmove 的功能。
#include <stddef.h>void *my_memmove(void *dest, const void *src, size_t n) {if (dest == NULL || src == NULL || n == 0) {return dest;}unsigned char *d = (unsigned char *)dest;const unsigned char *s = (const unsigned char *)src;if (d < s) {for (size_t i = 0; i < n; i++) {d[i] = s[i];}} else {for (size_t i = n; i > 0; i--) {d[i - 1] = s[i - 1];}}return dest;
}