加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

《C语言程序设计》核心试题(10)

(2011-09-13 23:23:36)
标签:

c语言

分类: 教学文件
第十一部分:对函数的进一步讨论


一、选择题
1)有以下程序
 # include    <string.h>
 void f(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);
 }
程序运行后的输出结果是
  Aabcdefg  
  Bgfedcba  
  Cgbcdefa  
  Dabedcfg

2)有以下程序
 float f1(float  n)
  return  n*n;  }
 float f2(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);
 }
程序运行后的输出结果是
  A8,  16  
  B8,  8   
  C16,  16  
  D4,  8

(3)
程序中若有如下的说明和定义语句
char  fun(char  *);
main()
{
   char  *s="one",a[5]={0},(*f1)()=fun,ch;
   ……
}
以下选项中对函数fun的正确调用语句是                   
  A)(*f1(a);
  B*f1(*s);
  Cfun(&a);
  Dch=*f1(s)

(4)
在函数调用过程中,如果函数funA调用了函数 funB,函数funB又调用了函数funA,则
  A) 称为函数的直接递归调用   
  B) 称为函数的间接递归调用
  C) 称为函数的循环调用     
  D) C语言中不允许这样的递归调用

(5)
有以下程序
void fun(int *a,int i,int j)
{ int t;
  if(i<j)
  { t=a[i];a[i]=a[j];a[j]=t;
    i++; j--;
    fun(a,i,j);
  }
}
main()
{ int x[]={2,6,1,8},i;
  fun(x,0,3);
  for(i=0;i<4;i++) printf("-",x[i]);
  printf("\n");
}
程序运行后的输出结果是
  A) 1 2 6 8   
  B)  8 6 2 1  
  C)  8 1 6 2  
  D) 8 6 1 2

(6)
有以下程序
#include <string.h>
main(int argc ,char *argv[ ])
int i,len=0;
   for(i=1;i<argc;i+=2)  len+=strlen(argv[i]);
   printf(“5d\n”,len);
}
经编译链接后生成的可执行文件是ex.exe,若运行时输入以下带参数的命令行
ex   abcd   efg   h3   k44
执行后输出结果是
  A) 14     
  B) 12    
  C) 8     
  D) 6

(7)
有以下程序
void f(int a[],int i,int j)
int  t;
 if(i<j)
   t=a[i]; a[i]=a[j];a[j]=t;
      f(a,i+1,j-1);
   }
}
main( )
int i,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<j)
 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) 6 5 4 3 2 1  
  B) 4 3 2 1 5 6  
  C) 4 5 6 1 2 3  
  D) 1 2 3 4 5 6

(9)
有以下程序
int f(int  n)
  if  (n==1)  return 1;
else return f(n-1)+1;
}
main()
  int i,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 <string.h>
main(int argc,char *argv[])
{ int  i,len=0;
for(i=1;i<argc;i++) len+=strlen(argv[i]);
printf(“%d\n”,len);
}
程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是:
ex1   abcd  efg  10<
回车>
则运行的结果是:
  A) 22   
  B) 17   
  C) 12    
  D) 9

(11)
有以下程序
int fa(int x)
{ return x*x;  }
int fb(int x)
{ return x*x*x;  }
int f(int (*f1)(),int (*f2)(),int x)
{ return f2(x)-f1(x);  }
main()
{ int i;
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提示符下键入:
PROG ABCDEFGH IJKL<
回车>,则输出结果为
  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;
   else s=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
     void func1(int  i);
     void func2(int  i);
     char st[]="hello,friend!";
     void func1(int  i)
     printf("%c",st[i]);
        if(i<3){i+=2;func2(i);}
     }
     void func2(int  i)
     printf("%c",st[i]);
        if(i<3){i+=2;func1(i);}
     }
     main()
     { int i=0;  func1(i); printf("\n");}

(18)
假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行: prg hello good<回车>,程序的输出结果是
  A) hello good  
  B) hg            
  C) hel          
  D) hellogood
     main()(int argc, char *argv[])
     int  i;
        if(argc<-0)return;
        for(i=1;i<argc;i++) printf("%c", *argv[i]);
     }

(19)
以下程序的输出结果是
  A) 5 4 3 2 1   
  B)0 1 2 3 4 5  
  C) 1 2 3 4 5   
  D) 5 4 3 2 1 0
