【9.0】C-结构体与共用体
前言C语言的数据类型分为基本数据类型和构造数据类型,之前的int,float等数据类型都是基本数据类型,都是C语言事先定义好的数据类型,编程时直接使用即可。C语言还允许用户自定义数据类型,称为构造数据类型,例如:数组,以及下面的结构体和共用体。
结构体结构体(structure)是由不同数据类型的数据所组成的集合体,是构造数据类型,其特点是可以由不同的数据类型构成。
每一个结构体有一个名字,称为结构体名。一个结构体由若干成员组成,每个成员都有自己的名字,称为结构体成员名。结构体成员是组成结构体的要素,每个成员的数据类型可以不同。
简单来描述结构体来说如下表:
学号
姓名
性别
成绩
xxx
xxx
xxx
xxx
对于一个结构体来说就是头行,我们现在定义他的名称为:学生信息,那么组成学生信息的成员就是:学号,姓名,性别,成绩。这几个元素就是学生信息结构体的成员/元素。对于各种元素他们的类型是可以不同的。
结构体类型的定义语法格式如下:
1234567struct 结构体名{ 数据类型 成员1的名字; 数据类型 成员2的名字; 数据类 ...
【8.0】C-指针
前言兜兜转转,终于到了指针,作为C语言最重要的功能。也是C语言最强大,最复杂的机制。
指针在C程序中应用非常广泛,从基本的数据结构,如链表和树,到大型程序中常用的数据索引和复杂数据结构的组成,都离不开指针的使用。之所以说指针时C最强大的机制,在于指针可以使程序员直接按地址直接访问指定的存储空间,也可以在权限许可范围内对存储空间的数据进行任意解释和操作。
Pointer是指针的英文单词
变量的地址和指针在程序中,当我们定义一个变量时,首先要定义变量的数据类型,数据类型决定了一个变量在内存中所占用的存储空间的大小。其次要定义变量名。C语言的编译系统会根据变量的类型在适当的时候为指定的变量分配存储空间。例如,在Visual C++环境下,一个int类型数据占据4个字节的存储空间。
在计算机内部,所有的存储空间都要统一进行“编号”,即所有的存储空间都要有地址,每一存储空间具有唯一的内存地址。系统为每一个已定义的变量分配一定的存储空间,使变量名与内存的一个地址相对应,为一个变量进行赋值操作,实质就是要将变量的值存入系统为该变量分配的存储空间中,即变量的值要存入变量名对应的内存地址中。例如:
...
【7.0】C-预处理命令
前言预处理是在进行编译的第一遍扫描(扫描语法和词法)之前所做的工作,是C语言的一个重要功能,它由预处理程序负责完成。
前面的代码已经多次使用#开头的预处理命令,例如:#include <stdio.h>等,在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面。
C语言提供了多种预处理命令,如宏定义,文件包含,条件编译等。C语言的预处理命令均是以#开始,末尾不加分号。合理的使用预处理指令可以使得程序便于阅读,修改和调试。
宏定义在C语言源程序中允许用一个标识符来表示一个字符串,称为宏。被定义为宏的标识符称为宏名。在编译预处理时,对程序中所有出现的宏名,都用宏定义的字符串去替换,这称为宏替换或者宏展开。
宏定义是由源程序中的宏定义命令完成的,宏替换是由预处理程序自动完成的。
宏定义是C语言提供的三种常用预处理命令中的一种,使用宏定义可以防止出错,并且可以提高程序的可移植性和可读性。宏分为不带参数和带参数两种。
不带参数的宏定义不带参数的宏定义语法格式如下:
1234//语法格式#define 标识符 字符串//代码示例#define PI 3.14
其中#表示这是一条 ...
【NEW-1.0】概要
前情回顾关于R语言的一些入门基本操作和一些基础要点,已经在我的博客R语言栏目下发布过相关文章,文章导航:
【1.1】R语言入门
【1.2】R基础语法
【1.3】R基础运算
【1.4】R数据类型
【1.5】R逻辑语句
【1.6】函数
【1.7】R包
以及IDE相关操作指南的文章导航:
RStudio IDE使用指南
概述因为下学期有R语言这门课程,所以我新开 NEW 部分的文章,作为新的笔记和相关文档说明,NEW系列的文章会更加偏向于实战部分,简单来说就是应用方面,而之前的笔记文章是偏向于概念上手方面。
关于 NEW 系列文章的说明如上所述,本文已经水完了(雾
下面推荐一首歌,出自迪士尼《后裔》系列,属于音乐剧:表现的是一对恋人其中一位对两者关系认知的纠结,表现她复杂的心理情绪。自行欣赏吧!!!
【6.0】C-函数
前言函数是组成C语言的基本单位,为了提高程序设计的质量和效率,C系统提高了大量的标准函数。例如前面部分提到的printf(),scanf()等函数。同样的,我们可以根据我们的实际需求来定义我们的函数。
【关于Function(函数)翻译问题】
如果你学过或者接触过现代的一些计算机语言,获取你会了解到一个词——“方法”。不论是函数也好,方法也罢,都是出自这个次——Function,就个人经验而言,这是个翻译的历史遗留问题,早起计算机进入我国的时候,那个时候没有相关的经验和相关书籍的参考,再加上一开始的计算机是数学领域发展起来的,就通俗的直译为——函数,由于现代计算机的发展和大量的经验,对于程序员来说,函数这个词非常的抽象,没有办法形成——望文知意,经过本土化,翻译为方法更复合实际,所以你如果接触过相对现代一些的教程都是说是方法而不是函数。
当然还有另一个说法,是对于面向过程编程语言,称为函数,而面向对象编程语言,称为方法。
(PS:面向对象编程是在面向对象过程编程的基础上发展而来的)
以上两种解释没有谁对谁错,此处仅做说明,以防初学者出现歧义。
函数概述函数的概念在前面的所有示例中,一个 ...
【4.0】C-循环结构及其应用
前言对于大规模的数据,尤其是相互之间存在一定的联系的数据,怎么表示和组织才能达到高效呢?C语言的数组类型为同类型的数据组织提供了一种有效的形式。
同样的,字符串应用广泛,但C语言中没有专门的字符串类型,字符串是使用字符数组来存放的。
一维数组一维数组的定义和引用一维数组的定义在C语言中使用数组前必须先进行定义。一维数组的定义如下:
1234//格式声明类型声明符 数组名[常量表达式];//代码示例int c[10];
其中:
类型声明符是任一种基本数据类型或者构造数据类型,即int,float,char等基本数据类型,以及结构体数据类型。从这里可以看出,数组是建立在其他数据类型的基础之上的,因此数组是构造类型。
数组名是用户定义的数组标识符,命名规则遵循标识符命名规则。对于数组元素来说,它们具有一个共同的名字,即数组名。
需要注意的是,数组的名称不可以与其他变量名相同
方括号中的常量表达式表示数组元素的个数,也成为数组的长度。
不能在方括号中用变量来表示数组元素的个数,但可以使用符号常数或者常量表达式
一维数组元素的存储每个数组元素都占用内存中的一个存储单元,每个元 ...
【4.0】C-循环结构及其应用
前言循环是程序的一种基本结构,它可以解决很多有用的问题,特别是那些重复性有规律的事情。
while循环语句while循环语句的语法格式如下:
123while(表达式){ 语句系列; //循环体}
while语句的执行过程是:根据表达式判断,如果为真,则执行循环体,一直执行循环体,直到break;才会跳出循环。
需要注意的是,while是在循环前,先判断
【实例】求 $n!$。
【代码示例1】
123456789101112131415161718192021222324252627#include <stdio.h>int main(){ int n; long int sum; printf("请输入要求的阶乘:"); scanf("%d", &n); sum = n; if (n>=0) { if (n>0) { while (n>1) ...
【3.0】C-选择结构及其应用
前言这部分东西不多,相对简单,快速上手,通俗易懂。
关系运算符和关系表达式关系运算符在程序中经常需要比较两个量的大小关系,以决定程序的下一步进行的工作。比较两个量的运算符称为关系运算符。通俗来讲,也就是比较运算,即将两个操作数比较并产生运算结构0(假)或1(真)。C语言提供的关系运算符有6种,例如:
运算符
功能
<
小于
<=
小于或等于
>
大于
>=
大于或等于
==
等于
!=
不等于
说明:
C语言中的关系运算符与数学中的(>,>=等)不一样。
以上6种关系运算符中,前4种(<,<=,>,>=)的优先级相同,后两种(==,!=)的优先级相同,前4种优先级高于后两种。
关系运算符的结合性为从左到右。
关系表达式关系表达式是指用关系运算符将两个数(或者表达式)连接起来进行关系运算的式子,代码示例:
1233<2;a>b;a<a+b;
关系表达式的结果是逻 ...
【7.1】查找
前言查找表:是一种数据集合(记录),可以理解为你要从哪里查找
查找表可以分为静态查找表和动态查找表
静态查找:只需要执行查找操作
动态查找:除了查找之外还需要增/删除数据元素
顺序查找顺序查找是我们最开始,也是最熟悉的查找方式,就是一个一个查找(遍历)。
常规顺序查找又称“线性查找”,通常用于线性表。其查找模式是线性的。代码示例:
1234567891011121314151617181920#define ElemType int#define MaxSize 10typedef struct sTable{ ElemType a[MaxSize]; int TableLen;}STable;//顺序查找int Serach_Seq(STable s,ElemType data) { for (int i = 0; i < s.TableLen; i++) { if (data == s.a[i]) { printf("下标为:%d", i); return i; } & ...
【8.1】排序
前言数据结构的最后一部分了,排序也是在前面的数据结构的基础上来解决实际问题的。
排序排序算法可以根据数据量的大小分为:
内部排序:数据都在内存中
外部排序:数据太多,无法全部存放在内存中
关于下述的各种排序算法是基于如下的方法结构来实现的:
123456789101112131415161718192021222324252627282930313233343536373839404142#include <stdio.h>#include <stdbool.h>#define _CRT_SECURE_NO_WARNINGS#define ElemType int //存放的数据类型#define MaxSize 10 //最大数组容量//定义了新的List类型typedef struct list { ElemType data[MaxSize]; //数据数组 int num; //数组的实际大小,即实际存放数据数量}List;//遍历输出Listvoid PrintList(List l) { printf("L ...