谭浩强C语言程序设计.ppt
《谭浩强C语言程序设计.ppt》由会员分享,可在线阅读,更多相关《谭浩强C语言程序设计.ppt(329页珍藏版)》请在冰豆网上搜索。
CC语言程序设计语言程序设计第一章第二章第三章第四章第五章第六章第七章第一章第一章CC语言概述语言概述C语言既可作为系统软件的程序设计语言,又可作为应用软件的程序设计语言。
尤其是当今计算机应用极为广泛,软件的设计、编写质量要求高,经常与硬件部分打交道,如:
界面设计等,所以用C语言编写是最理想的。
因而C语言也是当前计算机语言中用得最广泛的语言之一。
1.11.1CC语言出现的历史背景语言出现的历史背景一一、操操作作系系统统的的设设计计语语言言O.S.操作系统,为用户使用计算机提供一个操作环境:
系统命令、语言编程等。
如:
DOS.UNIX以前:
O.S.软件用汇编指令编写。
汇编语言:
一种二进制指令代码的符号表示,既繁琐,又易出错,可读性差。
改进:
用C语言编写,既提高了程序的可读性,又可与硬件打交道。
二二、发发展展过过程程1960年出现了Algol60语言,但该语言主要面向问题,与硬件较远,故英国剑桥大学推出了CPL(CombinedProgrammingLanguage)1967年,MatinRichards对CPL进行改进、简化、推出了BCPL(BasicCombinedProgrammingLanguage)1970年,美国贝尔实验室KenThomson以BCPL为基础,再次简化推出了B语言,并写了第一个UNIX系统。
美国贝尔实验室D.M.Ritchie在B语言基础上设计出了C语言,并用其将UNIX系统全部改写并实现。
经进一步改进,至1977年出现了与具体机器无关的C编译文本,从而使C语言广泛应用,各种机器皆可使用。
1978年,美国BrainW.Kernighan与Dennis.M.Ritchie联合出版一书TheCProgrammingLanguage成为ANSIC之基础。
1983年,美国标准化协会(ANSI)制定了ANSIC。
ANSIC为基础:
不同机器有不同版本,尤其是函数均应参考相应的机器。
1.2C语言的特点语言的特点只有通过学习,方可理解C之特点,先简叙之:
1.简洁、紧凑、方便、灵活简洁、紧凑、方便、灵活32个关键字,9种控制语句,主要用小写字母,压缩一切不必要成分2.运算符丰富运算符丰富除了最基本的、%等运算外,还将括号、赋值、类型强制转换等均作为运算符,共有34种运算符。
3.数据结构丰富数据结构丰富除基本类型外,有指针,结构体、共同体等类型。
4.具有结构化的控制语句具有结构化的控制语句模块完整,控制中的语句可完整化。
5.语法严格,但有灵活性语法严格,但有灵活性如:
数据类型可相互通用:
整型、字符型通用。
6.可与机器硬件打交道,直接访问内存地址,具可与机器硬件打交道,直接访问内存地址,具有有“高高”、“低低”级语言之功能。
级语言之功能。
7.生成目标代码质量高,执行效率高。
生成目标代码质量高,执行效率高。
8.可移植性优于汇编语言。
可移植性优于汇编语言。
1.3简单的简单的C程序介绍程序介绍为了更好、更快地掌握C程序,我们先看几个C语言程序:
例1.main()printf(Thisisacprogramn);例2.main()/*求两个数之和*/inta,b,sum;/*这是定义变量*/a=123;b=456;sum=a+b;printf(sumis%dn,sum);例3.main()/*主函数*/inta,b,c;/*定义变量*/scanf(%d,%d,&a,&b);/*输入变量a和b的值*/c=max(a,b);/*调用max函数,将得到的值赋给c*/printf(max=%d,c;)/*输出c的值*/intmax(x,y)intx,y;/*对形参x、y作类型定义*/intz;/*max函用到的变量z,也要加以定义*/z=y;if(xy)z=x;return(z);/*将z的值返回,通过max带回调用处*/通过分析,初步看到通过分析,初步看到:
1.C程序全部由一个一个的函数构成。
至少有一个主函数main(),其它函数可被主函数调用或相互调用。
其它函数可为C函数库中函数,也可为自己编的函数。
上述特点称为程序的模块化.2.函数的构成:
函数说明+函数体函数体:
变量定义与执行语句可允许空函数:
dump()函数说明包括:
函数名、类型、属性、参数等3.函数的执行一定从main()开始。
尽管main()函数位置可自由。
4.书写自由,一个语句可多行,一行可多个语句。
5.每一条语句必须有一个分号;6.C语言的输入/出均以函数形式出现。
scanf(),printf().7.可用/对C语言加注释第二章数据类型、运算符与表达式2.1.数据类型数据类型著名计算机科学家沃思提出:
程序数据结构算法所以,存放数据的方式直接反映了一种语言的数据表达能力。
数据的存储方式又称之为:
数据类型。
举一个例子:
以考生各科成绩及总分排队问题为列。
成绩的存放以数组形式排队方法算法前面已述.C数据类型丰富,分为:
基本类型构造类型指针类型空类型整型字符型实型单精度双精度数组结构体共用体数据有常量、变量之分,均为其中一种类型。
本章先学习基本类型。
枚举2.2常量与变量常量与变量2.2.1常量和符号常量常量和符号常量常量程序运行过程中不能被改变的量。
一般的数据显式写法均表示常量。
如程序中:
20整型常量15.8实型常量a字符常量例:
#definePRICE30main()intnum,total;num=10;total=num*PRICE;printf(total=%d,total);还可用一个符号表示一个常量符号常量符号常量(一般用大写,以区分变量)再如:
=3.1415629#definePAI3.1415629#definePRICE302.2.2变量变量程序执行中可以改变的量称为变量。
变量包括变量名和变量值。
变量名用标识符命名,对应一定数量的内存存贮单元,其单元数视变量类型而定。
标识符由字母、数字、下划线组成且由字母或下划线开头的字符串。
标识符可用来命名变量及作为常量名、函数名、类型名、文件名等,一个程序内不得有重复名。
如:
_sum,sum,student_name,price等习惯上,变量名、函数名等用小写字母表示。
常量名用大写字母表示(以增加可读性)。
另:
需注意标识符长度,视不同系统而定。
设允许8个字符。
则:
student_namestudent_number为同一名字。
C语言中,变量须先定义,后使用如:
intstudentstudent=30;则若写成student=30,则未定义,编译时指出其错。
一旦变量被定义,即可在编译时为其分配相应数量的单元。
一旦变量被定义,其类型便确定。
则可检查其运算的合法性。
如:
a%b表示a整除以b的余,则a,b必须为整型量。
2.32.3整型数据整型数据2.3.1整型常量整型常量整型常量整型常数C语言提供了三种形式十进制如:
256,308,120等八进制以数字0开头表示的整数例:
0235,0146012等.0235=28238515710014618248610210012(182)1010十六进制以0x开头的整型数如:
0x16,0x282.3.2整型变量整型变量一、分类:
一、分类:
分为四种:
基本型、短整型、长整型、无符号型2.短整型:
用shortint或short定义3.长整型:
用long或longint定义1.基本型:
用int定义4.无符号型:
不存放符号,则不带符号数.又分无符号整型,无符号短整型,无符号长整型。
上述各种类型所占内存单元数及取值范围视不同机器而不同。
详见P13。
二、定义方法二、定义方法整型变量分别以下列方式定义2.短整型shortint或shorta,b,c;3.长整型longint或longa,b,c;1.基本整型:
inta,b,c;4.无符号型unsigneda,b,c;unsignedshorta,b,c;unsignedlonga,b,c;例:
main()inta,b,c,d;/*指定a,b,c,d为整型变量*/unsigndu;/*指定u为无符号整型变量*/a=12;b=24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);由此看到:
不同类型的整型数据可进行算术运算。
但有一定规则,见2.7.运行结果为a+u=22,b+u=14三、关于整型常量三、关于整型常量程序中出现的整型常数,系统按以下规则分配变量(内存单元)或赋值给相应变量2.若超越,而在21474836482147483647之间,则可赋给longint变量。
1.当常数(量)在3276832767之间,则可赋给int,longint变量。
4.一个非负整数,=,=,!
=4.位运算符,&.5.赋值运算符=等6.条件运算符?
等7.逗号运算符,8.指针运算符*,&11.分量运算符,12.下标运算符13.其它运算符如函数的调用()9.求字节数运算符sizeof10.强制类型转换运算符(类型)2.8.2算术运算符和算术表达式算术运算符和算术表达式一、基本算术运算符+加法正值3+6,+3减法负值64,5乘法38/除法8/5%求余7%4的值为3注:
两个整型数据相除(结果为整,一般向零靠拢)。
5/31“/”中,有一个float,则结果为double型,使用时千万注意int/int出现数据丢失。
二、算术表达式及算术运算符的优先级与结合性运算对象:
常量、变量、函数等优先级:
(),/,%,+,结合性:
同一优先级,自左向右,为左结合性,反之为右结合性。
例:
ab/c1.5+ade当类型不同的数据进行运算时,按2.7介绍的类型转换。
算术表达式:
用算术运行运算符和括号将运算对象连接起来,且符合C语法规则的式子。
三、可利用强制类型转换运算符将一个算术表达式转换为所需类型形式:
(类型名)(表达式)例如:
(double)a将a转换为double(int)(x+y)将x+y转换为int(float)(5%3)将5%3转换为float注:
1.括号不能省略。
如:
intx会理解为变量intx.2.转换后的类型数据由系统分配一个中间变量存放,而原变量类型不变。
floatx;又如:
(int)(x+y)若省略:
(int)x+y会变成将x转成整型.(int)x;则x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。
例:
main()floatx;inti;x=3.6;i=(int)x;printf(x=%d,x,i);则:
x=3.600000,i=3.总结以上类型转换,有二种:
1.强制另:
强制类型转换运算优先于算术运算符.2.系统自动如:
若x为float,则x%3不合法。
但可用(int)x%3来解决。
(附录III介绍了优先级)四、自增,自减运算符设有inti=3;+自增1自减1则:
+i,i+都会使i变为4,但有区别:
+i:
先使i值+1,再使用i值;i+:
先使用i值,再使i值+1.j=+i;j=4,i=4.(i=i+1;j=i;)j=i+;j=3,i=4.(j=i;i=i+1)同理:
i,i,均使i值1,但:
又如:
printf(i=%dn,i+);结果:
i=3若:
printf(i=%dn,+i);结果:
i=4i:
先使i值1,再使用i值;i:
先使用i值,再使i值1i=3;几点注意:
1.+和运算法只能用于变量,不得用于常量和表达式.2.+,的结合性为从右至左,而一般算术运算符为从左至右。
如:
如5+,(a+b)+均为不合法.i+和+为同一优先级.i+相当于(i+)若i=3,则结果为3,i为4.+,主要用于循环变量自增或自减。
1.要慎用+、运算符。
五、有关表达式使用中的问题说明则:
先对i进行3次自加,为6,然后三个i相加为18,而i为6。
如:
表达式(i+)+(i+)+(i+)(i=3