结构化程序设计

上传人:工**** 文档编号:591286987 上传时间:2024-09-17 格式:PPT 页数:77 大小:177KB
返回 下载 相关 举报
结构化程序设计_第1页
第1页 / 共77页
结构化程序设计_第2页
第2页 / 共77页
结构化程序设计_第3页
第3页 / 共77页
结构化程序设计_第4页
第4页 / 共77页
结构化程序设计_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《结构化程序设计》由会员分享,可在线阅读,更多相关《结构化程序设计(77页珍藏版)》请在金锄头文库上搜索。

1、第第5讲讲结构化程序设计(结构化程序设计(Part II)周水庚2005年10月12日1提要提要nC程序简介n函数基础知识n文件的简单用法n简单程序设计实例2提要提要nC程序简介程序简介n函数基础知识n文件的简单用法n简单程序设计实例3C程序简介程序简介n一个C程序可由若干个源程序文件组成n一个源文件可以由若干个函数和预处理命令以及全局变量声明部分组成n 一个函数由数据定义部分和执行语句组成n一个源程序文件也是可独立编译的单位,所以C程序可以按源程序文件分别编写、分别编译45C语句语句nC语句是C程序的基本组成单元nC语句可以分为以下5类n控制语句n函数调用语句n表达式语句n空语句n复合语句6

2、C语句(续)语句(续)n控制语句有9种nif() else (条件语句)nfor() (循环语句)nwhile() (循环语句)ndo while() (循环语句) ncontinue (结束本次循环语句nbreak (中止执行switch或循环语句)nswitch (多分支选择语句)ngoto (转向语句)nreturn (从函数返回语句)7C语句(续)语句(续)n函数调用语句n由一次函数调用加一个分号构成一个语句n表达式语句n由一个表达式加一个分号构成一个语句,如赋值语句n空语句n只有一个分号的语句,它什么也不做n复合语句n用 把一些语句括起来构成,又称分程序8C程序的三种基本结构程序的三

3、种基本结构n顺序结构n条件控制结构n循环结构9提要提要nC程序简介n函数基础知识函数基础知识n正文文件的简单用法n简单程序设计实例10函数基础知识函数基础知识n结构化程序设计中,将复杂的功能分解成若干简结构化程序设计中,将复杂的功能分解成若干简单的子功能,并用函数实现子功能,用调用函数单的子功能,并用函数实现子功能,用调用函数实现子功能要求实现子功能要求n函数是一个实现指定功能、逻辑上独立的代码段函数是一个实现指定功能、逻辑上独立的代码段n对函数使用者来说,把它看作对函数使用者来说,把它看作“黑盒黑盒”,只需知,只需知道要传送给函数的数据(输入),和函数执行后道要传送给函数的数据(输入),和函

4、数执行后能得到什么结果(输出)能得到什么结果(输出)n函数还可以定义局部对象,使函数在逻辑上作为函数还可以定义局部对象,使函数在逻辑上作为程序的一个相对独立单位,不受主函数或其他函程序的一个相对独立单位,不受主函数或其他函数对程序对象命名的影响数对程序对象命名的影响11函数基础知识(续)函数基础知识(续)n函数可带函数可带形参形参,使函数执行时,操作对象、求值方式,使函数执行时,操作对象、求值方式等可随不同调用的需要而改变。所以函数也可被抽象等可随不同调用的需要而改变。所以函数也可被抽象为一个计算模式或操作模式为一个计算模式或操作模式n函数为程序的层次构造和开发提供支持,使设计新程函数为程序的

5、层次构造和开发提供支持,使设计新程序能在已有函数基础上构造功能更强的函数和程序序能在已有函数基础上构造功能更强的函数和程序n一个一个C程序以程序以 main()函数作为程序的主函数。程序运函数作为程序的主函数。程序运行时,从它开始执行行时,从它开始执行n在在C语言中,函数不能嵌套定义,一个函数并不从属语言中,函数不能嵌套定义,一个函数并不从属于另一个函数于另一个函数n除不能调用除不能调用 main() 函数外,其它函数可以相互调用函数外,其它函数可以相互调用12函数库函数库n把一些公用的、基本的计算功能所对应的函数集中起来,构成一个库,我们称之为函数库函数库,相应的函数成为库函数库函数n函数库

6、中的函数具有预先定义的、标准的输入、输入接口输入、输入接口nC语言中定义了一些基本的标准函数n编程环境工具厂商(Microsoft、Borland等)往往提供更多的函数供编程者使用13函数库(续)函数库(续)nC语言使用头文(header file,即*.h文件文件)对函数库中的函数进行定义和说明n函数库中的函数经编译后,绑定在一起件,构成一个库文件(library file ,即*.lib文件文件)nC程序调用C语言或者编程环境提供的函数时,要在程序中include相应的头文件;在产生执行文件时,需要与库文件中相应的目标函数代码连接n为了使用方便,C语言按功能分类,提供了大量函数库,每个函数

7、库都有自己的头文件14库函数的使用库函数的使用n使用相应库函数的程序都要在使用之前写上包含其头文件的预处理命令n常用的头文件nstdio.h (输入输出库函数)(输入输出库函数)nmath.h、stdlib.h、float.h (数学库函数)(数学库函数)ntime.h (时间库函数)(时间库函数)nctype.h (字符分类和转换库函数)(字符分类和转换库函数)nstring.h (内存缓冲区和字符串处理库函数)(内存缓冲区和字符串处理库函数)ngraphics.h (图形处理库函数)(图形处理库函数)nmalloc.h、stdlib.h (内存动态分配库函数)(内存动态分配库函数)nsig

8、nal.h、process.h (进程控制库函数)(进程控制库函数)15实例实例n实例1:时间函数使用n实例2:随机函数使用(1)n实例3:随机函数使用(2)16#include #include void main() struct tm *tmNow; /* 定义一个时间结构指针变量定义一个时间结构指针变量 */ long secsNow; /* 定义以秒为单位的记录时间的变量定义以秒为单位的记录时间的变量 */ char *strNow; /* 时间字符串表示的首字符指针时间字符串表示的首字符指针 */ time(&secsNow); /* 调用函数调用函数time(),得到当前时间得到

9、当前时间 */ strNow = ctime(&secsNow); /* 获得时间的字符串表示获得时间的字符串表示 */ printf(自自1970年年1月月1日至现在的时间日至现在的时间(以秒为单位以秒为单位):%ldn, secsNow); printf(当前时间的另一种表示:当前时间的另一种表示:%sn, strNow); tmNow = localtime(&secsNow); /* 获得结构形式的时间获得结构形式的时间 */ printf(存于存于tmNow所指结构中的时间有年中的日、年、月、日、时、分、秒所指结构中的时间有年中的日、年、月、日、时、分、秒:n); printf(%d

10、 %d-%02d-%02d %02d:%02d:%02dn, tmNow-tm_yday,tmNow-tm_year+1900, tmNow-tm_mon,tmNow-tm_mday, tmNow-tm_hour,tmNow-tm_min,tmNow-tm_sec); strNow = asctime(tmNow); /* 得到字符串表示的时间得到字符串表示的时间 */ printf(当前时间的另一种表示:当前时间的另一种表示:%sn, strNow);17#include #include #include void main() int k; long now; srand(time(&n

11、ow) % 60); /* 用时间初始化随机用时间初始化随机 数发生函数的初态,使初态总不相同数发生函数的初态,使初态总不相同 */ for(k = 0; k 10; k+) /* 产生产生10个随机数输出个随机数输出 */ printf(”%dn”, rand(); /* 调用随机函数调用随机函数 */18#include #include #include void main() int i; srand(time(NULL); for(i=1; i=10000; i+) printf(”%10d”, 1+rand()%6); if(i%5=0) printf(“n”); 19函数定义函数

12、定义n函数定义的一般形式为函数定义的一般形式为 类型区分符类型区分符 函数名函数名(形式参数说明表形式参数说明表) 说明和定义部分说明和定义部分 语句序列语句序列 20函数定义(续)函数定义(续)n类型区分符用于标识函数执行结果返回值的类型n当函数执行不返回值时,习惯用void来标记n当函数返回int型值时,类型区分符int可以省略n函数名是一个标识符,一个C程序有且只有一个main()函数,其它的函数名可以随意命名21函数定义(续)函数定义(续)n函数名之后括号内的形式参数说明表是按需要而定n没有形参的函数,也就没有形参说明表,常用void代之,但函数名之后的一对圆括号不可省略n当函数有多个

13、形参时,形参说明之间用逗号分隔,每个形参说明指定形参的类型和形参名22函数定义(续)函数定义(续)n最外层花括号最外层花括号“”和和“”括住的部括住的部分是函数体分是函数体n在函数体的前面可有函数需要的程序对象的说在函数体的前面可有函数需要的程序对象的说明和定义明和定义n函数体内定义的变量是局部变量,只能在函数函数体内定义的变量是局部变量,只能在函数体内引用它们体内引用它们n说明和定义之后是由语句序列组成的执行代码说明和定义之后是由语句序列组成的执行代码23例子例子1n求两个数中最小值的函数求两个数中最小值的函数min()double min(double x, double y) /* 返回

14、返回 double 型值,有两个形参型值,有两个形参 x,y,都为,都为 double 型的型的 */ /* 函数返回函数返回x和和y中的小者的值中的小者的值 */ return x b;ngcd(a, b) = gcd(a, b-a), 如如a b) a -= b; else b -= a; return a; 第第2解法解法26n步骤:n求余数求余数 求求a除除b的余数的余数rn判结束判结束 如如r等于等于0,b为最大公约数为最大公约数n替换替换 用用b置置a,r置置b,并回到步骤,并回到步骤求余数求余数 第第2解法解法27 int gcd(int a, int b) int r; whi

