C语言项目开发教程第1章.ppt

上传人:小飞机 文档编号:5426578 上传时间:2023-07-05 格式:PPT 页数:66 大小:364KB
返回 下载 相关 举报
C语言项目开发教程第1章.ppt_第1页
第1页 / 共66页
C语言项目开发教程第1章.ppt_第2页
第2页 / 共66页
C语言项目开发教程第1章.ppt_第3页
第3页 / 共66页
C语言项目开发教程第1章.ppt_第4页
第4页 / 共66页
C语言项目开发教程第1章.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《C语言项目开发教程第1章.ppt》由会员分享,可在线阅读,更多相关《C语言项目开发教程第1章.ppt(66页珍藏版)》请在三一办公上搜索。

1、第一章,初步认识C语言,C语言是最通用和流行的计算机程序设计语言之一。在操作系统和系统实用程序以及需要对硬件进行操作的环境中,C语言明显优于其他高级语言,很多大型应用软件都是用C语言编写的。C语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的 DEC PDP-11计算机上使用。它由早期的编程语言BCPL(Basic Combind Programming Language)发展演变而来。C语言从诞生到现在已有40多年的历史,仍以其紧凑的代码、灵活的表达方式、高效的运行效率、强大的功能,以及可直接操作计算机硬件等特点,深受广大开发人员和编程爱好者的喜爱。在

2、使用C语言开发具体项目之前,需要先了解一些关于C语言以及C语言程序的相关知识。通过对本章的学习,能够对C语言的产生和发展、C语言的特点、C语言的编程风格等有一定的认识。通过每一个任务的实现,了解C语言的运行环境和C语言程序的编写和执行过程,掌握用C语言解决问题的过程。,任务1.1 学生信息管理系统之菜单设计,任务目标掌握C语言的基本知识,包括C语言的发展历史、C语言的基本特点和C语言的结构特点等。比较C语言和其他语句之间的区别。熟悉C语言的开发集成环境,学会初步创建、编写、编译和执行一个C语言程序。掌握C语言的输入和输出函数的用法。实现学生管理系统菜单设计。,1.1.1 C语言基本知识,1C语

3、言发展历史C语言的发展颇为有趣。它的原型ALGOL 60语言出现于1960年,ALGOL 60是一种面向问题的高级语言,它离硬件比较远,不适宜编写系统程序。1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。CPL语言更接近硬件,但规模比较大,难以实现。1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将BCPL语言煮干,提炼出它的精华。并且他用B语言写了第一

4、个UNIX操作系统。而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本可移植的C语言编译程序。,1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著The C Programming Language,对C语言的流行起到了很大的推动作用。1988年,随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准

5、,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准。C语言发展迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件,如DBASE PLUS、DBASE 都是由C语言编写的。用C语言加上一些汇编语言子程序,就更能显示C语言的优势了,如PC-DOS、WORDSTAR等就是用这种方法编写的。,2C语言的特点,C语言既有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不

6、仅仅是在软件开发上,就连各类科研都需要用到C语言。它适于编写系统软件、三维、二维图形和动画,具体应用比如单片机以及嵌入式系统开发。如今,越来越多的人在学习C语言,使用C语言,用C语言开发各个领域中的应用软件。C语言生命力之所以强,是因为其具有不同于其他语言的特点。其主要特点如下。(1)简洁紧凑、灵活方便。C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。(2)运算符丰富。C语言的运算符包含的范围很广泛,共有34个运算符。C语言把

7、括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富,表达式类型多样化,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。,(3)数据结构丰富。C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外,C语言具有强大的图形功能,支持多种显示器和驱动器,且计算功能、逻辑判断功能强大。(4)C语言是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式

8、提供给用户的,这些函数可方便地调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。(5)语法限制不太严格、程序设计自由度大。一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。(6)允许直接访问物理地址,可以直接对硬件进行操作。C语言允许直接访问物理地址,可以直接对硬件进行操作。因此既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。(7)C语言程序生成代码质量高,程序执行效率高。一般只比汇编程序生成的目标代码效率低10%20%。(8)C语言

