C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)

下载VS2013,我们一起学习。

#include 包含一个叫stdio.h的文件,文件包含令,预处理指令。

stdio.h C语言的标准I/O库,用于读取和写入文件,也用于控制台的输入和输出。

main 函数是程序的入口   主函数

一个工程中main函数有且仅有一个

(main前面的int 表示main函数调用返回一个整型值)

void main () 这种写法是过时的写法

return 0 返回0

#include 
int main ()
{
    printf("\n\
     ^\n\
    * *\n\
    + +\n\
    + +\n\
    + +\n\
  ^ > < ^\n\
 ^ >   < ^\n\
^ >     < ^\n");
return 0;
}

#include string.h头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。

printf 库函数 C语言本身提供给我们使用的函数 别人的东西 打招呼 #include

sizeof 关键字 操作符 计算类型或者变量所占空间的大小

 是一个判断数据类型或者表达式长度的运算符

std 标准 standard input output

format  格式化 

void   无类型  (加了void可以不用写return)

ASCII码值C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)_第1张图片

数据类型:

char 字符数据类型  (单个的字符,也属于整数型)

shoru  短整型

int 整型

long 长整型

long long 更长的整形

float 单精度浮点数(保留小数点后6位

double  双精度浮点数(保留小数点后15到16位)

unsigned  a  无符号整型 变量a存储的值不能又负整型

signed  有符号整型 既有正整数又有负整数

long double  长双精度浮点数

                                            对类型的计算(win32位) C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)_第2张图片

(float:对于32为的浮点数,最高的一位是符号位S,接着的八位是指E,剩下的23位为有效数字(小数点后面的有效位))

C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)_第3张图片

(double:对于64位的浮点数,最高的一位是符号位S,接着的十一位是指数E,剩下的52位为有效数字M)

C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)_第4张图片

打印字符格式控制:

%c  打印字符格式的数据(输出字符型)

%d  打印类型 (输出十进制整型数)取值范围:有符号和无符号取值

%f  打印单精度浮点数字 (打印小数)

%lf 输出双精度浮点数字

%p 以地址的形式打印

%x 打印16进制数字            (前导为0X)

%sstting) 输出字符串类型

%o 以八进制整型式输出整数(前导为0) 

%g 根据大小自动选f格式或e格式,且不输出无意义的零。

%hg 短整型

%p 地址格式

小细节(%d中间的数字,代表的为多少域宽,例如%.2d 保留小数点后两位)

单精度浮点数和双精度浮点数的保留位数是一样的

运算规则:

1.不同精度的计算,那么计算的时候转化为高精度,然后结果也是高精度

2.相同的精度计算,那么结果也是这个精度

(一般情况下,小数点后2位到6位就已经够用,所以系统会自动把后面无意义的小数进行四舍五入)

小课堂(float weight = 95.6)95.6默认属于 double类型 不能放在单精度浮点数里面 会丢失精度 可以加f (95.6f)

按(二进制)位取法  把所有二进制位中数字,1变成0,0变成1

整数在内存中存储的是补码      正整数 全相同

一个整数的二进制表示有三种    原码    反码    补码

C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)_第5张图片C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)_第6张图片

计算机中单位:

bit 比特位 byte 字节 (kb mb gb tb pb) 一个字节 八个比特位大小空间、变量

1024byte = 1kb 1024kb = 1mb

1024mb = 1gb 1024gb = 1tb

1024tb = 1pb

数据类型的计算:

最小值:-(2^n)   n为字节

最大值:(2^n-1)

C语言标准规定 -- sizeof(long) >= sizeof(int)

变量(全局变量 局部变量)

全局变量 定义在代码块 {} 之外的变量

局部变量 定义在代码块 {} 内部作用域

数值变量:整型常量、实型变量

字符变量:字符常量、字符串常量

符号常量:标识符常量

(局部变量全局变量的名字建议不要相同 容易误会)

(当局部变量和全局变量的名字相同时,局部变量优先)

(局部变量的作用域是变量所在的局部范围)

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

生命周期:

局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。

全局变量的生命周期:整个程序的生命周期。

关键字:标识符和变量

auto 是自动 每个局部变量都是auto修饰的

extren 是用来声明外部符号的  register 寄存器关键字

static 静态的 (局部变量的值用一次就销毁,静态的局部变量不会销毁,会一直保留到下一次使用)

union 联合体

typedef 类型定义 类型重定义

