C语言 第七章 函数
- 格式:doc
- 大小:40.50 KB
- 文档页数:3
第五次实验题目-第七章函数教学目标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.以下函数声明正确的是: C 。
(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。
(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。
(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。
4.以下正确的函数形式是: D 。
(1级)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.以下说法不正确的是: B 。
(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。
(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。
(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。
(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。
(完整版)答案第七章函数..第七章函数一、选择题1.以下函数声明正确的是: C 。
(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。
(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。
(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。
4.以下正确的函数形式是: D 。
(1级)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.以下说法不正确的是: B 。
(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。
(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。
(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。
(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。
第七章函数一、选择题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.【B】
分析:函数返回值的隐含类型是整型。
2.【B】
分析:main函数可以在任何地方出现。
它是程序的入口。
3.【D】
分析:函数的调用有一个返回值或者实现一定的功能,因此可以作为独立的语句存在,也可以出现在表达式中,可以作为一个函数的实参(返回值是一个实际的值)。
4.【B】
分析:实参与形参之间的数据传递,只能是实参传给形参,单向传递。
5.【B】
分析:任何函数(除了main函数)的使用通过调用实现。
普能的函数都能被单独编译(一定要能过调用才能运行),不能在一个函数中嵌套定义另一个函数。
6.【CD】
分析:C选项程序就是由若干个函数组成,无论是否有其他函数,主函数一定得存在。
每个程序都必须有且仅有一个主函数,但不是每个程序文件都必须有main()函数。
因为一个程序可能包含多个程序文件。
函数不能嵌套定义。
7.【D】
分析:函数调用时实参必须与形参在个数,类型,顺序上相同。
A选项中的"abc"是字符串,所以错误。
C选项中'65'本身就是错误的。
函数的返回值为空,不能用于赋值运算,所以B选项错误。
D选项的第二个32在传给形参时可以转换为实型,正确。
8.【A】
分析:实参都是用逗号隔开,第二个实参是个加法表达式,第三个实参是个逗号表达式。
9.【C】
分析:fl函数功能返回较大的值,f2函数的功能返回较小的值。
f1(a,b)返回为4,f2(a,b)返回为3。
10.【C】
分析:void *fun();的含义是fun函数的返回值是无值型的指针类型。
11.【C】
分析:函数在调用时不会出现类型说明符,所以A,D错误。
函数的返回值为空,不能用于赋值运算,所以B选项错误。
12.【D】
分析:fun函数的功能选择两个数中较大的一个作为返回值。
x为3,y为8,z为6以实参传到形参中,所以fun(fun(x,y), 2*z)等价于fun(fun(3,8), 2*6)等价于fun(8, 12),最后r被赋12。
答案选D。
13.【B】
分析:fun函数功能返回两个数之和。
此题就是函数调用作为函数实参。
a为2,b为5,c 为8传到fun((int)fun(a+c,b),a-c))中那么它等价于fun(15,-6)。
所以答案选B。
14.【C】
分析:此题关键的一点就是实参与形参数据是单向传递的,a为31以实参传到函数中或者说传到形参z中,而函数体z=x*x+y*y会使z发生改变,形参改变了,但是实参是不
会改变的。
所以请大家记好实参是永远不会改变的。
所以a还是31。
15.【D】
分析:同12,13题。
16.【C】
分析:此题是复杂的函数调用,fun2中调用了fun1。
fun1的功能是求一个数的平方。
将实参1.1和2.0传到fun2的形参,然后进行计算。
注意返回值被强制转换为整型了,所以答案选C。
17.【D】
分析:A选项f的初值不能为0。
B,C选项for循环有误,死循环。
18.【A】
分析:函数声明时形参的类型说明符一定不能省。
形参名可以省,也可以和定义的不同。
19.【C】
分析:声明既可以在主函数内也可以在主函数外,同时声明不会出错。
20.【D】
分析:a,b,c是实参传给形参的,是不会改变的。
21.【A】
分析:函数的返回值如果缺省默认为整型。
22.【A】
分析:函数一定要先定义后调用,如B选项,或者先声明再调用最后定义,如C,D选项。
23.【C】
分析:同20题。
24.【C】
分析:函数定义时,形参类型一定不能省。
25.【C】
分析:此题涉及到后面的知识,请学有余力的同学自己完成。
26.【B】
分析:同25题。
二、填空题
1.4334
分析:同选择题14,20题。
2.i<10 j%3 !=0
分析:j=i*10+6;从这条语句可以看出i从1变化到9可以选出100以内个位数为6的所有整数。
所以第一空填入i<10。
第二空填入j%3 !=0,用来判断是否能被3整除。
3.return 0 return 1
分析:从函数的首部看,返回值类型int,函数名isprime,形参为int类型,形参名字为a。
接下来定义一个int类型的变量i,后面语句部分是判定素数。
我们知道,判断一个整数是不是素数,就看除了1和它本身外,还有没有能被它整除的整数。
当i从2开始一直到a/2,一旦有一个i能被a整除,那么a就不是素数,返回0。
所以if条件后面应该填写return 0。
如果整个for循环结束了if的条件都为假,即表示没有哪一个i能被a 整除,a必为素数,需要返回1。
因此后面的空应该填写return 1 。
注意,执行了return 语句后就会退出函数,不会再执行后面的语句。
4.t*10
分析:从1+12+123+1234+12345可以看出个位数,刚好是i的各个值。
后一个数都是都是前一个数乘10然后加个数。
5.a=1.0,b=1.0,s=1.0;
分析:此题给a,b,s赋初值,思路同上题。
注意a,b,s是实型的。
6.m=fun(a,4)+fun(b,4)-fun(a+b,3);
分析:对fun(x,n)函数的分析可以看出其功能是求x n,所以fun(a,4)就是a4,fun(b,4)就是b4,fun(a+b,3)就是(a+b)3。
7.x x*x+1
分析:题目要求求f(x)的累加和,s+=F( );这条语句就是完成累加功能,所以是调用函数。
填入x。
然后f(x)=x2+1,所以返回值填x*x+1。
8.-f fun(10)
分析:从1-2+3-4+ … +9-10可以看出是正负号交替出现的。
f就是1和-1交替。
所以第一空填-f。
然后是从1运算到10,所以函数调用时,实参传入10,填入fun(10)。
9.9
分析:函数返回为(y-x)*x,所以f(3,4)为3,f(3,5)为6,f(f(3,4),f(3,5))等价于f(3,6)为9。