您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 谭浩强C语言程序设计
C语言程序设计第一章第二章第三章第四章第五章第六章第七章第一章C语言概述C语言–––既可作为系统软件的程序设计语言,又可作为应用软件的程序设计语言。尤其是当今计算机应用极为广泛,软件的设计、编写质量要求高,经常与硬件部分打交道,如:界面设计等,所以用C语言编写是最理想的。因而C语言也是当前计算机语言中用得最广泛的语言之一。§1.1C语言出现的历史背景一、操作系统的设计语言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(Thisisacprogram\n);}例2.main()/*求两个数之和*/{inta,b,sum;/*这是定义变量*/a=123;b=456;sum=a+b;printf(sumis%d\n,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.3整型数据2.3.1整型常量整型常量整型常数C语言提供了三种形式十进制如:256,308,-120等八进制以数字0开头表示的整数例:0235,0146-012等.0235=2×82+3×8+5=157100146=1×82+4×8+6=10210-012=-(1×8+2)=-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=%d\n,c,d);}由此看到:不同类型的整型数据可进行算术运算。但有一定规则,见§2.7.运行结果为a+u=22,b+u=–14三、关于整型常量程序中出现的整型常数,系统按以下规则分配变量(内存单元)或赋值给相应变量2.若超越,而在–2147483648~2147483647之间,则可赋给longint变量。1.当常数(量)在–32768~32767之间,则可赋给int,longint变量。4.一个非负整数32768则可赋给unsignedint。5.一个常数后加'l',或'L',表示长整数.如123l.主要用于函数调用时形、实参数传递。3.若int,shortint长度相同,则二者皆可赋值。§2.4实型数据2.4.1实型常量有二种表示形式1.十进制形式如:0.126,523.64等2.指数形式对于较大或较小的数,可用指数形式0.00001261.26E–512600001.26E+6或1.26E6'E','e'均可.分为单精度型与双精度型.分别为floatx,y,z;(单精度)doublea,b,c;(双精度)一般地:单精度占4字节内存单元;双精度占8字节内存单元.2.4.2实型变量注意:不同机器对实型变量的有效数字长度的限制如:pc机,单精度一般为7位,双精度15位单精度数值:10–38~1038双精度数值:10–308~10308于是:floata;a=123456.789则实际赋值a123456.7§2.5字符型数据用一对单引号括起来的单个字符。如'a','A',二者不一样.此外,以\开头后接一个字符或n个字符代表了一种特殊字符常量。–––转义字符。如\n––换行,\r––回车2.5.1字符常量其它如下表:字符形式\n\t\v\b\r\f\\\'\ddd\xxh功能换行横向跳格(即跳到下一个输出区)竖向跳格退格回车走纸换页反斜杠字符“\”单引号(撇号)字符1到3位8进制数所代表的字符1到2位16进制数所代表的字符注意:\表示ASCII码字符三位八进制如\101––表示字母A又:\x十六进制ASCII字符\x41––表示字母A其定义方式为:charc1,c2;c1='A';c2='B';字符变量只占一个字节单元。2.5.2字符变量用来存放一个字符的变量.一个字符存入一个字符变量。其对应单元存放的是其ASCII码,即ASCII码的二进制形式。由此:字符变量中的数据是一整型数据。输出时既可输出字符,亦可输出整数,且字符变量可作整数运算。2.5.3字符数据的实际存放形式例1:main(){charc1,c2;c1=97;c2=98;printf(%c%c,c1,c2)}运行结果ab看如下几个例子:例2:main(){charc1,c2;c1='a';c2='b';c1=c1–32;c2=c2–32;printf(%c%c,c1,c2)}运行结果AB例3:main(){inti;charc;i='a';c=97;printf(%c,%d\n,c,c);printf(%c,%d\n,i,i);}运行结果:a,97a,97有的系统将一个字节的整型变量的最高位,作为符号。这时对0~127之间的字符可输出正整数(ASCII)。但128~255字符最高位为1,则作为负数输出。由此最好用unsignedint存放字符整数(ASCII)。注:用双引号括起来的字符串。例:GoodMorning!注意'A'与A是不同字符串存放时,在最后加上/0––空字符。于是:GoodMorning!/02.5.4字符串常量AA/0但'A'A注意:1.字符串长度=实际字符个数+1,但最后\0不输出.printf(GoodMorning!)此处不写/0。自动加上。2.单个字符的字符串不能赋给字符变量。例:charc;c=a;是错误的。§2.6变量赋初值C语言允许定义变量时赋予初值。如:inti=6;floatx=8.35;charc='6';*也可对某个变量赋初值:inta,b,c=6;*不可能将同初值的变量赋初值时写成:inta=b=c=6;只能:inta=6,b=6,c=6;定义变量时赋初值实际上是在运行时执行一个赋初值语句:inta=6;相当于:inta;a=6;§2.7类数值型数据间的混合运算C语言允许双精度
本文标题:谭浩强C语言程序设计
链接地址:https://www.777doc.com/doc-6352363 .html