C
这是个人学习C语言时总结的C语言的一些特性,希望可以在其他人学习C语言时提供一些帮助
海天up
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉树的C语言实现
今天使用C语言实现通用树结构。下面是Main.c文件:#include <stdio.h>#include "GTree.h"int main(){ GTree *tree = GTreeCreate(); if(tree != NULL) { LinkList* list = NULL; GTreeNode *node = NULL; GTreeInsertValue(tree, 1, node); node = GTreeFindValue(tre原创 2020-08-13 11:30:20 · 572 阅读 · 0 评论 -
通用树结构的C语言实现
今天使用C语言实现通用树结构。下面是Main.c文件:#include <stdio.h>#include "GTree.h"int main(){ GTree *tree = GTreeCreate(); if(tree != NULL) { LinkList* list = NULL; GTreeNode *node = NULL; GTreeInsertValue(tree, 1, node); node = GTreeFindValue(tre原创 2020-08-13 11:20:28 · 684 阅读 · 0 评论 -
使用队列实现栈——基于C语言
今天使用之前实现的队列实现栈。下面是Main.c文件;#include "QueueToStack.h"#include <stdio.h>int main(){ QueueToStack* stack = QueueToStackCreate(); if(stack != NULL) { int i, len = -1, data = -1; for(i = 0; i < 100; i++) { QueueToStackPush(stack,原创 2020-08-13 10:06:28 · 479 阅读 · 0 评论 -
使用栈实现队列——基于C语言
今天使用之前实现的栈实现队列。下面是Main.c文件:#include "StackToQueue.h"#include <stdio.h>int main(){ StackToQueue* queue = StackToQueueCreate(); if(queue != NULL) { int i, len = -1, data = -1; for(i = 0; i < 100; i++) { StackToQueueEnqueue(que原创 2020-08-13 09:57:40 · 314 阅读 · 0 评论 -
动态栈——基于C语言
使用之前实现了的链表实现了数据结构中的动态栈。下面是Main.c文件:#include "DynamicStack.h"#include <stdio.h>int main(){ DynamicStack* stack = DynamicStackCreate(); if(stack != NULL) { int i, len = -1; for(i = 0; i < 10; i++) { DynamicStackPush(stack, i);原创 2020-08-13 09:47:13 · 191 阅读 · 0 评论 -
动态队列——基于C语言
使用之前实现了的链表实现了数据结构中的动态队列下面是Main.c文件:#include "DynamicQueue.h"#include <stdio.h>int main(){ DynamicQueue* queue = DynamicQueueCreate(); if(queue != NULL) { int i, len = -1, data = -1; for(i = 0; i < 100; i++) { DynamicQueueEnq原创 2020-08-13 09:37:32 · 546 阅读 · 0 评论 -
malloc与calloc的差别
malloc与calloc的差别:当系统的内存空间只剩下一些非常小的碎片时,用 calloc()函数设计的动态数组的时间效率优于用 malloc()函数设计的动态数组的时间效率。...原创 2019-09-24 14:49:50 · 198 阅读 · 0 评论 -
静态栈——基于C语言
最近复习了C语言的相关知识,实现了静态栈。下面是Main.c文件:#include "StaticStack.h"#include <stdio.h>int main(){ StaticStack* stack = StaticStackCreate(); if(stack != NULL) { int i, len = -1, data = -1; for(i = 0; i < StaticStackCapacity(stack); i++)原创 2020-08-12 15:16:38 · 354 阅读 · 0 评论 -
静态队列——基于C语言
最近复习了C语言的相关知识,实现了数据结构中的静态队列。下面是Main.c文件:#include "StaticQueue.h"#include <stdio.h>int main(){ StaticQueue* queue = StaticQueueCreate(); if(queue != NULL) { int i, len = -1, data = -1; for(i = 0; i < StaticQueueCapacity(queue)原创 2020-08-12 15:01:35 · 290 阅读 · 0 评论 -
双向循环链表——基于C语言
最近复习了C语言的相关知识,实现了数据结构中的双向循环链表。下面是Main.c文件:#include "DualClcLinkList.h"#include <stdio.h>int main(原创 2020-08-12 14:15:28 · 258 阅读 · 0 评论 -
循环链表——基于C语言
最近复习了C语言的相关知识,实现了数据结构里面的双向链表。下面是Main.c文件:原创 2020-08-12 13:27:07 · 150 阅读 · 0 评论 -
双向链表——基于C语言
最近复习了C语言的相关知识,实现了数据结构里面的双向链表。下面是Main.c文件:#include "DualLinkList.h"#include <stdio.h>int main(){ DualLinkList *list = DualLinkListCreate(); if(list != NULL) { int i = 0; printf("此时双向链表长度为:%d\n", DualLinkListLength(list));原创 2020-08-12 10:59:03 · 157 阅读 · 0 评论 -
顺序表——基于C语言
最近复习了C语言的相关知识,实现了数据结构中的顺序表。下面是Main.c文件:在这里插入代码片原创 2020-08-12 10:08:27 · 182 阅读 · 0 评论 -
链表——基于C语言
最近复习了C语言的一些知识,使用C语言实现了数据结构中的链表。下面是Main.c文件:#include "LinkList.h"#include <stdio.h>int main(){ LinkList *list = LinkListCreate(); if(list != NULL) { int i; printf("len = %d\n\n", LinkListLength(list)); for(i = 0; i < 10;原创 2020-08-11 18:01:56 · 172 阅读 · 0 评论 -
函数的本质与设计原则
函数的本质函数的本质是一段可以重复使用的代码,这段代码被提前编写好了,放到了指定的文件中,使用时直接调取即可。面向过程是一种以过程为中心的编程思想,它首先将复杂的问题分解为一个个容易解决的问题,分解过后的问题可以按照步骤一步步完成,函数是面向过程在C语言中的体现,解决问题的每个步骤可以用函数来实现。声明的意义在于告诉编译器程序单元的存在,定义则明确指示程序单元的意义。C语言可通过extern进行程序单元的声明。函数参数函数参数本质上是与局部变量相同的栈上变量,初始值是函数调用时的实参值。函数调原创 2020-07-31 11:07:44 · 638 阅读 · 0 评论 -
基于C语言文件操作和链表操作完成的文件加密系统
下面是文件加密系统的界面:该文件加密系统共有加密文件、解密文件、查询某文件是否被加密、显示所有的加密文件信息4个功能。大致工作流程:程序启动后,首先打开固定的已加密文件信息保存文件,读取文件信息存在到链表中。然后等待用户输入命令。如果用户输入1:程序请求输入待加密文件文件名,如果用户输入错误的文件名,程序显示提示信息后返回主界面,如果用户输入正确的文件名,打开文件读取内容到缓存进行逐字节加密,加密完成写入到一个临时文件,等待所有的文件内容均被读出加密后再把临时文件内容写回到源文件。加密操作完成,将原创 2020-07-30 15:37:09 · 348 阅读 · 0 评论 -
指针与数组与函数指针
指针的本质分析变量的本质是一段存储空间的别名,指针的本质是一种特殊类型的变量,这种变量的存储空间中存储的是另一个变量的地址。*号的意义:*号代表所申明的变量是指针;*号表示取指针所指向内存空间的值。该使用传值调用还是传址调用:当函数内部需要改变实参的值,则需要使用传址调用;如果函数需要传入的参数类型复杂,体积巨大,又不希望参数在函数体内部被改变,应该使用const指针。const指针:const datatype* p; //p可以被改变,*p不能改变dataty原创 2020-07-30 10:17:21 · 260 阅读 · 0 评论 -
C语言宏的使用分析
#define#define定义的宏可以出现在程序的任何位置#define定义之后的代码都可以使用这个宏#define定义的宏常量本质为字面量#define表达式不能出现递归定义C语言中的内置宏ANSI C 规定了以下几个预定义宏,它们在各个编译器下都可以使用:LINE:表示当前源代码的行号;FILE:表示当前源文件的名称;DATE:表示当前的编译日期;TIME:表示当前的编译时间;STDC:当要求程序严格遵循ANSI C标准时该标识被赋值为1;__cplusplus:当编写C++程原创 2020-07-29 13:47:11 · 302 阅读 · 0 评论 -
交换两个元素值的三种实现方法
//第一种 int fun(a,b){ a=a^b; b=a^b; a=a^b;} //第二种int fun(a,b){ int c=a; a=b; b=c;}//第三种int fun(a,b){ a=a+b; //当a和b都比较大的时候,可能产生数据溢出。 b=a-b; a=a-b;}原创 2020-07-29 10:35:13 · 951 阅读 · 0 评论 -
goto、void、const、volatile、struct、union、enum、sizeof的一些使用注意事项
gotogoto绝对禁止使用void如果函数没有返回值,应该将其声明为void,如果函数没有参数,应该将其声明为void,void不能定义变量和数组,但能够定义指针。void指针的意义:void指针作为左值时用于“接受”任意类型的指针,void*指针作为右值使用时需要强制类型转换。void*指针接受一个其他类型的指针后自身的类型不会转变。constconst定义一个只读变量。const不能出现在赋值符号的左边,但可以在定义的时候初始化。const只在编译期有用,在运行期无用(我们可以在运行原创 2020-07-29 10:28:15 · 346 阅读 · 0 评论 -
运算符结合性与优先级一览表
原创 2020-07-28 13:12:05 · 184 阅读 · 0 评论 -
使用循环与分支结构的一些注意事项
if语句用于根据条件选择执行语句,else不能独立存在且总是跟它最近的if相匹配if语句零值比较的注意点:变量与0值进行比较的时候,0值应该出现在等式的左边;float型变量不能直接与0值进行比较,需要定义精度。switch语句对应单个条件多个分支的情形,case语句分支必须要有break,否则会导致分支重叠,default语句必须要加上,以处理特殊情况case语句中的值必须是整型,字符型,并且只能是常量。break表示终止循环的执行,可跳出一次for循环、while循环、do{..原创 2020-07-28 11:31:03 · 674 阅读 · 0 评论 -
C语言输入详解(主要是scanf函数)
C语言基本输入在C语言中,有多个函数可以从键盘获得用户输入:scanf():和printf()类似,scanf()可以输入多种类型的数据;getchar():输入单个字符;gets():获取一行数据,作为字符串进行处理;getche():window平台特有输入函数,无缓冲的获取单个输入字符;getch():window平台特有输入函数,无缓冲无回显的获取单个输入字符。其中,scanf()是格式化输入函数,可通过格式控制符控制获取输入数据的类型。部分scanf()格式原创 2020-07-28 10:33:06 · 884 阅读 · 0 评论 -
C语言输入输出缓冲区和清空输入缓冲区的一种方式
为了让低速的输入输出设备和高速的用户程序能够协调工作,并降低输入输出设备的读写次数,计算机在内存中预留了一定的内存空间,用来暂时保存输入或输出的数据,这部分预留的空间就叫做缓冲区。根据数据刷新的时机,缓冲区可以分为全缓冲、行缓冲、不带缓冲三类缓冲区。全缓冲:在这种情况下,当缓冲区被填满后才进行真正的输入输出操作,缓冲区的大小都是有限制的,数据量达到最大值就清空缓冲区。行缓冲:当在输入或输出的过程中遇到换行符时,才执行真正的输入输出操作。scanf()、getchar()、gets()等C语言输入函数都原创 2020-07-28 10:16:17 · 654 阅读 · 0 评论 -
递归解汉诺塔问题的C语言代码实现
递归函数:汉诺塔问题的递归算法:#include <stdio.h> void hanluota(int n, char x, char y, char z) { if(n == 1) { printf("move 1 from %c to %c\n", x, z); } else { hanluota(n - 1, x, z, y); ...原创 2019-09-24 14:50:41 · 240 阅读 · 0 评论 -
C语言输出(主要是printf函数)
C语言基础输出在C语言中,有三个函数可以用来在显示器上输出数据,它们分别是:puts():只能输出字符串,并且输出结束后自动换行。putchar():只能输出单个字符。printf():可以输出各种类型的数据。printf()是其中最灵活、最复杂、最常用的输出函数,它通过格式控制符对输出进行格式控制,它的部分格式控制符如下:printf高级输出printf() 格式控制符的完整形式:%[flag][width][.precision]type([ ] 表示此处的内容可有可无原创 2020-07-27 14:22:04 · 2893 阅读 · 0 评论 -
C语言变量与数据类型知识点详解
最近复习巩固了C语言的部分知识,整理了其中关于变量与数据类型的知识点,记录下来。在C语言中,变量存放在内存中,在内存中存取数据要明确三件事情:数据存储在哪里、数据的长度以及数据的处理方式。变量名不仅仅是数据的标识符,同时告诉了我们数据存储的地址;而数据类型则指明了数据的长度和处理方式。C语言中共有6中基本数据类型,分别是char、short、int、long、float、double,它们的长度和取值范围一般如下:可以使用以下代码打印它们各自的字节数。六进制表示。八进制:八进制由0– 7八个原创 2020-07-27 11:36:37 · 641 阅读 · 0 评论 -
C51串口通信的一种代码实现
#include <reg51.h>#define ReceiveMax 16unsigned char ReceiveBuffer[ReceiveMax] = {0};unsigned char Receiveflag = 0, ReceiveByteNum = 0, ReceiveInterval = 0;/******************************...原创 2020-02-06 23:45:14 · 827 阅读 · 0 评论 -
基于C语言文件操作的学生信息管理系统
基于C语言文件操作完成的学生信息管理系统student.h#ifndef STUDENT_H#define STUDENT_H#include <stdio.h>#include <stdlib.h>#include <string.h>#include <windows.h>#include "tool.h"#include ...原创 2020-02-06 23:13:25 · 951 阅读 · 0 评论 -
C语言的一些重要知识点
1.数据类型数据类型的本质是一个模子变量的本质是一段实际内存空间的别名voidvoid不能定义变量和数组,但能够定义指针。void指针的意义void指针作为左值时用于“接受”任意类型的指针void指针作为右值使用时需要强制类型转换。有符号数对于有符号位:最高位为1,表示这个数为负数。最高位为0,表示这个数为正数。注意:在计算机内部用补码表示二进制数有符号数正数的补码就是它...原创 2019-09-01 13:05:57 · 290 阅读 · 0 评论
分享