该【C语言重要的知识点复习资料 】是由【莫比乌斯】上传分享,文档一共【12】页,该文档可以免费在线阅读,需要了解更多关于【C语言重要的知识点复习资料 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。C语言重要知识点复习资料
C语言基础
(一)C语言特点
(1)语言简洁、紧凑、使用方便、灵活。
(2)运算符及数据结构丰富
具有结构化的控制语句,程序设计自由度大,代码质量高
单精度型
float
具有位处理和地址操作能力
整型int
用C语言写的程序可移植性好
实型(浮点型)
(二)
双精度型
double
枚举型enum
基本类型
字符型char
数组类型
数据
类型
构造类型
结构体型struct
指针类型
共用体型union
空类型(无值类型)void
(三)结构
①C程序是由函数构成的,至少要有main()函数
②函数由函数的首部和函数体组成
③函数首部由函数名、类型、属性、参数名、参数类型组成
④函数体由声明部分和执行部分组成
⑤C程序总是从main函数开始运行
⑥每个语句和数据声明的最后必须有一个分号
(四)常量
整型常量:
(1)十进制整数
(2)八进制整数(以0开头)
(3)十六进制整数(以0x开头)
(4)长整型常数(在数字后加字符L或l)
(1)十进制数(小数形式)
(2)指数形式(e前e后必有数,e后必为整数).
⑶字符串常量:用“”的字符序列eg:“A”为两个字符,即“A”和“\0”
(4)字符常量:用‘’的字符序列
(5)符号常量:不是常量的数据类型#define符号常量常量(符号常量通常用大写字母)
变量
标识符:字母,数字和下划线三种字符组成,且第一个字符必须是字母或者下划线。
整型变量:
基本型:int
短整型:shortint或short
长整型:longshort或long
无符号型:存储单元中全部二进制用做存放数本身,不包括符号位
C语言提供四个标识符long、short、unsigned、signed来表示基本类型。
①Signedint有符号基本整型(可简写为int)
②Unsignedint无符号基本整型
③Signedshortint有符号短整型
④Unsignedshortint无符号短整型
⑤Signedlongint有符号长整型
⑥Unsignedlongint无符号长整型
实型变量
单精度(float型):占4个字节(32位),只提供7位有效数字
双精度(double型):占8个字节,只提供15~16位有效数字
字符变量:用来存放字符常量charc1,c2;c1='a';c2='b'
注意:%c表示将输出字符%d表示将输出十进制数.
注解:‘a’的ASCII码为97,‘A’的ASCII码为65
变量初始化:变量名=表达式
运算符和表达式
运算符类型
算术运算符+—*/%(求余数)
比较运算符><==(等于)>=<=!=(不等于)
逻辑运算符!&&||
位运算符<<>>~|^&
赋值运算符=
条件运算符?:
逗号运算符,
指针运算符*&求字节数运算符sizeof
注意:参加+-*/运算两个数中有一个数为实数或双精度数,则结果是double型(双精度)
P365运算符优先级来执行
自增、自减运算符:
只用于变量(++5)×
++i,--i:在使用i之前,先使i的值加或减1
I++,i--:在使用i之后,再使i的值加或减1
注意:-I++相当于-(i++)
关系运算符(比较运算符)
>(大于)<(小于)
==(等于)>=(大于等于)
<=(小于等于)!=(不等于)
运算符
作用
使用方式
&&
a、b都为真,则a&&b为真,否则为假。
a&&b
||
a、b都为假,则a||b为假,否则为真。
a||b
!
a为真,则!a为假;a为假时,!a为真。
!a
=
表达式v=e的作用是求出表达式e的值,并把结果复制给v。e可以是常量、变量、或表达式。
如果v和e的类型不同,赋值运算执行时会把e的值转化为v的类型。
如果等于号两侧的类型不一致,但都是数值型或是字符型时,在赋值时要进行类型转换。见书P60-61规则1-8
左值v必须是变量或是其他能够存储数据的对象。
关系:
!(非)
高
算术运算符
关系运算符
&&和||
赋值运算符
低
逗号运算符和逗号表达式 注意:任何运算符优于逗号运算符
不同类型数据间的转换与运算
强制类型转换运算符:
(1)(double)a 将a转换成double类型
(2)(int)(x+y) 将x+y的值转换成整型
(3)(float)(5%3) 将5%3的值转换成float型
(4)(int)x+y将X转换成整数类型后再与y相加
:表达式1?表达式2:表达式3
(1)功能:判断表达式1的值,如果成立就执行表达式2,否则就执行表达式3。
(2)条件运算符是C语言中唯一的三目运算符.
二、程序控制结构
(1)putchar函数:字符输出函数
①功能是在显示器上输出单个字符。
②一般形式为:putchar(c)
③C可以是字符变量或整型变量
getchar函数
①功能是从键盘上输入一个字符。
②形式为:getchar()
③只能接收一个字符。得到的字符可以赋给字符变量、整型变量或作为表达式中的一部分。
printf函数:printf(格式控制,输出表列)
①格式字符P76-81
②printf("a=%d,b=%d",a,b)输出a=.....b=...
(4)scanf函数:scanf(格式控制,地址表列)
①&a中的“&”是“地址运算符”,&a是指变量a在内存中的地址。
②scanf("%d",&a,)注意:用“%d%d”格式输入数据时,不能用逗号作两个数据间的分隔符.
③%f,%d,%c:表示要输入一个实数,整数,字符,注意输入的数据中间必须用逗号格开。
C语言的选择语句
if语句
①格式1if(表达式)语句
②格式2if(表达式)语句1else语句2
③格式3:级联式if语句
If(表达式1)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
......
elseif(表达式m)语句m
else语句n
④If语句的嵌套If()
if()语句1
else语句2
else
if() 语句3
else语句4
switch语句
switch()
{
case常量表达式1:语句1
case常量表达式2:语句2
...............
case常量表达式n:语句n
Default:语句n+1
}
Break语句
①执行break语句会导致程序跳出switch结构,
并执行之后的程序代码.
②在switch结构中,如果没有break语句,程序
控制将会从一种情况继续到下一种情况.
循环语句
while语句
①格式:while(控制表达式)
循环体语句
当表达式为非0值时,执行while语句中的内嵌语句
do…while语句
①格式:do
循环体语句
while(控制表达式)
②特点:先执行循环体,然后计算控制表达式的值。
表达式的值为真,则再次执行执行循环体,再计算
表达式的值。当控制表达式的值为假时,结束循环。
(3)for语句
①语法格式:for(表达式1;判断表达式2;表达式3)
循环体语句
注意:表达式1只执行1次
②for(循环变量赋初值;循环条件;循环变量增值)
注意:for语句中的表达式1可以省略,其后的分号不能省
结束循环的控制语句
①break语句可以用来从循环体内跳出循环体,即提前结束循环。
②continue语句作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.
③continue语句只结束本次循环,而不是终止整个循环的执行。break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
构造型数据
(1)一维数组:
①定义:类型说明符数组名[常量表达式];
②常量表达式中可以包括常量和符号常量,但不能包含变量。
③引用:数组名[下标]只能引用单个数组
④一维数组的初始化
只给一部分元素赋值,其余元素为0
对数组不赋初值,系统会对所有数组元素自动赋以0值
对全部数组赋初值是,可以不指定数组长度
⑤冒泡排序法
选择排序法
二维数组
①定义:类型说明符数组名[常量表达式][常量表达式];
②引用:数组名[下标][下标]
③在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。
字符数组:用来存放字符数据的数组
①定义:charc[i];字符数组中一个元素存放一个字符。
②字符数组的初始化
,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(‘\0’)。eg:charc[2]={‘a’}则c[0]=ac[1]=\0
,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。eg:charc[]={‘o’,‘k’};等价于charc[2]={‘o’,‘k’};
。
charc[]={“hello”};charc[]=“hello”;
c[0]
c[1]
c[2]
c[3]
c[4]
c[5]
h
e
l
l
l
\0
c[0]
c[1]
c[2]
c[3]
c[4]
h
e
l
l
o
,使用格式符“%c”printf(“%c”,c[i]);
。输出时用“%s”charc[]={“Iamaboy”};printf(“%s”,c);
。charc[20];scanf(”%s”,c);
注意:scanf函数中的输入项c是已定义的字符数组名,数组名前面不要加&。
(4)字符串处理函数
①puts函数:作用是将一个字符串输出到屏幕。puts(字符数组名)
②gets函数:作用是从终端输入一字符串到字符数组,(字符数组名)
③strcat函数:把字符串2接到字符串1后。并将结果保存在字符数组1。
strcat(字符数组1,字符数组2)
④strcpy函数:字符串复制函数。是将字符串2复制到字符数组1中去。
(字符数组1,字符串2)
。
,字符串2可以是字符数组名,也可以是一个字符串常量。eg:strcpy(str1,”China”);
’\0’一起复制到字符数组1
。如:
str1=″China″;不合法str1=str2;不合法
⑤strcmp函数:strcmp(字符串1,字符串2)
。比较的结果由函数值带回
=字符串2,函数值为0
>字符串2,函数值为一正整数
<字符串2,函数值为一负整数
注意:对两个字符串比较,不能用str1>str2
⑥strlen函数:测试字符串长度的函数。函数的值为字符串中的实际长度(不包括’\0’)。strlen(字符数组)
⑦strlwr函数和strupr函数
。一般形式为:strlwr(字符串)
。一般形式为:strupr(字符串)
提示:ANSIC标准要求在使用字符串函数时要包含头文件””
常用字符串函数可以参考P373
(5)typedef的用途(识记)P315—318
四、函数
(一)函数类型
:标识没有返回值的这类函数,需要在函数定义的开头标识void
:类型标识符 函数名()
{
声明部分
语句
}
:类型标识符 函数名()
{}
有参函数:类型标识符 函数名(形式参数列表)
{
声明部分
语句
}
说明:
①如果没有指明返回类型,系统默认为int
②形式参数需要声明数据类型,形式参数之间用逗号分隔。
③函数体包括声明部分。声明部分定义的变量属于函数专有,其他函数不能进行赋值和修改。
④s函数定义是独立的。所以不能在一个函数的函数体内定义另外一个函数。
⑤函数之间可以相互调用,只有main函数不能被调用,因为main函数是程序运行入口点,即程序都从它开始运行。
(二)函数调用
:函数名(实际参数表列)实际参数可以是常量、变量或表达式.
实际参数之间用逗号分隔。
:返回类型函数名(形式参数);
:在调用一个函数的过程中,又调用另一个函数。
:在调用一个函数的过程中又出现调用该函数本身
:
①函数语句:把函数调用作为单独一个语句。例如:printf(“thisisamessage”);
②函数表达式:函数出现在一个表达式中例如:y=2*sin(x)+3*cos(y);
③函数参数:函数调用作为一个函数的实参例如:y=sin(tan(x))
:数组名可以作实参和形参,此时传递的是整个数组。当形式参数是一维数组时,可以不说明数组的长度。eg:intsum_array(inta[],intn)
实际参数把数组名传递给函数的时候,不要在数组名后放括号eg:total=sum_array(a,6);
:多维数组名也可以作为实参和形参。在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。
max_value(intarray[4][4])等价于max_value(intarray[][4])
(三)局部变量和全局变量
(静态)的存储方式:
①static声明:staticinta
②register变量
③auto变量
注意:若函数内的局部变量与全局变量同名。则外部变量会自动屏蔽。局部变量具有优先权。
变量的存储类别
(五)内部函数和外部函数
:static类型标识符函数名(形参名)staticintfun(a,b)
:externintfun(inta,intb)
五、指针
,而一般的变量是放数值的。
*p中*p和p的差别
*p可以当做变量来用;*的作用是取后面地址p里面的数值
p是当作地址来使用。
*p++是地址会变化。(*p)++是数值会要变化。
三名主义:
数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。
函数名:表示该函数的入口地址。
字符串常量名:表示第一个字符的地址。
结构体和共用体
结构体
一般定义:struct结构体名
{成员列表}
定义结构体:
①struct结构体类型名
{
数据类型成员名1;
数据类型成员名2;
...........
数据类型成员名n;
}结构体变量名表
②直接定义结构体类型:struct
{
数据类型成员名1;
数据类型成员名2;
...........
数据类型成员名n;
}结构体变量名表
共用体
(1)引用:不是pringf("%d",a)而是pringf("%d",)
六、概念
:顺序结构,循环结构(三个循环结构),选择结构(if和switch)
()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。
.
。byte是指字节,一个字节=八个位.
,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。
。
。
,其他可以没有输入。
。
。
:
'1'是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。
'0'的ASCII数值表示为48,'a'的ASCII数值是97,'A'的ASCII数值是65。
:一定是(int)a不是int(a),注意类型上一定有括号的。
注意(int)(a+b)和(int)a+b的区别。前是把a+b转型,后是把a转型再加b。
取整丢小数的情况:int
:%d对应整型;%c对应字符;%f对应单精度;%ld对应longint;%lf对应double。
=getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。
putchar(‘y’)把字符y输出到屏幕中。
:t=x;x=y;y=t。
(0<x)&&(x<10)表示比0大比10小。
18条件表达式:表达式1?表达式2:表达式3
注意:当非0时候是表达式2的数值,当为0是就是表达式2的数值。口诀:真前假后。
,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。
,不可以和continue用。
:是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。
continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。
!=号的级别高于=号
,和传地址的差别。
传数值的话,形参的变化不会改变实参的变化。
传地址的话,形参的变化就会有可能改变实参的变化
:函数名,函数返回类型,函数参数类型。不一定要有:形参的名称。
[10],
(1)a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。
(2)a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。
[2]变成*(a+2)a[2][3]变成*(a+2)[3]再可以变成*(*(a+2)+3)
27两种重要的数组长度:.
chara[]={‘a’,’b’,’c’}; 数组长度为3,字符串长度不定。sizeof(a)为3。
chara[5]={‘a’,’b’,’c’} 数组长度为5,字符串长度3。sizeof(a)为5。
如果输入的是 goodgoodstudy!
那么scanf(“%s”,a);只会接收 good. 考点:不可以接收空格。
getchar(a);会接收 goodgoodstudy! 考点:可以接收空格。
结构化程序设计:自顶向下;逐步细化;模块化设计;结构化编码。
自增、自减运算符的结合方向是:自右至左
常见的程序改错
(减)运算符的表达式
eg:i=3,a=(++i)+(++i)+(++i);
要考虑运算符的优先级,很显然“++”的优先级高于“+”。
输入语句中缺取址符&
eg:scanf(“%d”,x);→scanf(“%d”,&x;chara[10];
scanf(“%s”,&a);→chara[10];scanf(“%s”,a);
a在这里既表示数组名字,又表示数组首地址,它本身已经代表了地址,所以就不用再加取址符了。在使用输入语句的时候要仔细观察,什么时候该加取地址符号,什么时候不该加,一定要搞清楚。
&&和位运算符&相混淆
eg:if(x&y)→if(x&&y)
误用按位“与”运算符‘&’替代了“与”运算符‘&&’位运算符是C语言独特的一种运算符,其中“&”表示对两个操作数按二进制位进行“与”运算,规则是0&0=0,0&1=0,1&0=0,1&1=1。如6&5=4,其中6变为00000110,5变为00000101,按位“与”运算的结果为100即4。
=当恒等==
eg:if(a=0)→if(a==0)
:if(x>y);x=y;→if(x>y)x=y;
这样相当于满足条件执行空语句。下面的x=y语句将被无条件执行。一般情况下if()条件后不需要加分号。
eg:for(i=1;i<10;i++);{````}→for(i=1;i<10;i++){````}
上述for语句相当于满足条件执行空语句,真正的循环语句则没有被执行。一般情况下for()循环条件后不需要加分号。
:求水仙花数
main()
{inti,a,b,c;
for(i=100;i<1000;i++)
{a=i%10;i=i/10;b=i%10;i=i/10;c=i%10;/*i的值被改变*/
if(a*a*a+b*b*b+c*c*c==i)
printf(“%d”,i);
在循环语句里,循环变量i每次进入循环后都被改变了,导致了i永远都满足循环条件,所以就死循环了。为了避免此类错误,在编程时应尽量避免在循环语句中改变循环变量。
:求数组中的最大值能最大值的下标
main()
{inta[10]={8,2,3,4,5,6,3,7},
max=a[10],m,i;
for(i=0;i<10;i++)if(a[i]>max)
{max=a[i];m=i;}
printf(“%d%d”,max,m);}
原因就在下标变量m没有赋初值,系统随机赋了初值.
,但是赋的位置不对eg:求100以内的完数
s=0;
for(i=1;i<=100;i++)
{for(j=1;j<=i/2;j++)if(i%j==0)s+=j;
if(s==i)printf(“%d”,i);}
s=0语句放错了位置,应该放在外层循环里面,也就是每判断一个数都应该从0开始累加。
eg:求1!+2!+……+100!
main()
{inti,j,s=0,t=1;
for(i=1;i<=100;i++)
{for(j=1;j<=i;j++)t=t*j;s+=t;
}
printf(“%d”,s);
C语言重要的知识点复习资料 来自淘豆网m.daumloan.com转载请标明出处.