main()
{ int w=5; fun(w); printf(“\n”);}
fun(int k)
{ if (k>0) fun(k-1);
 printf(“%d”,k);
}

(20)
若以下程序所生成的可执行文件名为filel.exe;当打入以下命令执行该程序时;
     FILEL CHINA BEIJING SHANGHAI
    
程序的输出结果是
  A) CHINA BEIJING SHANGHAI          
  B) FILEL CHINA BEIJING
  C) C B S                            
  D) F C B
         main(int argc,char *argv[])
         while(arge-->0)
              ++argv;printf("%s  ",*argv);}
        }

(21) C
语言规定,程序中各函数之间
  A) 既允许直接递归调用也允许间接递归调用
  B) 不允许直接递归调用也不允许间接递归调用
  C) 允许直接递归调用不允许间接递归调用
  D) 不允许直接递归调用允许间接递归调用

二、填空题:
1)以下程序运行后的输出结果是 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);
 }

(2)
下面程序的运行结果是:【2  
int  f( int a[], int  n)
{ if(n>1)  return a[0]+f(&a[1],n-1);
 else     return a[0];
}
main ( )
int aa[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(int n,int *s)
{ int f1,f2;
if(n = =1||n = =2) *s=1;
else { fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2;}  }
main()
{ int x;
fun(6,&x);  printf("%d\n",x);   }

(7)
下面程序的输出是【7
long fun5(int n)
{ long s;
if((n==1)||(n==2))
s=2;
else
s=n+fun5(n-1);
return(s);}
main()
{ long x;
x=fun5(4);
printf("%ld\n",x);}

(8)
下面h函数的功能是计算如下数学函数H的值。请填空。
 double  fgh(double( *f)(double a)< double( *g)(double b),
double x, double y)
{ return(
8 );} 
double h(double a, double b)
return(fgh( sin,cos,a,b)*fgh( 
9 )); } 

(9)
请读程序:
#include<stdio.h>
main( int argc, char *argv[])
{ int i;
printf( '%d\n", argc);
for( i=0; i<=argc+1; i++) printf( "%s ", argv[i]);
printf("\n");
}
若上面的程序编译、连接后生成可执行文件ABC.EXE,则输入以下命令行
abc file1 file2<CR>(<CR>
表示回车)
程序执行后的输出结果是 10

(10)
下面程序的输出结果是 11
#include <stdio.h>
fun( int x)
{ int p;
if( x==0||x==1) return(3);
p=x-fun( x-2);
return p;
}
main()
{ printf( "%d\n", fun(9));}

(11)
下面程序的输出结果是 12
#include <stdio.h>
funa( int a, int b)
{ return a+b;}
funb( int a, int b)
{ return a-b;}
sub( int (*t)(), int x, int y)
{ return((*t)( x,y));}
main()
{ int x, (*p)();
p=funa;
x=sub(p,9,3);
x+=sub(funb, 8, 3);
printf("%d\n", x);
}

(12)
设有如下程序:
#include<stdio.h>
main(int argc, char *argv[ ])
 { while( --argc>0) printf("%s",argv[argc]);
printf("\n");
}
    
假定上述程序经编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入PROG ABCD EFGH IJKL <CR>,则输出结果为 13

(13)
以下程序调用invert函数按逆序重新放置a数组中元素的值。a数组中的值在main函数中读入。
#include <stdio.h>
#define N 10
invert(int *s,int i,int j)
{ int t; if(i<j){ t=*(s+i); *(s+j)=(s+j);*(s+j)=t; invert(s,
14 ,j-1);}}
main()
{ int a[N],i;
  for(i=0;i<N;i + + ) scanf("%d",a+
15 );
  invert(a,0,N-1);
  for(i=0;i<N;i + + ) printf("%d",a[i]);
  printf("\n"); }


答案:
一、选择题:

01) 02) 03) 04) 05) 

06) 07) 08) 09) 10) D

11) 12) 13) 14) 15) 

16) 17) 18) 19) 20) A

21) 

二、填空题:

(1) 15

(2) 6

(3) 1 3 6

