太原理工大学测绘C语言程序设计课件上

上传人:痛*** 文档编号:186682290 上传时间:2023-02-08 格式:PPT 页数:171 大小:1.92MB
返回 下载 相关 举报
太原理工大学测绘C语言程序设计课件上_第1页
第1页 / 共171页
太原理工大学测绘C语言程序设计课件上_第2页
第2页 / 共171页
太原理工大学测绘C语言程序设计课件上_第3页
第3页 / 共171页
点击查看更多>>
资源描述
测绘测绘C C语言程序设计语言程序设计太原理工大学太原理工大学矿业工程学院矿业工程学院测绘科学与技术系测绘科学与技术系测绘测绘C C语言程序设计语言程序设计第一章第一章3 一、程序设计语言的发展一、程序设计语言的发展 二、二、C语言特点语言特点 三、简单的三、简单的C语言程序介绍语言程序介绍 四、运行四、运行C程序的步骤和方法程序的步骤和方法4 一、程序设计语言的发展一、程序设计语言的发展p计算机程序计算机程序:一组计算机能识别和执行的指令:一组计算机能识别和执行的指令只要让计算机执行这个程序,计算机就会自动地、有条不只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作紊地进行工作计算机的一切操作都是由程序控制的,离开程序,计算机计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成将一事无成p计算机语言:计算机语言:人和计算机交流信息的、计算机和人都能识别的人和计算机交流信息的、计算机和人都能识别的语言语言5 一、程序设计语言的发展一、程序设计语言的发展1、机器语言、机器语言:由由0和和1组成的指令组成的指令2、汇编语言、汇编语言:直接面向处理器的程序设计语言直接面向处理器的程序设计语言3、高级语言、高级语言p通用语言通用语言:Fortran、Basic、C、VB、C+(VC+)p数据库语言数据库语言:Foxbase、FoxPro、SQL、Delphi、PowerBuildp网页制作工具网页制作工具:HTML、Java6 一、程序设计语言的发展一、程序设计语言的发展4、C语言历史语言历史pC语言是由著名的计算机科学家语言是由著名的计算机科学家Dennis Ritchie创造的,其历史创造的,其历史可以追溯到可以追溯到ALGOL 60。ALGOL 60,也称为,也称为A语言,是纯粹的语言,是纯粹的面向描述计算过程的语言。面向描述计算过程的语言。pC语言的直接前身语言的直接前身B语言就是从语言就是从BCPL发展而来的。发展而来的。p在在19721973年间,年间,Denis Ritchie改进了改进了B语言,为其添加了数语言,为其添加了数据类型的概念,并将原来的解释程序改写为可以在直接生成机据类型的概念,并将原来的解释程序改写为可以在直接生成机器代码的编译程序,并将其命名为器代码的编译程序,并将其命名为C。p现在,现在,C语言已成为用途最为广泛的计算机高级语言,不仅可语言已成为用途最为广泛的计算机高级语言,不仅可以用于编写系统软件,还可以用于构建各个领域的应用软件。以用于编写系统软件,还可以用于构建各个领域的应用软件。7 一、程序设计语言的发展一、程序设计语言的发展5、C语言标准语言标准pK&R C(Kernighan&Ritchie)pC89或或ANSI C(American National Standards Institute)pC99或或ISO(International Organization for Standardization)p注意注意:不同版本的不同版本的C编译系统所实现的语言功能和语法规则略有编译系统所实现的语言功能和语法规则略有差别,因此读者应了解所用的差别,因此读者应了解所用的C语言编译系统的特点语言编译系统的特点(可以参阅可以参阅相关手册相关手册),本课程基于,本课程基于ANSI C。8 二、二、C语言特点语言特点1、语言简洁、紧凑,使用方便、灵活、语言简洁、紧凑,使用方便、灵活:32个关键词、个关键词、9种控制语句种控制语句2、运算符丰富、运算符丰富:34种运算符种运算符3、数据结构丰富、数据结构丰富:4、C语言是完成模块化和结构化语言是完成模块化和结构化:5、语法限制不太严格,程序设计自由度大,但同时不易查找错误、语法限制不太严格,程序设计自由度大,但同时不易查找错误:6、C语言允许直接访问物理地址,能进行位语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作大部分功能,可以直接对硬件进行操作:有人把有人把C称为称为“高级语言中的低高级语言中的低级语言级语言”或或“中级语言中级语言”,意为兼有高级和低级语言的特点。,意为兼有高级和低级语言的特点。7、生成目标代码质量高,程序执行效率高、生成目标代码质量高,程序执行效率高:8、用、用C语言编写的程序可移植性好(与汇编语言相比)语言编写的程序可移植性好(与汇编语言相比)9 三、简单的三、简单的C语言程序介绍语言程序介绍例例1 在屏幕上显示在屏幕上显示:Programming is fun!10 三、简单的三、简单的C语言程序介绍语言程序介绍 例例1 在屏幕上显示在屏幕上显示:Programming is fun!#include 编译预处理命令 void main()主函数 printf(Programming is fun!n);语句结束 输出函数3.语句由;结束语句由;结束换行符11 三、简单的三、简单的C语言程序介绍语言程序介绍 例例 2.1:计算并显示计算并显示2个数的和个数的和#include void main()int value1,value2,sum;变量定义变量定义 value1=5;value2=2;变量使用变量使用 sum=value1+value2;printf(The sum is%d n,sum);输出结果输出结果 12 三、简单的三、简单的C语言程序介绍语言程序介绍 例例 2.2:计算计算2个数的和,以算式的形式显示个数的和,以算式的形式显示#include void main()int value1,value2,sum;value1=5;value2=2;sum=value1+value2;printf(%d+%d=%d n,value1,value2,sum);13 三、简单的三、简单的C语言程序介绍语言程序介绍 例例 3:输入输入2个数,并求两数之和个数,并求两数之和#include void main()int value1,value2,sum;printf(Input 2 numbers:n);输入提示输入提示 scanf(%d%d,&value1,&value2);读入读入2个数个数 sum=value1+value2;printf(%d+%d=%d n,value1,value2,sum);14 三、简单的三、简单的C语言程序介绍语言程序介绍 例例 4:输入输入m,n 计算计算m!和和n!#include void main()int m,n,resm,resn;scanf(%d%d,&m,&n);resm=fact(m);/*调用函数调用函数fact计算计算m!*/resn=fact(n);/*调用函数调用函数fact计算计算n!*/printf(%d,%dn,resm,resn);求阶乘函数求阶乘函数int fact(int k)/*函数定义函数定义*/int i,y=1;for(i=2;i pS4:使使i的值加的值加1,即,即i+1=iS5:如果如果i不大于不大于5,返回重新执行步骤,返回重新执行步骤S3以及其后的步骤以及其后的步骤S4和和S5;否则,算法结束。最后得到;否则,算法结束。最后得到p的值就是的值就是5!的值。的值。上面的上面的S1,S2代表步骤代表步骤1,步骤,步骤2S是是step(步步)的缩写。这是写的缩写。这是写算法的习惯用法。算法的习惯用法。30 二、简单算法举例二、简单算法举例如果题目改为求如果题目改为求1357911 S1:1=pS2:3=iS3:pi=pS4:i+2=iS5:若若i11,返回,返回S3;否则,结束。否则,结束。可以看出,用这种方法表示的算法具有可以看出,用这种方法表示的算法具有通用性、灵活性通用性、灵活性。S3到到S5组成组成一个一个循环循环,在实现算法时,要反复多次执行,在实现算法时,要反复多次执行S3、S4、S5等步骤,直到等步骤,直到某一时刻,执行某一时刻,执行S5步骤时经过判断,乘数步骤时经过判断,乘数i已超过规定的数值而不返回已超过规定的数值而不返回S3步骤为止,此时步骤为止,此时算法结束算法结束,变量,变量p的值就是所求结果。的值就是所求结果。31 二、简单算法举例二、简单算法举例例例:有有50个学生,要求将他们之中成绩在个学生,要求将他们之中成绩在80分以上者打印出来。用分以上者打印出来。用n表示表示学生学号,学生学号,n1代表第一个学生学号,代表第一个学生学号,ni代表第代表第i个学生学号。用个学生学号。用g代表学生代表学生成绩,成绩,gi代表第代表第i个学生成绩,算法可表示如下。个学生成绩,算法可表示如下。S1:1=iS2:如果:如果gi 80,则打印,则打印ni和和gi,否则不打印,否则不打印S3:i+1=iS4:如果:如果i50,返回,返回S2,继续执行;否则,算法结束。,继续执行;否则,算法结束。变量变量i作为下标,用它来控制序号作为下标,用它来控制序号(第几个学生,第几个成绩第几个学生,第几个成绩)。当。当i超过超过50时,表示已对时,表示已对50个学生的成绩处理完毕,算法结束。个学生的成绩处理完毕,算法结束。32 二、简单算法举例二、简单算法举例例例:判定判定20002500年中的每一年是否闰年,将结果输出。年中的每一年是否闰年,将结果输出。p何为闰年?何为闰年?能被能被4整除,但不能被整除,但不能被100整除的年份都是闰年,如整除的年份都是闰年,如1996年,年,2004年是闰年;年是闰年;能被能被100整除,又能被整除,又能被400整除的年份是闰年。如整除的年份是闰年。如1600年、年、2000年年是闰年。是闰年。33 二、简单算法举例二、简单算法举例p算法:设算法:设y 为被检测的年份。可采取以下步骤:为被检测的年份。可采取以下步骤:S1:2000=yS2:y不能被不能被4整除,则输出整除,则输出y“不是闰年不是闰年”。然后转到然后转到S6S3:若:若y能被能被4整除,不能被整除,不能被100整除,则输出整除,则输出y“是闰年是闰年”。然后然后转到转到S6S4:若:若y能被能被100整除,又能被整除,又能被400整除,输出整除,输出y“是闰年是闰年”;否则;否则输出输出“不是闰年不是闰年”。然后转到然后转到S6S5:输出:输出y“不是闰年不是闰年”S6:y+1=yS7:当:当y2500时,转时,转S2继续执行,如继续执行,如y2500,算法停止。,算法停止。34 二、简单算法举例二、简单算法举例p算法:算法:在这个算法中,每做一步,在这个算法中,每做一步,都分别分离出一些范围都分别分离出一些范围(已已能判定为闰年或非闰年能判定为闰年或非闰年),逐步缩小范围,使被判断的逐步缩小范围,使被判断的范围愈来愈小,直至执行范围愈来愈小,直至执行S5时,只可能是非闰年。时,只可能是非闰年。“其他其他”包括能被包括能被4整除,整除,又能被又能被100整除,而不能被整除,而不能被400整除的那些年份整除的那些年份(如如1900年年),是非闰年。,是非闰年。year不能被不能被4整除整除非闰年非闰年year被被4整除,但不整除,但不能被能被100整除整除闰年闰年year被被100整除,又整除,又能被能被400整除整除闰年闰年其他其他非闰年非闰年35二、简单算法举例二、简单算法举例例例p算法:算法:S1:1=signS2:1=sumS3:2=denoS4:(-1)sign=signS5:sign(1/deno)=termS6:sum+term=sumS7:deno+1=denoS8:若:若deno100返回返回S4;否则算法结束。;否则算法结束。单词作变量名,算法易于理解单词作变量名,算法易于理解sign:数值符号;数值符号;sum:累加和;累加和;deno:分母;分母;term:某一项某一项反复执行反复执行S4到到S8,直到分母大于,直到分母大于100为止。一共执行为止。一共执行99次循环,向次循环,向sum累累加了加了99个分数。个分数。11 11111-23 4599 100求-1-1/21-1/2=sum(1/2)3满足,返回满足,返回S436二、简单算法举例二、简单算法举例例例p算法:算法:S1:1=signS2:1=sumS3:2=denoS4:(-1)sign=signS5:sign(1/deno)=termS6:sum+term=sumS7:deno+1=denoS8:若:若deno100返回返回S4;否则算法结束。;否则算法结束。11 11111-23 4599 100求11/31/2+1/3=sum(5/6)4满足,返回满足,返回S437二、简单算法举例二、简单算法举例例例:对一个大于或等于对一个大于或等于3的正整数,判断它是不是一个素数的正整数,判断它是不是一个素数p概念:指除了概念:指除了1和该数本身之外,不能被其他任何整数整除的数。例和该数本身之外,不能被其他任何整数整除的数。例如,如,13是素数,因为它不能被是素数,因为它不能被2,3,4,12整除。整除。p算法:判断一个数算法:判断一个数n(n3)是否素数的方法是:将是否素数的方法是:将n作为被除数,将作为被除数,将2到到(n-1)各个整数轮流作为除数,如果都不能被整除,则各个整数轮流作为除数,如果都不能被整除,则n为素数。为素数。S1:输入:输入n的值的值S2:2=i(i作为除数)作为除数)S3:n被被i除,得余数除,得余数rS4:如果:如果r=0,表示,表示n能被能被i整除,则打印整除,则打印n“不是素数不是素数”,算法结束;否,算法结束;否则执行则执行S5S5:i+1=iS6:如果:如果in-1,返回,返回S3;否则打印;否则打印 n“是素数是素数”,然后结束。,然后结束。)n可改为2/n(或38 三、算法的特性三、算法的特性1、有穷性、有穷性:一个算法应包含有限的操作步骤,而不能是无限的。一个算法应包含有限的操作步骤,而不能是无限的。2、确定性、确定性:算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。两可的。3、有零个或多个输入、有零个或多个输入:所谓输入是指在执行算法时需要从外界取得必要的信所谓输入是指在执行算法时需要从外界取得必要的信息。息。4、有一个或多个输出、有一个或多个输出:算法的目的是为了求解,算法的目的是为了求解,“解解”就是输出。没有输出就是输出。没有输出的算法是没有意义的。的算法是没有意义的。5、有效性、有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。deno0n被被i除,得余数除,得余数r()n被一个整数除,得被一个整数除,得余数余数r()除数不能为除数不能为039 四、怎样表示一个算法四、怎样表示一个算法p 自然语言自然语言p 传统流程图传统流程图p 结构化流程图结构化流程图p 伪代码伪代码p PAD图图(Problem Analysis Diagram)40 四、怎样表示一个算法四、怎样表示一个算法1、用自然语言表示算法、用自然语言表示算法2、用流程图表示算法、用流程图表示算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图4、用、用N-S流程图表示算法流程图表示算法5、用伪代码表示算法、用伪代码表示算法6、用计算机语言表示算法、用计算机语言表示算法41 四、怎样表示一个算法四、怎样表示一个算法1、用自然语言表示算法、用自然语言表示算法p自然语言就是人们日常使用的语言。自然语言就是人们日常使用的语言。p用自然语言表示通俗易懂,但文字冗长,用自然语言表示通俗易懂,但文字冗长,容易出现容易出现“歧义性歧义性”。自。自然语言表示的含义往往不太严格,要根据上下文才能判断其正确含义。然语言表示的含义往往不太严格,要根据上下文才能判断其正确含义。此外,用自然语言描述包含分支和循环的算法,不很方便。因此,除此外,用自然语言描述包含分支和循环的算法,不很方便。因此,除了很简单的问题以外,一般不用自然语言描述算法。了很简单的问题以外,一般不用自然语言描述算法。42 四、怎样表示一个算法四、怎样表示一个算法2、用流程图表示算法、用流程图表示算法(传统流程图传统流程图)p美国国家标准化协会美国国家标准化协会ANSI(American National Standard Institute)规规定了一些常用的流程图符号。定了一些常用的流程图符号。43 四、怎样表示一个算法四、怎样表示一个算法2、用流程图表示算法、用流程图表示算法(传统流程图传统流程图)例例:求求123451 1t ti5i5开始开始2 2i it t*i it ti+1i+1i i结束结束N NY Y44 四、怎样表示一个算法四、怎样表示一个算法2、用流程图表示算法、用流程图表示算法(传统流程图传统流程图)例例:有有50个学生,要求将成绩在个学生,要求将成绩在80分以上的学生的学号和成绩输出。分以上的学生的学号和成绩输出。1ii50开始开始i+1i结束结束NY输入输入ni、gi1i开始开始gi80输出输出ni、gii+1ii50NYYN如果包括输入数据部分如果包括输入数据部分1ii50开始开始i+1i结束结束NY输入输入ni、gi1igi80输出输出ni、gii+1ii50NYYN如果包括输入数据部分如果包括输入数据部分47 四、怎样表示一个算法四、怎样表示一个算法2、用流程图表示算法、用流程图表示算法(传统流程图传统流程图)例例:判定判定20002500年中的每一年是否闰年,将结果输出。年中的每一年是否闰年,将结果输出。NYNYYNYN49 四、怎样表示一个算法四、怎样表示一个算法2、用流程图表示算法、用流程图表示算法(传统流程图传统流程图)p流程图是表示算法的较好的工具流程图是表示算法的较好的工具p一个流程图包括以下几部分:一个流程图包括以下几部分:表示相应操作的框表示相应操作的框带箭头的流程线带箭头的流程线(流程线不要忘记画箭头,否则难以判定各框的流程线不要忘记画箭头,否则难以判定各框的执行次序执行次序)框内外必要的文字说明框内外必要的文字说明50 四、怎样表示一个算法四、怎样表示一个算法2、用流程图表示算法、用流程图表示算法(传统流程图传统流程图)p传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以不受限制地使流程随意地转来转去,使流格限制。因此,使用者可以不受限制地使流程随意地转来转去,使流程图变得毫无规律。程图变得毫无规律。BS型算法型算法A bowl of spaghetti缺点缺点:难以阅读,也难以阅读,也难以修改,从而使算难以修改,从而使算法的可靠性和可维护法的可靠性和可维护性难以保证。性难以保证。解决办法解决办法:限制流程的限制流程的无规律任意转向。无规律任意转向。51 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p三种基本结构三种基本结构顺序结构顺序结构选择结构,或称选取结构,或称分支结构选择结构,或称选取结构,或称分支结构循环结构,它又称重复结构。有两类循环结构:循环结构,它又称重复结构。有两类循环结构:当型当型(While型型)循环结构循环结构直到型直到型(Until型型)循环循环结构结构p三种基本结构,作为表示一个良好算法的基本单元。三种基本结构,作为表示一个良好算法的基本单元。52 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p三种基本结构三种基本结构-顺序结构、选择结构顺序结构、选择结构顺序结构顺序结构选择结构选择结构53 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p三种基本结构三种基本结构-循环结构循环结构While 型循环结构型循环结构Until 型循环结构型循环结构54 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p三种基本结构的共同特点三种基本结构的共同特点只有一个入口。只有一个入口。只有一个出口。只有一个出口。结构内的每一部分都有机会被执行到。对每一个框来说,都应有一条从结构内的每一部分都有机会被执行到。对每一个框来说,都应有一条从入口到出口入口到出口的路径通过它。的路径通过它。结构内不存在结构内不存在“死循环死循环”(无终止的循环无终止的循环)。请注意,一个请注意,一个菱形判断框菱形判断框有两个有两个出口,而一个出口,而一个选择结构选择结构只有一个只有一个出口。不要将菱形框的出口和选出口。不要将菱形框的出口和选择结构的出口混淆。择结构的出口混淆。区别于空循环区别于空循环55 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p不正确的流程图不正确的流程图没有一条从入口到出口的路径通过没有一条从入口到出口的路径通过A框框死循环死循环56 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p总结:由以上三种基本结构顺序组成的算法结构,可以解决任何复杂总结:由以上三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于的问题。由基本结构所构成的算法属于“结构化结构化”的算法,它不存在的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。转。p扩展:基本结构不一定只限于上面三种,只要具有上述扩展:基本结构不一定只限于上面三种,只要具有上述4个特点的都个特点的都可以作为基本结构。人们可以自己定义基本结构,并由这些基本结构可以作为基本结构。人们可以自己定义基本结构,并由这些基本结构组成结构化程序。组成结构化程序。57 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p扩展:如图所示的是一个多分支选择扩展:如图所示的是一个多分支选择结构,根据给定的表达式的值决定执结构,根据给定的表达式的值决定执行哪一个框。结构也是一个入口和一行哪一个框。结构也是一个入口和一个出口,并且有上述全部的个出口,并且有上述全部的4个特点。个特点。由它们构成的算法结构也是结构化的由它们构成的算法结构也是结构化的算法。但是,可以认为此结构是由三算法。但是,可以认为此结构是由三种基本结构派生出来的。种基本结构派生出来的。多分支选择结构多分支选择结构58 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p用用N-S流程图表示:流程图表示:1973年美国学者和提出了一种新的流程图形式。年美国学者和提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的框,或者说,由一些形框内,在该框内还可以包含其他的从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称基本的框组成一个大的框。这种流程图又称N-S结构化流程图。结构化流程图。59 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图pN-S流程图表示顺序结构、选择结构流程图表示顺序结构、选择结构 顺序结构顺序结构选择结构选择结构60 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图pN-S流程图表示循环结构流程图表示循环结构 While 型循环结构型循环结构Until 型循环结构型循环结构61 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p用以上用以上3种种N-S流程图中的基本框,可以组成复杂的流程图中的基本框,可以组成复杂的N-S流程图,以表流程图,以表示算法。示算法。图中的图中的A框或框或B框,可以是一个简框,可以是一个简单的操作,也可以是单的操作,也可以是3个基本结个基本结构之一。构之一。A框是一个选择结构框是一个选择结构B框是一个循环结构框是一个循环结构62 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p例:求例:求5!算法用算法用N-S图表示。图表示。直到直到i51t输出输出t2it*iti+1i63 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p例:将例:将50名名 学生中成绩高于学生中成绩高于80分的学号和成绩打印出来。分的学号和成绩打印出来。有输入数据有输入数据 无输入数据无输入数据64 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p例:判定闰年的算法用例:判定闰年的算法用N-S图表示图表示 直到直到year25002000yearyear+1year否否是是year%4为为0否否是是输出输出year非闰年非闰年year%100不为不为0year%400为为0是是否否输出输出year非闰年非闰年输出输出year闰年闰年输出输出year闰年闰年65 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p例:例:11 11111-23 4599 100求直到直到deno100deno+1deno输出输出sum1sum1sign2deno(-1)*signsignsign*(1/deno)termsum+termsum66 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p例:判别素数的算法用例:判别素数的算法用N-S流程图表示。流程图表示。出口出口1出口出口2循环有两个出口,不符合循环有两个出口,不符合基本结构的特点,无法直基本结构的特点,无法直接用接用N-S流程图的三种基流程图的三种基本结构的符号来表示,必本结构的符号来表示,必须先作必要的变换须先作必要的变换输入输入nr=0是是否否0w2in%ir1wi+1i直到直到i 或或w 0nw=0是是否否输出输出n是素数是素数输出输出n不是素数不是素数69 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图pN-S图表示算法的优点图表示算法的优点:比文字描述直观、形象、比文字描述直观、形象、易于理解;易于理解;它比传统流程图紧凑易画,尤其是它废除了流程线,整个算法结构是由各它比传统流程图紧凑易画,尤其是它废除了流程线,整个算法结构是由各个基本结构按顺序组成的。个基本结构按顺序组成的。N-S流程图中的上下顺序就是执行时的顺序,即图中位置在上面的先执行,流程图中的上下顺序就是执行时的顺序,即图中位置在上面的先执行,位置在下面的后执行。写算法和看算法只需从上到下进行就可以了,十分位置在下面的后执行。写算法和看算法只需从上到下进行就可以了,十分方便。方便。用用N-S图表示的算法都是结构化的算法图表示的算法都是结构化的算法(它不可能出现流程无规律的跳转,它不可能出现流程无规律的跳转,而只能自上而下地顺序执行而只能自上而下地顺序执行)。70 四、怎样表示一个算法四、怎样表示一个算法3、三种基本结构和改进的流程图、三种基本结构和改进的流程图p总结总结结构化的算法是由一些基本结构顺序组成的;结构化的算法是由一些基本结构顺序组成的;每个基本结构又可以包含其他的基本结构;每个基本结构又可以包含其他的基本结构;在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内结构范围之内(如循环中流程的跳转如循环中流程的跳转);一一 个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。法。71 四、怎样表示一个算法四、怎样表示一个算法4、伪代码表示算法、伪代码表示算法p概念:伪代码是用介于自然语言和计算机语言之间的文字和符号来描概念:伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。述算法。p特点:它如同一篇文章,自上而下地写下来。每一行特点:它如同一篇文章,自上而下地写下来。每一行(或几行或几行)表示一表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好懂,便于向计算机语言算法懂,便于向计算机语言算法(即程序即程序)过渡。过渡。72 四、怎样表示一个算法四、怎样表示一个算法4、伪代码表示算法、伪代码表示算法p例例“打印打印x的绝对值的绝对值”的算法可以用伪代码表示的算法可以用伪代码表示 英文英文IF x is positive THENprint xELSEprint x中文中文若若 x为正为正打印打印 x否则否则打印打印 x中英文混用中英文混用IF x 为正为正print xELSEprint x73 四、怎样表示一个算法四、怎样表示一个算法4、伪代码表示算法、伪代码表示算法p例求例求5!。用伪代码表示的算法。用伪代码表示的算法 开始开始置置t的初值为的初值为1置置i的初值为的初值为2当当it2=iwhile iti+1=iprint tEND(算法结束算法结束)74 四、怎样表示一个算法四、怎样表示一个算法4、伪代码表示算法、伪代码表示算法p例例:打印出打印出50个学生中成绩高于个学生中成绩高于80分者的学号和成绩。用伪代码表示的分者的学号和成绩。用伪代码表示的算法算法 BEGIN(算法开始算法开始)1=iwhile ii1=iwhile iiEND(算法结束算法结束)75 四、怎样表示一个算法四、怎样表示一个算法4、伪代码表示算法、伪代码表示算法p伪代码书写格式比较自由,容易表达出设计者的思想。伪代码书写格式比较自由,容易表达出设计者的思想。p用伪代码写的算法很容易修改。用伪代码很容易写出结构化的算法。用伪代码写的算法很容易修改。用伪代码很容易写出结构化的算法。p但是用伪代码写算法不如流程图直观,可能会出现逻辑上的错误但是用伪代码写算法不如流程图直观,可能会出现逻辑上的错误(例如循环或例如循环或选择结构的范围搞错等选择结构的范围搞错等)。76 四、怎样表示一个算法四、怎样表示一个算法5、用计算机语言表示算法、用计算机语言表示算法p概念:计算机是无法识别流程图和伪代码。只有用计算机语言编写的程序才能概念:计算机是无法识别流程图和伪代码。只有用计算机语言编写的程序才能被计算机执行(当然还要经过编译成目标程序才能被计算机识别和执行)。因被计算机执行(当然还要经过编译成目标程序才能被计算机识别和执行)。因此,在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序。此,在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序。p特点:用计算机语言表示算法必须严格遵循所用语言的语法规则,这是和伪代特点:用计算机语言表示算法必须严格遵循所用语言的语法规则,这是和伪代码不同的。码不同的。p 作用:要完成一件工作,包括设计算法和实现算法两个部分。设计算法的目作用:要完成一件工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。的是为了实现算法。p应当强调说明的是,写出了应当强调说明的是,写出了C程序,仍然只是描述了算法,并未实现算法,只程序,仍然只是描述了算法,并未实现算法,只有运行程序才是实现算法。应该说,用计算机语言表示的算法是计算机能够执有运行程序才是实现算法。应该说,用计算机语言表示的算法是计算机能够执行的算法。行的算法。77 四、怎样表示一个算法四、怎样表示一个算法6、结构化程序设计方法、结构化程序设计方法p一个结构化程序就是用高级语言表示的结构化算法。用三种基本结构组成的程一个结构化程序就是用高级语言表示的结构化算法。用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、阅读、修改和维护。这就减少了序必然是结构化的程序,这种程序便于编写、阅读、修改和维护。这就减少了程序出错的机会,提高了程序的可靠性。程序出错的机会,提高了程序的可靠性。p结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。p结构化程序设计方法的基本思路是,把一个复杂问题的求解过程分阶段进行,结构化程序设计方法的基本思路是,把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。每个阶段处理的问题都控制在人们容易理解和处理的范围内。78 四、怎样表示一个算法四、怎样表示一个算法6、结构化程序设计方法、结构化程序设计方法p采取以下方法保证得到结构化的程序采取以下方法保证得到结构化的程序自顶向下自顶向下逐步细化逐步细化模块化设计模块化设计结构化编码结构化编码p两种不同的方法两种不同的方法自顶向下,逐步细化自顶向下,逐步细化自下而上,逐步积累自下而上,逐步积累 79 四、怎样表示一个算法四、怎样表示一个算法6、结构化程序设计方法、结构化程序设计方法p模块化程序设计方法模块化程序设计方法模块化设计的思想实际上是一种模块化设计的思想实际上是一种“分而治之分而治之”的思想,把一个大任务分为的思想,把一个大任务分为若干个子任务,每一个子任务就相对简单了。若干个子任务,每一个子任务就相对简单了。在拿到一个程序模块在拿到一个程序模块(实际上是程序模块的任务书实际上是程序模块的任务书)以后,根据程序模块的以后,根据程序模块的功能将它划分为若干个子模块,如果嫌这些子模块的规模大,还可以划分功能将它划分为若干个子模块,如果嫌这些子模块的规模大,还可以划分为更小的模块。这个过程采用自顶向下的方法来实现。为更小的模块。这个过程采用自顶向下的方法来实现。程序中的子模块一般不超过程序中的子模块一般不超过50行行划分子模块时应注意模块的独立性,即使一个模块完成一项功能,划分子模块时应注意模块的独立性,即使一个模块完成一项功能,耦合耦合性愈少愈好。性愈少愈好。测绘测绘C语言程序设计语言程序设计第三章第三章8182 一、一、C语言的数据类型语言的数据类型83 一、一、C语言的数据类型语言的数据类型p类型,就是对数据分配存储单元的安排,包括类型,就是对数据分配存储单元的安排,包括存储单元的长度存储单元的长度(占多占多少字节少字节)以及以及数据的存储形式数据的存储形式p不同的类型分配不同的长度和存储形式不同的类型分配不同的长度和存储形式p不同类型数据可进行的操作也不同不同类型数据可进行的操作也不同84 二、常量和变量二、常量和变量1、常量和符号常量、常量和符号常量p常量常量:在程序运行过程中,其值在程序运行过程中,其值不能被改变不能被改变的量。的量。p符号常量符号常量:用一个标识符来代表一个常量。用一个标识符来代表一个常量。整型常量整型常量:如如1000,12345,0,-345 实型常量实型常量:十进制小数形式:如十进制小数形式:如 指数形式:如指数形式:如12.34e3(代表代表12.34103)字符常量字符常量:如如?转义字符:如转义字符:如n 字符串常量字符串常量:如如TYUT 符号常量符号常量:字面常量字面常量(直接常量直接常量)p 习惯符号常量名用大写习惯符号常量名用大写p 含义清楚含义清楚p 在需要改变一个常量时能在需要改变一个常量时能做到做到“一改全改一改全改”85 二、常量和变量二、常量和变量1、常量和符号常量、常量和符号常量例例3.1 符号常量的使用符号常量的使用#define PRICE 30#include void main()int num,total;num=10;total=num*PRICE;printf(total=%dn,total);运行结果运行结果:total=300程序中用程序中用#define命令行定义命令行定义PRICE代表常量代表常量30,此后凡在本此后凡在本文件中出现的文件中出现的PRICE都代表都代表30,可以和常量一样进行运算可以和常量一样进行运算注意注意:如再用赋值语句给如再用赋值语句给PRICE赋值是错的赋值是错的PRICE=40;/错误,不能给符错误,不能给符号常量赋值号常量赋值86 二、常量和变量二、常量和变量2、变量、变量p变量在程序运行期间,变量的值是可以改变的变量在程序运行期间,变量的值是可以改变的变量必须变量必须先定义,后使用先定义,后使用定义变量时指定该变量的定义变量时指定该变量的名字和名字和类型类型 变量名和变量值变量名和变量值是两个不同的概念是两个不同的概念变量名实际上是以一个名字代表的一个变量名实际上是以一个名字代表的一个存储地址存储地址从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据元中读取数据确保变量名正确使用确保变量名正确使用p 编译时为其分配相应存储单元编译时为其分配相应存储单元p 编译时检查该变量运算是否合法编译时检查该变量运算是否合法87 二、常量和变量二、常量和变量2、变量、变量p标识符标识符:C语言中,对变量、符号常量、函数、数组、类型等数据对语言中,对变量、符号常量、函数、数组、类型等数据对象命名的有效字符序列统称为标识符象命名的有效字符序列统称为标识符(identifier)。p标识符命名原则标识符命名原则只能由只能由字母、数字和下划线字母、数字和下划线3种字符组成种字符组成第一个字符必须为第一个字符必须为字母或下划线字母或下划线大小写字母是大小写字母是不同的字符不同的字符 sum,_total,month,Student_name,lotus_1_2_,BASIC,li_ling M.D.John,¥123,33,3D64,ab 88 三、整型数据三、整型数据1、整型常量的表示方法、整型常量的表示方法p整型常量即整常数。在语言中,整常数三种表示形式整型常量即整常数。在语言中,整常数三种表示形式十进制整数十进制整数 如:如:123,-456,4八进制整数。以八进制整数。以0开头的数是八进制数。开头的数是八进制数。如:如:0123表示八进制数表示八进制数123,等于十进制数,等于十进制数83,-011表示八进制数表示八进制数-11,即,即十进制数十进制数-9。十六进制整数。以十六进制整数。以0 x开头的数是开头的数是16进制数。进制数。如:如:0 x123代表代表16进制数进制数123,等于十进制数,等于十进制数 291。-0 x12等于十进制数等于十进制数-10。89 三、整型数据三、整型数据2、整型变量、整型变量p整型数据在内存中的存放形式整型数据在内存中的存放形式:数值是以补码数值是以补码(complement)表示表示p整型变量的分类整型变量的分类共六种共六种有符号基本整型有符号基本整型无符号基本整型无符号基本整型有符号短整型有符号短整型无符号短整型无符号短整型有符号长整型有符号长整型无符号长整型无符号长整型signed int unsigned intsigned short intunsigned short intsigned long intunsigned long intp short,long,signed,unsigned为修饰符为修饰符(modifer)p 中内容为可选中内容为可选p short和和long可以提供不同的数据长度可以提供不同的数据长度以满足实际使用的需要以满足实际使用的需要90 三、整型数据三、整型数据2、整型变量、整型变量p整型变量的定义整型变量的定义:规定在程序中所有用到的变量都必须在程序中定义,规定在程序中所有用到的变量都必须在程序中定义,即即“强制类型定义强制类型定义”。p变量定义一是定义变量的变量定义一是定义变量的数据类型数据类型,二是定义,二是定义变量的名称变量的名称,三是说明变量的,三是说明变量的存存储类型储类型,其一般格式为:,其一般格式为:存储类型存储类型 数据类型数据类型 变量清单变量清单;91 三、整型数据三、整型数据2、整型变量、整型变量p整型变量的定义整型变量的定义例3.2 整型变量的定义与使用#include void main()int a,b,c,d;/*指定、为整型变量*unsigned u;*指定为无符号整型变量*a=12;b=-24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);运行结果:运行结果:a+u=22,b+u=-14:可以看可以看到不同种类的整到不同种类的整型数据可以进行型数据可以进行算术运算算术运算 92 三、整型数据三、整型数据2、整型变量、整型变量p整型数据的溢出整型数据的溢出例3.3 整型数据的溢出#include void main()int a,b;a=32767;b=a+1;printf(“%d,%dn”,a,b);运行结果:运行结果:32767,-32768:数值是以补码表示的。一个:数值是以补码表示的。一个整型变量只能容纳整型变量只能容纳-3276832767范围内的数,无法表示大于范围内的数,无法表示大于32767或小于或小于-32768的数。遇此情况就的数。遇此情况就发生发生“溢出溢出”。93 三、整型数据三、整型数据p整型常量的类型整型常量的类型一个整常量后面加一个字母一个整常量后面加一个字母u或或U,认为是,认为是unsigned int型,型,如如12345u,在内存中按,在内存中按unsigned int规定的方式存放规定的方式存放(存储单元中最高位不存储单元中最高位不作为符号位,而用来存储数据作为符号位,而用来存储数据)。如果写成。如果写成-12345u,则先将,则先将-12345转换成转换成其补码其补码53191,然后按无符号数存储。,然后按无符号数存储。在一个整常量后面加一个字母在一个整常量后面加一个字母l或或L,则认为是,则认为是long int型常量。型常量。94四、浮点型数据四、浮点型数据1、浮点型常量的表示方法、浮点型常量的表示方法p十进制小数形式十进制小数形式p指数形式指数形式:3e-3字母字母e(或或E)之前必须有数字。之前必须有数字。e后面的指数必须为整数。后面的指数必须为整数。1e3、-123e-6、e3、.e3、e 95四、浮点型数据四、浮点型数据1、浮点型常量的表示方法、浮点型常量的表示方法p规范化的指数形式规范化的指数形式在字母在字母e(或或E)之前的小数部分中,小数点左边应有一位之前的小数部分中,小数点左边应有一位(且只能有一位且只能有一位)非非零的数字零的数字 例如可以表示为:例如可以表示为:123.456e0,12.3456e1,一个浮点数用指数形式输出时。是按规范化的指数形式输出的。一个浮点数用指数形式输出时。是按规范化的指数形式输出的。规范化的指数形式规范化的指数形式96四、浮点型数据四、浮点型数据2、浮点型变量、浮点型变量p浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式一个浮点型数据一般在内存中占一个浮点型数据一般在内存中占4个字节个字节(32位位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式用规范化的指数形式(二进制数指数形式存放二进制数指数形式存放)。97四、浮点型数据四、浮点型数据2、浮点型变量、浮点型变量p浮点型变量的分类浮点型变量的分类float型型(单精度浮点型单精度浮点型):4字节、字节、6位有效数字位有效数字double型型(双精度浮点型双精度浮点型):8字节、字节、15位有效数字位有效数字long double(长双精度长双精度)型型:VC+6.0 分配分配8个字节个字节98四、浮点型数据四、浮点型数据2、浮点型变量、浮点型变量p浮点型数据的舍入误差浮点型数据的舍入误差例3.4 浮点型数据的舍入误差#include void main()float a,b;a=123456.789e5;b=a+20;printf(“%fn”,b);运行结果:运行结果:12345678:一个浮点型变量只能保证的:一个浮点型变量只能保证的有效数字是有效数字是7位有效数字,后面的位有效数字,后面的数字是无意义的,并不准确地表数字是无意义的,并不准确地表示该数。应当避免将一个很大的示该数。应当避免将一个很大的数和一个很小的数直接相加或相数和一个很小的数直接相加或相减,否则就会减,否则就会“丢失丢失”小的数。小的数。例例99四、浮点型数据四、浮点型数据3、浮点型常量的类型、浮点型常量的类型pC编译系统将编译系统将浮点型常量浮点型常量作为作为双精度双精度来处理来处理例如:例如:系统先把和作为双精度数,然后进行相乘的运算,得到的乘也是一个双精系统先把和作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前度数。最后取其前7位赋给浮点型变量位赋给浮点型变量f。如是在数的后面加字母如是在数的后面加字母f或或F(如如1.65f,654.87F),这样编译系统就会把它们,这样编译系统就会把它们按单精度按单精度(32位位)处理。处理。100五、字符型数据五、字符型数据1、字符常量、字符常量p用用单引号单引号包含的一个字符是字符型常量包含的一个字符是字符型常量p只能包含一个字符只能包含一个字符 a,A,1 abc、a 101五、字符型数据五、字符型数据1、字符常量、字符常量p以以“”开头的特殊字符称为开头的特殊字符称为转义字符转义字符:“”后面的字符转换成另外的意思。后面的字符转换成另外的意思。102五、字符型数据五、字符型数据1、字符常量、字符常量例转义字符的使用#includevoid main()printf(ab ct derftgn);printf(htibbj kn);打印机上的显示结果:打印机上的显示结果:例例103五、字符型数据五、字符型数据2、字符变量、字符变量p字符型变量用来存放字符常量,字符型变量用来存放字符常量,只能放一个字符只能放一个字符。p字符变量的定义:字符变量的定义:char c1,c2;p一个字符变量在内存中占一个字节一个字符变量在内存中占一个字节104五、字符型数据五、字符型数据3、字符数据在内存中的存储形式及其使用方法、字符数据在内存中的存储形式及其使用方法p一个字符常量存放到一个字符变量中,内存中,以一个字符常量存放到一个字符变量中,内存中,以ASCII代码存储该代码存储该字符。字符。p使字符型数据和整型数据之间可以通用。使字符型数据和整型数据之间可以通用。p一个字符数据既可以以字符形式输出,也可以以整数形式输出。一个字符数据既可以以字符形式输出,也可以以整数形式输出。以字符型输出以字符型输出:将存储单元中的将存储单元中的ASCII 码转换为相应字符。码转换为相应字符。以整数型输出以整数型输出:直接将直接将ASCII 码作为整数输出。码作为整数输出。p可对字符型数据进行算术运算。可对字符型数据进行算术运算。105五、字符型数据五、字符型数据3、字符数据在内存中的存储形式及其使用方法、字符数据在内存中的存储形式及其使用方法例3.6 向字符变量赋以整数。#include void main()char c1,c2;c1=97;c2=98;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);运行结果:运行结果:97 98例例106五、字符型数据五、字符型数据3、字符数据在
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!