C语言基本知识

(一)C语言的概念、特点及基本组成

C语言是一种用途广泛、功能强大、使用灵活的过程性编程语言,既可用于编写应用软件,又可用于编写系统软件。

C语言有以下一些主要特点:

  • 语言简洁、紧凑,使用灵活、方便
  • 运算符丰富
  • 数据类型丰富
  • 具有结构化控制语句,用函数作为程序的模块单位,便于实现程序的模块化。C语言是完全模块化的和结构化的语言
  • 语法限制不太严格,程序设计自由度大
  • C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作
  • 用C语言编写的程序可移植性好
  • 生成目标代码质量高,程序执行效率高

C语言程序的结构有一下特点:

  • 一个程序有一个或多个源程序文件组成。一个源程序中可以包含3个部分:

    1. 预处理指令,如#include#define
    2. 全局声明,即在函数之外进行的数据声明。
    3. 函数定义
  • 函数是C程序的主要组成部分。

    ​ 函数是C程序的基本单位,每个函数都用来实现一个或几个特定的功能。一个C语言程序是由一个或多个函数组成的,其中必须包含一个main函数(有且只能有一个)

  • 一个函数包含两个部分

    1. 函数首部

      ​ 即函数的第一行,包含函数名、函数类型、函数属性、函数参数名(形参)、参数类型。一个函数名勾面必须跟一对圆括号,括号内写函数的参数名及其类型。如果函数没有参数,可以在括号中写void,也可以是空括号。

    2. 函数体

      ​ 即函数首部下面的花括号内的部分。如果在一个函数中包括有多层花括号,则最外层的一对花括号是函数体的范围。

      ​ 函数体一般包括一下两部分:

      • 声明部分。

        包括定义在本函数中所用到的变量、对本函数所调用的函数进行声明。

      • 执行部分

        由若干个语句组成,指定在函数中所进行的操作

  • 程序总是从main函数开始执行的,不论main函数在整个程序中的位置

  • 程序中要求计算机的操作是由函数中的C语句完成的

  • 每个数据声明和语句的最后必须有一个分号

    ​ 分号是C语句的必要组成部分

  • C语言本身不提供输入输出语句

    ​ 输入输出操作是由库函数scanfprintf等函数完成的。

  • 程序应当包含注释

(二)基本数据结构(整型、字符型、实型等基本数据类型)
在计算机高级语言中,数据有两种表现形式:常量和变量。
  1. 常量

    程序运行过程中,其值不能改变的量称为常量。

    常见的常量有以下几类:

    • 整型常量。如1000,123456,-345,0

    • 实型常量。有两种形式:

      • 十进制小数形式,有数字和小数点组成。

      • 指数形式,如12.34e3(代表12.34*10^3),-346.87E-25.....

        由于在计算机输入或输出时无法表示上角或下角,故规定以e或E代表以10为底的指数。

        但应注意:e或E之前必须有数字,且e或E后面必须是整数

    • 字符常量。有两种形式:

      • 普通字符

        ​ 用单撇号括起来的一个字符。单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。字符常量存储在计算机存储单元中时,一般是以代码存储的(ASCII码)

      • 转义字符

        ​ 以\开头的字符序列。常用的以\开头的特殊字符见表。

        转义字符字符值输出结果
        \'一个单撇号(')输出单撇号字符'
        \"一个双撇号(")输出双撇号字符"
        \?一个问号(?)输出问号字符?
        \\一个反斜线(\)输出反斜线字符\
        \a警告(alert)产生声音或视觉信号
        \b退格(backspace)将光标当前位置后退一个字符
        \f换页(form feed)将光标当前位置移到下一页的开头
        \n换行将光标当前位置移到下一行的开头
        \r回车(carriage return)将光标当前位置移到本行开头
        \t水平制表符将光标当前位置移到下一个Tab位置
        \v垂直制表符将光标当前位置移到下一个垂直制表对齐点
        \o、\oo、\ooo,其中o代表一个八进制数字与该八进制码对应的ASCII字符与该八进制码对应的字符
        \xh[h...],h表示一个十六进制的数字与该十六进制码对应的ASCII字符与该十六进制码对应的字符
    • 字符串常量

      用双撇号把若干字符括起来,字符串常量时双撇号中的全部字符,但不包括双撇号本身。

      单撇号内只能含一个字符,双撇号内可以包含一个字符串。

    • 符号常量

      #define指令, 指定用一个符号名称代表一个变量(宏定义)。符号常量不占用内存

      #define PI 3.1416 //注意文末没有分号

      在对程序进行编译前,预处理器先对PI进行处理,把所有的PI全部置换为3.1416。使用符号常量有以下好处:

      • 含义清楚
      • 在需要改变程序中多处用到的同一个变量时,能做到“一改全改”。
  2. 变量

    变量必须先定义后使用。在这里插入图片描述

  3. 常变量

    在定义变量时,前面加一个关键字const

    常变量与常量的异同是:

    ​ 常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。

  4. 标识符

    用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符,标识符就是一个对象的名字。

    C语言规定标识符只能由字母、数字和下划线3种字符组成,且第1个字符必须为字母或下划线。

