简单C编程
文章平均质量分 57
someday1314
这个作者很懒,什么都没留下…
展开
-
C语言的静态存储方式和动态存储方式
从变量的作用域角度可以对变量进行分类为【全局变量】和【局部变量】从变量值的生存期可以对变量进行分类为【静态存储方式】和【动态存储方式】用户的存储空间可大致分为以下三种1、程序区2、静态区3、动态区一、 静态存储1、基本概念静态存储方式:指在程序运行时,给变量分配固定的存储空间的方式2、 静态存储区存放以下变量:全局变量:在程序开始执行时给全局变量分配存储区,程序运行...原创 2019-12-19 14:04:47 · 8793 阅读 · 0 评论 -
c++基础之模板函数
一.引入模板如果现在需要定义一个通用的加法函数。 我们首先会想到函数重载:即针对每个所需相同行为的不同类型,重新实现它#include<iostream>using namespace std;int Funtest1(const int& left,const int& right){ return left+right;}float Funtest2(const floa原创 2017-03-13 21:43:10 · 238 阅读 · 0 评论 -
全角和半角的区别及使用方式
一.什么是全角什么是半角?一、什么是全角和半角? 1. 全角:是一种电脑字符,是指一个全角字符占用两个标准字符(或两个半角字符)的位置。全角占两个字节。 汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。在全角中,字母和数字等与汉字一样占据着等宽的位置。 2. 半角:是指一个字符占用一个标准的字符位置。半角占一个字节。 半角就是 ASCII 方式的字符原创 2017-04-09 21:11:06 · 48558 阅读 · 0 评论 -
linux笔记之浅谈互斥锁
一.用代码实现多线程#include<stdio.h>#include<pthread.h>void* start_routine(void* val){// int count=5000;// int i=0; while(count) { sleep(1); printf("I am a new thread:tid:%lu,pid:%原创 2017-03-23 22:39:06 · 247 阅读 · 0 评论 -
linux笔记之条件变量
一.概念:同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。通俗来讲,互斥只是实现了安全问题,而有的时候,它并不高效,所以在此引出了条件变量,它可以用来实现高效。互斥锁和条件变量分别用来实现互斥和同步,是一对黄金搭档。二.涉及的函数创建一个条件原创 2017-03-31 21:27:03 · 1858 阅读 · 0 评论 -
死锁产生的原因以及避免死锁的算法
一.死锁的概念在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险━━死锁。所谓死锁(Deadlock),是指多个进程在运行中因争夺资源而造成的一种僵局(Deadly_Embrace),当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象原创 2017-03-31 23:23:58 · 8459 阅读 · 0 评论 -
linux笔记之共享内存
一.IPC之共享内存1.进程间通信的三种方法:消息队列信号量共享内存2.共享内存的优点: 运行时省去了若干次拷贝,是以上三种程序间通信中最快的 3.共享内存的缺点 消息队列 管道等自带同步或互斥机制,而共享内存不自带,故需要使用信号量来实现共享内存的互斥和同步。二.用代码实现共享内存1.创建共享内存//int Creat_shm(int size) 创建代码调用的函数 以上图原创 2017-03-15 23:05:43 · 270 阅读 · 0 评论 -
蓝桥杯之时间转换
原题:源代码#include<stdio.h>int main(){ int get=0; int h=0,m=0,s=0; scanf("%d",&get); if(get>=3600) { h=get/3600; get%=3600; } else { h=0; }原创 2017-03-16 22:55:30 · 414 阅读 · 0 评论 -
linux笔记之初次接触信号
一.关于信号概念1.信号是Linux所使用的进程间通信的最古老的方式。它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式 。一个完整的信号周期包括三个部分,信号的产生,信号在进程中的注册,信号在进程中的注销,执行信号处理函数。如下图所示:这里的对信号产生注册和注销都是信号的内部机制,而不是信号函数完成的2.对信号的处理动作有三种:a. 忽略此信号b.执行该信号的默认处理动作c.捕捉信号(自由原创 2017-04-12 22:07:09 · 518 阅读 · 2 评论 -
C++基础之智能指针
一.智能指针的引入:1. 当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。2. 智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指原创 2017-05-20 16:58:42 · 242 阅读 · 0 评论 -
AVL树
一. AVL树概念一棵AVL树具有以下性质: 1.它的左右子树都是AVL树。 2.左子树和右子树高度之差(简称平衡因子)的绝对值不超过(-1,0,1)。二.平衡化旋转1.左单旋(右右->左):在较高右子树的右侧插入新节点,则用左单旋情况一:(如下图) 情况二: 情况三: 情况四: 2.右单旋(左左->右):在较高左子树的左侧插入新节点,用右单旋 3.先左后右双旋 (左右):在较高左原创 2017-05-22 15:45:32 · 248 阅读 · 0 评论 -
智能指针(续)
一. 存在问题上文到第三种智能指针shareptr,但是此指针也存在很多的问题若传入文件类型指针FILE *,则delete不能释放;引用计数的处理不是线程安全的循环引用问题二.解决方法若传入文件类型指针FILE *,则delete不能释放; 解决方法:特化 class Fclose{public: void operator()(FILE*原创 2017-05-22 15:51:07 · 220 阅读 · 0 评论 -
linux基础之gdb调试多进程,多线程
一.gdb常用目录表 操作 描述 l 命令相当于list,从第一行开始列出源码 回车 重复上一次命令 break +行号 设置断点 break+函数名 在函数的入口点设置断点 r 运行程序running的简写 into break 查看断点信息 n 单语句执行 ,next的简写 c 继续运行程序,continue的简写 bt原创 2017-06-07 12:37:30 · 472 阅读 · 0 评论 -
Linux计划任务cron
一.关于crondcrond的作用 crond是Linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有 要执行的工作便会自动执行该工作。而Linux任务调度的工作主要分为以下两类:系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮原创 2017-06-07 18:03:14 · 495 阅读 · 0 评论 -
linux笔记之消息队列
一.IPC主题之消息队列消息队列:一个进程向另一个进程提供有类型数据块的模板。数据块:例如 一边发一百个字节的数据块,则另一边接收一百个字节的数据块,少了任何一部分,这一块都是无效的。而流是写多少读多少,传的数据无明显的格式要求。内核为每个IPC对象维护一个数据结构struct ipc_prem()//围绕着消息队列的权限问题的源信息{...};每一个IPC特有一个数据结构str原创 2017-03-16 22:10:38 · 211 阅读 · 0 评论 -
linux笔记之有关分离线程
一.概念一般创建出来的线程默认属性是可结合的,所以每个线程退出时,必须调用pthread_join函数等待,否则会出现类似于僵尸进程的线程。一个可分离线程不需要被等待的,它的存储器的资源在它终止时,由系统自动释放。如果线程被自己分离或者被主线程分离,则不需要使用pthread_join,一旦使用则会出错。在子线程中加入代码pthread_detach(pthread_self());在父线原创 2017-03-23 13:52:18 · 323 阅读 · 0 评论 -
linux笔记之多线程编程
一.概念1.线程是在进程内部运行的一种执行流,线程在进程的地址空间中运行 2.linux下的进程是只有一个线程的进程, linux下的线程是用进程模拟出来的(并没有真正意义上的线程)。 3.linux下的线程叫轻量级进程。 4.创建一个线程只需要创建一个pcb即可。 5.进程与线程的区别:进程是分配系统资源的基本单位。调度的进本单位是线程6.线程的私有(最重要的两点)每个线程在原创 2017-03-23 13:01:46 · 271 阅读 · 0 评论 -
c++基础值链表基本操作
SeqListD.cinclude”SeqListD.h”void InitList(PNode* pHead) { assert(pHead); *pHead=NULL; } Node *BuyNode(DataType data) { Node pNewNode=(Node)malloc(sizeof(Node)); if(pNewNode原创 2017-03-29 22:15:52 · 610 阅读 · 0 评论 -
C语言之简单的程序练习(1)
今天拿到一个新的程序题目,题目要求是这样的:判断两个数组是不是有相同的元素。乍一看,觉得题目好像不难,于是我就信心满满的写下了如下程序:#include<stdio.h>#defineN 7main(void){ int i=0,j=0; char a[]={"abcdefg"},b[]={"ghijklm"}; { fo...原创 2016-10-05 18:52:33 · 258 阅读 · 0 评论 -
linux下用程序实现进度条
对于进度条大家都不陌生,在windows环境下进度条可以显示我们下载的进度,那么今天我们可以在linux环境下模仿实现进度条。下面我先截图出我的进度条给大家看看,如下图: 接下来我会告诉大家怎么做,可以一步一步实现进度条。 首先,打开linux环境,ls一下 会chuxian一个code目录(ps:code目录是我自己创建的一个目录, 我把每次自己写的程序代原创 2017-02-18 11:29:46 · 642 阅读 · 0 评论 -
Git使用指南
一、Git是什么?Git是目前世界上最先进的分布式版本控制系统二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就转载 2017-03-17 21:23:15 · 317 阅读 · 0 评论 -
蓝桥杯之分解质因数
一.题目为下图:二.源代码:#include<stdio.h>void prime_num(int i){ int j=0,t=0; int m=0; m=i; for(j=2;j<i;j++) { while(m>2) { t=m/j; if(m%j==0&&t>=2)原创 2017-03-18 09:21:51 · 520 阅读 · 0 评论 -
矩阵乘法
一.原题: 拿到题目之后,突然忘了之前学的线性代数的乘法,然后百度了一下,如下图: 简而言之就是横乘竖然后相加 技巧:不难看出,组成C11的三组相乘的数中,a的i和b的j没有变,而a的j和b的i都稳定增长1二.源代码:#include <stdio.h>#include <string.h>#define N 100int A[N][N],t[N][N],r[N][N];int m原创 2017-03-18 16:26:47 · 1001 阅读 · 0 评论 -
蓝桥杯之高精度算法
接下来废话不多说 ,大家看下蓝桥杯的原题截图: 一个很简单的编程题,接下来这个是我的代码:#include<stdio.h>#define MAX 3000int main(){ int arr[MAX]={0}; int i=0,len=0; int num=0,num_cpy=0,flag=0; scanf("%d",&num); num_cp原创 2017-03-08 22:46:02 · 845 阅读 · 0 评论 -
蓝桥杯之贪心 Huffuman
题目是这样的: 1.本题需要使用的是贪心算法:- 贪心算法的基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状原创 2017-03-09 15:14:37 · 913 阅读 · 0 评论 -
判断矩形面积交
一.问题描述:平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。 输入格式 输入仅包含两行,每行描述一个矩形。 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。 输出格式 输出仅包含一个实数,为交的面积,保留到小数后两位。 样例输入 1 1 3 3原创 2017-03-19 12:25:09 · 311 阅读 · 0 评论 -
C++基础之多态
一.多态概念多态:一词最初来源于希腊语,意思是:多种形态。多态分为静态多态和动态多态。静态多态分为函数重载和泛型编程。动态多态是通过虚函数来实现的。静态多态(叫静态绑定或早绑定):编译器在编译期间完成的,,编译器可以根据函数实参的类型(可能会进行隐式的类型转换)注意:宏不是静态多态,宏是在预处理阶段完成的动态多态(又叫动态绑定或者晚绑定):在程序执行期间判断所引用对象的实际类型根据其实际类型原创 2017-03-27 15:19:35 · 322 阅读 · 0 评论 -
linux笔记之信号量
1信号量的概念 信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一个外部资源的标识。 信号量的本质就是一个计数器 信号量是用来描述临界资源的数目。 因为信号量本身可以被多个进程看见,故信号量本身也是一种临界资源。2信号量的两个操作 信号量只有两种操作,即P(sv)和V(sv)它们的行为是这样的:原创 2017-03-11 17:07:30 · 290 阅读 · 0 评论 -
linux笔记之实现线程的信号量
一.关于信号量的相关接口定义一个信号量sem_t sem;初始化信号量 “p”操作 “v”操作 二.用生产者-消费者模型来实现信号量的相关接口代码如下#include<stdio.h>#include<pthread.h>#include<semaphore.h>#define SIZE 64sem_t blanks,datas;int queue[SIZE];void* Produ原创 2017-04-06 22:51:41 · 241 阅读 · 0 评论 -
VMware Workstation cannot connect to the virtual machine 解决方案
今天 打开虚拟机 忽然遇到这个问题: VMware Workstation cannot connect to the virtual machine. Make sure you have rights to run the program, access all directories the program uses, and access all directories for tempo原创 2017-04-06 22:59:27 · 1046 阅读 · 0 评论 -
蓝桥杯之报时助手
废话不多说,上图: 下面插入代码:#include<stdio.h>int main(){ int h=0,m=0; char arr[50][50]={"zero","one","two","three","four","five","six","seven", "eight","nine","ten","eleven","twelve","thirteen"原创 2017-03-12 16:50:25 · 405 阅读 · 0 评论 -
任意数制间的转换
这是在今年的cvte笔试题中做过的一个题目,是将任意的M进制数转换为N进制数。具体代码如下:#include<stdio.h>void m2n(int m, char* mNum, int n, char* nNum) { int i = 0; char c, *p = nNum; //这是一个考察地方,是否能用最少乘法次数。 while (*mNum != '\0原创 2017-03-29 12:13:58 · 379 阅读 · 0 评论 -
C语言之简单的程序练习-关于支持可变参数的函数.
对于可变参数函数(需要加头文件为:#include<stdarg.h>)刚刚接触到这个概念的我也是一脸懵逼,完全不知道怎么搞,在翻阅过大量的资料和经过一系列的摸爬滚打之后,我写出了以下几个程序,都是关于怎么使用可变参数函数的,希望对刚刚学习c的小伙伴们一丢丢帮助。程序一:(用可变参数求平均值)#include<stdio.h>#include<stdarg...原创 2016-11-09 10:27:07 · 310 阅读 · 0 评论