版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/2/5云南师范大学数学学院1课程介绍
一、课本说明
二、课程要求
1、课堂
2、上机
3、作业
4、参考书
5、考试
三、学习目的1、徐金吾等《TurboC使用大全》北京科海培训中心19902、《C高级实用程序设计》王士元编著清华大学出版社19953、《C陷阱与缺陷》AndrewKoenig著高巍译人民邮电出版社4、《C程序设计教程》(美)H.M.Deitel,P.J.Deitel著薛万鹏等译机械工业出版社5、《C语言上机实践指导与水平测试》(美)EricRoberts著翁惠玉张冬茉等译机械工业出版社平时作业和实验报告占20%,期中上机考试占10%,期末考试成绩占70%,总成绩满分100分,60分即可获得该课程学分即2学分。1、触类旁通2、掌握编程思想3、良好的程序设计风格4、解决实际问题5、熟悉上机环境2023/2/5云南师范大学数学学院2
注:提交作业方式
四、复习计算机系统
1、包括:硬件和软件
2、硬件和软件共同完成以下4个主要操作:输入
处理
输出
存储
lwshida@数据进入计算机系统。组织数据、检查数据的正确性、数据的运算。数据处理后,结果要传递给人,以便观察、解释和使用。常需要把输出信息存储在存储设备2023/2/5云南师范大学数学学院3
五、计算机编程语言语言有管理其单词使用和标点符号的规则——语法,除此还有语义。VisualBasic、Pascal、COBOL、C#、C++、Java、Fortran、C等
六、如何学好C语言——理论+实践1、认真体会所有概念(如运算符和运算顺序),并注意前后反复和贯穿。2、学好C语言的三种程序控制结构+模块化。3、掌握一些简单的算法4、读程序:看经典案例,善于阅读和分析程序;与别人交流5、多实践:上机前想好解题思路,写好算法;上机过程中,读懂出错信息,总结经验6、提高学习数据结构和算法方面的内容(其它课程)2023/2/5云南师范大学数学学院4七、为什么要学习程序设计
计算机的本质是“程序的机器”,只有懂得程序设计,才能进一步懂得计算机,真正了解计算机是怎样工作的,掌握用计算机处理问题的方法;培养分析问题和解决问题的能力。即使将来不是计算机专业人员,由于学过程序设计理解软件生产的特点和生产过程,就能与程序开发人员个更好的沟通与合作,开展本领域中的计算机应用,开发与本领域有关的应用程序。2023/2/5云南师范大学数学学院5八、为什么选择C语言
进行程序设计,必须用一种计算机语言作为工具,否则只是纸上谈兵。可选择的语言很多,各有特点和应用领域。而C语言的代码量小:同样功能的软件用C语言编写容量很小。Wps与office,界面功能基本类似,但是wps只有23.3M,但是微软office就有千兆左右。Wps的内核代码就是用C语言写的。以及我们的主板驱动、显卡驱动、摄像头驱动等都是用c语言。以及数据库DB2,oracle等都是用c语言和c++来写的。ACDSee、photoshop、2D(cs)、3D游戏等应用软件也是用C语言来编写的。速度快:windows内核是c语言外核是c++、unix和linux都是用c语言编写的。功能强大:c语言可访问我们的硬件,c语言中有指针可访问我们的内存等硬件。
C++是为处理大规模的程序开发而研制的大型语言,比C语言复杂难学。C语言是更为基本的,最基础的。在它基础上学习java和c#更容易。C语言是当前程序员共同的语言。2023/2/5云南师范大学数学学院6参考书1、《零基础学C语言》,康莉编,机械工业出版社。本书详细而透彻地讲述了C语言各个语句的语法规则,通过典型的简单的例题,将初学者引入C语言的编程世界。2、《C语言程序(第四版)学习指导》,谭浩强编,清华大学出版社。与《C程序设计(第四版)》教材配套的上机指导。3、《TurboC实用大全》,徐金梧杨德斌徐科编写,机械工业出版社。此书详细介绍了C语言库函数,是一本适合已掌握C语言基础之后使用的参考书。4、《C语言常用算法与子程序》,尹彦芝编著,清华大学出版社。是一本较系统地提供C语言算法,提供各种C语言常用程序的书籍,凡是用C语言编写程序的人,相信都会从这本书中得到启发。5、《C语言程序设计习题集(第二版)》,陈朔鹰陈英主编,人民邮电出版社。汇集近千道不同难度、不同层次、不同类型的习题,简单的题目适合初学者进阶和进行基本概念自测,复杂的题目足可以让你研究上十几天,使读者能真正感受到畅游C语言世界的乐趣。2023/2/5云南师范大学数学学院7教材、参考书6、《C语言趣味程序百例精解》,陈朔鹰陈英主编,北京理工大学出版社。汇集100道从易到难的趣味编程题目,可以通过对这些问题的求解过程,进一步掌握程序设计的基本方法和解题思路。7、《C语言程序设计辅导与习题集》,田淑清等,中国铁道出版社。一本典型的与全国计算机等级考试题型类似的习题集。整本书的习题难易适中。也适合于C语言程序设计的进阶学习。
8、《C语言编程常见问题解答》,[美]PaulS.R.Chishohm等著,张芳妮吕波译,清华大学出版社。是一本以问答方式书写的参考书,在按照章节回答问题的过程中,读者可以明确清楚地体会到C语言的精髓。2023/2/5云南师范大学数学学院8教材、参考书9、《TheCProgrammingLanguage》,byBrianW.KernighanandDennisM.Ritchie.,PubilishedbyPrentice-Hallin1988。著名的原版C语言教材,读者如果有时间的话可以读读它,来感受感受世界著名的教材的风范。10、《全国计算机等级考试二级教程(C语言程序设计)》教育部考试中心编,高等教育出版社。课程要求:课前请做好预习保持课堂安静,头脑清醒,思维活跃认真、独立、按时完成并提交作业重视上机实践,有效利用宝贵的上机时间2023/2/5云南师范大学数学学院9学习网站(1)
清华大学《计算机语言与程序设计》0/jpkcgc/aao_57/index.jsp(2)
浙江大学《C程序设计基础及实验》
/crs/ccxsj/index.htm(3)
C语言宝典,/(4)
TurboC编程宝典,/~junl/learning/TC(5)
二级C语言,/proedu/jsjkj/c.htm(6)
C语言教程,/c.htm(7)
唯C世界,/(8)
C语言编程网,/(9)
C语言编程宝典,/turboc/index.html(10)C语言程序基础,/c/(11)鹏程C语言教学网站,/(12)经典C,/SoftView/SoftView_24.html
(13)C语言编程电子书,/down/pc/cbible.htmlC程序设计(第四版)
谭浩强著云南师范大学数学学院2023/2/5云南师范大学数学学院11目录程序设计和C语言算法——程序的灵魂最简单的C程序设计——顺序程序设计选择结构程序设计循环结构程序设计利用数组处理批量数据利用函数实现模块化程序设计善于利用指针用户自己建立数据类型对文件的输入输出常见错误分析2023/2/5云南师范大学数学学院12第一章程序设计和C语言2023/2/5云南师范大学数学学院13
本章要点什么是计算机程序什么是计算机语言C语言的发展及其特点运行C程序的步骤与方法最简单的C语言程序程序设计的任务2023/2/5云南师范大学数学学院141、什么是计算机程序
计算机是万能的吗?---计算机的每一个操作都是根据人们事先指定的指令进行的。为了使计算机执行一系列的操作,必须事先编好一条条指令,输入到计算机。
程序:就是一组计算机能识别和执行的指令。每一条指令使计算机执行特定的操作。为了使计算机系统能实现各种功能,需要成千上万个程序。
总之,计算机的一切操作都是由程序控制的,离开程序计算机将一事无成。所以,计算机的本质是程序的机器,只有懂得程序设计,才能真正了解计算机是怎样工作的,才能更深入的使用计算机。2023/2/5云南师范大学数学学院152、什么是计算机语言
计算机能识别的语言,就是计算机语言。发展阶段:机器语言--汇编语言—高级语言计算机是不能直接识别高级语言编写的程序,要进行“翻译”。用一种称为编译程序的软件把高级语言写的程序(称为源程序)转换为机器指令的程序(称为目标程序),然后让计算机执行机器指令程序,最后得到结果2023/2/5云南师范大学数学学院16#include<stdio.h>intmain()//一个简单的C语言程序{printf("ThisisaCprogram.\n");return0;}高级语言源程序机器语言目标程序程序执行结果编译程序运行程序2023/2/5云南师范大学数学学院173.C语言发展及其特点C语言是国际上广泛流行的高级语言。C语言是在B语言的基础上发展起来的。B(BCPL)语言是1970年由美国贝尔实验室设计的,并用于编写了第一个UNIX操作系统,在PDP7上实现。优点:精练,接近硬件,缺点:过于简单,数据无类型。1973年贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言,对B取长补短,并用之改写了原来用汇编编写的UNIX,(即UNIX第5版),但仅在贝尔实验室使用。2023/2/5云南师范大学数学学院18C语言出现的历史背景1975年UNIX第6版发布,C优点突出引起关注。1977年出现了《可移植C语言编译程序》,推动了UNIX在各种机器上实现,C语言也得到推广,其发展相辅相成。1978年影响深远的名著《TheCProgrammingLanguage》由BrianW.Kernighan和DennisM.Ritchie合著,被称为标准C。之后,C语言先后移植到大、中、小、微型计算机上,已独立于UNIX和PDP,风靡世界,成为最广泛的几种计算机语言之一。2023/2/5云南师范大学数学学院19C语言出现的历史背景1983年,美国国家标准化协会(ANSI)根据C语言各种版本对C的发展和扩充,制定了新的标准ANSIC,比标准C有了很大的发展。1988年K&R按照ANSIC修改了他们的《TheCProgrammingLanguage》。1989年,ANSI公布了一个完整的c语言标准——ANSIC或C89。1990年,国际标准化组织接受了C89为ISOC的标准(ISO9899—1990)。1995年,ISO又修订了C语言标准。1999年,ISO有对C语言标准进行修订在基本保留原来的c语言特征的基础上,针对应用的需要又增加一些功能。命名ISO/IEC9899:19992001和2004年先后进行两次技术修正(TC1、TC2)ISO/IEC9899:1999及其技术修正被称为C99。讲课依据c99标准。2023/2/5云南师范大学数学学院20说明:不同版本的C编译系统所实现的语言功能和语法规则又略有差别,因此我们应了解所用的C语言编译系统的特点(可以参阅网上相关资料)。我们使用的是二级语言考试的编译程序VisiuaC++6.0.2023/2/5云南师范大学数学学院21C语言的特点(1)语言简洁、紧凑,使用方便、灵活。37个关键字、9种控制语句,程序形式自由,主要用小写字母表示,压缩而一切不必要的成分。(2)运算符丰富。34种运算符,把括号、复制和强制类型转化等都作为运算符处理,从而使C语言的运算类型机极其丰富,表达式类型多样化,灵活使用各种运算符。(3)数据类型丰富,具有现代语言的各种数据结构。整型、浮点型、字符型、数组类型、指针类型、结构体类型和共用体类型,C99扩充了复数浮点类型、超长整型和布尔类型。(4)具有结构化的控制语句,是完全模块化和结构化的语言。(5)语法限制不太严格,程序设计自由度大。例如对数组越界不进行检查,由程序编写者自己保证程序的正确,对变量的类型使用比较灵活。c语言允许程序编写者有较大的自由度,放宽了语法检查。一般的高级语言语法检查比较严。
2023/2/5云南师范大学数学学院2237个关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifinlineintlongregisterrestrictreturnshortsignedsizeofstaicstructswitchtypedefunionunsignedvoidvolatilewhile_bool_Complex_Imaginary
2023/2/5云南师范大学数学学院23C语言的特点(6)允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。兼有高级和低级语言的特点。既是成功的系统描述语言,有时通用的程序设计语言。(7)目标代码质量高,程序执行效率高。只比汇编程序生成的目标代码效率低10%-20%。(8)程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。2023/2/5云南师范大学数学学院24
1.4简单的C语言程序#include<stdio.h>void
main(){
printf("ThisisaCprogram.\n");}//文件包含/*主函数*///函数体开始//输出语句//函数体结束说明:main-主函数名,void-函数类型每个C程序必须有一个主函数main{}是函数开始和结束的标志,不可省每个C语句以分号结束使用标准库函数时应在程序开头一行写:
#include<stdio.h>说明:
本程序的作用是输出一行信息:ThisisaCprogram.2023/2/5云南师范大学数学学院25例1.2求两数之和
#include<stdio.h>
voidmain()//求两数之和
{
inta,b,sum;//声明,定义变量为整型
/*以下3行为C语句*/
a=123;b=456;
sum=a+b;
printf(″sumis%d\n″,sum);
}说明:
//……与/*……*/表示注释。注释只是给人看的,对编译和运行不起作用。所以可以用汉字或英文字符表示,可以出现在一行中的最右侧,也可以单独成为一行。说明:
输出一行信息:sumis5792023/2/5云南师范大学数学学院26例1.3求2个数中较大者。
#include<stdio.h>
voidmain()//主函数
{
intmax(intx,inty);//对被调用函数max的声明
inta,b,c;//定义变量a、b、c
scanf(″%d,%d″,&a,&b);//输入变量a和b的值
c=max(a,b);//调用max函数,将得到的值赋给c
printf(″max=%d\n″,c);//输出c的值
}程序运行情况如下:8,5↙(输入8和5赋给a和b)max=8(输出c的值)intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}max(int
x,
int
y)
max(a,b);
说明:本程序包括main和被调用函数max两个函数。max函数的作用是将x和y中较大者的值赋给变量z。return语句将z的值返回给主调函数main。2023/2/5云南师范大学数学学院27C程序:(1)C程序是由函数构成的。这使得程序容易实现模块化。
(2)一个函数由两部分组成:
函数的首部:例1.3中的max函数首部
intmax(intx,inty)
函数体:花括号内的部分。若一个函数有多个花括号,则最外层的一对花括号为函数体的范围。函数体包括两部分:声明部分:inta,b,c;可缺省执行部分:由若干个语句组成。可缺省2023/2/5云南师范大学数学学院28注意:函数的声明部分和执行部分都可缺省,例如:voiddump(){}
这是一个空函数,什么也不做,但是合法的函数。
2023/2/5云南师范大学数学学院29小结:(3)C程序总是从main函数开始执行的,与main函数的位置无关。(4)C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上,C程序没有行号。(5)每个语句和数据声明的最后必须有一个分号。分号是C语句的必要组成部分。即使是程序中最后一个语句也应包含分号。2023/2/5云南师范大学数学学院30小结:(6)C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。(7)可以用/*……*/或//……对C程序中的任何一行或数行做注释。一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。2023/2/5云南师范大学数学学院311.5运行C程序的步骤和方法1.5.1运行C程序的步骤上机输入与编辑源程序对源程序进行编译与库函数连接运行目标程序2023/2/5云南师范大学数学学院321.5运行C程序的步骤和方法
1.5.2上机运行C程序的方法目前使用的大多数C编译系统都是集成环境(IDE)的。可以用不同的编译系统对C程序进行操作常用的有TurboC2.0、TurboC++3.0、VisualC++6.0等前一段时间,TurboC2.0用得比较多,但TurboC2.0是用于DOS环境的,不能用鼠标进行操作,很不方便,所以今年来不少人改为用TurboC++3.0或VisualC++6.0对C程序进行编译
2023/2/5云南师范大学数学学院33例:VC++6.0的使用1.安装VC++6.0和进入VC++6.0集成环境
(1)VisualC++6.0适用于Windows环境。首先在所用的计算机上安装VisualC++6.0系统。安装完后,双击VisualC++6.0图标,就能进入VC++6.0集成环境。2023/2/5云南师范大学数学学院34(2)在VC++主窗口的顶部是VC++的主菜单栏。其中包含9个项∶FileEditViewInsertProjectBuildToolswindowsHelp;主窗口的左侧是项目工作区窗口(用来显示所设定的工作区的信息),右侧是程序编辑窗口(用来输入和编辑源程序)。2023/2/5云南师范大学数学学院352.输入和编辑源程序(1)新建一个源程序
①在VC++主窗口的主菜单栏中选择“File”
,然后选择“New”
2023/2/5云南师范大学数学学院36单击屏幕上出现的“New”对话框上方的“Files”,在其下拉菜单中选择“C++SourceFile”项;然后在对话框右半“Location”文本框中输入准备编辑的源程序文件的存储路径(假定为D:\cc);在其上方的File(文件)文本框中输入准备编辑的源程序文件的名字(输入c1-1.c)。2023/2/5云南师范大学数学学院37②输入和编辑源程序单击“OK”
按钮后,回到VC++主窗口程序,编辑窗口已激活,即可输入和编辑源程序。在输入过程中如发现有错误,可以利用全屏幕编辑方法进行修改编辑。
2023/2/5云南师范大学数学学院38③源程序的保存检查无误后,在主菜单栏中选择“File”(文件),并在其下拉菜单中选择“Save”(保存)项
说明:
VC++6.0可以编译后缀为.c的C源程序,也可以编译后缀为.cpp的C++源程序。
2023/2/5云南师范大学数学学院39
(2)打开一个已有的程序
①在“我的电脑”中按路径找到已有的C程序名;
②双击此文件名,则进入了VC++集成环境,并打开了该文件,程序已显示在编辑窗口中;
③修改后选择“File”(文件)→“Save”(保存),保存在原来的文件中;
(3)通过已有的程序建立一个新程序
①打开任何一个已有的源文件2023/2/5云南师范大学数学学院403.程序的编译单击主菜单栏中的“Build”,在其下拉菜单中选择“Compliec1-1.c”项。
在单击编译命令后,屏幕上出现一个是否同意建立一个默认的项目工作区的对话框单击“Yes”(是)按钮后开始编译。也可以不用选择菜单的方法,而用“Ctrl+F7”来完成编译。编译完成后,调试窗口出现编译信息,如果无错生成目标文件c1-1.obj,否则指出错误位置和性质。2023/2/5云南师范大学数学学院414.程序的连接
生成目标文件后,把程序和系统提供的资源(如函数据库、头文件)建立连接。选择“Build”→“Buildtest.exe”
。
2023/2/5云南师范大学数学学院42执行连接后,在调试输出窗口中显示连接时的信息,生成可执行文件c1-1.exe。说明:
选择菜“Build”→“Build”(
或按“F7”键)一次完成编译与连接。但提倡初学者分步进行编译和链接,因为程序出错的机会较多,最好等到上一步完全正确后才进行下一步2023/2/5云南师范大学数学学院435程序的执行执行c1-1.exe文件,选择“Build”→“!Executec1-1.exe”2023/2/5云南师范大学数学学院44程序执行后,屏幕切换到输出结果的窗口,显示输出结果。第1行:程序的输出第2行:是VC++在输出完运行结果后由VC++6.0系统自动加上的一行信息,通知用户∶“按任何一键以便继续”。2023/2/5云南师范大学数学学院45运行一个C语言程序的一般过程:(1)启动VC++,进入VC++集成环境。(2)编辑(或修改)源程序。
(3)保存文件(3)编译、连接、运行。如果有错,则修改源程序,再重新编译、连接和运行,直至程序正确。(4)退出VC++集成环境,结束本次程序运行。2023/2/5云南师范大学数学学院461.6程序设计的任务问题分析设计算法编写程序对源程序进行编辑、编译和连接运行程序,分析结果(调试、测试)编写程序文档第二章算法--程序的灵魂
主要内容2.1算法的概念2.2简单算法举例2.3算法的特性2.4怎样表示一个算法2.5结构化程序设计方法2023/2/5云南师范大学数学学院49一个程序应包括两个方面的内容:对数据的描述即在程序中指定数据的类型和数据的组织形式:数据结构(datastructure)对操作的描述即操作步骤:算法(algorithm)著名计算机科学家沃思提出一个公式:数据结构+算法=程序数据结构+算法+程序设计方法+语言工具完整的程序设计应该是:2023/2/5云南师范大学数学学院502.1什么是算法
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。方法1:1+2,+3,+4,一直加到100加99次方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次对同一个问题,可有不同的解题方法和步骤例:求2023/2/5云南师范大学数学学院51§2.1算法的概念
为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。希望方法简单,运算步骤少。计算机算法可分为两大类别:数值运算算法:求数值解,例如求方程的根、求函数的定积分等。非数值运算:包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事管理、行车调度管理等。计算机算法分为数值运算算法、非数值运算算法2023/2/5云南师范大学数学学院522.2简单算法举例例2.1:求1×2×3×4×5步骤1:先求1×2,得到结果2步骤2:将步骤1得到的乘积2再乘以3,得到结果6步骤3:将6再乘以4,得24步骤4:将24再乘以5,得120太繁琐如果要求1×2×…×1000,则要写999个步骤2023/2/5云南师范大学数学学院532.2简单算法举例例2.1求12345=5!Step1:1pStep2:2iStep3:pipStep4:i+1iStep5:若i<=5,返回Step3;否则,结束。求1357911Step1:1pStep2:3iStep3:pipStep4:i+2iStep5:若i<=11,返回Step3;否则,结束。关键:抽象、提炼出解决问题的一般步骤1.记录每一步的结果及最终结果(p)每一步处理的数据(i)2.初始状态及动态过程算法具有一般性、通用性和灵活性便于执行循环等操作2023/2/5云南师范大学数学学院542.2简单算法举例例2.2有50个学生,要求将他们之中成绩在80分以上者的学号和成绩打印出来。第i个学生的学号为ni,成绩为gi。Step1:1iStep2:若gi>=80,则打印ni和gi;否则不打印。Step3:i+1iStep4:若i<=50,返回Step2;否则,结束。
2023/2/5云南师范大学数学学院552.2简单算法举例例2.3判定2000—2500年中的每一年是否闰年,将结果输出闰年的条件:能被4整除但不能被100整除的年份是闰年;能被400整除的年份是闰年。设year为被检测的年份,算法如下:S1:2000yS2:若year不能被4整除,则输出year“不是闰年”,然后转到S6S3:若year能被4整除,不能被100整除,则输出year“是闰年”,然后转到S6S4:若year能被400整除,则输出year“是闰年”,然后转到S6S5:输出year“不是闰年”S6:year+1yearS7:若year<=2500,返回S2继续执行;否则,结束。2023/2/5云南师范大学数学学院562.2简单算法举例例2.4求算法如下:S1:sign=1S2:sum=1S3:deno=2S4:sign=(1)×signS5:term=sign×(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若deno<=100返回S4;否则算法结束。……2023/2/5云南师范大学数学学院572.2简单算法举例例2.4对于一个大于或等于3的正整数,判断是否为素数算法如下:S1:输入n的值S2:i=2(i作为除数)S3:n被i除,得余数rS4:如果r=0,表示n能被i整除,打印n“不是素数”,算法结束;否则执行S5S5:i+1iS6:若i<=n1返回S3;否则打印n“是素数”,然后结束。S6步骤可改为:S6:若i<=返回S3;否则打印n“是素数”,然后结束。2023/2/5云南师范大学数学学院582.3算法的特性1.有穷性(要考虑合理的范围内)2.确定性3.有零个或多个输入4.有一个或多个输出5.有效性2023/2/5云南师范大学数学学院592.4怎样表示一个算法自然语言传统流程图结构化流程图伪代码2023/2/5云南师范大学数学学院602.4.2用流程图表示算法常用的流程图符号起止框输入输出框判断框处理框流程线连接点注释框X>=0?打印x打印–xYN
2023/2/5云南师范大学数学学院612.4.2用流程图表示算法例2.6将例2.1求5!的算法用流程图表示如下。开始1t2ititi+1ii>5?打印t结束NY2023/2/5云南师范大学数学学院622.4.2用流程图表示算法例2.7将例2.2的算法用流程图表示如下。开始1ii+1igi80?打印ni,gi结束Ni>50?YNY2023/2/5云南师范大学数学学院632.4.2用流程图表示算法例2.8将例2.3的算法用流程图表示如下。开始2000yy+1yy不能被4整除打印y“是闰年”结束Y>2500?y不能被100整除y不能被400整除打印y“不是闰年”打印y“是闰年”打印y“不是闰年”YYNNYNYN2023/2/5云南师范大学数学学院642.4.2用流程图表示算法例2.10将例2.5的算法用流程图表示如下。i>
?开始i+1ir=0?打印n“是素数”结束2in/i的余数r打印n“不是素数”YNNY输入n2023/2/5云南师范大学数学学院652.4.3三种基本结构和改进的流程图1.传统流程图的弊端
BS型算法:aBowlofSpaghetti.例图2.13。2.三种基本结构(1966年,Bohra&Jacopini)(1)顺序结构(2)选择结构(3)循环结构
ABabABbp成立不成立Abp成立不成立aaAbp成立不成立aAbp不成立成立a当型While型直到型Until型2023/2/5云南师范大学数学学院662.4.3三种基本结构和改进的流程图(3)循环结构
Abp成立不成立a当型While型Abp不成立成立a直到型Until型0xx<5?x+1x打印x值0xx>=5?x+1
x打印x值NYNY2023/2/5云南师范大学数学学院672.4.3三种基本结构和改进的流程图三种基本结构的共同特点:(1)只有一个入口(2)只有一个出口(3)结构内的每一部分都有机会被执行(4)结构内不存在“死循环”ABabABbp成立不成立Abp成立不成立aaAB死循环三种基本结构可解决任何复杂的问题2023/2/5云南师范大学数学学院682.4.4用N-S流程图表示算法N-S(I.Nassi&B.Shneiderman)流程图的基本符号其中A或B框可以是简单操作,也可以是三种结构之一ABA当p1成立A直到p1成立ABp成立不成立顺序结构选择结构当型循环结构直到型循环结构p(1+r)p当n<=10r=0.08P>=100成立不成立r=0.06AB2023/2/5云南师范大学数学学院692.4.4用N-S流程图表示算法例2.111t2ititi+1i直到i>5打印t例2.121i打印ni,gii+1i直到i>50gi80是否2023/2/5云南师范大学数学学院702.4.4用N-S流程图表示算法2000y
y/4的余数为0y/100的余数
不为0
是否打印y“是闰年”y/400的余数为0打印y“是闰年”打印y“不是闰年”打印y“非闰年”y+1y直到y>2500是否是否例2.132023/2/5云南师范大学数学学院712.4.4用N-S流程图表示算法例2.15开始i+1ir=0?打印n“是素数”结束2in/i的余数ri>
?打印n“不是素数”YNNY输入n开始i+1ir=0?
输出n“是素数”结束0w
2in/i的余数ri和
w=0YNYN输入n1ww=0
输出n“不是素数”YN2023/2/5云南师范大学数学学院722.4.4用N-S流程图表示算法例2.15开始i+1ir=0?
输出n“是素数”结束0w
2in/i的余数ri和
w=0YNYN输入n1ww=0
输出n“不是素数”YN输出n“是素数”1w输入n0ww=02in/i的余数rr=0是否i+1i直到i>或w0输出n“不是素数”是否2023/2/5云南师范大学数学学院732.4.5用伪代码表示算法2.4.6用计算机语言表示算法#include<stdio.h>intmain(){inti,t;t=1;i=2;while(i<=5){t=t*i;i=i+1;}printf("%d",t);return0;}#include<stdio.h>intmain(){intsign=1;doubledeno=2.0,sum=1.0,term;while(deno<=100){sign=-sign;term=sign/deno;sum=sum+term;deno=deno+1;}printf("%f",sum);return0;}2023/2/5云南师范大学数学学院742.5结构化程序设计方法(1)自顶向下;(2)逐步细化(3)模块化设计;(4)结构化编码工作报告当前问题前一阶段工作对策工厂概况………………………………………………………………顶层设计第二层设计第三层设计2023/2/5云南师范大学数学学院75第3章最简单的C程序设计
——顺序程序设计3.1顺序程序设计举例P37_383.2数据的表现形式及其运算3.2.1常量和变量1.常量在程序运行过程中,其值不能被改变的量。(1)整型常量(2)实型常量(3)字符常量(4)字符串常量(5)符号常量2023/2/5云南师范大学数学学院761.常量(1)整型常量十进制整数。八进制整数。以0开头。如0123、–011。十六进制整数。以0x开头。如0x123、–0x12。(2)实型常量十进制小数形式指数形式形式:12.34e3、-1.23E-72023/2/5云南师范大学数学学院771.常量(3)字符常量普通字符,用单撇号括起来的字符。如'a','D','1','?','$'。此为源程序级的表示,例如c='a';若在计算机中表示,则为其ASCII码的二进制。注意ASCII表的规律,空字符、空格字符转义字符:以字符\开头的字符序列。例如'\n'2023/2/5云南师范大学数学学院78转义字符字符形式\n\t\b\r\f\\\'\"\ooo\xhh含义换行水平制表退格回车换页字符\字符'字符"1~3位8进制所代表的字符1~2位16进制所代表的字符ASCII代码109813129239342023/2/5云南师范大学数学学院79利用\ddd和\xhh可表示任何字符(只要已知其ASCII码)例如'\101'等同于'A','\012'等同于'\n‘;'\0'、'\000'为空字符。
例转义字符的应用。#include<stdio.h>intmain(){printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk");return0;}输出:abcdefabcgdehihj
ikhj
kfgde2023/2/5云南师范大学数学学院80(4)字符串常量字符串常量是一对双引号括起来的字符序列。例如:"Howdoyoudo","abc","a""a"与'a'的不同。字符串常量在内存中的存放。例如"CHINA"CHINA\02023/2/5云南师范大学数学学院81(5)符号常量例符号常量的使用
#definePRICE30intmain(){intnum,total;num=10;total=num*PRICE;printf("Total=%d",total);return0;}符号常量的作用:(1)含义清楚(2)便于修改intmain(){intnum,total;num=10;total=num*30;printf("Total=%d",total);return0;}2023/2/5云南师范大学数学学院822.变量其值可以改变的量称为变量。源程序中变量有一个名字。程序运行时对应内存相应的存储单元(地址)。C语言中变量:“先定义,后使用”。便于保证(1)变量使用的正确性;(2)为其分配合适的单元;(3)变量进行运算的正确性。a123变量名变量值对应单元地址存储单元2023/2/5云南师范大学数学学院833.常变量constinta=3;在该变量存在期间其值不能改变。与变量的异同?与常量的异同?与符号常量的异同?2023/2/5云南师范大学数学学院844.标识符标识符(identifier):用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。有效标识符:只能由字母、数字、下划线组成,且第一个字符必须为字母或下划线。注1:C语言中大、小写字母是有区别的。注2:标识符的长度(各个C编译系统自己的规定)。注3:形象的标识符。2023/2/5云南师范大学数学学院853.2.2数据类型所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度以及数据的存储形式。数据类型基本类型整型(int)字符型(char)实型(浮点型)枚举类型单精度型(float)双精度型(double)指针类型空类型构造类型数组类型结构体类型共用体类型2023/2/5云南师范大学数学学院863.2.3整型数据1.整型数据的分类(1)基本整型
inti;//int型数据单元为2个字节或4个字节
i=10;数值是以补码表示的。例如
–10的补码。0000000000001010i20002001i的地址为2000000000000000101010的原码1111111111110101按位取反1111111111110110再加12023/2/5云南师范大学数学学院871.整型数据的分类基本整型:int短整型:shortint或short长整型:longint或
long双长整型:longlongintsizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(longlong)2.整型变量的符号属性表3.2ANSI标准定义的整数类型[signed]intunsignedint[signed]short[int]unsignedshort[int][signed]long[int]unsignedlong[int]比特数161632321616类型最小取值范围–32768~32767即–215~(215–1)0~4294967275即0~(232–1)–2147483648~2147483647即–231~(231–1)–32768~32767即–215~(215–1)0~65535即0~(216–1)0~65535即0~(216–1)2023/2/5云南师范大学数学学院883.2.3整型数据整型变量的溢出#include<stdio.h>intmain(){inta,b;a=32767;b=a+1;printf("%d,%d",a,b);return0;}运行结果为:32767,-32768说明:(2)用%u格式输出无符号数据。01111111111111111000000000000000ab2023/2/5云南师范大学数学学院893.2.4字符型数据1.字符与字符代码字符按ASCII码形式存储字符'1'与整数1的不同:1+1=?'1'+'1'=?2023/2/5云南师范大学数学学院903.2.4字符型数据2.字符变量charc1,c2;c1='a';c2='b';字符数据在内存中的存储形式及其使用方法字符在内存中以二进制形式存放其对应的ASCII码!例向字符变量赋以整数。main(){charc1,c2;c1=97;c2=98;//等价于c1='a';c2='b';printf("%c%c\n",c1,c2);printf("%d%d\n",c1,c2);}97c198c201100001c101100010c22023/2/5云南师范大学数学学院91例大小写字母的转换main(){charc1,c2;c1='a';c2='b';c1=c1–32;
c2=c2–32;
printf("%c%c\n",c1,c2);}字符数据与整型数据可以互相赋值。charc=130;printf("%c,%d",c,c);2023/2/5云南师范大学数学学院923.2.5浮点型数据实型数据在内存中的存放形式——是以指数形式存放在存储单元中的。指数形式:123e3、123E3规范化的指数形式:1.23e5、1.23000e+05例:将5.25在内存存放。5.25=(101.01)2=1.010122.实型变量的分类+.0101+00000010系数部分数符系数部分小数指数类型floatdoublelongdouble比特数3264128有效数字61519数值范围(±)1.2×
1038~3.4×
1038(±)
2.3×
10308~1.7×
10308(±)
3.4×
104932~1.1×
1049322023/2/5云南师范大学数学学院933.2.6怎样确定常量的类型(1)整型常量在某类型的取值范围内即可。或:可在整数的末尾加L或l。(2)浮点型常量实型常量都是双精度浮点型常量。或:可在实数的末尾加F或f,L或l。例:floatf=3.14159;floatf=3.14159f;longdoublea=1.23L;2023/2/5云南师范大学数学学院943.2.7运算符和表达式1.基本的算术运算符+、–、*、/、%注意:(1)两个整数相除的结果为整数。若至少有一个运算数为实数,则算术运算的结果为双精度实数。例:1/2为0,1.0/2等于0.5(2)+、–还可为单目运算符。3.算术表达式和运算符的优先级与结合性2023/2/5云南师范大学数学学院952.自增自减运算符++i,––ii++,i––j=++i;j=i++;注1.自增自减运算符,只能作用于变量,而不能用于常量或表达式。5++、(a+b)++不合法。注2.自增自减运算符的结合方向“自右至左”例如(1)–i++(参见TurboC程序)
(2)i=3;j=(++i)+(++i)+(++i);2023/2/5云南师范大学数学学院962023/2/5云南师范大学数学学院974.各类数值型数据间的混合运算10+'a'+1.5-8765.1234*'b'(系统自动进行转换)5.强制类型转换运算符:
(类型)(表达式)(int)3.14、(float)1doublefloatlongunsignedintchar,short高低2023/2/5云南师范大学数学学院986.C运算符(1)算术运算符(+—*/%++––)
(2)关系运算符(><==>=<=!=)
(3)逻辑运算符(!&&||)
(4)位运算符(<<>>~|^&)
(5)赋值运算符(=及其扩展赋值运算符)
(6)条件运算符(?:)
(7)逗号运算符(,)
(8)指针运算符(*和&)
(9)求字节数运算符(sizeof)
(10)强制类型转换运算符((类型))
(11)成员运算符(.—>)
(12)下标运算符([])
(13)其他(如函数调用运算符())2023/2/5云南师范大学数学学院993.3C语句3.3.1C语句的作用和分类源程序文件1C程序局部变量声明源程序文件2源程序文件n预处理命令全局变量声明函数1函数首部函数n函数体执行语句…………2023/2/5云南师范大学数学学院1003.3.1C语句的作用和分类(1)控制语句if()…else…(条件语句)for()…(循环语句)while()…(循环语句)do…while()(循环语句)continue(结束本次循环语句)break(终止执行switch或循环语句)switch(多分支选择语句)return(从函数返回语句)goto(转向语句)2023/2/5云南师范大学数学学院1013.3.1C语句的作用和分类(2)函数调用语句
printf("ThisisaCstatement.");(3)表达式语句
a=3;x+y;(4)空语句;(5)复合语句
{……}2023/2/5云南师范大学数学学院1023.3.2最基本的语句——赋值语句例3.4给出三角形的三边长,求三角形面积。解题思路、编写程序、程序分析(略)。注意数学函数及'\t'的应用。赋值运算符:=例如:a=3;k=i*j;其作用?2.复合的赋值运算符:+=、*=、%=、……a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3一般地:v=vopexp(此处v为变量,exp为表达式,op为运算符)等价于vop=exp目的:简化程序提高效率2023/2/5云南师范大学数学学院1033.3.2最基本的语句——赋值语句3.赋值表达式:
整个作为一个表达式有此概念后,就可以理解并实现:a=b=c=5a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/c=2)a+=a–=a*a(若a的初值为12)printf("%d",a=b)变量=表达式2023/2/5云南师范大学数学学院1044.赋值过程中的类型转换赋值运算符两侧的数据类型不一致时,赋值运算符右端的表达式计算结果要转换为赋值运算符左端变量的类型。注意:表达式的值是否超过变量所属类型的取值范围。
实型数据整型变量取整数部分,但注意范围(1)实型变量整型数据以浮点形式存储(2)double数据float变量取7位有效数字,但注意范围(3)double变量float数据有效位数扩展char数据整型变量字符数据送到整型变量低8位但注意符号扩展(4)char变量整型数据取低8位(5)2023/2/5云南师范大学数学学院1056.变量赋初值inta=3;floatf=3.56;charc='a';inta,b,c=5;相当于inta,b,c;c=5;2023/2/5云南师范大学数学学院1063.4数据的输入输出标准输入输出函数:putchar()、getchar()、printf()、scanf()、puts()、gets()#include<stdio.h>2023/2/5云南师范大学数学学院1073.4.1字符数据的输入输出1.putchar函数(字符输出函数)putchar函数的功能是向终端输出一个字符。一般形式:putchar(表达式)先计算表达式之值,然后在终端输出其ASCII码为该值的字符。例如:chara='B';putchar(a);putchar('O');putchar('Y');putchar('\n');putchar('A');putchar('A'+1);此时在屏幕上输出:BOYAB2023/2/5云南师范大学数学学院1083.4.1字符数据的输入输出2.getchar函数(字符输入函数)getchar函数的功能是从终端(实际上是从输入缓冲区)读入一个字符。一般形式:getchar()例3.9从键盘输入BOY3个字符,然后把它们输出到屏幕。#include<stdio.h>intmain(){chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar('\n');return0;}注意程序运行过程中的输入。2023/2/5云南师范大学数学学院1093.4.1字符数据的输入输出2.getchar函数(字符输入函数)getchar函数的功能是从终端(实际上是从输入缓冲区)读入一个字符。getchar()将输入缓冲区下一个可读字符的字符值作为函数值返回。注1.getchar()从输入缓冲区读入下一个可读字符后(例如右图中b),再下一个字符成为下一个可读字符(右图中c)注2.若当前输入缓冲区可读字符为空(例如程序开始时,或输入缓冲区字符被读完后——例如上图读完换行符后),getchar将等待用户从键盘向缓冲区输入数据,直到输入一行字符(键入后),才开始读输入缓冲区(此时刚输入的第一个字符为下一个可读字符)。刚输入的一行字符同时显示在屏幕上。abc123下一个可读字符输入缓冲区2023/2/5云南师范大学数学学院1103.4.1字符数据的输入输出2.getchar函数(字符输入函数)补充1:getch()函数——直接读键盘(而不是读输入缓冲区,也就不必理会输入缓冲区是否为空),此时该函数等待用户从键盘输入一个字符,当用户按任一键后(不必为),getch()将该字符作为函数值返回。注意:为执行getch()函数而在键盘上键入的字符不显示在屏幕上。该函数常常用来响应用户是否敲击键盘。补充2:getche()函数,基本同getch();只是为执行getche()函数而在键盘上键入的字符显示在屏幕上。2023/2/5云南师范大学数学学院1113.4.2格式输入输出1.printf函数(格式输出函数)printf()的功能是向终端输出若干个任意类型(格式)的数据。一般形式:printf(参数1,参数2,参数3…
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭式餐饮业家长陪餐制度
- 2024年度货物销售合同的交货期限与付款方式
- 宠物食品物流运输方案
- 2024年度泥工装修工程合同保密协议
- 04版技术成果转化合同
- 2024年度艺术品鉴赏与咨询服务合同
- 2024年度工程咨询服务的居间合同
- 智能网联汽车采购及服务方案
- 2024年度影视版权许可与转让合同
- 2024年度销售合同标的为农产品
- 大学生创新创业基础-模块四-创新成果保护与转化课件
- DB32/T 4401-2022《综合医院建筑设计标准》-(高清正版)
- 杭州市高层次人才分类认定申请表-
- 陶氏化学反渗透膜产品及应用介绍课件
- 产业经济学习题整合(含答案)
- 小儿功能性胃肠病症课件
- 水电费结算证明
- 医院教学课件:宫颈癌三级预防
- 典范英语7-4中英文对照翻译Oh,otto!Oh,otto
- 国家开放大学《实用心理学》形考任务1-4参考答案
- 小学语文人教五年级上册(统编2023年更新)第五单元-群文阅读《说明方法的妙用》教学设计
评论
0/150
提交评论