continue 跳过本次循环直接开始下一次循环的

在for循环里,continue会跳过本次循环,但是自增语句仍然会执行。

C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)_第7张图片

标识符: 变量名、函数名、数组名、常量名(开发者自己定义,系统不存在)C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)_第8张图片

定义:由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线,长度最好不要超过8字符。

单引号用在字符型,双引号用在字符串。

“a” 系统会默认把字符a当作字符串来处理

系统在处理字符串数据的时候,系统会自动在字符串数据的末尾加\0 字符串的结束标志 隐藏在末尾的字符

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或以简称字符串。

注:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算做字符串内容。

C语言规定:字符占1个字节,‘a’ = “a\0”占两个字节

常量

字面常量

C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)_第9张图片

const (常属性) 修饰的常变量

const 定义的变量的值是不允许改变的,不允许给它重新赋值,即使是赋相同的值也不可以

#define 定义的标识符常量

枚举常量 性别:男 女 保密 三原色: 红 黄 蓝 (枚举关键 enum Sex

转义字符:\+名称 具有特别功能

\t - 水平制表符

\? - 在书写连续多个问号时使用,防止他们被解析成三字词

\' - 用于表示字符常量

\" - 用于表示一个字符串内部的双引号

\\ - 用于表示一个反斜杠,防止它被解释为一个转义序列符

\a - 警告字符,蜂鸣

\b - 退格符

\f - 进制符

\n - 换行

\r - 回车

\t - 水平制表符

\v - 垂直制表符

\ddd - ddd表示1-3个八进制的数字。 如:\130X

\xdd - dd表示2个十六进制数字。 如:\x30 0

注释有两种风格:

- C语言风格的注释 /*xxxxxxx*/

- 缺陷 :不能嵌套注释

- C++风格的注释 //xxxxxx

- 可以注释一行也可以注释多行

赋值:

变量赋值:' = ' 把右边的值赋给左边

直接赋值:边定义便赋值

间接赋值:先定义后赋值

函数的特点就是简化代码,代码复用。

原码 反码 补码详解:

有符号数的编码规则

原码:最高位为符号位,其余各位为数值本身的绝对值。

反码:正数的反码与原码相同;负数的反码,符号位为1,其余位对原码取反

补码:正数的补码与原码相同;负数的补码,符号位为1,其余位对原码取反加1

总结:

正数原码(补码)存储,负数补码存储。

打印的时候是原码。

其它特殊符号:_   ( )    {  }   [ ]

算术操作符:

+  -  *  /  %    (a%b,a和b操作必须要是整型数,结果跟被除数由光,正为正,负为负)

移位操作符(补码运算)(二进制)

<<左移            >>右移

对于移动位运算符,不要移动负数位,这个是标准未定义的。

右移操作符:

1.算术右移 (右边丢弃,左边补原符号位)

2.逻辑右移 (右边丢弃,左边补0)

int 右移一位有除2的效果

左移操作符:

左边丢弃,右边补0

向左移动2<

逻辑操作符

 = = (恒等于)       = = = (全等于)

c语言里 零为假 (false) 非零为真 (true)

位操作符 (与:全一则一 - 或:有一则一 - 异或:有一则一全一则零)

必须为整数  且都是使用二进制进行使用的

( && ) ( || ) 非 ( )a!=0&&b!=0 那么a&&b就是真

& (按位与)                |(按位或)

^(按(二进制)位异或)相同为0 相异为1 异或是满足交换律

int a = 1;(win32的情况下)

整型1占4个字节 - 32bit位

赋值操作符 (复合赋值符)

=    +=    -=    *=    /=    &=    ^=    |=    >>=(判断相等)

单目操作符(双目 三目)

逻辑反操作 - 负值 + 正值

& 取地址 sizeof 操作数的数据类型长度(以字节为单位)

~ 对一个数的二进制按位取反      --前置、后置- -

++前置、后置++   * 间接访问操作符(解引用操符)

(类型) 强制类型转换        printf("%d\n",((int)n)%10);

条件运算符:

表示疑问的意思   : 表示判断结果的选择

关系操作符

>    >=   <   <=   !=

条件操作符(三目)

exp1 ? exp2 : exp3 举例:Max=a > b ? a : b

逗号表达式

exp1, exp2, exp3, ...expN

用逗号隔开的多个表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

下标引用、函数调用和结构成员

[ ] 下标引用操作符 操作数:一个数组名 + 一个索引值

() 函数的调用操作符

接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

访问一个结构的成员

.结构体 成员名 ->结构体指针 -> 成员名

表达式求值

表达式求值的顺序一部分是有操作符的优先级和结合性决定

有些表达式的操作数在求值的过程中可能需要转换为其他类型

隐式类型转化

C的整型算术运算总是至少以缺省整型类型的精度来进行的。

为了获得这个精度,表达式中的字符和短整型在使用之前转换为普通整型,这种转换称为整型提升。

整型提升:

整型提升是按照变量的数据类型的符号位来提升的

负数的整型提升 -- 高位补充符号位 1

正数的整型提升 -- 高位补充符号位 0

无符号整型提升 -- 高位补 0

算术转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。

寻常算术转换

long doble doble float unsigned long int

long int unsigned int int

如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。

警告:算术转换要合理,要不然会有一些潜在的问题。

操作符的属性

复杂表达式的求值有三个影响的因数。

1. 操作符的优先级

2. 操作符的结合性

3. 是否控制求值顺序

两个相邻的操作符 先优先级 如果优先级相同 后结合性,如果还不能求出,那么写出的代码有问题

界定符号:‘ “ , ;

顺序结构:从左到右、从上到下

复合语句:变量的作用域(全局变量、局部变量)

选择结构:

单分支选择结构:在if语句只有一个条件表达式

if(关系表达式/逻辑表达式)

复合语句:

双分支选择结构 可能性为两种

if(条件表达式) else

注意:大括号可以省,但是省略了之后,复合语句的语句只能有一条

多分支选择语句

if(条件表达式1) else if(条件表达式2) else if(条件表达式3)

...else 最后的else可省,表示当前面的条件表达式都不成立的时候执行的语句n

在 C 语言中,嵌套 if-else 语句是合法的,这意味着可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。

switch 选择结构 case 情况 default 默认

break 当表达式的值与常量表达式的值相匹配的时候,就中止所有的switch语句直接结束

switch 后面括号中的表达式可以是整型、字符型和枚举型

switch 允许嵌套使用

case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。

switch(表达式){ 

case 常量表达式1:  语句1;    case 常量表达式2:  语句2;   

 …  case 常量表达式n:  语句n;    default:  语句n+1;}

循环结构

while 循环语句

break 停止后期的所有的循环,直接终止循环。

在while中的 break 是用于永久终止循环的。

continue 用于终止本次循环的,也就是本次循环中的continue 后边的代码不会在执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

EOF 值为-1 文件结尾标志

for 循环语句

for(表达式1:表达式2:表达式3)

表达式1为初始化部分,用于初始化循环变量。

表达式2为条件判断部分,用于判断循环时候终止。

表达式3为调整部分,用于循环条件的调整。

do while 循环

do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

goto 语句

提供了可以随意滥用的goto语句和标记跳转的标号

shutdown 设置关机 shutdown -s -t 60 设置时间关机

command - 命令行 cmd

数组 --C语言中给了数组的定义:一组相同类型元素的集合

数组定义 -- 定义一个整型数组,最多放10风格元素

arr [12345678910]

下标:从0开始 0123456789

printf("%d\n",arr[4]); 下标的方式访问元素

arr[下标];

char ch[20]; 存字符 20

floet arr2[5]; floet类型的字符 5

数组的储存:

数组下标的增长,元素的地址,也在有规律的递增,数组在内存中是连续存放的。

数组名就是我们首元素的地址。

二维数组的初始化时,行可以省略,列不可以省略。

第一个中括号为行 第二个中括号为列 

int arr [ ] [2];

1.sizeof(数组名) -- 数组名表示整个数组 计算的是整个数组的大小,单位是字节

2.&数组名 数组名代表整个数组 取出是整个数组的地址

(除了这两种情况,其它皆为数组首元素地址)

函数 :(子函数和主函数)

标准库函数:

printf() 打印函数 C语言本身提供给我们使用的函数

(把结果输出到屏幕)

scanf (VS专有) 函数 “格式控制字符串”,地址表列

(输入控制符非输入控制符,输入参数) 给变量赋值

putchar() 字符输出函数

strlen() 函数 - string length 计算字符串长度(只能针对) 不包括“/0”

strcpy() 函数 - string copy 字符串拷贝 \0也会拷贝

system() 函数:

执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。另,在windows系统下参数字符串不区分大小写。

system(cls) 清空屏幕

strcmp() 函数 用于字符串的比较

stecmp() 函数 常用于两个字符串进行比较

pow( ) 函数用来求 x 的 y 次幂(次方),x、y及函数值都是double型 ,其原型为: double pow(double x, double y);

sqrt() 函数用于计算平方根 只支持double float类型

其原型 float a =aqrt(b) b为平方根

rand( ) 生成随机数

menu( ) 菜单函数

srand( ) 随机数发生器的初始化函数

strcpy( ) 字符串拷贝

sizeof( ) 操作符 计算类型、数组或者变量所占空间的大小 单位是字节

是一个判断数据类型或者表达式长度的运算符

getchar() 获取一个字符的意思 是读入函数的一种 它从标准输入里读取下一个字符 相当于 getchar (stdin)返回类型为int型,为用户输入ASCII码值或EOF ctrl + z 会获取一个EOF

EOF 值为-1 文件结尾标志 

它的作用是从stdin流中读入一个字符,如果stdin有数据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。

库函数:

C语言的基础库中提供了一系列的库函数:

· IO函数 输入输出函数

· 字符串操作函数

· 字符操作函数

· 内存操作函数

· 时间/日期函数

· 数学函数

· 其它库函数

自定义函数(由自己设计)

和库函数一样,有函数名,返回值类型和函数参数。

实际参数(实参):

真实传给函数的参数,可以为:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,都必须有确定的值,把这些值传给形参。

形式参数(形参):

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配单元),所以叫形式参数。形式参数调用完成之后就自动销毁。因此形式参数只在函数中有效。

