C语言程序设计项目教程_第1页
C语言程序设计项目教程_第2页
C语言程序设计项目教程_第3页
C语言程序设计项目教程_第4页
C语言程序设计项目教程_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、项目1l技能目标技能目标l知识目标知识目标l项目任务与解析项目任务与解析l 主要内容主要内容1.1 1.1 任务任务1: 1: 用输入输出函数初步设计项目菜单用输入输出函数初步设计项目菜单1.2 1.2 必备知识与理论必备知识与理论1.3 1.3 扩展知识与理论扩展知识与理论1.4 1.4 运行程序的步骤和方法运行程序的步骤和方法1. 问题描述问题描述现在我们要开发一套用于班级成绩管理的程序,该系统现在我们要开发一套用于班级成绩管理的程序,该系统的功能包括:的功能包括: 信息输入信息输入 成绩计算成绩计算 分类汇总分类汇总 成绩单制作成绩单制作2. 具体实现具体实现 P1-P2程序3. 知识分

2、析知识分析 选择C语言作为程序的开发语言,就要了解这种语言都有哪些特点,语言的特征、语言的运行环境等。程序是按照一定的顺序安排的工作步骤。程序是按照一定的顺序安排的工作步骤。程序要需要用某种形式(语言)来描述。例如,程序要需要用某种形式(语言)来描述。例如,用算盘进行计算,程序是用口诀描述的,珠算的用算盘进行计算,程序是用口诀描述的,珠算的语言是口诀。现代计算机的程序则是用计算机程语言是口诀。现代计算机的程序则是用计算机程序设计语言来描述的。序设计语言来描述的。1. 机器语言机器语言一种一种CPU的指令系统,也称该的指令系统,也称该CPU的机器语言,的机器语言,它是该它是该CPU可以识别的一组

3、由可以识别的一组由0和和1序列构成的指序列构成的指令码。令码。这种程序虽然可以被机器直接理解和执行,却由这种程序虽然可以被机器直接理解和执行,却由于它们不直观,难记、难认、难理解、不易查错,于它们不直观,难记、难认、难理解、不易查错,只能被少数专业人员掌握,同时编写程序的效率只能被少数专业人员掌握,同时编写程序的效率很低,质量难以保证。很低,质量难以保证。2. 汇编语言汇编语言用一些用一些“助记符号助记符号”来代替来代替0,1码编程。码编程。这种用助记符号描述的指令系统,称为符号语言或汇编语言。这种用助记符号描述的指令系统,称为符号语言或汇编语言。用汇编语言编程,程序的生产效率及质量都有所提高

4、。但是用汇编语言编程,程序的生产效率及质量都有所提高。但是汇编语言指令是机器不能直接识别、理解和执行的。用它编汇编语言指令是机器不能直接识别、理解和执行的。用它编写的程序经检查无误后,要先翻译成机器语言程序才能被机写的程序经检查无误后,要先翻译成机器语言程序才能被机器理解、执行。这个翻译转换过程称为器理解、执行。这个翻译转换过程称为“汇编汇编”。汇编后得。汇编后得到的机器语言程序称为目标程序到的机器语言程序称为目标程序(object program),汇编以,汇编以前的程序,称为源程序前的程序,称为源程序(source program)。由于汇编语言。由于汇编语言指令与机器语言指令基本上具有一

5、一对应的关系,所以汇编指令与机器语言指令基本上具有一一对应的关系,所以汇编语言源程序的汇编可以由汇编系统以查表的方式进行。语言源程序的汇编可以由汇编系统以查表的方式进行。汇编语言与机器语言,都是依汇编语言与机器语言,都是依CPU的不同而异,它们都称为的不同而异,它们都称为面向机器的语言。用面向机器的语言编程,可以编出效率极面向机器的语言。用面向机器的语言编程,可以编出效率极高的程序。但是程序员用它们编程时,不仅要考虑解题思路,高的程序。但是程序员用它们编程时,不仅要考虑解题思路,还要熟悉机器的内部结构,并且要还要熟悉机器的内部结构,并且要“手工手工”地进行存储器分地进行存储器分配。配。2. 高

