C语言设计程序-函数
- 格式:pdf
- 大小:894.41 KB
- 文档页数:36
实验六函数一、实验目的1. 熟练掌握函数的定义、函数的类型和返回值。
2. 熟练掌握形式参数与实际参数、参数值的传递。
3. 掌握函数的嵌套调用与递归调用。
4.学会使用指向函数的指针变量。
5.了解指向指针的指针的概念及带参数的main函数。
6. 掌握局部变量和全局变量。
7. 掌握变量的存储类型。
8. 了解内部函数和外部函数。
二、实验学时:8课时三、预习知识1.标准库函数标准库函数是C系统提供的,这些库函数定义了一些基本的、常用的功能,用户可以使用这些库函数,但是在使用库函数之前需要用预编译命令# include将该库函数所在的头文件包含进来。
2.自定义函数定义函数一般有两种形式形式1:存储类型类型符函数名(类型符形参1,类型符形参2 ,… ) { 说明语句执行语句}形式2:存储类型类型符函数名(形参1,形参2 ,……)形参类型说明{ 说明语句执行语句}说明:①形参表中即使没有参数,函数名后的一对圆括号也不能省略。
②函数名前的类型符是用来说明函数返回值的数据类型(也作为函数的数据类型) 。
当函数值为整型时,类型符可以省略。
③当函数只完成某一特定操作不需要返回值时,可用类型标识符 void 说明,将函数定义成空类型。
④C 规定:不允许在一个函数内部再定义另外一个函数,即函数不允许嵌套定义。
⑤函数的存储类型:函数的存储类型有 extern 和 static 两种。
extern 型的函数除了可以被本程序中其它函数调用外,还可以被其它文件中的函数调用,这种函数称为外部函数,如果定义函数时省略 extern ,则隐含为外部函数。
static 型的函数只能被本源程序文件中的函数调用,称为内部函数(静态函数)。
3.函数的参数(1)在定义函数时函数名后面括号中的变量称为形参(形式参数),如果有两个以上形参,形参之间以逗号分隔。
形参是函数的内部变量,只在函数内部才有意义。
在未出现函数调用时,形参不占内存。
对每个形参必须指明其名字和数据类型。
实 验 报 告 七一【实验目的】1.掌握定义函数的方法;2.掌握函数实参与形参的对应关系以及“值传递”的方式; 3.掌握函数的嵌套调用和递归调用的方法;4.掌握动态变量、静态局部变量与全局变量之间的概念和使用方法;二【实验内容】【实验6-1】 编写函数max :求两个数中的较大数main 函数功能:从键盘任意输入两个数,调用max 函数,并在屏幕上输出两个数中的最大数。
【实验6-2】编写函数area :计算三角形面积main 函数: 已知各条边的长度(a,b,c,d,e,f,g ),通过调用area 函数求多边形面积【实验6-3】编写power 函数,其功能是求:n 的k 次方main 函数功能: 从键盘提示并输入n ,k 的值,调用power 函数,求得k k k n +++ 21 的值并输出【实验6-4】编写函数sort :对数组a 中的数进行从小到大排序main 函数:从键盘输入N 个数存放到数组a 中,通过调用sort 函数对数组a 中的数进行从小到大排序,并将排序后的结果输出。
三【实验过程】实验1:#include<stdio.h> int max(int a,int b) { if(a>b) return a; else return b; }void main() { int m,n,maxnum;scanf("%d %d",&m,&n);maxnum=max(m,n);printf("最大值为%d\n",maxnum);}实验2:#include<stdio.h>#include<math.h>float area(float a,float b,float c){float s;float area;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));return area;}void main(){float a,b,c,d,e,f,g,s1,s2,s3,s4;printf("请输入各条边的长度:\n");scanf("%f %f %f %f %f %f %f",&a,&b,&c,&d,&e,&f,&g);s1=area(a,b,c);s2=area(c,d,e);s3=area(e,f,g);s4=s1+s2+s3;printf("多边形面积为:%.2f\n",s4);}实验3:#include<stdio.h>int power(int n,int k){int power=n;int i;for(i=1;i<k;i++) power *= n;return power;}void main(){int s=0,i=1,n,k;printf("请分别输入n,k的值:\n");scanf("%d %d",&n,&k);for(i=1;i<=n;i++)s +=power(i, k);printf("结果=%d\n",s);}实验4:#include<stdio.h>#define N 10void sort(int a[],int n){int i,j,t;for(i=0; i<n; i++)for(j=i+1; j<n; j++){if(a[i]>a[j]){ t=a[i];a[i]=a[j];a[j]=t;}}}void main(){int a[N],i;printf("请输入十个待排序的元素:\n");for(i=0; i<N; i++)scanf("%d",&a[i]);sort(a,N);printf("排序后的结果:\n");for(i=0; i<10; i++){printf("%d ",a[i]);}printf("\n");}四【实验结论】通过这次实验,对函数的定义及其调用基本掌握,但对有些概念不是特别熟悉,还要多看书多理解。
4.2.2数学库函数C/C++程序通常用标准库函数和程序员编写的新函数写成。
各种C/C++版本都提供函数库,这些函数能够完成常用的数学计算、字符串操作、输入输出以及其它很多操作。
这些函数为程序员编写程序提供了很多方便,很多操作都可以调用标准库函数去完成,因此可以减少程序员的工作量。
除了库函数以外,程序员也可以自己定义一些函数完成某些特殊的任务。
下面以数学函数为例介绍库函数的使用,后面各章中也将逐步介绍其它库函数的使用。
使用库函数时,要根据函数的类别,用预处理命令#include将函数所在的头文件包含进来。
例如,使用数学库中的函数时,应该首先用预处理命令#include<math.h>指明要用到的数学函数的描述所在的头文件。
调用数学函数时,要给出函数名,后面是一对圆括号,括号内是使用函数所需的参数,参数可以是常量、变量或表达式。
例如,计算并打印2的3次方的语句可以写成:printf(“%7.2f”,pow(2.0,3.0));调用的数学函数pow需要两个参数,这两个参数都是double型的,返回值也是double 型的,语句执行结果为打印8.00。
数学库中所有函数的参数和返回值都是double类型的。
常用的数学函数见表4-2。
表4-2常用的数学函数(头文件math.h)函数原型函数功能函数返回值int abs(int x)求整数x的绝对值返回x的绝对值double fabs(double x)求实数x的绝对值返回实数x的绝对值double exp(double x)求e x返回e的x次方x,即lnx返回以e为底x的对数值double log(double x)求logedouble log10(double x)求logx返回以10为底x的对数值10求x y返回x的y次方double pow(double x,doubley)double cos(double x)求x的余弦值返回弧度x的余弦值double sin(double x)求x的正弦值返回弧度x的正弦值double tan(double x)求x的正切值返回弧度x的正切值double fmod(double x)求x/y的余数返回x/y的余数值double sqrt(double x)计算x的平方根返回x平方根值【例4-1】输入三角形的三边长,求三角形的面积。
实验四函数一、实验目的1.掌握函数的定义、函数的说明和调用。
2.掌握函数的参数及其传递方式,函数值的正确返回。
二、实验内容1.[目的]掌握标准库函数的说明和调用方法。
[题目内容]编写一个程序,首先显示一个菜单,然后根据用户的选择,输入数据后,执行相应的操作。
[输入]用户选择和函数自变量值[输出]如下菜单:=======MENU======1.。
sin2.。
cos3.。
pow4.。
sqrt0.。
exit==================[提示]使用标准库函数、多分支选择结构。
2.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
[题目内容]编写一个用户自定义函数,该函数有一个整型参数,函数的功能是:当这个整型数的值是偶数时,函数的返回值为0,当这个整型数的值是奇数时,返回值为1 。
编写一个程序,从键盘输入任意10个整数,分别调用用户自定义函数来判断这10个整数的奇偶性。
[输入]任意10个整数[输出]这10个整数的奇偶性[提示]在主函数中使用循环结构输入10个整数。
根据子函数的返回值输出相应的判断结果信息。
3.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
[题目内容]编写一个用户自定义函数,该函数有三个整数参数,函数的功能是:求解这三个整数的最大值,函数的返回值为三个参数的最大值。
编写一个程序,从键盘输入任意5个整数,分别两次调用用户自定义函数来求出这5个整数中的最大值。
[输入]任意5个整数[输出]这5个整数的最大值[提示]先用前三个整数调用函数,求出的最大值作为参数之一,再与另两个整数一起求出最大值即为所求。
4.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
[题目内容]nA表示从m各元素中抽出n个元素的排列的个数。
它的计算公式为:m)!(!n m m A n m -=。
编写一个用户自定义函数,该函数有一个整数参数,函数的功能是:求解这个整数的阶乘,函数的返回值为这个整数的阶乘。
c语言程序设计——标准输入函数
scanf(),printf(),均定义在文件stdio.h中,需要在程序开头做预处理声明#include<stdio.h>一、标准输入函数
scanf() 是格式化输入函数,它从标准输入设备读取输入的信息。
1.scanf()的调用格式:scanf(格式化字符串,变量地址表);
2.scanf()使用说明
①scanf()在读操作中自动忽略一个或多个空白字符
②scanf()在读操作中忽略与一个非空白字符相同的字符
③格式化说明符:%开始,后面跟一个或几个规定字符来确定输入输出的内容格式
3.变量地址表:
①变量地址表是需要读入的所有变量的地址,各变量地址之间用逗号隔开,“&”是取
地址符
②对于各个变量,类型说明符是什么,对应的格式化说明符就应该是什么,否则程序会
出现错误或者实际输入的数据与预期输入的数据不同。
③对于数组或者字符串变量,由于数组名和指针本身就是地址,所以在scanf()函数中不
需要加取地址符。
④可以在格式化字符串中的“%”和格式化规定符之间加入一个数字,表示输入读取的
最大位数。
⑤当使用多个scanf()连续输入多个字符变量时,会出现错误。
(完成一次输入时,按下
回车键,此时回车符在缓冲区,在进行下一次输入时,回车符被赋给下一个变量)解决办法:在输入函数之前加入清除函数fflush(),或者在第二个scanf();之前加一个getchar();。
C语言程序设计实验报告(实验名称:函数)1实验目的(1)掌握函数的定义方法、调用方法、参数说明以及返回值;(2)掌握实参与形参的对应关系,以及参数之间的“值传递”的方式;(3)掌握函数的嵌套调用及递归调用的用的设计方法;(4)在编程过程中加深理解函数调用的程序设计思想。
2实验内容(1)编写一个函数primeNum(int x),功能是判别一个数是否为素数。
要求:①在主函数中输入一个整数x(直接赋值或从键盘输入);②函数类型为空值(void),调用primeNum( )函数后,在函数中输出x是否为素数的信息,输出格式为“x is a prime number”或”x is not aprime number”;③分别输入一下数据:0,1,2,5,9,13,59,121,并运行程序,检查结果是否正确。
(2)编写函数 mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。
如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。
要求:①在主函数中从键盘输入一对整型数据a和b;②调用函数后,根据返回值对a和b的关系进行说明。
例如,在主函数中输入:10,5,则输出“10 is a multiple of 5”;③分别输入下面几组数据进行函数的正确性测试:1与5,5与5,6与2,6与4,20与4,37与9。
3算法描述流程图(1)primeNum(int x)(判别一个数是否是素数)函数流程图①主函数流程图:②判断素数函数流程图:(2)mulNum(int a,int b)(确定a和b是否是整数倍的关系)函数流程图①主函数流程图:②判断倍数流程图:4源程序(1)判断某个数是否是素数#include <stdio.h>int primNum(int x) /*编写函数判断某个数是否是素数*/ {int i;if (x==0||x==1) /*当x等于1或等于0时判断是否为素数*/return 0;for (i=2;i<x;i++) /* 当x大于2时判断不为素数的数*/{if (x%i==0)return 0;}if (x%i) /* 当x等于2或不满足上述条件时时判断出该数是素数*/ return 1;}void main(){int n ;printf("Please input an integer:"); /* 提示从键盘输入一个数x */scanf("%d",&n);if (primNum(n)==1) /* 调用定义的函数*/ printf("%d is a prime number\n",n); /* 由函数得出结论判断是否为素数*/ elseprintf("%d is not a prime number\n",n);}(2)个数是否是整数倍关系#include <stdio.h>int mulNum(int a,int b)/* 定义函数确定两个数是否有整数倍关系*/{if (a%b==0) /* 判断出a是b的整数*/return 1;else /* 判断出a不是b的整数*/return 0;}void main (){int m,n;printf ("please input tow integers:\n"); /*提示从键盘输入两个数*/scanf ("%d%d",&m,&n); /*从键盘输入两个数的值*/if(mulNum(m,n)==1) /*调用定义的函数并判断输出相应的结果*/printf("%d is a multiple of %d\n",m,n);elseprintf("%d is not a multiple of %d\n",m,n);}5测试数据(1)实验(1)测试数据为0,1,2,5,9,13,59,121 运行结果当测试数据0时当测试数据1时当测试数据2时当测试数据5时当测试数据9时当测试数据13时当测试数据59时当测试数据121时(2)实验2测试的数据1与5,5与5,6与2,6与4,20与4,37与9。
第5章函数【练习5-1】使用函数求1到n之和:输入一个正整数n,输出1〜n之和。
要求自定义和调用函数sum(n)求1〜n之和。
若要计算m〜n(m<n)之和,又该如何定义函数?试编写相应程序。
解答:#include<stdio.h>intsum(intn);intmain(void){intn;intsum;printf("Entern:")scanf("%d",&n);printf("sum=%d\n",sum(n));return0;}intsum(intn){intresult,i;result=0;for(i=1;i<=n;i++)result=result+i;returnresult;}若要计算m〜n(m<n)之和,则需要在main()中定义2个变量m和n:scanf("%d%d",&m,&n);printf("sum=%d\n",sum(m,n));同时在函数定义时需设置2个形参:intsum(intm,intn){intresult,i;result=0;for(i=m;i<=n;i++)result=result+i;returnresult;}【练习5-2】使用函数找最大值:输入2个数,输出其中较大的数。
要求定义和调用函数max(a,b)找出并返回a、b中较大的数。
试编写相应程序。
解答:#include<stdio.h>doublemax(doublea,doubleb);intmain(void)inta,b;printf(“Inputaandb:”);scanf("%lf%lf",&a,&b);printf("max=%lf\n",max(a,b));return0;}doublemax(doublea,doubleb){if(a>b)returna;elsereturnb;}【练习5-3】数字金字塔:输入一个正整数n,输出n行数字金字塔。
c函数式程序设计C函数式程序设计是一种编程范式,它侧重于使用函数作为程序的基本构建块。
在C语言中,函数是执行特定任务的代码块,可以接收输入(参数)并产生输出(返回值)。
函数式程序设计强调的是函数的抽象和复用,以及避免副作用(即函数不修改外部状态)。
函数的定义和声明在C语言中,函数的定义通常包括返回类型、函数名、参数列表和函数体。
例如:```cint add(int a, int b) {return a + b;}```这里定义了一个名为`add`的函数,它接受两个整数参数`a`和`b`,并返回它们的和。
函数的声明则是告诉编译器函数的存在,但不需要提供函数体。
声明通常放在头文件中,以便其他文件包含和使用。
```cint add(int, int);```函数的参数和返回值参数是函数的输入,可以是值传递或引用传递。
C语言默认使用值传递,即传递给函数的是参数的一个副本。
返回值是函数的输出,它告诉调用者函数执行的结果。
递归函数递归函数是调用自身的函数。
递归是解决问题的一种强大工具,特别是对于自然递归定义的问题,如阶乘、斐波那契数列等。
```cint factorial(int n) {if (n == 0)return 1;elsereturn n * factorial(n - 1);}```指针和函数指针在函数式程序设计中扮演着重要角色。
通过指针,函数可以修改其参数的值,或者操作更复杂的数据结构。
```cvoid swap(int *x, int *y) {int temp = *x;*x = *y;*y = temp;}```函数指针函数指针是指向函数的指针变量。
它允许将函数作为参数传递给其他函数,或者作为返回值从函数返回。
```cvoid (*functionPointer)(int *, int *) = swap;```高阶函数高阶函数是接受其他函数作为参数或返回函数的函数。
这在C语言中不常见,因为C语言没有内建的函数作为一等公民的支持,但可以通过函数指针来实现类似的概念。