最新期末复习C语言知识点归纳.docx
《最新期末复习C语言知识点归纳.docx》由会员分享,可在线阅读,更多相关《最新期末复习C语言知识点归纳.docx(36页珍藏版)》请在冰豆网上搜索。
最新期末复习C语言知识点归纳
期末复习C语言知识点归纳
一、概述
1.一个C语言源程序可以由一个或多个函数组成,有且只有1个main()函数,可以放在程序中的任何位置.
2.一个C程序不论有几个函数,都是从main()函数开始执行.
3.标识符
按照C语言所定义的规则来命名的符号。
规则:
由字母、数字、下划线组成,但第一个字符必须
是字母或下划线。
例如:
area、a234、_1234为合法标识符
456P、a-b、a+b为非法标识符
注意:
标识符区分大小写。
例如:
PAGE和page是两个不同的标识符。
4.c语言有32个关键字,关键字不能用作用户标识符。
5.C源程序文件的扩展名".c"。
6.VC++6.0下c 语言程序的完整实现过程包括4个基本步骤:
●编辑源程序
●编译源程序
●构建(链接)形成可执行文件(.exe)
●运行可执行文件.
二、数据类型、表达式
1.c语言中,整型、字符型、实型是最基本的数据类型.
2.常量
指在程序运行中,其值不能被改变。
分为整型常量、实型常量、字符常量、字符串常量。
●整型常量
C语言中主要有十进制、八进制、十六进制等。
十进制例如12、-3、32767等。
八进制用数字0开头,由0-7这8个数字组成。
例如010、016为合法八进制数
127、018为非法八进制数
十六进制用数字0和字母x或X开头,用0-9表示前10
个数字,字母A-F(可小写)表示后6个数字。
例如0xAF、0x10、0x34为合法十六进制数
100、ABC、0xAFH为非法十六进制数
注意:
C语言中只有十进制数可以为负数。
●实型常量
表示方式有两种:
小数形式和指数形式。
小数形式
例如:
0.123、.123、123.都是合法形式。
指数形式
例如:
2.3026可用以下任何一种指数表示
0.23026E1、2.3026e0、23.026E-1
但下面的指数形式为非法
E3、.5e3.6、2.3e-2(e和-2间有空格)
●符号常量
用符号名来表示一个常量。
格式:
#define符号名常量值
例:
已知圆的半径为5.0,计算圆的面积(圆周率取3.14)。
#include
#definePI3.14
main()
{doubler,s;
r=5.0;
s=PI*r*r;
printf(“s=%f\n”,s);
}
C语言中整型常量的3种表示:
8进制以0引导,16进制以0x或0X引导,十进制不能以0开头.
●实型(float或double型)常量在程序中只能用十进制数,不能用其他进制表示。
2种表示形式,普通的和指数形式,如3e5或者3E5,三者不可省略任何一部分.
●一个字符常量占一个字节存储空间.用单引号限定,如:
’A’
’\0x41’(为转义字符,表示以十六进制数41为ASCII码值的字符,即’A’的转义字符形式).
‘\0’(表示空字符,在字符串中用作字符串的结束标志)
11.字符串常量用英文双引号括起来.如:
”hello\n”
●字符串中的字符个数称为字符串的长度.空字符串长度为0.
●字符串存储中每个字符占一个字节,字符串结尾自动加一个结束标志符’\0’,所以字符串存储的时候,占用的空间长度要比串的实际长度多1.
如:
charch[]={“Hello”};实际串的长度为5,但数组空间长度为6。
●变量
指在程序运行过程中其值可以改变的量。
变量的命名必须符合标识符的命名规则,且不能和C语言
中关键字同名。
(例如:
main是关键字)
例如:
a、b、ab为合法变量
define、printf为非法变量
注意:
ab是一个整体,含义不同于a乘以b。
●有符号整型变量用英文singned表示,存储时最高一位是符号位,无符号整型变量用英文unsigned表示.
●字符型变量的数据类型标识符是符号char,每个字符型变量只能存储一个字符.
例如:
‘A’、’c’、’5‘都是合法的字符常量。
”A”、’abc’都是非法的字符常量。
●常见的转义字符:
\n回车换行\\反斜杠
\’单引号\”双引号
\ddd三位八进制\xhh二位十六进制
\0空值
例1:
‘\n’表示回车换行‘\’’表示一个单引号
例2:
‘\101’表示字符’A’‘\x41’表示字符’A’
●字符变量
用关键字char定义,可以同时赋初值。
例1定义两个字符变量ch1和ch2。
charch1,ch2;
例2定义两个字符变量a和b,初值分别为’1’和’2’。
chara=’1’,b=’2’;
●getchar函数和putchar函数
分别用来输入字符和输出字符。
●字符的输入和输出
使用scanf和printf时,格式符均为%c。
例1从键盘上输入一个字符保存在ch中。
charch;
ch=getchar();
例2charc1=’A’,c2;
c2=c1+1;
putchar(c2);
输出结果是’B’。
例3输出一个回车换行符。
putchar(‘\n’);
例:
从键盘上输入一串字符,最后以’!
’为结束标志。
分别
统计大写字母,小写字母、数字出现的次数。
#include
main()
{
charch;
intn1=0,n2=0,n3=0;
printf(“请输入一串字符以!
结束:
\n”);
ch=getchar();
while(ch!
='!
')
{
if(ch>='A'&&ch<='Z')
n1++;
if(ch>='a'&&ch<='z')
n2++;
if(ch>='0'&&ch<='9')
n3++;
ch=getchar();
}
printf("大写字母出现次数是%d\n",n1);
printf("小写字母出现次数是%d\n",n2);
printf(“数字出现次数是%d\n",n3);
}
●VC++6.0下,int 型数据占4个字节,float型数据占4个字节, double型数据 占8个字节,.char型数据 占1个字节.
●算术运算符
+、-、*、/、%(求余数)
例如:
3+21.2*3.25%31/2
求余运算符%只能用于整型数据的相除求余数,结果为整数.如:
7%2.0为非法表达式,7/2结果为3,7%2结果为1
运算规则
1)如果运算数类型一致,则结果为运算数的类型。
所有实数运算都是以双精度进行.
2)如果运算数类型不一致,则系统自动转换,使运算符
两边类型一致后再进行运算。
char 和short参与运算先转换成同int .
赋值运算中,赋值号右侧量的类型将转换成左侧的类型.
例11.0/2.0结果为0.5
例21/2结果为0
例315/3.0结果为5.0
●强制类型转换
格式:
(类型名)(表达式)
例4(int)3.234结果为3
例5(float)(10%3)结果为1.000000
●关系运算符
>,>=,<,<=的优先级相同且高于==,!
=的优先级.
关系运算符的优先级低于算术运算符高于赋值运算符.
关系运算符是左结合性.
●关系表达式的值为真则是1,假为0.
●逻辑运算符!
高于&&,和||,高于算术运算符.&&和||是左结合的,!
是右结合的.
●注意&&及||运算的短路现象。
&&的短路运算:
(表达式1)&&(表达式2),若(表达式1)的值为0,则表达式2将不被计算,整个&&的结果为0。
||的短路运算:
(表达式1)||(表达式2),若(表达式1)的值为1,则表达式2将不被计算,整个||的结果为1。
●数学关系式0(0●赋值表达式
格式:
变量名=表达式
例如:
a=10a=a+1a=b=7+1为合法表达式
a+b=8a=7+1=b为非法表达式
整个表达式的值等于最左边变量的值。
例如:
a=b=c=8*8整个表达式最后的值为64
●复合赋值表达式
复合运算符:
+=、-=、*=、/=、%=
例如:
n=n+1表达式可写成n+=1
n=n%3表达式可写成n%=3
n*=m+3表达式可写成n=n*(m+3)
例1假设变量a初值为9,计算下列表达式。
a+=a-=a+a
解答:
1)计算a+a,结果为18,a值未变。
2)计算a-=18,即a=a-18,结果为-9,a值变为-9。
3)计算a+=-9,即a=a+(-9),结果为-18,a值变为-18。
整个表达式最后结果为-18,a最后值为-18。
注意:
a=a+1为赋值表达式,而a=a+1;为赋值语句。
●自加和自减运算符
自加和自减只适用于整型变量.
例如:
a++和++a等价于a=a+1
b--和--b等价于b=b-1
a++和++a的区别:
假设a的初值为5
表达式a++值为5,最后a值为6。
表达式++a值为6,最后a值为6。
●逗号表达式
格式:
表达式1,表达式2,…..,表达式n
从左至右依次计算每个表达式,最后一个表达式的值即为
整个逗号表达式的值。
例如:
表达式i=3,++i,i+5最后结果为9,i最后值为4。
●条件运算由"?
"和":
"构成,它是根据条件从两个表达式中选择一个进行计算取值的操作,优先级高于赋值运算符,低于算术运算和关系运算.
三、输入输出函数
●数据输出printf
格式:
printf(格式符,输出项1,输出项2,….)
格式符功能
%c输出一个字符
%d输出十进制整数
%f输出小数形式浮点数
%e输出指数形式浮点数
%s输出一个字符串
数据宽度说明:
1)在%和格式字符之间插入一个整数来指定输出宽度。
例如:
%4d、%5c
2)对于float和double类型的实数,可以用n1.n2形式
n1指定输出数据的宽度(包括小数点),n2指定小数
点后小数的位数。
例如:
%12.3f、%12.0f
例1输出整型变量a和b的值,数据宽度均为4。
printf(“%4d%4d”,a,b);
例2输出单精度变量k的值,保留2位小数。
printf(“%.2f”,k);
●数据输入scanf
格式:
scanf(格式符,输入项1,输入项2,…)
格式符功能
%c输入一个字符
%d输入十进制整数
%f输入单精度数
%lf输入双精度数
%s输入一个字符串
例1从键盘上输入两个整数,保存在变量a和b中。
scanf(“%d%d”,&a,&b);
例2从键盘上输入一个双精度数,保存在变量data中。
scanf(“%lf”,&data);
此处两例中&是C语言运算符,表示取变量地址。
●复合语句
格式:
{语句1语句2….语句n}
例1用复合语句将变量a,b,c依次赋值为最小素数。
{a=2;b=3;c=5;}
例2用复合语句实现变量a和b的值的交换。
{k=a;a=b;b=k;}
●不带参数的宏#define PI 3.14159 意思是用符号常量PI(宏名)代替3.14159(宏体),注意:
宏定义不是c语句,后面不加分号.
●带参数的宏.#define m(x) x*x*x*x
意思是m(x)代替x的4次方,x 不用定义,可以在使用中换成需要的字母.
带参数的宏的展开,如:
#define m(x) x*x*x*x
printf("%d",m(1+1));
m(1+1)的宏展开式为:
1+1*1+1*1+1*1+1计算结果为5
再如:
#define m(x) (x)*(x)*(x)*(x)
printf("%d",m(1+1));
m(1+1)的宏展开式为:
(1+1)*(1+1)*(1+1)*(1+1)计算结果为16
●include命令是编译预处理的文件包含命令,形式为了#include <文件名>或者 #include"文件名",调用标准函数中的输入输出函数,#include"stdio.h" ,如果调用数学函数(如sqrt函数、fabs函数等),则应加上#include "math.h "或者#include
四、分支结构
●关系运算符
>、<、>=、<=、==、!
=
关系运算的结果只有两种:
真或假
C语言中用1表示真,用0表示假。
例16>=6‘a’>’A’‘5’>’‘结果均为真,值为1
例26!
=6‘D’==’d’‘9’>’F’结果均为假,值为0
●逻辑运算符
&&(与)||(或)!
(非)
优先级:
非运算>与运算>或运算
非运算规则
操作数结果
真假
假真
与运算规则
操作数1操作数2结果
真真真
真假假
假真假
假假假
或运算规则
操作数1操作数2结果
真真真
真假真
假真真
假假假
例1若变量a值为10,变量b值为16,计算表达式。
a>b||a>sqrt(b)&&b>=16
最后结果为真,表达式的值为1
●if语句的一般形式:
单分支结构:
if(表达式)语句
若表达式为真,则执行语句;否则if语句结束。
二选一结构:
if(表达式)
{语句组1}
else
{语句组2}
表达式的值非0才执行语句组1,否则执行语句组2.
例1从键盘上输入两个整数,输出较大的数。
#include
main()
{
intx,y;
printf(“请输入两个整数:
\n”);
scanf(“%d%d”,&x,&y);
if(x>y)
printf(“%d”,x);
else
printf(“%d”,y);
}
●条件运算符
格式:
表达式1?
表达式2:
表达式3
若表达式1为真,结果为表达式2;否则为表达式3。
例如:
x的初值为5,执行以下语句
y=++x>6?
100:
200;最后y的值为200
●if语句可嵌套,在花括号里继续使用.
多选一结构:
if(表达式1)
{语句组1}
else if(表达式2)
{语句组2}
else if(表达式3)
{语句组3}
else
{语句组n}
例1根据输入的学生成绩,大于或等于90分为A,60
分以下等级为E,其余每10分一个等级。
#include
main()
{
intg;
printf(“请输入一个整数:
\n”);
scanf(“%d”,&g);
if(g>=90)printf(“A\n”);
elseif(g>=80)printf(“B\n”);
elseif(g>=70)printf(“C\n”);
elseif(g>=60)printf(“D\n”);
elseprintf(“E\n”);
}
●switch(表达式)//switch表达式通常为整型或字符型值
{
case常量1:
语句组1//case后面必须是常量
case常量2:
语句组2
.........
default:
语句组//也可省略该语句
}
可以使用中break 来中止后面语句的执行.
●switch表达式通常为整型或字符型值,case中的常量类型与之对应,case后面的表达式可以是常量或常量表达式,不能为变量表达式.
switch语句
格式:
switch(表达式)
{
case常量表达式1:
语句1
case常量表达式2:
语句2
……
case常量表达式n-1:
语句n-1
default:
语句n
}
若表达式的值与表达式1相等,则执行语句1;若与表达
式2相等,则执行语句2……若均不相等则执行语句n。
例1用switch语句重写学生等级程序。
#include
main()
{
intg;
printf(“请输入一个整数:
\n”);
scanf(“%d”,&g);
switch(g/10)
{
case10:
printf(“A\n”);break;
case9:
printf(“A\n”);break;
case8:
printf(“B\n”);break;
case7:
printf(“C\n”);break;
case6:
printf(“D\n”);break;
default:
printf(“E\n”);
}
}
程序中break表示跳过后面的分支。
五、循环结构
●while循环
格式:
while(表达式)循环体
若表达式为真,则执行循环体。
再判断表达式,若仍为真
则重复执行循环体直到表达式为假时循环结束。
例1编程计算S=1+2+……100。
#include
main()
{
intk=1,s=0;
while(k<=100)
{s=s+k;k=k+1;}
printf(“%d”,s);
}
●do-while循环
格式:
do
循环体
while(表达式);
先执行循环体,然后判断表达式。
若为真则重复执行
循环体直到表达式为假时循环结束。
例1用do-while循环计算10!
#include
main()
{
intk=1;
longs=1;
do
{s=s*k;k++;}
while(k<=10);
printf(“%ld”,s);
}
注意:
while循环和do-while循环的区别
while循环是先判断表达式,因此循环体有可能一次也不执行。
do-while循环是先执行一次循环体,再判断表达式,所以不论表达式为真为假,循环体至少要执行一次。
●for循环
格式:
for(表达式1;表达式2;表达式3)循环体
先执行表达式1,然后判断表达式2,若为真则执行
循环体。
然后执行表达式3,再判断表达式2,若仍
为真则重复执行循环体直到表达式2为假时结束。
例1用for循环计算S=1+2+…100。
#include
main()
{
intk,sum=0;
for(k=1;k<=100;k++)
sum=sum+k;
printf(“%d”,sum);
}
例2若一个三位数个位、十位、百位的立方和等于它本身
则称这个数为水仙花数。
例如153是一个水仙花数。
编程输出所有的水仙花数。
#include
main()
{
inta,b,c,i;
for(i=100;i<=999;i++)
{
a=i/100;
b=i%100/10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
printf("%d\n",i);
}
}
●break语句
适用的场合是switch语句中,及循环语句中。
用在循环体内表示强行退出循环。
例1计算S=1+2+3+…n,直到累加和大于5000为止。
#include
main()
{
inti,s=0;
for(i=1;;i++)
{
s=s+i;
if(s>5000)break;
}
printf(“%d”,s);
}
注意:
当有多重循环时,break只能退出最内层循环。
●continue语句
用在循环体中用来跳过本次循环余下的语句,立即开始
下一轮循环,整个循环并未结束。
例1写出下列程序运行结果。
inti,k=0,s=0;
for(i=1;i<=5;i++)
{
s=s+i;
if(s>5)
{printf(“i=%d,s=%d,k=%d\n”,i,s,k);
continue;
}
k=k+s;
printf(“i=%d,s=%d,k=%d\n”,i,s,k);
}
运行结果:
i=1,s=1,k=1
i=2,s=3,k=4
i=3,s=6,k=4
i=4,s=10,k=4
i=5,s=15,k=4
六、数组
●数组是包含多项相同类型数据的一种数据结构,它使用同一个名字命名,再用下标进行分量标识.数组元素的下标从0开始,数组长度为n时,最末元素的下标是 n-1.
定义一维数组
格式:
类型名数组名[元素个数]
例1定义一个包含4个整数的数组a
inta[4];
例2定义一个包含3个双精度数的数组b
doubleb[3];
注意:
C语言中数组的下界从0开始计数。
例如:
a[4]的4个元素分别为a[0]、a[1]、a[2]、a[3]
●数组有一维数组,二维数组,和多维数组.数组中的每一个分量称为一个数组元素。
●一维数组定义格式
数据类型 数组名[数组长度];
//数组长度指数组中可以存放的数据元素的个数,用整数常量表示,也可用代表一个正整数的符号常量表示
例如:
int array[10];
C语言规定只能逐个使用数组元素,而不能一次使用整个数组。
●数值型一维数组的初始化,
用一对大括号将数组的初值括起来。
例如:
int a[6]={10,20,30,40,50,60};
注意:
C语言中,不允许初值个数多于数组定义的长度。
int a[]={10,20,30,40,50,60};
给初值的情况下,数组的长度可省略,系统以初值的个数作为数组的长度。
●对部分元素的初始化,例如:
int a[6]={10,20,30}是对前3个元素的赋值.
例1inta[3]={1,2,3};
此例中a[0]值为1、a[1]值为2、a[2]值为3
例2inta[5]={0};
此例中数组a的全部元素值均为0
例3inta[3]={1,2,3,4};
此例中由于初值个数多于数组元素个数,所以非法。
例4inta[]={0,0,0,0};
此例中省略数组元素个数,初值为4个0
等价于inta[4]={0};
注意:
数组名是一个常量值,不能对它赋值。
例如:
inta[3];
a=5;此语句非法,应改为a[0]=5;
●一维数组应用
例1从键盘上输入10个整数,输出最大数和最小数。
#include
main()
{
inta[10],i,max,min;
printf("请输入10个整数:
\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
max=a[0];