6、级语言高级语言高级语言使用接近人类自然语言的、但又消除了自然高级语言使用接近人类自然语言的、但又消除了自然语言中的二义性的语言来描述程序。这些高级语言使语言中的二义性的语言来描述程序。这些高级语言使人们开始摆脱进行程序设计必须先熟悉机器的桎梏,人们开始摆脱进行程序设计必须先熟悉机器的桎梏,把精力集中于解题思路和方法上。把精力集中于解题思路和方法上。用高级语言编写的程序称为用高级语言编写的程序称为“源程序源程序”。通常有解释。通常有解释方式和编译方式两种方法在计算机上执行源程序。方式和编译方式两种方法在计算机上执行源程序。解释方式,即让计算机运行解释程序,解释程序逐句解释方式,即让计算机运行解释

7、程序,解释程序逐句取出源程序中的语句,对它作解释执行,输入数据,取出源程序中的语句,对它作解释执行,输入数据,产生结果。其优点是计算机与人的交互性好,调试程产生结果。其优点是计算机与人的交互性好,调试程序时,能一边执行一边直接改错,能较快得到一个正序时,能一边执行一边直接改错,能较快得到一个正确的程序。缺点是逐句解释执行,运行速度慢。确的程序。缺点是逐句解释执行,运行速度慢。编译方式,即先运行编译程序,从源程序一次翻译产编译方式,即先运行编译程序,从源程序一次翻译产生计算机可直接执行的二进制程序生计算机可直接执行的二进制程序(称为目标程序称为目标程序);然;然后让计算机执行目标程序,输入数据,

8、产生结果。其后让计算机执行目标程序,输入数据,产生结果。其优点是计算机运行目标程序快,缺点是修改源程序后优点是计算机运行目标程序快,缺点是修改源程序后必须重新编译以产生新的目标程序。必须重新编译以产生新的目标程序。 现在也有将上述两种方式结合起来的,即先编译源程序,产生计算机还是不能直接执行的中间代码,然后让解释程序解释执行中间代码。如Java程序,这样做的好处首先是比直接解释执行快;更大的好处是中间代码独立于计算机,只要有相应的解释程序,就可在任何计算机上运行。 1.分析问题、建立模型分析问题、建立模型一般来说,一个具体的问题要涉及许许多多的方面,一般来说,一个具体的问题要涉及许许多多的方面

9、,这是问题的复杂性所在。为了便于求解,往往要忽这是问题的复杂性所在。为了便于求解,往往要忽略一些次要方面。这种通过忽略次要方面,而找出略一些次要方面。这种通过忽略次要方面,而找出解题规律,就称为建立模型。解题规律,就称为建立模型。2. 表现模型表现模型表现模型就是用一种符号表现模型就是用一种符号-语言系统来描述模型。模语言系统来描述模型。模型的表现会随着对问题抽象程度的加深和细化,不型的表现会随着对问题抽象程度的加深和细化,不断由领域特色向计算机可解释、执行靠近,中间也断由领域特色向计算机可解释、执行靠近,中间也可能采用一些其他的符号系统,如流程图等,直到可能采用一些其他的符号系统,如流程图等

10、,直到最后用一种计算机程序设计语言描述出来。最后用一种计算机程序设计语言描述出来。3. 源程序的编写源程序的编写源程序的编辑就是在某种字处理环境下,用具体的源程序的编辑就是在某种字处理环境下,用具体的程序设计语言书写并修改的过程。为此就要掌握一程序设计语言书写并修改的过程。为此就要掌握一种计算机程序设计语言。种计算机程序设计语言。4. 程序的编译与链接程序的编译与链接写出一个高级语言程序后,并不是就可以立即写出一个高级语言程序后,并不是就可以立即拿来执行。要让机器直接执行,还要将它翻译拿来执行。要让机器直接执行,还要将它翻译成由机器可以直接辨认并可以执行的机器语言成由机器可以直接辨认并可以执行

11、的机器语言程序。程序。第第1步步:将源程序文件翻译成:将源程序文件翻译成0、1码表示的信码表示的信息,并用相应的目标程序文件保存。由源文件息,并用相应的目标程序文件保存。由源文件翻译成目标文件的过程称为编译。在编译过程翻译成目标文件的过程称为编译。在编译过程中,还要对源程序中的语法和逻辑结构进行检中,还要对源程序中的语法和逻辑结构进行检查。编译任务是由称做编译器(查。编译任务是由称做编译器(compiler)的)的软件完成的。目标程序文件还不能被执行,它软件完成的。目标程序文件还不能被执行,它们只是一些目标程序模块。们只是一些目标程序模块。第第2步步:将目标程序模块以及程序所需的系统中固有的:

