您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 模拟题 >> 正文    
  二级C语言教程章节测试11.对函数的进一步讨论 【注册男护士专用博客】          

二级C语言教程章节测试11.对函数的进一步讨论

www.nanhushi.com     佚名   不详 

    一、选择题
    (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);
     }
    程序运行后的输出结果是
     A)abcdefg  B)gfedcba  C)gbcdefa  D)abedcfg

    (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);
     }
    程序运行后的输出结果是
     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) 有以下程序
    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("%2d",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"); }


    答案:
    一、选择题:
    1) B 2) A 3) A 4) B 5) C 6) D 7) A 8) A 9) 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 22)  23)  24)  25)  26)  27)  28)  29)  30) 
    二、填空题:
     (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

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目