C语言程序设计信息学院谢群英xieqy@lzu.edu.cn2/40C语言程序设计教学要求掌握程序设计语言的基本知识常用算法初步的程序设计能力学习方法自主学习重视上机实践3/40如何尽快学会用C语言进行程序设计了解程序设计语言(C语言)模仿、改写、编写通过不断的编程实践,逐步领会和掌握程序设计的基本思想和方法。4/40教材和参考书C语言程序设计,何钦铭、颜晖主编,高等教育出版社,2008C语言编程(第3版),[美]Stephen,G.Kochan,张小潘译,电子工业出版社,2006C语言教程(第4版),[美]AlKelley,IraPohl,徐波译,机械工业出版社,2007标准C语言基础教程(第4版),[美]GaryJ.Bronson,单先余等译,电子工业出版社,2006C程序设计语言,[美]BrianW.Kernighan,DennisM.Ritchie,徐宝文等译,机械工业出版社,20065/40Chap1引言一个C语言程序程序与程序设计语言C语言的发展历史与特点实现问题求解的过程6/40本章要点什么是程序?程序设计语言包含哪些功能?程序设计语言在语法上包含哪些内容?结构化程序设计有哪些基本的控制结构?C语言有哪些特点?C语言程序的基本框架如何?形成一个可运行的C语言程序需要经过哪些步骤?如何用流程图描述简单的算法?7/401.1一个C语言程序例1-1求阶乘问题。输入一个正整数n,输出n!。#includestdio.h/*编译预处理命令*/intmain(void)/*主函数*/{intn;/*变量定义*/intfactorial(intn);/*函数声明*/scanf(%d,&n);/*输入一个整数*/printf(“%d\n”,factorial(n));/*调用函数计算阶乘*/return0;}intfactorial(intn)/*定义计算n!的函数*/{inti,fact=1;for(i=1;i=n;i++)/*循环*/fact=fact*i;returnfact;}输入4输出24C程序由函数组成有且只有一个主函数main8/401.2程序与程序设计语言程序人们为解决某种问题用计算机可以识别的代码编排的一系列加工步骤。程序的执行过程实际上是对程序所表达的数据进行处理的过程。程序设计语言提供了一种表达数据与处理数据的功能要求程序员按照语言的规范编程9/401.2程序与程序设计语言程序与指令程序设计语言的功能程序设计语言的语法程序的编译与编程环境10/40程序与指令指令:计算机的一个最基本的功能如实现一次加法运算或实现一次大小的判别计算机的指令系统:计算机所能实现的指令的集合程序:一系列计算机指令的有序组合11/40程序与指令例1-2编写程序,分别求和与乘积虚拟的计算机指令系统(7条指令)指令1:InputX将当前输入数据存储到内存的X单元指令2:OutputX将内存X单元的数据输出。指令3:AddXYZ将内存X单元的数据与Y单元的数据相加并将结果存储到Z单元。指令4:SubXYZ将内存X单元的数据与Y单元的数据相减并将结果存储到Z单元。指令5:BranchEqXYP比较X与Y,若相等则程序跳转到P处执行,否则继续执行下一条指令。指令6:JumpP程序跳转到P处执行。指令7:SetXY将内存Y单元的值设为X。12/40程序与指令输入输入3个数A,B和C,求A+B+C的结果InputA;输入第1个数据到存储单元A中InputB;输入第2个数据到存储单元B中InputC;输入第3个数据到存储单元C中AddABD;将A、B相加并将结果存在D中AddCDD;将C、D相加并将结果存在D中OutputD;输出D的内容13/40程序与指令输入2个数A和B,求A*B的结果1.InputA;输入第1个数据到存储单元A中2.InputB;输入第2个数据到存储单元B中3.Set0X;将X设为0,此处X用以统计A累加的次数4.Set0Z;将Z设为0,此处Z用以存放A*B的结果5.BranchEqXB9;判别X与B是否相等;若相等说明A已累加了B次,程序跳转到第9条指令,输出结果6.AddZAZ;Z=Z+A7.Add1XX;X=X+18.Jump5;程序跳转到第5条指令,继续循环执行第6条、7条指令9.OutputZ;输出Z的值,该值等于A*B上一张下一张结束程序设计导论第14/54页计算机语言的发展1.机器语言2.汇编语言3.高级语言上一张下一张结束程序设计导论第15/54页机器语言面向机器的语言,指令和数据都是0、1序列。可以被计算机硬件直接识别,不需要翻译,因此执行速度快,执行效率高。不直观,编程工作量大,易出错,程序难读,不具有通用性,对编程人员要求高。汇编语言用一些简单的助记符来描述指令(如加法指令用“ADD”,数字用10进制或16进制来表示),因此又叫作“符号语言”。一般情况下,汇编语言的指令和机器语言的指令是一一对应的。高级语言为普通用户设计,接近自然语言,与机器无关,具有可移植性易学、易用、易维护。用变量名代替存储单元地址,机器分配地址和管理存储空间。不能被计算机硬件直接识别,需要翻译成机器可执行的目标代码后方可执行。上一张下一张结束程序设计导论第16/54页①IBM-PC的机器语言程序如下:1011000000000111:把7放入累加器A中0010110000001000:8与累加器A中的值相加,结果放A11110100:停机②汇编程序(符号化了的机器语言)如下:ORG00H:设置程序起始地址MOVA,7:把7放入累加器A中ADDA,8:8与累加器A中的值相加,结果仍放入A中HALT:停机③高级语言程序(C语言)如下:A=7+8:7与8相加的结果放入变量A中printf(%d,A):在显示器上输出变量A的值return:结束程序17/40程序设计语言的功能数据表达:表达所要处理的数据流程控制:表达数据处理的流程18/40数据表达数据表达:一般将数据抽象为若干类型数据类型:对某些具有共同特点的数据集合的总称代表的数据(数据类型的定义域)在这些数据上做些什么(即操作或称运算)例如:整数类型包含的数据:{…,-2,-1,0,1,2,…}作用在整数上的运算:+、-、*、/等19/40数据表达C语言提供的数据类型基本数据类型:程序设计语言事先定义好,供程序员直接使用,如整型、实型(浮点型)、字符型等。构造类型:由程序员构造,如数组、结构、文件、指针等。各种数据类型的常量与变量形式常量(常数)与变量20/40流程控制结构化程序设计方法将复杂程序划分为若干个相互独立的模块模块:一条语句(Statement)、一段程序或一个函数(子程序)等单入口、单出口21/40流程控制任何程序都可以将模块通过3种基本的控制结构进行组合来实现顺序结构循环结构分支结构22/40流程控制语句级控制:3种基本的控制结构顺序控制结构:自然顺序执行分支控制结构(选择结构):根据不同的条件来选择所要执行的模块循环控制结构:重复执行某个模块单位级控制:函数的定义与调用处理复杂问题时,将程序分为若干个相对独立的子程序(函数)23/40程序设计语言的语法用程序设计语言所写的程序必须符合相应语言的语法源程序(源代码)是一个字符序列,这些字符序列按顺序组成了一系列“单词”,“单词”的组合就形成了语言有意义的语法单位,一些简单语法单位的组合又形成了更复杂的语法单位,最后一系列语法单位组合成程序。24/40程序设计语言的语法C语言的主要“单词”(1)标识符:C语言的标识符规定由字母、数字以及下划线组成,且第一个字符必须是字母或下划线。(2)保留字(关键字):它们是C语言规定的、赋予它们以特定含义、有专门用途的标识符。(3)自定义标识符:包括在程序中定义的变量名、数据类型名、函数名以及符号常量名。有意义的英文单词25/40(4)常量:常量是有数据类型的,如,123、12.34(5)运算符。代表对各种数据类型实际数据对象的运算。如,+(加)、-(减)、*(乘)、/(除)、%(求余)、(大于)合法的标识符和变量名:sum,average,_total,Class,S_name,lotus_1,BASIC不合法的标识符和变量名:M.D.john,¥124,#333,3d65,ab判断下列符号中,哪些是合法的变量名?a3B3aB+a-b*x$_b5_next_daye_2OK?IntgerMAXNUMBERi*j26/40程序设计语言的语法C语言的主要语法单位(1)表达式:运算符与运算对象组合就形成了表达式。如,2+3*4(2)变量定义C语言中,变量须先定义,后使用如:intstudent;student=30;则若写成student=30,则未定义,编译时指出其错。如:a%b表示a与b整除求余,则a,b必须为整型量。一旦变量被定义,则:类型确定,可为其分配相应数量的存储单元。可检查其运算的合法性。27/40程序设计语言的语法其中,(3)语句:语句是程序最基本的执行单位,程序的功能就是通过对一系列语句的执行来实现的。表达式语句:表达式加分号“;”分支语句:实现分支控制过程if(ab)x=a;elsex=b;循环语句:实现循环控制的过程sum=0;/*初始化sum和i*/i=1;while(i=100){/*while循环语句*/sum=sum+i;i=i+1;}复合语句:用一对“{}”,将若干语句顺序组合在一起就形成了一个复合语句。28/40程序设计语言的语法(4)函数定义与调用函数是完成特定任务的独立模块,函数的使用最主要涉及到函数的定义与调用。(5)输入输出:C语言没有输入输出语句,用库函数printf、scanf等实现。29/40程序的编译与编程环境程序的编译编译器程序————》计算机直接能理解的指令序列编译器:对源程序进行词法、语法与语义分析,生成可执行的代码。编程环境包括编辑程序(Edit)、编译(Compile)、调试(Debug)等。掌握程序设计语言:根据语言的语法,用语言表达数据、实现程序的控制,并会使用编程环境。30/40C语言上机过程源程序test.cpptest.obj可执行代码test.exe编译连接运行31/401.3C语言的发展历史与特点历史1972年:贝尔实验室的DennisRitchie在B语言的基础上设计并实现了C语言。1978年:B.W.Kernighan和D.Ritchie(简称K&R)合著的《TheCProgrammingLanguage》是各种C语言版本的基础,称之为旧标准C语言。1983年:美国国家标准化协会(ANSI)制定了新的C语言标准,称ANSIC。32/401.3C语言的特点只有通过学习,方可理解C之特点,先简叙之:1.简洁、紧凑、方便、灵活32个关键字,9种控制语句,程序书写形式自由,主要用小写字母,压缩一切不必要成分。2.运算符丰富除了最基本的+、-、×、÷、%等运算外,还将括号、赋值、类型强制转换等均作为运算符,共有34种运算符。33/403.数据结构丰富有整型、实型、字符型、数组类型、指针类型、结构体类型、共同体类型等。4.具有结构化的控制语句C语言是结构化语言。提供了大量程序设计功能,支持若干循环结构。如if…else语句,do…while语句,switch语句,for语句。5.语法严格,但有灵活性如:对数组下标越界不作检查;数据类型可相互通用:整型、字符型通用。34/406.C语言是中级语言(高级语言中的低级语言)低级语言:可直接对硬件进行操作(内存地址的操作、位操作等)。依赖于计算机硬件,可读性和可移植性较差。高级语言:可读性、可移植性较好。但难以实现汇编语言的某些功能(直接对硬件操作)。7.生成目标代码质量高,执行效率高。8.可移植性优于汇编语言。C语言将与硬件有关的因素从语言主体中分离出来,通过库