12、将目标程序模块以及程序所需的系统中固有的目标程序模块(如执行输入输出操作的模块)链接成一目标程序模块(如执行输入输出操作的模块)链接成一个完整的程序。经正确链接所生成的文件才是可执行文个完整的程序。经正确链接所生成的文件才是可执行文件。完成链接过程的软件称为链接器(件。完成链接过程的软件称为链接器(linker)。)。程序在编译、链接过程中,也可能发现错误。这时要重程序在编译、链接过程中,也可能发现错误。这时要重新进入编辑器进行编辑。新进入编辑器进行编辑。5. 程序的测试与调试程序的测试与调试经编译、链接的程序文件,生成可经编译、链接的程序文件,生成可执行文件,就可以让计算机执行了。执行文件,

13、就可以让计算机执行了。因此,每一个人编写出一个程序后,因此,每一个人编写出一个程序后,在正式交付使用前,总要测试一下。在正式交付使用前,总要测试一下。测试是以程序通过编译、没有语法测试是以程序通过编译、没有语法和链接上的错误为前提,目的是找和链接上的错误为前提,目的是找出程序中可能存在的错误并加以改出程序中可能存在的错误并加以改正。正。C语言在语言在1978年由美国电话电报公司年由美国电话电报公司(AT&T)贝尔实验室正式发贝尔实验室正式发表。表。由美国国家标准学会由美国国家标准学会(ANSI)在制定了一个在制定了一个C语言标准,于语言标准,于1989年发表,通常称之为年发表,通常称之

14、为ANSI C(简称简称“C89”)。国际化标准组织在国际化标准组织在1990年制定的年制定的C标准,通常称为标准,通常称为“C90”。从从1995年开始,国际化标准组织着手对年开始,国际化标准组织着手对C标准作全面的修订,标准作全面的修订,并于并于1999年形成正式的年形成正式的C语言标准,简称语言标准,简称“C99”。既有高级语言的程序思想与设计方法,又有低级语既有高级语言的程序思想与设计方法,又有低级语言的操作能力。所以它也被称为言的操作能力。所以它也被称为“中级语言中级语言”;结构化的体系结构。层次清晰,便于按模块化方式结构化的体系结构。层次清晰,便于按模块化方式组织程序,易于调试和维

15、护;组织程序,易于调试和维护;处理能力上,不仅具有丰富的运算符和数据类型,处理能力上,不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。可以直接访问内存便于实现各类复杂的数据结构。可以直接访问内存的物理地址。的物理地址。在可移植性上可以方便地移植到不同的软、硬件环在可移植性上可以方便地移植到不同的软、硬件环境中境中代码效率高。代码效率高。启动启动Microsoft Visual C+ 6.0。新建项目新建项目 。新建文件。新建文件。编辑程序。编辑程序。编译并运行程序。编译并运行程序。C语言程序的部件是函数。语言程序的部件是函数。例例1.1 一个输出一串字符的一个输出一串字符的C程序程

16、序。# include int main(void) printf(Hello,World!n); /* 输出一串字符输出一串字符 */ return 0;1. 主函数主函数这里这里是一个函数。这个函数的名字为是一个函数。这个函数的名字为“main”。这个名字是专用的,表。这个名字是专用的,表示这个函数是示这个函数是“主函数主函数”。所谓主。所谓主函数,就是执行这个程序时,由操函数,就是执行这个程序时,由操作系统直接调用的函数。每一个作系统直接调用的函数。每一个C语言程序必须也只能有一个主函数。语言程序必须也只能有一个主函数。 int main (void)2. 函数参数函数参数函数名后面的圆

17、括号用于表示参数。一函数名后面的圆括号用于表示参数。一般说来,用函数进行计算,需要给定参般说来,用函数进行计算,需要给定参数。在数。在C语言程序中,参数部分写为语言程序中,参数部分写为“void”,表示该函数没有参数,只执行,表示该函数没有参数,只执行一个过程。一个过程。3. 函数体函数体一对花括号中的部分称为函数体,用来一对花括号中的部分称为函数体,用来表明该函数的功能是如何实现的。通常,表明该函数的功能是如何实现的。通常,函数体用一些语句表述。函数体用一些语句表述。C语言规定语语言规定语句必须用分号结束。句必须用分号结束。4. 函数值的类型函数值的类型函数名前面的函数名前面的“int”表明

