南京邮电大学C语言课件第1章.pps_第1页
南京邮电大学C语言课件第1章.pps_第2页
南京邮电大学C语言课件第1章.pps_第3页
南京邮电大学C语言课件第1章.pps_第4页
南京邮电大学C语言课件第1章.pps_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C程序设计 第第 1 1 章章 引言引言 第第 2 2 章章 C C语言的基本数据类型语言的基本数据类型 第第 3 3 章章 顺序结构程序设计顺序结构程序设计 第第 5 5 章章 循环结构程序设计循环结构程序设计 第第 6 6 章章 函数函数 第第 7 7 章章 编译预处理命令编译预处理命令 第第 8 8 章章 数组数组 第第 4 4 章章 选择结构程序设计选择结构程序设计 课程概述课程概述 第第 9 9 章章 指针指针 第第 10 10 章章 字符串及其操作字符串及其操作 第第 11 11 章章 结构体与共同体结构体与共同体 第第 12 12 章章 文件处理文件处理 引引 言言 1.1 1.1 程序设计语言程序设计语言 1.2 1.2 程序设计的基本过程程序设计的基本过程 1.3 1.3 流程图流程图 1.3.1 1.3.1 传统流程图传统流程图 1.3.2 1.3.2 结构化流程图结构化流程图 1.4 1.4 简单的简单的C C语言程序语言程序 1.5 C1.5 C语言程序的上机步骤语言程序的上机步骤 1.6 1.6 习题习题 1.7 1.7 实验实验 第第 1 1 章章 分类分类机器语言、汇编语言和高级语言。 机器语言、汇编语言和高级语言。 计算机是由人来指挥的,人们为了用计算机来解决实际问题,一般总计算机是由人来指挥的,人们为了用计算机来解决实际问题,一般总 是要编制程序。是要编制程序。 程序程序 是指用某种程序设计语言为工具编制出来的动作序列,它表达是指用某种程序设计语言为工具编制出来的动作序列,它表达 了人们解决问题的思路,用于指挥计算机进行一系列操作,从了人们解决问题的思路,用于指挥计算机进行一系列操作,从 而实现预定的功能。而实现预定的功能。 程序设程序设 计语言计语言 是用户用来编写程序的语言,它是人与计算机之间交换信息的是用户用来编写程序的语言,它是人与计算机之间交换信息的 工具。工具。 是计算机软件系统的重要组成部分,而相应的各种语言处理程是计算机软件系统的重要组成部分,而相应的各种语言处理程 序属于系统软件。序属于系统软件。 Language 教学进程教学进程 程序设计语言程序设计语言1.1 1.1 1.1.11.1.1 机器语言机器语言 对于计算机来说,一组机器指令就称为机器语言程序。对于计算机来说,一组机器指令就称为机器语言程序。 机器语言是最底层的计算机语言。计算机硬件可以直接识别用机器机器语言是最底层的计算机语言。计算机硬件可以直接识别用机器 语言编写的程序。语言编写的程序。 在用机器语言编写的程序中,每一条机器指令都是二进制形式的指在用机器语言编写的程序中,每一条机器指令都是二进制形式的指 令代码。令代码。 Language 教学进程教学进程 对于不同的计算机硬件对于不同的计算机硬件( (主要是主要是CPU)CPU),其指令系统是不同的,因此,其指令系统是不同的,因此, 针对一种计算机所编写的机器语言程序不能在另一种计算机上运行。由于针对一种计算机所编写的机器语言程序不能在另一种计算机上运行。由于 机器语言程序是直接针对计算机硬件的,因此,机器语言程序的执行效率机器语言程序是直接针对计算机硬件的,因此,机器语言程序的执行效率 比较高,能充分发挥计算机的速度性能。但是,用机器语言编写程序的难比较高,能充分发挥计算机的速度性能。但是,用机器语言编写程序的难 度比较大,容易出错,而且程序的直观性比较差,也不容易移植。度比较大,容易出错,而且程序的直观性比较差,也不容易移植。 指令代码指令代码 操作码操作码操作码告诉计算机作何种操作操作码告诉计算机作何种操作 地址码地址码地址码则指出被操作的对象地址码则指出被操作的对象 1.1.21.1.2 汇编语言汇编语言 为了便于理解与记忆,人们采用能帮助记忆的英文缩写符号(称为为了便于理解与记忆,人们采用能帮助记忆的英文缩写符号(称为 指令助记符指令助记符)来代替机器语言指令代码中的操作码,用地址符号来)来代替机器语言指令代码中的操作码,用地址符号来 代替地址码。用指令助记符及地址符号书写的指令称为代替地址码。用指令助记符及地址符号书写的指令称为汇编指令汇编指令( (也也 称符号指令称符号指令) ),而用汇编指令编写的程序称为,而用汇编指令编写的程序称为汇编语言源程序汇编语言源程序。汇编。汇编 语言又称符号语言。语言又称符号语言。 教学进程教学进程 需要指出的是,计算机不能直接识别用汇编语言编写的程需要指出的是,计算机不能直接识别用汇编语言编写的程 序,必须由一种专门的翻译程序将汇编语言源程序翻译成序,必须由一种专门的翻译程序将汇编语言源程序翻译成 机器语言程序后,计算机才能识别并执行。这种翻译的过机器语言程序后,计算机才能识别并执行。这种翻译的过 程称为程称为“ “汇编汇编“ “,负责翻译的程序称为,负责翻译的程序称为汇编程序汇编程序。 汇编程序汇编程序 1.1.31.1.3 高级语言高级语言 机器语言和汇编语言都是面向机器的语言,称为低级语言。机器语言和汇编语言都是面向机器的语言,称为低级语言。 教学进程教学进程 低级语言低级语言 高级语言高级语言 从从2020世纪世纪5050年代中期开始逐步发展了面向问题的程序设计年代中期开始逐步发展了面向问题的程序设计 语言,称为高级语言。语言,称为高级语言。 程序设计的主要目标程序设计的主要目标是程序的可读性、易维护性和可移植性。是程序的可读性、易维护性和可移植性。 1 1 2 2 3 3 为了计算表达式为了计算表达式“5+3“5+3“的值,使用高级语言来编程就简单得多。的值,使用高级语言来编程就简单得多。 例子例子 C C PascalPascalBASICBASIC 1.21.2程序设计的基本过程程序设计的基本过程 程序设计程序设计 = = 算法算法 + + 数据结构数据结构 + + 方法方法 + + 工具工具 教学进程教学进程 问题的分析。问题的分析。 结构特性的设计。结构特性的设计。 算法的设计。算法的设计。 流程的描述。流程的描述。 调试与运行。调试与运行。 问题的分析问题的分析1.2.11.2.1 问题的分析问题的分析 根据所要解决的问题性质与类型,最基本的分析内容主要有以下几个方面:根据所要解决的问题性质与类型,最基本的分析内容主要有以下几个方面: 教学进程教学进程 程序设计的基础程序设计的基础 数学模型或常用的方法数学模型或常用的方法 问题的性质问题的性质 进一步确定在解决这个问题过程中进一步确定在解决这个问题过程中 要做些什么?怎么做?要做些什么?怎么做? 输入输入/ /输出数据输出数据1 1)数据的类型是什么?如整型、实)数据的类型是什么?如整型、实 型、双精度型、字符型等。型、双精度型、字符型等。 2 2)在何种设备上进行输入或输出?)在何种设备上进行输入或输出? 3 3)采用什么样的格式进行数据的输)采用什么样的格式进行数据的输 入或输出?入或输出? 结构特性的设计结构特性的设计1.2.2 1.2.2 教学进程教学进程 结构特性的设计结构特性的设计 控制结构控制结构 数据结构数据结构 一个程序的功能不仅取决于所选用的操作,而且还取决于各一个程序的功能不仅取决于所选用的操作,而且还取决于各 操作之间的执行顺序,即程序的控制结构。程序的控制结构实际操作之间的执行顺序,即程序的控制结构。程序的控制结构实际 给出了程序的框架,决定了程序中各操作的执行顺序。在程序设给出了程序的框架,决定了程序中各操作的执行顺序。在程序设 计过程中,通常用流程图形象地表示程序的控制结构。计过程中,通常用流程图形象地表示程序的控制结构。 一般来说,在对数据进行处理时,数据的不同组织形式,一般来说,在对数据进行处理时,数据的不同组织形式, 其处理的效率是不同的。其处理的效率是不同的。 结构特性的设计结构特性的设计 教学进程教学进程 学学 号号姓姓 名名性性 别别年年 龄龄成成 绩绩 8015680156 8015780157 8015880158 8015980159 8016080160 8016180161 8016280162 8016380163 8016480164 8016580165 8016680166 8016780167 8016880168 8016980169 张小明张小明 李小青李小青 赵赵 凯凯 李启明李启明 刘刘 华华 曾小波曾小波 张张 军军 王王 伟伟 胡胡 涛涛 周周 敏敏 杨雪辉杨雪辉 吕永华吕永华 梅梅 玲玲 刘刘 健健 男男 女女 男男 男男 女女 女女 男男 男男 男男 女女 男男 男男 女女 男男 2020 1919 1919 2121 1818 1919 1818 2020 1919 2020 2222 1818 1717 2020 8686 8383 7070 9191 7878 9090 8080 6565 9595 8787 8989 6161 9393 7575 结构特性的设计结构特性的设计 教学进程教学进程 学学 号号姓姓 名名性性 别别年年 龄龄成成 绩绩 8015680156 8015780157 8016280162 8016580165 8016680166 张小明张小明 李小青李小青 张张 军军 周周 敏敏 杨雪辉杨雪辉 男男 女女 男男 女女 男男 2020 1919 1818 2020 2222 8686 8383 8080 8787 8989 学学 号号姓姓 名名性性 别别年年 龄龄成成 绩绩 8015980159 8016180161 8016480164 8016880168 李启明李启明 曾小波曾小波 胡胡 涛涛 梅梅 玲玲 男男 女女 男男 女女 2121 1919 1919 1717 9191 9090 9595 9393 将成绩在将成绩在9090分以上分以上( (包括包括9090分分) )、80808989分、分、70707979分、分、60606969分分 之间的学生情况分别登记在四个独立的表中。之间的学生情况分别登记在四个独立的表中。 结构特性的设计结构特性的设计 教学进程教学进程 学学 号号姓姓 名名性性 别别年年 龄龄成成 绩绩 8015880158 8016080160 8016980169 赵赵 凯凯 刘刘 华华 刘刘 健健 男男 女女 男男 1919 1818 2020 7070 7878 7575 学学 号号姓姓 名名性性 别别年年 龄龄成成 绩绩 8016380163 8016780167 王王 伟伟 吕永华吕永华 男男 男男 2020 1818 6565 6161 由这个例子可以看出,在对数据进行处理时,由这个例子可以看出,在对数据进行处理时, 可以根据所需要作的运算不同,而将数据组织成便可以根据所需要作的运算不同,而将数据组织成便 于运算的形式,以便提高数据处理的效率。于运算的形式,以便提高数据处理的效率。 算法的设计算法的设计1.2.3 1.2.3 教学进程教学进程 算法的设计算法的设计 在进行问题分析时,要建立数学模型或对常用在进行问题分析时,要建立数学模型或对常用 的方法进行分析比较,这就是算法设计。的方法进行分析比较,这就是算法设计。 选择一个好的算法是程序设计的关键。应主要考虑以下两个基本原则:选择一个好的算法是程序设计的关键。应主要考虑以下两个基本原则: 1 1)实现算法所花费的代价要尽量的小,即计算工作量要小。)实现算法所花费的代价要尽量的小,即计算工作量要小。 2 2)根据算法所得到的计算结果应可靠。)根据算法所得到的计算结果应可靠。 算法在执行过程中往往要受到计算工具的限制,算法在执行过程中往往要受到计算工具的限制, 使执行结果产生偏差。使执行结果产生偏差。 是指解题方案的准确而完整的描述。从程序角度来看,是指解题方案的准确而完整的描述。从程序角度来看, 也可以说算法是一个有限条指令的集合,这些指令确也可以说算法是一个有限条指令的集合,这些指令确 定了解决某一特定类型问题的运算序列。定了解决某一特定类型问题的运算序列。 1.2.41.2.4流程的描述流程的描述 流程图流程图 编程编程 教学进程教学进程 程序设计的过程,实际上就是确定解决问题的详细程序设计的过程,实际上就是确定解决问题的详细 步骤,而这些步骤通常称为流程。步骤,而这些步骤通常称为流程。 流程的描述流程的描述 描描 述述 工工 具具 自然语言自然语言 第一步第一步 输入输入x x与与y y。 第二步第二步 判断判断x x是否为是否为0 0: 若若x=0x=0,则输出错误信息;则输出错误信息; 否则计算否则计算y/xzy/xz,且输出且输出z z 。 算法描述语言算法描述语言 【例例1-41-4】 计算并输出计算并输出z=y/xz=y/x 。 INPUT xINPUT x,y y IF (x=0) THENIF (x=0) THEN OUTPUT “ERROR“ OUTPUT “ERROR“ ELSEELSE z=y/x z=y/x OUTPUT z OUTPUT z 1.2.41.2.4流程的描述流程的描述 教学进程教学进程 流程图流程图 编程编程 #include “#include “stdio.hstdio.h“ “ main()main() float x float x,y y,z z; printf(“inputprintf(“input x x,y y:“)“); /*/*输入提示输入提示* */ / scanfscanf(“(“f f,f“f“,&x&x,&y)&y); /*/*输入输入x x与与y y的值的值* */ / if (x=0) if (x=0) printf(“errorprintf(“error! x=0n“)! x=0n“); /*/*若若x=0x=0,则输出错误信息则输出错误信息* */ / else /* else /*否则计算并输出结果否则计算并输出结果* */ / z=y/x z=y/x;printf(“zprintf(“z= =fn“fn“,z)z); 输入输入x , yx , y x = 0x = 0 yesyes nono 输出错误信息输出错误信息 y/xzy/xz 输出输出z z 结束结束 调试与运行调试与运行1.2.5 1.2.5 教学进程教学进程 调试与运行调试与运行 测试测试 是指通过一些典型例子,尽可能多地发现程序中的是指通过一些典型例子,尽可能多地发现程序中的 错误。因此,测试的目的是为了发现程序中的错误错误。因此,测试的目的是为了发现程序中的错误 ,而不是为了证明程序正确。,而不是为了证明程序正确。 调试调试 是指找出程序中错误的具体位置,并改正错误。因是指找出程序中错误的具体位置,并改正错误。因 此,调试又称查错。此,调试又称查错。 测试与调试往往是交替进行的,通过测试发现程序测试与调试往往是交替进行的,通过测试发现程序 中的错误,通过调试进一步找出错误的位置并改正错误。中的错误,通过调试进一步找出错误的位置并改正错误。 这个过程需要重复多次。这个过程需要重复多次。 传统流程图传统流程图1.3.11.3.1 教学进程教学进程 1.31.3流程图流程图 任何复杂的程序都可以用顺序、选择和循环三种基本结构组合而成任何复杂的程序都可以用顺序、选择和循环三种基本结构组合而成 。 19661966年,年,BohmBohm和和JacopiniJacopini 顺序结构反映了若干个模块之间连续执行的顺序。顺序结构反映了若干个模块之间连续执行的顺序。 选择结构中,由某个条件选择结构中,由某个条件P P的取值来决定执行两个模块之间的哪一个。的取值来决定执行两个模块之间的哪一个。 在当型循环结构中,只有当某个条件成立时才重复执行特定的模块在当型循环结构中,只有当某个条件成立时才重复执行特定的模块 (称为循环体)。(称为循环体)。 在直到型循环结构中,重复执行一个特定的模块,直到某个条件成立在直到型循环结构中,重复执行一个特定的模块,直到某个条件成立 时才退出该模块的重复执行。时才退出该模块的重复执行。 在多情况选择结构中,根据某控制变量的取值来决定选择多个模块中在多情况选择结构中,根据某控制变量的取值来决定选择多个模块中 的哪一个。的哪一个。 一般的和多情况一般的和多情况 选择结构选择结构 当型循环和当型循环和 直到型循环直到型循环 传统流程图传统流程图 教学进程教学进程 A A B B 顺序结构顺序结构 P P A A B B F F T T 选择结构选择结构 P P S S F F T T 当型循环当型循环 S S P P F F T T 直到型循环直到型循环 p=1p=1 A A1 1 T T F F p=2p=2 A A2 2 T T F F p=np=n A An n T T F F 多情况选择结构多情况选择结构 传统流程图传统流程图 教学进程教学进程 传统流程图有以下几个主要缺点:传统流程图有以下几个主要缺点: 传统流程图本质上不是逐步求精的好工具,它会使程序员传统流程图本质上不是逐步求精的好工具,它会使程序员 过早地考虑程序的控制流程,而不去考虑程序的全局结构。过早地考虑程序的控制流程,而不去考虑程序的全局结构。 传统流程图不易表示层次结构。传统流程图不易表示层次结构。 传统流程图不易表示数据结构和模块调用关系等重要信息。传统流程图不易表示数据结构和模块调用关系等重要信息。 传统流程图中用箭头代表控制流,因此,程序员不受任何传统流程图中用箭头代表控制流,因此,程序员不受任何 约束,可以完全不顾结构程序设计的思想,随意进行转移约束,可以完全不顾结构程序设计的思想,随意进行转移 控制。控制。 结构化流程图结构化流程图1.3.21.3.2 教学进程教学进程 结构化程序设计要求把程序的结构限制为顺序、选择和循环三种基本结构化程序设计要求把程序的结构限制为顺序、选择和循环三种基本 结构,以便提高程序的可读性。结构,以便提高程序的可读性。 这种结构化程序具有以下两个特点:这种结构化程序具有以下两个特点: 以控制结构为单位,只有一个入口和一个出口,使各单位之间的接口比以控制结构为单位,只有一个入口和一个出口,使各单位之间的接口比 较简单,每个单位也容易被人们所理解。较简单,每个单位也容易被人们所理解。 缩小了程序的静态结构与动态执行之间的差异,使人们能方便、正确地缩小了程序的静态结构与动态执行之间的差异,使人们能方便、正确地 理解程序的功能。理解程序的功能。 NSNS图图 是一种不允许破坏结构化原则的图形算法描述工具,又称是一种不允许破坏结构化原则的图形算法描述工具,又称 盒图。在盒图。在NSNS图中,去掉了传统流程图中容易引起麻烦的流程线,全部图中,去掉了传统流程图中容易引起麻烦的流程线,全部 算法都写在一个框内,每一种基本结构也是一个框。算法都写在一个框内,每一种基本结构也是一个框。 结构化流程图结构化流程图 教学进程教学进程 NSNS图图 顺序结构顺序结构 S S1 1 S S2 2 S S3 3 循环结构循环结构 当型循环结构当型循环结构 直到型循环结构直到型循环结构 WHILEWHILE条件条件 S S UNTILUNTIL条件条件 S S 选择结构选择结构 两路分支结构两路分支结构 多路分支结构多路分支结构 条件条件 满足满足不满足不满足 S S1 1 S S2 2 条件条件 情况情况1 1情况情况n n S S 1 S S2 2 情况情况2 2 S Sn n 在循环体在循环体S S中,应该要有改变条件的中,应该要有改变条件的 成分,否则将会造成死循环。成分,否则将会造成死循环。 结构化流程图结构化流程图 功能域比较明确,可以从框图中直接反映出来。功能域比较明确,可以从框图中直接反映出来。 不可能任意转移控制,符合结构化原则。不可能任意转移控制,符合结构化原则。 教学进程教学进程 在以上三种基本结构中,每一个模块在以上三种基本结构中,每一个模块S S或或S1S1、S2S2、S3S3等都又可以等都又可以 是这三种基本结构之一。是这三种基本结构之一。 由以上所描述的三种基本控制结构的形式可以看出,由以上所描述的三种基本控制结构的形式可以看出,NSNS图有以下图有以下 几个基本特点:几个基本特点: 很容易确定局部和全程数据的作用域。很容易确定局部和全程数据的作用域。 很容易表示嵌套关系,也可以表示模块的层次结构。很容易表示嵌套关系,也可以表示模块的层次结构。 结构化流程图结构化流程图 教学进程教学进程 3 n3 n i i 除尽除尽 n n 输出输出n n 1 flag1 flag flag = 0?flag = 0? 是是否 否 n+1 nn+1 n 是是否否 ik,ik,且且flag=0flag=0 n k, 2 i, 0 flagn k, 2 i, 0 flag i+1 ii+1 i n 100n 100 简单的简单的C C语言程序语言程序1.41.4 教学进程教学进程 【例例1-11-1】 编写一个编写一个C C程序,其功能是显示字符串程序,其功能是显示字符串“THE C “THE C PROGRAMMING LANGUAGE“PROGRAMMING LANGUAGE“。其。其C C程序如下:程序如下: #include “ #include “stdio.hstdio.h“ “ main() main() printf(“THEprintf(“THE C PROGRAMMING LANGUAGE n “) C PROGRAMMING LANGUAGE n “); 这是一个简单而完整的这是一个简单而完整的C C语言程序。如果将这个程序利用编辑语言程序。如果将这个程序利用编辑 程序输入进计算机,并经过编译和连接后,运行结果是在显示器屏程序输入进计算机,并经过编译和连接后,运行结果是在显示器屏 幕的当前光标位置处显示如下字符串:幕的当前光标位置处显示如下字符串: THE C PROGRAMMING LANGUAGETHE C PROGRAMMING LANGUAGE 换行换行 教学进程教学进程 【例例1-21-2】 下面下面C C语言程序的功能是:从键盘输入两个实数,然后计算并语言程序的功能是:从键盘输入两个实数,然后计算并 显示输出这两个实数平方之和的平方根值。显示输出这两个实数平方之和的平方根值。 #include “ #include “stdio.hstdio.h“ “ #include “math.h“ #include “math.h“ main ( ) main ( ) float x float x,y y,s s; /* /* 定义三个实型变量定义三个实型变量 * */ / printf(“inputprintf(“input x and y x and y :“)“); /* /* 给出输入提示给出输入提示 * */ / scanfscanf(“(“f f,f“f“,&x&x,&y)&y); /* /* 输入输入x x与与y y值值 * */ / s= s=sqrt(xsqrt(x*x+y*y)*x+y*y); /* /* 计算计算 * */ / printf(“sprintf(“s= =fn“fn“,s) s); /* /* 输出结果输出结果 * */ / 教学进程教学进程 在一个在一个C C函数模块中,由左右花括号函数模块中,由左右花括号 括起来的部分是函数括起来的部分是函数 体,其中的语句系列实现函数的预定功能。体,其中的语句系列实现函数的预定功能。 C C程序中的每一个语句必须以程序中的每一个语句必须以“ “;” ”结束,但书写格式是自由结束,但书写格式是自由 的。即在的。即在C C程序中,一行上可以写多个语

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论