15、le(1) if(r = a % b) = 0) break; a = b; b = r; return b; 28 int gcd(int a, int b) int r = a; do a = b; b = r; r = a % b; while (r); return b; 29函数定义(续)函数定义(续)nC语言也允许在函数名后的圆括号内只给出各形参语言也允许在函数名后的圆括号内只给出各形参的名,随后才指定各形参的类型,但这种写法在的名,随后才指定各形参的类型,但这种写法在C+中已不允许中已不允许ndouble min(x, y)ndouble x, y;nn return x y ?

16、 x : y;nnC语言还允许函数体为空的函数语言还允许函数体为空的函数ndummy() /* 或或 dummy(void) */nn30函数调用函数调用n函数被定义以后,凡要实现函数功能的地方,函数被定义以后,凡要实现函数功能的地方,就可简单地通过函数调用来完成就可简单地通过函数调用来完成n函数调用的一般形式为函数调用的一般形式为n函数名(实在参数表)函数名(实在参数表)n实在参数,简称实参。函数调用时的实参按实在参数,简称实参。函数调用时的实参按它们出现的顺序与函数定义中的形参一一对它们出现的顺序与函数定义中的形参一一对应,并要求实参类型与其对应的形参类型相应,并要求实参类型与其对应的形参

17、类型相一致一致31函数调用(续)函数调用(续)n函数调用有两种方式n传值调用(call by value)n把实参的值传给被调用函数的参数(形参)。这时,被调用函数对参数的改变,不影响调用函数实参的原始值n传引用调用(call by reference)n把实参的地址传给被调用函数的参数(形参)地址。这时,被调用函数对参数的改变,将影响到调用函数实参的原始值32函数调用(续)函数调用(续)n对double min(double x, double y)的函数调用 w = min(u, v);n函数调用min(u, v)就是对函数min()的调用,它提供了两个实参u和v,分别对应形参x和yn如果

