恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
C笔试算法
首页
资讯中心
/
C笔试算法
C笔试算法
发布时间:2026/10/21 2:17:55
使用C语言实现strcpy字符串拷贝函数strcpy函数用于将源字符串复制到目标字符串包括结束符\0。// 实现字符串拷贝函数 char* my_strcpy(char* dest, const char* src) { // 参数检查 if (dest NULL || src NULL) { return NULL; } char* original_dest dest; // 保存目标字符串的起始位置 // 逐字节复制直到遇到源字符串的结束符\0 while (*src ! \0) { *dest *src; dest; src; } // 添加字符串结束符 *dest \0; return original_dest; // 返回目标字符串的起始地址 } // 使用示例 void test_my_strcpy() { char src[] Hello World; char dest[20]; my_strcpy(dest, src); printf(复制后的字符串: %s\n, dest); } 优化 char* my_strcpy_optimized(char* dest, const char* src) { char* original_dest dest; while ((*dest *src) ! \0); return original_dest; }请用C语言编写一个函数 swap_endian它能将一个32位无符号整数的字节序大端或小端进行反转。例如输入 0x12345678 应返回 0x78563412。#include stdint.h uint32_t swap_endian(uint32_t value) { return ((value 0xFF000000) 24) | ((value 0x00FF0000) 8) | ((value 0x0000FF00) 8) | ((value 0x000000FF) 24); }实现一个函数将一个整型数组按升序排列。不允许使用标准库中的排序函数如 qsort。可以使用如冒泡排序、插入排序、选择排序等简单排序算法。#includestdio.h int main() { int arr[8]; for(int i0;i8;i){ scanf(%d,arr[i]); } int temp; for(int i0;i7;i){ for(int j1;j8-i;j){ if(arr[j-1]arr[j]){ temparr[j-1]; arr[j-1]arr[j]; arr[j]temp; } } } for(int i0;i8;i){ printf(%d,arr[i]); } }实现一个函数接收一个以 null 结尾的字符串并将该字符串逆序原地逆序不创建新的字符串#include string.h void reverse_string(char *str) { if (str NULL) return; int len strlen(str); int left 0; int right len - 1; while (left right) { char temp str[left]; str[left] str[right]; str[right] temp; left; right--; } }请用 C 语言编写一个函数用于检测当前运行的系统是大端序还是小端序。int check_endianness() { unsigned int test_value 0x12345678; unsigned char *byte_ptr (unsigned char *)test_value; // 小端序低地址存放低位字节0x78 if (byte_ptr[0] 0x78) { return 1; // 小端序 Little-Endian } // 大端序低地址存放高位字节0x12 else if (byte_ptr[0] 0x12) { return 0; // 大端序 Big-Endian } return -1; // 异常 }请用 C 语言编写一个函数接收一个整型数组和数组大小实现查找数组中的最大值并返回。#include limits.h int find_max(int arr[], int n) { if (arr NULL || n 0) return INT_MIN; // 处理无效输入 int max_val arr[0]; for (int i 1; i n; i) { if (arr[i] max_val) max_val arr[i]; } return max_val; }字符串去重给定一个字符串去除所有之前出现过的字符只保留第一次出现的字符。示例输入hello,welcome to xiaomi示例输出helo,wcmt xiaivoid kill_same(char *o, char *n) { int i 0, k 0; while (o[i] ! \0) { int exists 0; for (int j 0; j k; j) { if (o[i] n[j]) exists 1; } if (!exists) n[k] o[i]; i; } n[k] \0; }基于数组实现一个环形缓冲区要求在不使用额外变量如 count 或 full_flag的情况下仅依靠 head 和 tail 两个索引来区分缓冲区是空还是满。请说明你的设计思路并实现关键的入队和出队函数。#define BUFFER_SIZE 16 typedef struct { int buffer[BUFFER_SIZE]; size_t head; size_t tail; } circular_buffer_t; void circular_buffer_init(circular_buffer_t *cb) { if (cb NULL) return; cb-head 0; cb-tail 0; } static bool is_empty(circular_buffer_t *cb) { return cb-head cb-tail; } static bool is_full(circular_buffer_t *cb) { return (cb-tail 1) % BUFFER_SIZE cb-head; } int circular_buffer_enqueue(circular_buffer_t *cb, int data) { if (cb NULL || is_full(cb)) { return -1; } cb-buffer[cb-tail] data; cb-tail (cb-tail 1) % BUFFER_SIZE; return 0; } int circular_buffer_dequeue(circular_buffer_t *cb, int *data) { if (cb NULL || is_empty(cb) || data NULL) { return -1; } *data cb-buffer[cb-head]; cb-head (cb-head 1) % BUFFER_SIZE; return 0; }