- 博客(42)
- 资源 (5)
- 收藏
- 关注
原创 C++基础之C与C++的联系和不同(三)
C++和C语言还有一些不同。1、关于函数的参数。2、新的数据类型(bool类型)。3、三目运算符(?:)。4、const关键字(常量)。5、inline关键字(内联函数)。
2017-09-15 20:06:20
419
原创 C++基础之C与C++的联系和不同(二)
由于C++语言完全兼容C语言,所以在C++中可以用scanf()、printf()等C语言中的输入输出函数进行数据输入输出,但C++也提供了自己特有的输入输出机制。在上一篇博客中,我提到了命名空间,C++中有一个标准命名空间std,这个命名空间在很多头文件中都被定义,在其中,有标准输入、标准输出的类对象cin、cout。接下来要谈到C++和C语言的一些不同之处(部分):
2017-09-14 22:12:06
327
原创 C++基础之C与C++的联系和不同(一)
C语言是一门非常优秀的面向过程的编程语言,但它也有很多缺点,总的来说就是不太适合现代的软件开发,例如不容易维护、不容易扩展等等,具体缺点我就不描述了,所以C++语言被发明出来。C++完全兼容C语言,也增加了一些自己的特性与精华。由于C++完全兼容C语言,所以C语言使用的头文件在C++中都可以用,例如stdio.h、string.h等等,甚至C++文件也可以用C语言写。但C++也增加了一些自己的
2017-09-13 19:43:11
460
原创 简单LinuxC程序关于任意长整数相加(字符串实现)
Linux环境下,C语言中整数类型最长的是long long类型,占8个字节,即使如此,其能表示的数仍是有限的。如果想要实现更大的整数相加或其他运算,就不能只用long long类型或者普通整型。我们可以使用字符串来表示整数,可以由我们规定位数,这样就可以实现更大的(某种意义上的任意长)整数相加减。在这里,我使用字符串实现的是两个任意长整数相加。由于是使用的字符串,需要考虑的情况很多。下面我罗列几个需要注意的点:1、输入的问题,2、是否是数字,3、对齐的问题,4、进位的问题。
2017-08-17 16:00:02
1718
原创 系统编程之网络编程(TCP客户端与服务器的搭建)
TCP是重要的传输层协议,是一种有连接的、可靠的传输。传输数据前要先建立连接,如果传输错误或者数据丢失,就会重传。因此使用TCP,开销大,速度慢。UDP也是传输层协议,它是无连接的、不可靠的传输服务。不必要在数据传输之前建立会话,但可能造成数据的丢失。系统只保证尽力发送。优点是传输速度快、开销小。视频点播使用的就是UDP。下面是我实现的TCP客户端与服务器的搭建:
2017-08-16 17:57:33
421
原创 简单LinuxC程序关于加密(将任意长字符转换为定长整数)
本程序功能是将任意长字符串转换为定长(16位)整数,这是一个不可逆的过程,所以可以用来给数据加密。以下是我具体实现的代码。源代码:#include #include #define SIZE 1024#define LEN 16//原始码转换函数int add(int pwdnum){ while(pwdnum >= 10) //得到个位数的最终码 { int t
2017-08-14 10:50:21
830
原创 系统编程之进程间通信和信号量(售票系统)
进程间通信是为了数据传输、资源共享、通知事件、进程控制和信号。实现进程间通行的方式有管道、共享内存和消息队列。信号量提供了这样的一种访问机制,它可以通过生成并使用令牌来授权,让一个临界区同一时间只有一个进程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。本售票系统实现了普通用户与管理员的登录。当管理员没有登录时,普通用户不能售票,会被阻塞。当管理员登录后会初始化共享内存和信号量,各用户可以正常售票。同一次售票只能有一个管理员登录,管理员退出后,负责删除共享内存和信号量,普通用户无法售票,被强制退出
2017-08-12 22:35:55
588
原创 LinuxC简谈之文件读写的一些研究和总结
在编程的时候,我们常常需要将数据写进文件并读取出来。而想要在写入数据后还能完整正确的将数据读出来,就需要对数据读写的方式进行一些约束,也就是要有规则的读写数据。由于我们存进文件的数据不一定一样长,所以可以这样约定:文件的前四个字节保存将要写入文件的数据的个数,接下来每写入一个数据,前4个字节写入数据的长度,接着写入具体数据。依次往下写,这样在读取文件的时候,先读取4个字节,确定数据个数。然后每读取
2017-08-11 18:49:16
263
原创 小游戏之飞机躲子弹
游戏在终端运行,使用左右键移动飞机。飞机撞上子弹或撞上边界都会结束游戏。源代码:// gcc plane.c -lpthread#include #include #include #include #include #include #include #include #include #include #include #define KEYCODE_L 0x
2017-08-10 11:25:02
3442
原创 系统编程之进程控制
程序是一段可执行的代码,是在硬盘上的一个文件,进程则是程序执行的一个实例,每个进程都有自己的地址空间。进程终止的两种情况:父进程比子进程先退出:子进程会被祖先进程接收,并且会在后台执行,当子进程结束,祖先进程负责处理退出状态。这样的进程被称为守护进程。子进程比父进程先退出:如果父进程没有处理子进程的结束状态,就会产生僵尸进程。此进程占内存很小,但是会占用一个进程ID,由于系统的进程ID是有限的,如果僵尸进程过多,系统可能无法再产生新的进程。
2017-08-09 19:23:06
238
原创 小游戏之五子棋
简单的双人五子棋,在终端运行,通过输入坐标选择落子的位置。源代码:#include #define MAX 100#define X 9 //行数#define Y 10 //列数#define WIN 1 //胜利标志#define FAIL 0int flag = 0;int count = 0; //棋子步数char tmpch[MAX];//打印棋
2017-08-08 19:18:54
298
原创 LinuxC简谈之字符串函数及其实现
研究了一段时间字符串后,我总结了一些关于字符串函数的理解,字符串函数也称为字符串处理函数,如字符串求长度(strlen)、字符串复制(strcpy)、字符串连接(strcat)、字符串比较(strcmp)等等。在这里我将介绍一下这些字符串函数的原型以及我自己实现这些功能的函数及用法。
2017-08-07 18:57:13
253
原创 系统编程之文件系统编程
系统调用:所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务。这些可直接进入内核的入口点被称为系统调用。不同操作系统提供了自己的一套系统调用,所以系统调用无法实现跨平台使用。而且频繁地系统调用,在用户态和内核态之间切换,很耗费资源,效率不高。C标准库提供了操作文件的标准I/O函数库,与系统调用相比,主要差别是实现了一个跨平台的用户态缓冲的解决方案。缓冲区可以减少系统调用的次数,提高运行效率。C标准库是系统调用的封装,在内部区分了操作系统,可实现跨平台使用。
2017-08-06 19:48:01
945
原创 数据结构之二叉树的非递归遍历
二叉树的遍历可以使用递归的方法,代码也很简单。不过也是可以通过非递归方式完成的。本次介绍二叉树的前序、中序、后序遍历的非递归实现和层次遍历的非递归实现。
2017-08-04 15:43:19
430
原创 LinuxC简谈之输入输出(三)
在LinuxC中(gcc编译器)关于输入输出的函数有很多,例如:scanf()、printf()、gets()、puts()、putchar()、getchar()、fscanf()、fprintf()、fgets()、fputs()等等。在这我分享一下我对这些函数的总结。三、文件输入输出函数
2017-08-02 20:49:50
382
原创 LinuxC简谈之输入输出(二)
在LinuxC中(gcc编译器)关于输入输出的函数有很多,例如:scanf()、printf()、gets()、puts()、putchar()、getchar()、fscanf()、fprintf()、fgets()、fputs()等等。在这我分享一下我对这些函数的总结。二、gets()、puts()、putchar()和getchar()
2017-07-31 22:51:56
342
原创 数据结构之通用树(使用链表实现树的存储结构,双亲孩子表示法)
树是一种非线性的数据结构,可以使用链表组织树的各个节点,描述树的一些常用操作。双亲孩子表示法是指每个结点都有一个指向其双亲的指针,每个结点都有若干个指向其孩子的指针。
2017-07-28 22:39:46
6528
1
原创 数据结构之队列(顺序队列和链式队列)
队列是只允许在一端删除,在另一端插入的线性表,允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear)。队列遵循先进先出的规则。实现队列可以使用顺序表,也可以使用链表。接下来是关于这两种实现方式的一些简单操作的函数。
2017-07-27 22:03:39
560
原创 数据结构之栈(顺序栈和链式栈)
栈是只允许在一端插入和删除的线性表,只允许插入和删除的一端称为栈顶,另一端称为栈底。栈遵循先进后出的规则。实现栈可以使用顺序表,也可以使用链表。接下来是关于这两种实现方式的一些简单操作的函数。
2017-07-26 22:27:36
352
原创 数据结构之链表(头节点链表)
头节点链表指的是带头节点的链表,这里介绍的是单链表,相比较头指针链表,好处就是插入删除不需要考虑空表的问题,操作不需要改变头指针,不用传二级指针。使用比较方便,也很广泛。下面是关于头节点链表的一些操作的实现。(包括头文件与源文件)
2017-07-25 22:59:31
1069
1
原创 数据结构之链表(头指针链表的插入、删除、逆序)
链表也是一种线性表,区别于顺序表,链表是一种物理上不连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。头指针链表指不带头节点的链表,这样的链表在插入时需要考虑空表的情况,指定位置删除插入时也需要考虑是否在第一个节点处。因为头指针链表的很多操作都需要改变头指针。下面是关于头指针链表的一些操作的实现。(包括头文件与源文件)
2017-07-24 22:22:35
987
原创 数据结构之顺序表(创建、使用、销毁)
顺序表是在计算机内存中采用顺序存储的方式存储的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。顺序表的物理结构和逻辑结构都是连续的。顺序表的增删操作麻烦,需要移动的元素可能很多,修改和查找操作方便,通过下标访问,访问速度快。下面,我将实现顺序表的创建、使用和删除。(包含头文件与源文件)
2017-07-23 23:21:32
11123
2
原创 简单LinuxC程序之位运算的简单应用
输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位。负数在内存中的存储方式和我们一般使用的表示方法不同,是补码形式存储的。
2017-07-22 23:06:52
240
原创 LinuxC简谈之结构体的内存对齐和位域的存储
结构体的成员可以是很多的类型,结构体类型可以定义结构体类型的变量,这样就有各种类型的成员变量。那么,在内存中这些成员变量是如何存储的呢?今天我把我对此的一些理解分享一下。首先是结构体的内存对齐。接下来分析结构体位域。
2017-07-21 22:15:21
1089
原创 LinuxC简谈之输入输出(一)
在LinuxC中(gcc编译器)关于输入输出的函数有很多,例如:scanf()、printf()、gets()、puts()、putchar()、getchar()、fscanf()、fprintf()、fgets()、fputs()等等。在这我分享一下我对这些函数的总结。一、printf()与scanf()
2017-07-19 14:52:23
2159
原创 简单LinuxC程序关于倒置句子中的单词位置(指针的使用)
编写一个C函数,将句子中的单词位置倒置,而不改变单词内部结构。例如:输入I am from shanghai,输出shanghai from am I。要求:使用指针交换两个变量的值。
2017-07-17 19:36:59
419
原创 简单LinuxC程序关于倒置句子中的单词位置(字符串逆序应用)
题目:编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构。
2017-07-15 21:20:05
556
原创 简单LinuxC程序关于逆序一个中英混合字符串
题目:逆序一个中英混合字符串,此字符串包含字母字符、数字字符、空格字符、标点符号等英文字符以及中文字符,要求从键盘输入
2017-07-14 23:25:33
330
原创 简单LinuxC程序关于实现从终端获取一条语句并统计各种字符数量(字符输入输出)
实现从终端获取一条语句,计算这条语句中的空格、字母、数字的个数,统计这条语句全部字符的数量,实现多次输入,并统计一共输入的字符的数量。
2017-07-12 19:38:01
3223
原创 简单LinuxC程序关于统计0~n有多少个0~9(main函数的参数)
题目:通过编程实现,分别统计0~n有多少个0~9要求:n通过参数传入例如:输入./a.out 20
2017-07-12 19:32:02
310
原创 简单LinuxC程序关于实现识别字符串中合法的帧(字符串输入)
题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.例如:帧头和帧尾分别是head和tail 字符串”hdbchddheadhfdjhfdtailvcgbfgby”中headhfdjhfdtail是合法帧。
2017-07-11 20:21:38
403
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人