9、适用范围大,可移植性好。C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。,3C语言的结构特点,先看下面的案例,通过案例来了解C程序的结构特点。【案例1-1】求两个数之和。源程序如下:#include/*将stdio.h文件包含在本程序中*/void main()/主函数/函数体开始 int a,b,c;/定义三个int类型的变量a,b,c a=3;b=2;/变量赋值 c=a+b;/将变量a和变量b的和赋给变量c printf(%dn,c);/*调用标准输出函数,按十进制整数形式输出变量c*/*函数体结束*/该程序实现的功能是求出整数数据a和b的和并输出。其中

10、a的值为3,b的值为2,将a和b的和赋值给c,然后输出变量c的值。程序运行结果如下:5Press any key to continue,代码中的“include”为文件包含命令,其意义为将或“”内指定的文件包含到本程序中,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h,因此也称为头文件或首部文件。C语言的头文件中包括了各个标准库函数的函数原型,并有对应的函数实现。程序中调用一个库函数时,都必须包含该函数原型所在的头文件。在本案例中,使用了一个库函数prtinf,即标准输出函数。其所在的头文件名为stdio.h文件,因此在程序的主函数前用include命令包含了stdio.

11、h文件。因为在程序中使用了printf()函数,该函数为stdio.h中定义的标准输出函数,为了使用printf()函数,需要将包含该函数相关信息的头文件stdio.h包含到本文件中。“int a,b,c”的作用为声明三个int,即整数类型的变量,变量名分别为a、b、c,这三个变量的取值只能为整数。“/”和“/*/”均用来表示注释。“/”用来作单行注释,其后面本行内的内容为注释信息。“/*/”用作多行注释,“/*”和“*/”之间的内容均为注释信息,可有多行。注释是给阅读程序的人看的,用来辅助理解程序,在编译和运行阶段不起作用,注释信息可以添加在任何位置。“c=a+b”用来实现加法运算,表示将a

12、和b的值相加,再赋值给b。“printf(%dn,c)”用来输出。“%d”表示输出的信息为十进制整数,“n”为换行符,在信息输出后,屏幕上闪烁的光标将会显示在该输出的下一行。mian函数是主函数的函数名,表示这是一个主函数。在主函数main()中可以调用的函数包括标准库和自定义函数。,由上述例子可以看出,C语言结构和书写特点如下:C语言是由函数组成的。一个函数有一些语句组成,共同实现某一功能。在以后的案例中我们会看到每一个函数均可被其他函数调用,也可调用其他函数,main函数除外:main函数不能被其他函数调用。C程序可以有若干个函数组成,但是其中必须有一个且只能有一个是main()。程序的执

