二级C语言讲义.docx
《二级C语言讲义.docx》由会员分享,可在线阅读,更多相关《二级C语言讲义.docx(22页珍藏版)》请在冰豆网上搜索。
![二级C语言讲义.docx](https://file1.bdocx.com/fileroot1/2022-12/12/34512bce-bd25-4915-8569-c11aa8f349af/34512bce-bd25-4915-8569-c11aa8f349af1.gif)
二级C语言讲义
二级C语言讲义
第1章C程序设计基本概念
§1.1程序和程序设计
考点01:
C语言概述
C语言的原型是60语言,由B语言演变而来,1978年正式发表。
C语言是一种面向过程的语言。
早期的C语言主要是用于系统,现在在各类大、中、小和微型计算机上得到了广泛的使用。
考点02:
C语言的特点
1.C语言的主要特点
◆简洁紧凑、灵活方便
◆共有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。
◆运算符丰富
◆运算符包含的范围很广泛,共有34种运算符。
C语言把括号、赋值、强制类型转换等都作为运算符处理。
◆数据结构丰富
◆整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,能用来实现各种复杂的数据类型的运算。
引入了指针概念,使程序效率更高。
◆C语言是结构式语言
◆用函数作为程序模块,每个函数完成独立的功能来实现程序的模块化。
◆语法限制不太严格、程序设计自由度大。
◆一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误,而C语言允许程序编写者有较大的自由度。
◆C语言允许直接访问物理地址,可以直接对硬件进行操作,属于中级语言
◆能够像汇编语言一样对位、字节和地址进行操作,而这三者是C语言最基本的工作单元,因此既具有高级语言的功能,又具有低级语言的许多功能,可以用来编写系统软件。
◆C语言程序生成代码质量高,程序执行效率高。
◆C语言适用范围大,可移植性好。
2.版本C、C、、、等。
C是的基础,它们是兼容的。
考点03:
程序设计的内容
1.基本步骤
确定数据结构、确定算法、编码(编程)、在计算机上运行程序、整理并写出文档资料。
2.C语言的基本结构
<>/*文件包含命令行*/
()/*主函数*/
{
;/*定义变量*/
46100;/*变量初始化*/
;/*求两数之和*/
("!
\n");/*输出两数之和*/
}
1)程序一般用小写字母书写,严格区分大小写。
书写格式自由,一行可以写几个语句,一个语句可以写在几行上。
*2)一个C语言源程序可以由一个或多个源文件组成,一个源程序不论由多少文件组成,都有且只能有一个(),称主函数。
注意:
⑴C程序是由函数()构成的,函数是C程序的基本单位。
⑵函数分为:
系统提供的库函数,用户定义的函数。
*3)C程序的执行总是先从主函数开始,而不论主函数在整个程序中的位置。
4)函数体必须在{}之间,函数前面部分为声明(定义)部分,后面为执行部分。
5)每个语句的结尾必须要有;作为终止符。
6)可以在语句旁边用/*……*/进行注释,但/与*之间不能空格,且/*与*/之间不能再插入/**/。
注释内容可以是英文或中文。
*7)C语言本身没有输入输出语句,有关操作都是通过调用库函数和来完成。
8)低一层次的语句或说明可比高一层次的缩进若干格书写。
§1.2算法
考点04:
算法及其特征
开始
1.概念:
任何解决问题的过程都是由一定的步骤组成的,所以把解决问题
确定的方法和有限的步骤称作为算法。
程序=数据结构+算法0=>s
2.简单算法示例
【例1-2】求1+2+3+……+100=?
1=>i
S1:
0S2:
1S3:
S4:
1
S5:
如果i不大于100,则重复执行步骤3,否则算法结束。
i<=100
()真
{>s
0;
(1<=100)1=>i
;
("\n");
}输出s
运行结果为:
5050结束
*3.特点:
有穷性、确定性、可行性(有效性)、有零个或多个输入、有一个或多个输出。
4.表示方法
(1)
流程图:
开始或终止框、输入输出框、判断框、处理框、流程
线、连接点、注释框。
(2)伪代码
(3)计算机语言-C语言
考点05:
算法的类型
1.基本类型
1)数值算法:
常用于科学计算,如求方程的根等。
2)非数值算法:
广泛用于各种数据的数据处理,如事务管理、图书检索、人事管理等。
2.基本构成
1)结构:
顺序结构、选择(分支)结构、循环(重复)结构。
2)原操作:
输入、输出、表达式求值、变量赋值等。
§1.3结构化程序设计和模块化结构
考点06:
结构化程序
1.顺序结构
顺序结构是由一组顺序执行的程序块所组成的。
2.选择结构
选择结构是根据分支条件的取值来决定程序执行的走向。
3.循环结构
循环结构是一种对某一处理块反复执行指定次数的结构。
考点07:
模块化结构
C语言是一种结构化程序设计语言,它提供了三种基本结构的语句;提供了定义“函数”的功能,在C语言中没有子程序的概念,它提供的函数可以完成子程序的所以功能;C语言允许对函数单独进行编译,从而可以实现模块化。
C语言的工作界面及上机操作
启动2.0:
双击快捷方式或启动,键入\↙↙或单击开始菜单→运行→c:
\\。
1.菜单栏F10
(文件):
(加载文件)、(选择文件)、(新建文件)、(保存文件)、(另存为)、(选择指定目录下的文件)、(改变默认打开的文件目录)、(暂时回到)、(退出)。
(编辑):
(F6)从信息窗口回到编辑窗口。
可清除错误白线提示。
(运行):
(运行)、(程序重启)、(运行到光标处)、(跟踪)、(单步执行)、(用户屏幕)。
(编译):
生成目标文件、可执行文件等。
(项目):
由多个文件生成一个可执行文件。
(选项):
设置工作环境。
(调试):
。
在调试过程中采用给某些变量赋新值来寻找错误。
(断点及监视表达式):
。
增加监视的变量,观察语句执行过程中变量值的变化。
注意默认在C盘根目录下,需要设置其他目录只需将其拷贝至该目录下,保留C盘的。
2.状态栏目:
光标位置、文件名等。
3.信息窗口:
显示提示信息。
4.功能键提示信息
F1:
帮助
F2:
保存文件
F3:
打开文件
F4:
运行到光标处
F5:
隐藏信息窗口
F6:
转换编辑与信息窗口
F7:
单步跟踪程序执行
F8:
单步跟踪程序执行但不进入被调用的子函数中
F9:
生成目标文件但不运行
F10:
打开菜单栏。
3:
选择文件、5:
显示运行结果、7:
增加监视的表达式、9:
运行程序。
注意:
⑴新建文件可在进入2.0时直接或按两次,新建文件不要在原有文件上修改,此时运行结果可能发生错误。
⑵除了运行显示图形的程序,其他均需要通过5来显示运行结果。
5.C程序的生成过程:
编辑→编译→连接→运行。
C编译程序程序
第2章C程序设计的初步认识
§2.1标识符、常量和变量
考点01:
标识符
1.概念:
用于标识变量、函数、数组、文件等的一串字符称为标识符。
2.规定
a)必须由英文字母、数字或下划线组成,且首字符只能是英文字母或下划线。
b)C程序中区别大、小写字母。
c)禁止使用关键字作为标识符。
3.关键字:
又称保留字,是编译系统预先定义的一些具有特定含义的标识符,共32个(数据类型12个、控制语句12个、存储类型4个、其它4个)。
预定义标识符虽然不属于关键字,但为了避免混乱,建议不使用它们作标识符。
注意:
C程序允许32个字符的标识符,但建议不超过8个字符。
二、基本数据类型
1.算法处理的对象是数据,而数据是以某种特定的形式出现,在C语言中,数据有常量、变量,一般它们都有一定的数据类型。
整型()
字符型()
实型(、)
枚举型()
数组类型
构造类型结构体类型()
共用(联合)体类型()
指针类型
空类型()
2.常量与变量
a)常量:
在程序运行过程中其值不能改变的量称为常量。
符号常量是在程序中指定用一个符号代表一个常量。
注意:
⑴符号常量必须由宏定义命令来定义,符号常量修改方便、不易出错。
⑵习惯上符号常量名用大写,变量名用小写。
b)变量:
在程序运行过程中其值能改变的量称为变量。
一个变量在内存中占据一定的存储单元,在存储单元中存放该变量的值。
c)变量说明与变量赋值(变量初始化):
变量说明格式为:
类型说明符变量表列变量赋值格式为:
变量名=表达式
注意:
⑴表达式可以是:
常量、变量、算术表达式、赋值表达式。
⑵允许在一个类型标识符后说明多个相同类型的变量,各变量名之间用逗号间隔。
但不能使用变量=变量=表达式;,如7;,只能是77;或;7;。
⑶变量说明必须放在变量使用之前,一般在函数体的开头部分;变量必须先定义后使用。
⑷“=”左侧必须是变量,如7=9是错误的。
3.整型数据
(1)整型常量
按进制分类:
λ十进制整数:
非0开头(除0),如123、-123、8、0、-5、30000等。
λ八进制整数:
0开头,数字串只能含有0~7,如056、-0111等。
056=5×81+6×80=46。
λ十六进制整数:
0x或0X开头,数字串只能含有0~9及a、b、c、d、e、f(A、B、C、D、E、F)。
如0x123、0X3A、-0x2e等。
0X3A=3×161+10×160=58。
(2)整型变量
类型说明符所占位数(存储字节)数的范围
基本型 16
(2)-32768(-215)~32767(215-1)
短整型() 16
(2) -32768(-215)~32767(215-1)
长整型() 32(4)-2147483648(-231)~2147483647(231-1)
无符号型 16
(2) 0~65535(216-1)
16
(2) 0~65535(216-1)
32(4)0~4294967295(232-1)
注意:
所占位数(存储字节)是由机器()的字长决定的,16位机字长为8。
(3)存放方式
整型数据在内存中以二进制方式存放,最高位为符号位,0为正、1为负,并以补码表示。
λ对于正数,其补码与原码相同。
λ对于负数,其补码是将该数的绝对值的二进制形式按位取反再加1。
如-10的补码:
10的原码0000000000001010
取反1111111111110101
加11111111111110110→-10的补码
λ二进制转换成十进制的负整数:
取反转换成十进制整数取负值再减1。
如1111111111111110:
取反0000000000000001→1→-1减1→十进制负整数-2。
λ十进制转换成八进制:
十进制每3位对应于八进制1位。
如-4→0177774即
1111111111111100→177774;负整数()加65536再转换成八进制即可。
λ十进制转换成十六进制:
十进制每4位对应于十六进制1位。
如-4→0即
1111111111111100→fffc;负整数()加65536再转换成十六进制即可。
(4)数据溢出
当向变量赋的值超出该整型变量的范围即溢出,溢出后会给出错误的结果。
【例2-1】:
()
{;
32767;(32768;)
1;(1;)
("\n");}
运行结果为:
3276732768(-32768,32767)
注意:
⑴如果需要输出正确的结果,可以使用长整型来接收超过基本(短)整型变量范围的数值。
⑵当基本(短)整型变量数值>32767,则该数值减65536直到在-32768~32767为止;当基本(短)整型变量数值<-32767,则该数值加65536直到在-32768~32767为止。
4.实型数据(浮点数)
(1)实型常量
λ十进制小数形式:
由数字加小数点组成(必须有小数点),如100.5、-123.、.123、0.0。
λ指数形式:
如123e3、1.23E5,字母e(E)之前必须有数字,后面必须为整数。
(2)实型变量
类型说明符所占位数(存储字节)数的范围
单精度 32(4)10-37~1038
双精度 64(8) 10-307~10308
长双精度 128(16) 10-4931~104932
注意:
不论单精度、双精度均输出小数点后6位,不足补0。
指数形式为(E)±。
(3)舍入误差
由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效数位以外的数字将被舍去,由此可能产生误差。
单精度有效位是7位,双精度有效位是16位。
【例2-2】:
()
{111111.111;(11111111111111.1111;)
("\n");(("\n");)}
运行结果为:
111111.109375(1.1111105)(11111111111111.111300(1.1111113))
(4)数据溢出
当向变量赋的值超出该实型变量的范围即溢出,溢出后会给出错误的提示。
【例2-3】:
()
{1.111111E40;
("\n");}
运行结果为:
5.字符型数据
(1)字符(串)常量:
λ字符:
用''括起来的一个字符,如'A'、'a'等。
注意:
字符常量只能且必须包含一个字符,空格也可以,但必须写成''。
【例2-4】:
()
{c123;
c1='a'2=9731-32;
("\"123123);}
运行结果为:
97,97,65
λ字符串:
用""括起来的一串字符,如"A"、""、""(空串)等。
注意:
字符串常量结尾系统自动加一个结束标志'\0',字符串常量所占字节数为字符数加1。
(2)转义字符常量:
又称反斜线字符,总是以一个\跟一个特定的字符来代表某一特定的字符,这些字符也必须括在''内,如'\n'代表换行、'\101'、'\x41'均代表'A'。
注意:
⑴每个转义字符只能看作一个字符。
⑵转义字符\表示1-3位八进制数、\表示1-2位十六进制数。
例:
已知字母A的码为十进制数65,且c为字符型,则执行语句'A'+'6'-'3';后中的值为。
A)DB)67C)不确定的值D)C
【例2-5】:
()
{("□□c\t□\\\\n");/*□表示空格*/
("\376");}
运行结果为:
a□□□□□□□
■
说明:
在第一行输出□□c,\t横向跳格至第9格,输出□,\r使输出位置移至本行首,输出
a,\t横向跳格至第9列(c清除),输出Y,\b退一格(Y清除),输出=,\n换行,输出■。
(3)字符变量:
类型说明符所占字节数的范围
1-128~127
注意:
字符变量在内存中占1个字节,存放的是字符的代码值,可以作为整型来处理,
如'A'的值为65、'a'的值为97、空格字符的值为32,所以可以进行算术运算。
三、运算符与表达式
表达式:
由常量、变量、函数等运算对象和运算符组成的式子。
运算符:
运算符有优先级,高的先执行,同级的由结合规则决定。
从左到右结合:
运算对象与左边运算符相结合,如510。
从右到左结合:
运算对象与右边运算符相结合,如7。
1.算术运算符与算术表达式(从左到右)
(1)单目(表示符号):
正号“+”、负号“-”。
(2)双目:
+、-、*、/、%(模)。
例:
若有代数式
,则不正确的C语言表达式为。
A)*e*3B)3*a*C)3*a**cD)a**3
注意:
⑴整型/整型时,小数点后的数一律舍去,如13/5为2、5/13为0、7/3*3的结果为6。
⑵模运算是整除取余数,运算符两侧必须都是整型,计算结果的符号与第一个数的符号相同,如-5%3为-2、-53为-2、53为2。
2.自增自减运算符(单目)(优先级高于算术,右结合)(常用于循环结构)
(1)自增:
→先加1再使用,相当于先执行1;再执行运算;→先使用再加1,相当于先执行运算再执行1;。
(2)自减:
--i→先减1再使用,相当于先执行-1;再执行运算;i--→先使用再减1,相当于先执行运算再执行1;。
注意:
自增自减运算符只能用于变量(整型、实型、字符型、指针型),不能用于常量或表达式。
-等价于-()。
【例2-6】:
()
{3;
()+()+();(()+()+();)(()+()+();)
("\n");}
运行结果为:
69(618)(615)
3.赋值运算符与赋值表达式(优先级低于算术,右结合)
(1)赋值运算符:
“=”是将“=”右侧的数值赋值给左侧的变量。
(2)赋值表达式:
变量名=表达式
注意:
⑴赋值运算符两侧数据类型不一致,则运算结果以“=”左侧的数据类型为准。
⑵赋值表达式后面加上“;”便构成了赋值语句。
(3)复合赋值运算符(双目)
λ加赋值、-=减赋值、*=乘赋值、除赋值、模赋值。
λ按位与赋值、按位或赋值、^=按位异或赋值、<<=位左移赋值、>>=位右移赋值。
【例2-7】:
()
{6;
*a;
("\n");}
运行结果为:
60
4.关系运算符与关系表达式(优先级低于算术,左结合,高于赋值)(用于选择或循环结构)
(1)关系运算符:
<小于、<=小于或等于、>大于、>=大于或等于、等于、不等于。
(2)关系表达式:
λ格式:
表达式关系运算符表达式。
λ结果:
逻辑值1(关系式成立)或0(关系式不成立)。
例:
若希望当A为奇数时,表达式值为“真”,偶数时为“假”,则不满足要求的表达式是()。
A)21B)!
(20)C)!
(2)D)2
5.逻辑运算符与逻辑表达式(优先级低于关系,左结合,!
除外)(用于选择或循环结构)
(1)逻辑运算符:
!
非(单目)、与(双目)、||或(双目)。
(2)逻辑表达式:
λ格式:
表达式逻辑运算符表达式。
λ结果:
逻辑值1(真)或0(假)。
例:
判断类型数据c1是否为大写字母的正确表达式是()。
A)'A'<1<='Z'B)(c1>='A')&(c1<='Z')
C)('A'<1)('Z'>1)D)(c1>='A')(c1<='Z')
【例2-8】:
()
{123422;
(>b)(>d);
("\n");}
运行结果为:
1234020
注意:
⑴!
取相反值,非0表达式值为0、0值为1,两侧表达式均为非0值才为1、否则为0,||只要有一个表达式值为非0值就为1,否则为0。
⑵求值短路:
当左侧表达式为0则不继续计算右侧表达式直接给结果0,当||左侧表达式为非0则不继续计算右侧表达式直接给结果1。
6.逗号运算符与逗号表达式(优先级最低,左结合)
(1)格式:
表达式1,表达式2,……,表达式n。
(2)结果:
依次计算各表达式的值,最后一个表达式的值为整个表达式的值。
注意:
与间隔符区分开,如("",());语句中的,是间隔 符。
例:
设均为类型,则表达式6,11的值是()。
A)8B)6C)7D)不确定
7.条件运算符与条件表达式(三目)(优先级低于逻辑,左结合,高于赋值)(用于选择结构)
(1)格式:
表达式1?
表达式2:
表达式3。
(2)结果:
求解表达式1,非0(为真),求解表达式2,其值即为整个表达式的值;0(为假),求解表达式3,其值即为整个表达式的值。
如a>>等价于a>b?
a:
(c>d)。
例:
若给定条件表达式(M)?
():
(),则其中表达式(M)。
A.和(0)等价B.和
(1)等价C.和(0)等价D.和
(1)等价
8.长度运算符(优先级高于算术,右结合)
(1)格式:
(类型说明符或变量)。
(2)结果:
测试数据类型所占用的字节数,如()值为2。
9.位运算符(双目)(运算对象整型或字符型)
(1)~按位取反(单目):
将运算对象的内容按位取反,如~32767=-32768,即~0111111111111111→1000000000000000。
(2)&按位与:
把两个运算数按对应的二进制进行“与”运算,相应位都是1,该位结果为1,否则为0;如12&10=8,即00001100&00001010=00001000。
(3)|按位或:
两个运算数相应位只要有一个为1,该位结果为1,两个都是0结果才为0;如83|12=95,即01010011|00001100=01011111。
(4)^按位异或:
两个运算数相应位数字相同该位结果为0,不同结果为1;如51^195=240,即00110011|11000011=11110000。
(5)<<左移:
运算对象<<整型表达式,移位后低位补0,高位移出的舍弃;如6<<2=24,即00000110<<2=00011000。
如果左端移出的部分不含1,则相当于移位对象乘以4。
(6)>>右移:
运算对象>>整型表达式,移位后低位移出的舍弃,高位补0(负整数补1);如24>>2=6,即00011000>>2=00000110。
如果右端移出的部分不含1,则相当于移位对象除以4。
10.常用数学函数(<>)
λ与:
(x)求整数x的绝对值,(x)求x的绝对值;两者区别为前者参数及返回值均为基本整型,后者参数及返回值均为双精度。
λ:
(x)求的值,参数及返回值均为双精度(下同)。
λ与10:
(x)求的值、10(x)求10x的值。
λ:
()求的值。
λ:
(x)求的值。
例:
代数式对应的C语言表达式是:
((()10(y)))。
代数式对应的C语言表达式是:
((x,3.0)10(x))。
11.优先级:
括号>逻辑非、自增自减、求正负>算术运算符>关系运算符>逻辑与>逻辑或>条件运算符>赋值运算符>逗号运算符(最好多用括号,使表达式更明了)
四、类型转换高
1.隐式转换
纵向箭头表示当运算对象为不同类型时的转换方向,
横向箭头表示必定转换。
低
a)将转换为时要进行符号扩展。
正值高16位补0,数值不变,如10→10
0000000000001010→00000000000000000000000000001010;负值高16位补1,数值不变,如
-10→-101111111111110110→11111111111111111111111111110110。
b)将转换为时要进行数位截取。
将的低16位给。
数据可能溢出。
c)将转换为时要进行数位扩展。
高16位补0,数值不变。
d)将转换为相同位数的整型变量时,只需原封不动传递。
数据可能溢出。
e)将非转换为相同位数的时,只需原封不动传递。
数据可能溢出。
注意:
⑴超过4位的16进制整型变量转换为无符号16进制变量时只需保留后4位。
⑵当负值基本(短)整型变量转换为无