1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,
2、PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样
3、式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处
4、编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PROGRAM DESIGN IN C,C语言程序设计,大学计算机公共基础课,课程介绍,课程性质:大学计算机公共基础课(必修),课程内容,C语言,程序设计的基本方法和技巧,预备知识,计算机基础,教材,C语言程序设计教程,汪同庆 张 华 杨先娣 主编 机械工业出版社
5、C语言程序设计实验教程,汪同庆 关焕梅 汤 洁 主编 机械工业出版社,C语言程序设计,2,授课计划,C语言程序设计,周次,理论内容,实验内容,1,第1讲 C语言概述,与理论课对应,2,第2讲 C语言快速入门,与理论课对应,3,第3讲 基本数据类型,与理论课对应,4,第4讲 输入输出和库函数,与理论课对应,5,第5讲 运算符和表达式,与理论课对应,6,第6讲 语句和算法,与理论课对应,7,第7讲 选择结构,与理论课对应,8,第8讲 循环结构,与理论课对应,9,第9讲 函数,与理论课对应,10,第10讲 作用范围和存储类别,与理论课对应,11,第11讲 数组,与理论课对应,12,第11讲 数组,
6、与理论课对应,13,第12讲 指针,与理论课对应,14,第13讲 字符串,与理论课对应,15,第14讲 结构体,与理论课对应,16,第15讲 编译预处理,与理论课对应,17,第16讲 文件,与理论课对应,18,*第17讲 高级数据结构(选讲),与理论课对应,3,考试与考核办法,学分:,3学分,学时:,72(讲课36+实验36),总评成绩=平时成绩,#%+期末考试成绩#%,平时成绩:(实验,单元测验),期末考试成绩,C语言程序设计,4,第一讲 C语言概述,C 语言程序设计,第一讲 C语言概述,预备知识,计算机组成和工作原理,计算机语言和程序,C语言的简史,为什么学习和使用C语言,C语言程序的开发
7、过程,C语言编程环境,C语言编程实验环境,C语言程序设计,6,计算机,计算机,(Computer),能进行计算和逻辑判断的设备,在一组指令,(instructions),程序,(programs),的控制下处理数据,硬件,(Hardware),组成计算机的各种物理部件,键盘、鼠标、显示器、内存、硬盘、光驱等等,软件,(Software),计算机中运行的程序和数据,C语言概述,7,计算机的组成,计算机包括六大部件,输入单元,(Input unit),从输入设备(键盘、鼠标)获得数据,输出单元,(Output unit),把数据输出到输出设备(显示器、打印机等),内存,(Memory unit),
8、临时存储正在处理的数据和运行的程序,可以快速地访问,容量不大,C语言概述,8,计算机的组成,中央处理单元,(Central processing unit,CPU),算术逻辑单元,(Arithmetic and logic unit,ALU),进行算术运算和逻辑判断,控制器,(Control unit),管理和协调计算机的其它部件,辅助存储器,(Secondary storage unit),保存需长期存储的数据和非活动的程序,保存时间长,价格便宜、容量大,例如硬盘、光盘、磁带,C语言概述,9,计算机的工作原理,六大部件紧密协作,C语言概述,10,计算机的工作原理,CPU负责执行程序,从内存中
9、读取一条指令,执行该指令,从内存中读取下一条指令并执行,一个主频为1GHz的CPU可以在一秒钟内进行大约一亿次这样的操作,CPU有自己的工作区:,包括若干个寄存器,(Registers),CPU只能理解有限的指令,(CPU的指令集),指令能够完成的任务是具体的,例如,把一个数从内存移动到某一个寄存器,C语言概述,11,计算机程序和语言,存储在计算机中的一切内容都是二进制的数字形式,数据:数、字符、图片、声音、动画等等,指令,计算机程序,确切告诉计算机如何完成某项任务的指令序列就是一套,程序,计算机语言,用来编写程序,C语言概述,#include,#include,void main(),flo
10、at a,b,c,p,disc,q,x1,x2;,scanf(%f%f%f,p=-b/(2*a);,disc=b*b-4*a*c;,q=sqrt(disc)/(2*a);,x1=p+q;x2=p-q;,printf(x1=%f,x2=%f,x1,x2);,0110001100000110,0110010111001100,0000110000011011,0110001100000110,0110010111001100,0000110000011011,12,机器语言,数字形式的指令码就是机器语言,(Machine language),用机器语言编写的程序能够被计算机直接理解和执行,但是,编
11、写程序非常费力,例如,编写程序完成两个数相加的任务需要以下几步,把地址为2000的内存单元中的数复制到寄存器1;,把地址为2004的内存单元中的数复制到寄存器2;,把寄存器2中的数与寄存器1中的数相加,结果保留在寄存器1中;,把寄存器1中的数复制到地址为2008的内存单元中。,C语言概述,0110001100000110,0110010111001100,0000110000011011,13,汇编语言,符号化的指令码就是汇编语言,(Assembly language),例如,完成两个数相加的汇编语言程序,汇编语言程序必须被翻译成机器语言程序才能被执行,汇编程序,(Assembler),充当“
12、翻译”,C语言概述,ldreg n1,r1,把变量n1的值复制到寄存器1(r1);,ldreg n2,r2,把变量n2的值复制到寄存器2(r2);,add r1,r2,把r2中的数与r1中的数相加,结果保留在r1中;,store r1,sum,把r1中的数复制到变量sum。,14,高级语言,高级语言,(High-level language),使用数学符号和类似英语的单词,例如,完成两个数相加的C语言程序,从多方面提高了编程效率,不必考虑CPU的指令集,不必考虑CPU实现特定任务的精确步骤,采用接近人类思考问题的方式去书写程序,高级语言程序必须被,编译程序,(Compiler),翻译成机器语言
13、程序才能被执行,C语言概述,sum=n1+n2;,15,C语言的简史,C语言的起源,美国贝尔实验室的,Dennis Ritchie,在1972年开发的,用于设计,UNIX,操作系统,其前身是,B,语言,(Ken Thompson于1970年为第一个UNIX系统开发的语言),C语言的标准,美国国家标准化组织(ANSI)于1983年成立了一个委员会(X3J11),以确定C语言的标准。,该标准(,ANSI C,)于1989年被正式采用,即,C89,。,最新的标准是,C99,标准。,目前,大多数C语言编译器没有完全实现C99的所有修改。,C语言概述,16,为什么学习和使用C语言,C语言的特点,C语言是
14、一种强大而灵活的语言,可以用来,编写任意复杂的程序,。,C语言简洁、紧凑,使用方便、灵活。,C语言,程序效率高,、运行速度快。,C语言是,可移植的,。,C语言很,适合结构化程序设计,,因而要求用户以功能模块的方式来思考问题。,C语言,具有自我扩展能力,。,C语言概述,17,为什么学习和使用C语言,C与C+,(C加加,see-plus-plus),贝尔实验室于二十世纪八十年代在C语言的基础上开发的。,C+是C语言的超集,包含了C语言的所有内容,同时增加了面向对象编程方面的内容。,C与Java,(爪哇),Sun公司于1995年发布的面向对象编程语言。,Java也是基于C语言的。,C与C#,(see
15、sharp),微软在2000年6月与.NET平台一同推出。,C#也是从C语言派生的一种面向对象语言。,C语言概述,18,C语言程序的开发过程,一般分成五个步骤,定义程序目标,设计程序,编写代码,编译,运行、测试和调试程序,C语言概述,19,C语言程序的开发过程,定义程序目标,在开始解决问题之前,程序的开发人员必须彻底了解问题的是什么,对即将要创建的程序要做的事情有个清晰的想法。,这需要仔细考虑以下问题,程序需要什么信息,程序需要执行哪些计算和操作,程序应该报告什么信息,例如,计算任意一个圆环的面积,提出问题,明确目标,圆环是什么?如何计算?计算精度?,C语言概述,20,C语言程序的开发过程,
16、设计程序,决定程序如何去解决问题。,需要考虑,如何给程序提供必要的数据,程序中如何表示数据,用什么方法来处理数据,程序如何组织,程序怎样报告结果,完成这个程序需要多长时间,应该用一般的概念考虑设计中的问题,而不是考虑具体的代码。,C语言概述,21,C语言程序的开发过程,编写代码,编写代码来实现前面的设计,即用某一门语言来表示程序设计。,需要开发人员熟练掌握该语言的知识。,可以在草稿纸上勾画自己的想法或书写代码,但最终必须将代码输入计算机。,输入代码所采用的机制则取决于具体的编程环境。,一般来说,需要使用文本编辑器(例如Windows的记事本程序)来创建一种文件,称为,源文件,源文件包含程序设计
17、的C语言表示形式(称为,源程序,或,源代码,),C语言概述,22,C语言程序的开发过程,编译,把C语言源程序转换成机器语言表示的程序。,这种程序可以直接被计算机理解和执行,所以称之为,可执行程序,,放在,可执行文件,中。,编译的具体细节取决于使用的编程环境。,C语言分两步完成这一工作:,编译,和,链接,。,编译器将源代码转换为,目标代码,,并存在,目标文件,中。,链接器将目标代码与其他代码结合起来生成可执行文件。,这种把编译和链接分开来做的方法便于程序的模块化。,可以分别编译程序的各个模块,然后用链接器把编译过的模块结合起来。,这样,如果需要改变一个模块,则不需要重新编译所有其他模块。,C语言
18、概述,23,C语言程序的开发过程,运行、测试和调试程序,运行包含可执行程序的文件,观察运行的结果。,在不同的系统中运行程序的方式可能不同。,例如,Windows的控制台和资源管理器。,应该对程序进行仔细的检查,看程序是否在做该做的事。,比较好的做法是为验证程序的正确性设计一个测试计划。,越早做越好,因为它有助于理清程序员的思路。,程序中的错误被称为bug,调试(Debug)就是要发现并修正错误。,C语言概述,24,C语言的编程环境,开发程序的具体操作取决于使用的编程环境,因为C语言是可移植的,所以它在许多环境中都是可用的。,例如UNIX、Linux、Windows和MS-DOS。,C语言编程环
19、境包括一系列程序。,编辑器,编译器,链接器,运行和调试环境,C语言概述,Hello.c,Hello.obj,Hello.exe,编辑器,源代码,编译器,目标代码,链接器,可执行代码,启动代码,库代码,执行,如果有错,如果有错,如果有错,25,C语言的编程环境,编辑器,使用一个文本编辑器程序输入源代码,并将代码保存在源文件中。,一般,C程序的源文件名称的扩展名是.c,例如welcometoyou.c和Hello.c。,该名称应该遵循特定的操作系统的命名规则。,例如,MS-DOS要求基本名包含的字符数不能大于8,所以welcometoyou.c不是合法的DOS文件名。,Windows允许长文件名,
20、所以welcometoyou.c是合法的Windows文件名。,C语言概述,Hello.c,编辑器,源代码,26,C语言的编程环境,编译器,编译器接收源文件,生成目标文件,扩展名为.obj或.o。,编译器还会检查输入的程序是否是有效的C语言程序。,如果编译器发现错误,就会报告出错,且不能生成可执行程序。,这时就必须修改错误,然后再编译。,显然,为了能迅速找到错误,理解特定编译器的报错信息是一项有用的技能。,C语言概述,Hello.c,Hello.obj,编辑器,源代码,编译器,目标代码,如果有错,27,C语言的编程环境,链接器,目标代码虽然已经是机器代码,但还不能被执行。,缺少下面两个东西,启
21、动代码,:相当于程序和操作系统之间的接口。,库函数的代码,:库文件中包含许多函数的目标代码。,链接器的作用就是将这三个元素(目标代码、启动代码和库代码)结合起来,并将它们放在一个文件中,即可执行文件,扩展名为.exe或.out。,C语言概述,Hello.obj,Hello.exe,目标代码,链接器,可执行代码,启动代码,库代码,如果有错,28,Windows的C语言编程环境,Windows的C语言编程环境,Windows并不包含C编译器,所以需要获得并安装一个C编译器。,许多现代的编译器都是,集成开发环境,(或叫,IDE,)的一部分。,包括一个编辑器、编译器、链接器和包括一个符号调试程序在内的
22、运行支持系统。,许多软件厂商都提供了基于Windows的集成开发环境,Microsoft公司的Visual C/C+,Borland公司的C/C+Builder,Metrowerks公司的Code Warrior,目前,大多数IDE把C和C+编译器结合在一起。,C语言概述,29,DOS的C语言编程环境,DOS的C语言编程环境,基于DOS的IDE,Borland公司的Turbo C,Borland公司的Borland C+,许多Windows上的IDE也提供了在DOS命令行环境中编程的命令行工具。,C语言概述,30,C语言编程实验环境简介,上机实验环境简介,举例演示,Visual C+6.0的基
23、本操作,启动,创建源文件,构建工程(编译、链接),运行程序,C语言概述,31,小结,C是一种通用的程序设计语言,具有许多突出的优点。,程序设计的初学者应该严格按照C语言程序的开发过程进行训练,以便尽快掌握程序设计的基本原则。,C是一种需要编译的高级语言。,进行C语言编程的具体操作依赖于所使用的编程环境。,程序设计是一门实践性很强的课程,在学习过程中必须十分重视实验环节。,C语言概述,32,第二讲 C语言快速入门,第二讲 C语言快速入门,C语言程序的基本结构,C语言的字符集和关键字,Visual C+6.0编程环境,C语言程序设计,34,C语言程序的基本结构,一个简单的C语言程序,问题:在屏幕上
24、显示一行文字:“Hello World!”,源程序,运行结果,C语言快速入门,/*在屏幕上显示Hello World!*/,#include,void main()/*定义主函数*/,printf(Hello World!n);,Hello World!,35,C语言程序的基本结构,一个简单的C语言程序,程序结构分析,C语言快速入门,/*在屏幕上显示Hello World!*/,#include,void main(),/*定义主函数*/,printf(Hello World!n);,注释部分,以增加程序的可读性。,不被执行。,36,C语言程序的基本结构,一个简单的C语言程序,程序结构分析,C
25、语言快速入门,/*在屏幕上显示Hello World!*/,#include,void main()/*定义主函数*/,printf(Hello World!n);,预处理命令,程序中包含某一文件内容。,“,stdio.h,”,为标准输入输出函数头文件名。,37,C语言程序的基本结构,一个简单的C语言程序,程序结构分析,C语言快速入门,/*在屏幕上显示Hello World!*/,#include,void main(),/*定义主函数*/,printf(Hello World!n);,函数,C,程序由函数组成。,一个,C,程序有且仅有一个主函数(,main,函数)。,38,C语言程序的基本结
26、构,一个简单的C语言程序,程序结构分析,C语言快速入门,/*在屏幕上显示Hello World!*/,#include,void main(),/*定义主函数*/,printf(Hello World!n);,函数说明,说明函数类型、函数名和函数参数。,39,C语言程序的基本结构,一个简单的C语言程序,程序结构分析,C语言快速入门,/*在屏幕上显示Hello World!*/,#include,void main()/*定义主函数*/,printf(Hello World!n);,函数体,包括变量说明和语句执行部分。,40,C语言程序的基本结构,一个简单的C语言程序,程序结构分析,C语言快速入
27、门,/*在屏幕上显示Hello World!*/,#include,void main()/*定义主函数*/,printf(Hello World!n);,函数调用语句,格式输出函数,printf,(),。,输出“,Hello world!”,。,Hello World!,41,C语言程序的基本结构,含有算术运算的C语言程序,问题:,求方程 的根(设 ),。,源程序,C语言快速入门,#include,#include,void main(),float a,b,c,p,disc,q,x1,x2;,scanf(%f%f%f,p=-b/(2*a);,disc=b*b-4*a*c;,q=sqrt(d
28、isc)/(2*a);,x1=p+q;x2=p-q;,printf(x1=%f,x2=%f,x1,x2);,42,C语言程序的基本结构,含有算术运算的C语言程序,程序结构分析,C语言快速入门,#include,#include,void main(),float a,b,c,p,disc,q,x1,x2;,scanf(%f%f%f,p=-b/(2*a);,disc=b*b-4*a*c;,q=sqrt(disc)/(2*a);,x1=p+q;x2=p-q;,printf(x1=%f,x2=%f,x1,x2);,预处理命令,43,C语言程序的基本结构,含有算术运算的C语言程序,程序结构分析,C语言
29、快速入门,#include,#include,void main(),float a,b,c,p,disc,q,x1,x2;,scanf(%f%f%f,p=-b/(2*a);,disc=b*b-4*a*c;,q=sqrt(disc)/(2*a);,x1=p+q;x2=p-q;,printf(x1=%f,x2=%f,x1,x2);,函数,一个主函数(,main,函数)。,44,C语言程序的基本结构,含有算术运算的C语言程序,程序结构分析,C语言快速入门,#include,#include,void main(),float a,b,c,p,disc,q,x1,x2;,scanf(%f%f%f,p
30、b/(2*a);,disc=b*b-4*a*c;,q=sqrt(disc)/(2*a);,x1=p+q;x2=p-q;,printf(x1=%f,x2=%f,x1,x2);,函数说明部分,45,C语言程序的基本结构,含有算术运算的C语言程序,程序结构分析,C语言快速入门,#include,#include,void main(),float a,b,c,p,disc,q,x1,x2;,scanf(%f%f%f,p=-b/(2*a);,disc=b*b-4*a*c;,q=sqrt(disc)/(2*a);,x1=p+q;x2=p-q;,printf(x1=%f,x2=%f,x1,x2);,函
31、数体,变量说明部分,执行部分,46,C语言程序的基本结构,含有算术运算的C语言程序,程序结构分析,C语言快速入门,#include,#include,void main(),float a,b,c,p,disc,q,x1,x2;,scanf(%f%f%f,p=-b/(2*a);,disc=b*b-4*a*c;,q=sqrt(disc)/(2*a);,x1=p+q;x2=p-q;,printf(x1=%f,x2=%f,x1,x2);,运行程序,键盘输入,a,、,b,、,c,的值;,屏幕显示,x1,和,x2,的值。,1 0-4,x1=2.000000,x2=-2.000000,47,C语言程序的基
32、本结构,包含多个函数的C语言程序,问题:,求|a|+|b|的值,。,源程序,C语言快速入门,#include,float absv(float x),float y;,y=x=0?x:-x;,return y;,void main(),float a,b,c;,printf(input a,b:n);,scanf(%f%f,c=absv(a)+absv(b);,printf(|a|+|b|=%fn,c);,48,C语言程序的基本结构,包含多个函数的C语言程序,程序结构分析,C语言快速入门,#include,float absv(float x),float y;,y=x=0?x:-x;,ret
33、urn y;,void main(),float a,b,c;,printf(input a,b:n);,scanf(%f%f,c=absv(a)+absv(b);,printf(|a|+|b|=%fn,c);,程序由两个函数组成:,absv,函数,main,函数,49,C语言程序的基本结构,包含多个函数的C语言程序,程序结构分析,C语言快速入门,#include,float absv(float x),float y;,y=x=0?x:-x;,return y;,void main(),float a,b,c;,printf(input a,b:n);,scanf(%f%f,c=,absv(
34、a),+,absv(b),;,printf(|a|+|b|=%fn,c);,调用,absv,函数求绝对值。,50,C语言程序的基本结构,包含多个函数的C语言程序,程序结构分析,C语言快速入门,#include,float absv(float x),float y;,y=x=0?x:-x;,return y;,void main(),float a,b,c;,printf(input a,b:n);,scanf(%f%f,c=absv(a)+absv(b);,printf(|a|+|b|=%fn,c);,运行程序,屏幕显示提示信息;,键盘输入,a,、,b,的值;,屏幕显示,a,、,b,绝对值之
35、和。,input a,b:,-5 13,|a|+|b|=18.000000,51,C语言程序的基本结构,C语言程序的基本结构小结,C语言快速入门,一个C程序由一个或多个函数组成,但有且仅有一个主函数(main函数);main函数是程序执行的入口,可置于程序的任何位置。,程序中可以有预处理命令(如:include 命令)。预处理命令通常放在程序的最前面。,每个语句以分号结尾;预处理命令、函数头和花括号“”之后不能加分号。,函数包括函数的说明部分和函数体;函数体包括变量说明部分和执行部分;函数体由一对花括号“”括起来。,括在/*/内的文本为注释。,一行可以写几个语句,一个语句也可以写在多行上。,程
36、序区分大小写字母。一般变量、语句等用小写字母书写;符号常量、宏名等用大写字母书写。,标识符和保留字之间须加空格以示分隔。,52,C语言的字符集,C语言源程序中使用的字符来自C语言的字符集。,字符集,(Character set),来自ASCII表,52个大小写字母,(Letters),A B C D E F G H I J K L M N O P Q R S T U V W X Y Z,a b c d e f g h i j k l m n o p q r s t u v w x y z,10个数字,(Digits),0 1 2 3 4 5 6 7 8 9,空白符,(Blanks),空格符、制
37、表符、回车符、换行符,图形符号,(Graphic characters),!#%:,./?,C语言快速入门,53,C语言的关键字,关键字,(Keywords),是C语言中的词汇。,也称为保留字,(Reserved words),类型说明,int、long、short、float、double、char、unsigned、signed、const、void、volatile、enum、struct、union,语句定义,if、else、goto、switch、case、do、while、for、continue、break、return、default、typedef,存储类别说明,auto、r
38、egister、extern、static,长度运算符,sizeof,C语言快速入门,54,C语言的标识符,标识符,(Identifiers),是程序中引用对象的名称。,用来标识变量、符号常量、数组、函数、结构体、共用体、自定义类型等。,命名规则,只能包括大小写字母、数字和下划线;,首字符必须是字母或下划线;,一般内部标识符的前31个字符有效,而外部标识符的前6个字符有效;,(视具体编译器的规定),不能与关键字相同。,C语言快速入门,count,,,student_name,,,sum,,,test13,,,_number,,,Sum,M.John,,,$123,,,hi!,,,12xyz,,
39、void,55,Visual C+6.0编程环境,举例演示,Visual C+6.0的基本操作,创建工作区,创建工程(程序)并添加到工作区,创建源文件并添加到工程,构建工程(编译、链接),运行程序,C语言快速入门,56,程序的测试与调试,程序错误,语法错误,未遵循C的语法规则。,编译器可以检查。,运行时错误,在程序运行时执行了无法处理的操作。,逻辑错误,程序不能按照预期的方式运行,不能产生预期的结果。,C语言快速入门,57,程序的测试与调试,程序测试,审查和运行程序,检测程序是否存在错误。,测试步骤,在编译前仔细检查程序的源代码,看看是否有明显的错误。,查看编译器发现的语法错误。,对于运行时
40、错误和逻辑错误可以采用正确输出测试。,想找出所有错误是不切实际的。,C语言快速入门,58,程序的测试与调试,程序调试,隔离和修正错误。,调试方法,采用手工方式来跟踪程序。,在程序中的关键点放置输出语句来显示变量的值。,使用调试器。,C语言快速入门,59,小结,C程序的基本结构,C语言程序是由一个或多个函数组成的。函数可以是标准库函数和自定义的函数。,C语言的语句可以包含一个表达式,也可以包含一个函数调用,以一个分号作为结束标志。,C语言中的变量在使用之前必须先声明,通过声明语句中为变量指定一个名字和数据类型。可以通过赋值运算改变变量的值。,C语言可以使用scanf()函数和printf()函数
41、输入和输出数据。,C语言快速入门,60,小结,编译器可以发现程序中的语法错误,但是程序中的运行时错误和逻辑错误只有在程序运行时才表现出来。检测运行时错误和逻辑错误的一种简单实用的方法是跟踪程序的运行状态,即程序每执行一步之后所有或主要变量的值。,C语言快速入门,61,第三讲 基本数据类型,第三讲 基本数据类型,引例,变量与常量,预备知识,内储存器的组织,数据类型,基本数据类型,整数类型,字符,浮点类型,C语言程序设计,63,引例,引例,问题,计算任意一个圆的面积。,源程序,(cw02-01.c),基本数据类型,#include,void main(),float r,area;,/定义变量,s
42、canf(“%f”,/读取输入的半径,area=3.14*r*r;,/计算圆的面积,printf(“area=%f”,area);,/输出,1,area=3.140000,area,r,area=,r,2,64,变量与常量,数据,(Data),程序需要使用数据。,数据是信息的载体。,数据有多种形式:数、字符、图片等。,常量,(Constants),在程序运行之前可以预先设定,并在整个运行过程中没有变化的数据。,例如引例中的圆周率3.14。,变量,(Variables),在程序运行过程中可能变化或被赋值的数据。,例如引例中的半径和面积。,基本数据类型,65,数据类型,数据类型的作用,决定数据的存
43、储方式和占用的存储空间的大小。,决定可以进行的操作。,C语言的数据类型,基本类型,整型,(integer),,字符型,(character),,浮点型,(floating-point),,枚举类型,(enumeration),构造类型,结构体,(structure),,共用体,(union),,数组,(array),指针类型,(pointer),空类型,(void),基本数据类型,66,位、字节和字,内存储器的组织,基本数据类型,位(bit),:最小的存储单位,可以容纳两个值之一,即0或1。,2000,2001,2002,字节(Byte),:基本的存储单位,8位。,字(word),:自然的存储
44、单位,包含若干个字节。例如32位机的一个字就是32位。,地址,:以字节为单位从0开始编号。,67,整数的存储方式,有符号的正整数,在内存中以,二进制补码,形式存放。,正整数的补码与原码相同。,例如:10,基本数据类型,符号位,0 0 0 0 0 0 0 0,0 0 0 0 1 0 1 0,00000000,00001010,RAM,数轴,0,2,15,-1=32767,可表示的数的范围,-2,15,=-32768,68,整数的存储方式,有符号的负整数,在内存中以,二进制补码,的形式存放。,例如:-10,基本数据类型,符号位,1 1 1 1 1 1 1 1,1 1 1 1 0 1 1 0,111
45、11111,11110110,RAM,-10的原码,1,0 0 0 0 0 0 0,0 0 0 0 1 0 1 0,1,1 1 1 1 1 1 1,1 1 1 1 0 1 0 1,1,1 1 1 1 1 1 1,1 1 1 1 0 1 1 0,按位取反,加一后得到 -10的补码,符号位不变,69,整数的存储方式,无符号整数,所有二进制位都存放数值。,例如:65535,基本数据类型,1 1 1 1 1 1 1 1,1 1 1 1 1 1 1 1,11111111,11111111,RAM,0,2,16,-1=65535,可表示的数的范围,70,整数的类型,C语言提供多种整数类型,为程序员提供了针
46、对不同用途的多种选择。,基本数据类型,类型名称,类型说明符,字节数,数值范围,基本整型,signed,int,4,-2147483648 2147483647,短整型,signed,short,int,2,-3276832767,长整型,signed,long,int,4,-2147483648 2147483647,无符号基本整型,unsigned,int,4,04294967295,无符号短整型,unsigned short,int,2,065535,无符号长整型,unsigned long,int,4,04294967295,C标准只规定:,short int long,最大最小值参考,
47、仅供参考,实际值与所使用的操作系统、编译系统、机器有关。,71,整型常量,整型常量,有三种形式:,十进制,(decimal),整数,12 65 65535,八进制,(octal),整数:带前缀,0,(zero),0,14,0,101,0,177777,十六进制,(hexadecimal),整数:带前缀,0 x,或,0X,0 x,c,0 x,41,0 x,ffff,默认类型是int,即有符号的基本整型。,可以加上后缀,u,或,U,表示无符号整数,或者,l,或,L,表示长整数。,0 x,b5,Lu,基本数据类型,72,RAM,整型变量,声明变量,(Declaration),变量在使用之前必须被声明
48、声明语句的格式:,举例,基本数据类型,.,;,int counter;,int width,height;,short x,y;,long number;,变量声明创建了变量:为变量分配了存储空间。,height,73,整型变量,初始化,(Initialize),变量,为变量赋一个初始值。,可以在声明语句中初始化变量。,举例,变量获得值的方法,直接赋值,输入,初始化,基本数据类型,int counter=0;,int width=352,height=288;,初始化式,RAM,288,height,74,整型变量,输出变量的值,可以使用,printf(),函数。,与,int,类型对应的格
49、式说明符是,%d,。,举例,(cw02-02a.c),基本数据类型,#include,void main(),int a,b;,a=32767;b=-32768;,printf(a=,%d,b=,%d,n,a,b,);,a=32767,b=-32768,75,整数的溢出,溢出,整数太大,超出了整数类型的数值范围。,使用,printf(),时与,unsigned int,类型对应的格式说明符是,%u,。,举例,(cw02-02b.c),基本数据类型,#include,void main(),int a,b;,unsigned c,d;,a=2147483647;b=a+1;,c=42949672
50、95;d=c+1;,printf(a=%d,b=%dn,a,b);,printf(c=%u,d=%u,c,d);,a=2147483647,b=-2147483648,c=4294967295,d=0,?,76,整数的溢出,溢出,结果分析,结论,a+1 的结果(2147483648)超出了基本整型变量 b 所能容纳(表示)的数值范围(-21474836482147483647)。,请分析d的结果。,基本数据类型,0 1 1 1 1 1 1 1.1 1 1 1 1 1 1,1 0 0 0 0 0 0 0,.,0 0 0 0 0 0 0,a(2147483647),1 0 0 0 0 0 0 0.






