C语言程序设计
- 程序结构的三种:顺序、选择、循环结构
- 读程序都要从main()主函数(有且有一个)入口,然后从上往下读。
- 计算机数据是以二进制存储的
- bit是位,指0/1,byte是字节,一字节=8位
- 预处理不是C语言的一部分,不占运行时间,不用加分号
- C语言编译的程序叫源程序(编译单位),它是以ASCII码存储在文本文件中
- 算法:可以没有输入、但一定有输出
- break用于循环结构和switch的结束
- 程序的运行:编译.c->链接.obj->运行.exe
- 标识符:由字母、数字、下划线组成,且第一个必须为字母或下划线
- 标识符分为:关键字、预处理标识符、用户标识符
- 关键字:不可以用作用户标识符,如:main、define、scanf、printf、float、auto、break、this、int、try、for、while、char、short、unsigned(但是如果首字母大写就可以使用)
- 预定义标识符:define、scanf、printf、include,可以作为用户标识符
- C语言中只有八、十、十六进制,没有二进制,运行时都会转换成二进制来处理
- C语言中八进制规定以0开头,且每一位不大于不等于8
- 十六进制规定以0x开头,如0xa5
- 小数的合法写法:小数点两边有0可以不写,例0.2为.2
- 实型数据的合法形式:e前e后必有数,e后必为整数。例9.99e-2即9.99*10-2
- 数据类型:整型int 4个字节、字符型char 1个字符、双精度float 8个字节、长整型long int、无符号整型unsigned int
- 算数表达式:+、-、*、/、%(加、减、乘、除、取余)
- 除法/,两边是整型结果为整型,若一边为小数则结果为小数;取余%,两边必须为整数
- 赋值表达式:赋值是从右往左进行的,且常量不能赋值(不可以2=a=5)、定义时不能连续赋值(不可以int x=y=z=0)
- 复合赋值表达式:a*=5相当于a=a*5(+-*/%一样的)
- 自加、减表达式:若a=5,b=a++;则b=5,a=6(++在后面先赋值再自增);若a=5,b=++a;则b=6,a=6(++在前面先自增再赋值),--同理
- 逗号表达式:优先级别最低,例a=(1,2,3)则a=3;若a=1,2,3则a=1,(要注意括号的区别!)
- 空语句不可以随意执行、会导致逻辑错误
- 注释:不是C语言、不占用运行时间、没有分号、不可以嵌套
- 强制类型转换:(int)a(将强制转换成int整型数据类型,注意括号是将类型括起来的,而且强制类型转换优先级比运算表达式高,例(int)a+b是先转换再运算加+的,记住括号里的先算就行了)
- 强制类型转行会丢失数据的精度,如a=5.3,(int)a=5,需要谨慎使用!还有int a=1.6,a=1因为是整型;a=1/2,a=0整型会直接省略小数部分(切记不是四舍五入)
- 字符数据的合法形式:‘a’是字符占一个字节;“a”是字符串占二个字节(含有一个结束符),区别一个单引号,一个双引号。
- ‘0’的ASCII码数值表达是48,‘a’是97、‘A’是65。请记住!
- 转义字符:\___、\x__、\0、\n、\’、\”、\\
- 位运算:|、&、^、<<、>>
& | 与运算,将2个数转换成二进制,两个相应的位都为 1,则结果为 1,否则为 0。 |
| | 或运算,将2个数转换成二进制,如果两个相应的位都为 0,则结果为 0,否则为 1。 |
^ | 异或运算,将2个数转换成二进制,如果两个相应的位值相同,则结果为 0,否则为 1。 |
~ | 取反运算,将数转换成二进制,即将每一位的 0 变为 1,1 变为 0。取反运算符 |
<< | 二进制左移运算符,将数转换成二进制,所有位向左移动指定的位数。左移 n 位相当于乘以 2 的 n 次方。(左边的二进制位丢弃,右边补0) |
>> | 二进制右移运算符,将数转换成二进制,所有位向右移动指定的位数。右移n位相当于除以 2 的 n 次方。将一个数的各二进制位全部右移若干位,正数左补 0,负数左补 1,右边丢弃。 |
- 数据输出:printf输出、scanf输入(引入文件#include <”stdio.h”>)
- printf可以有多个参数,printf(“展示形式”,变量、表达式、常量)
- printf的输出格式形式:
- %d整型(小数后省略)
- %o八进制、%#o带前导的八进制(0__)
- %x十六进制、%#x带前导的十六进制(0x__)
- %c字符型(输出单个字符,如果是字符串只输出第一个)
- %ld长整型long int、%f浮点型float、%lf双精度浮点型double
- %%输出一个百分号
- %5d输出结果占5位(如11, 11,输出长度为5,不够前面补空格)
- %.3f输出结果保留3位小数;%5.3表示输出占5位且保留3位小数(小数位不够后面补零)
- 字符型char以%d整型的形式输出,会输出它对应的ASCII码(例printf(“%d”,‘A’);结果是65)
- 若输出两个参数,需要设置两个输出格式,若只设置一个,只会输出前一个(例:printf(“%d”,a,b);只会输出a)
- 数据输入:scanf(“%d %d”,&a,&b);注意第一部分是数据类型要加双引号,第二部分是变量的地址,注意是&_形式
- %2d,设置输入的为2位,多出来部分的赋值给下一个变量或者丢弃
- %c字符型char,如果输入的是整数,就会替换成ASCII码对应的字符(若输入97,则代表输入的是a)
- Getchar 输入:char a getchar(),没有参数,直接赋值给a
- Putchat输入:putchat(‘y’),它会直接输出y在控制台
- 运算的扩展:若将a、b的值进行调换,则可以t=a;a=b;b=t;不能直接a=b;b=a,因为赋值时a的值已经被覆盖了。
- 运算时四舍五入:(int)(x+0.5);解析将小数位逢5进一,再强制转换整型
- C语言中非0代表逻辑真、0代表逻辑假(C语言中有构造类型,没有逻辑类型)
- 关系运算符符:<=、>=、==、!=、!、=(小于等于、大于等于、等于、不等于、取反、赋值)
- 关系表达式运算:例9>8,代表表达式成立即为1;反正8>9,表达式不成立即为0
- 复合关系运算符:例1<0<3,需要从左往右计算,可以看出(1<0)<3,即(1<0)为假即为0,0<3为真即为1,所以表达式为1(切勿使用数学的算法)
- 逻辑表达式:1表示真、0表示假
- 逻辑运算符:&&、||、!(或者、并且、取反);优先级(!>&&>||)
- IF判断语句:if(表达式1){ 表达式1成立时处理 }else if(表达式2){ 表达式2成立处理 }else{ 上面表达式都不满足处理 } (提示:表达式成立的条件:括号里为非0数)(详细原理解析请访问https://彪哥.top/note查看相关文章)
- 条件表达式:(表达式1)?(表达式2):(表达式3) 口决:真前假后(理解:表达式1为非0数时为真,取表达式2;反之表达式1为0时为假,取表达式3)举个例子:(1>2)?3:7,因为(1>2)不成立为假,所以取7
- Switch语句:形式:switch(变量){ case (整数或字符):(变量和整数或字符一样就执行);break; }如果没有break;继续执行下一个表达式。(详细原理解析请访问https://彪哥.top/note查看相关文章)
- 循环结构三种:for()、while()、do-while(); (详细原理解析请访问https://彪哥.top/note查看相关文章)
- for(初始化;结束条件;自变量)循环中必须有2个分号
- 写程序时一定要有结束条件,否则执行后变成死循环
- do-while();循环不管条件是否成立至少执行一次循环,(注意while();后面是有分号的)
- break作用:打破整个循环,结束整个循环(如果有多层循环嵌套,break在哪层循环结束哪层循环)
- continue作用:结束本次循环,遇到continue后面语句不执行,自变量++,重新进入新一轮的循环
- 嵌套循环:指循环里面还有循环,比较复杂!
- 函数:是具有一定功能的一个程序块,是C语言的基本组成单位
- 函数不可以嵌套定义,但是可以嵌套调用
- 函数名缺省返回值类型,默认是int
- C语言由函数组成,有且有一个main主函数,是程序运行的开始
- 函数的参数可以是变量、常量、表达式、以及函数调用
- 函数的实参:fun(a,b),逗号分开的就是2个实参(注意考题会有表达式等复杂表示,你只看最外层括号中逗号分隔几个参数)
- 实参与形参的差别:传数值时形参不会有变化、实参有变化;传地址时形参变化,实参有可能变化
- 函数的声明:函数返回类型、函数名、函数的参数类型(例int fun(char a))形参不一定名称 (详细原理解析请访问https://彪哥.top/note查看相关文章)
- 库函数:就是已经写好的函数,放在仓库中,要想使用需要调用文件。常用库函数abs()、sqrt()、fabs()、sin()、常考pow(a,b),表示a的b次方即ab
- 指针变量的本质是用来放地址的,而一般变量是放数组的
- Int *p中*p是数值p是地址 (详细原理解析请访问https://彪哥.top/note查看相关文章)
- *p++和(*p)++的区别:*p++是地址变化(取当前值,然后移动地址);(*p)++是数值会变化(取当前值,再使数值+1)
- 二级指针:*p一级指针(存放变量的地址)、*p二级指针(存放一级指针的地址)
- 三名主义:数组名:表示第一个元素的地址(数组名不可以自加,它是地址的常量名)、函数名:表示该函数的地址入口地址、字符串常量名:表示第一个字符的地址
- 指针扩展:指针变量是存放地址的,并且指向哪个就等价于哪个,所有出现*p的地方都可以用它等价替换
- 数组:存放的类型一致,多个数组元素的地址是连续的
- 一维数组的定义:int a[行]={1,2,3,4,5}(行数:可以为空,但是一定要大于后面数组的数据个数)
- 二维数组的定义:int a[行][列]={1,2,3,4,5}(行列:行*列一定要大于后面数组的数据个数,但是行可以为空,列一定不能为空)
- 一维数组的概念:a[10];a表示数组名,是第一个元素的地址,也就是元素a[0]的地址等价于&a(因为a是地址变量,所以a++或赋值运算是不成立的)
- 其他内容(小编的错题)后期更新 (详细原理解析请访问https://彪哥.top/note查看相关文章)