C语言复习知识.docx
《C语言复习知识.docx》由会员分享,可在线阅读,更多相关《C语言复习知识.docx(54页珍藏版)》请在冰豆网上搜索。
![C语言复习知识.docx](https://file1.bdocx.com/fileroot1/2022-10/28/31e13edb-cf98-4829-9207-0f889baa7c38/31e13edb-cf98-4829-9207-0f889baa7c381.gif)
C语言复习知识
C语言基础知识总结
主要内容:
1.C数据类型
2.简单的算术运算和表达式
3.键盘输入和屏幕输出
4.选择控制结构
5.循环控制结构
总结风格:
分条罗列,主要是知识点,有例题不多
一、C数据类型
1.C语言处理两种数据:
常量和变量
2.常量:
整形常量、实型常量、字符常量、字符串常量、枚举常量
3.整形常量:
正整数、负整数、零eg:
10,-30,0
4.实型常量:
实数、小数、浮点数eg:
3.14,-0.56,18.0
5.字符常量:
字符型常量、用单引号括起来的任意字符eg:
'x''X''?
'',''9'
6.字符串常量:
用双引号括起来的一个或多个字符eg:
"x""Hello""Y78"
7.在C程序中,整型常量可以用十进制、八进制、十六进制形式表示,但编译器都会自动将其转换成二进制存储
8.整型常量的类型:
长整型、短整型、有符号、无符号。
9.不同进制的整型常量的表示形式:
1)十进制:
0~9数字组合,可带正负号eg:
256,-128,0,+7
2)八进制:
0开头,后面跟0~7数字组合eg:
021,-017
3)十六进制:
0x(0X)开头,后跟0~9,a~f(A~F)数字组合eg:
0x12,-0x1F
10.不同类型的整形常量的表示形式:
1)有符号整型常量:
默认int型定义为有符号整数,无需signedeg:
10,-30,0
2)无符号整形常量:
常量值后跟u或U,只能表示>=0的数eg:
30u,256U
3)长整型常量:
常量值后跟l或Leg:
-256l,1024L
4)无符号长整型常量:
常量值后跟LU、Lu、lU、lueg:
30lu
11.C程序中,实型常量两种表示形式:
小数、指数
12.不同形式的实型常量的表示形式:
1)十进制表示形式:
数字和小数点组成,必须要有小数点,整数部分可省略eg:
0.123,-12.35,.98
2)指数形式:
e或E代表以10为底的指数,e左边是数值部分(有效数字,可以是整数、小数,不能省略),e右边是指数部分(必须是整数形式)eg:
3.45e-6
13.实型常量有单精度和双精度之分,无有符号和无符号之分
14.不同类型的实型常量表示形式:
1)单精度实型常量:
常量值后跟F或feg:
1.25F,1.25e-2f
2)双精度实型常量(double):
实型常量默认按双精度处理eg:
0.123,-12.35,.98
3)长双精度实型常量(longdouble):
常量值后跟L或leg:
1.25L
15.变量:
在程序执行过程中可以改变的量
16.变量在必须先定义后使用,定义时需要声明变量的类型和变量名,一般形式:
类型关键字变量名;
17.关键字是C语言预先规定具有特殊意义的单词,类型关键字用于声明变量的类型
18.标准C语言编写的程序都是以main()作为开头,指定了C程序执行的起点,在C程序中只能出现一次,称为主函数
19.C程序总是从main函数开始执行,与他在程序中的位置无关,main函数主体部分称为语句,用{}括起来,一般C语句以;结束
20.变量的类型决定了编译器为其分配内存单元的字节数、数据在内存单元中的存放形式、该类型变量合法的取值范围以及该类型变量可参与的运算种类
21.变量名是用户定义的标识符,用于标识内存中具体的存储单元,存放的数据称为变量的值
22.新数据存放于存储单元时,旧数据将会被修改,反应变量的值是可以改变的
23.变量名的命名规则:
1)标识符只能由英文字母、数字、下划线组成
2)标识符必须以字母或下划线开头
3)不允许使用C关键字为标识符命名
4)标识符可以包含任意多个字符,但一般会有最大长度限制,预编译器有关,一般不会超过,最好不超过8个字符
注意:
标识符区分大小写
eg:
xy3_imaxELSEXA_to_B(合法)
eg:
7xint#Nobadonere-input(不合法)
24.标准C规定所有变量必须在第一条可执行语句之前定义
25.在同一条语句中可以同时定义多个相同类型变量,多个变量之间用逗号分隔,没有顺序要求
26.在使用标准输入/输出函数时,必须在程序开头加上编译预处理命令
27.中stdio为头文件,std是standard,i为input,o为output,h为head
28.编译预处理命令#include的作用:
将在输入/输出函数的头文件stdio.h包含到用户源文件中
29.%d按十进制整数个格式输出,%f按十进制小数格式输出,一般输出6位小数,%c输出一个字符,\n换行,双引号内字符原样输出
30.不同类型的数据在内存中占用不同大小的存储单元,他们所能表示的数据的取值范围各不相同,不同类型的数据表示形式及其可以参与的运算种类也不同
31.定义整型变量时,只要不指定为无符号型,其隐含类型为有符号型,signed通常省略不写
32.C程序中每个变量的值都是按字节编址,都被存储在内存中特定的存储单元中,这个存储空间实际是一个线性地址表,即每个字节的存储空间对应一个唯一的地址
33.1个字节等于8个二进制位,即8个位为一个字节,一个字节可以表示的整数最小为0,最大255,即8个位可以表示0-255之间的数,一个二进制位的值只能是0或1
34.同种类型在不同的平台所占字节数不同,要计算数据类型所占内存空间的字节数需要用sizeof()运算符
35.sizeof是C语言关键字,不是函数名,sizeof(变量名)计算一个变量所占内存的字节数
36.计算不同类型运算符的表达式时,要考虑运算符的优先级和结合性
37.正数的反码、补码与原码都相同,负数的补码等于反码加1
38.在计算机内存中负数都是用补码来表示
39.对于实数,无论小数海曙指数形式,在计算机内存中都采用浮点形式来存储
40.浮点数分为阶码、尾数两部分,实数N=S*pow(r,j),S为尾数(无论正负,规定用存小数),j为阶码(无论正负,必须是整数),r是基数eg:
10.0111=0.100111*pow(2,10)
41.阶码所占位数决定实数的取值范围,尾数所占位数决定实数的精度,尾数的符号决定实数的正负,阶码和尾数的字节大小与编译器有关
42.float型变量能接收实型常量的7位有效数字,double型变量能接收16位
43.运算符的优先级:
单目运算<算术运算<关系运算<逻辑运算<条件运算<赋值运算<逗号运算
44.素数:
又称质数,指在大于1的自然数中,除1和本身不能被其他自然数整除的数
45.合数:
指在自然数中除1和本身外还能被其他自然数整除的数
46.因子:
所有能整除这个数的数,不包括自身,但包括1
47.闰年:
能被4整除但不能被100整除,或能被400整除
二、简单的算术运算和表达式
1.条件运算符是C语言提供的唯一一个三元运算符,C语言中没有幂运算符
2.只有计算相反数是一元运算符,其余运算符都是二元运算符
3.一元运算符也叫单目运算符,二元运算符也叫双目运算符,三元运算符也叫三目运算符
4.整数除法的结果是整数,浮点数除法的结果是浮点数
5.求余运算限定参与运算的两个操作数必须为整型,余数的符号与被除数的符号相同,不能对两个实型数进行求余运算
6.所有的算术运算符中只有一元的去相反数运算符为右结合,其余的结合性都为左结合
7.同一优先级的运算符进行混合运算时,从左向右依次进行
8.运算符的优先级:
单目运算>算术运算>关系运算>逻辑运算>条件运算>赋值运算>逗号运算
9.计算并输出一个三位整数的个位、十位、百位数字之和
#include
voidmain()
{
intx=321;
inta,b,c,sum;
a=x%10;//a=1
b=(x/10)%10;//b=2
c=x/100;//c=3
sum=a+b+c;
printf("a=%d,b=%d,c=%d\nsum=%d\n",a,b,c,sum);
}
10.涉及算术运算的复合赋值运算符有5个:
+=,-=,*=,/=,%=
11.增1运算符也称自增运算符,减1运算符也称自减运算符,都是一元运算符,只有一个操作数必须是变量不能是常量或表达式
12.自增自减运算符作为前缀时,先执行加1或减1然后使用;自增自减运算符作为后缀时,先使用再执行加1或减1;
13.考虑优先级与结合性的实例
m=-n++《=》m=-(n++)《=》m=-n,n=n+1;
//正面:
-和++都是一元运算符,优先级相同,此时要考虑结合性,结合性都是右结合的,所以先算++后算-
//反面:
如果等价m=(-n)++就不合法了,因为表达式不能进行自增操作
14.scanf函数和printf函数都是C的标准输入/输出函数,&为取地址运算符
15.宏常量与宏替换:
1)在程序中直接使用的常数称为幻数,将幻数定义为宏常量或const常量是为了提高程序的可读性和可维护性
2)宏常量也称符号常量,没有数据类型,编译器不对其进行类型检查,只进行字符串替换
3)宏定义一般形式:
#define标识符字符串。
标识符被称为宏名,宏名与字符串之间可有多个空白符,不加等号,结尾不加分号
4)宏常量是由宏定义编译预处理命令来定义,宏名替换成字符串的过程称为宏替换,宏替换不做任何语法检查
5)当宏定义是一个表达式时,调用时,是一个数就可以直接带入,而是表达式也要看成是一个数代进宏定义表达式中,
而看成一个数这就要求把调用的数加上圆括号,为了减少不必要的错误,最好都加上圆括号
6)宏替换的过程是将宏名原样替换成字符串,而不是直接计算出值,所以要用调用后的结果参与其他运算就需要把调用的结果加上圆括号
7)例题:
#include
#defineN2//N=2
#defineMN+1//M=2+1
#defineNUM2*M+1//NUM=2*2+1+1=6
voidmain()
{
inti;
for(i=1;i<=NUM;i++);
printf("%d\n",i);//执行完空循环,i=7
i--;//i=6
printf("%d\n",i);
}
8)例题:
#include
#definef(x)x*x
voidmain()
{
intb;
b=f(4+4);//b=4+4*4+4=24,解释见5)
printf("b=%d\n",b);
}
9)例题:
#include
#definef(x)x*x
voidmain()
{
intb;
b=f(4+4)/(2+2);//b=4+4*4+4/(2+2)=21解释见6)
printf("b=%d\n",b);
}
10)例题:
#include
#definef(x)x*x
voidmain()
{
intb;
b=f((4+4));//b=(4+4)*(4+4)=64
printf("b=%d\n",b);
}
11)例题:
#include
#definef(x)(x*x)
voidmain()
{
intb;
b=f((4+4))/(2+2);//b=((4+4)*(4+4))/(2+2)=16
printf("b=%d\n",b);
}
16.const常量
1)const常量只能在定义