C语言—初识

282 阅读11分钟

第一章 导入:初识C语言你需要了解什么?

C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。

初步了解

  1. “程序存储思想”是由John Von Neumann即数字计算机之父、美籍匈牙利科学家冯·诺伊曼提出的,他的另一个贡献是建议在电子计算机中采用二进制
  2. 所谓二进制数,就是采用0和1作为数符,每个0或1就是一个,是数据存储的最小单位。
  3. 内存的的存储单元并不是一个位,而是连续8个位组成的一个字节(B),即B是内存的基本量度单位和存储单元。
  4. 电子计算机“ENIIAC”于1946年诞生于美国宾夕法尼亚大学
  5. 电子计算机经历了4个发展时代,微型计算机出现在大规模集成电路时代。
  6. 关于软件与程序:
  • 软件的核心是程序(而不等于程序)
  • 软件=程序+文档
  • 软件中文档必不可少
  1. 关于源程序与目标程序的关系:
  • 机器语言编写的源程序就是目标程序
  • 汇编语言编写的源程序需要经过汇编程序
  • C语言编写的源程序需要经过编译程序编译为目标程序。
  • 不同语言对应的编译程序或者说编译器不一样。
  1. 用汇编语言和高级语言编写的源程序必须经过3种翻译方式中的某一种才能得到对应的目标程序;它们是:编译、汇编、解释
  2. 第一个结构化程序设计语言是PASCAI
  3. 贝尔实验室的Dennis M.Ritchie于1973年用C语言重写了UNIX操作系统。
  4. 每个地址总线上可能的符号是0和1,每一个地址号对应于一个字节的存储单位
  5. 在C程序中,无论是整数还是实数,都能被准确无误的表示(应该加个在精度范围内)

进制转换(重点)

tip:偷懒小妙招:在线进制转换器 | 菜鸟工具 (runoob.com)

位置化数字系统:二进制/八进制/十进制/十六进制

二八,二十六进制转换用8421

QQ图片20231119142747.jpg ASCII的printf表示: QQ图片20231119154721.jpg

第二章:初识/C语言程序及其数据类型

mindmap
      Root
          初时C语言程序及其数据类型
            2.1 C源程序与符号
            2.2C语言中的数据类型
            2.3常量
            2.4变量
            2.5基本数据类型在计算机内部的表示
    

2.1 C源程序与符号

源程序的基本组成结构

在现代软件工程中,注释和程序语句具有同等重要性

  1. 函数(C语言源程序的基本单位)

分为:主函数main用户自定义函数(由main函数调用)

由函数首部和函数体组成

6a032c0a2282e47772ee34b23254bac7.png

6种基本符号

  1. 关键字(保留字)
  2. 标识符:
  • 是赋予程序中的变量和函数等的名称,分为系统预定义标识符和用户自定义标识符。

    必须由字母或者下划线开头,后面跟字母、数字、下划线的任意字符序列,然后组成一个字符串。

  • 标识符是严格区分大小写的。例如Imoocimooc 是两个不同的标识符。

  • 标识符最好选择有意义的英文单词组成做到"见名知意",不要使用中文。

  • 标识符不能是C语言的关键字。

  1. 运算符
  2. 分割符
  3. 其他符号
  4. 数据

程序中处理的数据有常量和变量两种

2.2 C语言中的数据类型

tip: 这部分东西比较杂碎,知识点也比较多,大家如果想学透建议还是要扣书 微信图片_20231118195055.jpg

详解:

【精选】【C语言】数据类型一文详解_c语言数据类型_攻城狮白玉的博客-CSDN博客

C 程序设计教程(03)—— C 语言的数据类型(一):基本数据类型_c语言数据类型程序-CSDN博客

e671d31452bcdbb9621d33f817b61349.jpg 6ea6373cf0ab35bd9e20e241315c32d4.jpg

基本类型的前面可以使用修饰符,常用的修饰符如下:

signed(有符号的)
unsigned(无符号的)
long(长型)
short(短型)

2.3常量

  • 在程序执行过程中,值不发生改变的量称为常量

  • C语言的常量可以分为直接常量和符号常量。

