第十一部分 对函数的进一步讨论.docx
- 文档编号:7386479
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:20
- 大小:22.58KB
第十一部分 对函数的进一步讨论.docx
《第十一部分 对函数的进一步讨论.docx》由会员分享,可在线阅读,更多相关《第十一部分 对函数的进一步讨论.docx(20页珍藏版)》请在冰豆网上搜索。
第十一部分对函数的进一步讨论
第十一部分:
对函数的进一步讨论
一、选择题
(1)有以下程序
#include
voidf(char *s,char *t)
{char k;
k=*s; *s=*t; *t=k;
s++; t--;
if(*s) f(s,t);
}
main()
{char str[10]="abcdefg",*p;
p=str+strlen(str)/2+1;
f(p,p-2);
printf("%s\n",str);
}
程序运行后的输出结果是
A)abcdefg
B)gfedcba
C)gbcdefa
D)abedcfg
(2)有以下程序
floatf1(float n)
{ return n*n; }
floatf2(float n)
{ return 2*n; }
main()
{float (*p1)(float),(*p2)(float),(*t)(float),y1,y2;
p1=f1; p2=f2;
y1=p2(p1(2.0));
t=p1; p1=p2; p2=t;
y2=p2(p1(2.0));
printf("%3.0f,%3.0f\n",y1,y2);
}
程序运行后的输出结果是
A)8, 16
B)8, 8
C)16, 16
D)4, 8
(3)程序中若有如下的说明和定义语句
char fun(char *);
main()
{
char *s="one",a[5]={0},(*f1)()=fun,ch;
……
}
以下选项中对函数fun的正确调用语句是
A)(*f1)(a);
B)*f1(*s);
C)fun(&a);
D)ch=*f1(s)
(4)在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则
A)称为函数的直接递归调用
B)称为函数的间接递归调用
C)称为函数的循环调用
D)C语言中不允许这样的递归调用
(5)有以下程序
voidfun(int*a,inti,intj)
{intt;
if(i {t=a[i];a[i]=a[j];a[j]=t; i++;j--; fun(a,i,j); } } main() {intx[]={2,6,1,8},i; fun(x,0,3); for(i=0;i<4;i++)printf("-",x[i]); printf("\n"); } 程序运行后的输出结果是 A)1268 B) 8621 C) 8162 D)8612 (6)有以下程序 #include main(intargc,char*argv[]) { inti,len=0; for(i=1;i printf(“5d\n”,len); } 经编译链接后生成的可执行文件是ex.exe,若运行时输入以下带参数的命令行 ex abcd efg h3 k44 执行后输出结果是 A)14 B)12 C)8 D)6 (7)有以下程序 voidf(inta[],inti,intj) { int t; if(i { t=a[i];a[i]=a[j];a[j]=t; f(a,i+1,j-1); } } main() { inti,aa[5]={1,2,3,4,5}; f(aa,0,4); for(i=0;i<5;i++) printf(“%d,”,aa[i]); printf(“\n”); } 执行后输出结果是 A)5,4,3,2,1, B)5,2,3,4,1, C)1,2,3,4,5, D)1,2,3,4,5, (8)有以下程序 void fun(int *a,int i,int j) { int t; if(i { t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); } } main() { int a[]={1,2,3,4,5,6},i; fun(a,0,5) for(i=0;i<6;i++) printf("%d",a[i]); } 执行后的输出结果是 A)654321 B)432156 C)456123 D)123456 (9)有以下程序 intf(int n) { if (n==1) return1; elsereturnf(n-1)+1; } main() { inti,j=0; for(i=i;i<3;i++)j+=f(i); printf(“%d\n”,j); } 程序运行后的输出结果是 A)4 B)3 C)2 D)1 (10)有以下程序 #include main(intargc,char*argv[]) {int i,len=0; for(i=1;i printf(“%d\n”,len); } 程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是: ex1 abcd efg 10<回车> 则运行的结果是: A)22 B)17 C)12 D)9 (11)有以下程序 intfa(intx) {returnx*x; } intfb(intx) {returnx*x*x; } intf(int(*f1)(),int(*f2)(),intx) {returnf2(x)-f1(x); } main() {inti; i=f(fa,fb,2);printf(“%d\n”,i); } 程序运行后的输出结果是 A)-4 B)1 C)4 D)8 (12)不合法的main函数命令行参数表示形式是 A)main(int a,char *c[]) B)main(int arc,char **arv) C)main(int argc,char *argv) D)main(int argv,char *argc[]) (13)假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入: PROGABCDEFGHIJKL<回车>,则输出结果为 A)ABCDEFG B)IJHL C)ABCDEFGHIJKL D)IJKLABCDEFGH main(int argc, char *argv[])) {while(--argc>0) printf(“%s”,argv[argc]); printf(“\n”); } (14)以下程序的输出结果是 A)1 B)2 C)3 D)4 long fun(int n) { long s; if(n==1||n==2) s=2; elses=n-fun(n-1); return s; } main() { printf(“%ld\n”,fun(3)); } (15)有如下程序 long fib(int n) { if(n>2) return(fib(n-1)+fib(n-2)); else return (2); } main0 { printf(“%d\n”,fib(3)); 该程序的输出结果是 A)2 B)4 C)6 D)8 (16)若有以下说明和定义 fun(int*c){ } main() { int (*a)()=fun,*b(),w[10],c; ┆ } 在必要的赋值之后,对fun函数的正确调用语句是 A)a=a(w); B)(*a)(&c); C)b=*b(w); D)fun(b); (17)下列程序执行后的输出结果是 A)hello B)hel C)hlo D)hlm voidfunc1(int i); voidfunc2(int i); charst[]="hello,friend! "; voidfunc1(int i) { printf("%c",st[i]); if(i<3){i+=2;func2(i);} } voidfunc2(int i) { printf("%c",st[i]); if(i<3){i+=2;func1(i);} } main() {inti=0; func1(i);printf("\n");} (18)假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行: prghellogood<回车>后,程序的输出结果是 A)hellogood B)hg C)hel D)hellogood main()(intargc,char*argv[]) { int i; if(argc<-0)return; for(i=1;i } (19)以下程序的输出结果是 A)54321 B)012345 C)12345 D)543210 main() {intw=5;fun(w);printf(“\n”);} fun(intk) {if(k>0)fun(k-1); printf(“%d”,k); } (20)若以下程序所生成的可执行文件名为filel.exe;当打入以下命令执行该程序时; FILELCHINABEIJINGSHANGHAI 程序的输出结果是 A)CHINABEIJINGSHANGHAI B)FILELCHINABEIJING C)CBS D)FCB main(intargc,char*argv[]) { while(arge-->0) { ++argv;printf("%s ",*argv);} } (21)C语言规定,程序中各函数之间 A)既允许直接递归调用也允许间接递归调用 B)不允许直接递归调用也不允许间接递归调用 C)允许直接递归调用不允许间接递归调用 D)不允许直接递归调用允许间接递归调用 二、填空题: (1)以下程序运行后的输出结果是【1】 。 intf(int a[],int n) {if(n>=1)returnf(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); } (2)下面程序的运行结果是: 【2】 int f(inta[],int n) {if(n>1) returna[0]+f(&a[1],n-1); else returna[0]; } main() { intaa[3]={1,2,3},s; s=f(&aa[0],3); printf(“%d\n”,s); } (3)以下程序运行后的输出结果是【3】 fun(int x) {if(x/2>0) fun(x/2); printf("%d",x); } main() {fun(6);} (4)设函数findbig已定义为求3个数中的最大值。 以下程序将利用函数指针调用findbig函数。 请填空。 main() { int findbig(int,int,int); int (*f)(),x,yz,z,big; f=【4】; scanf("%d%d%d",&x,&y,&z); big=(*f)(x,y,z); printf("bing=%d\n",big); } (5)以下程序的输出结果是【5】。 main() {int x=0; sub(&x,8,1); printf("%d\n",x); } sub(int *a,int n,int k) { if(k<=n) sub(a,n/2,2*k); *a+=k; } (6)以下程序的输出结果是【6】。 fun(intn,int*s) {intf1,f2; if(n==1||n==2)*s=1; else{fun(n-1,&f1);fun(n-2,&f2);*s=f1+f2;} } main() {intx; fun(6,&x); printf("%d\n",x); } (7)下面程序的输出是【7】。 longfun5(intn) {longs; if((n==1)||(n==2)) s=2; else s=n+fun5(n-1); return(s);} main() {longx; x=fun5(4); printf("%ld\n",x);} (8)下面h函数的功能是计算如下数学函数H的值。 请填空。 double fgh(double(*f)(doublea) doublex,doubley) {return(【8】);} doubleh(doublea,doubleb) return(fgh(sin,cos,a,b)*fgh( 【9】] ));} (9)请读程序: #include main(intargc,char*argv[]) {inti; printf('%d\n",argc); for(i=0;i<=argc+1;i++)printf("%s",argv[i]); printf("\n"); } 若上面的程序编译、连接后生成可执行文件ABC.EXE,则输入以下命令行 abcfile1file2 程序执行后的输出结果是【10】。 (10)下面程序的输出结果是【11】。 #include fun(intx) {intp; if(x==0||x==1)return(3); p=x-fun(x-2); returnp; } main() {printf("%d\n",fun(9));} (11)下面程序的输出结果是【12】。 #include funa(inta,intb) {returna+b;} funb(inta,intb) {returna-b;} sub(int(*t)(),intx,inty) {return((*t)(x,y));} main() {intx,(*p)(); p=funa; x=sub(p,9,3); x+=sub(funb,8,3); printf("%d\n",x); } (12)设有如下程序: #include main(intargc,char*argv[]) {while(--argc>0)printf("%s",argv[argc]); printf("\n"); } 假定上述程序经编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入PROGABCDEFGHIJKL (13)以下程序调用invert函数按逆序重新放置a数组中元素的值。 a数组中的值在main函数中读入。 #include #defineN10 invert(int*s,inti,intj) {intt;if(i main() {inta[N],i; for(i=0;i invert(a,0,N-1); for(i=0;i printf("\n");} 答案: 一、选择题: 01) B 02) A 03) A 04) B 05) C 06) D 07) A 08) A 09) B 10) D 11) C 12) C 13) D 14) A 15) B 16) B 17) C 18) B 19) B 20) A 21) A 二、填空题: (1)15 (2)6 (3)136 (4)findbig (5)7 (6)8 (7)9 (8)f(xy)/g(y-x)或(*f)(x+y)/g(y-x)或f(x+y)/(*g)(y_x)或(*f)或(*f)(x+y)/(*g)(y-x) (9)cos,sin,a,b (10)3 abc.exe file1 file2 (注: 两个答案,每个1分) (11)7 (12)17 (13)IJKLEFGHABCD (14)i+1 (15)I 第十二部分: 用户标识符的作用域和存储类 一、选择题: (1)有以下程序 int a=2; intf(int n) {staticint a=3; int t=0; if(n%2){staticint a=4; t+=a++; } else {staticint a=5; t+=a++; } return t+a++; } main() {int s=a,i; for(i=0;i<3;i++) s+=f(i); printf("%d\n",s); } 程序运行后的输出结果是 A)26 B)28 C)29 D)24 (2)以下叙述中正确的是 A)局部变量说明为static存储数,其生存期将得到延长 B)全局变量说明为static存储类,其作用域将被扩大 C)任何存储类的变量在未赋初值时,其值都是不确定的 D)形参可以使用的存储类说明符与局部变量完全相同 (3)有以下程序 inta=2; intf(int*A) {return(*A)++;} main() { ints=0; {inta=5; s+=f(&A); } s+=f(&A); printf(“%d\n”,s); } 执行后输出结果是 A)10 B)9 C)7 D)8 (4)以下叙述中正确的是 A)全局变量的作用域一定比局部变量的作用域范围大 B)静态(static)类别变量的生存期贯穿于整个程序的运行期间 C)函数的形参都属于全局变量 D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值 (5)有以下程序 inta=3; main() { ints=0; {inta=5; s+=a++;} s+=a++;printf(“%d\n”,s); } 程序运行后的输出结果是 A)8 B)10 C)7 D)11 (6)以下程序的输出结果是 int f() { static int i=0; int s=1; s+=i; i++; return s; } main() { int i,a=0; for(i=0;i<5;i++) a+=f(); printf("%d\n",a); } A)20 B)24 C)25 D)15 (7)在C语言中,形参的缺省存储类是 A)auto B)register C)static D)extern (8)以下程序的输出的结果是 intx=3; main() { inti; for(i=1;i } ncre() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十一部分 对函数的进一步讨论 第十一 部分 函数 进一步 讨论
![提示](https://static.bdocx.com/images/bang_tan.gif)