18、函数的返回值是一个整数。有的表明函数的返回值是一个整数。有的操作系统操作系统(如如Unix)要求在执行一个程序后应向系统返回一要求在执行一个程序后应向系统返回一个整数值,如程序正常执行和结束,应返回个整数值,如程序正常执行和结束,应返回0,否则返回,否则返回一个非一个非0值。因此,需要将值。因此,需要将main函数指定为函数指定为int(整型整型),同,同时在函数体的最后写一返回语句:时在函数体的最后写一返回语句: return 0; 它的功能是向调用者它的功能是向调用者(操作系统操作系统)返回返回0值,表示主函数正值,表示主函数正常结束常结束(也就是程序正常结束也就是程序正常结束)。此语句必

19、须写在函数体的。此语句必须写在函数体的最后一行才有意义,因为只要执行到这条语句,就表达最后一行才有意义,因为只要执行到这条语句,就表达程序正常结束,向操作系统返回一个程序正常结束,向操作系统返回一个0,如果程序未执行,如果程序未执行到这个返回语句就非正常结束了,就不会向操作系统返到这个返回语句就非正常结束了,就不会向操作系统返回回0。操作系统会据此作出相应的处理。操作系统会据此作出相应的处理。有的操作系统有的操作系统(如如DOS,Windows)并无程序必须返回整并无程序必须返回整数的要求,因此,可以不指定数的要求,因此,可以不指定main函数为整型。这时可函数为整型。这时可在在main函数的

20、前面加上函数的前面加上void,如,如 void main(void) 或或 void main()5. 与处理命令与处理命令 # include 是一种在程序编译之前要处理的内容,称为编是一种在程序编译之前要处理的内容,称为编译预处理命令。编译预处理命令都用译预处理命令。编译预处理命令都用“#”开头,开头,并且不用分号结束,所以不是并且不用分号结束,所以不是C语言的语句。这语言的语句。这里的编译预处理命令称为文件包含命令,它的作里的编译预处理命令称为文件包含命令,它的作用是在编译之前把程序中需要使用关于系统定义用是在编译之前把程序中需要使用关于系统定义的函数的函数printf()的一些信息文

21、件()的一些信息文件stdio.h包含进包含进来。用来。用“.h”作为后缀的文件称为头文件。作为后缀的文件称为头文件。6. 程序注释程序注释“/* */”中的文字用于做一些说明或注释,让中的文字用于做一些说明或注释,让读程序的人容易读懂。读程序的人容易读懂。例例1-2 求阶乘求阶乘f(n)=n!#include int f(int); /*声明将要使用的函数声明将要使用的函数f()*/int main(void) int p;/*声明将要使用的变量声明将要使用的变量p是整型的是整型的*/ p= f (5);/*调用调用f()进行计算,并将结果赋给变量进行计算,并将结果赋给变量p*/ print

22、f(“5!=%d”,p);/*输出变量输出变量p*/ return 0;int f(int n)/*函数函数fb()的定义的定义*/ int i,j;/*定义变量定义变量i,j*/ j=1; for(i=1;i=n;i+)/*计算计算n!*/ j=j*i; return j;/*返回返回n!的值的值*/说明说明(1)图)图1-3表明了该程序的执行过程。表明了该程序的执行过程。图图1-3 程序的执行过程程序的执行过程 操作系统ex1_2.exe操作系统调用main()返回操作系统main ()p = f(5);printf(“5!=%d”,p);return 0;编译系统提供库函数printf

23、进行输出结果f(int n) f o r ( i = 1 ; i = n ; + + i )j=j*i;return j;将5传递给n计算j返回j的值到调用处7. 变量及其类型变量及其类型本例中的本例中的p、i、j都称为变量。变量是程序中被命名的数都称为变量。变量是程序中被命名的数据实体,并且它的值是可以改变的。同时,为了便于计据实体,并且它的值是可以改变的。同时,为了便于计算与存储,算与存储,C语言中程序中所使用的每个数据都被规范化语言中程序中所使用的每个数据都被规范化了。这种数据的规范称为数据类型。了。这种数据的规范称为数据类型。 本例中使用语句本例中使用语句 int p; 和和 int

