【文档说明】C语言课件第13章C语言初步.ppt,共(57)页,431.535 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44592.html
以下为本文档部分文字说明:
1课程介绍课程内容:本课程讨论如何使用C语言进行程序设计课程目标:1.熟悉C语言的基本概念2.掌握基本的结构化程序设计方法3.会读、会写简单的C程序,会调试总学时:542学习这门课程的方法教师的作用引导,答疑学习方法C语言是门技术性很强的课程,因此要多实践,多讨论。
C语言是门艺术性很强的课程,独立完成作业不仅是对技术的巩固,同时也是对提高自己编程修养的过程。自学很重要,温故而知新。3参考书目张书云C语言程序设计习题解答与实验指导谭浩强C程序设计4第一章C语言概述计算机
系统的组成硬件(CPU,内存,输入/出等)软件系统软件(提供我们操作硬件的接口)应用软件(为我们提供一定功能的服务)软件是控制硬件来为我们提供服务的指令集合;这些指令就是用计算机能够识别的语言设
计好的程序。5计算机语言的发展机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减用助记符号描述的指令系统如ADDA,B面向机器的语言程序设计是数据被加工
的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系6自然语言同计算机语言的异同都是用来进行交流的自然语言同人进行有情感的沟通计算机语言是人下达给计算机的命令有一定的词汇
,和语法规则自然语言句法多变,仍然可以进行沟通计算机语言固定,不能有变化启示:计算机语言同人类的自然语言一样具有基本词汇和语法规则,但是必须遵守这些规则才可以同计算机进行正常的沟通7C语言发展过程产生过程时间
:1972~1973地点:美国贝尔实验室目的:UNIX操作系统设计人:Ken.Thompson和Dennis.M.RitchieC标准(为了解决不同版本的问题)标准C:K&R合著《TheCProgrammingLa
nguage》ANSIC:1983年87ANSIC:1987年1994年国际标准的ANSIC8如何评价一种计算机语言执行效率高效很重要对硬件的操作性能是否有很大的控制权程序代码书写简单写程序不要太复杂支持数据类型的能力可以方便地进行程序设计9C语言
的优缺点是一种高级语言是目前最高效的计算机语言是目前唯一通用地可以操作硬件的语言支持多种的数据类型,是适合设计系统软件和应用软件的一种语言。缺点:过于灵活,而不好掌握在应用软件设计中,不够简洁。10为什么需要学习
C语言从专业的角度来看本专业的很多课程都是建立在其基础上的是本专业讨论计算机问题的交流工具是信息相关专业的基本功。从语言的角度看功能强大灵活,执行效率高结构化语言,非常简洁C语言应用广泛,存在大量的工作成果。11
C程序示例/*example1.1ThefirstCProgram*/#include<stdio.h>#defineOUT―Hello,World!‖voidmain(){printf(OUT);}注释包含文件函数语句输出:Hello,World!预
定义常量12例1.2/*example1.1calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/main(){inta,b,sum
;a=10;b=24;sum=add(a,b);printf(‖sum=%d\n",sum);}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){i
ntz;z=x+y;return(z);}运行结果:sum=34函数语句包含命令注释13C语言程序的主要组成一个C程序有一个或多个函数组成主函数(main),可以放在任何位置,并从其开始执行。函数包含文件
变量及常量程序语句注释行14C语言程序设计书写格式特点习惯用小写字母,大小写敏感适当的注释一行仅写一句代码可使用空行和空格采用缩进的书写格式统一的命名规范。例子:P.1115程序的开发过
程明确目标确定方法,并实现创建程序编辑编译连接运行16小结:C语言程序设计结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,
在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/**/为注释例:/*Thisisthemain/*ofexample1.1*/非法17第二章数据类型、常量与变量本章详细讨论各种数据的基本类
型及其操作182.1C语言的数据类型数据是程序加工、处理的对象,同时也是程序加工的结果。数据的呈现方式包括常量变量数据在计算机中根据不同的类型进行不同的保存方式。19数据类型总表数据类型基本类型构造类型指针类型空类型void自定义类型typedef字符型c
har枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作20基本数据类型类型符号关键字
数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsigne
dlongunsignedshort160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例:21
字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或101234567012345678910……...7643251222.2标识符、常量与变量标识符定义:用来标识变量、常量、函数等的字符序列组成:只
能由字母、数字(0~9)、下划线组成,且第一个字符必须是字母或下划线大小写敏感不能使用关键字,和一些特殊标示符长度:最长32个字符(不同的编译系统不同)例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#
33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b23关键字是C语言中已经被预先定义并使用的标识符,它们在程序中起着特殊的作用。标准的C语言定义了32个关键字(附录B),但是根据不同的系统(MSC,TurboC),还会有一些标示
符被系统使用,成为关键字。C99标准增加了新关键字:restrict,inline,_Complex,_Imaginary,_Bool。24关键字(续,选讲)数据类型关键字void:声明函数无返回值
或无参数,声明无类型指针,显式丢弃运算结果char:字符型类型数据,属于整型数据的一种int:整型数据,通常为编译器指定的机器字长float:单精度浮点型数据,属于浮点数据的一种double:双精度浮点型数据,属于浮点数据的一种B类型修饰关键字(4个)short:
修饰int,短整型数据,可省略被修饰的int。long:修饰int,长整形数据,可省略被修饰的int。signed:修饰整型数据,有符号数据类型unsigned:修饰整型数据,无符号数据类型C复杂类型关键字(5个)struct:结构体声明
union:共用体声明enum:枚举声明typedef:声明类型别名sizeof:得到特定类型或特定类型变量的大小25关键字(续,选讲)存储级别关键字(6个)auto:指定为自动变量,由编译器自动分配及释放。通常在栈
上分配static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而
不是堆栈传递参数extern:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)volatile:与co
nst合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值26关键字(续,选讲)流程控制A跳转结构(4个)return:用在函数体中,返回特定值(或者是void值,即不返回值
)continue:结束当前循环,开始下一轮循环break:跳出当前循环或switch结构goto:无条件跳转语句B分支结构(5个)if:条件语句else:条件语句否定分支(与if连用)switch:开关语句(多重分
支语句)case:开关语句中的分支标记default:开关语句中的“其他”分治,可选。C循环结构(3个)for:for循环结构do:do循环结构while:while循环结构27特殊的标识符特定标识符:虽没列入关键字,却也有特定的含义。如:defineincludeundefifdefifnd
efendif等,它们是一些预处理命令(P.99)好的用户标识符命名原则:见名知意例如:name,old,color…student_num可以改成stud_num(文件名的长度)不宜混淆如l与I,o与028常量程序运行时其值不能改变的量(即
常数)分类:直接常量:从其字面上就可以看出整型常量实型常量字符常量字符串常量符号常量:用标识符代表常量定义格式:#define符号常量常量如#definePRICE30例符号常量举例#definePRIC
E30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}运行结果:total=30029整型常量—整常量进制问题:对进位方式的一种规定整数常量的进制:十进制,八进制(0),十进制,和十六进制(x,
X)。问题:0123=()100x123=()100Xff=()10问题:0123=()100x123=()100Xff=()10832912553126912457810119-5=49+7=16=(1
4)1230整型常量整型常量的三种表示方法:十进制整型常量:由数字0~9组成,前面可有“+‖、“-‖。八进制常量:以零(0)开头的整数,如026,0123,-011等。而089,078则不合法(?)。十六进制常量
:以0x或0X开头的整数.十六进制数符:0123456789A/aB/bC/cD/dE/eF/f如:0x120x1a=0x1A31如何确定整型常量的类型通过常数的数值大小和标志来确定例如:按数值的大小:-32768~32767之间的数据是short整型
或者int整型~2147483647~2147483647之间的数据是long整型例如:按标志123L,是long整型,在数据的后面增加L,l标志32浮点型常量(实数)表示方式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0
.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,而e-5,1.2E-3.5,4.5e,.e3,2e3.1均为不合法的实数。注意:其输出形式只能是规范化的结果。实
型常量的类型默认double型在实型常量后加字母f或F,认为它是float型33字符常量定义:用单引号括起来的单个普通字符或转义字符.字符常量的值:该字符的ASCII码值<转义字符及其含义:转义字符含义\n\v\
r\a\„\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如‘\101‟-----------„A‟„\012‟---
--------‟\n‟„\376‟-----------‟‟„\x61‟-----------‟a‟„\60‟-----------‟0‟„\483‟----------()例:„A‟-------‟\101‟-------‟\x41‟--------65如‘A‟—
—65,‘a‟——97,‘0‟——48,„\n‟——10如‘a‘‗A‘‗?‘‗\n‘‗\101‘转义字符:反斜线后面跟一个字符或一个代码值表示例转义字符举例main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\
n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}运行结果:(屏幕显示)ABCIsay:‖Howareyou?‖\CProgram\Turbo‗C‘例main(){printf(“Y\b=\n”);}运行结果:屏幕显示:=打印机输出:¥34
字符常量与字符串常量不同字符串常量定义:用双引号(―‖)括起来的字符序列存储:每个字符串尾自动加一个‘\0’作为字符串结束标志hello\0例字符串“hello”在内存中aa\0例‘a‟“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=„A‟;35概
念:程序运行中,其值可以改变的量变量名与变量值变量定义的一般格式:数据类型变量1[,变量2,…,变量n];例:inta,b,c;floatdata;决定分配字节数和数的表示范围合法标识符2.4变量362.4.2整型变量值为整数,取值范
围应在具体计算机能表示的整数范围内。整型变量根据有无符号共分成6种,来表示不同大小的数字:基本型int短整型short长整型long无符号整型unsignedint无符号短整型unsignedshort无符号长整型unsignedlong37整型变量的溢出问题整型
变量的表达范围有限(表2-2)当数据超出了最大范围会发生什么情况?例如:inta=32767;a+1?想想数据在内存中的存储仪表盘的示例38浮点型变量分类:单精度,float:占4字节,双精
度,double:占8字节,表达数据的范围误差由于浮点型变量是由有限的存储单元组成,因此有效数字总是有限的。超过有效位的其它数字将会被舍去(表2-3)float:提供7位有效数字double:提供15~16位有效数
字例floata;a=111111.111;/*a=111111.1*/doubleb;b=111111.111;/*b=111111.111*/39字符型变量字符变量仅仅能存放一个字符。定义方式:charc1;如何存放
字符串呢?字符数组字符变量中存放的是ASCII码值(0~255)(附录A)可以参与数据的计算例如:charc1=‗A‘;intb;b=c1+2;40编译程序根据变量定义为其分配指定字节的内存单元…...地址inta=1,b=-3,c;abc2字节2字节2字节地址地址
…...内存1-3随机数变量初始化:定义时赋初值变量的赋值:定义完成以后,再对值进行修改例:inta=2,b,c=4;floatdata=3.67;charch=„A‟;intx=1,y=1,z=1;intx=y=z=1;变量的使用:先定义,后使用例1intstudent;sta
dent=19;//Undefinedsymbol‗statent‘infunctionmain例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionm
ain变量定义位置:一般放在函数开头main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义可执行语句2.4.5
变量初始化与赋值41没有字符串变量,用字符数组存放字符串和字符的区别内存存储上的不同42例子:#include<stdio.h>#definePHI3.14159intmain(void){inta=0123;floatf1=3.12;doubled
1;d1=PHI+f1+a+0x23+1e5+‗A‘return0;}43运算符和表达式C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:((!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)
指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)44算术运算符和表达式基本算术运算符:+-*/%注意:符号优先级符号结合性()的优先级例5/2=2-5/2.0
=-2.5例5%2=1-5%2=-11%10=15%1=05.5%2()例3+4–5*6/745自增、自减运算符符号++--++使变量值加1--使变量值减1种类前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)计算结合方式
从右向左例j=3;k=++j;j=3;k=j++;a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;//k=4,j=4//k=3,j=4//c=20,a=4//c=15,a=446自增、自减运算符说明++,--只能用于变量,不能用于常
量和表达式。注意清晰地书写易混淆的地方“-”和“++”的使用例i+++j是i+++j还是i+++j例-i++i=3;-i++??-i++-(i++)-3?-45++(a+b)++47赋值运算符和表达式符号=;将一个数据(常量或表达式)赋给一个变量复合赋值
运算符种类:+=-=*=/=%=《=》=等含义:exp1op=exp2exp1=exp1opexp2例a=3;d=func();c=d+2;a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%348复合赋值运算符的一些说明正确理解复合赋值
运算符的含义例如:X*=Y+3;X=X*Y+3;复合赋值运算符的优点程序简洁(正在变得不明显)看起来更专业(初学不重要)49赋值表达式用一个变量和一个表达式连接起来的式子。其计算过程是先计算赋值运算符右面的数值再将结果赋给左边的变量注意:常量不能成为左值一
些表达式不能成为左值赋值号,从右向左结合例c=d+2;a=3;50赋值表达式例子A=(a=5);A=b=c=5;A=5+(c=6);A=(b=4)+(c=6);A=(b=10)/(c=2);(a=3*5)=4
*3;A=3*5=4*3;A+=a-=a*a;51赋值表达式中的类型转换当赋值符号左右不相同的时候,出现类型转换的问题。不允许对字符串进行转换。不会出现数据变异的情况:少字节数向多字节数转换,如:char->short->long
->float->double(精度)可能会出现数据变异的情况多字节数向少字节数转换,如:double->float->long->short->char,错误1:超范围,截断。提示:通常情况下程序不要进行类
型的转换,需要转换的时候要特别的注意。52逗号运算符和表达式符号,作用是将两个表达式连接起来形式:表达式1,表达式2,……表达式n计算:逗号表达式的值等于表达式n的值主要目的:简化书写更多是为了得到每一个表达式的值#include<stdio.h>main(){intx,
y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);
printf(“%d,%d,%d”,(a,b,c),b,c);//a=15,表达式值60//a=15,表达式值20//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3//1,2,3//3,2,353条件运算符与表达式一般形式:expr1?expr2:
expr3执行过程:expr1如果成立表达式的值是expr2否则expr3条件运算符可嵌套如x>0?1:(x<0?-1:0)结合方向:自右向左如a>b?a:c>d?c:da>b?a:(c>d?c:d)例(a==b)?‘Y‘:‘N‘(x%2==1)?1:0(x>=0)?x:-x
(c>=‗a‘&&c<=‗z‘)?c-‘a‘+‘A‘:c54不同类型数据间的转换隐式转换什么情况下发生运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出
转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型55doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例charch;inti;fl
oatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+„a
‟+i*f-d/l例inti;floatf;doubled;longl;56显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变例main(){float
x;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生57练习Intx=10,y=9;Inta,b,c;a=(--x==y++)?—x:++y;b=x++;c
=y;问a,b,c为多少?如果inta=12,问a+=a-=a*a为多少?