one.直接常量

直接常量也称为字面量,是可以直接拿来使用,无需说明的量,比如:

1.   整型常量:————————————————————————————————————————————————————————————————————————————

       - (十进制)13、0、-13;(八进制:由数字0开头);(十六进制:由0x/0X开头)
    
       -  长整型常量的后缀是L/l;无符号整型常量的后缀是U/u;无符号长整型常量的后缀显然就是LU、Lu、lU、lu
    
2.   实型常量(也叫浮点型):13.33、-24.4,3.0e8,9.9e+20;——————————————————————————————————————

       - 常量只采用十进制表示,其表达方式分为小数形式和指数形式
    
       - 小数:小数点左右数字可以缺省,但是不能都省略
    
       - 指数:尾数可表示成小数/整数,但不可省略+e/E+指数必须是整数
    
       - 默认状态为double类型;float类型常量的后缀是F/f;长双精度long double后缀为L/l
    
3.   字符常量(单引号):‘a’、‘M’————————————————————————————————————————————————————————————

4.   字符串常量(双引号):”I love imooc!”———————————————————————————————————————————————————
TIP:字符常量
QQ图片20231119152926.jpg

QQ图片20231119152149.jpg ASCII码的转化

QQ图片20231119153249.jpg

字符常量——转义字符

通常使用转义字符表示 ASCII 字符集中不可打印的控制字符和特定功能的字符。

字符常量——转义字符
转义字符意义 与 ASCII 码
\b退格(BS) 008
\f换页(FF) 012
\n换行(LF) 010
\r回车(CR) 013
\t水平制表(HT) 009
\v垂直制表(VT) 011
\反斜杠 092
?问号字符 063
\’单引号字符 039
\"双引号字符 034
\0空字符 000

two.符号常量

  • #define 标识符 常量值
  • 用一个标识符来表示一个常量,在使用之前必须先定义,符号常量不可以被改变

2.4变量

  • 变量就是可以变化的量,而每个变量都会有一个名字(标识符)。

  • 变量占据内存中一定的存储单元。使用变量之前必须先定义变量,要区分变量名变量值是两个不同的概念。

格式化输入语句

  • 一般用scanf和printf

be3d7bafda1b5321fb9354ce7128aa27.jpg

  • 但是字符型char变量的输入和输出可以用getchar()和putchar()
语法
<变量> = getchar();
putchar(<参数>);

用const修饰符限定变量

C语言在定义变量时可以在其数据类型前加上const修饰符,其作用是限定一个变量的值不允许被修改,这种变量的作用和符号常量类似,称为只读变量(这里我们建议用const只读变量代替符号常量)

第三章:运算符和表达式

mindmap
      Root
          运算符和表达式
            3.1什么是运算符和表达式
            3.2运算符的优先级和结合性
            3.3常用运算符
            3.4运算过程中的数据类型转换
            3.5位运算符
            
    

3.1什么是运算符和表达式

运算符

使用运算符必须要有运算对象,运算对象也叫操作数,可以是常量、变量、函数或其他表达式

根据所需运算对象的个数,运算符又分为3类:

  1. 单目运算符(操作数为1,如:取负值运算符)
  2. 双目运算符(操作数为2,如:加减运算符)
  3. 三目运算符(操作数为3,如:条件运算符)

表达式

运算符运算对象组成(也可以只有一个运算对象)

任何一个表达式都有一个确定的值,称为表达式的值

3.2运算符的优先级和结合性

级数越小的运算符优先级越高

而运算符的结合性只有左结合和右结合 微信图片_20231118171053.jpg

微信图片_20231118171050.jpg

3.3常用运算符

总的来说

  1. 运算符的优先级与结合性只是决定了表达式的语义,即如何划分子表达式,而与表达式中子表达式的计算次序无关
  2. 算术运算符>关系运算符>逻辑运算符(&&和||,不包括!非)> 条件运算符>赋值运算符>逗号运算符
  3. 所有单目运算符的优先级都比其他运算符高
  4. 条件运算符是C语言中唯一的一个三目运算符
  5. 所有双目运算符中,除了赋值运算符是由右到左,其余都是由左到右