24、i,j; 的作用就是声明了两个变量的作用就是声明了两个变量p和和i,j名字和类型(用名字和类型(用“int”表明它们是整型数据)。变量在使用之前都要先行声明。表明它们是整型数据)。变量在使用之前都要先行声明。8. 函数的声明函数的声明 本例中的本例中的 int f(int,int ); 称为函数声明。函数声明的作用是让编译器知称为函数声明。函数声明的作用是让编译器知道该函数的原型(包括返回类型、参数个数和类道该函数的原型(包括返回类型、参数个数和类型,以便对调用语句进行语法检查。如果定义在型,以便对调用语句进行语法检查。如果定义在调用前,从定义可以直接获得这些信息,就可以调用前,从定义可以直接

25、获得这些信息,就可以不写声明。不写声明。对于编译系统提供的库函数,它们的定义不在程对于编译系统提供的库函数,它们的定义不在程序中,因此需要给出相应的原型声明。为了方便序中,因此需要给出相应的原型声明。为了方便使用,系统把某些类型的库函数的原型声明写在使用,系统把某些类型的库函数的原型声明写在某个头文件中,程序员只要把要求的头文件用文某个头文件中,程序员只要把要求的头文件用文件包含语句写在程序中函数调用之前,就等于把件包含语句写在程序中函数调用之前,就等于把原型声明写在了函数调用之前。这就是使用函数原型声明写在了函数调用之前。这就是使用函数printf(),必须在其前写一条(),必须在其前写一条

26、#include 的原因。的原因。9. 关于关于printf()函数的参数函数的参数 printf()函数的参数有两部分:前面的用双引号引起函数的参数有两部分:前面的用双引号引起的部分称为的部分称为“控制串控制串”。控制串由一些字符组成,。控制串由一些字符组成,这些字符可以分成两类:第一类字符可以直接显示这些字符可以分成两类:第一类字符可以直接显示出来,第二类字符作为格式说明符使用。或者说,出来,第二类字符作为格式说明符使用。或者说,除了格式说明符之外的字符,都是可以直接显示的。除了格式说明符之外的字符,都是可以直接显示的。格式说明符是由格式说明符是由“%”开头,后面跟着的是格式码。开头,后面

27、跟着的是格式码。本例中的本例中的“d”就是格式码,它后面输出的数据按照就是格式码,它后面输出的数据按照带符号十进制输出。带符号十进制输出。10. 关于赋值运算关于赋值运算 在在C语言中,符号语言中,符号“=”称为赋值运算符,它的作用是把后称为赋值运算符,它的作用是把后面(右面)的值,送到其前(左面)的变量(左值)中。面(右面)的值,送到其前(左面)的变量(左值)中。一定不要将其当作是等号。在一定不要将其当作是等号。在C语言中,等号是语言中,等号是“=”。例例1-3 计算一个数的余弦值的计算一个数的余弦值的C语言程序。语言程序。#include /*包含标准库函数包含标准库函数*/#includ

28、e /*包含数学库函数包含数学库函数*/int main(void) /*主函数主函数*/ /*函数开头函数开头*/ double x,s; /*定义两个实型变量,被后面程序使用定义两个实型变量,被后面程序使用*/ printf(input number:n);/*显示提示信息显示提示信息*/ scanf(%lf,&x); /*从键盘输入一个实数从键盘输入一个实数x*/ s=cos(x);/*求求x的余弦,并把它赋给变量的余弦,并把它赋给变量s*/ printf(cos of %lf is %lfn,x,s); /*输出程序结果输出程序结果*/ return 0;/*函数结尾函数结尾*

29、/11. C语言源程序的书写要求语言源程序的书写要求源程序通常使用小写字母,只有符号常量或其它特源程序通常使用小写字母,只有符号常量或其它特殊用途的符号才大写;殊用途的符号才大写;不使用行号,通常按语句顺序执行;不使用行号,通常按语句顺序执行;用分号作为语句的结束符,不可省略用分号作为语句的结束符,不可省略(即便是最后一即便是最后一个语句也不能省略个语句也不能省略)。但预处理命令,函数头和花括。但预处理命令,函数头和花括号号“”之后不能加分号;之后不能加分号;可以一个语句占一行,也可多个语句占一行可以一个语句占一行,也可多个语句占一行(此时要此时要用分号分隔各个语句用分号分隔各个语句);不指定

30、语句在一行中的起始位置。但建议同一层次不指定语句在一行中的起始位置。但建议同一层次的语句应左对齐;的语句应左对齐;用大括号对用大括号对“”表示各个结构层次的范围。可以表表示各个结构层次的范围。可以表示函数、也可表示循环体等;示函数、也可表示循环体等;一个语句中不同成份之间应使用空格隔开。标识符,一个语句中不同成份之间应使用空格隔开。标识符,关键字之间必须至少加一个空格以示间隔。若已有关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔;明显的间隔符,也可不再加空格来间隔;程序中的空白行不影响程序的执行,可以为了程序程序中的空白行不影响程序的执行,可以为了程序清晰而加上

31、。但不要在一个语句中间加空行;清晰而加上。但不要在一个语句中间加空行;建议多使用注释信息,以增加程序的可读性;建议多使用注释信息,以增加程序的可读性;源程序中可以有预处理命令源程序中可以有预处理命令(include 命令仅为其中命令仅为其中的一种的一种),预处理命令通常应放在源文件或源程序的,预处理命令通常应放在源文件或源程序的最前面。最前面。12. C语言的字符语言的字符字符是组成语言的最基本的元素。字符是组成语言的最基本的元素。C语语言字符集由字母,数字,空格,标点和言字符集由字母,数字,空格,标点和特殊字符组成。在字符常量,字符串常特殊字符组成。在字符常量,字符串常量和注释中还可以使用汉

32、字或其它可表量和注释中还可以使用汉字或其它可表示的图形符号。示的图形符号。 函数定义的一般形式为:函数定义的一般形式为: 函数返回值类型函数返回值类型 函数名函数名(参数表参数表) 数据说明部分数据说明部分; 执行语句部分执行语句部分; 函数名与参数说明部分通称为函数说明部分。函数名与参数说明部分通称为函数说明部分。 一对大括号中间所包含的全部内容叫做函数体。一对大括号中间所包含的全部内容叫做函数体。在在C99中,基本的语句有表达式语句、流程控制中,基本的语句有表达式语句、流程控制语句和块语句。语句和块语句。1. 表达式语句表达式语句C语言程序的具体计算过程是由表达式完成的。语言程序的具体计算

33、过程是由表达式完成的。表达式是由运算符(如上述表达式是由运算符(如上述+,=等)、变量等)、变量(如上述(如上述p,i,j等)和常量成。前面使用过的等)和常量成。前面使用过的 p = f(5) j = j * i x=cos(x) 都是表达式。表达式加上语句结束符(分号)都是表达式。表达式加上语句结束符(分号)就构成表达式语句。就构成表达式语句。变量和常量的使用涉及它们的数据类型、表示变量和常量的使用涉及它们的数据类型、表示(命名)规则等。(命名)规则等。C语言中的运算符种类很多,正确地使用这些运算符,有语言中的运算符种类很多,正确地使用这些运算符,有三点需要注意:三点需要注意:含义。特别要区

34、分一个运算符符号在含义。特别要区分一个运算符符号在C语言中和在普通数语言中和在普通数学中的意义的不同。如学中的意义的不同。如“=”。优先级,即在一个表达式中存在多个运算符时,进行运优先级,即在一个表达式中存在多个运算符时,进行运算的先后顺序。算的先后顺序。结合性,即在一个表达式中有多个优先级别相同的运算结合性,即在一个表达式中有多个优先级别相同的运算符时,先进行哪个运算符的运算。例如,在表达式符时,先进行哪个运算符的运算。例如,在表达式2*3/5(在(在C语言中,语言中,“*”为乘运算符。为乘运算符。“/”为除运算符)中,为除运算符)中,先进行除呢,还是先进行乘。在这个表达式中,好像对先进行除

35、呢,还是先进行乘。在这个表达式中,好像对运算结果没有影响,但有时是有影响的运算结果没有影响,但有时是有影响的。2. 流程控制语句流程控制语句一般说来,程序中的语句是按照书写顺序执行的。但是,一般说来,程序中的语句是按照书写顺序执行的。但是,有些情况下,需要改变默认的执行顺序,例如像图有些情况下,需要改变默认的执行顺序,例如像图1.10(a)那样要从两个或多个语句中挑选一个语句执行,或)那样要从两个或多个语句中挑选一个语句执行,或者像图者像图1.10(b)那样要重复执行某一个语句或语句块。)那样要重复执行某一个语句或语句块。前者称为选择控制,后者称为重复控制。前者称为选择控制,后者称为重复控制。

36、条件语句是否条件语句1语句2是否 (a)选择结构)选择结构 (b)重复结构)重复结构 图图1-4 两种基本的流程控制结构两种基本的流程控制结构3. 块语句块语句 块语句也称为复合语句,就是用一对花括号将一组语句块语句也称为复合语句,就是用一对花括号将一组语句括起来。在一个块语句中可以包括若干声明和若干语句。括起来。在一个块语句中可以包括若干声明和若干语句。在例在例1.8的函数的函数sigma()中,中,while下面的用花括号括起的下面的用花括号括起的两个语句,就组成一个块语句。块语句在语法上相当于两个语句,就组成一个块语句。块语句在语法上相当于一条语句。因此,当语法上需要一个语句,而一个语句

37、一条语句。因此,当语法上需要一个语句,而一个语句又不能满足需要时,就必须使用块语句。又不能满足需要时,就必须使用块语句。 1. 标识符标识符 标识符也称为名称。变量的名字、函数的名字、文件的标识符也称为名称。变量的名字、函数的名字、文件的名字等。在名字等。在C语言程序中,所使用的标识符应当符合如下语言程序中,所使用的标识符应当符合如下的词法规则:的词法规则:标识符是大小写字母、数字和下划线组成的序列,但不标识符是大小写字母、数字和下划线组成的序列,但不能以数字开头。能以数字开头。C语言区别同一字母的大小写。语言区别同一字母的大小写。C89要求要求C编译器能识别的标识符长度为不少于编译器能识别的

38、标识符长度为不少于31个有效个有效字符,字符,C99要求要求C编译器能识别的标识符长度为不少于编译器能识别的标识符长度为不少于63个有效字符。一个标识符中超过了这个长度的字符可能个有效字符。一个标识符中超过了这个长度的字符可能会不被辨认。会不被辨认。2. 关键字关键字普通标识符不能使用对于系统有特殊意义的名称。这些普通标识符不能使用对于系统有特殊意义的名称。这些对系统有特殊意义的名称称为关键字。对系统有特殊意义的名称称为关键字。auto_Boolbreakcasechar_Complexconstcontinuedefaultdodoubleelseenumexternfloatforgoto

39、if_ImaginaryinlineintlongregisterrestrictreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhileC99关键字关键字 3. 3. 声明声明 在程序中,有许多东西是需要系统为其开辟存储空在程序中,有许多东西是需要系统为其开辟存储空间的,例如变量、函数类型定义等。它们都有自己的名字,并且间的,例如变量、函数类型定义等。它们都有自己的名字,并且要在内存中独立存储,为此可以将它们称做程序实体。那么,如要在内存中独立存储,为此可以将它们称做程序实体。那么,如何建立它

40、们的名字与实体之间的关联呢?这就是声明的作用。何建立它们的名字与实体之间的关联呢?这就是声明的作用。声明也称为说明,它的作用非常重要,包括如下一些:声明也称为说明,它的作用非常重要,包括如下一些: 告诉编译器,一个名字是与哪个实体联系,不告诉编译器,一个名字是与哪个实体联系,不能张冠李戴。能张冠李戴。 告诉编译器,也要程序员明白这个实体的类型。告诉编译器,也要程序员明白这个实体的类型。 告诉编译器,这个实体什么时候建立?在什么告诉编译器,这个实体什么时候建立?在什么范围内可以使用?范围内可以使用? 前面已经使用过了变量和函数的声明。所以前面已经使用过了变量和函数的声明。所以 int p;int

41、 p; 就是建立变量名就是建立变量名pp与它的实体之间的关联。与它的实体之间的关联。1. 变量变量 变量(变量(variable)是一种程序实体。它具有一个值,并且)是一种程序实体。它具有一个值,并且这个值是可以通过程序操作改变的。这个值是可以通过程序操作改变的。2. 变量的赋值运算变量的赋值运算 在在C语言中,符号语言中,符号“=”称为赋值运算符,它连接了左右两称为赋值运算符,它连接了左右两个操作数个操作数(即运算量即运算量):右操作数也称右值:右操作数也称右值,可以是一个表可以是一个表达式,左操作数也称左值(达式,左操作数也称左值(lvalue),只能是变量。赋值),只能是变量。赋值操作的

42、过程是把右操作数的值先转换成左操作数(变量)操作的过程是把右操作数的值先转换成左操作数(变量)的类型,并把该值存放到左操作数(变量)中。例如的类型,并把该值存放到左操作数(变量)中。例如int a;a = 2.6;printf(“%d”,a);结果为结果为2这是因为计算机在执行上述语句时,首先将这是因为计算机在执行上述语句时,首先将2.6舍去小数部分舍去小数部分截尾(截尾(truncation)成整型,赋值给变量)成整型,赋值给变量a。应当注意,赋值运算符是应当注意,赋值运算符是“=”。这个符号不是等号。例如。这个符号不是等号。例如int a = 2, b = 3;a = a + b; 的操作

43、是把表达式的操作是把表达式a + b的值的值(2 + 3)送到(赋值给)变量送到(赋值给)变量a。即。即经上述操作后,变量的经上述操作后,变量的a的值由的值由2变为变为5。图。图1-5表明这一操作表明这一操作过程:先计算过程:先计算a + b的值,然后把这个结果送到变量的值,然后把这个结果送到变量a中。于是,中。于是,变量变量a的值由的值由2变为变为5。23aba + b235运算器图图1-5 a = a + b的操作过程的操作过程赋值运算符具有赋值运算符具有“自右至左自右至左” 的结合性,例如的结合性,例如int a = 0,b = 0,c = 0;a = b = c = 5 + 3;相当于

44、相当于int a,b,c;a = (b =(c = (5 + 3)); 即先计算把即先计算把5 + 3 的值,得的值,得8,赋值给变量,赋值给变量c;再把变量;再把变量c的值(的值(8)赋值给变量)赋值给变量b;最后把变量;最后把变量b的值(的值(8)赋值给)赋值给变量变量a。也就是说,从一个变量向另一个变量赋值后,原。也就是说,从一个变量向另一个变量赋值后,原来变量中的值并不会消失或改变。所以,赋值操作相当来变量中的值并不会消失或改变。所以,赋值操作相当于拷贝,而不是移动。于拷贝,而不是移动。 C语言中的算术运算符与普通数学中的算术运算符有如下一语言中的算术运算符与普通数学中的算术运算符有如

45、下一些不同。些不同。 运算符符号有所不同。运算符符号有所不同。 种类有所不同。种类有所不同。 结合性可能会破坏交换率。结合性可能会破坏交换率。1. C语言的基本算术运算符语言的基本算术运算符 下下表为表为C语言中的基本算术运算符及其说明语言中的基本算术运算符及其说明。运算符名称运算对象功 能示例表达式示例值*乘任何两个实数或整数求两数之积5.5 * 4.022.000000/除任何实数或整数,但右操作数不可为0求两数之商4.5 / 50.900000%模两个整数,但右操作数不可为0求整除的余数13 % 85+加任何两个实数或整数求两数之和8 + 3.511.500000-减任何两个实数或整数求

46、两数之差10 - 4.65.400000C语言中的基本算术运算符及其说明语言中的基本算术运算符及其说明 说明:说明: (1)这几个算术运算符的运算对象有两个,所以也称为)这几个算术运算符的运算对象有两个,所以也称为双目算术运算符。双目算术运算符。 (2)这几个算术运算符的优先级别为:)这几个算术运算符的优先级别为:*、/、%高于高于+、-。并且它们都比赋值运算符的优先级别高。所以,在一。并且它们都比赋值运算符的优先级别高。所以,在一个表达式中有赋值运算符,也有算术运算符时,不使用个表达式中有赋值运算符,也有算术运算符时,不使用圆括号,可以先进行算术运算,后进行赋值运算。圆括号,可以先进行算术运

47、算,后进行赋值运算。 (3)这几个算术运算符均为)这几个算术运算符均为“自左至右自左至右”。 (4)需要特别注意的是整数除和模运算的结果都是整)需要特别注意的是整数除和模运算的结果都是整 数。数。 例例1-4 分析下面的程序的执行结果。分析下面的程序的执行结果。/* 文件名:文件名:ex010601.c */#include int main(void)printf (300 * 2 / 3 = %dn,300 * 2 / 3);printf (2 / 3 * 300 = %dn,2 / 3 * 300);return 0;观察上面的程序,按照交换率,似乎它们的计算结果应观察上面的程序,按照交

48、换率,似乎它们的计算结果应该相同。但是,非常遗憾!结果完全不同:该相同。但是,非常遗憾!结果完全不同:300 * 2 / 3 = 2002 / 3 * 300 = 0原因在于算术运算符具有自左至右的结合性,即对于第原因在于算术运算符具有自左至右的结合性,即对于第1个表达式语句,执行的顺序为:个表达式语句,执行的顺序为: 300 * 2 = 600,600 / 3 = 200 对于第对于第2个表达式语句,执行的顺序则为:个表达式语句,执行的顺序则为: 2 / 3 = 0(注意是整数相除),(注意是整数相除),0 * 300 = 0 因此,使用整数除,应当特别小心。因此,使用整数除,应当特别小心。2. 自反算术赋值运算符自反算术赋值运算符 前面介绍过这样的赋值表达式:前面介绍过这样的赋值表达式: a = a + b它的作用是将变量它的作用是将变量a的值加上变量的值加上变量b的值,再送回到变量的值,再送回到变量a中。或者中。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论