c语言
文章平均质量分 76
TerryZjl
这个作者很懒,什么都没留下…
展开
-
辗转相除法求两个数最大公约数
下面写的是一个用辗转相除法求两个数的公约数的代码,我们先来了解什么是辗转相除法。 举个例子:求128 和48的最小公约数 辗转相除法就是用一个数模上另一个数(如a%b)的余数如果等于零,则b为两数最小公约数。若不为零则再用b模上余数c(如b%c),如果余数为零,则c为最小公约数。若余数不为零,继续按规律往后模... 128%48 商2余32 48%原创 2016-11-03 11:27:25 · 887 阅读 · 0 评论 -
C语言中浮点数在计算机中的存储
V=(-1)^S*M*2^E (1)(-1)^S表示符号位,当S = 0,V为正;当S = 1,V为负;(2)M为有效数字,因为M是二进制,大于等于1,小于2。(3)2^E表示指数位原创 2017-02-05 22:59:33 · 888 阅读 · 0 评论 -
C语言中整形在计算机中的存储
整形包括字符、短整形、整形、长整形,整形的存储方式都是一样的,整形在存储时都是以补码进行存储的。下面用char来解释: signed char -128 到127unsigned char 0 到 255short int -32768 到32797unsigned short int 0 到65原创 2017-02-05 23:24:14 · 1610 阅读 · 0 评论 -
结构体、联合体和位断的内存对齐问题
结构体(struct)内存对齐规则:1.第一个成员在与结构体变量偏移量为0的地址处。2.其它成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 //对齐数=编译器默认的一个对齐数与该成员大小的一个较小值 Vs中默认的对齐数是8 Linux中默认的对齐数是43结构体总大小:最大对齐数(每个成员变量的除了第一个成员都有一个对对齐数)的整数倍。(每个成员变量在对 齐之后,把成员大小加起来,再扩大到最大对齐数的整数倍)4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的原创 2017-02-08 23:15:53 · 2457 阅读 · 0 评论 -
C语言三种方法实现字符串右旋
方法一:三步旋转法, 方法二:移项法, 方法三:进行开辟双倍字符串空间原创 2017-02-17 23:28:27 · 564 阅读 · 0 评论 -
约瑟夫环问题的解释及代码实现
解决问题的核心步骤:(程序的基本算法) 1.建立一个具有n个链结点,无头结点的循环链表; 2.确定第1个报数人的位置; 3.不断地从链表中删除报数报到指定数num的那个人的链结点,直到链表剩一个节点。 pNode JosephCycle(pList* pplist, int num) //pplist是传进来的带环链表,num为出列者喊到的数原创 2017-03-01 18:40:20 · 11157 阅读 · 1 评论 -
【C语言】宏定义的用法总结
#define函数#define DEBUG(x) ((x)+(x))如上所示,用于对数值表达式进行求值的宏定义都应该用这种方式加上括号,避免在使用宏时由于参数中的操作等或邻近操作符之间不可预料的相互作用。 #define替换1.在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号,如果是,它们首先被替换。2.替换文本随后被插入到程序中原创 2017-01-22 18:09:14 · 878 阅读 · 0 评论 -
【C命令行参数】main函数的参数含义
C中的命令行参数又叫位置参数,它可以被传到程序里面,派各种用途我们先来看main函数的参数int main( int argc, char *argv[ ], char *envp[ ] ){program-statements} main()函数的参数就是通过命令行来进行传参的;vs2013传参方式:项目->属性->配置属性->调试->命令行参数,然后进行原创 2017-01-23 13:58:48 · 1990 阅读 · 0 评论 -
模拟qsort库函数
#include#include#includevoid my_swap(char *buf1,char *buf2,int sz){ int i = 0; for (i = 0; i < sz; i++) { char temp = buf1[i]; buf1[i] = buf2[i]; buf2[i] = temp; }}void bubble_sort(vo原创 2017-02-13 23:11:53 · 264 阅读 · 0 评论 -
线性表之顺序表与单链表的区别及优缺点
这里比较的是是基于C语言实现的顺序表与单链表,与其他语言的实现可能会有差异,但我相信语言是相通的,它们的实现机制应该也差不多。 1、What 什么是顺序表和单链表 ①顺序表: 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L转载 2017-02-22 12:56:27 · 996 阅读 · 0 评论 -
栈帧详解———函数调用原理
前言:我们知道调用函数对这个函数传参时,形参实例化时会形成一份临时拷贝,在函数返回时这些临时拷贝又被释放;那么调用函数时这些参数是如何保存、被保存在哪里?又是如何释放的呢?在调用函数返回时是如何返回的?返回值是通过什么返回?类似的这些函数调用问题都可以通过栈帧原理解释 下面我通过一些简单的实例来分析函数调用原理------栈帧 首先应该明白,栈是从高地址向低地址延伸的。每个函数原创 2017-01-25 21:40:44 · 1174 阅读 · 1 评论 -
可变参数列表用法及原理
可变参数列表是通过下面这四个宏来实现的,这些宏定义在Stdarg.h头文件va_list Nameva_start(Name, val)va_arg(Name, type)va_end(Name) va_list Name声明一个va_list类型的变量,它用于访问参数列表的未确定部分。 va_start(Name, val)Name这个变量是调用va_li原创 2017-01-26 16:17:28 · 489 阅读 · 0 评论 -
有关单链表的面试题分析及代码实现
1.删除无头单链表的非尾结点 2.逆置/翻转单链表 3.在无头单链表的一个非头结点前插入一个节点 4.查找链表中间节点 5.删除单链表的倒数第K个节点(k>1&&k<链表长度)时间复杂度为O(N); 6.逆序打印单链表原创 2017-03-02 17:50:18 · 430 阅读 · 0 评论 -
测试系统是大段还是小端存储的c代码
我们知道联合体是内部的所有成员都是共享内存的,所有成员的起始地址都是一样的。则若是小端存储则int a的第一个字节就是char c,若是大端存储char c != 1;#include #include union hehe { int a; char c; }un; int main() { un.a = 1;原创 2017-02-15 19:27:32 · 688 阅读 · 0 评论 -
【c语言】模拟实现memcpy()、memmove()函数
//memcpy1.memcpy和memmove可对内存中任何数据类型进行拷贝,但strcpy仅可以对字符串进行拷贝;2.memcpy函数原型:void* memcpy(void *dst,const void* src,size_t n);从源src所指内存的起始地址开始拷贝n个字节到目标dst所指向的起始地址。3.memmove函数原型和memcpy函数原型是一原创 2017-01-14 18:42:08 · 420 阅读 · 0 评论 -
【C语言】模拟实现strcmp()、strncmp()函数
//strcmp函数原型:int strcmp(const *string1,const char *string2);参数说明:string1为第一个要比较的字符串,string2为第二个要比较的字符串 函数功能:比较字符串str1和str2的大小。 返回说明:返回整数值:当str1时,返回值; 当str1=原创 2017-01-14 18:33:59 · 1759 阅读 · 0 评论 -
数组作为函数参数
数组可以作为函数的参数使用,进行数据传送。数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。数组元素作函数实参数组元素就是下标变量,它与普通变量并无区别。 因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。例5.4说明了这种情况。【例8.7】判别一个整数数组转载 2016-11-07 17:18:22 · 1670 阅读 · 0 评论 -
VC 运行时库 /MD、/MDd 和 /MT、/MTd
有段时间在写cuda程序是出现过error LNK2005: _exit 已经在 MSVCRTD.lib(MSVCR71D.dll) 中定义 等类似错误原因应该是在vs2010 工程属性中 c/c++的代码生成(code generation)中的设置与cuda c/c++ Host Runtime library不一样导致的。后来在写opencv程序中的 findcontour(转载 2016-11-07 23:08:42 · 645 阅读 · 0 评论 -
strcmp函数和strcpy函数
(一)strcmp函数 strcmp函数是比较两个字符串的大小,返回比较的结果。一般形式是: i=strcmp(字符串1,字符串2); 其中,字符串1、字符串2均可为字符串常量或变量;i 是用于存放比较结果的整型变量。比较结果是这样规定的: ①字符串1小于字符串2,strcmp函数返回一个负值;②字符转载 2016-11-28 18:04:16 · 443 阅读 · 0 评论 -
最优化的求二进制数中1的个数
这里有两个算法,这两个算法都是用按位与进行运算求出二进制数中1的个数。但算法二要精简的好多,如果你们还有比第二种算法还精简的算法请不要吝啬你们手中代码,一起分享一起学习。算法一#include#includeint main(){int n = 0, i = 0, count = 0;printf("请输入一个十进制数字\n");scanf("%d", &n);原创 2016-11-01 21:54:29 · 570 阅读 · 1 评论 -
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, constchar* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。转载 2016-12-11 15:53:32 · 267 阅读 · 0 评论 -
宏和函数有什么区别?
()#define)宏可以频繁的用于执行简单的计算。但一般是宏的代码很短,才使用宏,否则使用宏会使程序长度大幅度提升。函数可以写一些复杂的的计算。比如下面这个比较大小的两个数字的大小#include#include#define MAX(a,b) ((a)>(b)?(a):(b))int main(){ printf("%d\n", MAX(3,5)); system(原创 2016-12-04 16:52:54 · 981 阅读 · 0 评论 -
函数的返回值value的二进制位模式从左到右翻转后的值
如:在32位机器上输入25这个值包含下列各位:00000000000000000000000000011001翻转后:10011000000000000000000000000000程序结果返回:2550136832原创 2016-11-27 15:12:47 · 744 阅读 · 0 评论 -
C实现---扫雷游戏
扫雷游戏,即在10*10的矩阵上扫雷。用编程实现,输入对应的坐标,判断是否踩中雷。下面这个游戏由一个test.c测试源文件 一个game.c玩游戏的源文件 其对应的头文件game.h三部分组成原创 2016-11-27 15:38:51 · 864 阅读 · 0 评论 -
C实现---三子棋游戏
三子棋游戏,即在3*3的矩阵上下棋,一个人画叉一个人画圈,谁先出现成行或成列或成对角线三个相同的棋子就算谁赢。用编程实现,输入对应的坐标,判断给定棋局的状态。下面这个游戏由一个test.c测试源文件 一个game.c玩游戏的源文件 其对应的头文件game.h完成的这写代码的好处有利于测试, 方便管理和以后的更改和优化游戏原创 2016-11-27 15:57:28 · 872 阅读 · 0 评论 -
size_t 与size_type的使用
http://blog.csdn.net/wallwind/article/details/6583714size_t 是为了方便系统之间的移植而定义的在32位系统上 定义为 unsigned int在64位系统上 定义为 unsigned long更准确地说法是 在 32位系统上是32位无符号整形在 64位系统上是64位无符号整形2.size_t是无符号整转载 2017-01-02 15:41:49 · 533 阅读 · 0 评论 -
栈帧---函数调用原理
下面我通过一个简单的实例来分析函数调用原理------栈帧首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址)寄存器esp指向当前的栈帧的顶部(地址地)函数调用过程如下:(1)先将调用者main()函数的堆栈的基址(ebp)入栈,以保存之前任务的信息。(2)然后将调用者main()函数的栈顶指针(esp)的值赋给ebp,作为新的基址(即被调用者函数fun()的栈底)。(3)然后在这个原创 2016-12-23 23:27:16 · 6027 阅读 · 0 评论 -
【C语言】模拟实现strcpy()、strncpy()函数
//strcpy函数原型:char *strcpy( char *dest, const char *src );用法:#include 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。 # define _C原创 2017-01-14 18:21:11 · 686 阅读 · 0 评论 -
【c语言】模拟实现strcat()、strncat()函数
//strcat 原型:extern char *strcat(char *dest,char *src); 用法:#include 功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。原创 2017-01-14 18:28:52 · 572 阅读 · 0 评论 -
带环单链表及链表相交问题的分析及代码实现
首先,我们怎样检测一个单链表是否带环?1.检测单链表是否带环 如果链表不带环,可以通过遍历链表找到尾节点;那如果单链表带环,就找不到链表得到尾部了,如果遍历一个带环链表,程序就会陷入死循环。 那怎么办呢? 可以利用快慢指针的思想。定义两个指针都指向链表的头指针,然后遍历链表,让一个指针每次走两个节点,让另一个指针每次走一个节点,这样两个指针再原创 2017-03-09 19:26:46 · 908 阅读 · 0 评论