c语言知识点.docx
《c语言知识点.docx》由会员分享,可在线阅读,更多相关《c语言知识点.docx(58页珍藏版)》请在冰豆网上搜索。
c语言知识点
01C语言基本结构
一、C语言的特点:
1、C语言源程序的基本组成单位是函数;一个C程序可由若干个函数组成,其中必须有且仅有一个以main命名的主函数。
2、C程序的执行总是由main()函数的第一个可执行语句开始,到main()函数的最后一个可执行的语句结束;而其他函数都是在main()函数开始执行以后,通过其他函数的调用才得以运行。
3、用户在C程序中需要调用某个库函数时,必须用#include编译预处理命令将描述该库函数的头文件包含进去。
二、C程序的书写格式:
1、语句可分开放在任意多行内;
如:
printf("ToC,");
printf("ornottoC:
");
与printf("ToC,ornottoC:
");是等价的
2、一行中可以有若干个语句;
如:
a=123;b=345;
3、每个语句和数据定义的最后必须有一个分号;
三、C语言程序的运行:
1、编译(Compile):
将C源程序文件翻译成能被计算机识别的二进制形式的"目标"文件。
2、建造(Bulid):
将目标文件、系统库函数等文件结合起来,生成可执行的EXE文件。
C语言程序示例:
显示"Hello"
#include
main()
{
printf("Hello\n");
}
说明:
#include是必不可少的,它包含了C语言标准输入输出库的相关信息;
printf函数来自"标准输入输出库",可以产生格式化输出;
\n告诉printf函数执行完信息显示后要进行换行操作;
{}来标出main()函数的起始和结束。
02数据类型
一、标识符、常量和变量
1、标识符:
标识符是起标识作用的一类符号;一般用来标识用户或系统定义的变量名、符号常量名、函数名、类型名等。
(1)标识符由字母、数字、下划线("_")组成,第一个字符必须是字母或下划线。
(2)C语言区分大小写字母;如sum和SUM就是两个不同的标识符。
(3)用户自己定义的标识符不得与关键字同名;
2、常量:
指在程序中已知的在程序中直接写出的数值。
在程序运行过程中,常量的值不允许被改变。
直接常量:
用数值表示的量,如23,'A',"awq"等;
符号常量:
用标识符表示的常量;符号常量在使用前必须加以定义;定义的格式:
#define标识符常量
其中:
#define是一条预处理命令,其功能是把该标识符定义为其后的常量值。
如:
计算半径r为10时圆面积
#definepi3.1415926
#include
main()
{
doublearea,r;
r=10.0;
area=pi*r*r;
printf("Area=%lf",area);
}
3、变量:
在程序运行过程中,其值可以被改变的量
(1)变量的三要素:
变量名、数据类型和变量的值。
(2)C语言规定:
程序中用到的变量,必须先定义后使用;
(3)变量定义的格式:
<类型名><变量名表>
如:
inta,b;/*int表明所定义变量储存的数值为整数*/
(4)通常,对变量的定义放在函数体的开头,也可以放在函数的外部或复合语句的开头。
(5)C语言允许在定义变量的同时对变量进行初始化;
如:
inta=3;/*定义a为整形变量,初值为3*/
二、简单数据类型
在C语言程序中,不同数据类型的数据,在内存中所需的存储空间的大小是不同的,其能够支持的运算、相应的运算规则也是不同的。
1、基本类型:
(1)整型:
●整型常量:
即整型常数;
■十进制表示法:
如123、-345;
■八进制表示法:
以0开头的数,如0126;
■十六进制表示法:
前缀为0x或0X,其数码取值为0~9,A~F或a~f;
●整型变量包括:
基本型(int)、短整型(shortint或short)、长整型(longint或long)、和无符号型(unsignedint、unsignedshort、unsignedlong)。
●整型变量的定义:
整型变量用来存放整数的,在使用之前使用标识符加以定义;
如inta,b;/*定义a、b为整型变量*/
unsignedshortc,d;/*定义c、d为无符号短整型变量*/
longab,ef;/*定义ab、ef为长整型变量*/
【例】整型变量的定义与使用:
#include
main()
{
inta,b,c,d;
unsignedu;
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf("a+u=%d,b+u=%d\n",c,d);
}
(2)实型(单精度、双精度):
●实型数据类型分为:
单精度型(float)、双精度型(double)和长双精度型(longdouble);
●实型常量:
■十进制小数形式:
由数字和小数点组成,如0.123、.23、23.0
■指数形式:
由尾数、e(E)和指数组成,如123e2(等于123*102);
●实型变量的定义:
实型变量用来存放实型数据的,在使用前必须使用标识符加以定义;
如floatx,y;/*定义x、y为单精度实型变量*/
doublez;/*定义z为双精度实型变量*/
(3)字符型:
●字符常量
■普通字符常量是由单引号括起来的一个字符;如'a'、'6'、'D'等;
字符常量的特点:
1)字符常量只能用单引号括起来,不能用双引号或其它括号。
2)字符常量只能是单个字符。
3)字符可以是字符集中任意字符。
但数字被定义为字符型之后就不能参与数值运算。
如'5'和5是不同的,'5'是字符常量,不能以5为值参加数值运算。
■转义字符:
以反斜杠"\"后跟一个或几个字符用来表示那些用一般字符不便于表示的控制代码。
转义字符
转义字符的意义
ASCII代码
\n
回车换行
10
\t
横向跳到下一制表位置
9
\b
退格
8
\r
回车
13
\f
走纸换页
12
\\
反斜线符"\"
92
\'
单引号符
39
\"
双引号符
34
\a
鸣铃
7
\ddd
1~3位八进制数所代表的字符
\xhh
1~2位十六进制数所代表的字符
【例】转义字符的使用。
#include
main()
{
inta,b,c;
a=5;b=6;c=7;
printf("abc\tde\rf\n");
printf("hijk\tL\bM\n");
}
●字符变量:
用字符类型标识符char来定义;字符变量占一个字节的存储单元,只能存放一个字符;
■定义格式:
char<变量列表名>;
如charc1,c2;
■字符变量赋值:
字符变量只能存放一个字符;
如c1='1';c2='d';
【例】向字符变量赋以整数。
#include
main()
{
chara,b;
a=120;/*x的ASCII码值*/
b=121;/*y的ASCII码值*/
printf("%c,%c\n",a,b);/*输出字符x、y*/
printf("%d,%d\n",a,b);/*输出字符的ASCII值 */
}
【例】字符的大小写转换
#include
main()
{
chara,b;
a='m';b='n';
a=a-32;/*A的ASCII码值*/
b=b-32;/*B的ASCII码值*/
printf("%c,%c\n",a,b);/*输出A、B字符*/
printf("%d,%d\n",a,b);/*输出A、B的ASCII码值*/
}
字符串常量:
是一对双引号括起来的字符序列;
如"a"、""、"123"、"SDCF"等都是合法的字符串常量;
字符串常量和字符常量的区别:
1)字符常量由单引号括起来,字符串常量由双引号括起来;
2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符;
3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量;
4)字符常量占一个字节的内存空间。
字符串常量占的内存字节数等于字符串中字节数加1。
增加的一个字节中存放字符"\0"(ASCII码为0)。
这是字符串结束的标志;
如:
字符串"Cprogram"在内存中所占的字节为:
C
p
r
o
g
r
a
m
\0
字符常量'a'和字符串常量"a"虽然都只有一个字符,但在内存中的情况是不同的。
'a'在内存中占一个字节,可表示为:
a
"a"在内存中占二个字节,可表示为:
a
\0
03运算符与表达式
1、算术运算符和表达式
+:
加法运算符,如3+5,结果为8;
-:
减法运算符,如5-3,结果为2;
*:
乘法运算符,如5*8,结果为40;
/:
除法运算符,如3/6;参与运算量均为整型时,结果也为整型,舍去小数;若运算量中有一个是实型,则结果为双精度实型。
%:
模运算符,也称"取余运算符",用于计算两数相除后的余数,如5%3=2;
2、赋值运算符和赋值表达式
●赋值运算符:
"=",其作用是将一个表达式的值赋给一个变量;
其一般形式为:
变量=表达式
如:
x=a+b;
●赋值表达式的功能是计算表达式的值再赋予左边的变量。
赋值运算符具有右结合性。
因此a=b=c=5可理解为a=(b=(c=5));
●复合赋值运算符:
+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=
构成复合赋值表达式的一般形式为:
变量双目运算符=表达式
它等价于:
变量=变量运算符表达式
如:
a+=5等价于a=a+5
x*=y+7等价于x=x*(y+7)
r%=p等价于r=r%p
3、类型转换
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。
具体规定如下:
1)实型赋予整型,舍去小数部分。
前面的例子已经说明了这种情况。
2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
3)字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。
整型赋予字符型,只把低八位赋予字符量。
4、自增、自减运算符:
●自增运算符:
"++",功能是将变量的值加1;
●自减运算符:
"--",功能是将变量的值减1;
可有以下几种形式:
++ii自增1后再参与其它运算。
--ii自减1后再参与其它运算。
i++i参与运算后,i的值再自增1。
i--i参与运算后,i的值再自减1。
注:
(1)"++"、"--"的操作对象只能是变量;
(2)"++"、"--"运算优先级相同,且结合方向自右向左;-i++应理解为-(i++),
【例】自增、自减运算、
#include
main()
{
inti=8;
printf("%d\n",++i);/*i先加1,再输出i,输出结果为9*/
printf("%d\n",--i);/*i先减1,再输出i,结果为8*/
printf("%d\n",i++);/*先输出i,输出结果为8,i再加1,*/
printf("%d\n",i--);/*先输出i,输出结果为9,i再减1,*/
printf("%d\n",-i++);/*先加输出-i,输出结果为-8,i再加1*/
printf("%d\n",-i--);/*先输出-i,输出结果为-9,i再减1*/
}
5、求字节运算符
计算表达式的结果所占字节数或某种数据类型的定义字节数。
一般格式:
sizeof(数据类型标识符)或sizeof(表达式)
如:
sizeof(float)的值为4,占4个字节;
Sizeof(2*3)的值为2,占2个字节;
6、关系运算符和关系表达式
●关系运算符:
"<"(小于)、"<="(小于等于)、">"(大于)、">="(大于等于)、"=="(等于)、"!
="(不等于)
●关系表达式:
若关系表达式成立,其值为"真",否则为"假";在C语言中,用0代表"假",用非零值(常用1)代表"真";
7、逻辑运算符和逻辑表达式:
●逻辑运算符:
"!
"(非)、"&&"(与)、"||"(或);运算优先级:
!
>&&>||
●逻辑表达式:
用逻辑运算符将表达式连接起来的式子;逻辑表达式的结果仍然是逻辑量("真"或"假")
8、条件运算符:
一般格式:
<表达式1>?
<表达式2>:
<表达式3>
先计算表达式1,若表达式1的值为真,则计算表达式2的值,且表达式2的值为整个条件表达式的值;否则,计算表达式3的值,且表达式3的值即为整个条件表达式的值。
9、逗号运算符和逗号表达式
●逗号运算符:
","作为运算符,其功能是将多个表达式组成一个表达式;
一般形式:
表达式1,表达式2,…,表达式n
求解过程:
先计算表达式1,再计算表达式2,依此计算表达式n,最终,表达式n的值即为整个表达式的值。
04顺序结构
一、概述:
顺序语句按照语法形式分为:
表达式语句、函数调用语句、复合语句、流程控制语句和空语句。
1、表达式语句:
语法格式:
表达式;
如:
a+4;
其中赋值语句为最典型的表达式语句,如:
a=5;
a=b+3;
特别提示:
分号(;)是表达式语句中不可缺少的一部分。
2、函数调用语句:
如:
printf("Iamastudent!
");
其中:
printf()为系统提供的函数,用于显示信息。
3、复合语句:
所谓"复合语句"即由一对"{}"括起来的一组语句,也称"块语句"或"分程序"。
一般形式为:
{
语句1
语句2
…..
语句n
}
如:
{
i++;
j=a+3;
printf("%d,j=",i,j);
}
特别提示:
复合语句中的最后一条语句的分号不得缺少;复合语句的"}"之后不得有分号。
二、数据的输入输出
C语言提供了一些输入输出函数,如printf()和scanf(),在程序中调用这些输入输出函数时,必须将标准输入输出头文件"stdio.h"包含到用户所编写的源程序中。
如:
#include
其中:
#include命令一般写在程序的开头位置。
1、格式输入输出
1、格式输出函数printf()
(1)一般格式:
printf(格式字符串,输出列表)
其中:
"格式字符串"包括"输出字符"和"格式控制字符"(由%和格式字符组成,指定输出项的输出格式)。
·d格式符:
用于输出十进制整数;
%d:
以十进制形式显示输出变量的值;
%5d:
以十进制形式显示变量的值,且至少占用5个字符的空间,若不够5位数字,则左侧补空格;
%-5d:
以十进制形式显示变量的值,且至少占用5个字符的空间,左对齐;
%5.3d:
以十进制形式显示变量的值,且至少占用5个字符的空间并至少有3位数字,若不够3位数字,则左侧补0;
如:
#include
main()
{
inti;
i=40;
printf("%d\n",i);
printf("%5d\n",i);
printf("%-5d\n",i);
printf("%5.3d\n",i);
}
·f格式符:
用于以小数形式输出实数;
%10.3f:
以定点十进制形式显示变量的值,且总共用10个字符,其中,整数位6位,小数位3位,小数点1位;
如:
#include
main()
{
floatx;
x=839.21f;
printf("%10.3f\n",x);
}
·c格式符:
用于输出一个字符;
如:
x="a",y="b",
则printf(%c%c",x,y)的输出结果为:
ab
若变量的值为整数,则输出该整数值为ASCII码的字符:
如x=65,y=98,则printf("%c,%c",x,y)的输出结果为:
A,b;
同理,一个字符的数据也可以以整数的形式输出;
如x='a',y='B',则printf("%d,%d",x,y)的输出结果为:
97,66
·s格式符:
用于输出一个字符串。
如:
printf("%s","Iamastudent!
")
·e,E格式符:
用于以指数形式输出实数。
如:
printf("%e",123.456),则输出结果为:
1.234560e+002;
·g,G格式符:
用于输出实数,根据数值的大小自动选择f格式或e格式。
2、格式输入函数scanf()
(1)一般格式:
scanf(格式字符串,变量地址表)
其中:
格式字符串使用双引号括起来的字符串,包括"普通字符"(按原样输入)、"格式控制字符"(由%和格式字符组成,用来标定输入数据的格式)。
变量地址表是由若干个变量地址组成的表列,可以是变量的地址,也可以使字符串的首地址。
·d格式:
用于输入十进制整数;
如:
scanf("%d,%d",&x,&y);则输入格式为:
123,3456
·u格式:
用于输入十进制无符号整数;
·f格式:
用于输入以小数形式的实数;
如:
scanf("%f,%f",&x,&y);则输入格式为:
123.23,23.456
·c格式:
用于输入一个字符;
如:
scanf("%c,%c",&x,&y);则输入格式为:
a,b
·s格式:
用于输入一个字符串;
如:
scanf("%s",a);假定a为字符数组,则输入格式为:
abcdef
注:
输入的字符串中间不能包含空格。
特别说明:
·对于变量,"&"加变量名即为该变量的地址;如:
&a、&b等分别表示变量a和变量b的地址;
·对于字符串数组或字符指针型变量,数组名和指针变量名本身即为其地址;
·可以在%和格式字符之间加表示位数的数字;如:
scanf("%5s",p);表示只能输入5个字符给字符串指针p;
05选择结构
一、if语句:
一般格式:
if(表达式)语句;
表示:
当"表达式"成立时,则执行"语句";否则跳过"语句";
如:
if(a>b)printf("a>b!
");
例:
若用户输入的数为3的倍数,则显示"OK"
#include
main()
{
inta;
scanf("%d",&a);
if(a%3==0)printf("OK");
}
二、if-else语句:
一般格式:
if(表达式)
语句1;
else
语句2;
例:
给出用户输入的两个整数的较大者
#include
main()
{
inta,b;
scanf("%d,%d",&a,&b);
if(a>b)
printf("themax=%d",a);
else
printf("themax=%d",b);
}
三、if语句的嵌套
1、if子句中嵌套:
·if(表达式1)
if(表达式2)语句1;
else语句2;
else语句3;
·if(表达式1)
{if(表达式2)语句1;}
Else语句2;
2、else子句中嵌套
·if(表达式1)语句1;
else
if(表达式2)语句2;
else语句3;
·if(表达式1)语句1;
else
if(表达式2)语句2;
3、嵌套一般格式:
if(表达式1)语句1;
elseif(表达式2)语句2;
elseif(表达式3)语句3;
…
elseif(表达式n)语句n;
else语句n+1;
例:
将用户输入的成绩按以下规则转换成等级成绩:
分数:
90~100等级:
优
分数:
80~89等级:
良
分数:
70~79等级:
中
分数:
60~69等级:
及格
分数:
60以下等级:
不及格
#include
main()
{
intd;
printf("输入分数:
");
scanf("%d",&d);
if(d>=90)printf("优");
elseif(d>=80)printf("良");
elseif(d>=70)printf("中");
elseif(d>=60)printf("及格");
elseprintf("不及格");
}
四、条件语句:
表达式1?
表达式2:
表达式3
执行的过程:
若表达式1的值为非0时,该条件语句的职位表达式2,否则为表达式3;
例:
求一个整数的绝对值
#include
main()
{
inti,absi;
scanf("%d",&i);
absi=i>0?
i:
-i;
printf("%d绝对值是%d\n",i,absi);
}
五、switch语句
switch(表达式)
{
case常量表达式1:
语句1;
break;
case常量表达式2:
语句2;
break;
…
case常量表达式n:
语句n;
break;
default:
语句n+1;
}
例:
商店卖货物,每一件3.5元,按购买的数量给与优惠:
购买100件,优惠5%;
购买200件以上,优惠6%;
购买300件以上,优惠8%;
购买400件以上,优惠10%;
购买500件以上,优惠15%;
#include
main()
{
intn;
floatp,price;
scanf("%d",&n);
switch(n/100)
{
case1:
p=0.05;
break;
case2:
p=0.06;
break;
case3:
p=0.08;
break;
case4:
p=0.10;
break;
case5:
p=0.15;
break;
}
price=3.5*n*(1-p);
printf("%应付款=%7.2f\n",price);
}
06循环结构
一、if语句:
一般格式:
if(表达式)语句;
表示:
当"表达式"成立时,则执行"语句";否则跳过"