18、调用无形参的函数,这时函数的调用形式变为n函数名()n其中函数名之后的一对圆括号是不能省略的 33函数调用(续)函数调用(续)n按函数调用在程序中的作用,有两种不同类型的应用n函数调用只是利用函数所完成的功能函数调用只是利用函数所完成的功能。此时,将函数调用作为一个独立的语句。这种应用不要求或无视函数的返回值n如程序中经常使用的调用格式输入函数scanf()和格式输出函数printf()等。n函数调用是利用函数的返回值函数调用是利用函数的返回值。或用这返回值继续进行表达式的计算,或输出函数返回值等34函数调用的执行过程函数调用的执行过程1.为形参分配内存空间为形参分配内存空间2.计算实参表达式

19、的值,并将值赋给对应的形参计算实参表达式的值,并将值赋给对应的形参3.为函数的局部变量分配内存空间为函数的局部变量分配内存空间4.执行函数体内的语句序列执行函数体内的语句序列5.函数体执行完,或执行了函数体执行完,或执行了return语句后,释放为语句后,释放为这次函数调用分配的全部内存空间这次函数调用分配的全部内存空间6.将函数值(如果有)返回到函数调用处继续执行将函数值(如果有)返回到函数调用处继续执行35#include double x, y, d, min(double, double); void main() printf(“Enter x,y.n”); scanf(“%lf%l

