C程序设计(第四版)第1章C语言及程序设计方法.ppt
第第1章章 C语言及程序设计方法语言及程序设计方法 1.1 C C语言发展简史语言发展简史1.2 C C语言程序的基本结构语言程序的基本结构1.3 C C语言程序的编辑及运行语言程序的编辑及运行本章小结本章小结 1.1 C语言发展简史语言发展简史 计算机语言是面向计算机的人工语言,是进行程计算机语言是面向计算机的人工语言,是进行程序设计的工具,因此也称序设计的工具,因此也称程序设计语言程序设计语言。程序设计语言可以分为程序设计语言可以分为机器语言、汇编语言、高机器语言、汇编语言、高级语言级语言。高级语言中一种是面向问题的程序设计语言,它高级语言中一种是面向问题的程序设计语言,它要对具体的算法和过程进行描述,也可以称为要对具体的算法和过程进行描述,也可以称为面向过面向过程程的算法语言,例如的算法语言,例如FORTRAN语言、语言、PASCAL语言语言和和C语言等。另一种属于人工智能语言,如语言等。另一种属于人工智能语言,如PROLOG语言。还有一种是当前流行的语言。还有一种是当前流行的面向对象面向对象的程序设计语的程序设计语言,例如言,例如C+、Java等,它们都是以等,它们都是以C语言为基础的,语言为基础的,学了学了C语言再学习语言再学习C+等语言就方便多了。等语言就方便多了。计算机能直接执行的是机器语言程序。汇编语言也称符号语言,用汇编语言编写的程序称汇编语言程序。计算机不能识别和直接运行汇编语言程序,必须由汇编程序翻译成机器语言程序后才能识别和运行。同样,高级语言程序也不能被计算机直接识别和执行,也必须把高级语言程序翻译成机器语言程序才能执行。语言处理程序就是完成这个翻译过程的,按照处理方式的不同,分为解释型程序和编译型程序两大类。C语言采用编译程序,把源程序编译成目标程序,再通过连接程序的连接,生成可执行程序才能运行。具体过程将在上机操作中详细说明。C语言是当前广为流行的程序设计语言,它适合于编写系统软件,也可以编写应用软件。以前的操作系统等系统软件主要是用汇编语言编写的(包括UNIX操作系统在内)。由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。为了提高可读性和可移植性,最好使用高级语言,但一般的高级语言难以实现对计算机硬件的直接操作,例如对内存地址的操作、位操作等,于是人们期望找到一种既具有高级语言特性,又具有汇编语言特性的新语言。C语言就是在这种情况下应运而生的。C语言之所以能存在、发展并具有强大生命力是因为它有如下特点:(1)简洁、紧凑,使用方便、灵活。C语言一共只有32个关键字,9条控制语句,而且有功能很强、非常丰富的运算符(34种)。例如自增(+)、自减(-)运算符,复合赋值运算符,条件运算符,并且把括号、赋值、强制类型转换等都作为运算符处理(2)表达能力强。它可以直接访问地址,能进行位(bit)操作,直接操纵硬件,完成通常由硬件实现的普通的算术运算、逻辑运算,(3)数据结构丰富。C语言的数据类型包括整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型、枚举类型等(4)模块化结构。C语言具有结构化的控制语句(如分支、循环)。以函数作为程序的模块单位,便于程序的分别编写、分别调试,加快软件的开发过程,是理想的结构化语言。(5)可移植性好。所谓可移植性是指一个程序可以不加修改或稍加修改就能在不同的机器或不同操作系统环境下运行。C语言程序具有很好的可移植性。(6)C语言语法限制不太严格,书写格式比较自由。(7)生成目标代码质量高,程序执行效率高。它生成的目标代码效率一般只比汇编语言低10%-20%。C语言有众多的优点,当然也存在一定的不足,主要是:(1)C语言的类型比较弱,类型转换比较随便。(2)没有动态数组界限检查。(3)允许编译程序在表达式中重新安排计算顺序和参数表,容易产生副作用。C语言灵活性高、限制少、功能强的特点对程序员的要求更高,初学者会感到一定困难,但是只要认真掌握它的实质,多读程序,多动手编程序,多上机调试程序,注意总结学习中的经验和体会,是一定可以学好的。1.2 C语语言程序的基本言程序的基本结结构构 要完成一项任务,必须通过一系列的操作过程。按一定顺序安排的工作操作序列,称为程序程序。程序用来描述完成某项功能所涉及的对象和动作规则。计算机程序就是要计算机完成某项功能所涉及的对象和动作规则,即由计算机进行解释和执行的指令和数据。人类和计算机交流要通过计算机语言实现。和人类社会中有汉语、英语、法语、日语、俄语等语言交流工具一样,每种语言都有它的语法规则。计算机程序设计语言有上千种,语法规则各不相同,语言程序就是按照语言所规定的语法规则和它所涉及的数据编写的程序。1.2.1 C语语言程序的基本言程序的基本结结构构 C语言程序由一个或多个函数组成,有且仅有一个主函数main,C语言的执行总是从主函数开始.C语言是结构化程序设计语言。结构化程序设计强调程序设计风格和程序结构的规范化。提倡清晰的结构,即顺序、分支和循环三种基本结构。对C语言程序有一个总体概念,先看下面几个简单例题。这几个例题暂时不要求深刻理解,在以后学到有关章节时,问题自然迎刃而解。在此只要求对C语言程序的组成和形式有一个初步了解,一开始就对C语言程序的语法规则有清楚的认识。例.在屏幕上输出一行信息:I am a boy./*在屏幕上输出信息:I am a boy.*/#include Void main()printf(”I am a boy.n”);我们来说明一下:这是由一个函数(主函数main)构成的C程序,运行后输出一个字符串。第一句:/*注释内容*/是注注释语释语句句,用来说明程序功能信息,不参加程序编译,所以,注释内容的正确与错误和程序执行无关。第二句:#include 是预处理,包含程序与系统关系。第三句:main()是主函数。主函数的名字是main,不能人为改变。第四句:printf()是一个输出函数。由系统提供的。注意:此函数内的双引号是西文双撇号“”。而且,C语言每一个语句用西文分号“;”结束。例1-2:设a=10,b=20,c=30,计算sum=a+b+c。#include void main()int a,b,c,sum;/*定义整型变量a,b,c,sum*/a=10;b=20;c=30;/*三个语句,分别给a,b,c赋值*/sum=a+b+c;/*用赋值运算符“=”求和*/printf(”sum=%dn”,sum);/*%d要求后面变量sum值按照十进制输出*/运行程序后输出:sum=60此程序也可以写成如下形式:#include void main()int a=10,b=20,c=30;/*定义整型变量a,b,c的同时赋值*/printf(”sum=%dn”,a+b+c);/*“n”的作用是回车换行 */这两个程序相同之处在于:第一,都是由一个主函数main完成的;第二,都对a,b,c 的数据类型进行了说明(int整型),并分别赋了初值10,20,30。两个程序的不同之处是:第一,第一个程序在说明a,b,c的数据类型之后单独赋值,第二个程序在说明a,b,c的类型同时赋值。第二,第一个程序说明了sum的类型,计算a+b+c的值后赋给sum,调用printf函数输出sum的值;第二个程序没有单独计算a+b+c 而是在调用printf函数时直接输出a+b+c的值。如果第一个程序中不说明sum的类型,编译时就会出现错误信息:“Undefined symbol sum in function main”(主函数中符号sum 没有定义)由此可见,解决同一个问题可以采用不同的方法编写程序。程序运行情况:Input a,b:3,8 max=8主函数的位置对程序有影响吗?例1-3输入两个整型数,输出其中的大数。#include void main()int a,b,s;/*定义整型变量a,b,s*/printf(”Input a,b:n”);/*屏幕显示Input a,b:*/scanf(”%d,%d”,&a,&b);/*从键盘上输入a和b的值*/s=max(a,b);/*调用max 函数,实参为a,b,*/*转到max 函数*/printf(”max=%dn”,s);/*输出a,b中的大数c*/int max(int x,int y)/*定义被调用函数max*/int z;/*定义变量z*/if(xy)/*根据条件判断,如果xy为真*/z=x;/*把x的值赋给z*/else /*否则*/z=y;/*把y的值赋给z*/return(z);/*把z的值返回主函数赋给c */如果将例1-3写成如下形式:主函数main放在程序后面。#include int max(int x,int y)/*定义被调用函数max*/int z;/*定义变量z*/if(xy)/*根据条件判断,如果xy为真*/z=x;/*把x的值赋给z*/else /*否则*/z=y;/*把y的值赋给z*/return(z);/*把z的值返回主函数赋给c */void main()int a,b,s;/*定义整型变量a,b,s*/printf(”Input a,b:n”);/*屏幕显示Input a,b:*/scanf(”%d,%d”,&a,&b);/*从键盘上输入a和b的值*/s=max(a,b);/*调用max 函数,实参为a,b,*/*转到max 函数*/printf(”max=%dn”,s);/*输出a,b中的大数c*/结果相同。1.2.2 C语语言程序言程序设计书设计书写格式写格式编辑好的C语言程序文件叫源程序文件源程序文件,源程序文件以.C作为扩展名(后缀),例如exam1.c,exam2.c等,一个C程序可以由多个源程序文件组成。一个程序中除了一个取名为main的主函数,其余函数可以取任何有意义的名字,由编程者自定义。C语言源程序文件由函数组成,那我们先了解一下函数的书写。1函数函数函数是C程序的基本组成单位,任何函数(包括主函数main)都由函数首部和函数体两部分组成。(1)函数的首部函数的首部,即函数的第一行,对函数进行说明,包括函数类型(可缺省)、函数名、函数参数表(形参表)。数据类型 函数名(数据类型参数,数据类型 参数2)例如:int max(int x,int y)(2)函数体函数体函数首部之后的第一个大括号和与之配对的大括号之间部分为函数体(大括号必须配对使用,如果一个函数内有多对大括号,则最外面的一对大括号是函数体的范围)。函数体一般由说明部分和可执行语句构成。说明部分主要是定义变量和自定义类型以及对自定义函数、外部变量等进行说明。例如,例1-3中主函数main函数体里的“int a,b,s;”定义了三个整型变量a,b,s。可执行语句部分一般由若干条可执行语句构成。例如,在例1-3的main函数体中,说明部分后面的四个语句构成该函数的可执行语句部分。有关函数的详细内容将在第5章介绍。在此,有几点重要提示需要说明:函数体中的说明部分必须在所有可执行语句之前,即说明部分不能和可执行语句交织在一起。例如下面的程序在编译时就会出现错误:void main()int a,b;scanf(”%d%d”,&a,&b);int c;c=a+b;printf”c=%dn”,c);出错的原因很简单,函数体内的说明部分“int c;”在可执行语句“scanf(”%d%d”,&a,&b);”之后。可以有空函数。即函数体为空,没有任何语句,但函数名和后面的一对大括号不能缺少。例如:void main()是一个空函数,它是一个合法的函数。2源程序的源程序的书书写格式写格式 C语言程序的书写格式比较自由,称为无格式语言,但要注意以下几点:(1)程序中每个语句结束都必须用分号“;”实现,分号是语句的一部分。(2)允许一行内写几条语句,也允许一条语句写在几行上。例如下面的两个程序:程序1:void main()int a,b,c;printf(”Input a,b:n”);scanf(”%d%d”,&a,&b);c=a+b;printf(”a=%d,b=%d,c=%dn”,a,b,c);程序2:void main()int a,b,c;printf(”Input a,b:n”);scanf(”%d%d”,&a,&b);c=a+b;/*一行中有两个语句*/printf(”a=%d,b=%d,c=%dn”,a,b,c);/*两行中有一个语句*/两个程序完全等价。程序1中每条语句占一行,看起来很清楚;程序2的程序体中,前两行各有两个语句,第三行和第四行是一个语句,看起来比较凌乱,所以最好一条语句占一行。如果一条语句很长,可以写成几行。(3)程序中提倡使用注释。一个高质量的程序,源程序中都应该加上必要的注释,以增强程序的可读性,这对程序员和用户都有很大的帮助。C语言的注释格式为:/*注释内容*/在以上例题中凡是以“/*”和“*/”括起来的文字都是注释。使用注释时需要注意以下几点:注释可以单独占一行,也可以跟在语句后面。“/*”和“*/”必须成对使用,并且“/”和“*”以及“*”和“/”之间不能有空格,否则都出错。如果注释内容在一行写不下,可以另起一行继续写。注释中允许使用汉字。在非中文操作系统下,看到的是一串乱码,但不影响程序运行。1.3 C语言程序的编辑及运行语言程序的编辑及运行本节内容建议结合试验在第一次上机时在机房边演示边讲解编好程序以后如何上机运行呢?一般要经过以下几个步骤:首先上机输入或修改已有的源程序(.C文件),称作编辑;第二步对源程序进行编译(包括预处理),因为计算机不能识别和执行C语言源程序,必须先用“编译程序”把源程序翻译成计算机能识别和执行的二进制指令形式的“目标程序”(可重定位中间代码,生成.obj文件);第三步把目标程序与系统的函数库以及其他目标程序连接起来,形成可执行的目标程序(.exe文件);最后运行得到结果。结果是否正确需要经过验证,如果结果不正确则需要进行调试。调试程序往往比编写程序更困难、更费时间。有关程序调试的内容,将在以后章节介绍。图1-3表示了C程序编辑、编译、连接和运行的全过程。编辑链接编译执行 C程序的上机步骤C程序开发步骤file.exe程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exeTurbo C集成开发环境l配置要求UNIX,PC-DOS,MS-DOS,UCDOS操作系统硬盘容量约2M,448K RAM运行空间l安装Turbo C创建子目录Install若不是可安装盘,将文件拷贝到对应的目录下TC*.*INCLUDELIB*.*SYS*.*C语言程序设计 l进入Turbo C(以下简称TC)C:Turbo C2TC.exe主控菜单文件操作FILE:New Load Save Write to编辑操作EDIT:插入/修改 块 查找/替换编译链接COMPILE LINK MAKE执行RUNl退出TCAlt +xAlt+F ,Ql帮助HelpF1Ctrl+F1 C语言程序设计 基本操作:F10-调用主菜单F2-存盘F3-打开Alt+F9-CompileCtrl+F9-RunAlt+F5-User Screenl常用热键文本编辑:-移动光标PgUp,PgDn-上下翻页Ctrl+PgUp,Ctrl+PgDn-文件首尾Home End Ddelete Insert Bkspace块操作:Ctrl+KB-块开始标记 Ctrl+KK-块结束标记Ctrl+KC-块拷贝 Ctrl+KV-块移动Ctrl+KY-块删除 Ctrl+KH-块隐藏程序调试:F8-Step over F7-Trace intoF4-Goto Cursor Ctrl+F7-Add WatchCtrl+F8-Toggle Breakpoint Ctrl+F2-Program Reset窗口操作:F5-窗口缩放F6-窗口切换本本 章章 小小 结结 C语言与其它计算机语言不同,可以直接访问地址,直接操纵硬件,进行位操作,C程序简洁、灵活,数据类型丰富,可移植性好,效率高,C语言在系统软件开发中更显突出。C语言又是学习C+,Java等面向对象的语言的基础。C语言是面向过程的程序设计语言。一个C程序由若干个文件组成,每个文件可以包含若干个函数,所以函数是C语言程序的基本单位。一个C程序有且仅有一个名为main的主函数。每个函数均由函数首部和函数体组成,设计函数时必须遵循一定的规则,注意程序设计的风格。初学者学习C语言程序设计时,必须懂得学习程序设计语言没有捷径可走,必须多读程序,多编程序。在学习中不断总结,就可以不断提高。编写好程序一定要上机验证,应该尽量多上机。调试程序比编写程序更困难,上机时不要怕有错误,只要认真分析错误原因,下次就可以克服。本章力求使读者对c语言源程序的结构和书写风格有一个基本了解。C语言是结构化程序设计语言。结构化程序设计强调程序设计风格和程序结构的规范化。