C语言
文章平均质量分 53
c语言基础知识
冬雪如春
这个作者很懒,什么都没留下…
展开
-
冒泡,插入,选择,希尔排序算法
排序算法原创 2022-11-29 11:03:41 · 454 阅读 · 1 评论 -
插入排序,选择排序,冒泡排序
1.插入排序大白话理解原理:将第一个数看成是有序的,从第二个数开始和该数前面的数进行比较,(默认从小到大排序)如果这个数比前一个数小,那么就将这个数,放在一个临时变量中,再进行相同的操作,知道发现前一个数币这个数小就将这个数放在比他小的那个数的后面。2.选择排序选择排序就是从一组数据的第一个数开始,在数组中下标是从0开始,将第一个数的位置记录下来,在一个一个与后面的数进行比较,如果后面有比这个数还小的数,那么就将这个数的位置与之前记录的数的位置更换,一直这样比较到最后一个数,然后将这个最小的数放在排好原创 2022-06-28 17:16:15 · 138 阅读 · 0 评论 -
C语言,C++练习笔记
函数调用:返回值存在寄存器中,没有地址,不能作为形参,但可以作为实参。一个函数没有返回值时,是void型,此时的void关键字不能省略(不写);一个函数省略(不写)返回值类型时,默认是int型;int main() {int a[3][3], *p, i;p = &a[0][0];for(i = 0; i < 9; i++) p[i] = i;for(i = 0; i < 3; i++) printf("%d ", a[1][i]);}指针的步长与指针的类型相关,由于p原创 2022-04-13 20:55:39 · 562 阅读 · 0 评论 -
C++基础知识三
一、构造函数的参数初始化列表注意:1.初始化参数列表优先于当前对象的构造函数执行2.子对象的初始化顺序和在其初始化列表的排序无关,但是和在类中的声明顺序有关,先声明的先初始化#include <iostream>using namespace std;class Date{ private: int m_year; int m_month; int m_day; public: Date(int y,原创 2022-03-31 12:02:19 · 1046 阅读 · 0 评论 -
round函数
C99标准中有round()函数,声明为:double round(double );返回距离参数最近的整数,如果参数值正好在两个整数的中间位置,则返回距离0较远的那一个整数(即正数则返回大于参数的整数,负数则返回小于参数的整数)...原创 2022-03-29 14:33:56 · 769 阅读 · 0 评论 -
C++基础语法二
一、类和对象1.1面向对象编程介绍使用类和对象来完成特定的功能的集合,通过每个对象来管理自己的数据和方法。用到一个关键词:class超强版的struct :类1.2类和对象1)c++中的类是class,可以看成是C语言中的struct的超强版本。结构体是一种构造类型,可以包含若干成员,类也一样,除了struct基本功能之外,类还有新增权限,2)类的使用说明1>类和struct一样,定义结尾需要加; 他是类的一部分,表示类定义结束,不能省略。2>类也是一种构造类型,本身不占用内存原创 2022-03-28 21:17:32 · 762 阅读 · 0 评论 -
手动创建text1,text2,编程创建text3,将text1和text2除了第一行和最后一行,其他行对应数字相加放在text3对应位置
1.按有进位方式来写:#include <stdio.h>#include <string.h>//手动创建text1,text2,编程创建text3,将text1和text2除了第一行和最后一行,其他行对应数字相加//放在text3对应位置int main(int argc, char **argv){ FILE *fp1, *fp2, *fp3; //指向文件的指针变量 char ch1, ch2, ch3; fp1原创 2022-03-07 09:20:05 · 299 阅读 · 0 评论 -
进程间通信编程
1.进程间通信方式概述进程间通信是在不同进程之间传播或者交换信息。进程间通信方法有:管道(无名和有名管道),消息队列,信号量,共享内存,信号,套接字等进程间通信的目的:1、数据传输,2、共享数据,3、通知事件,4、资源共享,5、进程控制2.管道通信管道有无名管道和有名管道,无名管道是适用于父子进程或者兄弟进程之间,进程之间存在联系的,可以用管道。 有名管道,不仅父子,兄弟进程可以使用,没有关系的两个进程也可以使用,有名管道克服了管道没有名字的限制。所以才可以字无关系的进程之间建立通信。传递的数据原创 2022-03-05 23:03:50 · 1198 阅读 · 0 评论 -
进程控制编程
内存和cpu 以进程为单位作为资源分配的单位。进程由系统内核管理线程为进程服务,内核不管理他。进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元。程序是放到磁盘的可执行文件。进程是指程序执行的实例在liunx系统中,当一个程序开始执行后,在开始执行到执行完毕退出这段时间里,它在内存中的部分就被称作一个进程。进程是一个状态变化的过程,程序是可长久保存的。进程的组成包括程序,数据,和进程控制块。进程是动态的。程序是静态的。进程和程序的对应关系:通过多次执行,一个程序可原创 2022-03-03 22:43:46 · 374 阅读 · 0 评论 -
系统调用API的使用(通讯录的写出和读入)
通讯录是拿链表来写的一个小项目,可以很好的锻炼链表的使用,但是当我们输入联系人信息之后,想要保存就需要我们将链表里面的信息写进我们到文件里,当我们再运行这个程序时,可以把我们存储的信息再给我们读会内存。这里需要两步操作,一步是保存,一步是读入。先看第一步:保存(思路)首先我们所有的联系人都在我们自己创建的每一个结点里,也就是说,我们链表中每一个结点就是我们要保存的联系人的信息,我们要将这些结点一个一个的放进我们的文件中保存起来,(这里实现都是系统调用没有用C库函数)这里用到文件编程中的系统调用API,w原创 2022-03-02 20:11:31 · 179 阅读 · 0 评论 -
C语言操作数据库(SQLite3)调用接口函数
C语言连接数据库首先我们需要有数据库,所以我们需要创建数据库,在linux环境下进入sqlite3模式下,顺便在后面写上数据库名:首先定义一个数据库指针类型,然后调用数据库的接口函数:sqlite3_open(“数据库名”,指针地址)”,函数功能:打开一个数据库,如果这个数据库文件不存在,则自动创建,打开或者创建数据库的命令会被缓存,直到这个数据库真正被调用的时候才会被执行。并且让上面定义的指针指向这个数据库。ret 变量是用来接收这个接口函数的返回值,这个函数的返回值是SQLITE_OK 它的值也原创 2022-02-28 14:08:03 · 5236 阅读 · 0 评论 -
文件编程(系统调用(Liunx),C库)
实现文件编程有两种:1、系统调用实现的文件比编程 2、C库实现的文件编程1.系统调用实现的文件编程用户空间调用系统空间只能通过相应的API(接口)来实现,也就是说,系统的资源不是说用户空间想用就用的,系统自己有自己的保护机制,想使用系统资源必须通过相对应的接口来实现。Linux的文件类型有: 普通文件,目录文件,链接文件,设备文件(安装相对对应的驱动文件就相当于使用的是设备)文件描述符:是一个非负整数...原创 2022-02-25 20:59:12 · 1015 阅读 · 0 评论 -
快速排序(C语言)
首先我们要对一组数据进行排序:在数组中选一个基准数(通常为数组第一个,黄圈圈标记了);将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边,怎么移动,后面说;对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。好了,咱们开始吧!快速排序需要两个哨兵,i 和 j,分别指向数组的头和尾。接下来就要进行移动。我们通常选择第一个元素作为基准数,去移动数组元素,使其达到这个基准数的左边都是小于它的,右边都是大于它的。开始移动 i 和 j ,原创 2022-02-23 21:06:51 · 64435 阅读 · 28 评论 -
栈的运用(不带括号的加减乘除)
例如计算 2+3*4-1/5这个式子,在计算机中如和那代码实现首先明白整体的思路:这里由操作数和运算符,所以这里我们要创建两个栈,来分别充当操作数栈和运算符栈,好,现在创建栈。栈的特点是先进后出,这里我们创建一个结构体这里把top当成一个指示标志,来记数,这里设置了data数组的最大内存容量是10,所以看下图,这里需要对我们上面定义的结构体初始化。初始化为-1,后面再++时,可以和数组下标对上,当top=9时说明栈已经满了top初始化的函数这里需要创建两个栈,一个时运算符的栈,一个是操原创 2022-02-22 20:15:32 · 431 阅读 · 0 评论 -
平衡二叉数的旋转
平衡二叉数平衡二叉数是二叉数,还有一个平衡因子的概念,就是二叉数中的某个结点的左右子树的高度之差称之为这个结点的平衡因子。注意:平衡因子是左子树高度减去右子树高度。平衡二叉数是另一种形式的二叉查找树,特点:左右子树的高度之差的绝对值不大于1,称这样的二叉数是平衡二叉数。上图就是一个平衡二叉数,所有结点的平衡因子都不大于绝对值1下图就不是平衡二叉数,有的结点的平衡因子的绝对值超过了1.那么我们如何来调整使其重新变回成一个平衡二叉数呢?下面介绍四种方法:1、LL型上图代码解释:p和c原创 2022-02-21 19:08:10 · 328 阅读 · 0 评论 -
带头结点的双向循环链表
思路:1、首先定义一个结构体,定义一个结构体指针类型,为创建结点做准备。2、创建头指针,和空链表,这里注意一级指针和二级指针的实参和形参的传 递。3、插入结点也要创建结点,再插入,后面再根据需要进行插入,删除,等操作。#include <stdio.h>#include <stdlib.h>#define CREATE_OK 1#define CREATE_NO 0#define MALLOC_OK 1#define MALLOC_NO 0/* *双向循环原创 2022-02-21 10:28:09 · 821 阅读 · 0 评论 -
带头结点的顺序栈
#include <stdio.h>#include <stdlib.h>#define SIZE 10enum ret_vla{MALLOC_OK = 100, MALLOC_NO, CREATE_OK, CREATE_NO, FULL_OK, FULL_NO, EMPTY_OK, EMPTY_NO, PUSH_OK, PUSH_NO, POP_OK, POP_NO};//顺序栈struct stack_node{ int stack_data[SIZE]原创 2022-02-19 22:01:58 · 392 阅读 · 0 评论 -
带头结点的单链表
#include <stdio.h>#include <stdlib.h>#include <time.h>#define MALLOC_OK 1#define MALLOC_NO 0#define CREATE_OK 1#define CREATE_NO 0/* *带头结点的单链表 * * */struct node{ int num; char name; int age; struct node *n原创 2022-02-19 19:24:04 · 137 阅读 · 0 评论 -
带头结点的链表的增、删、查、插
#include <stdio.h>#include <stdlib.h>/* *带头结点的单链表 * * */struct node{ int num; char name; int age; struct node *next;};typedef struct node Hnode;typedef Hnode * Hlink;//创建新节点void create_new_node(Hlink *new_node)原创 2022-02-17 21:48:23 · 278 阅读 · 0 评论 -
单链表-不带头结点(创建,插入)
为什么要使用链表,因为链表可以连接数据类型不一样的数据,而一个数组中只能使用一种数据类型。以学生为例:一个学生有学号,姓名,年龄,性别,等,先拿这四个用着。开始下面的内容:1、创建链表首先我们要创建单链表中的每一个结点模型,就是创建一个结点模型,后面要用就往里面填数据就行。链表的结点有两个域,一个是值域,一个是指针域,指针域就是指向下一个链表的位置。所以我们要使用结构体来定义这两个域中的变量。看代码:然后需要头指针,这个头指针的类型也必须是这个结构体指针类型,指针也是有类型的,所以我们还需要定义结原创 2022-02-16 21:41:20 · 6723 阅读 · 1 评论 -
数据结构-单链表的实现方式
线性表(链表)定义:n个数据元素的有限序列,n是表长度(自己写带表头节点的链表,区别带表头结点和不带表头节点的链表)特点:1、除第一个元素外,其他元素有且只有一个直接前驱。2、除最后一个元素外,其他元素有且只有一个直接后继。单链表静态链表静态链表实现方法,先定义数组后,再让相应的元素指向后一个节点。空间分配以数组形式分配,访问方式按照链表的访问方式来访问。特点:1、每个节点由结点构成(结点由数据域和指针域组成,用结构体来定义)结构体中有指针,只能是结构体自己的指针2、线性结构判原创 2022-02-15 21:44:16 · 864 阅读 · 0 评论 -
C语言的指针
指针是什么?指针就是地址。由于通过地址可以找到所需的单元变量,所以说,地址指向该变量单元所以将地址形象成为“指针”。指针变量?指针是一个地址,指针变量是存放地址的变量,换句话说就是存放地址的变量是指针变量。定义:类型名 *指针变量名如: int *pointer; pointer是变量名,指针变量的基类型是int,就是说指向的内存空间存放的数据类型是整型。注意:1、指针变量是基于基本数据类型派生出来的类型,不可以离开基本数据类型而存在。2、指针变量前面的“ * ”是表示该变量为指针原创 2022-02-11 22:55:03 · 2513 阅读 · 0 评论 -
C语言:数组
数组:由若干个相同类型 的相关数据项,按顺序存储在一起 ,构成的数组;数组其实是同种类型,有序的数据的集合。数组名:用统一的名字命名标识这组数据,这个名字就是数组名。数组元素:构成数组的每一个数据项称为数组的元素格式:类型 数组名[ 下标 ][ 下标 ]…; 其中:类型是数组元素的基类型,就是每个元素的类型。数组分类:常用的一维数组,二维数组一维数组:格式:类型 数组名[ 常数表达式 ]; int a[10];//个元素都是整数元素是 a[0],a[1], a[2],原创 2022-01-25 21:51:35 · 1384 阅读 · 0 评论 -
求100到200之间的所有素数
#include <stdio.h>int main(){int num1,num2,i,j,count=0;printf(“输入两个正整数:\n”);scanf("%d %d",&num1,&num2);if(num1>num2){for(i=num2;i<=num1;i++){for(j=2;j<i;j++){if(i%j0){break; } }if(ij){ count++;printf("%d “,j);原创 2022-01-22 22:11:53 · 260 阅读 · 0 评论 -
C语言圆周率(公式法)
已知 求π?解析:这里求的圆周率是近似的圆周率,累加到最后一项的绝对值于10^(-6)为止。这里要用到fabs()函数,在预处理命令里添加#include <math.h> ,#include <stdio.h>#include <math.h>int main(){float i=1.0, sum=0;float sign = 1.0; //这是一个变号符while(fabs(sign/i)>=1e-6) //当大于这个值时就退出循环原创 2022-01-22 21:37:49 · 7190 阅读 · 1 评论 -
源程序,目标程序,可执行程序
1源程序:程序可以用高级语言或汇编语言编写,用高级语言或汇编语言编写的程序称为源程序。C语言源程序的扩展名为“.c”。源程序不能直接在计算机上执行,需要用“编译程序”将源程序编译为二进制形式的代码。2目标程序:源程序经过“编译程序”编译所得到的二进制代码称为目标程序。目标程序的扩展名为“.obj”。目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问题,需要将各个目标程序与库函数连接,才能形成完整的可执行程序。3可执行程序:目标程序与库函数连接,形成的完整的可在操作系统原创 2022-01-13 22:35:27 · 9676 阅读 · 1 评论