20、f”,&x,&y); d = min(x, y); printf(“MIN(%.3f, %.3f) = %.3fn”, x, y, d);double min(double a, double b) double temp; temp = a b ? b : a; return temp;36对函数调用的说明对函数调用的说明n当函数执行当函数执行return语句或执行完函数体的语句序语句或执行完函数体的语句序列后,函数的这次调用就执行结束,随之将控制列后,函数的这次调用就执行结束,随之将控制返回到函数调用处继续执行返回到函数调用处继续执行n函数的返回值是通过执行函数的返回值是通过执行retur

21、n 语句时,计算语句时,计算return之后的表达式值而获得的。如果函数不提之后的表达式值而获得的。如果函数不提供返回值,则供返回值,则return语句不应包含表达式。语句不应包含表达式。n如果函数有返回值,则应有确定的类型,并在函如果函数有返回值,则应有确定的类型,并在函数定义时指明。若函数定义时不指明返回值类型,数定义时指明。若函数定义时不指明返回值类型,且函数有返回值,且函数有返回值,C语言约定该函数的返回值类语言约定该函数的返回值类型为型为int型型37对函数调用的说明(续)对函数调用的说明(续)n为了明确指明函数不提供返回值,建议在函数定义时,为了明确指明函数不提供返回值,建议在函数

22、定义时,在函数名之前写上在函数名之前写上void。并在这样的函数体内,所有的。并在这样的函数体内,所有的return语句都不应该带表达式语句都不应该带表达式n当函数执行不带表达式的当函数执行不带表达式的return语句返回时,函数并不语句返回时,函数并不是一定不带回值,而是返回一个不确定的值。这样的函是一定不带回值,而是返回一个不确定的值。这样的函数调用不应该利用函数返回值进行再计算,否则会产生数调用不应该利用函数返回值进行再计算,否则会产生错误结果错误结果n函数定义中的函数定义中的return语句的表达式类型应与函数定义中语句的表达式类型应与函数定义中指明的返回值类型相一致。如果指明的返回值

23、类型相一致。如果return语句中的表达式语句中的表达式类型与函数定义指明的返回值类型不一致时,对于是基类型与函数定义指明的返回值类型不一致时,对于是基本类型情况,则以函数的返回值类型为准,系统会自动本类型情况,则以函数的返回值类型为准,系统会自动进行类型转换进行类型转换38实参向形参单向传递数据实参向形参单向传递数据n在函数未被调用时,函数定义中的形参和函数体在函数未被调用时,函数定义中的形参和函数体中定义的局部变量并不占用存储单元中定义的局部变量并不占用存储单元n在函数定义中,必须为函数的形参指定数据类型在函数定义中,必须为函数的形参指定数据类型n函数体中所使用的形参的初值是由函数调用时对

