C
JoeBlackzqq
爱好网络软件的开发,更喜欢结交志同道合的朋友!
展开
-
判断一个无符号整数是不是2的幂
C版本: #include//原理:2的幂的二进制位中有且只有一位是1int Is2Power(unsigned int d){ int i = sizeof(d) unsigned int v; while(i > 0) { v = 1 & d; //取得d的最后一位 d >>= 1; if(v == 1) { if(d == 0) return 1; /原创 2009-10-25 13:18:00 · 1985 阅读 · 0 评论 -
判断一个无符号整数是不是2的n次幂的幂
C版本: #includeunsigned int f2(int n);//判断无符号整数d是不是[2的n次幂]的幂,并指出该数[d]是[2的n次幂]的多少(e)次幂//原理:2的n次幂的幂的二进制位中有且只有一位是1,且1后面刚好是n个0为一组int IsPowerof2Power(unsigned int d, int n, int *e){ int i = sizeof(d)原创 2009-10-25 15:20:00 · 2315 阅读 · 0 评论 -
如何输出源文件的标题和目前执行行的行数
环境:VC++6.0 C++版本: #includeusing namespace std;void main(){ int line = __LINE__; //注意:LINE前后分别是两个下划线“-”(半角状态下) char * file = __FILE__; cout cout} C版本:#includevoid main(){ int lin原创 2009-10-25 11:29:00 · 3574 阅读 · 1 评论 -
关于局部变量在内存中的地址
C code:#include void main(){ int aa = 11, bb = 22; int a = 1; int b = 2; printf("%X/t%X/t%X/t%X/n", &aa, &bb, &a, &b);} Running Result:12FF7C 12FF78 12FF74 12FF70 可见局部变量是存放在栈区的,他们的地址先从高原创 2009-10-26 09:25:00 · 1055 阅读 · 0 评论 -
堆中分配的变量地址虽有一定规律,但整体上是无规律的
C code: #include#includetypedef struct MyNode{ int v; struct MyNode * next;}Node;void main(){ Node * h1, *h2, *h3; h1 = malloc(sizeof(Node)); h2 = malloc(sizeof(Node)); h3 = malloc(sizeof(Node原创 2009-10-26 12:57:00 · 1010 阅读 · 2 评论 -
C语言运算符优先级 详细列表
由上到下,优先级逐级递减,即1的优先级大于2 优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .原创 2009-10-26 12:39:00 · 1245 阅读 · 0 评论 -
枚举windows进程
将当前运行的进程列举出来(C++ Code): #include#include//#include #includeusing namespace std;int main(){ int count=0; PROCESSENTRY32 pe32; //使用这个数据之前设置大小 pe32.dwSize=sizeof(pe32); HANDLE hProc原创 2009-11-22 19:22:00 · 1007 阅读 · 0 评论 -
VC++6.0开发环境之快捷键
F1: 帮助 Ctrl+O :Open Ctrl+P :Print Ctrl+N :New Ctrl+Shift+F2 :清除所有书签 F2 :上一个书签 Shift+F2 :上一个书签 Alt+F2 :编辑书签 Ctrl+F2 :添加/删除一个书签 F12 :Goto definition Shift+F12 :Goto reference Ctrl+Num+ :Displays the n转载 2009-12-06 19:17:00 · 762 阅读 · 0 评论 -
对二维数组进行Zig-Zag扫描(C++)
对二维数组进行Zig-Zag扫描(C++),先自定义了一个类,类中有个函数Run()来实现这个扫描过程,二维数组是动态分配空间以及随机赋值的。 下图是Zig-Zag扫描方式: CZigZag.h: #includeusing namespace std;typedef struct CPoint{ int x; int y;}Point;class ZigZag{原创 2010-02-27 13:52:00 · 3850 阅读 · 1 评论 -
在dos下运行.exe程序(C++)
说明:在Dos下运行.exe程序(C++) 先看C++源文件:#includeusing namespace std;void main(int argc, char * argv[]){ cout for(int i = 0; i cout cout} 进入Dos,再进入.exe文件所在的目录,下面是运行结果: 仔细对比下main()的参数表和运行结果,你原创 2010-03-03 18:09:00 · 3579 阅读 · 0 评论 -
输出特殊形状的图形
输出如下面这种形状的图形:4 3 7 2 6 9 1 5 8 10 C++ Code: #includeusing namespace std;//N: 代表有多少行元素void Display(int N){ int i, j, v; if(N { cout return; } for(i = 0; i { for(j = 0; j { v = N原创 2009-12-25 09:30:00 · 1135 阅读 · 0 评论 -
SHA-1算法的C语言实现(源码来自网络)
来自网络上的SHA-1算法,自己加了少量注释,方便以后需要的时候可以利用。代码:/* sha1sum.c - print SHA-1 Message-Digest Algorithm * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * Copyright (C) 2004 g10 Code Gmb原创 2010-04-13 07:55:00 · 9412 阅读 · 4 评论 -
逗号表达式的值--最后一项的值
<br />C code:<br />#include <stdio.h><br />void main()<br />{<br /> int i = 2;<br /> int cc = -1;<br /> <br /> cc = (3+4, 1-2, 5*2);<br /> printf("cc = %d/n", cc);<br />}<br /> <br />运行结果:<br />cc = 10<br /> <br />注意:逗号表达式一定要加括号,要不然,表达式会被理解为:<br />1. cc =原创 2010-10-07 10:50:00 · 1451 阅读 · 0 评论 -
C语言的Trim, LTrim, RTrim
<br />抽空写了个C语言的Trim(), LTrim(), RTrim(),代码如下:<br />#include <iostream>using namespace std;char * LTrim(char * line) // 去除字符串最前面的空格符 { while(isspace(*line)) line++; return line;}char * RTrim(char * line) // 去除字符串最后面的空格符{原创 2010-11-02 23:00:00 · 3381 阅读 · 0 评论 -
微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字
/*******************************************************************************文 件 名 : test100.cpp实现功能 : 微软面试题: 有100万个数字(1到9),转载 2011-07-28 08:56:52 · 1313 阅读 · 0 评论 -
[Windowns C]递归遍历指定目录下的子目录和文件
/* 功能:演示了利用C语言递归遍历指定目录下的子目录和文件! 说明:经修改也可以搜索文件名符合特定格式的文件,如修改“\\*.*”为“\\*.log”*/#include #include #include using namespace s原创 2011-10-13 22:10:20 · 4275 阅读 · 1 评论 -
显示当前行号、文件名和函数名
在编程时,有时需要知道当前的代码是在第几行,当前文件名是什么,以及当前执行的是哪个函数?下面的代码可以轻松地完成这种功能:#include void test(){ printf("Line:%d, File:%s, Function:%s\n", __LINE__, __FILE__, __FUNCTION__);}int main(){ printf("原创 2011-10-21 13:41:44 · 1257 阅读 · 1 评论 -
单词统计程序
一个简单的单词统计程序, 问题来源: http://topic.csdn.net/u/20111114/10/2e439bbf-04c5-4042-9905-ece0bf008b97.html /* 功能:实现单词统计功能*/#include #include main(){ char *t[20]; // 声明一个指针数组,长度为20 char (*t2)[原创 2011-11-14 13:32:40 · 947 阅读 · 0 评论 -
从printf谈可变参数函数的实现
作者:戎亚新摘要:一直以来都觉得printf似乎是c语言库中功能最强大的函数之一,不仅因为它能格式化输出,更在于它的参数个数没有限制,要几个就给几个,来者不拒。printf这种对参数个数和参数类型的强大适应性,让人产生了对它进行探索的浓厚兴趣。关键字:printf, 可变参数 1. 使用情形 int a =10;double b = 20.0;char *str = "He转载 2011-11-01 10:14:51 · 551 阅读 · 0 评论 -
解析可变参数函数的实现原理(printf,scanf)
From: http://hi.baidu.com/huifeng00/blog/item/085e8bd198f46ed3a8ec9a0b.html 学习C的语言的时候,肯定接触到标准输出和标准输入函数。这个函数给人的感觉很强大,因为它很另类,就是这个函数的参数是可变的。下面是一个自己编写的可变参数的函数,它的功能是求和。如下#include #include i转载 2011-11-01 10:43:25 · 776 阅读 · 0 评论 -
我的C语言可变参数的实现
实现环境:Fedora12 + gcc任务:用C语言实现一个参数可变的函数,以方便输出。源代码如下:#include #include #include int sum(int data, ...){ int i = data, s = 0; va_list vl; va_start(vl, data); while(i != -1) {原创 2011-11-01 12:54:47 · 621 阅读 · 0 评论 -
perror的特殊输出
写了一个非常简单的C语言程序,为了测试perror会把数据输出到哪里。但它的运行结果让我无法理解,望高人解答:源码:#include int main(){ printf("Hello\n"); perror("Hello world\n"); return 0;}1. 首先在windows xp(vc6.0) 上编译运行,结果如下:He原创 2011-11-03 09:37:49 · 1121 阅读 · 0 评论 -
整型数组的循环右移
/* 实现整型数组的循环右移 cycleMoveR1:临时空间比较大,但是时间复杂度为O(1) cycleMoveR2:临时空间比较小,时间复杂度为O(n)*/#include #include #include #include // 数组循环右移moveLen个int cycleMoveR1(int arr[], int len, int mov原创 2011-11-06 23:20:12 · 976 阅读 · 0 评论 -
输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据
C程序,功能如题,代码如下:/* 功能:输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据 基本思路:产生一个长度为n的二维数组,将它作为一个循环队列来看待*/#include #include #include #define BUFLEN 256// 显示一个文件的最后len行数据void run(char *filename原创 2011-11-08 15:06:27 · 783 阅读 · 0 评论 -
输出上下对称的星型
输出星型,如: ******* ***** *** * *** ************C code:// 用法如:a.exe 7#includeint main(int argc, char *argv[]){ if(argc < 2) { printf("Usage: %s \n", argv[0]);原创 2011-11-08 22:30:45 · 1242 阅读 · 0 评论 -
一个很有深度的C++内存问题---GDB调试(一)
先看代码(a.c):#include int main(int argc, char* argv[]){ int a[4]={1,2,3,4}; int *ptr1=(int*)(&a+1); int *ptr2=(int*)((int)a+1); int *ptr3=(int*)(a+1); printf("a = %x, &a = %x, &a+1 = %x原创 2011-11-10 11:32:11 · 1130 阅读 · 0 评论 -
ULONGLONG乘法分析
From: http://blog.csdn.net/syf442/article/details/607771564位乘法分析:VC6 Console Code: int main(int argc, char* argv[]){ ULONGLONG a = 0x87654321; ULONGLONG b = 0x1转载 2011-12-05 14:03:00 · 1081 阅读 · 0 评论 -
求一个整数的阶乘结果中后缀0的个数
问题描述:给一个整数,请输出该数字阶乘的后缀0的个数,例如:数字7,它的阶乘为5040,后面有一个0,则输出1;还有数字10,它的阶乘为3628800,后面有两个0,则输出2。/* 功能:求一个整数的阶乘含有多少个0 如 5! = 120(1个0) 8! = 40320(1个0) 10! = 3628800(2个0) 15! = 1307原创 2011-11-14 17:06:11 · 1822 阅读 · 1 评论 -
ULARGE_INTEGER运算
在调用GetDiskFreeSpaceEx()获取磁盘空间时,由于参数是ULARGE_INTEGER(64位整数),所以普通的“加减乘除”并不支持(是没有实现),因此我们采用其他办法来实现,先来看下ULARGE_INTEGER的结构定义:typedef union _ULARGE_INTEGER { struct { DWORD LowPart; DWORD HighPar原创 2011-12-05 14:10:04 · 4047 阅读 · 0 评论 -
将一个BYTE数组转换成16进制字符串和10进制字符串格式
背景: unsigned char port[5]; 以02x的格式打印出来是 00 00 02 00 001.如何转成16进制形式的字符串,使得char *strport16 = "0000020000";2.如何转成10进制形式的字符串,使得char *strport10 = "131072";C code:#include #include原创 2011-12-06 11:04:07 · 5472 阅读 · 0 评论 -
CPUID详解[增加TLB与Cache]
From: http://bbs.pediy.com/showthread.php?threadid=21646标 题: CPUID详解[增加TLB与Cache]作 者: Pr0Zel时 间: 2006-02-21,22:00:23链 接: http://bbs.pediy.com/showthread.php?t=21646这是文章最后一次更新,加入了TLB与Cache信转载 2011-12-06 15:25:00 · 913 阅读 · 0 评论 -
printf的两个需要注意的问题:无符号整数和64位整数
From: http://www.cnblogs.com/lidp/articles/1696079.html 1) %d和%u的区别unsigned int dwValue;printf("%d", dwValue);在dwValue的值大于0x7FFFFFFF时,输出的结果会变成负数。正确的程序应该为:printf("%u", dwValue);2) 使用64位转载 2011-12-06 10:52:30 · 1526 阅读 · 0 评论 -
删除两个双向链表中值相同的结点--无空白头结点
有两个双向链表,头指针为:pListA和pListB,要求删除这两个链表中值相同的结点, C语言实现,结点结构如下:struct node // 双向链表结点{ int key; struct node *front, *next;};完整源代码如下:/* 功能:删除两个双向链表(都不带头结点)中值(key)相同的结点*/#include #原创 2011-12-16 16:28:45 · 1903 阅读 · 0 评论 -
删除两个双向链表中值相同的结点--带空白头结点
有两个双向链表,空白头结点为:ListA和ListB,要求删除这两个链表中关键字相同的结点, C语言实现,结点结构如下:view plainstruct node // 双向链表结点 { int key; struct node *front, *next;原创 2011-12-17 00:10:39 · 1338 阅读 · 0 评论 -
全排列算法原理和实现
From: http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1191914.html 全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以转载 2011-12-19 22:08:32 · 708 阅读 · 0 评论 -
输出一个等边三角形(由*拼接),实心或空心,连长为n
开发环境:VC6/* 功能:输出一个等边三角形(由*拼接),实心或空心,连长为n*/#include /* 将str重复输出len遍*/void Print(char str[], int len){ while(len-- > 0) printf("%s", str);}/* 功能: 输出长度为n的等边三角形 n: 三角原创 2011-12-20 16:40:57 · 2815 阅读 · 2 评论 -
约瑟夫问题
Josephus问题:假设n个竞赛者排成一个环形,依次顺序编号1,2,…,n。从某个指定的第1号开始,沿环计数,每数到第m个人就让其出列,且从下一个人开始重新计数,继续进行下去。这个过程一直进行到所有的人都出列为止。最后出列者为优胜者。无论是用链表实现还是用数组实现来解约瑟夫问题都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较麻烦,而且时间复杂度高达O(nm),当n,原创 2011-12-14 23:55:42 · 661 阅读 · 0 评论 -
判断一个数的二进制形式是否只有一个1,是的话就输出
// 判断一个数的二进制形式是否只有一个1,是的话就输出#include "stdafx.h"#include int main(int argc, char* argv[]){ unsigned int n = 0; char str[100] = {0}; do { if(n && (n & (n-1)) == 0) { printf("%d, %X\n",原创 2011-12-14 22:29:09 · 1565 阅读 · 0 评论 -
char[]:strlen和sizeof的区别
C code: // char[]:strlen和sizeof的区别#include #include int main(int argc, char* argv[]){ char str[] = "Hello man"; printf("str = %s\nstrlen(str) = %d\nsizeof(str) = %d\n", str, strle原创 2009-10-26 08:59:00 · 939 阅读 · 0 评论 -
宏定义中##和#的作用
From: http://blog.chinaunix.net/space.php?uid=16135252&do=blog&id=2752917内核中有很多的宏定义,在宏定义define中经常看到两个字符串##和#,这里把它的用法做一下说明: ##是一个连接符号,用于把参数连在一起 例如: > #define FOO(arg)转载 2011-12-14 22:58:11 · 732 阅读 · 0 评论