13、行必须从主函数main()开始,在主函数main()中结束。C语言程序书写自由,一行内可以写一条或多条语句,一条语句也可以写在多行。用 括起来的部分,通常表示程序的某一种层次结构。一般情况下,左右花括号各占一行,并上下对齐,便于检查花括号的成对性。C语言程序是区分大小写的,如输入Printf则程序会报错。程序的书写根据从属关系采用缩进的格式,可使程序的层次结构更加清晰,从而提高程序的可读性。同一层次要左右对齐,第一层次的语句或说明要比高一层次的语句缩进若干个字符,这样程序层次结构更加清晰。C语言中每一条语句和数据定义都必须以“;”结束。C语言用“/”或“/*/”来表示注释。编码过程中配合良好的

14、注释,可增加程序的可读性和可维护性。对于C程序的书写格式,读者可从后面的程序中逐渐体会,编码时遵循以上规则,以形成良好的编程风格。,1.1.2 C语言与其他语言,1C到C+计算机诞生初期,人们要使用计算机必须用机器语言或汇编语言编写程序。世界上第一种计算机高级语言诞生于1954年,它是FORTRAN语言。先后出现了多种计算机高级语言。其中使用最广泛、影响最大的当推Basic语言和C语言。C语言最初不是为初学者设计的,而是为计算机专业人员设计的。大多数系统软件和许多应用软件都是用C语言编写的。但是随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了。C+是由AT&T Bell(贝尔)实验室的B

15、jarne Stroustrup博士及其同事于20世纪80年代初在C语言的基础上开发成功的。C+保留了C语言原有的所有优点,增加了面向对象的机制。C+是由C发展而来的,与C兼容。用C语言写的程序基本上可以不加修改地用于C+。从C+的名字可以看出它是C的超越和集中。C+既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型程序设计语言。C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。而对于C+,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问

16、题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。所以C与C+的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C+比C更先进,是因为“设计这个概念已经被融入到C+之中”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了?错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。语言本身而言,C是C+的子集,那么这是什么样的一个子集?从上文可以看出,C实现了C+中过程化控制及其他相关功能,而在C+中的C,相对于原来的C还有所加强,引入了重载、内联函数、异常处理等内容,C+更是拓展了面向对象设计的内容

17、,如类、继承、虚函数、模板和包容器类等。所以相对于C,C+包含了更丰富的“设计”的概念,但C是C+的一个子集,也具有强大的功能,同样值得学习。,2C语言到Java,Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了

18、显著优势和广阔前景。实际上,Java确实是从C语言和C+语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。比如Java语言的变量声明、操作符形式、参数传递、流程控制等方面和C语言,C+语言完全相同。Java与C的本质区别是Java面向对象编程,C是面向过程编程,这就使得Java具有重用的特性,在开发速度上比之C更快,但是在运行速度上却是C更快,因为C属于底层语言,它比Java更加亲近机器,所以在许多系统开发上一般是用C语言,比如Windows系统,Linux系统,都是用C语言开发的。Java中对内存的分配是动态的。它采用运算符new为每个对象分配内存空间。而且,实际内存还会

19、随程序运行情况而改变。程序运行中,Java系统自动对内存进行扫描,对长期不用的空间作为“垃圾”进行收集,使得系统资源得到更充分地利用。按照这种机制,程序员不必关注内存管理问题,这使Java程序的编写变得简单明了,并且避免了由于内存管理方面的差错而导致系统出问题。而C语言通过malloc()和free()这两个库函数来分别实现分配内存和释放内存空间的,C+语言中则通过运算符operator new和operator delete来分配和释放内存。在C和C+中,程序员必须非常仔细地处理内存的使用问题。一方面,如果对已释放的内存再作释放或者对未曾分配的内存作释放,都会造成不可预料的后果;而另一方面,

20、如果对长期不用的或不再使用的内存不释放,则会浪费系统资源,甚至因此造成资源枯竭。,目前,Java主要用在Web开发,手机游戏及一些平台游戏的开发,因为它具有很好的跨平台性,现在Java与Linux结合得非常好,在手机等各种电子产品上应用非常广泛。C语言现在主要用与系统开发,桌面应用软件的开发,更多的是用在游戏领域,当然,只要你愿意,也可以开发Web程序,但是在开发难度上会增加不少。这些足以证明C语言是比Java更强大的语言,但是也比Java更加难以掌握,里面的指针是所有程序员都为之头痛的,而继承了C的所有优点的Java语言则完全没有这个问题,可以说Java是C语言的进化版本之一,为什么是之一呢

21、,因为还有C+,其实Java就是继承了C/C+的优点而产生的高级语言,它可以说具有两者的全部优点,并剔除了其中不好的地方,但即使如此也不能否认C/C+仍然具有强大的优势,尤其是在系统程序的开发上,这是Java无法比拟的。所以Java能做的C也可以做,而C能做的Java也可以做,只是两者的侧重点不一样。,3C语言的缺点,C语言的缺点主要是表现在数据的封装性上,这一点使得C在数据的安全性上做的有很大缺陷,这也是C和C+的一大区别。C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不做检查等。从应用的角度,C语言比其他高级语言较难掌握。指针是C语言的一大特色,可以说C

22、语言优于其他高级语言的一个重要原因就是它有指针操作,可以直接进行靠近硬件的操作,但是C的指针操作也给它带来了很多不安全的因素。目前,C+在这方面做了很好的改进,在保留了指针操作的同时又增强了安全性。Java取消了指针操作,提高了安全性。,1.1.3 了解Visual C+6.0集成开发环境,集成开发环境(Integrated Developing Environment,IDE)是一个综合性的工具软件,它把程序设计全过程所需要的各项功能集合在一起,为程序设计人员提供完整的服务。但集成开发环境并不是把各种功能简单地拼接在一起,而是把它们有机地结合起来,统一在一个图形化操作界面下,为程序设计人员提

23、供尽可能高效、便利的服务。C语言的开发环境有很多,最流行的主要是Turbo C系列和Visual C+6.0开发环境。Turbo C系列对帮助理解内存溢出等概念比较方便;Visual C+6.0虽然常用来编写C+源程序,但它同时兼容C语言程序的开发,并且其编辑器除了具备一般文本编辑器的基本功能以外,还能根据C语言的语法规则,自动识别程序文本中的不同成分,并且用不同的颜色加以区别,为使用者提供很好的提示作用。因此本书选择VC+6.0作为C语言的开发工具。,1Visual C+6.0开发环境,Visual C+6.0,简称VC或者VC 6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“机器

24、语言(低级语言)”的程序。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。VC 6.0启动后,即进入如图1-1所示的主窗口程序。在VC 6.0的主界面中,最顶部是菜单栏和工具栏,主菜单共有9个菜单项;主界面的左侧是项目工作区窗口,用来显示工作区的信息;右侧是程序编辑窗口,用来输入和编辑源代码;下面是输出窗口,用来显示进行构建或调试等工作时的状态和数据信息;最底部是状态栏。各个窗口可以任意显示或隐藏。,2创建C项目,建立一个项目可以通过VC 6

25、.0的向导完成。单击主菜单中“文件”“新建”命令,弹出如图1-2所示的对话框。在“工程”选项中列出了16个可以建立的项目选项,编写一般C语言程序时选择“Win32 Console Application”选项,然后在右上侧的“工程名称”文本框中输入项目名称,“位置”中选择项目要保存的路径,单击下方的“确定”按钮即可进入下一个界面。工程名称可以由字母和数字组成,但是第一个字符必须是字母,下画线也被认为是字母。在如图1-3所示界面中,显示的是可以创建的应用程序类型。VC 6.0中可以创建的程序类型共有4种。在这里只需要选择默认的“一个空工程”选项,单击“完成”按钮,VC 6.0即可完成项目创建。项

26、目创建完成后,VC 6.0会自动显示创建的项目信息,如图1-4所示。,图1-3 控制台程序类型对话框 图1-4 项目创建完成对话框,3创建和编辑C文件,单击“文件”“新建”菜单命令打开文件创建对话框,向所创建的项目中添加源文件。在“文件”选项卡中,列出了可以创建的文件类型,如图1-5所示。图1-5 创建的项目文件和本课程有关的文件类型为“C/C+Header File”和“C+Source File”,分别用来创建头文件和源文件。选择“C+Source File”选项,勾选“添加到工程”复选框,这时项目名称文本框中会默认显示当前项目名称,在“文件名”文本框中输入源文件名,“位置”中会默认显示项

27、目所在位置。单击“确定”按钮完成新建文件。,4编译代码,在编辑器中输入代码并保存,然后可以通过选择主菜单中的“组建”“编辑”命令进行编译和链接,也可以通过工具栏中的工具快速完成构建可执行文件的过程。编辑快速工具栏如图1-6所示。图1-6 编译快速工具栏快速工具栏中第1个按钮为编译按钮,通过编译可以找出工程中的错误信息,提示编程人员进行修改;第2个按钮为链接按钮,编译成功后可进行链接。在编译的过程中,会在主界面下方的信息输出窗口中显示构建过程信息,如编译和链接过程的步骤、是否有错等信息,如图1-7所示。,5运行程序,在正确的编译和链接以后,可通过“组建”“执行”命令执行程序,也可以在图1-7所示

28、的快速工具栏中单击“执行”按钮执行程序。快速工具栏中第4个按钮为“执行”按钮,在编译链接后可单击该按钮执行程序。也可直接单击“执行”按钮,此时会自动进行编译和链接操作。程序每次修改之后都必须重新进行编译链接才能执行。图1-7 编译和链接过程若程序执行成功,屏幕上将会输出执行结果,并提示信息:Press any key to continue。此时按下任意键,系统都会返回VC 6.0主窗口。可执行文件存放在创建工程时指定的子目录debug中。图1-7程序执行结果如图1-8所示。图1-8 程序运行结果若程序执行有误,用户需要返回编辑状态修改源程序并重新进行编译、链接和运行。,1.1.4 数据的输入

29、和输出,没有输出的程序的数据处理和计算结果无法展示给用户,是没有价值的;而如果没有输入操作,则无法对目标数据进行处理,或者只能将数据写在程序中,无法对不同的数据进行处理,每次更换数据都需要更改程序和重新编译。所以,数据的输入和输出是一项很重要的操作。C语言本身没有提供输入和输出语句,输入和输出操作是由scanf和printf等库函数来完成的。程序在调用这些函数时,必须在源文件的开始处加上头文件的包含命令。其格式如下:#include 或#include”库函数头文件名”C语言提供了多种输入和输出格式,使其操作灵活、多样,且功能强大。,1字符输出函数putchar(),在C语言中,char为字符

30、类型,一个char类型的数据表示一个单一的字符。字符输出函数putchar()的功能为将一个字符输出到屏幕上。其一般格式为:putchar(要输出的字符)其中参数ch为要输出的字符,执行成功时返回输出字符(即ch),错误时将返回EOF。所在的头文件为stdio.h。putchar的用法见案例1-2。【案例1-2】putchar的用法。源程序如下:#include void main()char c1=G,c2=o,c3=d,c4=m,c5=r;putchar(c1);putchar(c2);putchar(c2);putchar(c3);putchar(t);/t表示空格putchar(c4)

31、,putchar(c2),putchar(c5);putchar(n);putchar(i);putchar(n);putchar(g);putchar(n);/n表示换行该程序的运行结果如下:Good morning,2标准格式输出函数printf(),printf()函数的作用为按用户指定的格式,把指定的数据输出到计算机系统默认的输出设备(一般为终端或显示器)上。printf的一般格式为:printf(格式控制串,输出项序列);格式控制串中包含两种信息:格式控制说明和普通字符。格式控制说明是由“%”字符开始的,后面跟格式控制符,说明输出数据的类型、形式、长度、小数位等信息,其作用为按要求的

32、格式将数据输出,如“%d”,“%f”等;普通字符为要输出的字符,如字母、符号、空格、换行等,运行时会在屏幕上原样输出,一般为提示作用。输出项序列中各个输出项用逗号隔开,输出项可以为变量、表达式、字符等。格式控制说明和输出项应该在类型、个数、顺序上保持一致,且从左到右一一对应匹配。在输出时,每个对应输出项的值替换格式控制说明所在的位置,显示在屏幕上。,【案例1-3】输出整型变量的值。源程序如下:#include void main()int a=13,b=27;printf(%d%dn,a,b);printf(a=%d,b=%dn,a,b);printf(a+b=%dn,a+b);程序运行结果如

33、下:13 27a=13,b=27a+b=40printf(a+b=%dn,a+b);中,a+b=为普通字符,直接输出,%d对应后面a+b,被替换成a+b的和。而c的值为1.3,但是因为其输出格式要求为整数,则只输出c的整数部分,即输出为c=1。,printf函数常用的格式说明符如表1-1所示。表1-1 printf函数格式说明符格式转换符含 义举 例结 果%d以十进制形式输出一个整型数据int x=10;printf(%d,x);10%o以八进制形式输出一个无符号整型数据int x=10;printf(%o,x);12%x或%X以十六进制形式输出一个无符号整型数据int x=10;printf

34、(%x,x);a%u以十进制形式输出一个无符号整型数据int x=10;printf(%u,x);10%f以十进制形式输出一个浮点型数据float f=-12.3;printf(%f,f);-12.300 000%e或%E以指数形式输出一个浮点型数据float f=12.3;printf(%e,f);1.230000e+001%c输出一个字符型数据char c=c;printf(%c,c);c%s输出一个字符串char s=Hello!;printf(%s,s);Hello!另外,在格式说明中,可以在%和上述格式字符间插入以下几种修饰符,用来表示数据的输出宽度,修饰符的用法如表1-2所示。,表

35、1-2 printf修饰符用法格 式说 明l可加在格式符d、o、x、u前面,如%ld,表示长整型mm表示一个正整数,指定数据输出宽度nn表示一个正整数,对于实数,表示输出n位小数;对于字符串,表示截取的字符个数-输出的内容左对齐【案例1-4】修饰符的用法。源程序如下:#include void main()int a=123;float f=123.456;printf(%8d,%2dn,a,a);printf(a=%d,a=%-6d,a=%6dn,a,a,a);printf(%f,%8f,%8.1f,%.2f,%.2en,f,f,f,f,f);程序的运行结果如下:123,123a=123,a

36、=123,a=123123.456001,123.456001,123.5,123.46,123e+002,该程序中“printf(%8d,%2dn,a,a)”分别以8字符宽度和2字符宽度显示整型变量a,且默认输出为右对齐。所以第一行输出结果中先是5个空格,然后是a的值;而在指定的2字符宽度小于原整数的字符长度时,仍完整地显示原整数变量。“%-6d”为以6个字符宽度 显示变量a,且采用左对齐的方式,通过比较“a=%-6d”和“a=%6d”的输出结果可看出左对齐和右对齐的区别。“%8.1f”的作用为只显示小数点后一位数据,并采用四舍五入的方式截掉后面部分,所以显示的值为123.5,按8字符宽度显

37、示。“%.2e”为采用指数形式显示数据,并且小数点之后取两位有效数据。【案例1-5】字符和字符串的输出。源程序如下:#include void main()char c1=H,c2=e,c3=o;printf(%3c%c%c%c%cn,c1,c2,l,l,c3);printf(%s,%9s,%5.4s,%.3s,%.2stn,Hello,Hello,Hello,Hello,Hello);printf(Nice to meet you!n);程序运行结果如下:Hellohello,Hello,Hell,Hel,He Nice to meet you!,“%5.4s”表示截取字符串中前4位,并以5

38、个字符宽度显示在屏幕上。“printf(Nice to meet you!n)”为printf最简单的用法,没有用到任何格式控制说明和变量,直接将字符串显示在屏幕上。转义字符是一种特殊的字符常量。转义字符以反斜线“”开头,后面跟一个或几个字符。转义字符有特殊的含义,不同于普通的字符,所以称为转义字符。例如,最常用的转义字符“n”,其意义为“回车换行”。转义字符主要用来表示那些不用于一般字符,而且不便于表示的控制代码。因为“”为转义字符的标志,所以每当“”出现时,编译器将自动把其和后面的字符连接起来读取其含义,而编程人员想要输出“”字符时便无法完成。所以用“”的形式来表示输出“”。如在案例1-5

39、中,“tn”表示先输出一个空格,然后输出一个字符“”,再转到下一行。常用的转义字符及其含义如表1-3所示。,表1-3 常用的转义符及其含义转 义 符含 义t空格,跳到下一个tab位置n换行,将但前位置移到下一行开头b退格,将当前位置移到前一列开头r回车,将当前位置移到本行开头f换页,将当前位置移到下页开头反斜线字符“”单引号”双引号a响铃ddd1到3位八进制数所代表的字符xhh1到2位十六进制数所代表的字符,【案例1-6】打印一个金字塔。源程序如下:#include void main()printf(*n);printf(*n);printf(*n);printf(*n);printf(*n

40、);printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);该程序的输出结果如下:*通过空格和换行等控制字符显示的位置,可以在屏幕上打印很多图形,读者可自己进行尝试。,3字符输入函数getchar(),字符输如函数getchar()的功能为读取屏幕上的一个字符,所在头文件也是stdio.h。getchar运行时会暂停,等待用户的输入,且接收用户输入时必须按Enter键结束,然后取走所输入字符的第一个字符。字符输入函数每执行一次就从屏幕上读取一个字符,可将这个字符赋值给一个变量。,【案例1-7】字符输入函数的用法。源程序如下:#include

41、void main()char c1,c2;printf(请输入第一个字符:);c1=getchar();printf(您输入的第一个字符为%cn,c1);printf(请输入第二个字符:);c2=getchar();printf(您输入的第二个字符为);putchar(c2);printf(n);程序运行结果如下:请输入第一个字符:a您输入的第一个字符为a请输入第二个字符:您输入的第二个字符为,在程序中输入字符a,然后按Enter键,程序的输出如案例1-7运行结果所示。每当按下Enter键时,向键盘缓冲区发去一个“回车”(r)和一个“换行”(n),“r”将光标移动到本行行首,“n”将光标移动

42、到下一行。这时缓冲区中有3个字符:“arn”。第一个getchar函数读取第一字符a赋值给c1,并将回车符“r”从缓冲区中去掉,但是留下了“n”,于是第二个getchar将“n”赋值该给c2。要解决这个问题,可以在两个scanf()函数之后加入语句fflush(stdin),其作用为清除缓冲区,这时可输入第二个字符作为c2。如将案例1-7更改如下:,#includevoid main()char c1,c2;printf(请输入第一个字符:);c1=getchar();printf(您输入的第一个字符为%cn,c1);fflush(stdin);printf(请输入第二个字符:);c2=get

43、char();printf(您输入的第二个字符为);putchar(c2);printf(n);则程序的运行结果如下:请输入第一个字符:a您输入的第一个字符为a请输入第二个字符:b您输入的第二个字符为b注意,只有在读取的数据为字符或字符串类型时,才会发生上述问题,其他情况下均不需要情况缓冲区,这是因为在读取其他类型(如整型)的数据时,会跳过空白字符(空格、制表符和换行符)直到遇到一个非空白字符。另外,getche()和getch()也是字符输入函数,其所在的头文件均为conio.h。,4格式输入函数scanf(),scanf()函数的作用为按照用户指定的格式从键盘上把数据输入到指定的变量中,所

44、在包为stdio.h。scanf的一般格式为:scanf(格式控制串,地址表列);scanf接受用户输入时可以空格、制表符和换行符结束。格式控制串的使用规则和printf相同,但是输入时不能规定精度,如“sacnf(“7.3f”,&f)”是非法的。用&表示某变量所在的内存单元地址,所读入的数据要赋值给某变量,即保存到该变量所在的地址,用“&变量名”表示。,【案例1-8】读取数据。源程序如下:#includevoid main()int n;char c1,c2,c3,c4;printf(Please enter one integer:);scanf(%d,程序运行结果如下:Please en

45、ter one integer:4Please inter four characters:abcdYou have entered 4 and abcd运行以上程序时,在输入“abcd”时不能添加空格,否而程序会将空格读取并赋值给指定的变量。,【案例1-9】含有附加控制符的数据输入。源程序如下:#includevoid main()int n1,n2,n3;printf(请输入三个整数:);scanf(%d%d%d,程序输出结果如下:请输入三个整数:1 2 3n1=1,n2=2,n3=3请输入三个整数:123456n1=12,n2=345,n3=6请输入三个整数:1,23,345n1=1,n

46、2=23,n3=456,第一次输入时按顺序输入三个整数数据,之间以空格表示一个数据输入结束,分别将三个整数赋值给n1、n2和n3。第二次输入时,scanf函数中的整型变量根据格式项中指定的列宽来分隔数据。在输入123456后,系统将前两个宽度数据12赋值给n1,中间三个宽度数据345赋值给n2,最后只剩下一个宽度数据,小于指定宽度,此时只需将剩余数据全部赋值给n3即可。如最后剩余数据宽度大于指定宽度,也只截取指定宽度数据。第三次输入时,scanf函数格式控制串“%d,%d,%d”中含“,”,则在输入数据时也必须在数据之间添加逗号,否则会显示输入错误。,1.1.5 任务实现,1问题描述学生成绩管

47、理是学校教学管理中十分重要又相当复杂的管理工作之一。为了保证学校的信息流畅、工作高效,有必要设计一个学生成绩管理系统。学生成绩管理系统完成一系列的功能,包括:录入学生信息、显示学生信息、查询学生信息、修改学生信息、学生成绩排序等。在这里要实现的功能为打印学生成绩管理系统菜单。在菜单项中应列出所有的功能选项,以供用户选择。在用户选择特定的选项后,进入该功能。2要点解析程序的主要功能为显示欢迎信息并列出学生管理系统的主要功能供用户选择。主要功能包括:(1)添加学生信息。(2)查找学生信息。(3)删除学生信息。(4)修改学生信息。(5)学生成绩排序。(6)统计学生成绩信息。(7)保存数据到文件。(8

48、)读取所有学生信息。,3程序实现通过对上述知识的了解,便可以尝试实现“学生成绩管理系统菜单设计”任务。任务一的源程序如下:#include#include#include/以下为自定义函数声明语句void choose();/选择功能函数void insert();/插入学生成绩信息void search();/查找学生成绩信息void del();/删除学生成绩信息void modify();/修改学生成绩信息void order();/按平均分成绩排序void total();/学生成绩信息统计void write();/将学生成绩信息保存在文件中void read();/从文件中读取所有

49、学生成绩信息void main()/*主函数*/printf(nn);printf(tt|-STUDENT-|n);printf(tt|t 1.添加学生信息|n);,printf(tt|t 2.查找学生信息|n);printf(tt|t 3.删除学生信息|n);printf(tt|t 4.修改学生信息|n);printf(tt|t 5.学生成绩排序|n);printf(tt|t 6.统计学生成绩信息|n);printf(tt|t 7.保存数据到文件|n);printf(tt|t 8.读取所有学生信息|n);printf(tt|t 0.退出系统|n);printf(tt|-|nn);printf

50、(choose(0-7):);choose();/通过用户输入选择相应的功能实现 程序运行结果如图1-9所示。图1-9 运行结果,任务1.2 鸡兔同笼问题,任务目标了解C语言中的基本数据类型。掌握数据类型之间的转换方法。了解常量和变量的概念,掌握变量定义的方法。掌握C语言中运算符和表达式的概念,掌握几种表达式的含义和用法。实现鸡兔同笼问题程序,1.2.1 基本数据类型计算机语言中的数据类型是为了高效处理不同数据而引入的一个概念,通过数据类型把不同特征的数据以及这些数据的处理方法封装在一起,既便于对信息的处理,也便于计算机硬件的实现。例如,C语言中有整数类型、浮点类型、字符类型等基本数据类型,另

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号