24、函数体中所使用的形参的初值是由函数调用时对应的实参表达式给定的应的实参表达式给定的nC语言规定,实参表达式对形参的数据传递是语言规定,实参表达式对形参的数据传递是“值传递值传递”的,即单向传递的,即单向传递n对于有多个实参的函数调用情况,对于有多个实参的函数调用情况,C语言不规定语言不规定实参的求值次序实参的求值次序39提要提要nC程序简介n函数基础知识n文件的简单用法文件的简单用法n简单程序设计实例40文件的简单用法文件的简单用法n介绍这部分内容的目的介绍这部分内容的目的n学习编写从文件输入数据和把结果输出到文学习编写从文件输入数据和把结果输出到文件的程序件的程序n了解使用文件程序的结构了解

25、使用文件程序的结构n掌握文件的一般使用方法掌握文件的一般使用方法n熟悉一些和文件操作有关的库函数的用法熟悉一些和文件操作有关的库函数的用法涉及一些较深的概念先暂且接受!涉及一些较深的概念先暂且接受!41定义文件变量定义文件变量n在程序的开始处定义文件指针变量,和在程序的开始处定义文件指针变量,和存储文件名的字符数组存储文件名的字符数组 #include FILE *fp; /* 定义文件指针变量定义文件指针变量fp */ char fname40; /* 存储文件目录路径和文件存储文件目录路径和文件名的字符数组,最多可有名的字符数组,最多可有39个字符个字符 */42输入文件名输入文件名pri

26、ntf(”输入文件名输入文件名(包括目录路径、扩展名包括目录路径、扩展名)n”);scanf(”%s%*c”,fname);/* 输入文件名及回车符输入文件名及回车符 */43打开文件打开文件n程序从正文文件输入数据程序从正文文件输入数据n程序向正文文件输出结果程序向正文文件输出结果n若被打开文件不存在,则建立一个新文件;若被打开文件已若被打开文件不存在,则建立一个新文件;若被打开文件已存在,则该文件中的数据被删除存在,则该文件中的数据被删除if (fp = fopen(fname, ”r”) = NULL) printf(”%s文件不能打开文件不能打开n”, fname); return;f

27、p=fopen(fname,”w”); /* 为写打开文件为写打开文件*/读打开时,要求被读打开时,要求被打开文件已存在打开文件已存在44关闭文件关闭文件n文件使用结束后,要及时关闭文件使用结束后,要及时关闭fclose(fp); /* 以后以后fp又可用于打开文件又可用于打开文件 */45文件输入输出文件输入输出n调用函数调用函数fgetc()从文件输出下一个字符()从文件输出下一个字符nch=fgetc(fp); /* 将输入字符存于变量将输入字符存于变量ch */n调用函数调用函数fscanf()从文件按指定格式输出数据从文件按指定格式输出数据nfscanf(fp,”%d%d”,&k,&

28、j); /* 从文件输出整数从文件输出整数 */n调用函数调用函数fputc()向文件输入一个字符()向文件输入一个字符nfputc(ch, fp); /* 将变量将变量ch中的字符输出到文件中的字符输出到文件*/n调用函数调用函数fprintf()向文件按指定格式输入数据向文件按指定格式输入数据nfprintf(fp,”%d %dn”, k, j); /* 向文件输入整数向文件输入整数 */46从文件逐一输出字符从文件逐一输出字符int c; /* 不能为不能为char类型类型 */ FILE *fp; /* 说明有关变量和设置初值等说明有关变量和设置初值等 */ if (fp = fope

29、n(文件名文件名, ”r”) = NULL) printf(”不能打开文件不能打开文件 %s。n”, 文件名文件名); return; while(c = fgetc(fp) != EOF) /* 对刚读入的字符信息对刚读入的字符信息 c 作某种处理作某种处理 */ fclose(fp); /* 输出处理结果输出处理结果 */47字符逐一输入形成新文件字符逐一输入形成新文件 int c; /* 也可以是也可以是char类型类型 */ FILE *fp; /* 说明有关变量和设置初值等说明有关变量和设置初值等 */ fp = fopen(文件名文件名,”w”); while(还有字符还有字符)