形参实例化之后其实相当于实参的一份临时拷贝。

在函数中,数组传参,传过去的不是数组,而是数组的首位元素的地址。

函数的调用:

传值调用

函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。

传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。

这种传参方式可以让函数和函数外部的变量建立起正真的联系,也就是函数内部可以直接操作函数外部的变量。

函数的嵌套调用和链式访问

函数和函数之间可以有机的组合的。

链式访问:

把一个函数的返回值作为另一个函数的参数。

函数的声明和定义

函数声明:

1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但是具体是不是存在,无关紧要。

2.函数的声明一般出现的函数的使用之前,要满足先声明后使用。

3.函数的声明一般要放在头文件中的。

函数定义:

函数的定义是指函数的具体实现,交代函数的功能实现。

函数递归

程序调用自身的编程技巧称为递归。一个程序或函数在其定义或说明中有直接或间接调用自身的一种方法,通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算。递归的主要思考方式在于:把大事化小

递归的两个必要条件

1· 存在限制条件,当满足这个限制条件的时候,递归便不再继续。

2· 每次递归调用之后越来越接近这个限制条件 。

迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.

递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出。

指针

(NULL) 空指针

有一种变量是用来存放地址的—指针变量

int a = 10

int* p = &a; p是一个变量 指针变量

*p = 20 * 解引用操作符/间接访问操作符

