![C语言程序设计课件_第1页](http://file4.renrendoc.com/view/9a57b1428ec4a3d54f1828aec1d47c92/9a57b1428ec4a3d54f1828aec1d47c921.gif)
![C语言程序设计课件_第2页](http://file4.renrendoc.com/view/9a57b1428ec4a3d54f1828aec1d47c92/9a57b1428ec4a3d54f1828aec1d47c922.gif)
![C语言程序设计课件_第3页](http://file4.renrendoc.com/view/9a57b1428ec4a3d54f1828aec1d47c92/9a57b1428ec4a3d54f1828aec1d47c923.gif)
![C语言程序设计课件_第4页](http://file4.renrendoc.com/view/9a57b1428ec4a3d54f1828aec1d47c92/9a57b1428ec4a3d54f1828aec1d47c924.gif)
![C语言程序设计课件_第5页](http://file4.renrendoc.com/view/9a57b1428ec4a3d54f1828aec1d47c92/9a57b1428ec4a3d54f1828aec1d47c925.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章预备知识
C
语言程序设计2023/11/1621.1程序设计与算法概述主要内容:计算机语言与程序设计算法结构化程序设计
2023/11/1631.1.1计算机语言与程序设计1.计算机语言是人与计算机进行交流的工具计算机语言分为:机器语言机器指令(由0和1组成),可直接执行难学、难记依赖机器的类型汇编语言用助记符代替机器指令,用变量代替各类地址。克服记忆的难点其他与机器语言类似高级语言类似数学语言、接近自然语言、具有通用性和可移植性,不依赖具体的计算机类型。2023/11/164例如:00100011111011010110000101110110机器语言程序MOVAX,
300HADDBX,AXMOV[2100H],BX
HLT汇编语言源程序main(){inta,b,c;a=300;b=18;c=a+b;printf(“a+b=%d\n”,c);}高级语言源程序(C)源程序需要翻译2023/11/165汇编源程序的翻译:将汇编源程序翻译为目标程序的过程称为汇编汇编过程:图1.1汇编过程汇编程序连接程序汇编连接汇编语言源程序机器语言目标程序可执行程序(.ASM)(.OBJ)(.EXE)运行运行结果2023/11/166高级语言的翻译:编译方法图1.2编译过程(.C或.PAS等)编译程序连接程序编译连接高级语言源程序机器语言目标程序可执行程序(.OBJ)(.EXE)运行运行结果解释程序高级语言源程序解释执行运行结果图1.3解释过程(.BAS)解释方法2023/11/1672.程序设计用计算机解决一个实际应用问题时的整个处理过程称为程序设计
提出问题确定数据结构确定算法编写程序调试和运行程序输入程序翻译(编译或解释)得到运行结果2023/11/1681.1.2算法什么是算法为解决某一应用问题而采用的解题步骤算法的描述方式
用自然语言描述算法
用流程图描述算法
用N-S结构图描述算法
例如:输出两个数中的最大数2023/11/169用自然语言描述算法第一步:输入x和y的值第二步:比较x和y的值,如果x大于y,则输出x的值,否则输出y的值。
易于理解,但冗长,不够精确,难于描述复杂算法。例如当描述“输出10个数中最大数”的算法时,会冗长、难于理解2023/11/1610图1.5用流程图描述算法用流程图描述算法NYz=yz=xx>y?开始输入x和y结束输出z起止框输入/输出框判断框处理框流程线2023/11/1611用N-S结构图描述算法输入x、y的值x>yTFz=xz=y输出z的值图1.7用N-S结构图描述的算法已经证明,任何复杂的问题都可以三种基本算法结构来描述:顺序、选择、循环。因此用计算机语句描述的程序也包含三种基本结构。
2023/11/16121.1.3结构化程序设计程序的三种基本结构顺序结构程序:按照书写顺序依次执行语句选择结构程序:按照条件判断选择执行语句循环结构程序:通过条件控制循环执行语句三种基本结构的共同点:都是只有一个入口和一个出口;结构内的每一个框都有机会被执行;结构内没有死循环。2023/11/1613结构化程序设计的基本原则:如果一个程序仅包含这三种基本结构(由这些基本结构顺序组成),则称为结构化程序。结构化程序设计的基本原则:采用自顶向下、逐步细化的方法进行设计;采用模块化原则和方法进行设计。即将大型任务从上向下划分为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写;每个模块都是用结构化程序实现,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。2023/11/16141.2C语言概述主要内容:C语言的发展C语言的特点C程序的基本结构C程序的执行过程2023/11/16151.2.1C语言的发展发展过程
B语言:Bell实验室,1970年在PDP机器上用其编写UNIX系统CPL语言:剑桥大学,1963年BCPL语言:剑桥大学,1967年C语言:Bell实验室,1972~1973年用其改写UNIX系统经简化进一步简化保持精练、接近硬件的优点,克服数据类型过少的不足2023/11/16161.2.2C语言的特点语言简洁,表达能力强,易于理解只有32个关键字,9种控制语句数据构造能力强运算符丰富程序书写格式自由可直接访问物理地址,实现对硬件和低层系统软件的访问语言生成的代码质量高可移植性好增加学习难度2023/11/16171.2.3C程序的基本结构【例1.1】计算并输出一个数a的平方。
main(){
floata,b;a=5.2;b=a*a;printf("b=%f\n",b);
}
main
为函数名程序从这里开始运行函数体开始函数体结束函数体内定义a,b为a赋值计算并输出平方值b执行程序的输出结果为:b=27.039997
2023/11/16181.2.3C程序的基本结构【例1.2】输入两个数,输出其中的大数。intmax(intx,inty)
/*max函数*/{
intz;if(x>y)z=x;elsez=y;return(z);}main()
/*主函数*/{inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);/*调用max函数,求a和b中大数*/
printf("max=%d\n",c);}2023/11/1619C程序结构C程序由函数构成必须有,且只能有一个main(主函数)总是从main函数开始执行函数由函数首部和函数体组成函数首部指定函数名、函数参数、类型函数体从{开始,到}结束函数内有语句2023/11/1620C程序结构(续)语句包括说明性语句、可执行语句以;表示语句结束注释可以出现在程序的任何位置
用/*和*/括起来,必须成对出现书写格式C语言没有行的概念,书写格式自由。习惯小写字母,缩进格式。2023/11/16211.2.4C程序的执行过程
1.源程序文件的建立和编辑
编写源程序,形成.C文件需用编辑工具:tc.exe、记事本2.编译
编译源程序,形成目标程序.Obj文件需用编译工具:tcc.exe3.连接
连接OBJ文件和调用的库函数,形成运行程序
.exe
文件需用连接工具:tlink.exe4.运行
.exe
文件运行jc1_2TurboC提供集成化开发环境2023/11/16221.3C程序的符号系统主要内容:基本字符标识符2023/11/16231.3.1基本字符大写英文字母:ABC……XYZ
小写英文字母:abc……xyz
数字:012……9
空白符:空格符、换行符、制表符
特殊字符:+-*/<>()[]{}_=!#%.,;:‘
“|&?$^\~
2023/11/16241.3.2标识符
由字母、下划线和数字组成的字符序列用于程序中的变量、符号常量、数组、函数、数据类型等操作对象的名字1.系统定义标识符具有固定名字和特定含义的标识符分为关键字和预定义标识符
2.用户定义标识符
用于对用户使用的变量、数组、函数等操作对象进行命名2023/11/1625关键字
数据类型:
int、char、float、double、short、long、void、signed、unsigned、enum、struct、union、const、typedef、volatile存储类别:auto、static、register、extern语句命令字:break、case、continue、default、do、else、for、goto、if、return、switch、while运算符:sizeof2023/11/1626预定义标识符系统标准库函数scanf、printf、putchar、getchar、strcpy、strcmp、sqrt等编译预备处理命令include、define等2023/11/1627对标识符的规定
用户定义标识符必须以字母或下划线“_”开头不能含有除字母、数字和下划线“_”外的其他字符标识符中大小写字母含义不同关键字必须用小写字母。不允许使用关键字为变量、数组、函数等操作对象命名预定义标识符允许用户对它们重新定义,当重新定义后将改变它们原来的含义28本章主要内容本章介绍C语言的基础,包括:数据类型运算符和表达式均是程序设计的基本知识为什么讨论这些知识?通常程序要对数据进行操作处理:处理的对象是数据通过运算符和表达式进行操作29例如:【例2.1】计算圆的面积,半径为5cm。
程序如下:main(){float
r,area;
r=5;
area=3.14*r*r;
printf("%f\n",
area);}运算结果是输出圆的面积:78.500000程序中用到的数据:r、area、5、3.14对数据进行的运算:*、=例jc2_130分析:计算机操作处理时,要完成以下工作:在内存中给半径r和运算结果area
开辟存储空间,存放它们的值。应该留多大的地方来存放它们的值?数据
5和3.14与r
、area
不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理?对整数5
和小数3.14,计算机存放时是否有区别?涉及数据类型的基本知识31C语言的数据类型C数据类型数组类型结构体类型共用体类型枚举类型整型字符型实型(浮点型)空类型单精度型双精度型基本类型指针类型构造类型本章讨论基本类型数据322.1.1整型数据1.整型数据的类型基本整型数据int,分配2Byte短整型数据shortint,分配2Byte长整型数据longint,分配4Byte整型数据均以二进制补码形式存储问题:为什么要采用补码?如何表示?33计算机中正、负数的表示例如:109=(1101101)2要区别:+109和-109方法是:将符号也数码化即: 正的符号+用
0表示 负的符号-用
1表示∴计算机中的数表示方法是:
符号位+二进制数值(以8bit为例)
+109→+1101101→01101101
-109→-1101101→1110110134问题:计算机计算复杂化例如计算:
(-19)+(+22)10010011+00010110解决的方法是:使用反码或补码的表示方法(按前述表示的编码称为原码),即能将减法一律转换为加法。需要判断符号是否相同:如果相同,结果符号不变,并进行绝对值相加如果不同,结果取绝对值大的数的符号,并进行绝对值相减35原码、反码和补码正数:原码、反码、补码相同符号位为0,数值为对应的二进制数。+109[01101101]原=[01101101]反=[01101101]补负数:原码符号位为1,数值为绝对值的二进制数。
-109 [11101101]原反码符号位为1,数值为绝对值的二进制数各位变反。
-109 [10010010]反
补码符号位为1,数值为绝对值的二进制数各位变反加1。-109 [10010011]补362.有符号和无符号整型数据有符号的整型数据signedint无符号的整型数据unsignedint区别是将最高位看作符号位还是数据位例如:
1111111110101000作为有符号数使用时,最高为符号位为负数,值是:-88(再求一次补)作为无符号数使用时,最高为数据位为无符号的数,值是:6544837例如:main(){unsignedintm;m=65448;printf("\nm=%d\n",m);printf("m=%u\n",m);}例jc2_a输出结果:m=-88m=65448按有符号数输出按无符号数输出38整型数据的类型及规定方括号表示可选项int分配2Byte,long分配4Byte类型名称类型符bit取值范围整型(短整型)[signed]int[signed]short[int]16215~215-1(-32768~32767)无符号整型unsigned[int]160~216-1(0~65535)长整型[signed]long[int]32-231~231-1无符号长整型unsignedlong[int]320~232-1392.1.2实型数据1.实型数据的类型
单精度实型数据float,分配4Byte双精度实型数据double,分配8
Byte2.实型数据的存储
单精度实型指数部分小数部分
小数的符号位指数的符号位40实型数据的类型及规定C标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。有效数字的意义?类型类型符Byte绝对值的范围有效数字单精度型float410-37~10387~8
位双精度型double810-307~1030815~16位例jC2_a412.1.3字符型数据字符型数据char,分配1Byte
字符型数据是指字母、数字、各种符号等用ASCII值表示的字符例如'a'是一个char类型数据,称作字符常量,存储:011000012.1.4空类型空类型void通常与指针或函数结合使用422.2常量、变量与标准函数主要内容:常量变量标准库函数432.2.1常量在运行程序的过程中值保持不变的量1.整型常量十进制:0~9八进制:0~7,以0开头十六进制:0~9,A~F/a~f,以0x或0X开头例如:100-80+12301002401000730x380x100X100XFF0x0a441.整型常量整型常量的类型:根据值大小默认类型。整型常量后面加l或L,则认为是longint型例如:123L、0L、432l、0x100l注意:十六进制常量中可以使用大写字母A~F,也可以使用小写字母a~f。八进制常量中不能出现数字8或9例如:018、0921非法452.实型常量十进制形式
1.01.+12.0-12.00.0指数形式
1e31.8e-3-123E-6-.1E-3等价于:1×1031.8×10-3
-123×10-6
-0.1×10-3指数只能是整数,而尾数则可以是整数也可以是小数,无论指数或尾数均不能省略例如:1e、E.5、E-3
非法实型常量的类型:默认为double型,后面加F(或f),则强调表示该数是float类型例如:3.5f、1e2F
463.字符型常量可视字符常量
单引号括起来的单个可视字符例如:'a'、'A'、'+'、'3'、''等
转义字符常量单引号括起来的\与可视字符组合,例如:\0字符串结束标志\n回车换行\t跳到下一个输出位置\"双引号字符\dddddd为1到3位八进制数所代表的字符\xhhhh为1到2位十六进制数所代表的字符474.字符串常量用双引号括起的一个字符序列例如:"ABC"、"123"、"a"、"\n\t""\nGoodmorning"字符串常量的长度:所包含的字符个数
字符串常量的存储方式:
\nGoodmorning\0a\0所占存储单元数:串长度+1例如:字符串结束标记485.符号常量以标识符来代表的常量事先编译预处理命令define定义编译时先由系统替换为它所代表的常量,再进行编译例如:
#defineLEN
2.5main(){floata,b;a=2*3.14*LEN;b=3.14*LEN*LEN;printf("a=%f,b=%f\n",a,b);}定义符号常量使用符号常量编译前系统进行替换495.符号常量main(){floata,b;a=2*3.14*2.5;b=3.14*2.5*2.5;printf("a=%f,b=%f\n",a,b);}define是编译预处理命令,必须以“#”开头编译预处理命令在第7章讨论。替换为502.2.2变量1.变量的有关概念在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名。变量必须“先定义后使用”系统为变量分配存储单元,存储变量的值。编写程序时通过变量名来存、取变量值。a510变量值为变量分配的存储单元变量名例如:有变量a它的值是510512.变量定义变量定义的一般格式:
数据类型说明符变量列表;例如:inti,j;
longk,m;floatx,y;charch1,ch2;必须使用合法的标识符作变量名不能使用关键字为变量命名523.变量的初始化:允许在说明变量的时候对变量赋初值。例如:inta=5,b=10+2;
doublex=23.568,y;charch1='a',ch2=66,ch3='\142';表示定义变量并对变量存储单元赋值。错误的初始化:
inta=3+b,b=5;
floatm=n=23.16;
532.2.3标准库函数由C编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用常用函数如:printf、scanf、fabs、sqrt、sin、(常用数学函数参见教材
P30表2.5)函数调用形式:函数名([参数表])例如:putchar('a')sqrt(x)例jc2_3542.3运算符和表达式主要内容:算术运算符和算术表达式赋值运算符和赋值表达式关系运算符和关系表达式逻辑运算符和逻辑表达式位运算符和位运算表达式条件运算符和条件表达式逗号运算符和逗号表达式其他运算符及其运算55运算符的有关概念作用:对运算对象完成规定的操作运算类型:按运算对象分:单目、双目、三目按功能分:算术、赋值、关系、逻辑条件、逗号、位、其他56运算符的优先级和结合性优先级指各种运算符号的运算优先顺序例如:算术运算优先于关系运算算术运算中先*/后+-结合性指运算符号和运算对象的结合方向分为:从左向右(左结合)和从右向左(右结合)例如:算术运算符为左结合
a-b+4赋值运算符为右结合
a=b=5(C语言规定见教材P297附录B)57本章涉及的运算符+-*/%++--+-=+=-=*=/=%=&=|=^=>>=<<=><>=<===!=&&||!&|^~<<>>?:,&sizeof(数据类型标识符)类型种类算术运算符赋值运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符其他运算符58表达式的有关概念什么是表达式由运算符将运算对象连接成的式子,它描述了一个具体的求值运算过程。计算表达式的值按照运算符的运算规则求值求值时注意运算符的优先级和结合性表达式值的类型自动转换强制转换59例如:表达式:150+'b'*2-12.456b=(++a)-2a/=a*=(a=2)f=a>b>c--a||++b&&c++max=a>b?a:ba=3,a+=3,a*a 1/(float)a+660算术运算算术运算符的优先级
()+-++--
*/%
+-
同级同级同级
单目双目
高
低没有乘方运算符,要计算a3要写作a*a*a的连乘,或用标准库函数pow(a,3)“/”的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据“%”要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。61自增自减运算++--是单目运算符有前缀和后缀两种形式
前缀形式:先自增(自减)再引用;后缀形式:先引用再自增(自减);功能:前缀形式++a
等价于
a=a+1
--
a
等价于
a=a–
1后缀形式a++
等价于a=a+1
a--
等价于a=a–
1表达式的值会不同62例如:当a=5时⑴++a表达式的值为6,且
a=6⑵
a++表达式的值为5,且
a=6⑶
b=++a
等价于
a=a+1;b=a表达式的值为6,且a=6,
b=6⑷b=a++等价于
b=a;a=a+1表达式的值为5,且a=6,
b=5
63说明:++和--的运算对象只能是变量(或运算结果是变量的表达式),不能是常量(或运算结果是数值的表达式)。
例如:
5++、(a+2)++
不合法。具有右结合性,结合方向为从右到左。例如:
–a++
等价于-(a++)
如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符例如:
i+++j
等价于(i++)+j
-i+++-j
等价于-(i++)+(-j)
64main(){inta=5;printf("%d%d\n",a,a++);}说明(续):对函数参数的求值顺序:
TurboC系统先计算最右边的参数值,再依次计算左面的参数值。【例2.5】有多个函数参数且为同一变量自增的运算处理。
输出结果:65运行例2.565说明(续):【例2.6】有多个函数参数且为同一变量多次自增的运算处理。
main(){inta=5;printf("%d%d\n",a,(a++)+(a++));}输出结果:711运行例2.666赋值运算赋值运算符(右结合)
=+=-=*=/=%=&=|=^=>>=<<=赋值表达式将表达式的值存入变量对应的内存单元中m=12b=(++a)-2m%=3+n等价于
m=m%(3+n)x*=(x=5)67说明:赋值号左边必须是变量,右边可以是C语言任意合法的表达式例如:n=t+2<s合法
a+b=15
不合法赋值运算符仅优先于“,”,且具有右结合性例如:
a=b=b*c>10等价于:a=(b=(
(b*c)>10)
)赋值号与数学中的等号含义不同例如:数学中a=b等价于b=aC语言中a=b不等价于b=a68关系运算关系运算符(左结合)
>>=<<=
==!=较高较低关系表达式用关系运算符将运算对象连接成的式子例如:12<'C'+1(字符型数据比较ASCII值)a==b>=c等价于a==(b>=c)与(a==b)>=c不等价关系运算符优先于赋值,低于算术69说明:关系运算的结果应该是逻辑值。C语言用数值用1表示逻辑真,0表示逻辑假例如:7>5的值是1,5>7的值是0
'a'>'b'的值是0,'a'<'b'的值是1即关系表达式的值:0或1实型数可进行大于或小于比较,但通常不进行==或!=的关系运算70逻辑运算符逻辑运算符&&||!逻辑运算符的运算规则运算对象逻辑运算结果aba&&ba||b!a非0非0110非000100非00110000171逻辑表达式逻辑表达式用逻辑运算符将运算对象连接成的式子例如:0&&'b'a&&b||c&&da||b-5||c/4!x+y>=z逻辑运算符的优先级和结合性:!是单目运算符,右结合,高于算术&&和||是双目运算符,左结合,高于赋值运算符,低于关系运算符72逻辑运算规则从左到右依次进行逻辑计算运算对象为非0表示逻辑真运算对象为0表示逻辑假逻辑运算的结果为0或1例如设:a=15,b=0,c=-2a&&b&&c结果为0a||b||c结果为1(a+c)||b&&c结果为173逻辑运算规则(续)运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算——逻辑运算的短路性质例如设:a=1,b=0,c=-2a&&b&&c(a++)||++b&&--c为0,运算终止,表达式值为0为非0,运算终止,表达式值为1且a为2,b为0,c为-2(b,c保持原值)74关系与逻辑运算符的应用表示数学公式a>b>c判断a,b,c三条线段能否组成一个三角形
a,b不同时为负
a+b>c&&a+c>b&&b+c>aa>=0||b>=0!(a<0&&b<0)(a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)a>b&&b>c75位运算符~&^|<<>>位逻辑运算符移位运算符单目位运算符的运算对象只能是整型数据或字符型数据,不能是实型数据运算对象一律按二进制补码参加运算,并按位进行运算位运算的结果是一个整型数据低于单目、算术运算符,高于其他运算符低于单目、算术和关系运算符,高于其他运算符76位逻辑运算符的运算规则假设ai和bi均是一个二进制位(bit)
运算对象逻辑运算结果aibiai&biai|biai^bi˜ai000001010111100110111100例如:假设a=10,b=010求a&b、a|b、a^b、˜a77程序如下:
main(){inta=10,b=010;printf("%d%d\n",a&b,a|b);printf("%d%d\n",a^b,~a);}输出结果:8102-110000000000001010&00000000000010000000000000001000即:a&b的值是80000000000001010˜
1111111111110101即:˜a的值是-11运行jc2_b78移位运算例如:a<<ba+8>>b-1等价于(a+8)>>(b-1)例如:假设a=10,b=2,求a<<b、a+8>>b-1
main(){inta=10,b=2;printf("%d%d\n",a<<b,a+8>>b-1);}输出结果:409运行jc2_c请自行分析运行结果79条件表达式运算条件运算符:?:条件表达式的一般形式表达式1?表达式2:表达式3例如:m<n?x:a+3a++>=10&&b-->20?a:bx=3+a>5?100:200C语言中唯一的三目运算符,要正确区分用?和:分隔的表达式涉及条件运算符的优先级与结合性80条件运算符优先级条件运算符优先级高于赋值、逗号运算符,低于其他运算符例如:⑴m<n?x:a+3⑵a++>=10&&b-->20?a:b⑶x=3+a>5?100:200等价于:(m<n)?(x):(a+3)等价于:(a++>=10&&b-->20)
?a:b等价于:x=
((3+a>5)
?100:200)81条件运算符的结合性
条件运算符具有右结合性当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。例如:w<x?x+w:x<y?x:y
与w<x?x+w:(x<y?x:y)等价
与(w<x?x+w:x<y)?x:y不等价82逗号表达式运算逗号表达式的一般形式
表达式1,表达式2,……,表达式n逗号表达式的值从左向右,依次对表达式求值,最后得到表达式n
的值就是逗号表达式的值例如:⑴a=5,
a++,
a*3
表达式值为18,且a=6⑵t=1,t+5,t++表达式值为1,且t=2⑶x=(a=3*5,
a*4
)赋值表达式的值为60,且x=60,a=1583取地址运算符&为单目运算符运算对象只能是变量运算结果是变量的存储地址例如有定义:inta,student;charch;可以对变量a、ch、student进行&运算:&a&ch&student84长度运算符sizeof为单目运算符运算对象只能是变量名或数据类型标识符
运算结果为该变量或该数据类型的长度main(){inta=5;doublex;printf("%d%d",sizeof(int),sizeof(a));printf("%d%d",sizeof(double),sizeof(x));printf("%d%d\n",sizeof(float),sizeof(char));}输出结果:2288
4
1运行jc2_d852.4运算中数据类型的转换2.4.1数据类型的自动转换转换原则:
自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象类型转换char,shortdoublelongfloatunsignedint高精度低精度例如有定义:inta;char
ch;表达式:a-ch*2+35La-ch*2+35.862.赋值运算中的类型转换<实型变量>=<整型表达式>小数部分自动补0<整型变量>=<实型表达式>自动舍去实型表达式的小数部分(注意不进行四舍五入)
<字符变量>=<整型表达式><整型变量>=<长整型表达式>自动截取表达式值的低字节赋值,舍去高字节<整型变量>=<字符数据><长整型变量>=<整型表达式>自动给高字节补0或补12023/11/1687程序的三种基本结构顺序结构N-S结构图流程图ABAB选择结构YNABP成立?PTFAB2023/11/1688程序的三种基本结构循环结构NYP成立?A当P成立时
A直到型循环
A当P成立时YNAP成立?当型循环N-S结构图流程图2023/11/1689本章主要内容:C语言的语句类型数据输出数据输入顺序结构程序设计2023/11/16903.1C语言的语句类型主要内容:说明性语句表达式语句控制语句复合语句2023/11/16913.1.1说明性语句对程序中使用的变量、数组、函数等操作对象进行定义、声明的描述语句只起说明作用,不产生可执行的机器指令代码。
例如:inta,b;
floatfunction(int,int);C程序由函数组成。函数的格式:函数名(参数表){
说明部分;执行部分;}数据类型说明语句可执行语句2023/11/1692表达式后面加一个分号,构成表达式语句x=3;y=y+5;x=a-b&&c||d;printf("x=%d,y=%d\n",x,y);sort(a,10);3.1.2表达式语句赋值语句函数调用语句注意:①分号是语句必不可少的一部分②单独的一个分号“;”构成一个空语句例如:;(空语句,是最简单的C语句)2023/11/16933.1.3控制语句1.选择分支控制语句
if()…else…
switch(){…} 2.循环控制语句
for()…
while()…do…while()3.其他控制语句
break、continue、gotoreturn2023/11/16943.1.4复合语句用一对花括号“{}”括起来的若干条语句
花括号中可以是说明语句、表达式语句、控制语句,也可以是复合语句例如:⑴if(a>b){max=a;min=b;}
⑵for(n=1;n<10;n++)
{p=n+p;if(p>=100)
{
printf(“%d\n”,p);break;
}
}
2023/11/16953.1.4复合语句(续)复合语句中如果有说明性语句,应该写在可执行语句的前面例如:
main(){inta,b;a=b=100;{floatc=10.23;printf("%f\n",c);}printf("%d%d\n",a,b);}要特别注意:花括号的配对花括号的位置C语言学习的难点之一2023/11/16963.2数据输出主要内容:字符输出函数格式输出函数2023/11/16973.2.1字符输出函数函数调用的一般形式
putchar(ch)功能:在标准输出设备(即显示器屏幕)上输出一个字符。例如:putchar('b');putchar('\n');putchar('\101');putchar(st);2023/11/1698说明putchar是C语言的标准库函数,使用时必须加编译预处理命令:#include"stdio.h"
或
#include<stdio.h>【例3.1】利用putchar函数输出字符。#include"stdio.h"
main(){charc1,c2;c1='a';c2='b';putchar(c1);putchar(c2);putchar('\n');putchar(c1-32);putchar(c2-32);putchar('\n');}也可改为c1=97;c2=98;
输出结果:abAB例jc3_12023/11/16993.3.2格式输出函数函数调用的一般形式printf(格式控制,参数2,…,参数n)
功能:按格式控制所指定的格式,在标准输出设备上输出参数2、…、参数n的值。例如有程序段:inta=123,b=100;printf("%d%d%d\n",a,b,a+b);printf("c=%d+%d=%d\n",a,b,a+b);2023/11/16100格式控制用双引号括起的字符串,用于指定输出数据的类型、格式、个数包括:普通字符和格式说明符照原样输出
printf("c=%d+%d=%d\n",a,b,a+b);格式说明符:指定输出3个十进制整型数,分别为变量a、b、a+b的值2023/11/16101输出格式说明符整型数据
%d以有符号十进制形式输出整型数%o以无符号八进制形式输出整型数%x以无符号十六进制形式输出整型数%u以无符号十进制形式输出整型数实型数据
%f以小数形式输出实型数%e以指数形式输出实型数%g按数值宽度最小的形式输出实型数字符型数据
%c输出一个字符%s输出字符串其他
%%输出字符%本身在%和格式符之间可以使用附加说明符2023/11/16102附加格式说明符l输出长整型数(只可与d、o、x、u结合用)m指定数据输出的宽度(即域宽).n对实型数据,指定输出n位小数;对字符串,指定左端截取n个字符输出+使输出的数值数据无论正负都带符号输出-使数据在输出域内按左对齐方式输出整数位数+小数位数+小数点自动对n位后小数四舍五入
例如:%ld——输出十进制长整型数%m.nf——右对齐,m位域宽,n位小数或n个字符%-m.nf——左对齐2023/11/16103例3.2整型数据的输出main(){inta=11,b=22;intm=-1;longn=123456789;printf("%d%d\n",a,b);printf("a=%d,b=%d\n",a,b);printf("m:%d,%o,%x,%u\n",m,m,m,m);printf("n=%d\n",n);printf("n=%ld\n",n);}程序输出:1122a=11,b=22m:-1,177777,ffff,65535n=-13035n=123456789例jc3_a2023/11/16104例3.3实型数据的输出main(){floatx=1234.56,y=1.23456789;doublez=1234567.123456789;printf("x=%f,y=%f\n",x,y);printf("z=%f\n",z);printf("z=%e\n",z);printf("z=%g\n",z);printf("z=%18.8f\n",z);printf("x=%10.3f\n",x);printf("x=%-10.3f\n",x);printf("x=%4.3f\n\n",x);}程序输出:x=1234.560059,y=1.234568z=1234567.123457z=1.23457e+06z=1234570z=1234567.12345679x=1234.560x=1234.560x=1234.560例jc3_b2023/11/16105例3.4字符型数据的输出main(){intm=97;charch='B';printf("m:%d%c\n",m,m);printf("ch:%d%c\n",ch,ch);printf("%s\n","student");printf("%10s\n","student");printf("%-10s\n","student");printf("%10.3s\n","student");printf("%.3s\n\n","student");}程序输出:m:97ach:66Bstudentstudentstudentstustu例jc3_c2023/11/16106注意:printf函数格式控制中的格式说明符与输出参数的个数和类型必须一一对应。格式说明符的%和后面的描述符之间不能有空格。除%X、%E、%G外类型描述符必须是小写字母。长整型数应该用%ld(或%lo、%lx、%lu)格式输出,否则会出现输出错误。printf函数的参数可以是常量、变量或表达式。在计算各参数值时,TurboC采用从右至左的顺序求值。2023/11/161073.3数据输入主要内容:字符输入函数格式输入函数2023/11/161083.3.1字符输入函数函数调用的一般形式
getchar()功能:从标准输入设备(即键盘)上交互输入一个字符。例如:getchar();c=getchar();printf("%c\n",getchar());2023/11/16109例如:【例3.8】getchar函数的应用。
#include"stdio.h"main(){charch;ch=getchar();printf("%c%d\n",ch,ch);printf("%c%d\n\n",ch-32,ch-32);}程序运行时输入:m
并按回车键后输出结果是:m109M77例jc3_82023/11/16110说明:getchar是C语言的标准库函数,使用时必须加编译预处理命令:#include"stdio.h"
或
#include<stdio.h>getchar函数需要交互输入,接收到输入字符之后才继续执行程序。连续使用getchar函数时,要注意字符的输入形式,例如执行如下程序段:charch1,ch2;ch1=getchar();ch2=getchar();必须连续输入两个字符,中间不能有其他字符2023/11/161113.3.2格式输入函数函数调用的一般形式scanf(格式控制,地址参数2…,地址参数n);功能:按格式控制指定的格式,从标准输入设备(即键盘)交互输入数据,并依次存放到对应地址参数指定的变量中(即将输入值赋给变量)。
例如:scanf("%d%f",&a,&f);scanf("%o,%f",&b,&x);scanf("a=%d,b=%d",&a,&b);2023/11/16112格式控制用双引号括起的字符串,用于指定输入数据的类型、格式、个数以及输入的形式
包括:普通字符和格式说明符照原样输入
scanf("a=%d,b=%d",&a,&b);格式说明符:指定输入2个十进制整型数赋给变量a和b2023/11/16113输入格式说明符整型数据
%d输入十进制整型数%u输入无符号的十进制整型数%o输入八进制整型数%x输入十六进制整型数实型数据
%f输入小数形式的单精度实型数%e输入指数形式的单精度实型数字符型数据
%c输入单个字符%s输入一个字符串在%和格式符之间可以使用附加说明符2023/11/16114附加格式说明符l与d、o、x、u结合输入长整型数与f结合输入double型数m指定数据输入的宽度(即域宽)*忽略读入的数据(即不将读入数据赋给相应变量)例如:%ld、%lo——输入十进制、八进制长整型数%lf、%le——输入双精度实型数%mf——输入m位数(域宽)%*d——忽略输入的一个整型数对float和double型指整数位数+小数点+小数位数2023/11/16115例如:scanf("%d%d%d",&a,&b,&c);
输入3个整型十进制数,以空白符(空格、tab键或回车键)分隔
scanf("%d,%o,%f",&a,&b,&x);
输入3个数,以“,”分隔scanf("a=%d,b=%d",&a,&b);
输入的形式是:a=32,b=28(普通字符要照原样输入)2023/11/16116程序:main(){inta,b,c;longm;floatx;doubley;charch,string[20];printf("inputa,b,c,m:");scanf("%d%o%x%ld",&a,&b,&c,&m);printf("a=%d,b=%d,c=%d,m=%ld\n",a,b,c,m);printf("inputx,y:");scanf("%f%lf",&x,&y);getchar();printf("x=%f,y=%f\n",x,y);printf("inputch,string:");scanf("%c%s",&ch,string);printf("ch=%c,string=%s\n\n",ch,string);}运行jc3_d2023/11/16117使用scanf函数应注意:要求在程序运行中输入数据,输入的数据个数和类型必须与格式说明符一一对应。地址参数形式:&变量名(除数组或指针变量)格式控制中有普通字符时,必须照原样输入。格式控制中无普通字符时,输入的数值型数据和字符串用空白符分隔,字符型数据不必分隔。double型数据输入时,必须用%lf或%le格式实型数输入时域宽不能用m.n形式的附加说明为了减少不必要的输入量,除了逗号、分号、空格符以外,格式控制中尽量不要出现普通字符,也不要使用
'\n'
、'\t'
等转义字符2023/11/16118scanf("%c%c%c",&ch1,&ch2,&ch3);要输入:abc
不能输入:a
b
c
注意数值型数据与char型数据的混合输入注意(续):格式符之间若无普通字符,则:输入的数值型数据用空白符分隔输入的char型数据不必分隔
例如:scanf("%d%d",&m,&n);scanf("%c",&ch);错误输入:32
28
a
正确输入:32
28a
2023/11/161193.4顺序结构程序设计3.4.1顺序结构程序的一般算法描述变量定义变量赋值运算处理输出结果可用:变量初始化赋值语句输入函数调用语句注意各个语句的顺序2023/11/161203.4.2顺序结构程序设计举例【例3.15】数据交换。从键盘输入a、b的值,输出交换以后的值。
思路:在计算机中交换变量a和b的值,不能只写下面两个赋值语句a=b;b=a;?正确的交换方法:c=a;a=b;b=c;2023/11/16121程序:main(){inta,b,c;printf("\ninputa,b:");scanf("%d,%d",&a,&b);printf("\nbeforeexchange:a=%db=%d\n",a,b);c=a;a=b;b=c;printf("afterexchange:a=%db=%d\n",a,b);}程序运行情况如下:inputa,b:32,57
beforeexchange:a=32b=57afterexchange:a=57b=32
运行jc3_152023/11/16122举例:【例3.16】已知三条边a、b、c,求三角形面积。计算三角形面积的海伦公式:其中:设定义:整型变量a、b、c实型变量s、area2023/11/16123本章主要内容4.1if语句4.1.1if语句的一般形式4.1.2if语句的嵌套4.2switch语句4.2.1switch语句的一般形式4.2.2break语句4.3选择结构程序设计举例2023/11/16124简单分支语句语句一般格式if(表达式)
语句功能:计算表达式的值,如果是一个非0值(即逻辑真),就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句。内嵌语句,可为:赋值语句函数调用语句控制语句复合语句空语句可为算术、关系、逻辑、赋值等表达式2023/11/16125简单分支语句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}
表达式非0
TF
语句N-S结构图语句流程图NY表达式非0?2023/11/16126双重分支语句语句一般格式if(表达式)
语句1
else语句2
功能:计算表达式的值,如果它的值是一个非0值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句。
2023/11/16127双重分支语句的算法:例如:⑴if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')
{ch=ch-32;
printf("%c\n",ch);}elseprintf("%c\n",ch);
表达式非0
TF
语句1语句2N-S结构图语句1
语句2流程图NY表达式非0?2023/11/16128多重分支语句语句一般格式if(表达式1)
语句1
elseif(表达式2)
语句2
……
elseif(表达式m)
语句m
else语句
n功能:依次计算并判断表达式i,为非0时执行后面的语句,都为0时,执行语句n无论执行完那个语句分支,都转到后续语句2023/11/16129多重分支语句的算法流程图表达式2?表达式1?语句n语句1
语句2
语句m…YNYNNY表达式m?2023/11/16130多重分支语句的算法N-S结构图表达式1?
TF
表达式2?语句1TF
语句2…
表达式m?TF
语句m语句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;2023/11/16131if语句的简单应用【例4.1】输入一个字符,如果是大写字母,则将其转换为小写字母输出,否则直接输出。输入:用getchar或scnaf函数ch是否为大写字母:ch>='A'&&ch<='Z'(或ch>=65&&ch<=90)大写字母转换为小写字母:ch=ch+32输出:用putchar或printf函数思路:2023/11/16132程序:#include"stdio.h"main(){charch;ch=getchar();if(ch>='A'&&ch<='Z')ch=ch+32;printf("%c\n",ch);}程序运行情况如下:G
g
运行jc4_1可使用条件表达式代替putchar(ch>='A'&&ch<='Z'?ch+32:ch);putchar('\n')2023/11/161334.1.2if语句的嵌套如果if的内嵌语句中又使用了一个if语句,则构成if语句的嵌套。
【例4.a】比较两个整数的关系。#include<stdio.h>main(){intx,y;printf("EnterintegerXandY:");scanf("%d%d",&x,&y);
if(x!=y)
if(x>y)printf("X>Y\n");
elseprintf("X<Y\n");
elseprintf("X=Y\n");}应该正确判断:if的内嵌语句if和else的配对运行jc4_a提倡缩格书写有利于阅读程序2023/11/16134
if语句嵌套的形式简单if语句的嵌套形式if(表达式)if语句双重(或多重)分支if语句的嵌套形式if(表达式)if语句else
if语句可以是各种形式的if语句可以是各种形式的if语句如果是简单if语句,必须用“{}”括起2023/11/16135例如:⑴if(c<=100)
if(c>=50)printf("50<=c<=100\n");⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else
if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")与哪个if配对?2023/11/16136再例如:if(a>b) if(a>c) if(a>d)m=1;elsem=2;elsem=3; 问题:哪一个else和哪一个if相匹配?规则:在嵌套的if~else语句中,else总是与上面的离它最近的尚未配对的if
配对。2023/11/16137举例【例4.4】输入一个数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。
定义变量x输入x的值
x是奇数
TF
输出“odd”x是5的倍数输出“even”TF是5的倍数2023/11/16138程序:main(){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版历史八年级上册(2017年新编)《第6课戊戌变法》(听课评课记录)
- 苏科版数学八年级上册听评课记录《4-3实数(1)》
- 新版华东师大版八年级数学下册《18.1平行四边形的性质2》听评课记录
- 苏科版数学七年级下册听评课记录12.2证明1
- 人教版部编历史七年级上册《第12课 汉武帝巩固大一统王朝》听课评课记录2
- 2022版新课标七年级上册道德与法治第五课交友的智慧第二课时网上交友新时空听课评课记录
- 创业糕点店创业计划书
- 专利技术许可证合同范本
- 厂房出租安全生产管理协议书范本
- 高额质押典当合同范本
- 分享二手房中介公司的薪酬奖励制度
- 安徽省2022年中考道德与法治真题试卷(含答案)
- GB 4793-2024测量、控制和实验室用电气设备安全技术规范
- 项目人员管理方案
- 重大火灾隐患判定方法
- 挖掘机售后保养及维修服务协议(2024版)
- 2024年电工(高级技师)考前必刷必练题库500题(含真题、必会题)
- 2024年全国各地中考语文试题汇编:名著阅读
- 公司组织架构与管理体系制度
- 2024-2030年中国涂碳箔行业现状调查与投资策略分析研究报告
- 2024-2030年中国派对用品行业供需规模调研及发展趋势预测研究报告
评论
0/150
提交评论