第一章 课程目标与导学-精品文档资料整理.ppt
主讲教师:姚佳花 17819184479(674479)2022/11/291C语言程序设计2022/11/292课程目标u了解计算机功能与工作方式。u了解程序设计语言的基本知识,掌握程序设计的基本方法和常用算法,掌握程序调试的基本技能,具有使用计算机解决(专业)实际问题的基本能力。u理解程序设计是一项计算思维能力培养与训练学习活动。2022/11/293课程内容u基础知识(1-2章)输入输出,数据类型,常量与变量u程序控制结构(2-4章)顺序结构,选择结构,循环结构u编程基础(5-9章)l数组与字符串,指针,函数,结构体、文件2022/11/294课程评价u学习状态30%考勤30%:旷课每次扣10分,迟到、上课玩手机一次扣2分 作业30%:缺 1次扣10分 学习材料20%(教材、笔记等,抽查10次,每缺1次扣10分)其它20%:课堂表现、学习效果u考试70%2022/11/295学习方法u及时完成作业,及时复习(课后习题)u多动手写程序,上机调试u拓展思维u提问说明(撰写提问文档):1)标题:撰写标题时,要注意把要问的问题的出处和核心词写出来,最好用【】标出来,比如【第1周编程题在线测试的第1题】求解。2)内容:内容上要把你不懂的地方说出来,最好详细点,把自己尝试修改的过程也说一下。3)附源代码:把源码贴到文档中(不要使用图片,因为图片看不清,也不能拷贝),这样大家可以通过你贴出的源码帮你分析错在哪里。4)附错误提示:把编译出错的提示也贴出来(一般是英文形式),00 这样大家不用拷贝粘贴和调试程序也能帮你分析出错原因了。主讲教师:姚佳花 2022/11/296第一章 程序设计与C语言本章学习目标通过这一章学习,你应该知道:u什么问题可以用程序的方法解决?u如何解决?uC语言规则是什么?uC程序什么样子?uC程序如何调试运行?u在程序中如何实现动态人机交互u用程序方式解决一个简单计算问题。第一讲01 C C语言发展历史语言发展历史02 C C语言的特点语言的特点03 简单的简单的C C程序介绍程序介绍04 C C程序的上机步骤程序的上机步骤1.C语言发展历史 程序设计语言的发展CPU指令系统,由0、1序列构成的指令码组成如:10000000 加 10010000 减用助记符号描述的指令系统,可进行地址、位操作如 ADD A,B编写系统软件,直接对硬件操作,可读性,移植性差可读性,移植性好,编写应用程序一般较难实现汇编语言的某些功能如:地址和位的操作C语言兼有高级和低级语言的功能适合写系统软件和应用软件又称中级语言产生背景ALGOL60CPL语言BCPLB语言,写UNIX系统产生过程时间:19721973地点:美国贝尔实验室目的:UNIX操作系统设计人:Ken.Thompson和Dennis.M.RitchieC标准标准C:1978年K&R合著TheCProgrammingLanguageANSIC:1983年87ANSIC:1987年1990年国际标准的ANSIC,1994年再次修订。C版本MicrosoftC或称MS-CTurboC或称TC1.C语言发展历史 程序设计语言的发展语言简洁、紧凑、灵活运算符丰富数据结构、数据类型丰富链表、树、栈程序设计结构化、模块化结构化控制语句:ifelse、while、switch、for函数作为模块单位语法不严格、程序设计自由度大可以访问内存地址、进行位运算生成目标代码质量高可移植性好2.C语言的特点32个关键字:(由系统定义,不能重作其它定义由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhileTurboC扩充了11个关键字:asm_cs_ds_es_sscdeclfarhugeinterruptnearpascal注意:在C语言中,关键字都是小写的。C语言简洁、紧凑,使用方便、灵活。ANSIC一共只有32个关键字,见269页附录B2.C语言的特点9种控制语句:if()elsefor()while()dowhile()continuebreakswitchgotoreturnC语言有9种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分。2.C语言的特点表1.1C语言与Pascal(结构化编程语言)语言比较通过表1.1我们可以得出结论:C比Pascal简练,因此源程序更短,编程效率高。C语言PASCAL语言含义 if(e)S;int i;int a10;int f();int*p;i+=2;i+,+I;BEGIN ENDIF(e)THEN S;VAR i:INTEGER;VAR a:ARRAY1.10 OF INTEGER;FUNCTION f():INTEGER;VAR P:INTEGER;i=i+2;i=i+1;函数体、分程序、复合语句条件语句 定义i为整形变量定义a为一维数组定义f为返回整形值函数;p为指向整形变量的指针变量;赋值语句,使i+2赋给Ii自增值1,i加1赋给I2.C语言的特点34种运算符:算术运算符:+-*/%+-关系运算符:=!=逻辑运算符:!&|位运算符 :|&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数 :sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它 :()-注意:各种运算符混合使用,其优先级与结合方法是难点,注意:各种运算符混合使用,其优先级与结合方法是难点,00可先预习。可先预习。C语言运算符丰富(附录C)2.C语言的特点C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整 型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体unionC语言数据结构丰富2.C语言的特点/*example1.1ThefirstCProgram*/#includevoidmain()printf(“Thisisacprogram.n”);注释编译预处理主函数语句输出:Thisisacprogram.例例1.1 1.1 第一个程序第一个程序This is a c program.printfprintf语句中的“nn”是换行符换行符 3.简单的简单的C程序介绍程序介绍/*example1.1calculatethesumofaandb*/#include/*Thisisthemainprogram*/voidmain()inta,b,sum;/*定义变量*/a=10;b=24;sum=add(a,b);printf(”sum=%dn,sum);/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty)intz;z=x+y;return(z);运行结果:sum=34函数语句预处理命令注释例例1.3 1.3 从键盘输入两个整数,输出其中较大的数从键盘输入两个整数,输出其中较大的数#includevoidmain()intmax(intx,inty)inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(max=%d,c);intmax(intx,inty)intz;if(xy)z=x;elsez=y;return(z);scanfscanf语句中“&a”的含义是“取地址取地址”输入:10,20 输出:max=20声明部分,定义变量声明部分,定义变量调用调用max函数,返回值赋给函数,返回值赋给c定义定义max子函数,函数值、子函数,函数值、形参形参x、y为整型为整型通过通过max函数将函数将z值带回调用处值带回调用处 C语言格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式main().main()int i,j,sum;sum=0;for(i=1;i10;i+)for(j=1;j10;j+)sum+=i*j;printf(“%dn”,sum);优秀程序员的素质之一:使用TAB缩进对齐有足够的注释有合适的空行 C语言结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main(),可以放在程序中任一位置程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/*/为注释,不能嵌套不产生编译代码例:/*This is the main /*of example1.1*/*/非法v编译预处理命令编译预处理命令编辑链接编译执行C程序开发步骤file.exe程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe4.C程序的上机步骤程序的上机步骤回顾总结01 什么是程序什么是程序02 程序设计的任务程序设计的任务03 程序的组成程序的组成2022/11/29251.什么是程序#includeint main()int a,b,c,sum;a=123;b=456;c=-43;sum=a+b+c;printf(“三个数之和是%d“,sum);return 0;用某种程序设计语言(机器语言、汇 编 语 言、c,c+,java等)编写的命令序列,用来告诉计算机如何完成一项具体的任务。2022/11/29261.什么是程序机器语言与高级语言2022/11/29271.什么是程序C程序的特点1.什么是程序C程序的作用2.程序设计的任务2022/11/29292.程序设计的任务u问题分析u设计算法和数据结构u编写程序u对源程序进行编辑、编译和链接,得到可执行程序u运行程序,分析结果u调试和测试程序u编写程序文档2022/11/29303.程序的组成程序包括的内容:程序包括的内容:u数据结构:数据的类型和组织形式u算法:操作步骤的描述NikiklausWirth提出:程序程序=数据结构数据结构+算法算法教材认为:程序程序=算法算法+数据结构数据结构+程序设计方法程序设计方法+语言工具和环境语言工具和环境 2022/11/2931灵魂灵魂加工对象加工对象工具工具编写程序必须考虑和设计数据的描述(数据结构)和操作步骤(算法)。第二讲01什么是算法什么是算法02计算机算法分类计算机算法分类03算法的组成要素与控制结构算法的组成要素与控制结构04算法的特征算法的特征05算法的描述算法的描述06结构化程序设计结构化程序设计07结构化程序设计方法结构化程序设计方法2022/11/29331.什么是算法u算法(Algorithm)是为了解决某个特定问题而采取的确定且有限的步骤。即算法能够对一定规范的输入,在有限时间内获得所要求的输出。例如:歌曲的乐谱,建造房子等。u算法通常是指按照一定规则解决某一类问题的明确和有限的步骤描述。算法核心是解决“做什么”和“怎么做”的问题。例:P12页的1+2+3+100累加求和,可以有多种方法,一般采用简单和运算步骤少的,力求准确、高效。u使用计算机程序设计语言,可以把算法编写成计算机程序,让计算机执行程序来解决问题。2.计算机算法分类u数值算法 求解数值问题:方程、积分等u非数值算法 排序 查找 调度 2022/11/29342022/11/29353.算法的组成要素与控制结构u算法由操作与控制结构两个要素组成u基本操作包括以下四个方面:算术运算:加、减、乘、除;数据比较:大于、小于、等于、不等于、大于等于、小于等于;逻辑运算:与、或、非;数据传送:输入、输出、赋值。u控制结构 顺序结构,选择结构,循环结构2022/11/29364.算法的特征u有穷性:一个算法必须总是在执行有限步之后结束。u确切性:算法的每一步骤,必须是有确切的定义的。u输入:一个算法有0个或多个输入。在算法开始之前,对运算对象给出的初始值,所谓0个输入是指算法本身给定了初始条件。u输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。u可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。2022/11/29375.算法的描述u自然语言u伪代码u流程图uN-S图u程序设计语言2022/11/29385.1 例:用自然语言描述欧几里得算法将两个正整数存放到变量m和n中;求余数:计算m除以n,将所得余数存放到变量r中;判断余数是否为0:若余数为0则执行第步,否则执行第步;辗转更新被除数和除数:将n的值存放到m中,将r的值存放到n中,并转向第步继续循环执行;输出n的当前值;算法结束。2022/11/2939Begin Input m,n(m=n)r=m mod n Do while r0m=n;n=r End do Output nEnd5.2 例:用伪代码描述欧几里得算法2022/11/29405.3 用流程图描述算法流程流程图符号符号名称名称含含义起止框起止框表示一个算法的起始和表示一个算法的起始和结束,是任束,是任何流程何流程图不可少的。不可少的。输入、入、输出框出框表示一个算法表示一个算法输入和入和输出的信息,出的信息,可用在算法中任何需要可用在算法中任何需要输入、入、输出出的位置。的位置。判断框判断框判断某一条件是否成立,成立判断某一条件是否成立,成立时在在出口出口处标明明“是是”或或“Y”;不成立;不成立时标明明“否否”或或“N”。处理框理框赋值、计算,算法中算,算法中处理数据需要理数据需要的算式、公式等分的算式、公式等分别写在不同的用写在不同的用以以处理数据的理数据的处理框内。理框内。流程流程线表示流程表示流程进行的方向行的方向2022/11/29415.3 流程图顺序结构&选择结构顺序结构选择结构2022/11/29425.3 流程图多分支选择结构2022/11/29435.3 流程图循环结构2022/11/29445.3 流程图例:欧几里得算法5.4 N-S图结构化算法u由顺序、选择、循环三种基本结构顺序组成的算法属于“结构化”算法u结构化算法可以解决任何复杂的问题u基本结构之间是顺序执行的,它不存在无规律的转向,只在本基本结构内才允许存在分支或向前向后的跳转u因此结构间的流程线可以省略(得N-S图)2022/11/29452022/11/29465.4 N-S图u结构化流程图(由美国学者Nassi和Shneiderman提出)uN-S图的基本单元是矩形框,算法的每一步都用一个矩形框来描述,按照执行的先后次序把它们连接起来构成一个完整的算法描述。2022/11/29475.4 N-S图2022/11/29485.4 N-S图例:欧几里得算法2022/11/2949sum=1i=2当i5sum=sumii=i+1输出sum输入投资款pp是100万否r=0.08r=0.06本利和p1=p(1+)5输出p1例例1.6例例1.75.4 N-S图教材例题#includeint main()int m,n,r;scanf(“%d,%d”,&m,&n);dor=m%n;m=n;n=r;while(r!=0)printf(“最大公约数是:%d”,n);return 0;2022/11/29505.5 用C语言描述的欧几里得算法5.6 课堂练习输入10个学生的成绩,求出最高分,并输出(分别用以下四种方式来表示算法)自然语言伪代码流程图N-S图2022/11/29512022/11/29525.6 课堂练习 自然语言描述第1步:输入第1个数,将其保存在max;第2步:输入下一个数,将其与max比较,如果比max大,则将其赋给max;第3步:重复第2步,判断数据是否比较完;如果是,则转第4步,否则,转第2步;第4步:输出最大数max;2022/11/29535.6 课堂练习流程图2022/11/29545.6 课堂练习N-S图2022/11/29555.7 课后作业习题1.5:用传统流程图和N-S图表示1+1/2+1/3+1/4+1/100的算法。习题1.6:用结构化流程图(N-S 图)表示:输入一个年份year,判定它是否是闰年,并输出它是否是闰年的信息。习题1.7:用N-S图表示:给出一个大于或等于三的正整数,判断它是否是素数。2022/11/29565.7 课后作业习题1.5:用传统流程图和N-S图表示1+1/2+1/3+1/4+1/100的算法。0=sum,1=n当n100 sum+1/n=sumn+1=n输出sum2022/11/29575.7 课后作业习题1.6:用结构化流程图(N-S 图)表示:输入一个年份year,判定它是否是闰年,并输出它是否是闰年的信息。分析:闰年的条件是:(1)能被4整除,但不能被100整除的年份是闰年,如1996年、2004年;(2)能被400整除的年份是闰年,如1996年、2000年。2022/11/29585.7 课后作业2022/11/29595.7 课后作业2022/11/29605.7 课后作业习题1.7:用N-S图表示:给出一个大于或等于三的正整数,判断它是否是素数。2022/11/29615.7 课后作业习题1.7:用N-S图表示:给出一个大于或等于三的正整数,判断它是否是素数。传统流程图流向混乱、可读性差,所以应该采用结构传统流程图流向混乱、可读性差,所以应该采用结构化流程图。化流程图。结构化程序设计结构化程序设计v 基本思想:任何程序都可以用三种基本结构表示,限制使基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(用无条件转移语句(gotogoto)v 结构化程序:由三种基本结构反复嵌套构成的程序结构化程序:由三种基本结构反复嵌套构成的程序v 优点:结构清晰,易读,提高程序设计质量和效率优点:结构清晰,易读,提高程序设计质量和效率三种基本结构三种基本结构v 顺序结构顺序结构ABAB流程图流程图N-S图6.结构化程序设计PAB真假PBA真假kA1A2AiAnk=k2k=k1k=knk=ki.l二分支选择结构二分支选择结构l多分支选择结构多分支选择结构6.结构化程序设计v循环结构循环结构l当型循环结构当型循环结构l直到型循环结构直到型循环结构PA假真当P为真AAP真假A直到P为真注:注:A,B,A1.An可以是一个简单可以是一个简单语句,也可以是一个基本结构语句,也可以是一个基本结构6.结构化程序设计 三种基本结构的共同特点:三种基本结构的共同特点:v只有一个入口;只有一个入口;v只有一个出口;只有一个出口;v结构内的每一部分都有机会被执行到;结构内的每一部分都有机会被执行到;v结构内不存在结构内不存在“死循环死循环”。6.结构化程序设计结构化程序:用三种基本结构组成的程序结构化程序:用三种基本结构组成的程序基本设计思路:基本设计思路:v复杂问题分解成几个最基本问题,再分别处理。复杂问题分解成几个最基本问题,再分别处理。采用的方法:采用的方法:v自顶向下(参见自顶向下(参见P20P20图图1.181.18););v逐步细化;逐步细化;v模块化设计:复杂问题按功能分成多个子模块模块化设计:复杂问题按功能分成多个子模块v结构化编码:正确采用三种基本结构实现结构化编码:正确采用三种基本结构实现7.结构化程序设计方法小结u阅读教材P23“本章小结”u关键词:程序 算法 结构化程序2022/11/2967学习程序设计,就是培养科学思维(包括计算思维)的过程。读者不应当把主要精力花在计算机语言的细节上,尤其不要死记一些语法规则,而要把重点放在学习和掌握处理问题的方法上,在遇到一个问题时,知道怎样分析问题,设计算法,然后用计算机实现它。小结寄语:欲穷千里目,更上一层楼谢谢大家