资源描述
C语言知识点总结
C语言知识点总结 1
一、 常量 2
二、 标记符 2
三、 变量 2
四、 表达式 3
五、 输入输出函数 4
六、 C语言语句 5
七、 C程序基本构造 5
八、 选取构造语句 5
Ø if(表达式) 语句1 else 语句2 5
Ø 条件运算符 表达式1? 表达式2 : 表达式3 6
Ø switch语句 6
九、 循环构造 6
Ø for循环语句 6
Ø while循环语句 do while循环语句 6
十、 数组 7
十一、 字符串函数 7
十二、 函数 8
十三、 指针 9
十四、 宏定义 10
十五、 构造体,共用体,枚举类型 10
十六、 Turbo C使用 12
一、 常量
Ø 数字常量
i. 普通数字:1,35,2.7
ii. 指数形式:2.45e-2等价于2.45*10-2 注意e大小写皆可,e前面数字不能省,就算是1也不能省,背面数字一定要是整数
iii. 长整型,单精度浮点型:3235L,32.5F 分别表达3235是长整型数据,32.5是单精度浮点型左,若不写上L,F则表达3235是整型,32.5是双精度浮点型,L,F大小写皆可
Ø 字符常量
i. 普通字符常量:用单引号把一种字符括起来,如’A’,’@’
ii. 转义字符常量:一对单引号括起来并以“\”开头字符序列,如’\n’(回车)、’\123’(8进制123相应字符), ’\x23’(16进制23相应字符)
Ø 字符串常量
用一对双引号把一种字符序列括起来,如“ABCef”, 系统存储字符串常量,每个字符分派一种字节,各字符所占字节紧邻,并且字符串末尾会给再开一种字节里面放一种’\0’做为结束标志。
Ø 符号常量
定义格式 #define 符号常量名 符号常量值,如#define N 20则定义了符号常量N,其值为20,注意符号常量名和符号常量值之间是用空格隔开,而不是写上=号,#define和符号常量名之间也有空格。
二、 标记符
Ø 命名规则
以数字,字母,下划线这三类字符构成,但只能以字母或下划线开头,而不能也数字开头,此外不能将核心字做为标记符。32个核心字表在P365附录B
Ø 变量名,函数名,符号常量名全都是标记符
三、 变量
Ø 变量定义格式
类型名 变量名;
如 int a;定义了一种整型常量a。变量名是由人类随便定义,符合命名规则前提下,爱写啥就写啥。因此什么flag,cc,y1或者函数名fun,find等所有是自定用来做为名字而已,没有更特别意义。
Ø 类型名
int 整型,long 长整型: 用于存储整数,只是数值范畴不同
float 单精度浮点型 double 双精度浮点型:用于存储实数,数值范畴,精度不同
char字符型:用于存储字符
Ø 变量赋值,初始化
int a=3;定义同步初始化
a=6*9;定义后在程序中进行赋值
Ø 变量值
只有在赋值操作时才会被变化,即将其放在等号左边时才会变化它值,或自增自减操作:a=5,a++,a--,像a+3并未变化a值,只是使用了a值而已.
Ø 自增自减运算
变量++,++变量,变量--,--变量 使变量值自增1或自减1
等价于 变量=变量+1 变量=变量-1
++,--放于变量前后效果区别:
当自增自减运算做为表达式一某些时,++,--放在变量前面是先自增自减再使用变量值,放在变量背面则是先使用变量值,再自增自减。
如x=3; printf(“%d”,++x);则相称于执行了++x; printf(“%d”,x);这样操作因此打印出4
再如x=3; printf(“%d”,x++);则相称于执行了printf(“%d”,x); x++;这样操作,则打印出3,固然最后x值还是4。
四、 表达式
Ø 运算符和运算对象
一种运算符均有若干个运算对象,如 + 必然要跟两个运算对象才干进行加法运算:3+5。C语言里称需要跟n个运算对象运算符为n元运算符。
一元运算符有:!,(类型名)
二元运算符有:+,-,*,/,%(求余), =,+=,-=,*=,/=,%=,< , > , <=, >=, = =(等于), !=(不等于),&&(且) , ||(或)
多元运算符有: ,
Ø 运算符优先级和结合性
i. 优先级:同一种运算对象左右两边若同步有两个运算符,则这两个运算符优先级高先进行运算。
ii. 结合性:若同一种运算对象左右两边两个运算符优先级相似,则依照结合性判断先进行哪个运算,自左自右结合性先算左边运算符,自右自左先算右边运算符。
iii. 各运算符优先级和结合性见P365附录C
Ø 强制类型转换
格式: (类型名) 表达式 。将后跟表达式值数据类型转换为与圆括号内类型名一致类型。注意类型名一定要用() 括起来。
Ø 算术表达式
i. 算术运算符:+,-,*,/,%(求余)
ii. 由算术运算符加上运算对象构成算术表达式,如3+3*6-9/2
iii. 值:跟我们小学时学同样,就是表达式计算成果
iv. 整数除以整数成果取整数某些,故1/3得到值是0
v. 5%3 成果为2,想想小学除法,求余得到是余数不是商。
Ø 赋值表达式
i. 赋值运算符:=,+=,-=,*=,/=,%=
ii. 赋值表达式:变量=表达式,如x=3+6,x+=6-9,x+=x*=3+4 注意等号左边只能是变量
iii. 复合赋值运算符运算:以/=为例:x/=表达式 等价于 x=x/(表达式)
iv. 值:=号左边变量最后值
Ø 关系表达式
i. 关系运算符:< , > , <=, >=, = =(等于), !=(不等于)
ii. 由关系运算符加上运算对象构成关系表达式,如3>=4, 2==a
iii. 值:满足相应运算符所指定关系值为1,否则为0
Ø 逻辑表达式
i. 逻辑运算符:&&(且) , ||(或) , !(非)
ii. 由逻辑运算符加上运算对象构成逻辑表达式,如3&&4, x||!y
iii. 值:满足相应运算符所指定关系值为1,否则为0
iv. 进行 ||或 运算时,若||左边表达式值为1,则不再对右边表达式进行运算。
v. 进行 &&且 运算时,若&&左边表达式值为0,则不再对右边表达式进行运算。
Ø 逗号表达式
i. 逗号运算符: ,
ii. 用逗号将各种表达式持续起来构成逗号表达式,如3+4,a=9,8*a
iii. 值:构成逗号表达式各个表达式中最后一种值,如上例为8*a
Ø 题目:P7—11~17 P8—18~33
五、 输入输出函数
Ø scanf(“格式控制串”,变量地址表列);
如scanf(“%d%c%d”,&a,&ch,&b); scanf(“%4f”,&x);
注意:
i. 格式控制串可控制截取顾客输入前几种字符给变量,但不能控制输入几位小数给变量,如不能写成scanf(“%4.2f”,&x);
ii. 第二个参数给是地址,即要么是&+变量名或数组元素名形式,要么就是一种数组名或指针变量名,如int *p,a; p=&a; scanf(“%d”,p);
iii. 考试时注意看题目给你写好scanf格式
1. 若其格式控制串内各格式符用“,”隔开如scanf(“%d,%c,%d”,&a,&ch,&b);那输入时也要用逗号隔开,如此例输入时应:3,+,5
2. 若是这种格式scanf(“%d %d”,&a,&b);则输入时应:3 5;
3. 若是这种格式scanf(“%d%c%d”,&a,&ch,&b);则输入时应3+5,若写成3 + 5则a=3,ch=‘ ’(空格),b=任意值 (自己上机运营看当作果)
Ø printf(“格式控制串”,输出项表列);
如float x=7.5; printf(“%8.2f”,x);此处意思是将x打印出来,且占8列,保存两位小数。自己上机运营看看效果。
Ø 惯用格式符汇总:
i. %d:输入输出整型数据,%ld:输入输出长整型数据
ii. %c:输入输出字符型数据
iii. %f:输出单(双)精度浮点型数据,输入单精度型数据。 %lf:输入双精度型数据
iv. %s:输入输出一种字符串,用printf输出字符串时,输出项书写时可为字符串常量,或字符数组名。如printf(“%s”,”hello”);或char str[10]=”hello”; printf(“%s”,str);
v. %u:输入输出无符号整型,%o:输入输出八进制数,
%x:输入输出十六进制数
Ø getchar();
函数调用后返回顾客输入一种字符,故需再定义一种变量来存储这个字符,虽然用时应 char c; c=getchar();意思就是接受顾客输入一种字符,并将其赋值给变量c。
Ø putchar(字符常量或字符变量名);
如char c=’A’; putchar(c);或putchar(‘A’);都会向屏幕输出字符A。
六、 C语言语句
Ø 表达式语句:由表达式末尾加上分号构成。
Ø 函数调用语句:由函数调用表达式加上分号构成。
Ø 空语句: ;
Ø 选取构造语句:if语句 switch语句
Ø 循环语句:for语句 while语句 do while语句
Ø 复合语句:用花括号{}将以上任意语句括起来构成一条复合语句。
七、 C程序基本构造
void main()
{ 声明某些:用来定义变量和声明自定义函数原型,需以“;”结尾,如int x;
执行语句某些:第六点里简介各种语句,如x=3;printf(“%d”,x);
}
main函数外可写自定义函数。如
int max()
{
return 0;
}
八、 选取构造语句
Ø if(表达式) 语句1 else 语句2
如果if语句圆括号内表达式值为非0,则执行语句1,值为0则执行语句2。
i. 表达式可为任意表达式,if语句执行实质是判断表达式值与否为0来决定执行语句1还是语句2。此外请在此处表达严重关切,不论是高手还是菜鸟经常会把判断两个数相等符号“==”写成了一种等号“=”成为了赋值运算,这样写法不会引起编译错误,但成果会与原意大大不同,因此考试前请再三提示自己。
ii. 语句1和语句2都只能是一种语句,若要跟多条语句,牢记用一对{}括起来,构成复合语句;也不要随便在圆括号后加“;” ,因“ ;”构成一条空语句,这会使背面跟语句1不再属于if语句构成某些。
iii. if语句三种构造
1. 单边: if(表达式) 语句
2. 双边:if(表达式) 语句1 else 语句2
3. 多层(重点掌握):
if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
…
else 语句n
Ø 条件运算符 表达式1? 表达式2 : 表达式3
若表达式1值非0,则取表达式2值做为整个表达式值,否则取表达式3值为整个表达式值。如 3>4? 1:2 该表达式值为2
Ø switch语句
switch(表达式)
{
case 表达式1:语句
case 表达式2:语句
…
case 表达式n:语句
default: 语句
}
语句执行过程:先计算表达式值,然后判断该值与表达式1到表达式n中哪个相等,若与表达式i值相等,则执行表达式i后所有语句,当遇到break;语句时结束整个switch语句执行。表达式1到表达式n值都不相等状况下执行default后跟语句。每个case后可跟多条语句。
九、 循环构造
Ø for循环语句
for(表达式1;表达式2;表达式3) 循环体语句
语句执行过程:
1. 计算表达式1
2. 判断表达式2值与否为0,若为0,语句执行结束,若不为0,进入环节3
3. 执行循环体语句(需注意是循环体语句只能有一种语句,若要包括各种语句要用一对{}括起来,构成一条复合语句,此处也不要随便加上 “ ; ”,因一种“;”可构成一条空语句,这会使得背面真正循环体语句不属于for循环语句某些)。进入环节4
4. 计算表达式3,然后重新进入环节2
Ø while循环语句 do while循环语句
i. while(表达式) 循环体语句
执行过程:
1. 判断表达式值与否为非0,若是进入环节2,否则结束语句执行。
2. 执行循环体语句,重新回到环节1。
ii. do 循环体语句 while(表达式);
执行过程:
1. 执行循环体语句,进入环节2
2. 判断表达式值与否为非0,若是重新回到环节1,否则结束语句执行。
这里要注意地方跟for语句同样,即循环体语句只能有一种语句,若要包括各种语句要用一对{}括起来,构成一条复合语句,此处也不要随便加上 “ ; ”,因一种“;”可构成一条空语句,这会使得背面真正循环体语句不属于while循环语句某些,此外do while循环while(表达式)后是要加“;”。
Ø break语句:放在循环体内实现功能是结束其所在那层循环执行。
十、 数组
Ø 定义格式:数据类型 数组名[整型常量];如 int a[10]; 定义了一种整型数组,数组名为a,这个数组具有10个元素。
Ø 引用数组元素: 格式:数组名[下标] 牢记下标值从0开始。下标可为常量,表达式,变量等,如int i=3; a[0]=5;a[3*2]=9; a[i]=7;
Ø 初始化:数据类型 数组名[整型常量]={数据表列};将数据表列各个值依次赋值给数组各个元素。如int a[5]={0,1,2,3,4};则数组a各元素a[0]到a[4]值分别为0,1,2,3,4
Ø 遍历数组元素
数组定义后,我们不能对数组进行整体操作,如int a[10];不能用a=3这样操作将数组各元素都赋值为3;而只能一种一种元素进行赋值,如a[0]=3;a[1]=3;a[2]=3…a[9]=3; 固然此时我们就可以借助于一种for循环来控制下标变化从而对数组各个元素进行赋值
for(i=0;i<10;i++) a[i]=3;
固然这只是用for循环遍历数组各元素最简朴例子,普通考试考是找出数组元素某种特性极值,例如最大值,最小值,或对数组各元素进行排序,这时我们就可以使用for循环来遍历数组各元素,然后在当前循环中得到一种元素再对其进行解决。如i=2时访问到元素是a[2],你就可以问问它,你是不是最小值啊。
Ø 整型数组
int a[10]; 整型数组里各个元素存储是整数。a[3]=3;
Ø 字符型数组
char str[20];字符型数组里各个元素存储是字符。 str[3]=’A’;
十一、 字符串函数
Ø gets(字符数组名或字符指针变量);
如char str[10],* str2; str2=str;则gets(str);或gets(str2);都是接受顾客输入字符串如“ABC”存入到字符数组str中
Ø puts(字符数组名或字符指针变量或字符串常量);
如char str[10]=”china”; char *str2;str=str2; 则puts(str); 或puts(str2); 或 puts(“china”);都会在屏幕上打印出 china
Ø strlen(字符数组名或字符指针变量);字符串测长函数
char str[20]=”hello world!”;
int len;len=strlen(str);得出成果是len值为12
Ø strcat(字符串1地址,字符串2地址);
将字符串2内容连接到字符串1尾部。
char str1[20]=”ABC”,str2[20]=”xyz”;
strcat(str1,str2);
则程序运营成果是str1内存储字符串变为ABCxyz,固然str2存储字符串还是xyz。
Ø strcmp(字符串1地址,字符串2地址);
比较串1和串2哪个比较大。比较大小根据是,两个字符串从左往右相应位置上第一种不相等字符ASCII码值之差。
char str1[20]=”ABCE”,str2[20]=”ABDE”;
int i;
i=strcmp (str1,str2);
第一种不相等字符为str1‘C’和str2‘D’,而两者相差-1,故-1做为strcmp函数执行成果返回到被调用位置,该位置位于赋值表达式内,故将其值赋值给i,即此时i值就是-1.
Ø strcpy(字符串1地址,字符串2地址);
将字符串2内容复制到字符串1内。
char str1[20]=”ABC”,str2[20]=”xyz”;
strcpy(str1,str2);此时str1内容为”xyz”,固然str2内容没变
strcpy(str1,”uvw”);此时str1内容又变成了“uvw“。
十二、 函数
Ø 函数定义
函数类型 函数名( 形式参数列表 )
{
内部变量定义和声明某些
执行语句
}
如:
int max (int x , int y )
{ int z ;
z= x > y ? x : y ;
return ( z ) ;
}
注意点:
1.函数类型是指返回值类型,即要与return语句后跟表达式值类型一致。若函数类型为void则阐明该函数无返回值,即函数体里不能浮现return 语句。
2.形式参数列表里定义变量要记得给它们指定类型,并且如果同步要定义各种,应在每个前面都分别指定类型名,而不能写成int x,y;
3.函数体里能写语句跟main函数同样,在开头可定义所需要变量,背面跟上一堆执行语句。
Ø 函数调用流程
以上面函数为例,在main函数进行调用:
void main()
{ int a,b,c;
scanf(“%d%d”,&a,&b);
printf(“%d”,max(a,b));或 c=max(a,b);printf(“%d”,c)以上两种办法都会在屏幕中打印出a,b间较大值。
调用函数格式 函数名(实际参数列表);调用时候像什么函数类型,形式参数类型就不要加上去了。max(a,b)中max就是函数名,写上变量名a,b是实际参数列表,执行这个调用语句时,会先把a,b值给相应位置形式参数即执行了x=a,y=b这样操作,然后开始执行max函数函数体语句。当max函数体里执行到一种return语句时,则max函数结束执行,将return后表达式值返回给main函数调用max函数那个位置,即若上面a=3,b=5则max(a,b)return后表达式值应当是5也就是说执行完max后把5返回到调用max位置可当作printf(“%d”,5);或另一种解法c=5。
}
十三、 指针
Ø 指针变量声明: 类型名 * 指针变量名;
Ø 通过指针变量访问它所指向普通变量值
先将普通变量地址赋值给指针变量,再通过指针运算符* 得到普通变量值。
int *p,x,y;
x=3;
p=&x;
则printf(“%d”,*p);会打印出3即x值
y=*p;则y值变为3
*p=5;则x值变为5
Ø 指针变量加上(减去)一种位移效果
若指针变量存入是数组元素地址,则其加一减一得到是那个数组元素下一种或前一种元素地址。
int a[10]; p=&a[3];
*p得到是a[3]值。
若p++;此时p存储是a[4]地址&a[4]; *p得到就是a[4]值。
或p--;此时p存储是a[2]地址&a[2],*p得到就是a[2]值。
Ø 行指针
i. 重要是对于二维数组来说,二维数组每行均有自己地址,第0行地址用 数组名 表达,第i行地址为 数组名+i;而想要得到二维数组里一种元素地址,必须先得到其所在行地址,然后再由那个地址得到元素地址,例如说 int a[3][4];定义了一种二维数组,该二维数组第0行地址为a,第1行地址为a+1,第2行地址为a+2,想从行地址得到元素地址,需在行地址前加上指针运算符“*”,即*a就是第0行首个元素地址即a[0][0]地址,而a[0][2]地址就是在a[0][0]地址基本上加上位移量2,即*a+2,然后想得到a[0][2]这个元素值呢就再加上一种指针运算符“*”,即*(*a+2),类似地,想得到a[2][2]这个元素值呢就是*(*(a+2)+2)
ii. 定义行指针变量: 类型名 (*变量名)[数组长度];
如int (*p)[4],a[3][4]; p=a;此时就可把p当成a来用,用法同上所述。
Ø 判断与否合法访问数组元素:若是指针法访问,判断指针后跟与否地址;若是下标法访问,判断下标有无越界。
Ø 函数指针:函数名即为函数地址(指针)
i. 函数指针变量定义: 类型名 (*变量名) (形参列表);如 int (*p)();
ii. 赋值:指针变量=函数名;设有个函数其函数名为max,则要将该函数地址给p话只要执行如下语句即可 p = max;
Ø 指针数组:指针数组数组元素都是指针变量,是用来存储变量地址,定义格式为 类型名 * 变量名[数组长度]; 如int * p[10];
Ø 指向指针指针:指针变量也是一种变量,故在内存中也有相应一种地址,而要存储指针变量地址,就规定助于用来存储指针变量地址指针变量,定义格式 类型名 ** 变量名;如 int *p1; int **p2; int a=3;可进行赋值p1=&a; p2=&p1; 则a 、*p1和 **p2值都是3.
十四、 宏定义
Ø 无参宏定义 #define 标记符 值 定义后,浮现所定义标记符地方都将以定义时指定值来代替。
#define M 2+3
main()
{ int x;
x=M*M; 则x值为2+3*2+3=11若想得到成果是(2+3)*(2+3)则定义时也写成这样 #define M (2+3)
}
注意#define、标记符、值之间都要用空格隔开,且宏定义结尾不需加分号。
Ø 带参宏定义 #define 标记符(参数表) 值
#define S(x,y) x*y
main( )
{ int a=3,b=4,c=5,d=6;
printf("a*b=%d\n", S(a,b)); 此时会打印出 a*b=12
printf("a+b*c+d=%d\n" , S(a+b,c+d)); 此时会打印出a+b*c+d=29,带参宏定义执行时是将a+b这样一种表达式代替x,c+d这样一种表达式代替y,因此S(a+b,c+d)进行是a+b*c+d运算,而不是将a+b值给x,c+d值给y然后再做x*y,这点跟函数调用传递参数是不同样。
}
Ø 自定义类型名typedef:对已存在类型名取一种外号。
i. 基本格式:typedef 原类型名 新类型名;
ii. typedef int INTEGER; 则int a,b;等价于INTEGER a,b;
iii. typedef int NUM[10]; 则 int a[10];等价于 NUM a; a即为一种有10个元素数组数组名。
iv. typedef int * INTEGER; 则int *a,*b;等价于INTEGER a,b;
十五、 构造体,共用体,枚举类型
Ø 构造体
i. 构造体类型定义及变量定义
struct 构造体名
{类型 成员1;
类型 成员2;
……
类型 成员n;
}变量名;
如
struct student
{ long num;
char name[10];
int score[4];
}st1;定义类型时同步定义变量
struct student st2;定义类型后,用类型名定义变量
尚有一种
struct
{ long num;
char name[10];
int score[4];
}st3;不给类型名,直接定义变量
ii. 构造体变量所占字节数:各成员各占字节数之和,如以上st1,st2,st3字节数皆为10+20+2*4=38
iii. 构造体变量初始化:struct student a={0001, "张三", 70,75,80,85};
iv. 构造体数组定义及初始化:
struct student a[3]={{0001,"zhang",89,90,91,92},
{0002,"liu",68,69,70,71},
{0003,"li",57,58,59,60} };
v. 构造体变量成员访问
1. 构造体变量名. 成员名 如st1.num
2. 使用构造体类型指针:
(*构造体指针名) . 成员 或 构造体指针名–>成员名
struct student *st; st=&st1; st->num 或(*st).num
Ø 共用体
i. 共用体类型定义及变量定义
union 共用体名
{ 类型 成员名1;
…
类型 成员名n;
};
变量定义与构造体类似,也有三种办法。
union data
{
int i;
char ch;
float f;
}d1; 定义类型时同步定义变量
union data d2; 定义类型后,用类型名定义变量
union
{
int i;
char ch;
float f;
}d3; 不给类型名,直接定义变量
ii. 共用体变量所占字节数:各成员所占字节数最大值,如上d1,d2,d3所占字节数皆为4.(单精度浮点型变量所占字节数最多为4).
iii. 共用体变量成员访问
1. 共用体变量名. 成员名 如d1.i
2. 使用共用体类型指针:
(*共用体指针名) . 成员 或 共用体指针名–>成员名
union data *dd; dd=&d1; dd->i 或(*dd).i
iv. 共用体成员值:由于共用体各成员共用同一段内存区,故同一时刻只有一种成员值是对的。如d1.i=5;d1.ch=’a’;则此时d1.i值就不是5了,而是其她值了,d1.ch值是’a’
Ø 枚举类型
i. 枚举类型定义: enum 枚举名{枚举元素名1,枚举元素名2,…,枚举元素名n};
ii. 枚举元素值:
默认值分别为0、1、…、n-1。枚举元素值也可在定义时重指定,对于没有指定值元素,按顺序加1
如enum weekday{sun=7,mon=1,tue,wend,thur,fri,sat};则sun值为7,mon值为1,tue值为2,wend值为3,thur值为4,fri值为5,sat值为6
十六、 Turbo C使用
Ø 菜单激活: F10
Ø 菜单切换:左右方向键在不同菜单间切换,上下方向键在同一种菜单不同选项间切换。
Ø 载入文献:两种办法:1.找到源文献所在位置,直接将其拉到Turbo C快捷方式上;2. F3
Ø 运营程序: ctrl+F9
Ø 看程序运营成果:alt+F5
Ø 进入编辑状态:菜单Edit
Ø 保存: F2
Ø 插入状态切换: Insert键
展开阅读全文