C语言
ljyf5593
这个作者很懒,什么都没留下…
展开
-
命令行参数及字符串常量
命令行参数是C语言中指向指针的指针的另一个用武之地,很多的操作系统都允许用户在命令行中编写参数来启动一个应用程序的执行,这些参数被传递给程序,程序按照他认为合适的任何方式对它们进行处理。 我们首先来研究一下C语言中main函数的参数,main函数有两个参数,argc原创 2010-11-11 18:28:00 · 790 阅读 · 0 评论 -
抽象数据类型
经典的抽象数据类型包括:链表、堆栈、队列和树,这些数据结果在编程中的应用是非常广泛的,需要一项一项的学精学透。所有的抽象数据类型都必须先确定一件事情,那就是如何获取内存来存储值。有三种可选方案: 静态数组:缺点——静态数组要求结构的长度固定,而且这个长度必须在编译时确原创 2010-11-25 17:27:00 · 679 阅读 · 0 评论 -
队列
队列的特点就不需要再多说了,用于执行元素的插入和删除的函数并没有一个被普遍认可的名字,所以我们将使用insert和delete这个两个名字,并且也没有规定插入到底是在对头还是队尾,总之就是插入和删除各在一头,但是为了现实中的队列相吻合往往比较容易记忆,所以这里同一使用在队尾插入元原创 2010-11-26 17:04:00 · 1027 阅读 · 0 评论 -
可变参数列表
C语言中可变参数列表是通过宏来实现的,这些宏包含在stdarg.h头文件中,该头文件定义了va_list类型和三个宏:va_start、va_arg、va_end。用法:首先声明一个va_list类型的变量,使用va_start宏进行初始化,va_start宏的第一个参数是该va原创 2010-10-12 16:38:00 · 735 阅读 · 0 评论 -
将整型值转换为单词的形式(练习)
#include #include static char *digits[] = {"", "ONE ", "TWO ", "THREE ", "FOUR ", "FIVE ", "SIX ", "SEVEN ", "EIGHT ", "NINE ", "TEN ", "ELE原创 2010-10-14 18:11:00 · 616 阅读 · 0 评论 -
字符串操作函数
字符串主要是了解标准库中的函数的用法及注意事项:1、strlen(char const *str) 函数的返回值类型为size_t,这个类型是在头文件stddef.h中定义的,它是一个无符号整型类型,注意这点儿很重要,例如下面的判断语句将永远返回真: if (原创 2010-10-22 16:55:00 · 341 阅读 · 0 评论 -
宏与函数
宏与函数的一些优劣一般宏用于执行简单的运算,例如:#define MAX(a,b) ((a) > (b) ? (a) : (b))这种情况下使用宏比使用函数要好,原因有两点:1、调用函数要消耗系统一定的额外时间,执行额外的代码(保护处理器现场、数据原创 2010-11-14 15:40:00 · 524 阅读 · 0 评论 -
堆栈
基本的堆栈操作通常被称为push和pop,push就是把一个新值压入堆栈的顶部,pop就是把堆栈顶部的值移出堆栈并返回这个值,堆栈只提供对它顶部值的访问。还有另一种堆栈接口提供top操作,top操作返回顶部元素的值,但它并不把顶部元素从堆栈中移除。因此使用top操作可以反复取得栈原创 2010-11-25 17:51:00 · 1280 阅读 · 0 评论 -
二叉搜索树-数组的实现方式
树是一种相对比较复杂的数据结构,它要么为空,要么具有一个值并具有零个或多个孩子,每个孩子本身就是树,这是一个递归的定义,二叉树是树的一种特殊形式,也是数据结构中最常用到的形式,二叉树又可以根据左右孩子节点与跟节点的大小关系分为很多种,这里以二叉搜索树为例学习,二叉搜索树有一个额外原创 2010-11-28 17:55:00 · 2496 阅读 · 2 评论 -
ADT实现的改进
在前面关于ADT堆栈、队列、二叉搜索树的实现都是简单的实现方式,目的是对这几种常见的ADT有一个实现方式的认识,在实际的编程中,前面的几种实现方式限制太多,最主要的一个问题是它们把用于保存结构的内存和那些用于操纵它们的函数都封装在一起了,如果一个程序需要不止一个的堆栈,那么这种封原创 2010-12-01 13:52:00 · 602 阅读 · 0 评论 -
C语言中的指针与下标
在C语言中所以可以使用下标的地方都可以使用指针来实现,指针和下标在编译器中都是以指针的形式来实现的,例如:int a[10];int *pa;pa = a;/*则下面的几个表达式的结果都是相同的*/a[2];2[a];/*这个表达式可能看起来很怪但它的确是合法的*/*(a +原创 2010-10-15 14:16:00 · 5146 阅读 · 2 评论 -
字符操作
标准库中包含了两组函数用于操作单独的字符,它们的原型位于头文件ctype.h。第一组函数用于对字符串进行分类,第二组函数用于转换字符。一、字符分类: 1、iscntrl:任何控制字符 2、isspace:任何空白字符 3、isdigit:十原创 2010-10-25 15:58:00 · 294 阅读 · 0 评论 -
C语言使用正则筛选字符串
char string[512];char digit[512];sscanf("dfdfdf100ghghjsdfsd", "%[a-z]%[0-9]", string, digit);printf("%s", string);printf("%s", digit);sscanf("中文支持吗100ghghjsdfsd", "%[^0-9]%[0-9]", string, digit原创 2012-01-30 16:03:04 · 2431 阅读 · 0 评论 -
使用插入排序实现qsort函数(练习)
插入排序的方法就不需要详细介绍了,这次主要使用插入排序实现C语言标准函数库中的qsort函数,函数的原型和qsort一样就是实现给定数组的排序,并且排序和数组中元素的类型无关,这样任何数组都可以使用这个排序算法,函数的原型如下:void insertion_sort( v原创 2010-11-25 17:02:00 · 960 阅读 · 0 评论 -
预处理器(#define)
#define宏的一些用法 首先让我们来查看这个预处理指令更为正式的描述: #define name stuff 有了这条指令以后,每当有符号 name出现在这条指令的后面时,预处理器就会把它替换成stuff。 我们常常使原创 2010-11-12 17:55:00 · 926 阅读 · 0 评论 -
函数指针应用
通过上一节对复杂声明的分析接触到了函数指针这个东西,实际上函数指针和其他的指针一样,在使用时也是要先进行初始化的,函数指针的初始化方法例如下: int f( int value ); int (*pf)( int va ) =原创 2010-11-10 17:46:00 · 447 阅读 · 1 评论 -
预处理器--宏(练习)
1、编写一个用于调试的宏,打印出任意的表达式,它被调用时应该接受两个参数。第一个是printf格式码,第二个是需要打印的表达式。下面的宏在此基础上做了一下扩充(同时打印出文件名和行号): #define DEBUG_PRINT(fmt,value)原创 2010-11-14 18:49:00 · 389 阅读 · 0 评论 -
递归与迭代
递归函数在运行时将带来一部分运行时开销:参数必须压栈、为局部变量分配内存、寄存器的值必须保存等;当递归函数每次调用返回时,上述的操作都需要还原恢复成原来的样子。因此递归函数的效率并不会很高; 一个递归的函数往往可以改写成迭代的形式,而迭代比递归的效率要高很多,许多问原创 2010-10-12 15:07:00 · 2092 阅读 · 0 评论 -
多维数组
1、静态与自动初始化: 变量的初始化取决于它的存储类型,存储于静态内存中的变量只初始化一次,并且它的初始化是在程序开始之前,程序并不需要执行任何指令把需要初始化的值放到合适的位置,它们从程序开始运行时就在那里了,这个任务是由链接器来完成的;它用可执行文件中合适的值对变量进行原创 2010-10-17 16:24:00 · 511 阅读 · 0 评论 -
内存操作
内存操作函数与字符串操作函数类似,因为字符串函数都是以NULL结尾的,但是,存在许多非字符串数据内部包含零值的情况也需要和字符串类似的操作,但我们无法使用字符串函数来操作,因此就有了内存操作函数,这些函数不会受到NULL字节的影响。 1、void *memcpy( voi原创 2010-10-25 17:40:00 · 383 阅读 · 0 评论 -
查找字符串中某个特定的单词出现的次数(练习)
对标准输入进行扫描,并对单子“the”进行计数,进行比较时区分大小写,单词以一个或多个空格字符分隔。输入行的长度不超过100个字节。#include #include /*存储从标准输入中读取的字符串*/char buffer[101];/*定义空白字符*/char whit原创 2010-10-27 13:57:00 · 4215 阅读 · 0 评论 -
C语言中的复杂声明
在C语言的高级指针中会使用到一些比较复杂的声明,因此理解C语言中的声明的含义很重要,这里有一个诀窍,所有C语言中的声明都可以使用求值的方式一层一层的来分析,把声明当作一个表达式对其进行求值,首先分析一个简单的例子来练一练手: int *f();原创 2010-11-10 17:08:00 · 436 阅读 · 0 评论 -
利用转换表判断字符的类型(练习)
题目:编写一个程序,从标准输入读取一些字符,并根据字符的分类计算各类字符的百分比。 要求:不能使用一系列的if语句,字符判断可以使用ctype.h头文件中定义的函数。 代码#include #include #include /*各种判断字符类型的函数均原创 2010-11-12 11:41:00 · 548 阅读 · 0 评论 -
输入输出函数
在系统学习输入输出函数之前,首先了解一个 stdio.h 头文件。头文件stdio.h包含了标准库函数的I/O部分的声明流的概念:就C语言而言,所有的I/O操作只是简单的从程序中移进移出字节的事情,因此这种字节流杯称为流,程序只需关心创建正确的输出字节数据,以及正确的解释原创 2010-11-15 17:43:00 · 1114 阅读 · 0 评论 -
信号
程序常常在运行时会遇到并不是因为程序运行本身所引发的事件,比如说用户突然中断了程序的运行,因此程序也不得不终止,但是有一部分已经计算好的结果不想丢弃这样就需要在程序退出时保存这些数据,因此程序必须对此类事件做出反映。虽然他并没有办法预测这种情况会在什么时候发生。 信原创 2010-11-24 14:42:00 · 413 阅读 · 0 评论 -
二叉搜索树-链式结构实现方式
实际上链式结构才是实现二叉树最常用的存储形式,它解决了数组存储中非常大的空间浪费,而且链式结构也非常符合二叉树的表现形式。下面是链式结构中常见的节点结构:typedef struct TreeNode{TREE_TYPE value;原创 2010-11-30 17:26:00 · 878 阅读 · 0 评论 -
字符串加密的简单实现(练习)
说一下这个加密算法的实现过程,首先根据用户输入的key密匙字符串创建一个新序列的26字母字符串,这个字符串匙的创建过程是: 1、去除key中重复的字符,并全部转换为小写字母。 2、将去除重复字符的字符串排在26个字母的顺序的前面,将剩余的未在key字符传中出现的字原创 2010-10-27 20:21:00 · 3889 阅读 · 0 评论 -
将数字字符串转换为美元的形式(练习)
实现的功能: 输入 输出 输入 输出 0原创 2010-10-28 13:13:00 · 1215 阅读 · 0 评论 -
C语言中的结构
1、C语言中的结构与数组的区别,首先它们的相同点是都是聚合数据类型都可以同时存储超过一个的单独数据,但是他们之间的区别却是非常重要的:结构不可以像数组那样使用下标或指针来间接访问它的每一个元素;数组中的元素之所以可以使用下标来访问是因为它的每一个元素的长度都相同,但是结构的每原创 2010-11-01 17:17:00 · 400 阅读 · 0 评论 -
动态内存分配
关于malloc和free 这两个函数共同维护一个可用内存池,当一个程序需要一些内存空间时就调用malloc函数,这个函数就从内存块中提取一块儿合适的内存,并向调用程序返回一个指向该块内存的指针,注意,这个被分配的内存空间并没有以任何方式对其进行初始化,因此如果需要原创 2010-11-09 17:47:00 · 342 阅读 · 0 评论 -
C实现类似C++中的泛型效果
#include #include int intComp(void *a, void *b){ int *p1 = (int *)a; int *p2 = (int *)b; return *p1 - *p2;}int strComp(void *a, void *b){ char *p1 = (char *)a; char *p2 = (char *)b; re原创 2012-05-12 18:37:27 · 684 阅读 · 0 评论