c语言习题(8)
更新时间:2024-03-02 15:29:01 阅读量: 综合文库 文档下载
- c语言基础题库及详解答案推荐度:
- 相关推荐
第八章 函数
8.1 选择题
【题8.1】以下正确的说法是 。
建立函数的目的之一是 A)提高程序的执行效率 B)提高程序的可读性
C)减少程序的篇幅 D)减少程序文件所占内存
【题8.2】以下正确的说法是 。
A) 用户若需调用标准库函数,调用前必须重新定义
B) 用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C) 系统根本不允许用户重新定义标准库函数
D) 用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件
包括到用户源文件中,系统自动去调
【题8.3】以下正确的函数定义形式是 。
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);
【题8.4】以下正确的函数形式是 。
A) double fun(int x,int y)
{ z=x+y; return z; } B) fun(int x,y)
{ int z; return z; }
C) fun(x,y)
{ int x,y; double z; z=x+y; return z; } D) double fun(int x,int y)
{ double z; z=x+y; return z; }
【题8.5】以下正确的说法是 。
在C语言中
A)实参和与其对应的形参各占用独立的存储单元
B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共占用存储单元 D)形参是虚拟的,不占用存储单元
【题8.6】若调用一个函数,且此函数中没有return语句,则正确的说法是 。 该函数 A)没有返回值 B)返回若干个系统默认值
C)能返回一个用户所希望的函数值
D)返回一个不确定的值
【题8.7】以下不正确的说法是 。 C语言规定 A)实参可以是常量、变量或表达式
B)形参可以是常量、变量或表达式 C)实参可以为任意类型
D)形参应与其对应的实参类型一致 【题8.8】以下正确的说法是 。
A) 定义函数时,形参的类型说明可以放在函数体内 B) return后边的值不能为表达式
C) 如果函数值的类型与返回值类型不一致,以函数值类型为准 D) 如果形参与实参的类型不一致,以实参类型为准
【题8.9】C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是 。
A) 地址传递
B) 单向值传递
C) 由实参传给形参,再由形参传回给实参 D) 由用户指定传递方式
【题8.10】以下程序有语法性错误,有关错误原因的正确说法是 。
main() { int G=5,k; void prt_char();
? ?
k=prt_char(G);
? ? }
A) 语句void prt_char();有错,它是函数调用语句,不能用void说明 B) 变量名不能使用大写字母
C) 函数说明和函数调用语句之间有矛盾 D) 函数名不能使用下划线
【题8.11】C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 。
A) float型
B) int型 C) long型 D) double型
【题8.12】C语言规定,函数返回值的类型是由 。
A) return语句中的表达式类型所决定 B) 调用该函数时的主调函数类型所决定 C) 调用该函数时系统临时决定
D) 在定义该函数时所指定的函数类型所决定
【题8.13】下面函数调用语句含有实参的个数为 。 func((exp1,exp2),(exp3,exp4,exp5)); A)1 B)2 C)4 D)5
【题8.14】以下错误的描述是 。
【题8.15】以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择
填空。
#include
scanf(“%f %f %f”,&x,&y,&z); sum=f(【1】)+f(【2】); printf(“sum=%f\\n”,sum); 函数调用可以
A)出现在执行语句中
B)出现在一表达式中 C)做为一个函数的实参 D)做为一个函数的形参
float f(float a,float b) { }
float value; value=a/b;
return(value);
B)x+y,x-y B)x+y,x-y
C)z+y,z-y C)z+y,z-y
D)z-y,z+y D)z-y,z+y
【1】 A)x-y,x+y 【2】 A)x-y,x+y
【题8.16】以下正确的描述是 。
在C语言程序中
A)函数的定义可以嵌套,但函数的调用不可以嵌套
B)函数的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以嵌套 D)函数的定义和函数的调用均可以嵌套
【题8.17】以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有这样的数
及其个数。请选择填空。
sub(int k,int n) { int a1,a2;
}
a2=【1】;
a1=k-【2】;
if((k%3==0&&a2==5)||(k%3==0&&a1==5)) { printf(“%d”,k);
n++;
return n;
}
else return -1;
main() { }
int n=0,k,m; for(k=10;k<=99;k++) { }
m=sub(k,n); if(m!=-1) n=m;
printf(“\\nn=%d”,n);
【1】 A)k*10 B)k C)k/10 D)k*10 【2】 A)a2*10 B)a2 C)a2/10 D)a2
【题8.18】以下是有关汉诺塔问题的程序段,若在main函数中有调用语句
hanoi(3,‘A’,‘B’,‘C’);则符合程序段运行结果的选项是 。 void move(char getone,char putone) { }
printf(“%c-->%c\\n”,getone,putone);
void hanoi(int n,char one,char two,char three) { }
if(n==1) move(one,three); else { }
B)A-->C A-->B C-->A
C)A-->C A-->B C-->B
D)A-->C A-->B C-->B
hanoi(n-1,one,three,two); move(one,three);
hanoi(n-1,two,one,three);
A)A-->C A-->B C-->B
B-->A C-->B A-->C A-->B
A-->B B-->C A-->C A-->B
A-->C B-->A B-->C A-->C
A-->C A-->B B-->C A-->C
【题8.19】若用数组名作为函数调用的实参,传递给形参的是 。
A) 数组的首地址
B) 数组第一个元素的值 C) 数组中全部元素的值 D) 数组元素的个数
【题8.20】已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array
的错误定义方式为 。 int a[3][4];
f(a);
A) f(int array[][6]) B) f(int array[3][]) C) f(int array[][4]) D) f(int array[2][5])
【题8.21】若使用一维数组名作函数实参,则以下正确的说法是 。
A) 必须在主调函数中说明此数组的大小
B) 实参数组类型与形参数组类型可以不匹配 C) 在被调函数中,不需要考虑形参数组的大小 D) 实参数组名与形参数组名必须一致
【题8.22】折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位于
中间点元素的值。如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若
找到,返回其下标值;返回-1。请选择填空。 binary(int a[10],int m) {
int low=0,high=9,mid; while(low<=high) { }
mid=(low+high)/2; if(m
else if(m>a[mid]) 【2】; else return(mid);
return(-1); }
【1】 A)high=mid-1 B)low=mid+1
C)high=mid+1 D)low=mid-1
【2】 A)high=mid-1 B)low=mid+1 C)high=mid+1 D)low=mid-1
【题8.23】以下正确的说法是 。 如果在一个函数中的复合语句中定义了一个变量,则该变量
A) 只在该复合语句中有效
B) 在该函数中有效
C) 在本程序范围内均有效 D) 为非法变量
【题8.24】以下不正确的说法为 。
A) 在不同函数中可以使用相同名字的变量 B) 形式参数是局部变量
C) 在函数内定义的变量只在本函数范围内有效
D) 在函数内的复合语句中定义的变量在本函数范围内有效
【题8.25】以下程序的正确运行结果是 。
A) 0 2 4 6 8 10 12 14 16 18
0 1 2 3 4 #define MAX 10 int a[MAX],i; main() { } sub2() { }
int a[MAX],i,max; max=5;
for(i=0;i printf(“\\n”); sub1(); sub3(a); sub2(); sub3(a); sub1() { } for(i=0;i sub3(int a[]) { } int i; for(i=0;i B) 0 1 2 3 4 0 2 4 6 8 10 12 14 16 18 C) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 D) 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18 【题8.26】以下程序的正确运行结果是 。 #include void num() { } extern int x,y; int a=15,b=10; x=a-b; y=a+b; int x,y; main() { } int a=7,b=5; x=a+b; y=a-b; num(); printf(“%d,%d\\n”,x,y); B)不确定 C)5,25 D)1,12 A)12,2 【题8.27】凡是函数中未指定存储类型的局部变量,其隐含的存储类别为 。 A)自动(auto) B)静态(static) C)外部(extern) D)寄存器(register) 【题8.28】在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局 变量,则该变量需要使用的存储类别是 。 A)extern B)register C)auto D)static 【题8.29】以下程序的正确运行结果是 。 main() { } int a=2,i; for(i=0;i<3;i++) printf(“M”,f(a)); f(int a) { } int b=0; static int c=3; b++; c++; return(a+b+c); B)7 10 13 C)7 9 11 D)7 8 9 A)7 7 7 【题8.30】以下程序的正确运行结果是 。 #include main() { } func(int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; int k=4,m=1,p; p=func(k,m); printf(“%d”,p); p=func(k,m); printf(“%d\\n”,p); return(m); } A)8,17 B)8,16 C)8,20 D)8,8 8.2 填空题 【题8.31】C语言规定,可执行程序的开始执行点是 。 【题8.32】在C语言中,一个函数一般由两个部分组成,它们是【1】和【2】。 【题8.33】若输入的值是-125,以下程序的运行结果是 。 #include main() { } int n; scanf(“%d”,&n); printf(“%d=”,n); if(n<0) printf(“-”); n=fabs(n); fun(n); fun(int n) { } int k,r; for(k=2;k<=sqrt(n);k++) { } r=n%k; while(r==0) { } printf(“%d”,k); n=n/k; if(n>1) printf(“*”); r=n%k; if(n!=1) printf(“%d\\n”,n); 【题8.34】下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误 的部分是【1】;改正后为【2】。 void add(float a,float b) { } float c; c=a+b; return c; 【题8.35】以下程序的运行结果是 。 main() { int i=2,x=5,j=7; } fun(int i,int j) { } int x=7; printf(“i=%d;j=%d;x=%d\\n”,i,j,x); fun(j,6); printf(“i=%d;j=%d;x=%d\\n”,i,j,x); 【题8.36】以下程序的运行结果是 。 main() { increment(); } increment(); increment(); increment() { } int x=0; x+=1; printf(“%d”,x); 【题8.37】以下程序的运行结果是 。 #include int a=1,b=2,c; c=max(a,b); printf(“max is %d\\n”,c); max(int x,int y) { } int z; z=(x>y)?x:y; return(z); 【题8.38】以下程序的功能是根据输入的“y”(“Y”)与“n”(“N”),在屏幕上分别显 示出“This is YES.”与“This is NO.”。请填空。 #include void YesNo(char ch) { switch(ch) { } case ‘y’: case ‘Y’: printf(“\\nThis is YES.\\n”); 【1】; case ‘n’: case ‘N’: printf(“\\nThis is No.\\n”); 【2】; } main() { char ch; printf(“\\nEnter a char ‘y’,‘Y’or‘n’,‘N’:”); } printf(“\\nPlease enter a precision:”); scanf(“%lf”,&x); printf(“\\neps=%lf,π=%lf”,x,pi(x)); 【题8.50】下面是一个计算阶乘的程序。程序中的错误语句是【1】,应改为【2】。 #include double factorial(int); main() { } double factorial(int n) { double result=1.0l; while(n>1||n<170) result*=--n; return result; int n; printf(“Enter an integer:”); scanf(“%d”,&n); printf(“\\n\\n%d!=%lg\\n\\n”,n,factorial(n)); } 【题8.51】函数f中的形参a为一个10×10的二维数组,n的值为5,以下程序段的运行 结果是 。 f(int a[10][10],int n) { int i,j,k; j=n/2+1; a[1][j]=1; i=1; for(k=2;k<=n*n;k++) { } i=i-1; j=j+1; if((i<1)&&(j>n)) { i=i+2; j=j-1; } else { if(i<1) i=n; if(j>n) j=1; } if(a[i][j]==0) a[i][j]=k; else { i=i+2; j=j-1; a[i][j]=k; } } 【题8.52】下面函数func的功能是 。 #include long n; printf(“\\nPlease enter a number:”); scanf(“%ld”,&n); printf(“\\nThe product of its digits is %ld.”,func(n)); long k=1; num=labs(num); do{ k*=num; num/=10; }while(num); return(k); 【题8.53】以下程序的运行结果是 。 #include { } printf(“FACT(5):%d\\n”,fact(5)); printf(“FACT(1):%d\\n”,fact(1)); fact(-5); fact(int value) { } if(value<0) { printf(“FACT(-1):Error!\\n”); return(-1); } else if(value==||value==0) return(1); else return(value*fact(value-1)); 【题8.54】以下程序的功能是用递归方法计算五位学生的年龄,请填空。 递归公式如下: 10?age(n)???age(n?1)?2(n?1)(n?1) #include age(int n) { } int c; if(n==1) c=10; else c=【1】; return(c); main() { } int n=5; printf(“age:%d\\n”,【2】); 【题8.55】下面程序的功能是【1】,运行结果是【2】。 long fib(int g) { } switch(g) { case 0: return 0; case 1: case 2: return 1; } return(fib(g-1)+fib(g-2)); main() { } long k; k=fib(7); printf(“k=%d\\n”,k); 【题8.56】以下程序的运行结果是 。 main() { } int i=5; printf(“%d\\n”,sub(i)); sub(int n) { int a; if(n==1) return 1; a=n+sub(n-1); return(a); } 【题8.57】以下程序是应用递归算法求某数a的平方根,请填空。求平方根的迭代公式如 下: x1?12(x0?ax0) #include double mysqrt(double a,double x0) { } main() { } double x; printf(“Enter x:”); scanf(“%lf”,&x); printf(“The sqrt of %f=%f\\n”,x,mysqrt(x,1.0)); double x1,y; x1=【1】; if(fabs(x1-x0)>0.00001) y=mysqrt(【2】); else y=x1; return y; 【题8.58】以下程序的运行结果是 。 #include int a[]={1,5,10,9,11,7}; f(a+1); int i=0; while(a[i]<=10) { } printf(“%d”,a[i]); i++; 【题8.59】以下程序的运行结果是 。 main() { int a[3][3]={1,3,5,7,9,11,13,15,17}; int sum; sum=func(a); } printf(“\\nsum=%d\\n”,sum); func(int a[][3]) { } int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) { a[i][j]=i+j; if(i==j) sum=sum+a[i][j]; } return(sum); 【题8.60】阅读下面程序,完成下列问题中的填空。 问题(1)此程序在调用函数f后运行结果是【1】。 (2)若将函数f中的for(j=i+1;j<4;j++)改为for(j=0;j<3-i;j++),则 程序的运行结果是【2】。 f(int s[][4]) { int i,j,k; for(i=0;i<3;i++) for(j=i+1;j<4;j++) { k=s[i][j]; s[i][j]=s[j][i]; s[j][i]=k; } main() { int s[4][4],i,j; for(i=0;i<4;i++) for(j=0;j<4;j++) s[i][j]=i-j; f(s); for(i=0;i<4;i++) { } printf(“\\n”); for(j=0;j<4;j++) printf(“M”,s[i][j]); } { } printf(“\\n”); for(j=0;j /* 错误语句【2】 */ 【题8.72】以下程序运行结果是 。 main() { int a=1,b=2,c=3; ++a; c+=++b; { } int b=4,c; c=b*3; a+=c; printf(“first:%d,%d,%d\\n”,a,b,c); a+=c; printf(“second:%d,%d,%d\\n”,a,b,c); printf(“third:%d,%d,%d\\n”,a,b,c); } 【题8.73】以下程序的运行结果是 。 #include fun(int m) { } m+=k; k+=m; { } char k=‘B’; printf(“(2) %d\\n”,k-‘A’); fun(i); printf(“(1) %d,%d\\n”,i,k); printf(“(3) %d,%d\\n”,m,k); 【题8.74】以下程序的运行结果是 。 sub(int x,int y) { } x1=x; x=y; y=x1; int x1=30,x2=40; main() { int x3=10,x4=20; } sub(x3,x4); sub(x2,x1); printf(“%d,%d,%d,%d\\n”,x3,x4,x1,x2); 【题8.75】以下程序的运行结果是 。 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); 【题8.76】以下程序的运行结果是 。 int a=5; int b=7; main() { } int a=4,b=5,c; c=plus(a,b); printf(“A+B=%d\\n”,c); plus(int x,int y) { } int z; z=x+y; return(z); 【题8.77】以下程序的运行结果是 。 int a=3,b=5; max(a,b) { } int c; c=a>b?a:b; return(c); main() { int a=8; } printf(“%d”,max(a,b)); 【题8.78】以下程序的运行结果是 。 int x; cube() { } x=x*x*x; main() { } x=5; cube(); printf(“%d\\n”,x); 【题8.79】以下程序的运行结果是 。 main() { } incx() { } int x=0; printf(“x=%d\\t”,++x); incx(); incy(); incx(); incy(); incx(); incy(); incy() { } static int y=0; printf(“\\ny=%d\\n”,++y); 【题8.80】以下程序的运行结果是 。 main() { increment(); } increment() { } static int x=0; x+=1; printf(“%d”,x); increment(); increment(); 【题8.81】以下程序的运行结果是 。 int n=1; main() { static int x=5; int y; y=n; printf(“MAIN:x=- y=- n=-\\n”,x,y,n); func(); } printf(“MAIN:x=- y=- n=-\\n”,x,y,n); func(); func() { } static int x=4; int y=10; x=x+2; n=n+10; y=y+n; printf(“FUNC:x=- y=- n=-\\n”,x,y,n); 【题8.82】以下程序的功能是 。 int fac(int n) { } main() { int i; for(i=1;i<=5;i++) } printf(“%d!=%d\\n”,i,fac(i)); static int f=1; f=f*n; return(f); 8.3 编程题 【题8.83】已有变量定义和函数调用语句:int a=1,b=-5,c;c=fun(a,b);fun函数的作用是 计算两个数之差的绝对值,并将差值返回调用函数,请编写fun函数。 fun(int x,int y) { } 【题8.84】已有变量定义和函数调用语句:int x=57; isprime(x);函数isprime()用来判 断一个整型数是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。 nisprime(int a) { } 【题8.85】已有变量定义和函数调用语句:int a,b; b=sum(a);函数sum()用以求?k, k?1
正在阅读:
c语言习题(8)03-02
蚂蚁历险记作文450字07-02
C语言辅导01-21
假如我是市长作文400字07-09
XXX门户网站项目合同V1.011-27
2018年宁夏回族自治区中考语文试题及参考答案(WORD版)09-15
数据结构课程设计报 告航空订票系统06-02
教师对学生期中考试后的总结与反思范文五篇04-03
中共四川省第十次党代会精神解读07-27
- 高一物理牛顿运动定律全套学习学案
- 水处理一级反渗透加还原剂亚硫酸氢钠后为什么ORP会升高
- 毕业设计(论文)-正文董家口 - 图文
- 荣盛酒店经营管理公司录用通知及入职承诺书II
- 第二讲 大学英语四级快速阅读技巧
- 质量管理体系文件(2015年委托第三方医药物流配送企业专用版本)
- 214071收款办法
- 苏轼对《文选》选文的评价
- 《诊断学基础B》1-8作业
- 广东省东莞市高一数学下学期期末教学质量检查试题
- 海南电网公司VIS推广应用管理办法
- 红星照耀中国习题
- 苏教版小学语文六年级上册期末复习资料之生字词整理
- 局域网组建与应用—王向东
- 税务稽查内部管理文书样式
- 环保社会实践调查表
- 九年级思品第一单元复习
- 2016年全国注册咨询工程师继续教育公路路线设计规范试卷
- 毕业设计-青岛港董家口港区防波堤设计
- 撞背锻炼方法与益处
- 习题
- 语言
- 新版水轮发电机组值班员题库大全(值长) - 图文
- 海南大学2013—2014学年度奖学金、优秀学生及先进班集体名单
- 综合实践活动项目组课题申报表 - 图文
- 毕业设计论文-刘芳-《库房管理系统》
- 转正工作总结 中铁中建
- 室外消防管道施工方案
- 新人教版六年级语文上册《老人与海鸥》教案教学设计精品完整版
- 24《送东阳马生序》
- 制度目录
- 2015年专业技术人员继续教育培训复习题课件
- 第二章 热力学第一定律及其应用
- 绍兴一中2014学年第二学期回头考试卷自选模块试题及答案
- 基于Gb口信令的KPI统计 - PS业务
- 小学电气初步设计说明修改
- 2019高中物理第五单元交变电流单元测试一新人教版选修3-2[经典版
- 单片机原理复习题
- 中国移动CNGI工程实施纲要
- 省开课《工程建设监理概论》综合试题(一)及参考答案
- 住宅性能评定技术标准(征求意见稿) - 图文
- 大数据汇总材料报告(政策法规、机构、企业、运营模式、国际规范