C语言学习笔记,悉心整理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int a,b,c; a=1,b=2,c=3; 或 int a=1,b=2,c=3; 可以用#define 定义常量,例如 #define PI 3.1415926,一般常量用大写表示,变量小写
运算符和表达式
算术运算符和表达式:+ - * / %(模运算) 两个整数相除,结果一定是整数 模运算符(求余)要求两个运算对象必须是整数,结果的符号与被除数(分子)一致。
复合语句 把若干语句用{}括起来就是复合语句
C 程序的三种基本结构 顺序结构 分支结构 循环结构
基本语句
赋值语句 变量=表达式; 左边必须是变量,右边可以如下:变量 1=变量 2=。。。=表达式 不可以:int a=b=c=2;只能 int a=2,b=2,c=2;
复合语句 用{}括起来,只能看成一条语句,而不是多条语句, 从{开始执行,必须执行到}为止
4,char 和 int 可以通用,当把字符赋值给整型变量时,采用符号扩展,把整数赋值给字符变量时,截取整
数的低字节的值。
5,使用 sizeof()函数可以获得变量所占的字节数
常量与变量
变量名用标示符表示,由字母数字下划线组成,必须是字母或者下划线开头。 变量必须先定义在使用: 类型标示符 变量列表; 可采用的定义以及赋初始值的格式:
C 语言程序基础 基本元素
若干函数构成 C 语言程序,必须有一个 main 函数
基本数据类型
整数:int,short int / short, long int / long.
实数:float,double
字符:char
类型
定义符
基本 C 中占的字节数 .NET C 中占的字节数
整数
short
2
2Βιβλιοθήκη Baidu
int
switch 结构 switch (表达式) { case 常量表达式: 语句序列 case 常量表达式: 语句序列 default: 语句序列 } 每一个分支都由一个或多个整数值常量或常量表达式标记。如果某个分支与表达式的值匹配, 则从 该分支开始执行。各分支表达式必须互不相同。如果没有哪一分支能匹配表达式,则执行标记为 default 的分支。default 分支是可选的。如果没有 default 分支也没有其它分 支与表达式的值匹配,则该 switch 语句不执行任何动作。各分支及 default 分支的排列次序是任意的。 注意: 在 switch 语句中,case 的作用只是一个标号,因此,某个分支中的代码执行完后,程序将进入 下一分支继续执行,除非在程序中显式地跳转。跳出 switch 语句最常用的方法是使用 break 语句 与 return 语句。
++i,i++,--i,i— ++i 先将 i 的值加 1,再使用 i i++ 先使用 i 的值,再将 i 的值加 1 例子:k=(i++)+(++i)+(i++) 等效于 i=i+1,k=i+i+i,i=i+1,i=i+1
k=(++i)+(++i)+( ++i) 等效于 i=i+1, i=i+1, i=i+1,k=i+i+i 逗号运算符:“,”优先级最低的符号
else if (表达式)
语句 else if (表达式) 语句 else if (表达式) 语句 else 语句 这种 if 语句序列是编写多路判定最常用的方法。其中的各表 达式将被依次求值,一旦某个表达式结 果为真,则执行与之相关的语句,并终止整个语句序 列的执行。同样,其中各语句既可以是单条语 句,也可以是用花括号括住的复合语句。
break 语旬与 continue 语旬
break 语句可用于从 for、while 与 do-while 等循环中提前退出,就如同从 switch 语句中提前退出二 样。break 语句能使程序从 switch 语句或最内层循环中立即跳出。 continue 语句用于使 for、while 和 do-while 语句开始下一次循环的执行。在 while 与 do-while 语句 中,continue 语句的执行意味着立即执行测试部分;在 for 循环中,则意味着使控制转移到递增循环变 量部分。continue 语句只用于循环语句,不用于 switch 语句。某个循环包含的 switch 语句中的 continue 语句,将导致进入下一次循环。
数据输出
输出字符: putchar()输出一个字符 例如:putchar(‘a’); putchar(‘\n’) 包含在头文件 stdio.h 中
格式化输出及输出格式控制符
printf()函数:(特例,不需包含 stdio.h 头文件) printf(“格式控制字符串”,输出表列); 其中格式控制字符串是用双引号引起来的字符串,用于指定输出格式,包括格 式说明和普通字符两种信息构成。格式说明是以%开头后跟一个格式字符组成 普通字符按原样输出。 输出表列是需要输出的变量或者表达式。 注意: 格式符 %d %o %u %x %c 用于处理整形和字符型数据 %s 用于处理字符串 %f %e %g 用于处理实型数据 允许没有输出表列,即只输出普通字符,但是格式符一定要正确 要输出%要使用%% %与格式符之间可以指定输出项的宽度和小数点后数据的位数,格式为: %m[.n]格式字符。其中域宽为 0 开头的数时,则输出前导 0.
循环结构程序设计
while 循环和 for 循环
while (表达式) {语句}
在 while 循环语句中,首先求表达式的值。如果其值非 0,则执行语句,并再次求该表达式的值。这 一循环过程 一直进行下去,直到该表达式的值为 0 为止,随后继续执行语句后面的部分。 for (表达式 1; 表达式 2; 表达式 3)
是一个"无限"循环语句,这种语句需要借助其它手段(如 break 语句或 return 语句)才能终止执行。
do-while 循环
do-while 循环的语法形式如下: do 语句 while (表达式);
在这一结构中,先执行循环体中的语句部分,然后再求表达式的值。如果表达式的值为真, 则再次 执行语句,依此类推。当表达式的值变为假,则循环终止。
2
4
long
4
4
实数
float
4
4
double
8
8
字符
char
1
1
注意:
1,数据在计算机中的存放是以补码的形式存放,所以计算每个数据类型的取值范围时候要注意。
2,float 的有效位数是 7 位,double 的有效位数是 16 位
3,转义字符:\n \t \b \r \\ \’ \” \ddd \xhh ,转义字符定义一定要用这个形式。
根据定义,在关系表达式或逻辑表达式中,如果关系为真,则表达式的结果值为数值 1;如果为假,则 结果值为数值 0。 逻辑非运算符!的作用是将非 0 操作数转换为 0,将操作数 0 转换为 1。
条件运算 在表达式 expr1 ? expr2 : expr3 中,首先计算 expr1,如果其值不等于 0(为真),则计算 expr2 的 值,并以该值作为条件 表达式的值,否则计算 expr3 的值,并以该值作为条件表达式的值。
{语句} 它等价于下列 while 语句:
表达式 1; while (表达式 2) { 语句 表达式 3; } 与表达式 3 是赋值表达式或函数调用,表达式 2 是关系表达式。这 3 个组成部分中的任何部分都 可以省略,但分号必须保留。如果在 for 语句中省略表达式 1 与表达式 3,它就退化成了 while 循 环语句。如果省略测试条件,即表达式 2,则认为其值永远是真值,因此,下列 for 循环语句: for (;;) {...}
从右至左
* / % 从左至右 + • 从左至右 << >> 从左至右 < <= > >= 从左至右 == != 从左至右 & 从左至右 ^ 从左至右 | 从左至右 && 从左至右 || 从左至右 ?: 从左至右 = += •= *= /= %= &= ^= |= <<= >>= 从右至左 , 从右至左 一元运算符+、 、&与*匕相应的二元运算符+、 、&与*的优先级高。
c 格式符 输出字符,对象可以是字符型也可以是整形 对象为整形时候,先将该整数对 256 求余数,将余数作为 ASCII 码值输 出对应的符号 也可使用%mc,m 足够大时候左边补空格 例如:int a=65,b=321;printf(“%c %c”,a,b); 结果为 A A
s 格式符 输出字符串 %s 按实际输出
位运算
C 语言提供了 6 个位操作运算符。这些运算符只能作用于整型操作数,即只能作用于带符号或无符 号 char、short、int、long 类型:
& 按位与(AND) | 按位或(OR) ^ 按位异或(XOR) << 左移 >> 右移 ~ 按位求反
运算符优先级与求值次序 () [] •> . 从左至右 ! ~ ++ •• + • * (type) sizeof
顺序结构程序设计
C 程序的结构
C 语句:控制语句 if()~else~;switch();{case…};while()~;do~while();for()~;continue;break;return;goto
函数调用语句 例如:printf();
表达式语句 例如:a=10; b=a+10;
空语句 只有一个“;”,用于扩展或者特殊需要
数据输入
字符数据的输入
函数名
输入方式
函数原型
getchar()
有回显,需按回车
stdio.h
getche()
有回显,不需回车
conio.h
getch()
无回显,不需回车
conio.h
scanf()的使用
scanf(“格式控制字符串”,地址列表);
地址:&变量名字
两个格式说明之间无其他符号时候,输入数据时以空格、回车或 TAB 来分隔数据
赋值运算符和表达式:= < 变量 > = < 表达式 > 顺序是自右到左。
复合赋值运算符:+= -= *= /= %= <<= >>= &= ^= |= 以+=为例:a+=b 等效于 a=a+b; 结合顺序也是从右向左
强制类型转换符号
如:(int) x;将该表达式的值强制转换成 int 型 自增、自减:++ --
形式:表达式 1,表达式 2,……,表达式 n 运算顺序,从左向右,最后最右边表达式 n 的值是整个逗号表达式的值 关系表达式及运算符
关系运算,结果只能是“真”或者“假”。
关系运算符 含义
优先级
<
6
<=
6
==
7
>
6
>=
6
!=
7
逻辑运算
逻辑运算符&&与||有一些较为特殊的属性,由&&与||连接的表达式按从左到右的顺序进行求值,并且, 在知道结果值为真或假后立即停止计算。
否则实际输出
%-m.nf 同上 右补 e 格式符
以指数形式输出实数
%e 系统自动给出宽度,13 列,小数 8 位,其中小数位 6 位,小数点前一 位非零数,指数部分 5 位 e+000 形式显示
%m.ne %-m.ne m 为总宽,n 小数位数默认值为 6 g 格式符
输出实数,根据数值的宽度自动选取 f 或者 e 格式中输出宽度较短的, 且不输出无意义的 0
若在格式符之间有其他字符,必须原样输入
格式也可以控制宽度,按自左而右截取,但是不能规定小数位数
scanf()没有%u 格式,整数一般用 d 实数用 f
选择结构程序设计
if-else 语句 if-else 语句用于条件判定,其语法如下所示: if {表达式} 语句 1 else 语句 2 其中 else 部分是可选的。该语句执行时,先计算表达式的值,如果其值为真(即表达式的值 为非 0),则执行语句 1;如果其值为假(即表达式的值为 0),并且该语句包含 else 部分,则执行语句 2。 建议在有 if 语句嵌套的情况下使用花括号。 在 C 语言中我们会经常用到下列结构: if (表达式) 语句
格式符的应用
d 格式符 带符号的十进制整形 %d 按整形数据的实际长度输出 %md 按总域宽 m 位输出,m 足够大时候左边补空格,否则按实际输出 %ld 输出长整形数据吗,也可以使用%mld
o,x,u 格式符 分别以八进制、十六进制、十进制无符号数形式输出对应的整形数据 当输出的对象有符号时候,求出其补码,并将符号作为数据一部分输出。 例如:int a=-1;printf(“%o%u%x”,a,a,a); 16 位系统中输出:177777 65535 ffff 内存中存放形式:16 个 1 32 位系统中为 32 个 1
%ms 占 m 列,若 m 不够字符串宽度则按实际输出,m 大左补空格 %-ms 同上,编程右补空格 %m .ns 占 m 列,左补,若 n>m 则 m 取 n 值,只输出字符串左端的 n 个 %-m .ns 同上 右补空格 f 格式符 %f 按 7 位有效数输出,不管输出的数是否有效 都有 6 位小数 %m.nf 总域宽 m(含小数点),n 为小数位数,m 足够大左补
运算符和表达式
算术运算符和表达式:+ - * / %(模运算) 两个整数相除,结果一定是整数 模运算符(求余)要求两个运算对象必须是整数,结果的符号与被除数(分子)一致。
复合语句 把若干语句用{}括起来就是复合语句
C 程序的三种基本结构 顺序结构 分支结构 循环结构
基本语句
赋值语句 变量=表达式; 左边必须是变量,右边可以如下:变量 1=变量 2=。。。=表达式 不可以:int a=b=c=2;只能 int a=2,b=2,c=2;
复合语句 用{}括起来,只能看成一条语句,而不是多条语句, 从{开始执行,必须执行到}为止
4,char 和 int 可以通用,当把字符赋值给整型变量时,采用符号扩展,把整数赋值给字符变量时,截取整
数的低字节的值。
5,使用 sizeof()函数可以获得变量所占的字节数
常量与变量
变量名用标示符表示,由字母数字下划线组成,必须是字母或者下划线开头。 变量必须先定义在使用: 类型标示符 变量列表; 可采用的定义以及赋初始值的格式:
C 语言程序基础 基本元素
若干函数构成 C 语言程序,必须有一个 main 函数
基本数据类型
整数:int,short int / short, long int / long.
实数:float,double
字符:char
类型
定义符
基本 C 中占的字节数 .NET C 中占的字节数
整数
short
2
2Βιβλιοθήκη Baidu
int
switch 结构 switch (表达式) { case 常量表达式: 语句序列 case 常量表达式: 语句序列 default: 语句序列 } 每一个分支都由一个或多个整数值常量或常量表达式标记。如果某个分支与表达式的值匹配, 则从 该分支开始执行。各分支表达式必须互不相同。如果没有哪一分支能匹配表达式,则执行标记为 default 的分支。default 分支是可选的。如果没有 default 分支也没有其它分 支与表达式的值匹配,则该 switch 语句不执行任何动作。各分支及 default 分支的排列次序是任意的。 注意: 在 switch 语句中,case 的作用只是一个标号,因此,某个分支中的代码执行完后,程序将进入 下一分支继续执行,除非在程序中显式地跳转。跳出 switch 语句最常用的方法是使用 break 语句 与 return 语句。
++i,i++,--i,i— ++i 先将 i 的值加 1,再使用 i i++ 先使用 i 的值,再将 i 的值加 1 例子:k=(i++)+(++i)+(i++) 等效于 i=i+1,k=i+i+i,i=i+1,i=i+1
k=(++i)+(++i)+( ++i) 等效于 i=i+1, i=i+1, i=i+1,k=i+i+i 逗号运算符:“,”优先级最低的符号
else if (表达式)
语句 else if (表达式) 语句 else if (表达式) 语句 else 语句 这种 if 语句序列是编写多路判定最常用的方法。其中的各表 达式将被依次求值,一旦某个表达式结 果为真,则执行与之相关的语句,并终止整个语句序 列的执行。同样,其中各语句既可以是单条语 句,也可以是用花括号括住的复合语句。
break 语旬与 continue 语旬
break 语句可用于从 for、while 与 do-while 等循环中提前退出,就如同从 switch 语句中提前退出二 样。break 语句能使程序从 switch 语句或最内层循环中立即跳出。 continue 语句用于使 for、while 和 do-while 语句开始下一次循环的执行。在 while 与 do-while 语句 中,continue 语句的执行意味着立即执行测试部分;在 for 循环中,则意味着使控制转移到递增循环变 量部分。continue 语句只用于循环语句,不用于 switch 语句。某个循环包含的 switch 语句中的 continue 语句,将导致进入下一次循环。
数据输出
输出字符: putchar()输出一个字符 例如:putchar(‘a’); putchar(‘\n’) 包含在头文件 stdio.h 中
格式化输出及输出格式控制符
printf()函数:(特例,不需包含 stdio.h 头文件) printf(“格式控制字符串”,输出表列); 其中格式控制字符串是用双引号引起来的字符串,用于指定输出格式,包括格 式说明和普通字符两种信息构成。格式说明是以%开头后跟一个格式字符组成 普通字符按原样输出。 输出表列是需要输出的变量或者表达式。 注意: 格式符 %d %o %u %x %c 用于处理整形和字符型数据 %s 用于处理字符串 %f %e %g 用于处理实型数据 允许没有输出表列,即只输出普通字符,但是格式符一定要正确 要输出%要使用%% %与格式符之间可以指定输出项的宽度和小数点后数据的位数,格式为: %m[.n]格式字符。其中域宽为 0 开头的数时,则输出前导 0.
循环结构程序设计
while 循环和 for 循环
while (表达式) {语句}
在 while 循环语句中,首先求表达式的值。如果其值非 0,则执行语句,并再次求该表达式的值。这 一循环过程 一直进行下去,直到该表达式的值为 0 为止,随后继续执行语句后面的部分。 for (表达式 1; 表达式 2; 表达式 3)
是一个"无限"循环语句,这种语句需要借助其它手段(如 break 语句或 return 语句)才能终止执行。
do-while 循环
do-while 循环的语法形式如下: do 语句 while (表达式);
在这一结构中,先执行循环体中的语句部分,然后再求表达式的值。如果表达式的值为真, 则再次 执行语句,依此类推。当表达式的值变为假,则循环终止。
2
4
long
4
4
实数
float
4
4
double
8
8
字符
char
1
1
注意:
1,数据在计算机中的存放是以补码的形式存放,所以计算每个数据类型的取值范围时候要注意。
2,float 的有效位数是 7 位,double 的有效位数是 16 位
3,转义字符:\n \t \b \r \\ \’ \” \ddd \xhh ,转义字符定义一定要用这个形式。
根据定义,在关系表达式或逻辑表达式中,如果关系为真,则表达式的结果值为数值 1;如果为假,则 结果值为数值 0。 逻辑非运算符!的作用是将非 0 操作数转换为 0,将操作数 0 转换为 1。
条件运算 在表达式 expr1 ? expr2 : expr3 中,首先计算 expr1,如果其值不等于 0(为真),则计算 expr2 的 值,并以该值作为条件 表达式的值,否则计算 expr3 的值,并以该值作为条件表达式的值。
{语句} 它等价于下列 while 语句:
表达式 1; while (表达式 2) { 语句 表达式 3; } 与表达式 3 是赋值表达式或函数调用,表达式 2 是关系表达式。这 3 个组成部分中的任何部分都 可以省略,但分号必须保留。如果在 for 语句中省略表达式 1 与表达式 3,它就退化成了 while 循 环语句。如果省略测试条件,即表达式 2,则认为其值永远是真值,因此,下列 for 循环语句: for (;;) {...}
从右至左
* / % 从左至右 + • 从左至右 << >> 从左至右 < <= > >= 从左至右 == != 从左至右 & 从左至右 ^ 从左至右 | 从左至右 && 从左至右 || 从左至右 ?: 从左至右 = += •= *= /= %= &= ^= |= <<= >>= 从右至左 , 从右至左 一元运算符+、 、&与*匕相应的二元运算符+、 、&与*的优先级高。
c 格式符 输出字符,对象可以是字符型也可以是整形 对象为整形时候,先将该整数对 256 求余数,将余数作为 ASCII 码值输 出对应的符号 也可使用%mc,m 足够大时候左边补空格 例如:int a=65,b=321;printf(“%c %c”,a,b); 结果为 A A
s 格式符 输出字符串 %s 按实际输出
位运算
C 语言提供了 6 个位操作运算符。这些运算符只能作用于整型操作数,即只能作用于带符号或无符 号 char、short、int、long 类型:
& 按位与(AND) | 按位或(OR) ^ 按位异或(XOR) << 左移 >> 右移 ~ 按位求反
运算符优先级与求值次序 () [] •> . 从左至右 ! ~ ++ •• + • * (type) sizeof
顺序结构程序设计
C 程序的结构
C 语句:控制语句 if()~else~;switch();{case…};while()~;do~while();for()~;continue;break;return;goto
函数调用语句 例如:printf();
表达式语句 例如:a=10; b=a+10;
空语句 只有一个“;”,用于扩展或者特殊需要
数据输入
字符数据的输入
函数名
输入方式
函数原型
getchar()
有回显,需按回车
stdio.h
getche()
有回显,不需回车
conio.h
getch()
无回显,不需回车
conio.h
scanf()的使用
scanf(“格式控制字符串”,地址列表);
地址:&变量名字
两个格式说明之间无其他符号时候,输入数据时以空格、回车或 TAB 来分隔数据
赋值运算符和表达式:= < 变量 > = < 表达式 > 顺序是自右到左。
复合赋值运算符:+= -= *= /= %= <<= >>= &= ^= |= 以+=为例:a+=b 等效于 a=a+b; 结合顺序也是从右向左
强制类型转换符号
如:(int) x;将该表达式的值强制转换成 int 型 自增、自减:++ --
形式:表达式 1,表达式 2,……,表达式 n 运算顺序,从左向右,最后最右边表达式 n 的值是整个逗号表达式的值 关系表达式及运算符
关系运算,结果只能是“真”或者“假”。
关系运算符 含义
优先级
<
6
<=
6
==
7
>
6
>=
6
!=
7
逻辑运算
逻辑运算符&&与||有一些较为特殊的属性,由&&与||连接的表达式按从左到右的顺序进行求值,并且, 在知道结果值为真或假后立即停止计算。
否则实际输出
%-m.nf 同上 右补 e 格式符
以指数形式输出实数
%e 系统自动给出宽度,13 列,小数 8 位,其中小数位 6 位,小数点前一 位非零数,指数部分 5 位 e+000 形式显示
%m.ne %-m.ne m 为总宽,n 小数位数默认值为 6 g 格式符
输出实数,根据数值的宽度自动选取 f 或者 e 格式中输出宽度较短的, 且不输出无意义的 0
若在格式符之间有其他字符,必须原样输入
格式也可以控制宽度,按自左而右截取,但是不能规定小数位数
scanf()没有%u 格式,整数一般用 d 实数用 f
选择结构程序设计
if-else 语句 if-else 语句用于条件判定,其语法如下所示: if {表达式} 语句 1 else 语句 2 其中 else 部分是可选的。该语句执行时,先计算表达式的值,如果其值为真(即表达式的值 为非 0),则执行语句 1;如果其值为假(即表达式的值为 0),并且该语句包含 else 部分,则执行语句 2。 建议在有 if 语句嵌套的情况下使用花括号。 在 C 语言中我们会经常用到下列结构: if (表达式) 语句
格式符的应用
d 格式符 带符号的十进制整形 %d 按整形数据的实际长度输出 %md 按总域宽 m 位输出,m 足够大时候左边补空格,否则按实际输出 %ld 输出长整形数据吗,也可以使用%mld
o,x,u 格式符 分别以八进制、十六进制、十进制无符号数形式输出对应的整形数据 当输出的对象有符号时候,求出其补码,并将符号作为数据一部分输出。 例如:int a=-1;printf(“%o%u%x”,a,a,a); 16 位系统中输出:177777 65535 ffff 内存中存放形式:16 个 1 32 位系统中为 32 个 1
%ms 占 m 列,若 m 不够字符串宽度则按实际输出,m 大左补空格 %-ms 同上,编程右补空格 %m .ns 占 m 列,左补,若 n>m 则 m 取 n 值,只输出字符串左端的 n 个 %-m .ns 同上 右补空格 f 格式符 %f 按 7 位有效数输出,不管输出的数是否有效 都有 6 位小数 %m.nf 总域宽 m(含小数点),n 为小数位数,m 足够大左补