C/C++程序设计兰州理工大学计算机与通信学院马威mawei12@163.com2011.03课程性质“C/C++程序设计”是大学生必修的第二门计算机基础教育课程,是大学公共基础课程的教学重点,要求学生理解程序设计语言的基础知识,掌握基本的程序设计过程和技能,初步具备利用程序设计求解本专业实际问题的能力。本课程的大学计算机基础教育的第二阶段(第一阶段是上学期学习的“大学计算机基础A”)。指定教材王连相、赵付青主编C/C++程序设计教程(第二版).中国铁道出版社,2011.2C/C++程序设计上机指导与测试(第二版).中国铁道出版社,2011.1参考教材:C语言程序设计教程谭浩强高等教育出版社C高级实用程序设计王士元清华大学出版社C程序设计试题汇编谭浩强清华大学出版社学时分配理论教学总学时:32学时实验教学总学时:24学时上机和考试环境:VisualC++6.0(中文版)课程网站兰州理工大学精品课程平台:JPKC.LUT.CN精品课程名称:计算机高级语言程序设计(2008)学习内容:课程网站考核总评成绩由以下两部分构成:总评成绩=期末成绩+平时成绩期末成绩80分考试形式:上机考试(80分)平时成绩20分书面作业(5分)+上机(15分)说明:按照学校教务处的要求,期末考试考试在教学计划结束后很快安排,以免影响期末选课使用机房课程内容第1章C语言概述第2章数据类型和表达式第3章结构化程序设计第4章函数第5章编译预处理第6章复合数据类型第7章文件及其操作第8章基本应用综合举例重点掌握了解、自学第9章C++概述第10章类与对象第11章C++上机预备知识上课及上机安排上课时间:周五1、2节(8:00~9:35)1~16周上机时间:周二6、7节(14:30~16:05)1~16周上机地点:西教B实验楼501上机要求完成上机指导书的上机内容,调试运行教材及课后作业的程序,全部按章节题号存档,最后统一上交;上机考勤3次缺席,按不及格处理(不定期抽查);发现上机时间做与本课程无关的内容,按缺席一次处理重视上机实践,有效利用宝贵的上机时间学习方法不要胆怯动手动脑,理论指导下的实践自主学习重视上机实践在编写大量程序之后,才能感到运用自如如何尽快学会用C语言进行程序设计了解程序设计语言模仿、改写、编写通过不断的编程实践,逐步领会和掌握程序设计的基本思想和方法。程序设计及算法•程序:人们为解决某种问题用计算机可以识别的代码编排的一系列加工步骤。程序的执行过程实际上是对程序所表达的数据进行处理的过程。•程序设计语言(计算机语言):–提供了一种表达数据与处理数据的功能–要求程序员按照语言的规范编程程序=数据结构+算法+程序设计语言程序设计语言的功能•数据表达:表达所要处理的数据•流程控制:表达数据处理的流程1、数据表达•数据表达:一般将数据抽象为若干类型•数据类型:对某些具有共同特点的数据集合的总称–代表的数据(数据类型的定义域)–在这些数据上做些什么(即操作或称运算)例如:整数类型•包含的数据:{…,-2,-1,0,1,2,…}•作用在整数上的运算:+、-、*、/等•C语言提供的数据类型–基本数据类型:程序设计语言事先定义好,供程序员直接使用,如整型、实型(浮点型)、字符型等。–构造类型:由程序员构造,如数组、结构、文件、指针等。•各种数据类型的常量与变量形式–常量(常数)与变量•语句级控制:3种基本的控制结构–顺序控制结构:自然顺序执行–分支控制结构(选择结构):根据不同的条件来选择所要执行的模块–循环控制结构:重复执行某个模块•单位级控制:函数的定义与调用–处理复杂问题时,将程序分为若干个相对独立的子程序(函数)2、流程控制程序设计语言的语法用程序设计语言所写的程序必须符合相应语言的语法。源程序(源代码)是一个字符序列,这些字符序列按顺序组成了一系列“单词”,“单词”的组合就形成了语言有意义的语法单位,一些简单语法单位的组合又形成了更复杂的语法单位,最后一系列语法单位组合成程序。C语言的主要“单词”:(1)标识符:C语言的标识符规定由字母、数字以及下划线组成,且第一个字符必须是字母或下划线(2)保留字(关键字):它们是C语言规定的、赋予它们以特定含义、有专门用途的标识符。(3)自定义标识符:包括在程序中定义的变量名、数据类型名、函数名以及符号常量名。有意义的英文单词(4)常量:常量是有数据类型的,如,123、12.34(5)运算符:代表对各种数据类型实际数据对象的运算。如,+(加)、-(减)、*(乘)、/(除)、%(求余)、(大于)C语言的主要语法单位(1)表达式:运算符与运算对象组合就形成了表达试。如,2+3*4(2)变量定义:变量也有数据类型,所以在定义变量时要说明相应变量的类型。如:inti;(3)语句:语句是程序最基本的执行单位,程序的功能就是通过对一系列语句的执行来实现的。(4)函数定义与调用:完成特定任务的独立模块,函数的使用最主要涉及到函数的定义与调用。如:C语言没有输入输出语句,用库函数printf、scanf等实现。C语言中的语句:表达式语句:表达式加分号“;”分支语句:实现分支控制过程if(ab)x=a;elsex=b;循环语句:实现循环控制的过程sum=0;/*初始化sum和i*/i=1;while(i=100){/*while循环语句*/sum=sum+i;i=i+1;}复合语句:用一对“{}”,将若干语句顺序组合在一起就形成了一个程序段。程序设计的步骤提出问题确定数据结构和算法编写程序调试和运行程序翻译(编译或解释)得到运行结果算法算法:在计算机中,为解决某一应用问题而采用的解题步骤。算法的描述方式:–用自然语言描述算法–用流程图描述算法–用N-S结构图描述算法例如:输出两个数中的最大数1、用自然语言描述算法第一步:输入x和y的值第二步:比较x和y的值,如果x大于y,则输出x的值,否则输出y的值。易于理解,但冗长,不够精确,难于描述复杂算法。例如当描述“输出10个数中最大数”的算法时,会冗长、难于理解2、用流程图描述算法NYz=yz=xxy?开始输入x和y结束输出z起止框输入/输出框判断框处理框流程线3、用N-S结构图描述算法输入x、y的值xy真假z=xz=y输出z的值已经证明,任何复杂的问题都可以三种基本算法结构来描述:顺序、选择、循环。因此用计算机语句描述的程序也包含三种基本结构。求1*2*3*4*5=5!用自然语言描述:第1步:求1*2得2第2步:第1步的结果2乘3得6第3步:第2步的结果6乘4得24第4步:第3步的结果24乘6得120缺点:若算1*2*3*···*10000步骤太多NYx=x*i,i=i+1i6?开始结束输出x判断框x=1,i=2x=1,i=2当i6时x=x*ii=i+1输出xN-S图:传统流程图:C语言的发展历史B语言:Bell实验室,1970年在PDP机器上用其编写UNIX系统CPL语言:剑桥大学,1963年BCPL语言:剑桥大学,1967年C语言:Bell实验室,1972~1973年用其改写UNIX系统进一步简化保持精练、接近硬件的优点,克服数据类型过少的不足经简化C语言的特点1、C是中级语言计算机语言是人与计算机进行交流的工具计算机语言分为:机器语言机器指令(由0和1组成),可直接执行难学、难记依赖机器的类型汇编语言用助记符代替机器指令,用变量代替各类地址。克服记忆的难点其他与机器语言类似高级语言类似数学语言、接近自然语言、具有通用性和可移植性,不依赖具体的计算机类型。011000110000011001100101110011000000110000011011LOADXADDYSTOREZZ=X+YC语言属于高级语言,它具有高级语言的特点;C语言又允许对位、字节、字和指针这些计算机中的基本成分进行操作,使它又具有汇编语言的大部分功能。C语言是高级语言中的中级语言2、C语言是结构化语言结构化语言:一个入口,一个出口。便于编写程序,程序清晰易懂,便于维护顺序分支循环结构化程序设计程序设计的三种基本结构–顺序结构程序:按照书写顺序依次执行语句–选择结构程序:按照条件判断选择执行语句–循环结构程序:通过条件控制循环执行语句三种基本结构的共同点:•都是只有一个入口和一个出口;•结构内的每一个框都有机会被执行;•结构内没有死循环。结构化程序设计方法:—采用模块化原则和方法进行设计将复杂程序划分为若干个相互独立的功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写模块:一条语句、一段程序或一个函数(子程序)等3、C语言是编译型语言机器语言是计算机唯一能够识别并执行的指令代码集。编译器程序————计算机直接能理解的指令序列编译程序是一次读完全部程序,并把它转换成目标码,程序一旦编译后,源程序就对程序的执行毫无意义了。编译和解释是程序执行的两种方式。编译过程(.C)编译程序连接程序编译连接高级语言源程序机器语言目标程序可执行程序(.OBJ)(.EXE)运行运行结果解释程序是一次读进一行源代码,然后执行一串由这些源代码确定的指令。解释程序高级语言源程序解释执行运行结果解释过程(.BAS)对于一个大型工程软件,必须根据任务划分为若干块,分配给一组程序员分别编写,编写完毕以后,再链接在一起,调试通过。C允许将一个程序分解成若干块,装入若干文件,每一个文件可以单独编译,一旦所有的文件编译完毕,就可以将它们与函数库中的函数链接,形成完整的目标码。文件1目标码1(.OBJ)文件2目标码2······文件m目标码m库函数优点:当一个文件中的代码改变后,不必重新编译全部程序,能节省大量时间。链接完整的目标码(.EXE)4、C语言的语法特点(1)C语言语句简洁、紧凑,使用方便、灵活32个关键字,9种控制语句,程序书写形式自由,主要用小写字母(2)运算符丰富除了最基本的+、-、×、÷、%等运算外,还将括号、赋值、类型强制转换等均作为运算符,共有34种运算符。(3)数据结构丰富除基本类型外,还有指针、结构体、联合体等复合数据类型。(4)具有结构化的控制语句具有顺序、分支、循环三种结构化控制语言句,模块完整,控制中的语句可完整化。(5)语法严格,但有灵活性如:数据类型可相互通用:整型、字符型通用。(6)生成目标代码质量高,执行效率高。(7)可移植性优于汇编语言。/*example1.1calculatethesumofaandb*/#includestdio.h/*Thisisthemainprogram*/main(){inta,b,sum;a=10;b=24;sum=add(a,b);printf(”sum=%d\n,sum);}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){intz;z=x+y;return(z);}运行结果:sum=34函数语句预处理命令注释函数与主函数程序由一个或多个函数组成,必须有且只能有一个主函数main()程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/**/为注释,不能嵌套不产生编译代码例:/*Thisisthemain/*ofexample1.1*/*/非法编译预处理命令1.每个语句占一行;2.同一层次的语句从同一位置处开始书写;3.同一层次中嵌套的结构,应从不同位置开始书写;4.编译控制行、外部数据定义、函数定义之间空一行书写;5.对于函数体的大括号的书写约定;6.学会使用注释。良好的程序设计风格main(){……………….…………………………..…………..……………….………………………….……………….………………..}main(){inti,j,sum;sum=0;for(i=1;i10;i++){for(j=1;j10;j++){sum+=i*j;}}printf(“%d\n”,sum);}优秀程序员的