国家计算机二级C语言讲义.docx
《国家计算机二级C语言讲义.docx》由会员分享,可在线阅读,更多相关《国家计算机二级C语言讲义.docx(113页珍藏版)》请在冰点文库上搜索。
国家计算机二级C语言讲义
二级C语言讲义
第一章程序设计的基本概念
一、基本概念:
1、计算机语言:
对于计算机来说,它只能接受和处理0和1代码构成的二进制指令或数据,由于这种形式的指令是面向机器的,因此也称为“机器语言”。
计算机语言
2、源程序:
我们把高级语言编写的程序称为源程序。
3、目标程序:
二进制代码表示的程序称为“目标程序”。
4、编译程序:
如何把源程序转换成机器能够接受的目标程序,软件工作者编制了一系列的软件,通过这些软件可以把用户按规定语法写出的语句一一翻译成二进制的机器指令。
这种具有翻译功能的软件称为编译程序。
5、C源程序:
用C语言构成的指令序列称为C源程序。
6、C语言的代码编写:
按C语言的语法编写C程序的过程,称为C语言的代码编写。
练习:
1、C语言程序文件名的后缀是();经过编译后,生成文件的后缀是();经过连接后,生成文件的后缀是()
2、在TURBOC中用Run命令运行一个C程序时,所运行的程序的后缀是()。
7、程序设计的步骤:
确定数据结构;确定算法;编码;上机调试程序;整理并写出文档资料;
8、算法:
为解决某个特定问题而采取的确定且有限步骤。
一个算法应当具有以下五个特点:
1)、有穷性:
2)、确定性:
3)、可行性:
4)、有零个或多个输入
5)、有1个或多个输出。
第二节流程图
一、传统的结构化流程图:
二、N—S流程图:
1、结构化的语言
1)、顺序结构
2)、选择结构
3)、循环结构
第二章C程序设计的初步知识
第一节简单C语言的构成和格式1
一、菜单栏(F10)
1、file:
(文件):
1)、load:
(F3)打开文件
2)、new:
新建文件
3)、save:
(F2)保存
4)、writeto:
另存为
5)、quit(Alt+x)退出当前编辑环境
2、Run(运行)
1)Run(Ctrl+F9):
2)、Userscreen(Alt+F5):
第一节C语言的格式2
(一)、构成
一、命令行
1、命令行必须以“#”开头,最后不能加分号结尾,因为它不是C语言的语句。
2、一对双引号中间的stdio.h是系统提供的文件名,该文件中包含着有关输入输出函数的信息。
(头文件)
二、主函数
1、main是主函数名,C语言规定必须用main作为主函数名。
2、主函数后的一对括号中间可以是空的,但这一对括号不能省略。
3、一个C程序可以包含任意多个不同名字的函数,但必须有且只有一个主函数。
4、C程序的运行总是从主函数开始运行的。
三、函数体
1、定义部分
2、执行部分
3、可执行语句数量不限,但必须放在定义语句后面
(二)格式:
1、C语句必须以分号结束。
它是C语句的一部分,而不是语句间的分隔符。
2、注释符号“/*”“*/”必须成对出现,且不允许出现嵌套情况。
“/”和“*”之间不通话有空格。
第二节标识符的组成和分类3
一、什么是标识符
1、组成:
字母、数字和下划线,而且不能以数字开头。
2、区分大小写
3、标识符长度:
8位
二、标识符的分类
1、关键字:
如:
ifwhile等共39个,指系统已经给定义好含义的。
2、预定义标识符:
如:
printf(输出)、scanf(输入)等。
3、用户定义标识符:
第三节整型数据
一、常量
1、定义:
在程序运行中,不能改变的量。
2、分类:
1)、整型常量
2)、实型常量
3)、字符型常量
4)、字符串常量
二、变量
1、概念:
其值可以改变的量。
是由变量名和变量值构成的。
2变量的实质:
内存中的存储单元。
3、变量应先定义后使用
4、特性:
1)、凡未被事先定义的,不作为变量名。
2)、每一变量被指定为一确定类型,在编译时就能为其分配相同的存储单元。
3)、指定每一变量属于哪一类型,这就便于在编译时据此检查该变量所进行的运算是否合法。
三、整型常量
1、整型常量的表示方法:
十进制、八进制、十六进制。
2、三种进制的表示方法:
1)、十进制数:
“逢十进一”
2)、八进制数:
“逢八进一”
a)、八进制数用数字“0”开头。
(注意:
不是字母o)
b)、八进制数只能用合法的八进制数字0—7表示,但当输入非法数字时C程序不会提示,只是得不到正确的结果。
3)、十六进制数:
用数字0和字母X(大小写均可)开头十六进制只能含有合法的十六进制数字0—9字母a—f。
3、进制之间的转换
4、整型常量的分类:
短整型、长整型、基本整型、无符号型。
四、整型变量
1、整型变量的分类:
(同整型常量)
2、整型变量的定义:
1)、基本整型变量类型用关键字int进行定义.
2)、一个定义语句必须用分号结束,在一个定义语句中可同时定义多个变量,且之间用逗号隔开。
3)、一般微机为基本型整型开辟2个字节的存储单元,基本整型允许存放的数值范围是-32768——32767。
4)、当程序中用以上方式定义变量i,j,k时,编译程序会为变量i,j,k都开辟存储单元,但并没有在存储单元中存放任何初值,因此这些存储单元中原有的信息垃圾并没有被清除。
这时,变量中的值是无意义的,称变量时“无意义”。
5)、C语言规定,可以在变量定义的同时,给变量赋初值,也称为变量初始化。
五、整型数据的分类
1、分类:
int基本整型
singned有符号整型short短整型
long长整型
unsignedint无符号基本整型
unsigned无符号整型unsignedshort无符号短整型
unsignedlong无符号长整型
类型名称
占用字节数
数值范围
[signed]int
2
-32768—32767
[signed]short[int]
2
-32768—32767
[signed]long[int]
4
-2147483648—2147483647
unsigned[int]
2
0—65535
unsignedshort[int]
2
0—65535
unsignedlong[int]
4
0—4294967295
2、若要表示一个长整型常量,则应该在一个整型常量后面加一个大写或小写的字母L做后缀。
注意:
如果一个足够大的数,即使值在长整型范围内,但数字后未加字母L,也不可代表长整数。
3、无论是短整型还是长整型,都被识别为有符号整数;无符号整数应在数字末尾加上大写或小写的U,长整型无符号整数常量,加大写或小写的LU,并且无符号常量不能表示成小于0的负数。
六、整数在内存中的存储形式
1、存储单位
1)、在计算机中,内存存储器的最小存储单位称为“位(bit)”,每一个位中存放“0”或“1”,因此成为二进制位,大多计算机机把8个二进制位组成一个“字节(byte)”
2)、如果一台计算机系统以两个字节(16个二进制位)来存放一条机器指令,就称这台计算机字长为16位。
3)、最右边的一位称为“最低位”,最左边的一位称为“最高位”。
4)、若是正整数最高位是“0”,负整数最高位是“1”。
符号位
最高位最低位
例:
有符号数32767在内存中的存储形式为:
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2、存储方式
a)、语言中,对于负整数在内存中是以整数的“补码”形式存放。
b)、两个字节存放的最小整数是-32768,在内存中的存储形式:
1000000000000000
例
(一)正整数转补码。
己知十进制数5求其二进制形式和其相反数-5的二进制形式。
解:
1)、求5的二进制形式,并把5用一个字节的二进制形式。
2)、求反码,即把各位取反。
3)、求补码,即把最低位加1
(二)补码转正数
己知内存中以补码形式存放的二进制数11111010,要求求出十进制数。
解:
1)、求11111010反码。
2)、根据反码算出十进制正整数的形式。
3)、因为只有负数才有补码存在,所以:
a)、在所得十进制数前加负号“-5”。
b)、让所得负数减1“-6”
七、有符号数在内存中的形式:
1、32767在内存中的形式:
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
+
1000000000000000=215
0111111111111111=215-1
2、-32678在内存中的形式:
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
同理:
用补码求反码可求出来结果,-32768=-215
八、无符号整数在内存中的形式:
65535在内存中的形式:
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
注:
用两个字节存放一个整数时,若说明为无符号整数,其中最高位不再用来存放整数的符号,16个二进制位全部用来存放整数,因此无符号整数不可能是负数。
这时,16个二进制位中全部都是1时,它所代表的整数就是最大数65535,内存中的形式:
“111111*********1”。
a)、-1的存储格式:
1、1的存储格式为0000000000000001
2、0000000000000001的反码为111111*********0
3、0000000000000001的补码为111111*********1;所以-1的存储格式为:
“111111*********1”。
b)、5535的存储格式为111111*********1。
所以有符号整型和无符号整型65535在内存中的存储格式相同。
第四节实型数据
一、实型常量
1、小数形式:
即数学中常用的实数形式,由数字和小数点组成。
2、指数形式:
1)、这种形式类似于数学中的指数形式。
在数学中,一个数可以用幂的形式表示。
在C语言中则以“e”或“E”后面跟一个整数来表示以10为底的幂数。
2)、C语言语法规定,字母E或e之前必须有数字,且E或e后面的指数必须为整数。
二、实型变量
1、C语言中实型变量分为单精度和双精度两类,分别用类型名“float”和“double”定义.
2、两者间的区别:
1)、在一般计算机系统中,为float类型的变量分配4个字节的存储单元,为double分配8个字节的存储单元。
2)、在turboC中单精度实数的取值范围是-1038——1038之间,并提供7位有效位,小于-1038的数被处理成0。
双精度的取值范围是-10308——10308之间,并提供15—16位的有效位,小于-10308的数被处理成0。
3)、在程序中一个实数可以用小数形式表示,也可以用指数形式表示。
但在内存中,实数一律是以指数形式存放的。
4)、在计算机内存中可以精确的存放一个整数,不会出现误差,但整型数值的存放范围较小,使用实型数的范围大,但往往存在误差。
第五节算术表达式和赋值表达式
一、基本运算符
在C语言中基本的算术运算符是:
+、—、*、/、%,分别为加、减、乘、除和求余运算符。
1、写运算符需要两个运算对象,称为双目运算符,除求余外,对象可是整型也可是实型。
2、求余运算符的运算对象只能是整型,在“%”左侧的为被除数,运算结果是两数相除所得的余数。
当运算量为负数时,所得结果的符号与被除数相同。
3、“”和“”也可用作单目运算符,运算符必须出现在运算量的左边,运算量可为整型,也可为实型。
4、双目运算符两边的运算类型必须一致才能进行操作。
所得结果类型与运算类型一致;如果两边运算数的类型不一致,系统将自动把两边转换成相同类型后,进行计算:
a)、如果一边是整型数,一边是实型数时,系统将自动把整型转换成实型数。
b)、如果一边是长整型,一边是短整型,系统将自动把短整型转换成长整型。
c)、如果一边有符号型,另一边是无符号型,系统将自动把有符号型转换成无符号型。
d)、在C语言中,所有实数的运算均以双精度方式进行,若是单精度数,则在尾数部分补0,使之转化为双精度。
二、算术运算符的优先级:
()+、—+、—、*、/
三、算术运算符和圆括号的结合性
只有单目运算符“+”和“—”的结合是从右到左,其余都是从左到右。
四、算术表达式
1、定义:
用算术运算符和一对圆括号将运算量连接起来的符合C语法的表达式称为算术表达式。
2、运算规则和要求:
1)、在算术表达式中,可使用很多层括号,但左右括号必须配对。
运算时由内向外依次计算。
2)、在算术表达式中,若包含不同优先级的运算符,则按运算符的结合方向进行。
五、强制类型转换表达式
1、强制类型转换表达式的形式:
(类型名)(表达式)。
2、“类型名”为强制类型转换运算符,可以利用它将一个表达式的值转换成指定的类型。
例:
(int).324=3(double)(10%3)=1.0
六、赋值运算符和表达式
1、定义:
1)、在C语言中,“=”符号称为赋值运算符,有赋值运算符组成的表达式称为赋值表达式。
2)、赋值形式:
变量名=表达式。
3)、自右向左读
4)、内存中当前的数据就是最后一次所赋的那个数据。
2、说明:
1)、赋值运算符的优先级别只高于逗号运算符,比其它任何运算符的优先级别都低,且具有自右向左的结合性。
2)、赋值运算符不同于数学中的“等于号”,这里不是等同的关系,而是进行“赋予”的操作。
例:
a=13。
3)、赋值表达式x=y的作用是,将变量y所代表的存储单元中的内容赋给变量x所代表的存储单元,x中原有的数据被替换掉;赋值后,y变量中的内容保持不变。
此表达式读做“把右边变量中的值赋予左边变量”。
七、复合的赋值表达式
1、概念:
在赋值运算符之前加上其它运算符可以构成复合赋值运算符。
C语言规定可以用10种复合赋值运算符,其中与算术运算有关的复合运算符的优先级别相同。
八、赋值运算符中的类型转换
1、在赋值运算中,只有在赋值号右侧表达式的类型与左侧变量的类型完全一致时,赋值操作才能进行。
2、如果赋值运算符两侧的数据类型不一致。
在赋值前,系统将自动先把右侧的表达式求得的数值,按赋值号左边变量的类型进行转换,也可以用强制类型转换的方式。
注:
当赋值号左这的变量为短整型,右边的值为长整型时,短整型变量只能接受长整型数据最低位上的两个字节中的数据,高位上的两个字节的数据将丢失。
则a的值为-32768。
例:
inta;unsignedlongb;b=98304;a=b;printf(“%d\n”,a);
第五节自加自减运算
一、自加自减运算符
1、自加运算符“”和自减“”的运算结果是使运算对象的值增加或减少1。
自加或自减运算符本身也是一种赋值运算符。
i++
i=i+1i--
i=i-1
2、自加、自减运算符是单目运算符,运算对象可以是整形变量,也可以是实型变量。
不能是常量和表达式,因为不能给常量或表达式赋值。
3、自加、自减运算符既可做为前缀运算符也可作为后缀运算符而构成一个表达。
但无论是做为前缀还是后缀运算符,对于变量本身来说自增1或自减1都具有相同效果,但做为表达式来说却有不同的值。
1)、++i或--i在使用之前先使i的值增1或减1。
2)、i++或i—在使用之后使i的值加或减1,即i值变,表达式的值不变。
例如:
i=2;a=i++;
i=3;a=2i=2;a=++i;
i=3;a=3
4、自加和自减运算符的结合方向是自右向左。
二、逗号运算符和逗号表达式
1、“,”是C语言提供的一种特殊运算符,用逗号运算符连接起来的式子称为逗号表达式。
逗号表达式的一般形式为:
表达式1,表达式2,……,表达式n.
2、说明:
1)、逗号运算符的优先级别最低。
2)、逗号表达式从左到右进行运算。
最后一个表达式的值就是此逗号表达式的值。
例:
i=3,i++,++i,i+5
第六节课后习题和典型例题讲解
例1、若t己定义为double类型,表达式t=1,t++,t+5的值是()
例2、若题中各变量己正确定义并赋值,下面符合C语句的表达式是()
A、a/(b+c)*dB、a++C、int(12.3)%4D、a=c+b=a+7
例3、己有定义语句:
inta=1,b=3,c=3;floatd=4以下不能正确表示数学式子
的C语言表达式是()
A、a/(b+c)*dB、a/(b+c)*1/dC、a/(b+c)/dD、a/d/(b+c)
例4、己定义:
floatx=4.6;表达式:
x++=x+1的运算结果是。
例5、若己有定义语句:
intk=3,j=4;运算表达式:
k+=j,j/=4.0,++j后,表达式的值是(),变量k的值是(),变量j的值是()。
A、4B、7C、2
例6、以下选项中正确的实型常量是()。
A、0B、3.1415C、0.329*102D、.871
例7可在C程序中用作用户标识符的一组标识符是()。
A、voiddefineWORD;B、as_b3_123If
C、For—abccaseD、2CDoSIG
例8、以下叙述中正确的是()。
A、在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。
B、C程序由主函数组成。
C、C程序由函数组成。
D、C程序由函数和过程组成。
例9、不合法的十六进制数是()
A、0B、0xabcC、0x11;D、ox19
例10、请指出以下C程序的错误所在:
#include“stdio.h”
main()
floatr,s;
r=5.0;s=3.14159*r*r;
printf(“%f\n”,s)
第三章顺序结构
第一节输出函数
一、基本概念
1、按语句在程序中出现的顺序逐条执行,由这样的语句构成的程序结构称为顺序结构。
2、把数据从计算机内部送到计算机外部设备上的操作叫做“输出”,反之叫“输入”
3、C语言本身不提供用于输入和输出的语句。
在C语言程序中,可以通过调用标准库函数提供的输入输出函数来实现数据的输入和输出。
二、printf函数
1、printf函数是C语言提供的标准输出函数。
它的作用是在终端设备上按指定的格式输出。
2、printf函数的一般调用形式:
printf(格式控制,输出项表)如在函数后加上“;”就构成了输出语句。
例:
printf(“a=%d,b=%d”,a,b);
1)、printf是数名;
2)、“a=%d,b=%d”称为格式字符串。
3)、a,b是输出项表中的输出项。
3、格式控制:
1)、它总是由“%”开始,紧跟其后的是格式描述符。
2)、为各输出项提供格式转换说明。
3)、提供需要原样输出的文字或字符。
4、printf函数常用的格式说明
1)、格式字符:
细节见下表
格式字符
功能
格式字符
功能
格式字符
功能
c
输出一个字符
X或x
无符号的八进制数,不带前导0x.
s
输出字符串。
对应的变量必须是地址。
d或i
d是带符号的十进制数,i很少用。
f
单精度实型
p
输出内存变量的地址。
ld
十进制长整型
lf
双精度实型
%
打印一个%。
u
无符号的十进制数
E或e
以指数形式输出实型数
o
无符号的八进制数,不带前导0。
G或g
采用最小的宽度输出实型数。
2、修饰符(位于%和格式字符之间)
a)、:
l:
长
h:
短
+:
使输出的数字总是带有“+”或“-”
-:
左对齐
0:
加前导0
#:
在输出的八进制或十六进制前加前导“0”或“0x”,在其它进制前无效。
b)、输出数据所占宽度(m整数.n小数)
1)、对整数指定宽度(d):
m:
当变量的实际宽度小于m时,左边多余位置补空格;变量的实际宽度大于m时,按实际输出。
n:
当变量的实际宽度大于n时,按实际输出;当变量的实际宽度小于n时,左边多余位置补0。
2)、对实数指定宽度:
(f.e)
m:
用于指定实数的总体宽度,包括小数点:
当实数的总体宽度小于m时,在数据左侧补空格;当实数的总体宽度大于m时,m无效。
n:
用于指定实数的小数部分宽度:
当实数的小数部分小于n时,在数据右侧补0;当实数的小数部分大于n时,将小数的多余部分四舍五入。
3)、对g或G指定宽度:
m:
代表输出的总宽度。
n:
代表输出几个有效位。
4)、对s指定宽度
m:
代表输出的总宽度。
n:
代表输出的字符个数。
5、调用printf的注意事项:
1)、格式说明与输出基从左到右,类型必须一一对应,若类型不匹配,系统不会给出错误提示但结果不正确。
2)、格式说明与输出项个数相同。
若不同,格式说明多,输出不定值;输出项多无用。
3)、除格式说明外,其它合法字符原样照印。
4)、如需输出“%”,则用两个连续的“%”来输出。
5)、尽量不要在输出语句中改变变量的值。
6)、printf返回值是本次输出字符个数。
第二节输入函数
一、scanf函数
1、概念:
scanf函数是C语言提供的标准输入函数,它的作用是在终端设备上输入数据。
2、scanf函数的一般调用形式(&求地址运算符):
1)、scanf(格式控制,输出项表),如果在scanf函数后加“;”就构成输入语句。
2)、格式说明:
(1)、格式控制串的作用是指定输入时数据转换格式;即格式转换说明。
(2)、格式转换说明符是由“%”开始,其后是格式描述符。
(3)、输入项表中的各输入项用逗号隔开,各输入项只能是合法的地址表达式。
3、scanf函数中常用的格式字符(见下表):
格式字符
功能
格式字符
功能
格式字符
功能
c
字符
o
以八进制形式输入整型数,可以带前导0,也可不带。
f(lf)
输入单精度(双精度)数。
d
十进制整数
x
以十六进制形式输入整型数,可以带前导0x,也可不带。
e(le)
与f(lf)含义相同.
i
输入整型数,可以是带前导0的八进制数,也可以是带前导0x的十六进制数。
u
无符号十进制数
s
输入字符串。
4、说明:
1)、在turbo环境下输入long整数时,在%和d之间必须加入l;输入double型时,同理。
2)、在格式控制中,格式说明的类型与输入项的类型,应一一对应匹配。
3)、在scanf函数中的格式字符前可用一个整数指定输入数据所占在宽度。
但不可以实型数指定小数宽度。
4)、在格式控制串中,格式说明符的个数应与输入项的个数相同,若格式符个数少于输入项,scanf函数按格式符
的数目结束输入,多余输入项没有得到新的数据;若格式符的个数多余输入项,scanf函数按输入项的数目结
束输入,多余的格式符不起作用。
5)、当输入的数据少于输入项时,程序等待输入直到满足要求为止;当输入的数据多于输入项时,多余的数据并不消失,而是留做下一个输入操作的输入数据。
6)、scanf函数在调用结