(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;
 int f(int  n)
 { static int  a=3;
   int  t=0;
   if(n%2){ static int  a=4;    t += a++;  }
   else   { static int  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);
 }
程序运行后的输出结果是
 A26   
 B28   
 C29   
 D24

(2)
以下叙述中正确的是
 A) 局部变量说明为static存储数,其生存期将得到延长
 B) 全局变量说明为static存储类,其作用域将被扩大
 C) 任何存储类的变量在未赋初值时,其值都是不确定的
 D) 形参可以使用的存储类说明符与局部变量完全相同

(3)
有以下程序
int a=2;
int f(int *A)
{return (*A) ++;}
main( )
int s=0;
     { int a=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)
有以下程序
int a=3;
main()
int s=0;
{ int a=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)
以下程序的输出的结果是
int x=3;
main()
  int i;
for (i=1;i<x;i++)  incre();
}
ncre()
  staic   int  x=1;
x*=x+1;
printf("  %d",x);
}
 A) 3      
 B) 2       
 C) 2       
 D) 2   5

(9 )
设有以下函数:
f ( int  a)
  int   b=0;
static int  c = 3;
b++;  c++;
return(a+b+c);
}
如果在下面的程序中调用该函数,则输出结果是
main()
  int  a = 2,  i;
for(i=0;i<3;i++)  printf(“%d\n”,f(a));
}
 A) 7    B)           C) 7            D) 7
                     10              7
         11             13              7

(10)
以下程序的输出结果是
int   a, b;
void fun()
  a=100; b=200;  }
main()
  int  a=5, b=7;
fun();
printf(“%d
d \n”, a,b);
}
 A) 100200   
 B) 57    
 C) 200100   
 D) 75

(11)
以下只有在使用时才为该类型变量分配内存的存储类说明是
 A) autostatic       
 B) auto register
 C) registerstatic      
 D) extern register

(12)
C语言中,函数的隐含存储类别是
 A) auto           
 B) static         
 C) extern        
 D) 无存储类别

(13)
下列程序的输出结果是
     A) 4            B) 6              C) 8             D) 10
       int b=2;
       int func(int *a)
       { b += *a; return(b);}
       main()
       { int a=2, res=2;
         res += func(&a);
         printf("%d \n",res);
       }

(14)
以下程序的输出结果是
 A) 6  
 B) 6    
 C) 6  15  15     
 D) 6  15
   int   d=1

   fun(int  p)
    static  int  d=5

       d+=p

       printf("%d "
d)
       return(d)

   }
   main(  )
    int   a=3
  printf("%d \n"fun(a+fun(d)))   }

(15)
以下程序运行后,输出结果是
 A) 8,15          
 B) 8,16           
 C) 8,17           
 D) 8,8
       func(int  a,  int   b)
        static int   m=0,i=2;
           i+=m+1;
           m=i+a+b;
           return(m);
        }
        main()
       int   k=4,m=1,p;
          p=func(k,m);printf("%d,",p);
          p=func(k,m);printf("%d\n",p);
       }

(16)
以下程序运行后,输出结果是
 A) 84            
 B) 99             
 C) 95             
 D) 44
       int   d=1;
       fun(int p)
       int   d=5;
          d+=p++;
          printf("%d,d);
       }
       main()
        int a=3;
           fun(a);
           d+=a++;
           printf("%d\n,d);
       }
(17)
以下叙述中不正确的是
 A) C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值。
 B) C中,在调用函数时,实在参数和对应形参在类型上只需赋值兼容。
 C) C中,外部变量的隐含类别是自动存储类别。
 D) C中,函数形参可以说明为register变量。

(18)
下面程序的输出是
int w=3;
main()
{ int w=10;  printf("%d\n",fun(5)*w);  }
fun(int k)
{ if(k==0) return w;
return(fun(k-1)*k);   }
 A)360        
 B)3600        
 C)1080        
 D)1200

(19)
下列程序执行后输出的结果是
#include <stdio.h>
f(int a)
int b=0;        static c=3:
a=c+ +,b+ +;
return (a);     }
main( )
int a=2,i,k;
for(i=0;i
2;i=+ +     k=f(a+ +);
printf("%d\n",k);     }

(20)
下列程序执行后输出的结果是
int d=1;
fun (int q)
{ int d=5;
d + =p + +;   printf("%d".d);     }
main( )
{ int a=3;
fun(a);
d + = a + +;     printf("%d\n",d);     }
 A) 8        
 B) 9          
 C) 9          
 D) 8    5

(21)
下面程序的输出是
 A) 3             
 B) 4              
 C) 6              
 D) 9