1.算术运算符

【-(取负数) 】(单目)> 【 乘*、/、%】(双) > 【 +、-】(双)

tip:
  1. 除法运算符的两个含义:整数除和实数除

在C语言中,整型与整型运算的结果还是整型,而实型与整型运算的结果为实型(比如1/2和1.0/2)

  1. 求余%:要求两个操作数都必须为整型,且余数的符号与被除数的相同
  2. 数字函数的使用:#include<math.h>中(详详详详情见附录E)
数字函数(部分常用)
sqrt(x)计算x的平方根
fabs(x)x的绝对值
log(x)计算lnx
log10(x)计算lgx
exp(x)计算e的x次方
pow(x,y)计算x的y次方
sin(x)计算sinx,且x为弧度值
cos(x)计算cosx,且x为弧度值

2.关系运算符

关系运算符是用来比较两个操作数的值的运算,比较的结果是一个逻辑值,即只能是真(非0)假0

包括(都是双目):<,<=,>,>=,==,!=

3.逻辑运算符

逻辑运算的对象是逻辑值,运算结果仍是逻辑值

逻辑运算对象除了关系表达式外,还可以是整型、实型、字符型数据以及其他表达式,且两者类型不一定相同

C语言提供了三种逻辑运算符:非!(单) > 与&&(双) > 或||(双)

其中,逻辑运算中可能会出现一种特殊情况:逻辑短路↓

微信图片_20231118175242.jpg

4.条件运算符 — ?和:(唯一的三目运算符,右结合)

案例(求最大最小值 )

编写程序,从键盘任意输入四个整数,要求输出最大值和最小值(利用条件运算符)

#include <stdio.h>

int main() {
    int a, b, c, d;
    int max, min;

    printf("请输入四个整数:\n");
    scanf_s("%d %d %d %d", &a, &b, &c, &d);

    max = (a > b) ? ((a > c) ? ((a > d) ? a : d) : ((c > d) ? c : d)) : ((b > c) ? ((b > d) ? b : d) : ((c > d) ? c : d));
    min = (a < b) ? ((a < c) ? ((a < d) ? a : d) : ((c < d) ? c : d)) : ((b < c) ? ((b < d) ? b : d) : ((c < d) ? c : d));

    printf("最大值:%d\n", max);
    printf("最小值:%d\n", min);

    return 0;
}

5.赋值及复合赋值运算符(都是双目,右结合)

  1. 赋值运算符为"="
  2. 复合赋值运算符:例如a*=b

6.逗号运算符(,左结合)

7.自增、自减运算符(都是单目,右结合)

都是单目运算符,只需要一个操作数,而且操作数必须是变量

8.用 运算符sizeof 可以计算某一数据类型的变量所占的内存字节数,sizeof(数据类型)

3.4 运算过程中的数据类型转换

fc90fa7cfdc941848eac2104e9db42a0.png

自动类型转换(两种情况:一个是表达式中,一个是赋值式中)

1.表达式中:

就是在运算过程中,当有两种不同类型的数据要做运算的时候,会把级别低类型的数据转为级别高类型的数据后,再做运算(也就是数据类型的长度由低向高转换,以防止精度缺失)

C语言 数值运算中的类型转换_unsigned short和char能相加吗_一起躺躺躺的博客-CSDN博客

2.赋值式中:

在赋值语句中,若赋值运算符右边表达式的类型与左边变量的类型不一致时,系统也会进行自动类型转换,其类型转换的规则是:将右边表达式的值转成左边变量的类型

但是由高转向低的时候,会出现精度丢失的情况:↓ 微信图片_20231118182139.jpg

强制类型转换

(<类型>) <表达式> 其中<表达式>是待转换的对象,<类型>是要转换的目标类型

类型转换的优先级高于运算


如果看完后还有哪里不懂的话,可以看这篇文章进行补充,希望大家都可以成功入门C语言^^

c语言入门这一篇就够了-学习笔记(一万字)-CSDN博客