c语言实验五函数(精选7篇)
1.c语言实验五函数 篇一
C语言程序设计实验七:函数、数组、指针
1、程序运行后,用户任意输入一个字符串,求出字符串长度,然后输出字符串内容及个 数。不能使用strlen函数。
求字符串长度函数的函数原型必须如下:
int MyStrLenPt(char *str)
若输入:nihao123!
则输出:nihao123!:9 chars2、编写一个对一维数组进行排序的程序。
要求:
写两个函数,一个主函数,一个sort函数。在主函数中完成数组的输入和输出,通过调 用sort函数对数组进行排序。
sort函数的原型为:voidsort(int*p, intn);
说明:
(1)请大家按学号来坐,便于考勤和管理。
(2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。
(3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。
(4)文档名称:班级+学号后2位+姓名+实验编号,例如11电1班12张山实验七.doc。
2.c语言实验五函数 篇二
1 教学方法
函数的教学与流程控制不一样,流程控制中if、while、for知识点是由浅入深,一步一步来的。而函数的特点是,一个程序里会涉及到函数的很多知识点,所以只要把一个程序搞清楚了,那其他程序也就全懂了。针对函数的这个特点,我们的授课思路是首先用通俗易懂的例子来引入问题,使学生理解为什么需要函数;教师实际演示编写程序,调试执行程序让学生理解C函数的执行过程;通过对程序有意设置语法错误和空白内容的方法,使学生了解如何定义函数、调用函数,帮助学生掌握函数语法知识;设计案例,由浅入深,将知识全面化,系统化;布置作业,帮助学生加深对知识点的理解,激发学生的创新思维。
1)用通俗易理解的例子来引入问题
讲授任何一个知识,首先讲为什么需要这个知识[2],只有这样学生才会自然接受,这一点很重要。引例的选取最好难易适中,能充分调动学生的积极性。
函数教学案例一:“分别求a,b的最大值,c,d的最大值,e,f的最大值。”
此案例比较简单,用顺序结构和选择结构就可以求解,学生对此很熟悉,不会感觉枯燥,会更积极地参与到教学中来。
由教师实际编程演示此程序,调试并运行结果,而不是直接将写好的程序呈现给学生看。教师实际编程演示可以提高学生的兴致,使学生注意力更集中,并且在这个过程中,可以反映教师编程时的思维过程,体现良好的编程习惯。
程序:
教师提醒学生,在这个程序中,有三段代码的操作是重复性的。那么如果这个程序有一万个地方要输出两个数的最大值,那就意味着这段代码要重复一万次。这样写肯定不合适。至此引入函数加深学生对函数的感性认识。引导学生思考为什么需要函数,原因是函数可以避免重复性操作。
2)“一题多解、一题多变”的教学方法
首先,由教师实际编程演示,给出用带参数无返回值的函数实现案例一。
程序:
教师点击组建——开始调试——GO命令(或按F5键)进入调试模式,利用单步执行命令(快捷键F11)控制程序每次执行一条语句,观察编辑窗口箭头的走向,以及变量窗口各变量值的变化。程序从main函数进入,当执行到max(a,b)时,程序开始进入并执行max函数。在变量输出窗口可以看到参数i和j分别获得了a,b的值。运行到printf函数时,如果不需要调试执行库函数,则按下F10,连续执行被调用函数的全部语句。继续按F11键,执行完被调用的max函数后,返回到主函数max(a,b)处,往下执行max(c,d),程序第二次进入并执行max函数,执行完max函数返回到主函数max(c,d)处,往下执行max(e,f),程序第三次进入并执行max函数,执行完毕返回到主函数max(e,f)处,执行return 0,整个程序结束。
通过调试执行,学生可清楚了解到函数调用与返回的实现过程。程序从主函数main进入,当遇到函数调用时,暂停执行主调函数,然后转去执行被调函数。首先为被调函数分配调用过程中所需的数据区,包括调用后的返回地址,函数的形参以及各种局部变量,然后把实参的值复制到形参中去,接着把控制权转移给被调函数,完成调用后,如果函数有返回值,先保存计算结果,然后释放被调函数的数据区,返回主调函数暂停的位置(调用前保存了返回地址)继续执行。
接下来,教师引导学生用带参数有返回值的函数实现案例一。
程序:
仍然采用调试执行本程序,加深学生对函数调用过程的理解。将函数调用过程讲深讲透非常重要,这是科学性的要求。理解了函数的调用过程,就会理解什么是递归,什么是变量的作用域与变量的生命期。
3)设置错误寻求正确答案的教学方法和填空式的教学方法
传统的教学方法中,一般集中式的讲述语法知识,非常枯燥,学生学了也不会编程不会应用。在课堂教学中,可以有意设置语法错误,根据编译所提示的错误,引导学生思考并修正错误;或者是有意识地将一些内容空出,要求学生先读懂再填空,然后运行程序,调试程序,直到得到正确的运行结果。这样可激发学生的探索欲望,加深对语法的理解,也提高了学生的学习能力。
在程序的编写中,首先有意的将max2(a,b),max2(c,d),max2(e,f)这些函数调用的语句空出,让学生补充,或者将函授首部空出,并且有意设置一些语法错误,比如,在函数定义的首部加上分号,在形参中分隔符用分号,使形参和实参类型不一致,使调用函数的类型与main中的该函数的类型不一致,或者是函数的类型与return后的变量类型不一致,这样程序在编译过程中会给出语法错误提示,让学生自己去思考,修正这些语法错误,加深对函数的定义和调用的理解。
4)案例——任务驱动的教学方法
至此,学生已经掌握了函数的大部分知识点,但是在以往的教学中,通常面临一个问题,当学生自己写程序的时候,他们通常将语句一并写在main里,而不选择用函数实现。究其原因,还是学生对如何定义函数,以及如何在主调函数中调用自定义函数不够熟练,没有体会到函数的运用给编程带来的极大的便利。针对这个问题,我设计了两个案例要求学生完成。案例的选择要难度要由浅入深,循序渐进,每个案例欲教授的内容要目的明确,重点突出。
函数教学案例二:输入一个正整数n,生成一张2的乘方表,输出20到2n的值[3]。
程序:
教师要求学生自己定义pow函数,而不使用math.h中提供的数学库函数。
待学生思考几分钟后,教师可引导学生:定义pow函数应该首先确定函数的返回值类型,从power=pow(2,i)这条语句可以分析出,pow函数类型应该是double类型,因为它要返回一个doubler类型的值赋值给power变量;接着确定pow函数的形参,从主调函数中pow(2,i)的用法可以看出,是两个整形的实参,那么形参也应该是两个整型变量,同时强调函数的形参必须是变量。接着给出double pow(int i,int j)的实现。
通过这个库函数调用的案例,学生学会了如何自定义函数,加深了对函数库、库函数、连接程序、头文件的相关概念的理解,明白了函数是为解决大量同类型的问题而设计的,可提高代码的可重用性,将来无论哪一个程序需要这个功能都可以使用它,就好比我们printf、scanf、pow一样,也学会了在具体的应用中该如何自定义函数,如何确定函数的返回值类型和函数的形参列表。
函数教学案例三:计算组合数[4]。
要求学生自己写程序,
程序:
通过这个实例,学生会直观的体会到函数的运用给编程带来的极大的便利。这样,在今后的编程中,会尽可能地用模块化的思想来分析问题解决问题,这个实际上就是面向过程的一个思想,也是为什么需要函数的一个很重要的原因。
5)精讲多练的教学方法
C程序设计内容多,课时少,课堂上教师要做的不是拼命多讲,可以通过作业让学生去自学。也不是要拼命讲明白,因为程序只有学生自己想明白了才能为他所用。不能过于依赖教材,要引导学生将所学知识联系起来,现场演示设计程序的思维过程,讲清知识的深层原理。布置作业,作为课堂内容的补充和深化。学生通过查资料动手实验,根据完成作业的情况,教师可以发现问题所在,在上机实践课中重点讲解。
函数教学案例四:“编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1运算符op操作数2来计算表达式的值,指定的运算符为加(+)、减(-)、乘(*)、除(/)”,要求学生给出不适用函数的实现方法,带参数的函数实现方法,不带参数的函数实现方法。
通过本案例,使学生理解并掌握函数的几个重要概念、实现方法和编程技巧。
函数教学案例五:通过调用swap函数,交换主函数中变量a,b的值。
这个作业的要点是swap函数中的形参在调用完毕空间就释放了,所以,虽然两个形参变量的值交换了,但是a,b的值却没变。
大部分学生接着就想,能否返回两个值带回主函数,编程实践发现无法做到,因为被调函数只能返回一个值。
那怎么办呢?这时候老师可以告诉学生,在后续课程指针章节可以找到答案。这样给学生留下思考余地,启发学生去思考,有利于提高学生的学习能力,培养学生的创新思维[2]。
2 结束语
C语言函数的教学很重要,使学生理解函数并且学会应用函数是教学的关键。在后续讲解数组、指针、结构、文件时,都会与函数的知识综合起来,例如,将数组名作为函数的参数,指针作为函数的参数,结构指针作为函数的参数,文件操作函数等,学生能更好地掌握函数的定义和调用的方法,也会慢慢理解为什么说C语言是由函数所组成的。该文所探讨的C语言函数的教学方法已经应用在实际教学中,激发了学生学习的自觉性和主动性,提高了教学质量,取得了良好的教学效果,希望对同行有所帮助。
参考文献
[1]高枚,杨志强,许兰兰,龚沛曾.C/C++教学改革的探索与实践[J].计算机时代,2005(11).
[2]谭浩强《.C程序设计》发行1000万册的启示[J].北京联合大学学报:自然科学版,2011(4).
[3]何钦铭,颜晖.C语言程序设计[M].北京:高等教育出版社,2012.
3.c语言实验五函数 篇三
关键词: 汇编语言; 函数调用; 指针; 引用; 堆栈
中图分类号:N 文献标志码:A 文章编号:1006-8228(2012)09-49-02
Via assemble language to catch on mechanism of value transmit, pointer transmit
and reference transmit in C/C++ function calling
Huo Shandong, Yang Xudong
(1. Chongqing three gorges university, Chongqing 404000, China; 2. Chongqing safety technology profession college)
Abstract: Since the assemble language is an important machine language of facing computer hardware directly, it can help to better understand the principle of computer. The characteristic of assemble language is introduced and it is explained in the paper how to realize value transmit, pointer transmit and reference transmit in the computer.
4.C语言函数知识点总结 篇四
本章重点:
本章难点:
//函数相关内容:
*语法:包括定义,声明,调用,*语义
语句包括:表达式语句,空语句,控制语句,复合语句,函数调形参与实参的意义、作用与区别; 参数的两种传递方式; 对递归函数调用过程的理解; 全局变量和局部变量的作用。函数的定义和调用; 函数间的数据传递方式; 嵌套调用和递归调用; 变量的作用域和存储类别; 模块化程序设计方法。用语句
函数:*函数首部:包括返回值类型,函数名,形参
*函数体
*函数调用的过程:*开辟空间(形参,函数的局部变量)
1.函数其实就是一段可以重复调用的、功能相对独立完整的程序段。
2.主函数可以调用其他函数,其他函数也可以互相调用。
3.一个C程序必须有一个且只能有一个main函数,无论main函数位于程序 的什么位置,运行时都是从main函数开始执行的。
4.函数不能嵌套定义,也就是说一个函数不能从属于另一个函数。函数之
*把实参送给形参
*执行函数
*释放空间
间可以互相调用,但是任何函数不能调用main函数,main函数是被操作系
统调用的。
5.函数的分类:
(1)从用户角度看:库函数、用户自定义的函数(2)从形式:无参函数、有参函数
6.函数定义即函数的实现,是对所要完成功能的操作进行描述的过程,包
括函数命名和返回值类型声明、形式参数的类型说明、变量说明和一系
列操作语句等。
函数和变量一样,必须“先定义,后使用”
7.函数定义应包括以下内容:
函数的名字、返回值的类型。函数参数的类型和名字,无参函数不需要
指定。指定函数的功能
8.在函数体中,声明部分是对函数内部所用到的变量的类型说明,并对要
调用的函数进行声明。
9。定义有参函数的一般形式为: 类型标识符 函数名(形式参数表列){
声明部分;
} 语句;
10.在C语言中,可以用以下几种方式调用函数(1)函数表达式
函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式
的运算。这时要求函数是有返回值的。
例如:y=sin(x);(2)函数语句
函数调用的一般形式加上分号即构成函数语句。
例如:printf(“%d”,a);
这种方式通常只要求函数完成一定的操作,不要求函数带回值。(3)函数实参
这种方式是函数作为另一个函数调用的实际参数出现,也就是把该函
数的返回值作为实参进行数据传送,所以要求该函数必须是有返回值
的。
例如:printf(“%d”,max(a,b));
11.实参:可以是常量、变量和表达式。
12.只有在发生函数调用时,才给形参分配单元,并且赋值,一旦函数调
用结束后,形参所占的内存单元又被释放掉。
13.在调用函数过程中发生的实参与形参间的数据传递是“值传递”,只
能由实参向形参传递数据,是单向传递,不能由形参传给实参。
14.声明的作用是把函数的返回值类型、函数名、函数参数的个数和类型
等信息通知编译系统,以便在遇到函数调用时,编译系统能识别该函
数并检查调用是否合法
15.函数的声明方法:
(1)只说明函数的类型,这称为简单声明。int min();(2)不仅说明函数的类型还要说明参数的个数和类型,这称为原型声明。
int min(int x,int y);
16.数组名作函数参数时,形参数组和实参数组为同一数组,共同拥有一段
内存空间。
17.数组元素不能用作形参,因为形参是在函数调用时临时分配内存存储
单元的,不能为一个数组元素单独分配存储单元。
18.变量的有效范围(作用域)
19.局部变量也称为内部变量,是在函数内或函数的复合语句内定义说明的。
20.全局变量也称为外部变量,它是在函数外部定义的变量,位置在所有
函数前、各个函数之间或所有函数后。
*其作用域是从定义变量的位置开始到本源文件结束。
*设置全局变量的作用是可以增加各个函数之间的数据传输渠道。21.变量的完整说明为:
存储类型 数据类型 变量名表列; 例如: auto int x,y;
22.C语言变量的存储方式可以分为动态存储方式和静态存储方式。
23.动态存储方式:(1)自动变量(auto变量)(2)寄存器变量(register变量)(3)形式参数
24.静态存储方式:
(1)静态局部变量(static局部变量)
其语法格式为:
static 类型标识符 变量名;
例如:static int f;
(2)全局变量(全局变量赋初值也是在编译时完成的,且仅执行一次赋初值的操作。)
不能用extern来初始化外部变量。
(3)静态外部变量
25.一般为了叙述方便,把建立存储空间的变量声明称定义,而把不需要
建立存储空间的声明称为声明
26.在函数中出现的对变量的声明(除了用extern声明的以外)都是定义。
例如:extern int x=25;
//错误
5.C语言中的输入输出函数总结 篇五
getchar()输入流中获取一个字符 例如:
char c = getchar();putchar(c);格式化输入输出scanf()和printf()是最有用的,所以重点讲一下。printf(): 一般形式: printf(“格式控制”.输出列表);eg : printf(“a=%d,b=%f,c=%cn”,a,b,c);1;格式控制.格式控制是用双引号括起来的字符串,也称“转换控制字符串”,它包含以下两部分信息.格式说明:由“%”和格式字符组成,如%d,%f,%c,他的作用是把输出数据转换为指定格式输出,格式的说明总是由“%”字符开始的.普通字符:需要原样输出的字符,或者是一些有特殊含义的字符,如n,t。2;输出列表
就是需要输出的一些数据,也可以是表达式,如果在函数中需要输出多个变量或表达式,则要用逗号隔开.一些特殊字符的输出:
单引号,双引号,和反斜杠的输出在前面加转义字符”” 如:”’” , “”” , “”
%的输出用两个连在一起的%%,即printf(“%%”);
常用的格式说明如下: 格式字符
d 以十进制形式输出带符号整数(正数不输出符号)o 以八进制形式输出无符号整数(不输出前缀O)x 以十六进制形式输出无符号整数(不输出前缀OX)u 以十进制形式输出无符号整数 f 以小数形式输出单精度实数 lf 以小数形式输出双精度实数
e 以指数形式输出单、双精度实数
g 以%f%e中较短的输出宽度输出单、双精度实数 c 输出单个字符 s 输出字符串
这里强调一下:网上很多文章都说f 和lf是一样的,即不管单精度,双精度浮点数,都可以用f, 但我在POJ上做过测试,输出Double时用f确实也可以,但读入时,用f就报WA,所以大家如果对Double进行读写的话,都用lf吧。
说到Double,再啰嗦一句,建议大家要用到浮点数时都用Double,不要用float,因为在很多情况下,float精度不够会导致WA。
特殊:
对64位整数的输入输出,在POJ上的C++环境下(即VC),64位整数是: __int64(注意int前面是两个下划线)输入输出格式为”%I64d”.在G++环境下(即Dev C++)64位整数是 long long 输入输出格式为”%lld”.输出宽度
用十进制整数来表示输出的最少位数。注意若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。
精度
精度格式符以“.”开头,后跟十进制整数。意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
标志格式字符
-结果左对齐,右边填空格
+ 输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号 例如:
double c=24212345.24232;printf(“%020.4”);表示输出精确到小数点后4位,输出占20位,若有空余的位补0.scanf:
scanf的很多用法都是和printf对应的,故不再赘述。
说一下scanf一个特别好用的地方,就是可以滤去一些不想要的东西。举例说明如下:
比如输入为日期 yyyy-mm-dd,就可以这样写: int year,moth,day;scanf(“%d-%d-%d”,&year,&moth,&day);再比如:
scanf(“%3d %*3d %2d”,&m,&n);输入113 118 69回车(系统将113赋予m,将69赋予n,因为*号表示跳过它相应的数据所以118不赋予任何变量)puts()用的不多,且基本都能用printf()代替,故不再多说。gets()是从输入流中获取一行字符串放入字符数组中: char in[100];gets(in);大家可能最容易出错的地方就是字符串的输入,所以强调一下: 能进行字符,字符串输入的有:
getchar(), scanf(“%c”);scanf(“%s”), gets()
其中getchar()和 scanf(“%c”)的功能是一样的。
需要注意的是,这两个函数读入的是输入流中当前位置的字符,比如:
scanf(“%d”,&n);c = getchar();假设输入 67/(假设“/”代表回车),则第一个scanf读入一个整数67后,当前输入流的位置是67之后,即指向回车符,所以第二个getchar()读入的就是一个回车符了,即 c = ‘n’。
同样,gets()也是从当前位置读入一行字符串。比如:
scanf(“%d”,&n);gets(str);此时读入字符数组中的字符串就是“n” 了
所以通常在用scanf读入一个非字符串的类型之后,如果要读入字符,或字符数组,都用一个额外的getchar()把回车符读掉,若后面跟的不止一个回车符,可能还有多余的空格的话,就用gets()读掉。
和以上不同的是,scanf(“%s”)读入的时候是会忽略掉空格,回车和制表符的。并且以空格,回车和制表符作为字符串结束的标志。
经常会有这样的题,输入第一行是一个整数,接下来每行的第一个是一个字符,用来表示某种操作,后面再跟一些数据,比如: 4 A 100 2 B 23 A 23 89 B 34
像这种输入就需要小心,读入字符时不要读成回车符。为了防止意外,我一般是这样处理这类输入的: char model[2];Scanf(“%d”,&n);for(„,„,„){
scanf(“%s”,model);
if(model[0] == ‘A’){ } else{ } } sscanf(): sscanf()经常用来分解字符串,功能非常强大,但很多功能都需要正则表达式的知识,所以就介绍一下最简单的几种用法,大家如果想了解更多的话,自己去网上找吧。1.char str[100],str1[100],str2[100];gets(str);sscanf(str,”%s%s”,str1,str2);
将读入的一整行字符串按空格,制表符或回车符分割成两个字符串。2 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf(“123456 ”, “%4s”, str);
对于C++的输入输出就不再详细的讲了,因为cin,cout的速度实在太慢,不推荐使用,我一般都是到万不得已时才用。
比如当你要读入字符串到string 对象中时,就只能用cin了,这时候还有一个常见的问题,就是如何将一整行字符串读入一个string 中,这就要用到getline函数了。用法为: getline(cin, str);第一个参数就是标准输入流cin,第二个参数是接收读入数据的string对象,本来还有第三个参数,是结束符的标志,但通常用它默认的就可以了,所以不用管。
注意区分这个getline和cin.getline的区别: cin.getline的用法如下: char str[20];cin.getline(str,20);表示从读入的一行字符串中,取最多20各字符放入字符数组str中,注意此处的str是字符数组,而上面的str是string对象。
6.c语言实验五函数 篇六
#include
#include
#include
#include
int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL){
return (1);
}
if((pid = fork())<0){
status = -1;
}
else if(pid = 0){
execl(“/bin/sh”, “sh”, “-c”, cmdstring, (char *)0);
-exit(127); //子进程正常执行则不会执行此语句
}
else{
while(waitpid(pid, &status, 0) < 0){
if(errno != EINTER){
status = -1;
break;
}
}
}
return status;
}
分析一下原理估计就能看懂了:
当system接受的命令为NULL时直接返回,否则fork出一个子进程,因为fork在两个进程:父进程和子进程中都返回,这里要检查返回的pid,fork在子进程中返回0,在父进程中返回子进程的pid,父进程使用waitpid等待子进程结束,子进程则是调用execl来启动一个程序代替自己,execl(“/bin/sh”, “sh”, “-c”, cmdstring, (char*)0)是调用shell,这个shell的路径是/bin/sh,后面的字符串都是参数,然后子进程就变成了一个shell进程,这个shell的参数是cmdstring,就是system接受的参数,在windows中的shell是command,想必大家很熟悉shell接受命令之后做的事了。
再解释下fork的原理:当一个进程A调用fork时,系统内核创建一个新的进程B,并将A的内存映像复制到B的进程空间中,因为A和B是一样的,那么他们怎么知道自己是父进程还是子进程呢,看fork的返回值就知道,上面也说了fork在子进程中返回0,在父进程中返回子进程的pid。
windows中的情况也类似,就是execl换了个又臭又长的名字,参数名也换的看了让人发晕的,我在MSDN中找到了原型,给大家看看:
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpVerb,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
用法见下:
ShellExecute(NULL, “open”, “c:a.reg”, NULL, NULL, SW_SHOWNORMAL);
你也许会奇怪 ShellExecute中有个用来传递父进程环境变量的参数 lpDirectory,linux中的execl却没有,这是因为execl是编译器的函数(在一定程度上隐藏具体系统实现),在linux中它会接着产生一个linux系统的调用 execve, 原型见下:
int execve(const char * file,const char **argv,const char **envp);
看到这里就会明白为什么system()会接受父进程的环境变量,但是用system改变环境变量后,system一返回主函数还是没变,
原因从system的实现可以看到,它是通过产生新进程实现的,从我的分析中可以看到父进程和子进程间没有进程通信,子进程自然改变不了父进程的环境变量。
使用了system函数就能执行dos指令。
#include
#include
xiaoyu()
{
char *a;
int n=0;
FILE *f;
f=fopen(“file.bat”,“w+”);/*新建一个批处理*/
if(f==NULL)
exit(1);
a=“echo”; /*DOS命令*/
for(n=65;n<=90;n++)/*大写A-Z*/
fprintf(f,“%s %c ”,a,n);/*利用ASCII码输出A-Z,写出批处理*/
fclose(f);
system(“file.bat”);/*运行批处理*/
}
main()
{
char *string;
xiaoyu();
string=“echo C语言的system函数 ”;/*输出中文*/
system(string);
system(“pause”);/*程序暂停*/
}
7.C语言中常用数学函数的研究 篇七
C语言是高职高专院校机电、电子和计算机专业学生应掌握的一项基本语言, 是其他高级语言的基础, 对C语言的掌握程度直接影响后续专业课程的学习。对于初学者来说, 数学函数库的调取和使用是该课程的基础和难点, 它与人们日常所定义的数学函数有所区别, 不易掌握。本文通过对常用数学函数库和常见示例的分析, 带动学生对C语言的理解和学习。
二、C语言中的数学函数
C语言提供了以下的数学函数, 要使用这些函数时, 在程序文件头必须加入:#include<math.h>。编译时, 必须加上参数「-lm」 (表示连结至数学函式库) , 例如「gcc-lm test.c」。函数之自变量与传回之值型别见自变量或函数前之型别宣告。函数已经在「math.h」或其它标头档宣告过了, 因此在使用时不必再加型别宣告, 例如「y=sin (x) ;」, 不用写成「y=double sin (double x) ;」[1]。
三、C语言中一些常用数学函数及示例的分析
(一) abs、labs、fabs:求绝对值函数[2]。
1. 函数原型:int abs (int x) ;
long labs (long x) ;
double fabs (double x) ;
2. 头文件:#include<math.h>
3. 是否是标准函数:是。
4. 返回值:返回计算结果。
5.函数功能:函数int abs (int x) ;是求整数x的绝对值;函数long labs (long n) ;是求长整型数x的绝对值;函数double fabs (double x) ;是求浮点数x的绝对值。
(1) abs数学函数例程如下:计算整数的绝对值。
通过abs函数计算出整型数-44的绝对值44, 并在屏幕上显示结果。运行结果为:
number:-44 absolute value:44
(2) labs数学函数例程如下:计算长整数的绝对值。
通过labs函数计算出长整型数-12345678的绝对值12345678, 运行结果为:
number:-12345678 absolute value:12345678
(3) fabs数学函数例程如下:计算浮点数的绝对值。
通过fabs函数计算出浮点数-77.0的绝对值77.0。运行结果为:
number:-77.000000 absolute value:77.000000
(二) cos:余弦函数。
1. 函数原型:double cos (double x) ;
2. 头文件:#include<math.h>
3. 是否是标准函数:是。
4. 函数功能:求x的余弦值, 这里, x为弧度。
5. 返回值:计算结果的双精度值。
cos数学函数示例如下:求cosx。
应用cos函数计算60的余弦值, 即:cos60, 再返回计算结果的双精度值。本例程的运行结果是:
cos (X) is-0.952413
(三) sin:正弦函数。
1. 函数原型:double sin (double x) ;
2. 头文件:#include<math.h>
3. 是否是标准函数:是。
4. 函数功能:求x的正弦值, 这里, x为弧度。
5. 返回值:计算结果的双精度值。
sin数学函数示例:求sinx。
应用sin函数计算45/2的正弦值, 即:sin (x) 。返回计算结果的双精度值。
运行结果为:
sin (x) =-0.008851
(四) log:对数函数。
1. 函数原型:double log (double x) ;
2. 头文件:#include<math.h>
3. 是否是标准函数:是。
4. 函数功能:求对数。函数log是求以e为底的x的对数 (自然对数) 即:lnx;
5. 返回值:返回计算结果的双精度值。
log示例如下:计算lnx。
本例程应用函数log计算2.71828182自然对数, 运行结果为:
The natural log of 2.718282 is 1.000000
(五) pow:指数函数。
1. 函数原型:double pow (double x, double y) ;
2. 头文件:#include<math.h>
3. 是否是标准函数:是。
4. 函数功能:指数函数。函数pow是求x的y次方。
5. 返回值:返回计算结果的双精度值。
pow数学函数示例如下:计算xy。
应用函数pow计算210, 并将结果的双精度值返回。本例程的运行结果为:
The result of 2.000000 raised to 10.000000 is 1024.000000
四、结语
本文通过示例分析C语言中常用的数学函数, 将C语言、数学知识和编程应用联系到了一起, 使学生对C语言这门课程的学习基础与以前学过的数学知识之间的联系有了一个清晰的认识, 提高了学生的综合素质, 使学生认识到自己以前所学知识的不足, 查漏补缺, 为C语言及其后续课程的教与学打下一个良好的基础。
参考文献
[1] .董汉丽.C语言程序设计[M].大连:大连理工大学出版社, 2009, 7:267~268
【c语言实验五函数】推荐阅读:
c语言实验报告实验4.doc08-10
c语言实验报告本11-08
西南交大c语言实验06-24
语言、与C语言、实现汉诺塔09-30
c语言开发06-24
c语言教案07-17
C语言机房收费06-16
c语言上机心得07-07