30、/* 生成字符生成字符(或字节或字节)存于变量存于变量c */ fputc(c, fp); /* 将生成的字符输出将生成的字符输出 */ fclose(fp); /* 输出程序结束报告输出程序结束报告 */48例子例子n将键盘输入的字符流复制到指定的文件将键盘输入的字符流复制到指定的文件n逐行复制从键盘输入字符到指定文件,直至逐行复制从键盘输入字符到指定文件,直至输入空行结束输入空行结束49#include FILE *fp;void main() int ch; char fname40; printf(”输入文件名输入文件名!n”); scanf(”%s%*c”, fname); fp=f

31、open(fname,w); /* 以写方式打开正文文件以写方式打开正文文件 */ while(ch=getchar()!=n) /* 逐行处理,至空行结束逐行处理,至空行结束 */ do fputc(ch, fp); /* 行内字符逐一复制行内字符逐一复制 */ while (ch = getchar() != n); /* 处理当前行处理当前行 */ fputc(ch, fp); /* 输出换行符输出换行符 */ fclose(fp); printf(”程序复制键盘输入字符结束。程序复制键盘输入字符结束。n”);50提要提要nC程序简介n函数基础知识n正文文件的简单用法n简单程序设计实例简

32、单程序设计实例51【例例3.19】输输入入整整数数n,输输出出由由2*n+1行行2*n+1列列,以以下形式下形式(n = 2)的图案。的图案。 * * * * * * * * * * * * *图案分成两部分,上面由图案分成两部分,上面由n+1行,下面有行,下面有n行。图案中,同一行行。图案中,同一行上的两个星号字符之间有一个空格符对于上半部分。设第一上的两个星号字符之间有一个空格符对于上半部分。设第一行的星号字符位于屏幕的中间,则后行图案的起始位置比前行的星号字符位于屏幕的中间,则后行图案的起始位置比前行起始位置提前两个位置;而对于下半部,第一行的起始位行起始位置提前两个位置;而对于下半部,

33、第一行的起始位置比上半部最后一行起始位置前进两个字符位置,以后各行置比上半部最后一行起始位置前进两个字符位置,以后各行也相继进两个位置。也相继进两个位置。52#include void main() int n, j, k; printf(Enter n!n); scanf(%d, &n); for(j = 0;j = n; j+) printf(%*c, 40 - 2*j, ); for(k = 1; k = 0; j-) printf(%*c, 40 - 2*j, ); for(k = 1; k = 2*j+1; k+) printf( *); printf(n); 53【例【例3.21】

34、试编制一个程序输出以下形式的乘法表。】试编制一个程序输出以下形式的乘法表。 1 2 3 4 5 6 7 8 9 1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 64 9 9 18 27 36 45 54 63 72 8154#include void main() int i, j; printf(nt 1 2 3 4 5 6 7 8 9n); for(i=1; i = 9; i+) printf(t%d, i); for(j

35、 = 1; j2) 个个整整数数, 输出其中的次最大数。输出其中的次最大数。为为求求次次最最大大,程程序序在在循循环环过过程程中中需需保保留留两两个个数数,当当前前暂时最大数暂时最大数max1和当前暂时次最大数和当前暂时次最大数max2。程程序序将将输输入入的的第第一一个个数数暂暂时时保保留留,待待输输入入第第二二个个数数后后,确定确定max1和和max2。从从第第三三个个输输入入数数x开开始始,根根据据x调调整整max1和和max2。调调整过程需考虑以下几种可能:整过程需考虑以下几种可能:xmax1, 则则 以以 max1作作 为为 新新 的的 max2, x作作 为为 新新 的的max1;

