练习6-1答案一、选择题1.已知函数abc的定义为:void abc(){……}则函数定义中void的含义是( A )。
A.执行函数abc后,函数没有返回值B.执行函数abc后,函数不再返回C.执行函数abc后,可以返回任意类型 D.以上三个答案全是错误的2.已知:int p();,p是( C )。
A.int型变量B.函数p的调用C.一个函数声明,该函数的返回值是int型的值D.强制类型转换表达式中的变量3.以下正确的函数形式是( D )。
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; z=x+y; return z; } { double z; z=x+y; return z; }4.以下说法正确的是( C )。
A.定义函数时,形参的类型说明可以放在函数体内B.return后边的值不能为表达式C.如果函数值的类型与返回值表达式的类型不一致,以函数值类型为准D.如果形参与实参的类型不一致,以实参类型为准5.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( B )。
A.float 型B.int型C.long型D.double型6.下面函数调用语句含有实参的个数为( B )。
func((exp1, exp2), (exp3, exp4, exp5));A.1 B.2 C.4 D.57.以下程序的功能是计算函数F(x, y, z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。
#include <stdio.h>#include <math.h>float f(float, float);main(){float x, y, z, sum;scanf("%f%f%f", &x, &y, &z);sum=f( ①B )+f( ②C ); (注:或者选择sum=f( ①C )+f( ②B ))printf("sum=%f\n", sum);}float f(float a, float b){float value;value=a/b;return(value);}①A.x-y, x+y B.x+y, x-y C.z+y, z-y D.z-y, z+y②A.x-y, x+y B.x+y, x-y C.z+y, z-y D.z-y, z+y二、填空题8.以下程序的功能是根据输入的"y"("Y")与"n"("N"),在屏幕上分别显示出"This is YES."与"This is NO."。
请填空,①是( break;)、②是( getchar() 或getch() 或getche() )。
#include <stdio.h>void YesNo(char ch){switch (ch){ case 'y':case'Y': printf("\nThis is YES.\n"); ①;case 'n':case 'N': printf("\nThis is NO.\n");}}main(){char ch;printf("\nEnter a char 'y', 'Y' or 'n', 'N':");ch= ②;printf("ch:%c", ch);YesNo(ch);}9.下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的π的值,请填空,①是( t=n=1, s=0 )、②是( s*2 )。
π/2=1+1/3+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+(1/3)*(2/5)*(3/7)*(4/9)+….#include <conio.h>#include <math.h>#include <stdio.h>double pi(double eps){double s, t; int n;for ( ①; t>eps; n++){ s+=t;t=n*t/(2*n+1);}return( ②);}main(){double x;printf("\nPlease enter a precision:");scanf("%1f", &x);printf("\neps=%1f, =%1f", x, pi(x));}三、读程序,写结果10.下列程序的运行结果是( 5 )。
#include <stdio.h>fun(int p){ int a=10;p=a;++p;}main(){ int a=5;fun(a);printf("%d\n", a);}11.下列程序的运行结果是( 8 )。
#include <stdio.h>int abc(int u, int v);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;}12.下列程序的运行结果是:( before swap a=5,b=10in swap x=10,y=5after swap a=5,b=10 )。
#include <stdio.h>main(){ int a, b;a=5; b=10;printf("before swap a=%d,b=%d\n", a, b);swap(a, b);printf("after swap a=%d,b=%d\n",a, b);}swap(int x, int y){ int temp;temp=x; x=y; y=temp;printf("in swap x=%d,y=%d\n", x, y);}13.以下程序的运行结果是:( i=5i=2i=2i=0i=2 )。
int i=0;main(){ int i=5;reset(i/2); printf("i=%d\n", i);reset(i=i/2); printf("i=%d\n", i);reset(i/2); printf("i=%d\n", i);workover(i); printf("i=%d\n", i);}workover(int i){ i=(i%i)*((i*i)/(2*i)+4);printf("i=%d\n", i);return(i);}reset(int i){ i=i<=2?5:0;return(i);}练习6-2答案一、选择题1.将一个函数说明为static后,该函数将( B )。
A.既能被同一源文件中的函数调用,也能被其他源文件中的函数调用B.只能被同一源文件中的函数调用,不能被其他源文件中的函数调用C.只能被其他源文件中的函数调用,不能被同一源文件中的函数调用D.既不能被同一源文件中的函数调用,也不能被其他源文件中的函数调用2.如果在一个函数中的复合语句中定义了一个变量,则该变量( A )。
A.只在该复合语句中有效B.在该函数中有效C.在本程序范围内均有效D.为非法变量3.以下不正确的说法是( D )。
A.在不同函数中可以使用相同名字的变量B.形式参数是局部变量C.在函数内定义的变量只在本函数范围内有效D.在函数内的复合语句中定义的变量在本函数范围内有效4.以下程序的正确运行结果是( D )。
#define MAX 10int a[MAX], i;main(){printf("\n"); sub1(); sub3(); sub2(); sub3();}sub2(){int a[MAX], i, max;max=5;for (i=0; i<max; i++) a[i]=i;}sub1(){for (i=0; i<MAX; i++) a[i]=i+i;}sub3(){int i;for (i=0; i<MAX; i++) printf("%d", a[i]);printf("\n");}A.0 2 4 6 8 10 12 14 16 18 B.0 1 2 3 40 1 2 3 4 0 2 4 6 8 10 12 14 16 18C.0 1 2 3 4 5 6 7 8 9 D.0 2 4 6 8 10 12 14 16 180 1 2 3 4 0 2 4 6 8 10 12 14 16 185.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为( A )。
A.自动(auto) B.静态(static) C.外部(extern) D.寄存器(register) 6.以下程序的正确运行结果是( D )。
main(){int a=2, i;for (i=0; i<3; i++) printf("%4d", f(a));}f(int a){int b=0; static int c=3;b++; c++;return(a+b+c);}A.7 7 7 B.7 10 13 C.7 9 11 D.7 8 9 二、读程序,写结果7.写出下面程序的运行结果,①是( 8 )、②是( 17 )。
#include <stdio.h>main(){int k=4, m=1, p;p=fun(k, m); printf("%d", p); /* ①*/p=fun(k, m); printf("%d", p); /* ②*/}fun(int a, int b){static int m=0, i=2;i+=m+1;m=i+a+b;return(m);}8.下面程序的运行结果是( 8 4 )。