C/C++
文章平均质量分 90
cooloyty
stay hungry stay foolish
展开
-
多项式
#include#include//#define LISTSIZE 5typedef struct node{ float coe;//系数 int index;//指数 struct node *next;}Node;typedef struct { Node *head;}Polyn;/*********************原创 2013-01-03 10:43:20 · 465 阅读 · 0 评论 -
头文件不宜定义变量原因解析
转自:http://hi.baidu.com/zengzhaonong/blog/item/8c10e90366c2bf733912bbb0.html http://blog.csdn.net/wzsbll/article/details/6655919 test-1.0使用#ifndef只是防止了头文件被重复包含(其实本例中只有一个头件,不会存在重复包含的问转载 2012-10-24 11:52:38 · 716 阅读 · 0 评论 -
正则表达式30分钟入门教程
本文转自:http://www.oicto.com/html/regex.htm#resources 目录跳过目录本文目标如何使用本教程正则表达式到底是什么东西?入门测试正则表达式元字符字符转义重复字符类分枝条件反义分组后向引用零宽断言负向零宽断言注释贪婪与懒惰处理选项平衡组/递归匹配还有些什么东西没提到联系作者网上的资源及本文参考文献更新纪录本文目标30分钟内让你明白转载 2012-10-24 11:50:11 · 447 阅读 · 0 评论 -
堆和栈的区别(转过无数次的文章)
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2012-10-24 11:45:32 · 396 阅读 · 0 评论 -
函数的递归调用与栈
一、栈在说函数递归的时候,顺便说一下栈的概念。 栈是一个后进先出的压入(push)和弹出(pop)式数据结构。在程序运行时,系统每次向栈中压入一个对象,然后栈指针向上移动一个位置。当系统从栈中弹出一个对象时,最近进栈的对象将被弹出。然后栈指针向下移动一个位置。程序员经常利用栈这种数据结构来处理那些最适合用后进先出逻辑来描述的编程问题。这里讨论的程序中的栈在每个程序中都是存在的,转载 2012-10-22 22:10:06 · 4515 阅读 · 1 评论 -
关于函数参数的一点总结
先理解一个东西:int n;n = 3;printf("%d", n);printf(“%d”,&n); 看一下n在内存中的表现int n;申请一段内存,这是n就代表一段sizeof(int)个字节的内存,“12FFCC”表示这段内存的首地址,也就是第一个字节的地址(因为内存单元是以字节为单位的),第一个输出就是输出这段内存中存储的数据,就是3,&是取址符,原创 2012-10-31 22:05:06 · 567 阅读 · 0 评论 -
选择排序(指针)
#include#includetypedef struct node{ int num; struct node *next;}Node, *NODE;NODE Rank(NODE head);void print(NODE head);main(){ NODE pt, head, tail, p; int i; /*先初始化一个有十个节点的链表,注意, 头部有一个原创 2012-10-21 22:28:10 · 712 阅读 · 0 评论 -
密码
#include#includemain(){ int n,a,b,c,d,num,i,len; char ch[51]; scanf("%d", &n); getchar(); while(n --){ gets(ch); i = 0; num = 0; a=b=c=d=0; len = strlen(ch); if(len>=8&原创 2012-10-31 08:25:14 · 516 阅读 · 0 评论 -
一只小蜜蜂
#include#includemain(){ int n, i; __int64 str[100]={0,1,2}; int sub, a, b; scanf("%d", &n); getchar(); while(n--){ scanf("%d%d", &a,&b); if(a>0&&a0&&b<50&&a<b){ sub = b-a;原创 2012-10-31 09:11:14 · 428 阅读 · 0 评论 -
冒泡法排序(指针)
#include#includestruct node{ int data; struct node *next;}; main(){ struct node *head, *tail, *p, *pt, *p1, *p2, *p0; int i; p = (struct node*)malloc(sizeof(struct node)); p->next = NULL;原创 2012-10-21 19:00:39 · 889 阅读 · 0 评论 -
字符编码笔记:ASCII,Unicode和UTF-8
作者: 阮一峰日期: 2007年10月28日今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码转载 2012-10-21 08:44:50 · 415 阅读 · 0 评论 -
VC调试进阶
vc的调试,可以参考如下:检测程序中的括号是否匹配把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号捷键“Ctrl+]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。2.查看一个宏(或变量、函数)的宏定义把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或转载 2012-10-30 12:09:29 · 493 阅读 · 0 评论 -
今年暑假不AC(贪心算法)
#includemain(){ int a[100],b[100],n; int count, flag, i, j, t; while(scanf("%d", &n)&&n){ /*首先将始终时间输入*/ for(i=0; i<n; i++){ scanf("%d%d", &a[i],&b[i]); } /*将输入以结束时间排序*/ for(原创 2012-10-30 15:09:27 · 537 阅读 · 0 评论 -
c语言文件操作
转载自:http://blogold.chinaunix.net/u3/99862/showart_2069574.html写在前昨天带实验的时候发现很多同学在读文件的时候老是要么多了一个字符,要么不能完全读取……以前在用C的时候对文件操作自己也会遇到一些问题,但是都没有去深究,昨晚突然心血来潮,决定把他弄清楚。测试环境windowsc-free3.0C文件操作遇到的状况转载 2012-10-21 09:10:35 · 608 阅读 · 0 评论 -
链表 头指针 头结点
图1为线性表(ZHAO, QIAN, SUN, LI, ZHOU, WU, ZHENG, WANG)的逻辑状态。头指针 指示链表中第一个结点(即第一个数据元素的存储映像)的存储位置。同时,由于最后一个数据元素没有直接后继,则线性链表中最后一个结点的指针为“空”(NULL)。 图1 线性链表的逻辑状态由上述描述可见,单链表可由头指针来唯一确定,在C语言中可用转载 2012-10-21 08:26:25 · 904 阅读 · 0 评论 -
关于malloc函数和free函数的一些总结
malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后原创 2012-10-16 21:03:19 · 1570 阅读 · 0 评论 -
转)C语言中auto,register,static,const,volatile的区别
1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。 (2)register 这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。 (3)static 常见的两种用途:转载 2012-10-24 11:57:30 · 560 阅读 · 0 评论 -
二叉排序树-2
#include#include#include#include#include#define LISTSIZE 10//初始化申请内存大小#define ADDSIZE 1//每次增加的内存大小#define STACKSIZE 100typedef struct { int *data; int length;//所存元素占内存大小 in原创 2013-01-03 10:42:22 · 457 阅读 · 0 评论 -
二叉排序树
#include#include#include#include#include#define LISTSIZE 10//初始化申请内存大小#define ADDSIZE 1//每次增加的内存大小#define STACKSIZE 100typedef struct { int *data; int length;//所存元素占内存大小 in原创 2012-12-27 11:00:53 · 365 阅读 · 0 评论 -
<5>c语言实现ATM存取款系统(文件、排序)
#include#include#include#include#include#define N 100typedef struct info { char account[21]; char user[21]; long dsit; long pw; struct info *next;}Info;void login();void regist();int原创 2012-12-05 08:15:43 · 1588 阅读 · 1 评论 -
邻接表表示的深度优先搜索
#include#include#define MAXVEX 100//边表结点 typedef struct node{ int adjvex;//邻接点域 char adjweg;// struct node *next; }EdgeNode;//顶点表结点 typedef struct Vnode{ char vertex;//顶点域原创 2012-11-19 22:21:02 · 576 阅读 · 0 评论 -
邻接矩阵表示的深度优先搜索
#include#include#define MAXVEX 100//最大顶点数typedef struct { char vexs[MAXVEX];//顶点表 int edges[MAXVEX][MAXVEX];//邻接矩阵 int n, e;//顶点数和边 }MGraph;int visited[100];void DFSM(MGraph *G,原创 2012-11-19 22:09:24 · 748 阅读 · 0 评论 -
邻接表
#include#include#define MAXVEX 100//边表结点 typedef struct node{ int adjvex;//邻接点域 char adjweg;// struct node *next; }EdgeNode;//顶点表结点 typedef struct Vnode{ char vertex;//顶点域原创 2012-11-19 22:07:13 · 453 阅读 · 0 评论 -
邻接表表示的广度优先搜索
#include#include#define MAXLEN 100/*邻接点域*/typedef struct node{ int adjnum; char adjvex; struct node *next;}EdgeNode;/*顶点域*/typedef struct vnode{ char vertex; EdgeNode *firstedge;}Vnod原创 2012-11-30 16:53:44 · 705 阅读 · 0 评论 -
图--邻接矩阵(数组表示法)
/*图的邻接矩阵,算法7.2借助邻接矩阵很容易判定任意两个顶点之间是否有边(弧)相连,并容易求得各个顶点的度*/#include#define MAXLEN 10typedef struct { char vexs[MAXLEN];//顶点向量,存储一串顶点标识 int edges[MAXLEN][MAXLEN];//表示两个顶点之间的关系 i原创 2012-11-13 22:08:42 · 1172 阅读 · 0 评论 -
冒泡法排序(指针)--2
#include #include struct node{ int data; struct node *next; }; void print(struct node *head); main(){ struct node *head, *tail, *p, *pt, *p1, *p2, *原创 2012-10-24 17:59:52 · 1134 阅读 · 0 评论 -
VC断点调试
按F9(设置断点),F5调试,F10单步调试,shift+F5退出调试F10单语句执行,F11单指令执行,Ctrl+F10执行至光标处;F9按行设置/取消断点, Alt+F9可按行,按数据或按消息设置断点;调试时,按Alt+3打开跟踪窗口,Alt+4打开变量窗口,Alt+5打开寄存器窗口,Alt+6打开内存窗口,Alt+7打开堆栈窗口,Alt+8打开汇编指令窗口;原创 2012-10-27 17:44:00 · 571 阅读 · 0 评论 -
指针小结
先了解存储单元,内存(一般是2G)里的存储单元是以字节为单位的,每一个字节有一个编号,如下图:以上表示的是某一段内存(H表示地址是以16进制表示的)。存储单元从零开始编号,这些编号可以看作存储单元在内存中的地址。就像一条街,每个房子都有门牌号码。CPU从内存中读数据,首先要指定存储单元的地址,也就是说它要先确定它要读取哪一个存储单元中的数据。就像在一条街上找人,先要确定他住在哪个房原创 2012-10-29 11:13:45 · 658 阅读 · 0 评论 -
错排详解
错排问题一个寝室有四个人,过节时,每个人都会送出一封贺卡,假如一个盒子里有四封贺卡,寝室的每个成员都要拿出一封,但是肯定不能拿自己写的贺卡,如果每个人拿到的是别人送的贺卡,问这种情况有多少种?这就是典型的错排问题。先给出公式:f(n) = (n-1)*(f(n-1) + f(n-2)).分两步:第一步:第一个人的贺卡放到2,3,4中的一个,此时有n-1种情况。第二步:接到第原创 2012-11-06 08:07:22 · 952 阅读 · 0 评论 -
排序系列- 堆排序
1、 堆排序定义 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩转载 2012-10-24 11:48:09 · 757 阅读 · 0 评论 -
关于指针变量所占内存空间大小的问题
在编译器里定义一个指针变量,编译器会给这个指针变量分配一个空间,这个空间里存放的是一段内存的首地址,先解释一段内存,一段内存的大小是与你所定义的指针类型相关的,比如int,这段内存占四个字节(当然要看你的机器是多少位的了),则这段内存的首地址是第一个字节的地址,如char类型,占一个字节,这段内存的首地址就是这个字节的地址,还如结构体类型,此时内存大小要看该结构体的所有属性所占内存之和。现在解释这原创 2012-10-16 20:15:00 · 8217 阅读 · 2 评论 -
<4>c语言实现ATM存取款系统(链表)
数组是比较基础的东西,真正的是要会用链表,这样灵活性更高,更方便#include#include#include#include#include #define N 100struct info { char account[30]; char user[100]; long dsit; long pw; struct info *next;原创 2012-10-03 19:24:33 · 4383 阅读 · 1 评论 -
<3>c语言实现ATM存取款系统(数组实现)
第一篇讲了用数实现的爆栈的ATM系统,第二篇的框架保证了每个函数都可以执行完,然后根据返回的值采取相应的措施,这一篇可以用数组实现相对比较正确的ATM系统了。#include#include#include#include#include #define N 100struct info { char account[30]; char user[100];原创 2012-10-03 19:20:55 · 2721 阅读 · 0 评论 -
高精度计算
一、数据输入先将要计算的数据输入到内存中一般是按位存到数组中,按位对齐。定义:第一位表示个位,n表示最高位。1、利用字符串输入:先以字符串方式输入,再存入数组。对非法输入可以作检查,处理小数、有符号数比较方便。但需要对字符串操作比较熟悉。字符串的输入和转换可用如下语句:int a[100] = {0}, b[100] = {0};int ka, kb, kc;cha转载 2012-07-12 22:30:26 · 2494 阅读 · 0 评论 -
<1>c语言实现ATM存取款系统(数组)
这个代码是用数组实现的,整个代码看上去很清晰,思路很清楚,便于对ATM有一个整体的了解,但代码有一个致命的问题,就是会发生爆栈,也就是说程序中函数不断地调用函数,事实上没有一个函数执行完,这样的话,多进行几项业务,栈就会充满,最后爆栈,程序自动退出。 #include#include#include#include#include #define N 100st原创 2012-10-03 19:00:53 · 1864 阅读 · 0 评论 -
<2>ATM的框架(框架)
写一个程序之前最好做出一个框架,然后再往里面填代码,这样会变得很简单,这是一个好的编程习惯,针对上一篇文章中爆栈的问题,这次先写出框架,先保证不会爆栈,对整个程序有一个很清楚的认识,知道要干什么?什么时候干?怎么干?#include#include main() { int choice =- 1; while(1) { pr原创 2012-10-03 19:15:20 · 1046 阅读 · 0 评论 -
c语言的内存分配
看了以下几篇文章,对内存能理解一二了。第一篇、原文地址动态存储方式所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放。如果一个函数被多次调用,则反复地转载 2012-09-05 08:07:55 · 3618 阅读 · 0 评论 -
进制转换
#includemain(){ int n,m,i,j,a[100]={0},k; while(scanf("%d%d",&n,&m)!=EOF) { i=0; if(n>=0)k=n; else k=-n; while(k!=0) { a[i]=k%m; k/=m; i++; } if(n<0)printf("-"); for(j=i-原创 2012-07-14 00:31:26 · 464 阅读 · 0 评论 -
c语言在输入字符串时输入空格的方式
1.最容易的,将一个字符串分为一个一个字符输入 char s[100]; int i=0; while(scanf("%c",&s[i]),s[i]!='/n')i++; s[i]='/0'; //遇到换行停止输入,并且将换行替换为/0 printf("%s/n",s); 但是如果在这段程序前还有其他类型的输入,则需要把回车吃掉,即加一条scanf("%*c"),因为sca转载 2012-07-12 08:55:04 · 11416 阅读 · 0 评论