《C语言程序设计C语言概述.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计C语言概述.ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章 概述 内容提要:内容提要:C语言概貌语言概貌程序设计思想和程序结构程序设计思想和程序结构程序设计方法与要点程序设计方法与要点算法描述应用算法描述应用基本输入输出基本输入输出程序方式程序方式 绪论绪论 C C语言的特点语言的特点 库函数应用库函数应用 自定义函数自定义函数 C C程序的组成程序的组成 C C编程方式编程方式C C语言是目前世界上最流行和实用的一种计算机高级语言是目前世界上最流行和实用的一种计算机高级程序设计语言。最初的程序设计语言。最初的C C语言只是为描述和实现语言只是为描述和实现 UNIX UNIX 操作系统提供一种工作语言而设计的,后随其宿主系操作系统提供一种工作语
2、言而设计的,后随其宿主系统统UNIXUNIX的普及而被引起注意,又因其本身的高效、灵的普及而被引起注意,又因其本身的高效、灵活、功能丰富、表达力强、移植性好等特出优点受到活、功能丰富、表达力强、移植性好等特出优点受到广泛的重视并普及应用。广泛的重视并普及应用。 编写应用软件:编写应用软件:数据处理数据处理, ,科学工程数值计算等领域。科学工程数值计算等领域。 编写系统软件编写系统软件:操作系统操作系统, ,编译系统编译系统, ,系统实用程序。系统实用程序。 高校开设程序设计课程的必修首选语言。高校开设程序设计课程的必修首选语言。1.1绪论绪论(1) C语言在软件、硬件系统与用户中所处的位置语言
3、在软件、硬件系统与用户中所处的位置汇编语言汇编语言机器语言机器语言低级语言:具有面向硬件系统便于低级语言:具有面向硬件系统便于直接访问硬件的特点功能,但没有直接访问硬件的特点功能,但没有数据类型,不易阅读、记忆、推广。数据类型,不易阅读、记忆、推广。低级语言:具有面向硬件系统便于低级语言:具有面向硬件系统便于直接访问硬件的特点功能,但没有直接访问硬件的特点功能,但没有数据类型,不易阅读、记忆、推广。数据类型,不易阅读、记忆、推广。FORTRANFORTRAN语言语言pascalpascal语言语言BASIC BASIC 语言语言高级语言:具有丰富的数据类型高级语言:具有丰富的数据类型和运算符,
4、便于描述数据结构,和运算符,便于描述数据结构,既具有强有力的表达力,可加快既具有强有力的表达力,可加快开发开发速度,提高工作效率,面向速度,提高工作效率,面向用户、便于记忆、书写和阅读等。用户、便于记忆、书写和阅读等。高级语言:具有丰富的数据类型高级语言:具有丰富的数据类型和运算符,便于描述数据结构,和运算符,便于描述数据结构,既具有强有力的表达力,可加快既具有强有力的表达力,可加快开发开发速度,提高工作效率,面向速度,提高工作效率,面向用户、便于记忆、书写和阅读等。用户、便于记忆、书写和阅读等。系统系统软软件件硬硬件件用户用户1.2 C语言的特点语言的特点C C 语言语言 吸取了高低级语言优
5、点,兼而有之。吸取了高低级语言优点,兼而有之。(2)C C语言是一种结构化程序设计语言便于模块化软语言是一种结构化程序设计语言便于模块化软件设计。结构化程序设计思想和目的是使程序具有结件设计。结构化程序设计思想和目的是使程序具有结构合理,正确性高易验证。而且规定总结了一套程序构合理,正确性高易验证。而且规定总结了一套程序设计准则。可以简单归纳为以下几点:设计准则。可以简单归纳为以下几点: 基于自顶向下,逐步求精的设计方法;基于自顶向下,逐步求精的设计方法; 程序书写遵循一定的格式,使结构清晰;程序书写遵循一定的格式,使结构清晰; 程序中只包含三种基本的结构:顺序、分支、循环。程序中只包含三种基
6、本的结构:顺序、分支、循环。 程序由模块构成,每个模块具有独力的功能。模块程序由模块构成,每个模块具有独力的功能。模块之间的数据联系要简单,每个模块只能有一个入口和之间的数据联系要简单,每个模块只能有一个入口和一个出口;一个出口;三种最基本的结构:顺序、分支、循环。三种最基本的结构:顺序、分支、循环。语句组语句组顺序结构顺序结构语句组语句组顺序结构顺序结构语句语句1 1Y YN N条件条件语句语句2 2分支结构分支结构语句语句1 1Y YN N条件条件语句语句2 2分支结构分支结构N N条件条件语句组语句组循环结构循环结构Y YN N条件条件语句组语句组循环结构循环结构Y Y程序 = 数据结构
7、 + 算法数据结构:数据结构: 逻辑结构:逻辑结构:计算机外部的数据及其数据之间的关系。计算机外部的数据及其数据之间的关系。 存储结构:存储结构:外部数据及其数据之间的关系在计算机外部数据及其数据之间的关系在计算机内部的实现。(一般通过类型来表达)内部的实现。(一般通过类型来表达) 运算:运算:定义在逻辑结构之上的操作,通过算法描述定义在逻辑结构之上的操作,通过算法描述算法:算法:是对问题求解过程的一种描述,是为解决一个是对问题求解过程的一种描述,是为解决一个或一类问题给出的一个确定的有限长的操作序列。或一类问题给出的一个确定的有限长的操作序列。 有输入有输入:算法加工的对象;:算法加工的对象
8、; 有穷性有穷性:对于任意一组合法的输入值,在执行有穷:对于任意一组合法的输入值,在执行有穷步骤之后一定能结束;步骤之后一定能结束; 确定性确定性:对于每种情况下所应执行的操作,在算法:对于每种情况下所应执行的操作,在算法中都有确切的规定(不存在二义性);中都有确切的规定(不存在二义性); 可行性可行性:算法中的所有操作都必须足够基本,都可:算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之;以通过已经实现的基本操作运算有限次实现之; 有输出有输出:它是一组与:它是一组与“输入输入”有确定关系的量值,是有确定关系的量值,是算法进行信息加工后得到的结果。算法进行信息加工
9、后得到的结果。(3) (3) 用函数作为程序模块以实现程序的模块化结构用函数作为程序模块以实现程序的模块化结构# #include include # #include include # #define PI 3.14159define PI 3.14159main()main()double area(double x);double area(double x);double r,a;double r,a;scanf(%lf,&r);scanf(%lf,&r);r=pow(r,2.0);r=pow(r,2.0);a=area(r);a=area(r);printf(area=%fprin
10、tf(area=%f n,a);n,a);return(0);return(0); 以以# #打头的预处理命打头的预处理命令用以包含相关文件,令用以包含相关文件,及定义符号常数。及定义符号常数。 以以# #打头的预处理命打头的预处理命令用以包含相关文件,令用以包含相关文件,及定义符号常数。及定义符号常数。求解园面积的编程示例 C程序中的函数、程序中的函数、变量、符号常数必须变量、符号常数必须先定义后使用,否则先定义后使用,否则应作预先声明。应作预先声明。 C程序中的函数、程序中的函数、变量、符号常数必须变量、符号常数必须先定义后使用,否则先定义后使用,否则应作预先声明。应作预先声明。(3) (
11、3) 用函数作为程序模块以实现程序的模块化结构用函数作为程序模块以实现程序的模块化结构# #include include # #include include # #define PI 3.14159define PI 3.14159main()main()double area(double x);double area(double x);double r,a;double r,a;scanf(%lf,&r);scanf(%lf,&r);r=pow(r,2.0);r=pow(r,2.0);a=area(r);a=area(r);printf(area=%fprintf(area=%f n
12、,a);n,a);return(0);return(0); 以以main()标识的主函数标识的主函数是是C程序运行开始时由系程序运行开始时由系统调用的一个特殊函数,统调用的一个特殊函数,不管其所在位置是程序中不管其所在位置是程序中的前或后,执行总是从它的前或后,执行总是从它开始。开始。C程序可由一个或多个函程序可由一个或多个函数构成,但必须存在一个数构成,但必须存在一个主函数,执行语句中可以主函数,执行语句中可以调用其它函数,但它不能调用其它函数,但它不能被其它函数调用,也不能被其它函数调用,也不能自己调用自己。自己调用自己。其它函数指:其它函数指:C编译系统编译系统提供的库函数;用户自定提供
13、的库函数;用户自定义函数。义函数。求解园面积的编程示例函数的基本形式:函数的基本形式:函数类型函数类型 函数名(形参表函数名(形参表列列) 数据说明部分;数据说明部分;执行语句部分;执行语句部分; 说明:说明: 如果没有参数,则可以如果没有参数,则可以省略形参表列和形参说明,省略形参表列和形参说明,但括号不能省略;但括号不能省略;规定有序规定有序规定有序规定有序求解园面积的编程示例void main()void main()double area(double x);double area(double x);double r,a;double r,a;scanf(%lf,&r);scanf(
14、%lf,&r);r=pow(r,2.0);r=pow(r,2.0);a=area(r);a=area(r);printf(area=%fprintf(area=%f n,a);n,a); double area(double x)double area(double x)double y; double y; y=PI*x;y=PI*x;return(y);return(y); void main()void main()double area(double x);double area(double x);double r,a;double r,a;scanf(%lf,&r);scanf(%
15、lf,&r);r=pow(r,2.0);r=pow(r,2.0);a=area(r);a=area(r);printf(area=%fprintf(area=%f n,a);n,a); double area(double x)double area(double x)double y; double y; y=PI*x;y=PI*x;return(y);return(y); 求解园面积的编程示例 如果函数不需要返回如果函数不需要返回值,则可将该函数定义为值,则可将该函数定义为voidvoid类型函数,并去除类型函数,并去除returnreturn语句。语句。 分号是语句的结束标志,分号是语句
16、的结束标志,是语句必要的组成部分,是语句必要的组成部分,不可少,因此可以一行写不可少,因此可以一行写几个语句。几个语句。void main()void main()double area(double x);double area(double x);double r,a;double r,a;scanf(%lf,&r);scanf(%lf,&r);r=pow(r,2.0);r=pow(r,2.0);a=area(r);a=area(r);printf(area=%fprintf(area=%f n,a);n,a); double area(double x)double area(doubl
17、e x)double y; double y; y=PI*x;y=PI*x;return(y);return(y); 求解园面积的编程示例 函数:函数在程序设函数:函数在程序设计中,是指有一定结构形计中,是指有一定结构形式构成的,能完成某种特式构成的,能完成某种特定运算功能的程序模块,定运算功能的程序模块,被调用时根据自变量(形被调用时根据自变量(形参)的值,作运算后,返参)的值,作运算后,返回相应的结果(数据)或回相应的结果(数据)或实现某项特定的功能操作。实现某项特定的功能操作。预处理命令、外部变量定义等预处理命令、外部变量定义等函数类型函数类型main( )main( )数据说明部分;数
18、据说明部分;执行语句部分;执行语句部分; 函数类型函数类型fun_1( fun_1( 形参表形参表 )数据说明部分;数据说明部分;执行语句部分;执行语句部分; 函数类型函数类型fun_n( fun_n( 形参表形参表 )数据说明部分;数据说明部分;执行语句部分;执行语句部分; C C程程序序的的一一般般形形式:式:1.3 库函数应用简介库函数应用简介C C的两个基本系统函数库及其相配套的说明的两个基本系统函数库及其相配套的说明性预处理文件。性预处理文件。 库函数的说明性预处理文件库函数的说明性预处理文件: “stdio.hstdio.h”, , “math.hmath.h” 它们是系统与用户的
19、接口文件,称它们是系统与用户的接口文件,称“头文件头文件”,其中包含库函数原型的说明、类型,其中包含库函数原型的说明、类型和全局变量及符号常数等的说明。和全局变量及符号常数等的说明。 数值计算函数库数值计算函数库sqrt(X) sqrt(X) 求平方根函数;求平方根函数;sin(x) sin(x) 返回以弧度表示的返回以弧度表示的x x的正弦值;的正弦值;cos(x) cos(x) 返回以弧度表示的返回以弧度表示的x x的余弦值;的余弦值;pow(x,y)pow(x,y)返回返回x xy y的值的幂指数函数的值的幂指数函数exp(x) exp(x) 返回返回e ex x的指数函数的指数函数用户
20、程序要调用这些函数,必须在有关函数用户程序要调用这些函数,必须在有关函数前用以下预处理命令把前用以下预处理命令把“math.hmath.h”标头文件包标头文件包含进来。含进来。1.3 用库函数用库函数组装组装C程序程序#include “math.h”或或#include 双引号定界表示以当前双引号定界表示以当前目录为起点寻找包含文件,目录为起点寻找包含文件,若不在,再按系统规定的若不在,再按系统规定的标准路径找标准路径找 尖括号定界表示按系统尖括号定界表示按系统规定的标准路径设置检索规定的标准路径设置检索包含文件。包含文件。预处理命令包含预处理命令包含“math.hmath.h”标头文件标头
21、文件格式如下:格式如下:因为因为math.h中包含提供了数值计算函数库中中包含提供了数值计算函数库中的每一个函数原型的说明。的每一个函数原型的说明。double sqrt( double x );double sqrt( double x );double sin( double x );double sin( double x );double pow( double x, double y ); double pow( double x, double y ); 函数原型中提供了函数类型、函数名称、形参表中函数原型中提供了函数类型、函数名称、形参表中形参的个数、形参的类型、形参的顺序等信息
22、,它们形参的个数、形参的类型、形参的顺序等信息,它们将在程序中作为将在程序中作为C C编译程序编译用户程序时检验用户调编译程序编译用户程序时检验用户调用库函数准确性的判断依据。用库函数准确性的判断依据。函数类型函数类型函数名称函数名称 形参的个数、类型、顺序等信息形参的个数、类型、顺序等信息所以:所以:调用库函数时必须注意,函数参调用库函数时必须注意,函数参数的个数、类型、顺序及返回值的类型。数的个数、类型、顺序及返回值的类型。对于三角函数还应注意自变量的单位是对于三角函数还应注意自变量的单位是弧度。弧度。 基本基本I/O(输入输入/输出)库输出)库 :用户程序若要用户程序若要使 用 其 中
23、的 函 数 , 必 须 用 预 处 理 命 令 将使 用 其 中 的 函 数 , 必 须 用 预 处 理 命 令 将“stdio.hstdio.h”标头文件包含进来。标头文件包含进来。意义同上!意义同上!#include “stdio.h”或或#include 常用字符输入输出函数:常用字符输入输出函数:getchar( )putchar(C)gets(字符数组字符数组)puts(字符串地址字符串地址) 从标准输入文件从标准输入文件stdin(stdin(键盘键盘) )读入一个读入一个字符。字符。 把字符串输出到标准输出文件,并加把字符串输出到标准输出文件,并加上换行符。上换行符。 从标准输入
24、文件读入一个字符串到字从标准输入文件读入一个字符串到字符数组中。符数组中。 将字符将字符c c写到标准输出文件写到标准输出文件stdout(stdout(显显示屏示屏) )中去。中去。格式输入输出函数:格式输入输出函数:scanf(“格式字符串格式字符串”,输入参数表列,输入参数表列);printf(“格式字符串格式字符串”,输出参数表列,输出参数表列); 特例,最常用的输入输出函数,因此可省略特例,最常用的输入输出函数,因此可省略stdio.h文件包含文件包含例例2 2 计算一个正弦值。计算一个正弦值。#include void main()double x; /declare variab
25、lex=sin(0.19199);printf(sin0.19199=%fn, x);/*运行结果:运行结果:sin0.19199=0.190813sin0.19199=0.190813*/ /注释本行其后的注释本行其后的内容为注释信息;内容为注释信息; /*/*/*/表示两符号表示两符号之间为注释信息;之间为注释信息; 注释信息对程序运注释信息对程序运行不发生影响,也不被行不发生影响,也不被编译,合理地使用注释编译,合理地使用注释可以提高程序的可阅读可以提高程序的可阅读性。性。例例2 2 计算一个正弦值。计算一个正弦值。 C C规定每一个语句以规定每一个语句以分号结束,分号是语句分号结束,分
26、号是语句不可缺少的部分,是语不可缺少的部分,是语句的结束标志。因此,句的结束标志。因此,一行可以写多个语句,一行可以写多个语句,一个语句也可以分多行一个语句也可以分多行书写。书写。#include void main()double x; /declare variablex=sin(0.19199);printf(sin0.19199=%fn, x);/*运行结果:运行结果:sin0.19199=0.190813sin0.19199=0.190813*/函数调用时,必须注意函数调用时,必须注意实参与形参在参数的个实参与形参在参数的个数、类型、顺序及单位数、类型、顺序及单位上一一对应匹配!上一
27、一对应匹配! 的文件包含和编译过程。的文件包含和编译过程。目标模块目标模块可执行程序可执行程序库函数其它库函数其它目标程序目标程序目标模块目标模块可执行程序可执行程序库函数其它库函数其它目标程序目标程序模块模块A模块模块B模块模块A模块模块B模块模块A#include 模块模块Bmath.hfile1.c预编译预编译模块模块A#include 模块模块Bmath.hfile1.c预编译预编译编译编译链接链接编译编译链接链接运行运行运行运行执行结果执行结果执行结果执行结果 格式输出函数格式输出函数printf():printf():一般形式:一般形式:printf( “输出格式串输出格式串”,输
28、出参数项表列,输出参数项表列 );输出格式串中可以使用三种不同的字符成分输出格式串中可以使用三种不同的字符成分: 格式符格式符 转义字符转义字符 一般字符一般字符功能:功能:按规定的格式把输出项输出到显示屏上按规定的格式把输出项输出到显示屏上格式符的基本形式:格式符的基本形式:%如:如:%6d ,%10.2f,%16s, 格式符:格式符:%打头打头后跟一个字母部分,后跟一个字母部分,组成特定格式以规定组成特定格式以规定相应输出项的输出形相应输出项的输出形式。式。 转义字符转义字符: 打头后跟一个字母或数字部分,作用打头后跟一个字母或数字部分,作用是输出控制代码和特殊字母。如是输出控制代码和特殊
29、字母。如 n n为回车换行控制为回车换行控制代码。代码。 一般字符一般字符:除了格式符和转义字符以外的其它字符,除了格式符和转义字符以外的其它字符,原样输出,以增加运行结果的可读性。原样输出,以增加运行结果的可读性。% %d d 按十进制整数形式输出按十进制整数形式输出% %x x 按十六进制整数形式输出按十六进制整数形式输出% %f f 按浮点数按浮点数( (实数实数) )形式输出形式输出% %c c 按单一字符形式输出按单一字符形式输出% %s s 按字符串形式输出按字符串形式输出#include void main()double x; /declare variablex=sin(0.
30、19199);printf(sin0.19199=%fn, x);/*运行结果:运行结果:sin0.19199=0.190813*/三种字符成分可三种字符成分可在输出格式串中不在输出格式串中不同位置上配合使用,同位置上配合使用,以实现不同的显示以实现不同的显示效果。效果。例例2 2 计算一个正弦值。计算一个正弦值。由此本示例的运行结果!由此本示例的运行结果! 输出参数可以由一个以上的输出项组成输出参数可以由一个以上的输出项组成printf( “%d%x%f”, a, b, c ); printf()printf()亦可以没有输出项,利用它可输亦可以没有输出项,利用它可输出提示信息。如:出提示信
31、息。如:printf( “test!” );要求:要求:输出格式中的格式符与输出项的个数必须相同,输出格式中的格式符与输出项的个数必须相同,它们按各自的先后顺序一一对应,且符合类型匹配的它们按各自的先后顺序一一对应,且符合类型匹配的要求。要求。整整型型整整型型实实型型#include void main()printf( sin0.19199=%fn, sin(0.19199) ); C C语言允许函数嵌套调用语言允许函数嵌套调用函数间的调用关系及其称main( )printf( )sin( )主调程序主调程序被调程序被调程序主调程序主调程序被调程序被调程序1.4 自定义函数的编写自定义函数的
32、编写例例3 3 计算计算 !7!5!3)sin(753xxxxx直到最后一项的绝对值小于直到最后一项的绝对值小于时,停止时,停止计算。计算。x x键盘输入。键盘输入。710 直到最后一项的绝对值小于直到最后一项的绝对值小于时,停止时,停止计算。计算。x x键盘输入。键盘输入。710 讨论讨论:计算计算sin(x) sin(x) 本来可以利用系统提供的库函数直接本来可以利用系统提供的库函数直接求出。但是库函数是如何计算求出。但是库函数是如何计算sin(x)sin(x)的呢?如计算公的呢?如计算公式所指出的那样,这是一个级数求和的问题。其项数式所指出的那样,这是一个级数求和的问题。其项数决定于最后
33、一项的绝对值是否小于决定于最后一项的绝对值是否小于。如果它大。如果它大于于,继续求下一项,累加到和上,否则结束求和。,继续求下一项,累加到和上,否则结束求和。710710 讨论讨论:计算计算sin(x) sin(x) 本来可以利用系统提供的库函数直接本来可以利用系统提供的库函数直接求出。但是库函数是如何计算求出。但是库函数是如何计算sin(x)sin(x)的呢?如计算公的呢?如计算公式所指出的那样,这是一个级数求和的问题。其项数式所指出的那样,这是一个级数求和的问题。其项数决定于最后一项的绝对值是否小于决定于最后一项的绝对值是否小于。如果它大。如果它大于于,继续求下一项,累加到和上,否则结束求
34、和。,继续求下一项,累加到和上,否则结束求和。710710 !7!5!3)sin(753xxxxx设变量为设变量为x x,和为和为sumsum,每一项为每一项为termterm,其类型都说其类型都说明为双精度明为双精度doubledouble。另外定义一符号常量另外定义一符号常量EPSEPS表示误差,表示误差,其值为其值为。710 设变量为设变量为x x,和为和为sumsum,每一项为每一项为termterm,其类型都说其类型都说明为双精度明为双精度doubledouble。另外定义一符号常量另外定义一符号常量EPSEPS表示误差,表示误差,其值为其值为。710 算法描述算法描述: (一级算法
35、一级算法)1累加器累加器sum、term的初值为的初值为x,n=1;2 while(fabs(term)EPS)3计算下一项计算下一项term;4将下一项加到将下一项加到sum中。中。5输出和输出和sum。 数据描述数据描述:其中第其中第3 3步需要继续步需要继续求精。每一项单独计求精。每一项单独计算较麻烦,也浪费机算较麻烦,也浪费机时,可以利用前一项时,可以利用前一项求下一项的办法(称求下一项的办法(称递推计算方法)计算。递推计算方法)计算。由计算公式由计算公式。可知。可知 !7!5!3)sin(753xxxxx由计算公式由计算公式。可知。可知 !7!5!3)sin(753xxxxx这对于所
36、有的这对于所有的n n(n1n1)都是成立的。都是成立的。第第n n项为:项为:)!12()1()12(1 nxnn第第n n项为:项为:)!12()1()12(1 nxnn第第n n- -1 1项为:项为:)!32()1()32( nxnn第第n n- -1 1项为:项为:)!32()1()32( nxnn前一项与后一项之间差一个因子:前一项与后一项之间差一个因子:)12)(22(2 nnx前一项与后一项之间差一个因子:前一项与后一项之间差一个因子:)12)(22(2 nnx 二级求精二级求精:第第3步,计算下一项步,计算下一项term3-1:n=n+1;3-2:term=term*(-x*
37、x)/(2*n-2)*(2*n-1)1 累加器累加器sum、term的初值为的初值为x,n=1;2 while(fabs(term)EPS)3 计算下一项计算下一项term;4 将下一项加到将下一项加到sum中。中。5 输出和输出和sum。 较完整的算法较完整的算法3-1 n=n+1;3-2 term=term*(-x*x) /(2*n-2)*(2*n-1)计算计算udf_sin(x)函数和完整的程序如下函数和完整的程序如下:#include #include #define EPS 1e-7void main()double udf_sin( double x ); /用户自定义函数原型说明
38、用户自定义函数原型说明double a;scanf(%lf, &a );printf(%f %fn, udf_sin(a), sin(a) );double udf_sin( double x ) /用户自定义函数用户自定义函数double sum, term, n=1;sum=term=x;while( fabs(term) EPS )n=n+1;term=term*(-x*x)/(2*n-2)*(2*n-1);sum=sum+term;return(sum);运行结果:运行结果:input: 0.19199input: 0.19199output: 0.190813 0.190813out
39、put: 0.190813 0.190813说明:说明: C规定变量、符号常数、函数必须先定义后规定变量、符号常数、函数必须先定义后使用:使用:* 给变量定义就是为变量在内存中分配存储给变量定义就是为变量在内存中分配存储空间,确定其存储形式和规定可执行的操作空间,确定其存储形式和规定可执行的操作(运算);(运算);* 给函数定义就是确定函数求解问题的功能给函数定义就是确定函数求解问题的功能和过程,及其数据传递的方式等。和过程,及其数据传递的方式等。说明:说明: 数据传递是程序设计中重要的概念,数据传递是程序设计中重要的概念,C中的中的数据传递方法可归纳为:数据传递方法可归纳为:* 参数传递:传
40、值方式和传地址方式;参数传递:传值方式和传地址方式;* 外部变量(全局变量)传递;外部变量(全局变量)传递;* 由由 return(表达式表达式)语句将表达式的值返回语句将表达式的值返回到主调函数的调用处。到主调函数的调用处。 本程序的数据传递形态:本程序的数据传递形态:采用传值方式,采用传值方式,可理解为简单的将实可理解为简单的将实参参a的值复制给形参的值复制给形参xudf_sin()0.191990.191990.19199120002000200420042008200820122012x xsumsumtermtermn nmain()0.1919930003000采用传值方式,采用传
41、值方式,可理解为简单的将实可理解为简单的将实参参a的值复制给形参的值复制给形参xudf_sin()0.191990.191990.19199120002000200420042008200820122012x xsumsumtermtermn nmain()0.1919930003000a adouble udf_sin(double x)double sum,term,n=1; sum=term=x; void main() double a; printf(“%f %fn,udf_sin( a ),sin( a );scanf()格式函数的形式与使用,格式为:格式函数的形式与使用,格式为:
42、scanf(“输入格式串输入格式串”,输入项地址表列);,输入项地址表列);* * 输入格式串的组成同输入格式串的组成同printf()printf(),一般只使用格式符;一般只使用格式符;* * C C规定输入项必须由地址构成,项与项之间逗号分隔规定输入项必须由地址构成,项与项之间逗号分隔; ;* * & &为地址运算符或称取地址符;为地址运算符或称取地址符;& &a a表示取表示取a a变量的变量的地址,为地址表达式,运算结果为地址,为地址表达式,运算结果为30003000。* * 输入格式串的组成同输入格式串的组成同printf()printf(),一般只使用格式符;一般只使用格式符;*
43、 * C C规定输入项必须由地址构成,项与项之间逗号分隔规定输入项必须由地址构成,项与项之间逗号分隔; ;* * & &为地址运算符或称取地址符;为地址运算符或称取地址符;& &a a表示取表示取a a变量的变量的地址,为地址表达式,运算结果为地址,为地址表达式,运算结果为30003000。0.1919930003000a ascanf()scanf();语句的含义为,按指定的语句的含义为,按指定的格式,将由键盘输入的数据存放到相应格式,将由键盘输入的数据存放到相应地址的存储单元之中去。地址的存储单元之中去。scanf( %lf, &a );scanf( %lf, &a ); 输入格式符的输入
44、格式符的常常用用方式方式与注意事项:与注意事项:1 1三种形式说明,设有三种形式说明,设有float a, b, c;float a, b, c;scanf(scanf(“%f%f%f%f%f%f”,&a, &b, &c );,&a, &b, &c );紧凑无其他字符,按系统规定需用一个或多个空格紧凑无其他字符,按系统规定需用一个或多个空格分隔输入数据项,亦可用回车键分隔。分隔输入数据项,亦可用回车键分隔。输入形式:输入形式:3.5 4.6 7.9 3.5 4.6 7.9 或或分行输入:分行输入:3.5 3.5 4.6 4.6 7.9 7.9 scanf(scanf(“%f,%f,%f%f,%
45、f,%f”,&a, &b, &c );,&a, &b, &c );逗号作为一般字符,原样输入,且可作为数据项之逗号作为一般字符,原样输入,且可作为数据项之间的分隔符使用;间的分隔符使用;输入形式:输入形式:3.5,4.6,7.9 3.5,4.6,7.9 scanf(scanf(“%f%f%f%f%f%f n n”,&a, &b, &c );,&a, &b, &c );输入形式:输入形式:3.5 4.6 7.93.5 4.6 7.9 n n 注意:注意:不恰当得使用不恰当得使用 n n符,多余。符,多余。 scanf()scanf()格式串格式串除除“% %”带头的格式符外,其余字符都要求原样输
46、入,带头的格式符外,其余字符都要求原样输入,因为其操作的对象为键盘。因为其操作的对象为键盘。 输入输入scanf()scanf()函数的格式符必须与输入参数函数的格式符必须与输入参数项的类型一一对应,否则将引起计算结果的错项的类型一一对应,否则将引起计算结果的错误。误。 可参照下表可参照下表: : shotchar字符字符数组数组doublefloatLong intint参参数数类类型型%h%c%s%lf %le%f %e%ld%d %o %x格格式式符符shotchar字符字符数组数组doublefloatLong intint参参数数类类型型%h%c%s%lf %le%f %e%ld%d
47、 %o %x格格式式符符1.5 C程序的组成方式:程序的组成方式:C程序组成方式一一个一个C C程序由一个源文件组成,运行前只需一次程序由一个源文件组成,运行前只需一次编译,即可生成可执行程序。编译,即可生成可执行程序。C程序程序函数函数1函数函数n标头文件标头文件C程序程序file.cfile.c一个一个C C程序由若干源文件组成,运行前必须分别编译,程序由若干源文件组成,运行前必须分别编译,并经链接组装后方可运行。并经链接组装后方可运行。main()main()函数只能一个。函数只能一个。C程序源程序文件2源程序文件n源程序文件1函数2函数n函数1file1.cfile1.cfile2.c
48、file2.cfilen.cfilen.cC程序组成方式二1.6 程序的现代方式与传统方式程序的现代方式与传统方式#include /现代方式编程示例现代方式编程示例#define EPS 1e-7void main()double udf_sin(double x);/现代方式的函数原型说明现代方式的函数原型说明double a; scanf(%lf,&a); printf(%f %fn,udf_sin(a), sin(a);double udf_sin(double x) /现代方式的函数定义与形参说明形式现代方式的函数定义与形参说明形式double sum, term, n=1; sum
49、=term=x;while(fabs(term)EPS)n=n+1; term=term*(-x*x)/(2*n-2)*(2*n-1); sum=sum+term;return(sum); #include /传统方式传统方式编程示例编程示例#define EPS 1e-7void main() double a, udf_sin();/传统方式的函数原型说明传统方式的函数原型说明scanf(%lf,&a); printf(%f %fn,udf_sin(a), sin(a); double udf_sin( x )/传统方式的函数定义与形参说明形式传统方式的函数定义与形参说明形式double
50、x; double sum, term, n=1; sum=term=x;while(fabs(term)EPS) n=n+1; term=term*(-x*x)/(2*n-2)*(2*n-1); sum=sum+term; return(sum);# #include include #include #include #define EPS 1e#define EPS 1e- -7 7void main()void main()double udf_sin(double x);double udf_sin(double x);/用户自定义函数原型说明用户自定义函数原型说明double a;