数据类型

在这里插入图片描述

基本类型(包含整型和浮点型)和枚举类型变量的值都是数值,统称为算术类型。算术类型和指针类型统称为纯量类型,因为其变量值都是以数字来表示的。枚举类型是程序中用户定义的整数类型。数组类型和结构体类型统称为组合类型,共用体类型不属于组合类型,因为在同一时间内只有一个成员具有值。函数类型用来定义函数,描述一个函数的接口,包括函数返回值的数据类型和参数的类型。

  1. 整型数据

    类型字节数取值范围
    int(基本整型)4-2 147 483 648~2 147 483 647,即-2^31~(2^31-1)
    unsigned int(无符号基本整型)40~4 294 967 295,即0~(2^32-1)
    short(短整型)2-32 768~32 768,即-2^15~(2^15-1)
    unsigned short(无符号短整型)20~65 535,即0~(2^16-1)
    long(长整型)4-2 147 483 648~2 147 483 647,即-2^31~(2^31-1)
    unsigned long(无符号长整型)40~4 294 967 295,即0~(2^32-1)
    long long(双长型)8-9 223 372 036 854 775 808~9 223 372 036 854 775 808, 即-2^63~(2^63-1)
    unsigned long long(无符号双长型)80~18 446 744 073 709 551 615,即0~(2^64-1)

    ​ 整型数据在存储单元中的存储方式为:用整数的补码形式存放,一个正数的补码是它的二进制形式;一个负数的补码是将此数的绝对值写成对应的二进制形式,然后对其所有的二进制位按位取反,再加1。

    ​ 有符号整型数据存储单元中最高位代表数值的符号(0为正,1为负)。

    PS:

    (1)只有整型(包含字符型)数据可以加signed或unsigned修饰符,实型数据不能加。

    (2)对无符号整型数据用%u格式输出,%u表示用无符号十进制数的格式输出。在将一个变量定义为无符号整型后,不应 向它赋予一个负值,否则会得到一个错误的结果。

  2. 字符型数据

    由于字符是按其代码(整数)形式存储的,因此把字符型数据作为整数类型的一种。

    • 字符与字符代码

      ​ 字符与字符代码并不是任意写一些字符,程序都能识别,只能使用系统的字符集中的字符,目前大多数系统采用ASCII字符集,各种字符集的基本集都包括了127个字符。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ea9JlXDO-1620867881992)(H:\C语言\826 C语言程序设计.assets\image-20210506083143139.png)]

    • 字符变量

      类型字节数取值范围
      char(有符号字符型)1-128~127,即-2^7~(2^7-1)
      unsigned char(无符号字符型)10~255,即0~(2^8-1)

      字符变量是用类型符char定义字符变量。

      输出用%d输出字符对应的十进制整数ASCII码,%c格式输出ASCII码对应的字符。

  3. 浮点型数据

    ​ 浮点型数据是用来表示具有小数点的实数的。在C语言中,实数是以指数形式存放在存储单元中的,一个实数表示为指数可以有不止一种形式,只要小数点位置浮动的同时改变指数的值,就可以保证它的值不会改变。由于小数点位置可以浮动,所以实数的指数类型称为浮点数。浮点数类型包括float(单精度实型)、double(双精度实型)、long double(长双精度实型)

    类型字节数有效数字范围
    float460以及1.2*10^-38~3.4*10^38
    double8150以及2.3*10^-308~1.7*10^308
    long double8150以及2.3*10^-308~1.7*10^308
    long double16190以及3.4*10^-4932~1.1*10^4932
    • float

      在这里插入图片描述

      编译系统为每一个float类型分配4个字节,数值以规范的二进制数指数形式存放在存储单元中,在存储时,系统将实型数据分为指数部分和小数部分分别存放,小数部分的小数点前面的数为0。

      如图是以十进制表示的,但在实际中,计算机用二进制数来表示小数部分以及2的幂次来表示指数部分。小数部分所占的位越多,数的有效数字就越多,精度就越高;指数部分占的位越多,则能表示的范围就越大。

      float最多表示6位有效数字。

    • double

      在C语言进行浮点数的算术运算时,将float数据类型转换成double类型进行转换,然后进行计算。

    • long double

      不同的编译系统对long double具有不同的处理方法。

