(15)--第02章 C语言概述C语言程序设计.ppt
第2章 C语言概述本章内容2.1简单C程序2.2C语言程序开发与环境2.3C语言的基本组成2.4C语言特点2.5学好C语言的关键2.6C语言的发展史本章学习目标了解C语言的发展历史和主要特性了解C语言的基本组成掌握C程序的基本结构掌握C程序开发的基本步骤和调试过程具有简单C语言程序设计和开发能力学习导引C语言是国际上最广泛流行的高级程序设计语言之一C语言具有语言简洁、使用灵活、移植性好、直接控制硬件等特点C语言由标识符、关键字、表达式、语句和函数等组成C程序是由函数组成的,函数由语句组成一个程序至少要有一个main函数TIOBE排行榜https:/ 简单C程序2.1.1入门程序2.1.2求面积2.1.3求某日为一年中第几天2.1.4统计字符串中不同字符的个数2.1 简单C程序学习一门新的程序设计语言学习一门新的程序设计语言、掌握一个、掌握一个编程工具与环境编程工具与环境的唯一途的唯一途径径就是就是从从编写编写简单程序简单程序开始开始编辑源程序、编译程序、生成程序、调试程序、测试程序、发布编辑源程序、编译程序、生成程序、调试程序、测试程序、发布程序程序C语言的学习从编写语言的学习从编写4个简单程序开始个简单程序开始2.1.1 入门程序程序员编写C语言的第一程序,显示字串“Hellotheworld.”/*ThisisthefirstCprogram*/*第1行注释*/#include/*第2行包含头文件*/intmain()/*第3行main函数头*/*第4行函数体的开始*/printf(“Hellotheworld.n);/*第5行显示字符串到屏幕上的函数*/return0;/*第6行正常执行完毕的返回值0*/*第7行函数体的结束*/保存到hello.c源程序文件,在Windows中使用VisualC+6.0工具编译连接生成hello.exe,执行hello.exe程序,则屏幕上显示“Hellotheworld”2.1.1 入门程序解释任何C语言源程序都是由函数组成的函数由函数头和函数体组成函数体中包含一些语句,用于完成指定的计算操作每个C语言源程序有且仅有一个main函数,main函数是程序开始执行的唯一入口、执行的主要框架(调用库函数、用户自定义函数来完成设计的功能)2.1.1 入门程序解释使用库函数,需要使用编译预处理命令-宏包含命令include,指引相应的头文件,例如本程序的库函数printf需要的头文件stdio.h#include编译预处理命令include是一条文件包含命令,它是将其后尖括号或双引号“”内的头文件stdio.h包含到源程序中,主要目的是让stdio.h头文件中的printf函数原型包含到源程序中,让程序员按照指定的函数格式使用编译预处理命令还有define、ifdef、ifndef等等。2.1.1 入门程序解释源程序第37行是main的定义main是函数名;函数体是从开始,到结束本程序中main函数体只有一个printf函数和一个return语句构成本程序中main函数返回值类型是int,指明了return语句后面表达式的数据类型定义或调用的函数名之后是用一对圆括号()括起来的参数列表,即使没有参数,函数后的()不能省略/*ThisisthefirstCprogram*/*第1行注释*/#include/*第2行包含头文件*/intmain()/*第3行main函数头*/*第4行函数体的开始*/printf(“Hellotheworld.n);/*第5行显示字符串到屏幕上的函数*/return0;/*第6行正常执行完毕的返回值0*/*第7行函数体的结束*/2.1.1 入门程序解释源程序第5行是main函数体中调用printf函数语句调用函数是按照函数定义的形式参数要求,给出实际参数列表,并用一对圆括号括起来即可。在本例中用双引号括起来的字符串就是printf的一个参数。执行printf函数就把其参数的字符串在屏幕上显示出来。查看显示结果,发现没有显示出来“n”这两个字符,它们是C语言的转义符,表示回车换行的意思,即在显示过程中遇到它,从下一行的最左端开始接着输出。printf函数的后面分号;表示函数语句结束C语言是区分大小写字母的。例如,printf和PRINTF并不相同。/*ThisisthefirstCprogram*/*第1行注释*/#include/*第2行包含头文件*/intmain()/*第3行main函数头*/*第4行函数体的开始*/printf(“Hellotheworld.n);/*第5行显示字符串到屏幕上的函数*/return0;/*第6行正常执行完毕的返回值0*/*第7行函数体的结束*/2.1.1 入门程序解释源程序的第6行是return语句return语句的作用是将其后面的表达式的值作为main执行的结果值返回给调用main函数的上级程序或操作系统本例中,函数正常执行完毕,把表示正常的0返回。如果在main函数中存在一些异常,可以按照协商好的值表示这些异常,如1表示文件不存在,2表示网络不通等return语句另外一个作用是结束函数的执行,即使后面还有语句也得结束,所以程序员要正确应用return语句,否则函数不能实现指定的目标/*ThisisthefirstCprogram*/*第1行注释*/#include/*第2行包含头文件*/intmain()/*第3行main函数头*/*第4行函数体的开始*/printf(“Hellotheworld.n);/*第5行显示字符串到屏幕上的函数*/return0;/*第6行正常执行完毕的返回值0*/*第7行函数体的结束*/2.1.1 入门程序解释源程序第1行是注释(Comments)信息块注释包含在/*与*/之间的内容,还有行注释,即/之后的单行注释C语言中,注释是为了增加程序的可读性,人为增加的文本信息,主要用来说明程序的功能、用途、符号的含义、程序的实现方法、编程的人与合作者、编程的时间与版本等,注意块注释不能嵌套预编译处理时将所有的注释都用空格(或者空白符)代替,所以注释的多少内容都无关紧要注释是一个非常重要的机制,没有注释的程序就不能算是高质量的程序,一定要养成对程序加注释的习惯/*ThisisthefirstCprogram*/*第1行注释*/#include/*第2行包含头文件*/intmain()/*第3行main函数头*/*第4行函数体的开始*/printf(“Hellotheworld.n);/*第5行显示字符串到屏幕上的函数*/return0;/*第6行正常执行完毕的返回值0*/*第7行函数体的结束*/2.1.2 求面积一般程序要处理输入的数据,把执行结果输出。本例输入圆的半径,自动计算出来圆的面积/*ThisisthesecondCprogram*/*第1行*/#include/*第2行*/#definePI3.1415926/*第3行宏定义的值*/intmain()/*第4行*/*第5行*/floatr,area;/*第6行变量r代表半径,s代表面积*/printf(请输入圆的半径:);/*第7行在屏幕上显示提示信息*/scanf(%f,&r);/*第8行从键盘输入浮点数到变量r*/area=PI*r*r;/*第9行按照圆的面积求解s的值*/printf(圆的面积:%fn,area);/*第10行显示面积s的值*/return0;/*第11行*/*第12行*/请输入圆的半径:10.6圆的面积:352.9893802.1.2 求面积解释源程序的第3行宏定义了的值,并用宏名PI来代表。通常宏定义中用全部大写的标识符作为宏名,代表了宏的值。本程序用一个标识符代表一个常量,称为符号常量,即标识符形式的常量;符号常量通常用#define宏定义。本例中宏PI代表了“3.1415926“这个文本串。在编译之前的预处理中,所有出现PI的地方都用“3.1415926“这个文本串来替换当设定圆的面积精度不高时,可以在宏定义处,简单修改“3.14”就可以修改整个源代码中所有的PI,这就是宏定义的优越之处/*ThisisthesecondCprogram*/*第1行*/#include/*第2行*/#definePI3.1415926/*第3行宏定义的值*/intmain()/*第4行*/*第5行*/floatr,area;/*第6行变量r代表半径,s代表面积*/printf(请输入圆的半径:);/*第7行在屏幕上显示提示信息*/scanf(%f,&r);/*第8行从键盘输入浮点数到变量r*/area=PI*r*r;/*第9行按照圆的面积求解s的值*/printf(圆的面积:%fn,area);/*第10行显示面积s的值*/return0;/*第11行*/*第12行*/2.1.2 求面积解释源程序的第6行是变量声明或变量定义定义r和area两个浮点类型变量,存储输入半径值、按公式求解的面积值float是C语言的关键字,表示其后的r和s两个变量是单精度浮点类型变量的声明通知编译器分配两个能够存储浮点数的存储单元,并通过变量名按照float规范使用这存储单元/*ThisisthesecondCprogram*/*第1行*/#include/*第2行*/#definePI3.1415926/*第3行宏定义的值*/intmain()/*第4行*/*第5行*/floatr,area;/*第6行变量r代表半径,s代表面积*/printf(请输入圆的半径:);/*第7行在屏幕上显示提示信息*/scanf(%f,&r);/*第8行从键盘输入浮点数到变量r*/area=PI*r*r;/*第9行按照圆的面积求解s的值*/printf(圆的面积:%fn,area);/*第10行显示面积s的值*/return0;/*第11行*/*第12行*/2.1.2 求面积解释源程序的第8行是scanf函数语句,用于输入r变量的值scanf函数的参数分为两部分:一是双引号的内容,用于指定输入的数据的格式,%f就是说明按照十进制浮点数形式输入数值;二是输入的数据存放的变量地址scanf需要知道变量在内存中的确切位置,为此引入取变量地址运算符&,&r的含义就是“变量r的地址”。执行scanf函数,显示光标,等待用户输入,从键盘读入浮点数,经过scanf函数格式转换为C语言中单精度浮点数的内存映像,送到变量r,便于后面程序,引用变量r的值/*ThisisthesecondCprogram*/*第1行*/#include/*第2行*/#definePI3.1415926/*第3行宏定义的值*/intmain()/*第4行*/*第5行*/floatr,area;/*第6行变量r代表半径,s代表面积*/printf(请输入圆的半径:);/*第7行在屏幕上显示提示信息*/scanf(%f,&r);/*第8行从键盘输入浮点数到变量r*/area=PI*r*r;/*第9行按照圆的面积求解s的值*/printf(圆的面积:%fn,area);/*第10行显示面积s的值*/return0;/*第11行*/*第12行*/2.1.2 求面积解释源程序的第9行是求面积表达式,并把PI、r、r三个数的乘积值赋值给变量s在C语言中两个数相乘的运算符是*操作数和运算符写成的式子,在C语言中称为表达式,表达式PI*r*r表示了求出PI*r的积再与r相乘,即求解出圆的面积值通过运算符“=“赋值给变量area,即把结果值放到area变量所代表的内存中。C语言的赋值运算,把右边的表达式计算的结果赋值给左边的变量。/*ThisisthesecondCprogram*/*第1行*/#include/*第2行*/#definePI3.1415926/*第3行宏定义的值*/intmain()/*第4行*/*第5行*/floatr,area;/*第6行变量r代表半径,s代表面积*/printf(请输入圆的半径:);/*第7行在屏幕上显示提示信息*/scanf(%f,&r);/*第8行从键盘输入浮点数到变量r*/area=PI*r*r;/*第9行按照圆的面积求解s的值*/printf(圆的面积:%fn,area);/*第10行显示面积s的值*/return0;/*第11行*/*第12行*/2.1.2 求面积解释源程序的第10行printf函数是输出结果通常printf函数的参数分为两部分:一是双引号的内容,用于指定输出提示信息的字符和输出的格式字符串,其中%f是指定按照十进制浮点数输出;二是输出的变量列表,逗号分开在执行printf函数时,双引号内的常规字符原样输出,变量序列中的值按照格式要求在相应的%开始的字符串位置输出,本语句即用变量area的十进制串352.989380取代%f/*ThisisthesecondCprogram*/*第1行*/#include/*第2行*/#definePI3.1415926/*第3行宏定义的值*/intmain()/*第4行*/*第5行*/floatr,area;/*第6行变量r代表半径,s代表面积*/printf(请输入圆的半径:);/*第7行在屏幕上显示提示信息*/scanf(%f,&r);/*第8行从键盘输入浮点数到变量r*/area=PI*r*r;/*第9行按照圆的面积求解s的值*/printf(圆的面积:%fn,area);/*第10行显示面积s的值*/return0;/*第11行*/*第12行*/2.1.3 求某日为一年中第几天编写用户自定义函数intmonthdays(intiyear,intimonth),实现判断是否为闰年;从而求解某年某月的某天是该年的第几天程序首先从键盘输入年月日到变量year、month、day;其次调用自定义函数求解year年的前(month-1)月的天数,再加上当月天数day就是所求解决自定义函数intmonthdays(intiyear,intimonth)先按照平年计算第1月-第imonth月的天数,如果为第3月-12月再进行闰年判断,决定是否再加上一天。2.1.3 求某日为一年中第几天/*This is the third C program*/*第1行*/#include /*第2行*/int monthdays(int iyear,int imonth);/*第3行,自定义函数声明*/int main()/*第4行*/*第5行*/int year,month,day,days;/*第6行,定义四个变量*/printf(请按照yyyy-mm-dd格式输入年月日:);/*第7行*/scanf(“%d-%d-%d”,&year,&month,&day);/*第8行,输入日期*/days=day+monthdays(year,month);/*第9行调用自定义函数参与计算*/printf(%d月%d日是%d年的第%d天n,month,day,year,days);/*第10行*/return 0;/*第11行*/*第12行*/2.1.3 求某日为一年中第几天int monthdays(int iyear,int imonth)/*第13行,自定义函数实现*/*第14行*/int days=0;/*第15行,定义累加器,并初始化为0*/switch(imonth)/*第16行,多分枝语句switch判断*/case 1:days=0;break;/*第17行,1月之前天数为0天*/case 2:days=31;break;/*第18行,2月之前天数为31天*/case 3:days=59;break;/*第19行,3月之前天数暂定31+28天*/case 4:days=90;break;/*第20行,4月之前天数暂定59+31天*/case 5:days=120;break;/*第21行,5月之前天数暂定90+30天*/case 6:days=151;break;/*第22行,6月之前天数暂定120+31天*/case 7:days=181;break;/*第23行,7月之前天数暂定151+30天*/2.1.3 求某日为一年中第几天 case 8:days=212;break;/*第24行,8月之前天数暂定181+31天*/case 9:days=243;break;/*第25行,9月之前天数暂定212+31天*/case 10:days=273;break;/*第26行,10月之前天数暂定243+30天*/case 11:days=304;break;/*第27行,11月之前天数暂定273+31天*/case 12:days=334;break;/*第28行,12月之前天数暂定304+30天*/default:return-1;/*第29行,若imonth值不是112则返回-1表示出错*/*第30行,结束switch语句*/if(imonth2)&(iyear%400=0|(iyear%4=0&iyear%100!=0)/*第31行,imonth为312月则需要闰年判断*/days=days+1;/*第32行,if条件成立则天数再增加1天*/return days;/*第33行,返回imonth月之前天数*/*第34行,自定义函数结束*/2.1.3 求某日为一年中第几天在Windows操作系统中运行该程序编译生成的可执行程序days.exe时,首先显示按照yyyy-mm-dd格式输入年月日信息,光标闪烁等待用户输入,切记用中划线分隔开输入的三个数,如下所示输入2020-07-29,再输入回车键。将计算出7月29日是2020年的第221天,运行结果如下所示:请按照yyyy-mm-dd格式输入年月日:2020-07-297月29日是2020年的第211天 2.1.3 求某日为一年中第几天源代码由主函数main()和自定义函数monthdays()组成,主函数中调用自定义函数,不仅使程序简洁,同时也使main函数的逻辑结构清晰,提高程序的可读性,使程序的正确性得到保证从本程序中可以看出,函数具有封装性、可重用性,大大提高了C程序的开发效率开发C语言程序,实际上就编写若干自定义函数,调用库函数,实现系统设计的功能2.1.3 求某日为一年中第几天源代码的第3行是一个函数声明它是自定义函数intmonthdays(intiyear,intimonth)的函数原型,以分号结束;其目的是告诉本源代码文件中本语句以后的其他函数或语句,monthdays()的返回值数据类型,参数列表是什么(多少个参数、相应的数据类型是什么)。函数monthdays()可以根据需要可以多次被调用,计算year年month月之前本年的天数。函数intmonthdays(intiyear,intimonth)具体实现是在第1334行/*This is the third C program*/*第1行*/#include /*第2行*/int monthdays(int iyear,int imonth);/*第3行,自定义函数声明*/int main()/*第4行*/*第5行*/int year,month,day,days;/*第6行,定义四个变量*/printf(请按照yyyy-mm-dd格式输入年月日:);/*第7行*/scanf(“%d-%d-%d”,&year,&month,&day);/*第8行,输入日期*/days=day+monthdays(year,month);/*第9行调用自定义函数参与计算*/printf(%d月%d日是%d年的第%d天n,month,day,year,days);/*第10行*/return 0;/*第11行*/*第12行*/2.1.3 求某日为一年中第几天源代码的第8行是scanf函数输入年月日输入三个整数代表年月日,因为scanf的格式串中三个整数之间的分隔符为“-“中划线,所以输入的年月日串中也要采用中划线的方式分割scanf仅仅是输入三个整数,对于负数、第14月、第0天等非法日期数据也可以输入,所以需要程序员通过编写其他代码段以确保用户输入的年月日符合日期含义要求/*This is the third C program*/*第1行*/#include /*第2行*/int monthdays(int iyear,int imonth);/*第3行,自定义函数声明*/int main()/*第4行*/*第5行*/int year,month,day,days;/*第6行,定义四个变量*/printf(请按照yyyy-mm-dd格式输入年月日:);/*第7行*/scanf(“%d-%d-%d”,&year,&month,&day);/*第8行,输入日期*/days=day+monthdays(year,month);/*第9行调用自定义函数参与计算*/printf(%d月%d日是%d年的第%d天n,month,day,year,days);/*第10行*/return 0;/*第11行*/*第12行*/2.1.3 求某日为一年中第几天源代码的第9行是赋值语句调用自定义函数monthday(year,month),获得year年中month月之前的总天数,再加上输入的day日,就可以得到days,即year年month月day日在year年是第days天通过第10语句输出该总天数/*This is the third C program*/*第1行*/#include /*第2行*/int monthdays(int iyear,int imonth);/*第3行,自定义函数声明*/int main()/*第4行*/*第5行*/int year,month,day,days;/*第6行,定义四个变量*/printf(请按照yyyy-mm-dd格式输入年月日:);/*第7行*/scanf(“%d-%d-%d”,&year,&month,&day);/*第8行,输入日期*/days=day+monthdays(year,month);/*第9行调用自定义函数参与计算*/printf(%d月%d日是%d年的第%d天n,month,day,year,days);/*第10行*/return 0;/*第11行*/*第12行*/2.1.3 求某日为一年中第几天第1334行是自定义函数实现第13行是monthday(intiyear,intimonth)函数头,给出了函数返回值和参数列表,注意该行没有分号第14行和第34行的两个花括号为函数体的开始和结束。第14行定义了一个整型变量days,临时存储iyear年imonth月之前的天数第1630行是一个多分支switch语句,先按照平年计算imonth月之前天数days;如果输入的月份不是1-12,则直接return(-1),表示本函数执行错误、或者本函数执行前提条件不满足在第31行if语句是判断iyear是否为闰年,同时imonth为312月;如果条件满足,在第32行实现days再加上一天。正常求解出iyear年imonth月之前的天数在第33行是函数的返回语句,把days的值返回给调用者2.1.4 统计字符串中不同字符的个数程序设计语言中字符串是非常重要的内容。在C语言中字符串和字符数组是密切相关的,字符数组以0结束的就变成了字符串。C语言专门有一个头文件strings.h,包含了很多关于字符串的库函数从键盘输入一个字符串先保存在字符数组中,依次从字符数组中取出一个字符,判断是字母(大小写都是字母)、空格、数字或者其他字符的类别,并在相应的计数器中增加1,这样反复取字符进行分类判断,直到字符串结尾为止,从而可以统计出字符串中不同类别的字符个数2.1.4 统计字符串中不同字符的个数/*This is the fourth C program*/*第1行*/#include stdio.h /*第2行*/#include conio.h /*第3行,getch函数原型所在头文件*/int main()/*第4行*/*第5行*/char c;/*第6行,定义字符变量c*/int letters=0,space=0,digit=0,others=0;/*第7行,定义四个累加器并初始*/int i=0;/*第8行,指示分析字符串的当前位置*/char str120;/*第9行,定义长度为120的字符数组*/printf(please input a English string:n);/*第10行*/gets(str);/*第11行,从键盘输入一个字符串保存到str*/2.1.4 统计字符串中不同字符的个数 while(c=stri)!=0)/*第12行,从str的i位置取一个字符*/*第13行*/if(c=a&c=A&c=0&c大于、小于标点字符,:;?点、逗号、冒号分号、问号位运算字符&|!按位与、或、非取反、异或括号字符()双引号、单引号、圆括号方括号、花括号特殊字符3个空白符#_空格与制表符及回车、#号、反斜杠、下划线一个C源程序是C语言字符构成的一个序列。C语言字符集共有94个字符,其中有大小写字母52个和数字符10个,另外还有其它字符32个,如右表所示:2.3.2 C语言的词C语言的词是由一个或多个字符组成,构成C程序的最小有意义的单位。C语言的词按照词意和用途可以分为六类:标示符、关键字、常量、运算符、分隔符和注释符。2.3.2 C语言的词-标示符标示符是程序中为对象起的名字,以便于在其它地方使用每种程序语言都规定了在程序中描述名字的规则,C语言规定,标识符由字母、数字或下划线_组成,它的第一个字符必须是字母或下划线在C程序中,标示符用于给变量、常数、数组、函数、文件、数据类型等的命名,为了提高可读性和构造的方便性,起名字要做到“见其名而知其意”,如定义判断素数的函数名为isPrime、定义年份的变量为year2.3.2 C语言的词-标示符C语言规定,标识符中同一个字母的大写与小写被看作是不同的字符,即字母大小写敏感,例如:aa和AA,AB和Ab,sum、Sum和SUM,它们是互不相同的标识符常见的非法标识符4xy(以数字开头)x5+y6(出现非法字符+)a#7(出现非法字符#)!sum_1(出现非法字符!)Mn7(以非法号开头)max-b1(出现非法字符)$xz_1234(出现非法字符$)M.J.ttY(出现非法字符.)2.3.2 C语言的词-关键字语言有一些有特定意义和用途的标示符,称这样的标示符为关键字或者保留字。C语言关键字不允许用户挪为他用描述类型定义描述存储类型描述数据类型描述语句typedefautocharbreakvoidexterndoublecontinuestaticfloatswitchregisterintcaselongdefaultshortifstructelseuniondounsignedforconstwhileenumgotosignedreturnvolatilesizeof2.3.2 C语言的词-常量常量是程序在运行过程中,其值始终保持不变的量,由它们的形式就可以判断其是什么类型。常量分为5类,第一类为整数常量,如100、0 xffab(十六进制)、074(八进制);第二类为字符常量,如A;第三类为实数常量,如12.4、1e-6等;第四类为字符串常量,如“Hello”;第五类为定义变量型常量,如constfloatpi=3.14。经常把#define宏定义也视为常量,例如#definePI3.14159,预处理时用宏定义进行宏名的全部替换2.3.2 C语言的词-运算符C语言的特色之一,它是具有丰富的运算符在C语言中的运算符是指何处取值、进行何种运算,结果具有何种类型,又送往何处的统称按照运算符需要参与运算的操作数的个数,可以分为一目运算符、二目运算符、三目运算符C程序的表达式通常很复杂,不同类别的运算经常混合在一起,为了判断计算的优先次序,要对运算符划分优先级和结合性(同一个类别的运算符一起出现时的计算次序)2.3.2 C语言的词-分隔符分隔符是起分隔作用的符号空格、制表符、回车统称为C语言的空白符,用于分隔单词使用,使用一个或多个,含义上是相同的分隔符含义逗号对象列表中对象的分隔,如intx,y;intmain(intagrc,char*args);空格用于单词之间的分隔,可以连续使用一个或多个制表符制表符Tab也是用于分隔单词,可以连续使用一个或多个回车C语言行结束字符,也可以分隔单词分号用于每个语句的结束符,在for语言中()内的三个部分的分隔冒号用于定义语句标号花括号一对花括号是函数、复合语句的开始和结束的标识2.3.3 语句C语言的词按照语法要求就可以构成语句,通常用分号结束,复合语句中最后一条语句有分号即可语句是组成程序的基本语法单位,表示一个完整的意思,告诉计算机完成某个动作,或改变对象的数据、或改变程序的顺序,C语句有机组合在一起就可以实现复杂计算处理功能C语言有执行语句和说明语句两大类2.3.3 语句-执行语句语句格式赋值语句=;if条件语句if()elsewhile循环语句while()语句do循环语句dowhile()for循环语句for(表达式1;表达式2;表达式3)switch分支语句switch(表达式)case语句或default语句case判断语句case:default缺省语句default:break中断语句break;continu继续语句continue;return返回语句return;或者return(表达式);goto转移语句goto标号;函数调用语句函数名(实参列表);空语句;2.3.3 语句-说明语句说明语句就是数据类型说明语句,告诉计算机定义的变量,说明了变量的数据类型、变量名称、变量的初始化列表、变量的生命周期(或者称为变量的使用范围)类型名称关键字整数类型int字符类型char单精度类型float双精度类型double枚举类型enum数组类型数据类型数组名常量表达式结构体类型struct共用体类型union文件类型FILE指针类型*空类型void2.3.4 C程序的结构C程序通常由一个main函数和多个自定义函数组成,用于完成应用程序实际所需要做的功能;C程序中经常使用C语言的库函数;使用时,只需要调用函数就可以了一个C语言开发的应用程序可以由一个或多个C源程序文件组成,C语言的源代码可以由多个*.c和*.h文件组成,采用工程项目的方式实施管理2.3.5 C程序的书写风格程序设计是一门艺术,需要相应理论、技术、方法和工具的支持。程序设计风格是指程序员编写程序时所表现出来的特点、习惯性逻辑思路等良好的程序设计风格不仅有助于提高程序的可靠性、可理解性、可测试性、可维护性和可重用性,而且也能够促进技术的交流,改善软件的质量。所以培养良好的程序设计风格对于初学者来说非常重要。养成良好的程序设计风格2.3.5 C程序的书写风格1源程序文档化标识符的命名匈牙利命名法程序注释提高可读性视觉组织缩进的嵌套结构层次2.3.5 C程序的书写风格2数据说明的方法数据说明的次序规范化说明语句中变量安排有序化使用注释来说明复杂数据结构2.3.5 C程序的书写风格3语句的结构在一行内只写一条语句;除非对效率有特殊要求,程序编写要遵循清晰第一、效率第二的原则;避免使用临时变量而使程序可读性下降;避免不必要的转移;尽可能使用库函数;避免使用复杂的条件语句,尽量减少使用“否定”条件的条件语句;从数据出发去构造程序,数据结构的选择要有利于程序的简化;使模块功能尽可能单一化,并确保每一个模块的独立性。2.3.5 C程序的书写风格4输入和输出要检验输入数据的合理性,并检查输入项的各种重要组合的合理性;输入格式要简单;输入数据时,应允许使用自由格式;输入一批数据时,最好使用输入结束标志;交互输入方式进行输入时,要在屏幕上使用提示符明确提示输入要求;在数据输入过程中和输入结束时应在屏幕给出状态信息。2.4 C语言特点2.4.1C语言是一种结构化程序设计语言2.4.2C语言功能强大且适用范围广2.4.3C语言可移植性好2.4.4C语言生成代码质量高2.4.5C语言规模小易掌握2.4.6C语言的不足2.4.1 C语言是一种结构化程序设计语言C语言适应于结构化编程方法在C语言中,函数是构成结构化程序的最小模块,每个函数实现一个功能,函数之间有相对的独立性,多个函数协同共同实现一个大功能C语言程序实现上就是由若干个函数组成,即由若干个模块构成的,它们可放在一个源文件中,也可放在源多个文件中2.4.2 C语言功能强大、适用范围广C语言具有各种各样的数据类型C语言包含很广泛的运算符C语言功能强大,不仅表现在它具有的高级语言功能上,还表现在它具有的低级语言功能上C语言不仅可以用来编写一些应用程序,还可以用来编写系统软件,目前Windows/Linux操作系统的管理模块很多仍然是C/C+实现的。2.4.3 C语言可移植性好C语言的编译系统较小,又具有一些预处理命令,很多功能都是采用库函数实现的,例如键盘的数据输入、显示器的数据输出等等,从而为它的移植带来一些方便。C语言的可移植性很好,程序源代码稍微修改,就能适合于多种操作系统。现实中,除了能在Windows操作系统运行外,在目前日趋流行的Linux或者Unix操作系统上也能不加修改的运行。C语言的这种较好的移植性,为开发跨操作系统的程序提供了有力的支持。2.4.4 C语言生成代码质量高C语言编写的源程序编译之后生成的目标代码质量高,程序执行效率高。一般仅仅比汇编语言生成的目标代码效率低10%20%。2.4.5 C语言规模小易掌握C语言没有提供输入输出语句,也不提供直接的字符串、集合、列表等,这些功能都需要调用C语言的函数来完成。从而C语言的规模相对较小,可以用比较小的篇幅将它描述出来,易学易用。2.4.6 C语言的不足运算符多,难用难记C语言中类型转换比较灵活,在许多情况下不做类型检查,对类型要求不够严格C语言中,给数组进行初始化是判界的,越界会发出编译错为了优化等原因允许不同的编译系统对表达式中各个操作数和参数表中各个参数有不同的计算顺序语法限制不太严格,程序设计时自由度大,源程序书写格式自由2.5 学好C语言的关键多上机多练习熟练掌握二进制与十进制、十六进制、八进制之间的相互转换理解字符与ASCII码之间的关系掌握运算符的结合性与优先级掌握三种程序控制结构掌握一些常用的算法熟练使用指针熟练掌握一个开发工具确立离散的思维方式,摈弃连续性思维方式2.6 C语言的发展史2.6.1C语言的由来2.6.2C语言的发展2.6.1 C语言的由来1963年,剑桥大学将ALGOL60语言发展成为CPL(CombinedProgrammingLanguage)语言1967年,剑桥大学的MartinRichards对CPL语言进行了简化,于是产生了BCPL语言1970年,AT&T的贝尔实验室的KenThompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”,并且他用B语言写了第一个UNIX操作系统1972年,贝尔实验室的DennisM.Ritchie在B语言的基础上最终设计出了一种新的语言,他用BCPL的第二个字母作为这种语言的名字,即C语言2.6.2 C语言的发展KenThompson于1969年在小型计算机上开发UNIX系统,后于1970年投入运行。1974年KenThompson和DennisM.Ritchie合作使用了C语言,在一台DECPDP-11计算机上,对UNIX操作系统进行了修改,提高了操作系统的可移植性。C语言的命运与UNIX操作系统紧密地联系在一起。随着UNIX操作系统的发展和推广,C语言也得到了广泛的应用和发展。2.6.2 C语言的发展B.W.Kernighan和DennisM.Ritchie合作(被称为K&R)编写了TheCProgrammingLanguage一书,从此有了标准的C语言,该书为C语言的推广使用起到了积极作用随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准化协会