指针变量的大小

指针大小在32位平台是4个字节,64位平台是8个字节。

结构体

struct 结构体关键字

. 结构体变量. 成员

-> 结构体指针-> 成员

时间戳

time_t time(time_t *timer)

当前计算机的时间-计算机的起始时间(1970.1.1.0:0:0)=(xxxx)秒

RAND_MAX是C中stdlib.h中宏定义的一个字符常量:

其范围为0-32767

#define RAND_MAX Ox7FFF

其值最小为32767,最大为2147483647

通常在产生随机小数时可以使用RAND_MAX。

shutdown 命令用法:

shutdown - a 取消关机                shutdown - l 注销当前用户                                                          shutdown -s 关机                        shutdown -r 关机并重启 

shutdown -f 强行关闭应用程序  

shutdown - m \\计算机名 控制远程计算机  

shutdown - i 显示“远程关机”图形用户界面,但必须是Shutdown的第一个参数  shutdown -s -t 时间 设置关机倒计时  shutdown -h 休眠

return的详细用法:

布尔类型返回:

return 0:返回为假;

return 1:返回为真;

返回值int类型的函数返回:

return 0:一般用在主函数结束时,按照程序开发的一般惯例,表示成功完成本函数。

return -1::表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败;

(本人新手 如有不好 多多指出 谢谢大家)

(b站鹏哥学习中)

你可能感兴趣的:(基础笔记,c语言)