fun3(int x)
static int a=3;
a+=x;
return(a);}
main()
{ int k=2, m=1, n;
n=fun3(k);
n=fun3(m);
printf("%d\n",n);}

(22)
下面程序的输出是
 A) 1             
 B) 2              
 C) 7              
 D) 10
int m=13;
int fun2(int x, int y)
{ int m=3;
return(x*y-m);
}
main()
{ int a=7, b=5;
printf("%d\n",fun2(a,b)/m);}

(23)
请读程序:
#include<stdio.h>
void fun( int *s)
{ static int j=0;
do
s[j]+=s[j+1];
while(++j<2);
}
main()
{ int k, a[10]={1,2,3,4,5};
for(k=1; k<3; k++) fun(a);
for(k=0; k<5; k++) printf("%d", a[k]);
}
上面程序的输出结果是
 A) 34756         
 B) 23445          
 C) 35743          
 D) 12345

(24)
以下程序的输出结果是
# include <stdio.h>
main()
{ int k=4,m=1,p;
    p=func(k,m);  printf("%d,",p);  p=func(k,m);  printf("%d\n",p);}
func(a,b)
int a,b;
{ static int m=0,i=2;
 i+=m+1;  m=i+a+b;   return(m);  }
 A) 8,17       
 B) 8,16      
 C) 8,20     
 D) 8,8


二、填空题:
(1)
以下程序运行后的输出结果是 1
fun(int  a)
{
   int b=0;static  int c=3;
   b++;   c++;
   return  (a+b+c);
}
main()
{
   int i,a=5;
   for(i=0;i<3;i++)
      printf("%d %d  ",i,fun(a));
   printf("\n");
}

(2)
以下程序运行后的输出结果是 2
int   a=5;
fun(int  b)
static   int  a=10;
a+=b++;
printf("%d",a);
}
main()
int  c=20;
fun(c);
a+=c++;
printf("%d\n",a);
}

(3)
以下程序输出的最后一个值是【3
int  ff(int  n)
static  int  f=l;
f=f*n;
return  f;
}
main()
  int   i;
for(I=1;I<=5;I++  printf(“%d\n”,ff(i));
}

(4)
以下程序的输出结果是[4] 
void  fun()
   static   int   a=0;
a+=2;    printf(“%d”,a);
}
main()
int   cc;
for(cc=1;cc<4;cc++) fun()
printf(“\n”);
}

(5)
以下程序的运行结果是  [5]   
      #include <stdio.h>
      main()
      int  k=4, m=1, p;
         p=func(k,m); printf("%d,",p);
         p=func(k,m); printf("%d \n",p);
      }
      func(int  a, int  b)
      static  int m=0, i=2;
         i+=m+1;
         m=i+a+b;
         return m;
      }

(6)
以下程序的输出结果是【6
    #include    
    int   fun(int   x,int  y)
    { static  int   m=0,i=2;
      i+=m+1;
      m=i+x+y;
      return  m
    }
    main()
    { int   j=4,m=1,k;
      k=fun(j,m);        printf("%d,",k);
      k=fun(j,m);        printf("%d\n",k);
    }

(7)
下面程序的输出是【7
#define MAX 5
int a[MAX],k;
main()
{ fun1();fun3(); fun2();  fun3();
printf("\n");  }
fun1()
{ for(k=0;k<MAX;k++) a[k]=k+k; }
fun2()
{ int a[MAX],k;
for(k=0;k<5;k++)  a[k]=k; }
fun3()
{ int k;
for(k=0;k<MAX;k++) printf("%d",*(a+k)): }

(8)
阅读下列程序:
              #include<stdio.h>
              #define MAX_COUNT 4
              void fun();
              main()
              int count;
                  for (count=1; count<=MAX_COUNT; count++)  fun();
              }
              void fun()
              static int i;
                 i+=2;  printf("%d",i);
              }
上述程序的输出结果是 8 

答案:
一、选择题:
01) 
 02)  03)  04)  05) 

06)  07)  08)  09)  10) B

11) 
 12)  13)  14)  15) 

16)  17)  18)  19)  20) A

21) 
 22)  23)  24) 

二、填空题:
(1) 0   10   11   12

(2) 30 25

(3) 120

(4) 246

(5) 8,17

(6) 8,17

(7) o246802468

(8) 2468

 


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有