36、max1xmax2,则以,则以x作为新的作为新的max2;xmax2,则不调整。,则不调整。56#include void main() int n, i, max1, max2, x, temp; printf(输入输入 n(=2)!n); scanf(%d, &n); if (n 2) return; printf(输入第输入第 %d 个整数个整数. , 1); scanf(%d, &temp); printf(输入第输入第 %d 个整数个整数. , 2); scanf(%d, &x); if (temp x) max1 = x; max2 = temp; 57 else max1 = t

37、emp; max2 = x; for(i = 3; i max1) max2 = max1; max1 = x; else if (x max2) max2 = x; printf(次最大是次最大是 %dnn, max2);58【例【例3.24】编制对给定的整数,判该整数是否】编制对给定的整数,判该整数是否是质数的函数,若是质数,函数返回是质数的函数,若是质数,函数返回1,否则函,否则函数返回数返回0。 判判一一个个整整数数n是是否否是是一一个个质质数数有有许许多多方方法法:如如n=2,则,则n是质数;是质数;若若n是其它偶数,则是其它偶数,则n不是质数;不是质数;让让整整数数变变量量k自自3

38、开开始始,每每次次增增2,直直至至k 的的平平方方超超过过n为为止止,若若其其中中某某个个k能能整整除除n,则则n不不是是质质数。若所有这样的数。若所有这样的k都不能整除都不能整除n,则,则n是质数。是质数。59int isPrime(long n) long k; if (n = 2L) return 1; if (n % 2 = 0) return 0; for(k = 3L; k*k n) return 1; return 0; 60【例例3.25】编编制制输输入入整整数数,输输出出小小于于等等于于该该整整数数的的全全部部质质数数的的程程序序。程程序序首首先先输输出出质质数数2,之之后后

39、对对指指定定范范围围内的奇数采用例的方法判其是否是质数。内的奇数采用例的方法判其是否是质数。#include void main() long m, n; int j; /* j控制每行输出控制每行输出10个质数个质数 */ printf(”输入整数输入整数n”); scanf(”%ld”, &m); printf(”%6d”, 2); j = 1; for(n = 3L; n = Epsilon) s += t; /* 累计当前项累计当前项tk到部分和到部分和 */ t = f(t,k);/* 由当前项由当前项t和和k计算下一个当前项的值计算下一个当前项的值 */ k+; /* 项序号增项序

40、号增1 */ 63对于本题,首项值为对于本题,首项值为x,级数第,级数第k(=0)项项tk的算式为的算式为 (-1)k*x(2*k+1)/(2*k+1)*k!)k+1项项tk+1与与k项项tk有关系有关系 tk+1 = -tk*x*x*(2*k+1)/(2*k+3)*(k+1)tk是通项是通项t的当前项值,的当前项值,tk+1是通项是通项t的下一个当前项值。的下一个当前项值。由当前项由当前项t和和k计算计算t的下一个当前项值,可用以下表达的下一个当前项值,可用以下表达式实现:式实现: t = -t*x*x*(2.0*k+1.0)/(2.0*k+3)*(k+1)把以上式子代入上述算法,并令把以上

41、式子代入上述算法,并令x的值由输入给定,写的值由输入给定,写出程序如下:出程序如下:64#include #include #define Epsilon 0.000001 void main() int k; double s, x, t; printf(“Enter x.n”); scanf(“%lf”, &x); s = 0.0; /* 级数的部分和变量级数的部分和变量s置初值置初值0 */ t = x; /* 置通项变量置通项变量t为级数的首项值为级数的首项值 */ k = 0; /* 置项序号变量置项序号变量k为为0 */ while (fabs(t) = Epsilon) s +=

