C语言第7章函数
- 格式:pdf
- 大小:98.28 KB
- 文档页数:3
隆回县职业中专学校教学、学习设计方案)每个函数都可以被其它函数调用(包括main函数))每个函数都可以被单独编译)每个函数都可以单独运行)在一个函数内部可以定义另一个函数隆回县职业中专学校教学、学习设计方案scanf("%d",&x);y=sub(sub(sub(x)));printf("%d\n",y);【例7-7】有以下程序执行后的输出结果是()char fun(char x,char y){ if(x<y) return x;return y;}main( ){ int a='9',b='8',c='7';printf("%c\n",fun(fun(a,b),fun(b,c )));} }隆回县职业中专学校教学、学习设计方案二、自主学习互动探究知识点:函数递归调用定义:一个函数在它的函数体内直接或间接地调用它自身称为递归调用。
这种函数称为递归函数。
C语言允许函数的递归调用。
在递归调用中,主调函数又是被调函数。
执行递归函数将反复调用其自身。
递归调用分为直接递归和间接递归,直接递归是在函数中调用了本身,如图1。
间接递归是函数调用了别的函数,别的函数又调用了自己,如图2。
图1 图2【例1】以下程序运行后的输出结果是()。
int f(int a[], int n){ if (n>=1) return f(a, n-1)+a[n-1];else return 0;}main(){ int aa[5]={1,2,3,4,5}, s;s=f(aa, 5); printf("%d\n", s);}三、案例分析明确新知1、下面程序的运行结果是()long fun(int n){ if(n>2) return(fun(n-1)+fun(n-2));else return (2);}main(){ printf("%ld\n",fun(3));}2、有以下程序运行后的输出结果是()fun(int x){ if(x/2>0) fun(x/2);printf("%d",x);}main(){ fun(6);}11。
第五次实验题目-第七章函数教学目标31.一元二次方程的系数:a、b、c由主函数输入,编写函数求方程的根。
#include <stdio.h>#include <math.h>void root(double a, double b, double c){ double delta,x1,x2,m,n;if (fabs(a) <= 1e-6){if (fabs(b) <= 1e-6)puts("Not an equation");elseprintf("x=%.2lf",-c/b);return;}else{delta=b*b - 4*a*c;m = -b / (2*a);n = sqrt(fabs(delta)) / (2*a);x1 = m + n;x2 = m - n;if (fabs(delta) <= 1e-6)printf("x1=%.2lf, x2=%.2lf", x1, x1);else if (delta < 0)printf("x1=%.2lf+%.2lfi, x2=%.2lf-%.2lfi",m,n,m,n);elseprintf("x1=%.2lf, x2=%.2lf", x1, x2);}}int main( ){ double a,b,c;scanf("%lf%lf%lf",&a,&b,&c);root(a,b,c);return 0;}教学目标32.输入一串字符,统计其中英文字母的个数,编写统计英文字母个数的函数。
#include<stdio.h>int numberOfLetter(char str[]) {int i=0;int num = 0;//统计字母个数while (str[i]!=’\0’) {if ((str[i]>='A'&& str[i]<='Z')||( str[i]>='a'&& str[i]<='z')) num++;i++;}return num;}int main( ) {char str[100];int letterNum;printf("Enter a string: ");gets(str);letterNum = numberOfLetter(str);printf("Number of letters is %d.\n", letterNum);return 0;}教学目标33. 求100以内所有素数的和。
第七章函数一、选择题1、以下关于函数的叙述中正确的是A)每个函数都可以被其它函数调用(包括main函数)B)每个函数都可以被单独编译C)每个函数都可以单独运行D)在一个函数内部可以定义另一个函数2、设函数fun的定义形式为void fun(char ch,float x) { … }则以下对函数fun的调用语句中,正确的是A)fun("abc",3.0); B)t=fun('D',16.5);C)fun('65',2.8); D)fun(32,32);3、有以下程序int f1(int x,int y){return x>y?x:y;}int f2(int x,int y){return x>y?y:x;}main(){ int a=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d));f=f1(f2(a,b),f2(c,d));g=a+b+c+d-e-f;printf("%d,%d,%d\n",e,f,g); }程序运行后的输出结果是A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,74、有以下程序#define P 3#define F(int x) { return (P*x*x);}main(){ printf("%d\n",F(3+5));}程序运行后的输出结果是A)192 B)29 C)25 D)编译出错5、若程序中定义了以下函数double myadd(double a,double B){ return(a+B);}并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是A)double myadd(double a,B); B)double myadd(double,double);C)double myadd(double b,double A); D)double myadd(double x,double y);6、有以下程序char fun(char x ,char y){ if(x < y) return x;return y;}main(){ int a=’9’,b=’8’,c=’7’;printf("%c\n",fun(fun(a,b),fun(b,c))); }程序的执行结果是A)函数调用出错 B)8 C)9 D)77、有以下程序void f(int v,int w){ int t;t=v;v=w;w=t;}main(){ int x=1,y=3,z=2;if(x>y) f(x,y);else if(y>z) f(y,z);else f(x,z);printf("%d,%d,%d\n",x,y,z);}执行后输出结果是A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,18、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是A) 调用可以作为独立的语句存在 B) 调用可以作为一个函数的实参C) 调用可以出现在表达式中 D) 调用可以作为一个函数的形参9、有以下函数定义:void fun(int n,double x) { …… }若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是A)fun(int y,double m); B) k=fun(10,12.5);C)fun(x,n); D) vold fun(n,x);10、有以下程序fun(int a,int b){ if(a>b) return(a);else return(b);}main(){ int x=3,y=8,z=6,r;r=fun(fun(x,y),2*z);printf("%d\n",r);}程序运行后的输出结果是A) 3 B) 6 C) 8 D) 1211、在一个C程序中A) main函数必须出现在所有函数之前 B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后 D) main函数必须出现在固定位置12、有以下程序int f1(int x,int y){ return x>y?x:y; }int f2(int x,int y){ return x>y?y:x; }main(){ int a=4,b=3,c=5,d,e,f;d=f1(a,b); d=f1(d,c);e=f2(a,b); e=f2(e,c);f=a+b+c-d-e;printf("%d,%d,%d\n",d,f,e);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 3,5,413、有如下程序void f(int x,int y){ int t;if(x < y){ t=x; x=y; y=t; }}main(){ int a=4,b=3,c=5;f(a,b); f(a,c); f(b,c);printf("%d,%d,%d\n",a,b,c);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,514、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是A) void B) int C) float D) double15、有以下程序float fun(int x,int y){ return(x+y); }main(){ int a=2,b=5,c=8;printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序运行后的输出结果是A) 编译出错 B) 9 C) 21 D) 9.016、若有以下程序#includevoid f(int n);main(){ void f(int n);f(5);}void f(int n){ printf("%d\n",n); }则以下叙述中不正确的是A)若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB)若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数fC)对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明D)函数f无返回值,所以可用void将其类型定义为无值型17、以下函数值的类型是fun(float x){ float y;y= 3*x-4;return y;}A)int B)不确定 C)void D)float18、以下所列的各函数首部中,正确的是A)void play(var :Integer,var b:Integer)B)void play(int a,b)C)void play(int a,int b)D)Sub play(a as integer,b as integer)19、以下程序的输出结果是fun(int x, int y, int z){ z=x*x+y*y; }main(){ int a=31;fun(5,2,a);printf("%d",a);}A)0 B)29 C)31 D)无定值20、有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是A) 3 B) 4 C) 5 D) 有语法错21、有如下程序int func(int a,int b){ return(a+b);}main(){ int x=2,y=5,z=8,r;r=func(func(x,y),z);printf("%d\n",r);}该程序的输出的结果是A) 12 B) 13 C) 14 D) 1522、以下叙述中不正确的是A)在不同的函数中可以使用相同名字的变量B)函数中的形式参数是局部变量C)在一个函数内定义的变量只在本函数范围内有效D)在一个函数内的复合语句中定义的变量在本函数范围内有效23、有以下程序void fun (int a,int b,int c){ a=456; b=567; c=678;}main(){ int x=10, y=20,z=30;fun(x,y,z);printf("%d,%d,%d \n",z,y,x);}输出结果是A)30,20,10 B)10,20,30 C) 456,567,678 D) 678,567,45624、有以下程序#include "stdio.h"int abc(int u,intv);main(){ int a=24,b=16,c;c=abc(a,b);printf("%d\n",c);}int abc(int u,int v){ int w;while(v){ w=u%v; u=v; v=w }return u;}输出结果是A)6 B)7 C)8 D)925、以下说法中正确的是A)C语言程序总是从第一个的函数开始执行B)在C语言程序中,要调用的函数必须在main()函数中定义C)C语言程序总是从main()函数开始执行D)C语言程序中的main()函数必须放在程序的开始部分26、请读程序:#includefunc( int a, int b){ int c;c=a+b;return c;}main(){ int x=6,y=7,z=8,r;r=func((x--,y++,x+y),z--);printf("%d\n",r);}上面程序的输出结果是A)11 B)20 C)21 D)31二、填空题1、有以下程序int sub(int n) {return(n/10+n%10); }main(){ int x,y;scanf("%d",&x);y=sub(sub(sub(x)));printf("%d\n",y);}若运行时输入:1234<回车>,程序的输出结果是。
第七章函数
一、选择题
1.如果在一个函数的复合语句中定义了一个变量,则该变量()。
A)只在该复合语句中有效,在该复合语句外无效
B)在该函数中任何位置都有效
C)在本程序的源文件范围内均有效
D)此定义方法错误,其变量为非法变量
2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是:。
A)地址传递;B)单向值传递;
C)双向值传递;D)由用户指定传递方式
3.以下关于C语言程序中函数的说法正确的是:。
A)函数的定义可以嵌套,但函数的调用不可以嵌套;
B)函数的定义不可以嵌套,但函数的调用可以嵌套;
C)函数的定义和调用均不可以嵌套;
D)函数的定义和调用都可以嵌套。
4.以下正确的函数形式是:。
A)double fun(int x,int y)B)fun(int x,y)
{z=x+y;return z;}{int z;return z;}
C)fun(x,y)D)double fun(int x,int y)
{int x,y;double z;{double z;
z=x+y;return z;}z=x+y;return z;}
5.以下说法不正确的是:。
C语言规定
A)实参可以是常量、变量或表达式
B)形参可以是常量、变量或表达式
C)实参可以是任意类型
D)形参应与其对应的实参类型一致或赋值兼容
6.在下面的函数声明中,存在着语法错误的是。
A)BC(int a,int);B)BC(int,int);
C)BC(int,int=5);D)BC(int x,int y);
7.以下错误的描述是。
函数调用可以
A)出现在执行语句中B)出现在一个表达式中
C)做为一个函数的实参D)做为一个函数的形参
8.下面叙述中正确的是。
A)对于用户自己定义的函数,在使用前必须加以说明
B)函数可以返回一个值,也可以什么值也不返回
C)说明函数时必须明确其参数类型和返回类型
D)空函数不完成任何操作,所以在程序设计中没有用处
9.下面叙述中错误的是。
A)主函数中定义的变量在整个程序中都是有效的
B)在其他函数中定义的变量在主函数中也都不能使用
C)形式参数也是局部变量
D)复合语句中定义的函数只在该复合语句中有效
10.下面叙述中正确的是。
A)全局变量在定义它的文件中的任何地方都是有效的
B)全局变量在程序全部执行过程中一直占用内存单元
C)同一文件中的变量不能重名
D)使用全局变量有利于程序的模块化和可读性的提高
11.若函数的类型和return语句中表达式的类型不一致,则。
A)编译时出错
B)运行时出现不确定结果
C)不会出错,且返回值的类型以return语句中表达式的类型为准
D)不会出错,且返回值的类型以函数的类型为准
12.在函数的说明和定义时若没有指出函数的类型,则。
A)系统自动认为函数类型为整型
B)系统自动认为函数类型为实型
C)系统自动认为函数类型为字符型
D)编译时会出错
13.C语言中若不特别声明,则变量的类型被认为是。
A)extern B)static
C)register D)auto
14.在函数调用语句fun1(fun2(x,y),(x,y),z=x+y);中,fun1的实际参数的个数是。
A)3B)7C)4D)5
15.对函数的调用不可以出现在。
A)对一个变量赋初值
B)调用函数时传递的实际参数
C)函数的形式参数
D)引用数组元素[]的运算符中
16.若用数组名作为函数调用的实参,传递给形参的是。
A)数组的首地址B)数组第一个元素的值
C)数组中全部元素的值D)数组元素的个数
17.以下正确的说法是。
在C语言中:
A)实参和与其对应的形参各占用独立的存储单元
B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共占用存储单元
D)形参是虚拟的,不占用存储单元
18.有如下程序
int func(int a,int b)
{return(a+b);}
主函数包含程序段:
int x=2,y=5,z=8,r;
r=func(func(x,y),z);
则r的值为。
A)12B)13C)14D)15
19.以下C语言中,对函数不正确的描述是。
A)当用数组名作形参时,形参数组改变可使实参数组随之改变
B)允许函数递归调用
C)函数形参的作用范围只是局限于所定义的函数内
D)函数说明必须在主调函数之前
20.一个数据类型为void的函数中可以没有return语句,那么函数的被调用时。
A)没有返回值B)返回一个系统默认值
B)返回值由用户临时决定D)返回一个不确定的值
二、填空题
1函数直接或者间接地自己调用自己,被称为函数的____。
2在C语言中,某函数在一个程序中被调用的次数是____限制的。
3一个C程序可以由一个或多个____组成。
4从用户的角度看,C语言中的函数有两种,即库函数和____。
5在定义函数时,函数名后面的括号中的变量名称为____。
6在调用函数时函数名括号后面的变量名称为____。
7在函数内部定义只在本函数内有效的变量称为____。
8在函数外部定义的变量称为____。
9在C语言中,一个函数一般由两个部分组成,分别是___和函数体。
10函数调用时,实参和形参分别占用不同的内存单元,数据传递时按照___的方式进行。
三、判断题
1.不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。
2.通过return语句,函数可以带回一个或一个以上的返回值。
3.C程序中有调用关系的所有函数必须放在同一个源程序文件中。
4.如果被调用函数的定义出现在主调函数之前,可以不必加以声明。
5.C程序中,任何非主函数都可以调用其他任何非主函数。
6.如果某个函数在定义时省略了存储类型,则默认的存储类型是int。
7.函数定义时,可以不指定形参的类型,函数调用时由实参的类型决定形参的类型。
8.若i为某函数func之内说明的变量,则当func执行完后,i值无定义。
9.在C语言中,所有函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一个函数。
10.函数内定义的变量是外部变量,而在函数之外定义的变量称为局部变量,外部变量是全局变量。
答案:
一、ABBDB CDBAB DADAC AADDA
二、递归调用无函数自定义函数形式参数实际参数局部变量
全局变量函数首部单向值传递
三、正确错误错误正确正确正确错误正确正确错误。