C语言程序设计项目1C语言概论1项目导读项目目标项目任务项目7函数与预处理1项目8指针2项目9结构与联合34项目10文件5目录项目1C语言概述1项目2数据类型、运算符与表达式2项目3顺序结构程序设计3项目4选择结构程序设计4项目5循环结构程序设计5项目6数组与字符串5附件5项目1C语言概论1项目导读项目目标项目任务本项目主要对C语言的一些基础知识及其字符集和词汇进行介绍,使读者在学习C语言之前对其有个全面的认识。项目导读●安装、配置TC2.0或VC++6.0,成功启动TC2.0或VC++6.0。●能编写一个简单的C程序的源文件,并编译该源文件,链接目标文件得到可执行文件。项目目标任务1.1C语言的发展与特点C语言是1973年由美国的DennisRitchie设计发明的,并首次在配备了UNIX操作系统的DECPDP-11计算机上实现。它由早期的编程语言BCPL(BasicCombinedProgrammingLanguage)发展演变而来。C语言的特点1、C语言是高级语言2、C语言是结构化语言3、C语言功能齐全4、C语言适用范围广5、语言简洁、紧凑,使用方便、灵活。32个关键字、9种控制语句,程序形式自由6、运算符丰富。34种运算符7、数据类型丰富,具有现代语言的各种数据结构。8、具有结构化的控制语句,是完全模块化和结构化的语言。9、语法限制不太严格,程序设计自由度大。10、允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。兼有高级和低级语言的特点。11、目标代码质量高,程序执行效率高。只比汇编程序生成的目标代码效率低10%-20%。12、程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。任务1.2认识C语言本任务通过几个简单的C程序,介绍C语言的基本组成和格式。案例1.1main(){printf(“Thisisacprogram.\n”);}本程序的功能是输入下列一行信息:Thisisacprogram.任务1.2认识C语言程序说明:(1)main函数是“主函数”,每一个C程序必须有一个main函数。(2)函数体由大括弧{}括起来。本例中,主函数内只有一个输出语句,printf(“Thisisacprogram.\n”);是C语言的输出函数(具体详见项目3)。双引号内的字符串将照原样输出。(3)“\n”是换行符,即在输出“Thisisacprogram.”后换行。(4)分号是C语句的基本构成,每一个C语句后都应再加上分号,分号是语句的结束标志。任务1.2认识C语言本任务通过几个简单的C程序,介绍C语言的基本组成和格式。案例1.2main()/*求两数之和*/{inta,b,sum;/*本行开始的以下4条为C语句*/a=123;b=456;sum=a+b;printf(“sumis%d\n”,sum);}本程序的功能是求两数之和。任务1.2认识C语言程序说明:(1)/*……*/是注释语句,此信息对编译和运行不起作用。(2)程序第二行的含义是定义a、b和sum为整体变量。(3)“sum=a+b;”的含义是把变量a和b的和赋给变量sum。(4)该程序的输出结果是:sumis579。任务1.2认识C语言案例1.3main()/*求一个数的绝对值*/{intx,y;scanf(“%d”,&x);y=abs(x);printf(“abs=%d”,y);}intabs(intz){intw;if(z=0)w=z;elsew=-z;return(w);}本程序的功能是求z的绝对值。任务1.2认识C语言程序说明:(1)本程序包括两个函数:主函数main和被调用函数abs。(2)函数abs的作用是将z的绝对值返回给主调函数main(返回值是通过函数名abs带回到main函数的调用处的)。(3)程序中的scanf函数的作用是从键盘上输入x的值。&x中的“&”的含义是“取地址”,此scanf函数的作用是将数值输入到变量x的地址所标志的单元中去,也就是输入给变量x。关于scanf函数详见项目3。(4)main函数中的第四行为调用abs函数,在调用时将实际参数x传给abs函数中的形式参数z,然后输入y的值。(5)printf函数中双引号内的abs=%d,在输出时,其中的%d将由y值取代,“abs=”原样输出。该程序的运行结果是:假定从键盘上输入x的值为:-6↙则y=6(6)本例用到了函数调用、实际参数和形式参数等概念,只是做了简单的解释,读者若对此不大理解,可先不予深究,在学到函数项目后的相关知识后,问题自会迎刃而解。这里介绍此案例的目的,是想让读者对C语言的组成和形式有一个初步了解。任务1.2认识C语言通过以上三个例子,我们可以得到以下几点:1、C程序是由函数构成的。一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其它函数。因此,函数是C语言的基本单位。被调用函数可以是系统提供的库函数(例如printf函数和scanf函数),也可以是用户根据需要自编译的用户函数(例如案例1.3中的abs函数)。2、函数及其结构。一个函数由两部分组成:即函数首部和函数体。函数首部包括函数类型、函数名、函数参数(形参)、形参类型;函数体一般包括说明部分和执行部分。函数结构如下:函数类型函数名(形参表){↓说明部分:函数体执行部分;↑﹜函数体以左花括号“{”开始,以右花括号“}”结束,其间可以有说明部分和执行部分。在某些情况下,甚至可以既无说明部分,也无执行部分。如:dump(){}它是一个空函数,表示什么也不做,但它是合法的任务1.2认识C语言3、一个C程序中,不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序最后头,或在一些函数之前,或在另一些函数之后),但程序执行时,总是从main函数开始执行。4、C程序书写格式自由,一行中可以书写多个语句,一个语句也可以书写在连续的多行上。当一行写不下时,用连字符“-”连接,并且每条语句的后面以分号“;”作为结束标记。5、C语言本身没有输入输出语句。C语言的函数库提供了标准输入输出函数。6、可以用/*······*\对C程序中的任何一部分做注释,以增加程序的可读性。任务1.3C程序的执行过程C语言程序是一种编译型的中级语言。用C语言编写的源程序必须先进行编译和连接,生成可执行的程序之后才能执行。执行一个C语言程序一般经过如下几个步骤。1、编辑2、编译3、连接4、运行C语言程序的开发是一个由编辑开始,经过编译、连接和运行,程序如果有错误,又回到编辑的反复循环过程,如图所示。项目2数据类型、运算符与表达式1项目导读项目目标项目任务C语言中,为解决具体问题,需要采用多种类型的数据;本项目将主要介绍C语言的数据类型、常用运算符和表达式。项目导读●学会声明整型变量,为声明的变量赋值,交换变量的值,输出变量的值。●学会声明浮点型变量,为声明的浮点型变量赋值,对浮点型变量值进行加法运算,并将运算结果存放到浮点型变量中,输出浮点型变量的值。●学会声明字符型变量,为声明的字符型变量赋值,按%d或%c格式输出变量的值。项目目标任务2.1常量、变量和标示符2.1.1标识符在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符(identifier)。简单地说,标识符就是一个对象的名字。C语言规定标识符只能由字母、数字和下划线组成,且第1个字符必须为字母或下划线。下面列出的是合法的标识符,可以作为变量名:Sum,average,_total,Class,day,month,Student_name,lotus_1_2_3,BASIC,li_ling.下面是不合法的标识符和变量名:M.D.John,¥123,#33,3D64,ab注意:编译系统将大写字母和小写字母认为是两个不同的字符。因此,sum和SUM是两个不同的变量名。同样,Class和class也是两个不同的变量名。通常,变量名用小写字母表示,习惯用对应的英文字母缩写形式,做到见名知意,与人们日常习惯一致,以增加可读性。任务2.1常量、变量和标示符2.1.2常量和变量1、常量在程序运行过程中,其值不能被改变的量称为常量。如案例2.1程序中的5,9,32和案例2.2程序中的1000,0.0036,0.0225,0.0198都是常量。数值常量就是数学中的常数。常用的常量有以下几类:⑴整型常量。如1000,12345,0,-345等都是整型常量。⑵实型常量。有两种表现形式:①十进制小数形式,由数字和小数点组成。如122.456,0.345,-55.79,0.0,12.0等。②指数形式,如12.34e3(代表12.34×103),-345.87e-25(代表-345.87×10-25),0.145E25(代表0.145×10-25)等。由于在计算机输入或输出时,无法表示上标或下标,故规定以字母e或E代表以10为底的指数。但应注意:e或E之前必须有数字,且e或E后面必须为整数。如不能写成e4,12e2.5。任务2.1常量、变量和标示符⑶字符常量。有两种形式的字符常量:①普通字符,用单撇号括起来的一个字符,如‘a’,‘Z’,‘3’,‘?’,‘#’。注意:单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。‘a’和‘A’是不同的字符常量。字符常量存储在计算机存储单元中时,并不是存储字符(如a,z,#等)本身,而是以其代码(一般采用ASCII代码)存储的,例如字符‘A’的ASCII话代码是97,因此,在存储单元中存放的是97(以二进制形式存放)。ASCII字符与代码对照表见附录Ⅰ。②转义字符,除了以上形式的字符常量外,C还允许用一种特殊形式的字符常量,就是以字符﹨开头的字符序列。例如,前面已经遇到过的,在printf函数中的‘﹨n’它代表一个“换行”符。常用的以“﹨”开头的特殊字符见表2.1任务2.1常量、变量和标示符表2.1任务2.1常量、变量和标示符⑷字符串常量。如“boy”,“123”等,用双撇号把若干个字符括起来,字符串常量是双撇号中的全部字符(但不包括双撇号本身)。注意不能错写成‘CHINA’,‘boy’,‘123’。单撇号内只能包含一个字符,双撇号内可以包含一个字符串。⑸符号常量。用#define指令,指定用一个符号名称代表一个常量。如:#definePI3.1416∥注意行末没有分号经过以上的指定后,本文件中从此行开始所有的PI都代表3.1416。在对程序进行编译前,预处理器先对PI进行处理,把所有的PI全部置换为3.1416。这种用一个符号名代表一个常量的,称为符号常量。在预编译后,符号常量全部变成字面常量(3.14159)。使用符号常量有以下好处。①含义清楚。②在需要改变程序中多处用到的同一个常量时,能做到“一改全改”。任务2.1常量、变量和标示符2、变量变量代表一个有名字的、具有特定属性的存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。变量必须先定义,后使用。在定义时指定该变量的名字和类型。一个变量应该有一个名字,以便被引用。请注意区分变量名和变量值这两个不同的概念,图2.1中a是变量名,3是变量a的值,即存放在变量a的内存单元中的数据。变量名的实质是以一个名字代表的一个存储地址。在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该储存单元中读取数据。图2.1任务2.1常量、变量和标示符3、常变量如constinta=3表示a被定义为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变。常变量与常量的异同是:常变量具有变量的基本属性,有类型,占存储单元,只是不允许改变其值。可以说,常变量是有名字的不变量,而常量是没有名字的不变量,有名字就便于在程序中被引用。任务2.2数据类型在定义变量时需要指定变量的类型。C语言要求在定义所有的变量时都要指定变量的类型。常量也是区分类型的。所谓类