42、 t; t = -t*x*x*(2.0*k+1)/(2.0*k+3)*(k+1); k+; /* 项序号增项序号增1 */ printf(“s(%f) = %fn”, x, s);65【例例3.27】编编制制从从键键盘盘输输入入整整数数序序列列,并并按按输输入顺序输出到指定的文件中的程序。入顺序输出到指定的文件中的程序。 程程序序循循环环地地从从键键盘盘输输入入整整数数,将将整整数数输输出出到到指指定定的的文文件件中中。当当程程序序发发现现不不能能从从键键盘盘输输入入整整数时结束循环。数时结束循环。66#include FILE *fp;int main() int x, k; char fn

43、ame40; printf(”输入文件名输入文件名!n”);scanf(”%s%*c”, fname); if (fp=fopen(fname, w) = NULL) printf(不能打开文件不能打开文件 %s。n, fname); return 0; k = 1; while(scanf(”%d”, &x) = 1) fprintf(fp, ”%dt”, x); if (k+ % 5 = 0) fprintf(fp, ”n”); fclose(fp); printf(”n输出了输出了 %d个整数个整数.n”, k-1); return 1;67【例【例3.28】编制从指定的文件中输出整数,

44、并】编制从指定的文件中输出整数,并按输出顺序输出到显示屏上。按输出顺序输出到显示屏上。 程序从文件循环地输入整数,将整数输出到程序从文件循环地输入整数,将整数输出到显示屏。当程序发现不能从文件输入整数时结显示屏。当程序发现不能从文件输入整数时结束循环。束循环。68#include FILE *fp;int main() int x, k; char fname40; printf(”输入文件名输入文件名!n”); scanf(”%s%*c”, fname); if (fp=fopen(fname, r) = NULL) printf(不能打开文件不能打开文件 %s。n, fname); ret

45、urn 0; k = 1; while(fscanf(fp, ”%d”, &x) = 1) printf(”%dt”, x); if (k+ % 5 = 0) printf(”n”); fclose(fp); printf(”n从文件从文件 %s输入了输入了 %d个整数个整数.n”, fname, k-1); return 1;69n求Sn=a+aa+aaa+aaa(n个a之值),其中a是一个数字。#includemain() float sn, a, t; int i,n; printf(“Input n and a:”); scanf(“%d %f”, &n, &a); t=a;sn=0;

46、i=1; do sn+=t; i+;t=t*10+a; while(in); printf(“Sn=%fn”, sn);70n有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13, 求出这个数列的前n项之和n分析:n假设这个序列的第k项为tk=ak/bk,有tk+1=(ak+bk)/ak=1+1/tkna1=2; b1=171#includemain() int i=1,n, ia=2, ib=1; float t, s printf(“Input n:”); scanf(“%d”, &n); while(i=n) s+=t; t=1.0+1.0/t;i+ printf(“The

47、 sum is: %f”, s);72用迭代法求 。求平方根的迭代公式为要求前后两次求出的x的差的绝对值小于10-5。#includeMain()float a, x1,x2; printf(“Input as value:”); scanf(“%f”, &a); x1=a; do x2=0.5*(x1+a/x1); while(fabs(x2-x1)=1e-5); printf(“ =%f”, x2) ; 73n打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33#includemain()int i,

48、 first, second, third;for(i=100; i=999; i+) first=i/100; second=(i/10)%10; third=(i%100)%10; if (i=first*first*first+second*second*second+third*third*third) printf(“%dn”, i);74n一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3, 因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6s factors are 1,2,375#includemain()int i, j, sum; for(i=1;i=1000;i+) sum=0; for(j=1;ji;j+) if(i%j=0)sum+=j; if(i=1) printf(“1s factor is 1”) else if(sum=i) printf(“%ds factors are:”, I); for(j=1;ji;j+) if(i%j=0)printf(“%d,”, j); printf(“n”); 76第3章结束77

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号