C语言学习笔记 —— 概述(长期更新)

计算机基础知识

计算机中的单位

  • 基础单位
    bit(比特)、byte(字节)、kb、mb、gb、tb、pb…
  • 单位换算
    1byte = 8bit
    1kb = 1024byte
    1mb = 1024kb
    1gb = 1024mb
    1tb = 1024gb

进制转换

  • 整型有4种进制形式:

1.二进制: 由0和1两个数字组成。
2.八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。
3.十进制: 都是以0-9这九个数字组成,不能以0开头。
4.十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始。

二进制

二进制转八进制

方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)

二进制转十进制

方法为:把二进制数按权展开、相加即得十进制数
在这里插入图片描述

二进制转十六进制

方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)
在这里插入图片描述

八进制

八进制转二进制

方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零
在这里插入图片描述

八进制转十进制

方法为:把八进制,按权展开、相加即得十进制数。

八进制转十六进制

八进制不能直接转换为十六进制。可以采用间接转换法来进行转换
1.先把八进制转换为二进制,然后再转换为十六进制
2.先把八进制转换为十进制,然后再转换为十六进制

十进制

十进制转二进制

方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除,直到商为0为止
在这里插入图片描述

十进制转八进制

十进制转十六进制

十六进制

十六进制转二进制

方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零
在这里插入图片描述

十六进制转八进制

八进制不能直接转换为十六进制。那么十六进制也不能直接转化为八进制,可以采用间接转换法来进行转换
1.先把十六进制转换为二进制,然后再转换为八进制
2.先把十六进制转换为十进制,然后再转换为八进制

十六进制转十进制

把十六进制,按权展开、相加即得十进制数
在这里插入图片描述

变量

变量类型

  • char、short、int、long、long long、float、double…

变量的长度

使用sizeof来获取变量的长度

  • char = 1byte
  • short = 2byte
  • int = 4byte
  • long = 4byte / 8byte C语言规定,long > = int(在64位中是8)
  • long long = 8byte
  • float = 4byte
  • double = 8byte

int main()
{
	printf("%d\n", sizeof(char));
	printf("%d\n", sizeof(short));
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(long));
	printf("%d\n", sizeof(long long));
	printf("%d\n", sizeof(float));
	printf("%d\n", sizeof(double));
	return 0;
	}

变量和常量

  • C语言中为了描述变化的值,使用变量(身高、体重…)
  • C语言中为了描述不变的值,使用常量(性别、名字…)

局部变量和全局变量

  • 在C语言中,一个{ }(大括号中)就是一个代码块
  • 在代码块内部定义的变量叫局部变量
  • 在代码块外部定义的变量叫全局变量

  • 当局部变量与全局变量名字冲突时,局部变量优先

变量的作用域和生命周期

作用域

  • 局部变量的作用域仅在当前代码块中

  • 修改为a后即可正常打印

  • 全局变量的作用域是整个工程

生命周期

  • 全局变量的生命周期是整个程序的生命周期
  • 局部变量的生命周期:进入局部变量所在的范围,生命周期开始;离开局部变量所在的范围,生命周期结束

常量

C语言中分为以下常量:

  • 字面常量
  • const修饰的常变量
  • #define 定义的标识符常量
  • 枚举常量

字面常量

const修饰的常变量

  • 被const修饰后虽然不能修改 但本质上还是变量
  • 修饰前
    可以正常输出,变量变为常量,无法修改

  • 修饰后
    无法正常输出

#define 定义的标识符常量

  • #define定义的符号一般习惯大写
    可以是整数、浮点数、字符、字符串…

枚举常量

  • 枚举 —— 就是可以一一列举的值

  • 枚举常量不可以修改

字符串、转义字符、注释

字符串

  • 单引号的是字符,双引号的是字符串

  • 字符串要放在字符数组中
    \0 是字符串末尾隐藏的结束标志,不添加会随机添加其他字符补全

补充 —— strlen

求字符串长度“strlen”
使用“strlen”要添加头文件 #include<string.h>

  • 如果不在字符数组后加入“\0”,则字符数组会一直添加随机数,直到遇到“\0”为止
  • 15并不是固定的,他是一个随机数,相同环境下存在无限种可能

转义字符

  • 转义字符是C语言中表示字符的一种特殊形式;转义字符以反斜’'开头,后面跟一个字符或一个八进制或十六进制数表示;转义字符具有特定的含义,不同于字符原有的意义,故称转义字符。
  • 下图中“\n”代表换行

  • C语言的转义字符表

  • /ddd 表示1~3个八进制的数字
  • /xdd 表示2个八进制的数字

  • ASCII码表

注释

  • C语言中有两种注释方法
    1.注释单行用“//”
    2.注释多行用“/* */” (不支持潜逃注释)

选择语句

if语句

  • 使用方法:
if (判断条件)
{
	执行命令;
}
else if(判断条件)
{
	执行命令;
}
....(可以有多个else if,如果只有两种结果,不适应else if,直接使用else)
else
{
	执行命令;
}
  • 事例

  • 当输入“1”时

  • 当输入0或其他时

循环语句

while循环

  • 使用方法:
int main()
{
int line = 0;
while(line<10) //判断条件
{
printf("%d\n",line);	//执行内容
line = line+1;
}
return 0;
}

函数

  • 函数简介

  • 使用方法

数组

  • 一组相同类型元素的集合

数组的定义

数组的下标

通过数组下标可以定位到数组中的值

  • 练习,使用while循环来打印数组中所有的整数
int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    int num = 0; 
    while (num <= 9)
    {
        printf("%d\t",arr[num]);
        num = num + 1;
    }
    return 0;
}
  • \t 是转义字符,代表键盘上的“Tab”键

操作符

  • 算术操作符: +、 - 、 *、 / 、 %(取余/取模)
  • 移位操作符:>>、 << //移动的是二进制位
  • 位操作符:&(按位与,有0则为0,同时为1才为1); ^(按位异或,相同为0,相异为1); |(按位或,有1则1,同时为0才为0) //二进制
  • 赋值操作符:= 、+= 、-= 、*=、 /=、 &=、 ^=、 |=、 >>=、 <<=
  • 单目操作符(只有一个操作数的操作符):! 、-、 + 、& 、sizeof、 ~、 – 、++、 * (类型)强制类型转换
  • 关系操作符:>、 >= 、< 、<=、 !=、 ==
  • 逻辑操作符:&&(逻辑与) 、 ||(逻辑或)
  • 条件操作符(三目操作符):exp1 ? exp2 : exp3 - 如果exp1的结果为真,整个表达式的结果为exp2,如果exp1的结果为假,整个表达式的结果为exp3
  • 逗号表达式:exp1 , exp2 , exp3 , …expn 整个表达式的结果是最后一个表达式的结果
  • 下标引用、函数调用和结构成员:[] () . ->

%的作用

  • 取模(余数)

& 的作用

按位与,二进制,同时为1则为1,反之为0

| 的作用

按位或,二进制,有一个1就为1,反之为0

^ 的作用

按位异或,二进制,相同则为0,相异则为1

常见问题

使用除法没有小数

  • 当后面的数字不添加浮点数是,编译器会自动认为是整数除法
  • 解决办法,在其中一个数后面加上浮点数即可

猜你喜欢

转载自blog.csdn.net/m0_58307705/article/details/126436747