(三)运算符与表达式、优先级和结合性
1、基本数据类型的算术运算(含自增和自减)、逻辑运算、关系运算、条件运算、赋值运算、逗号运算、类型转换运算、位运算等

在这里插入图片描述
在这里插入图片描述

说明:

  • 同一优先级的运算符,运算次序由结合方向决定(自左至右 or 自右至左)。

  • 不同运算符要求有不同的运算对象个数。条件运算符是C语言中唯一的三目运算符,如x ? a : b

  • 可以大致归纳出各类运算符的优先级

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ou0so7aq-1620867882009)(H:\C语言\826  C语言程序设计.assets\image-20210512182240086.png)]

    (1)以上优先级由上到下递减。

    (2)初等运算符优先级最高,逗号运算符优先级最低。

    (3)位运算符的优先级比较分散(有的在算术运算符之前(如~),有的在关系运算符之前(如>>,<<),有的在关系运算符之后(如&,^

2、混合运算的表达式,能正确对表达式进行求值

算术运算符是自左至右(左结合性),赋值运算符是自右至左(右结合性),其他复杂情况查询表即可。
(1)以上优先级由上到下递减。

(2)初等运算符优先级最高,逗号运算符优先级最低。

(3)位运算符的优先级比较分散(有的在算术运算符之前(如~),有的在关系运算符之前(如>>,<<),有的在关系运算符之后(如&,^[外链图片转存中…(img-iY4yNPPQ-1620867882014)])

2、混合运算的表达式,能正确对表达式进行求值

算术运算符是自左至右(左结合性),赋值运算符是自右至左(右结合性),其他复杂情况查询表即可。

强制类型转换运算符(类型名)(表达式)

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c语言链表的基本操作包括创建链表、插入元素、删除元素、读取链表和销毁链表。在给出具操作之前,我先解释一下引用内容中的代码。 引用\[1\]中的代码是作者在学习数据结构时遇到的问题和解决方法。作者通过重新学习C语言和指针相关的知识,成功地理解了指针的概念,并能够使用C语言实现数据结构中的算法。 引用\[2\]中的代码是作者在解决链表内存访问冲突问题时采用的二级指针的方法。作者通过使用二级指针,解决了链表创建后内存访问冲突的问题。 引用\[3\]中的代码是一个主函数,用于测试链表的基本操作功能。其中包括创建链表、读取链表、插入元素、删除元素和销毁链表等操作。 现在我来回答你的问题,c语言链表的基本操作如下: 1. 创建链表:创建一个头结点为head的链表。可以通过申请内存空间来创建链表,并将头结点的指针赋值给head。 2. 插入元素:在链表中指定的结点前插入元素e。可以通过遍历链表找到指定的结点,然后创建一个新的结点,并将新结点的指针指向指定结点的下一个结点,再将指定结点的指针指向新结点。 3. 删除元素:删除链表中指定的结点。可以通过遍历链表找到指定的结点,然后将指定结点的前一个结点的指针指向指定结点的下一个结点,再释放指定结点的内存空间。 4. 读取链表:读取链表的数据域并打印。可以通过遍历链表,依次读取每个结点的数据域,并将其打印出来。 5. 销毁链表:释放为链表申请的内存空间。可以通过遍历链表,依次释放每个结点的内存空间。 以上就是c语言链表的基本操作。希望对你有帮助! #### 引用[.reference_title] - *1* *2* *3* [C语言实现链表的基本操作(超详细注释)](https://blog.csdn.net/weixin_63069485/article/details/123784826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值