您的位置: 网站首页 > 程序开发 > C语言程序设计案例教程 > 第七章 函数程序设计 > 【7.5 思考与练习】

7.5 思考与练习

 

思考与练习

1选择题

1)以下函数的类型是     

ggg(float x)

{

    printf("\n%d",x*x);

}

A.与参数x相同的类型                                 Bvoid

Cint                                                               D.无法确定

2C语言规定,程序中各函数之间     

A.既允许直接递归调用,也允许间接递归调用

B.不允许直接递归调用,也不允许间接递归调用

C.允许直接递归调用,不允许间接递归调用

D.不允许直接递归调用,允许间接递归调用

3)以下程序的输出结果是      

#include <stdio.h>

long fib(int n)

{

    if(n>2)  return(fib(n-1)+fib(n-2));

    else  return(2);

}

main()

{

    printf("%d\n",fib(3));

}

A2                           B4                            C6                     D8

4)以下程序的输出结果是     

#include <stdio.h>

int f(int a,int b)

{

    int c;

    if(a>b) c=1;

    else

        if(a==b) c=0;

        else c=-1;

    return(c);

}

main()

{

    int i=2,p;

    p=f(i,i+1);

    printf("%d",p);

}

A-1                         B0                            C1                     D2

5)若程序执行时,输入如下数据:则以下程序的输出结果是     

#include <stdio.h>

main()

{

    char s1[10],s2[10],s3[10],s4[10];

    scanf("%s%s",s1,s2);

    gets(s3);

    gets(s4);

    puts(s1);

    puts(s2);

    puts(s3);

    puts(s4);

}

输入的数据:

aaaa  bbbb<CR>       

cccc  dddd<CR>

Aaaaa                       Baaaa                       Caaaa                Daaaa bbbb

        bbbb                bbbb                 bbbb            cccc

        cccc                 cccc                 dddd              dddd

        cccc                 dddd                 dddd             eeee

6)以下程序片段(字符串内无空格)的输出结果是     

printf("%d\n",strlen("ATS\n012\1\\"));

A11                         B10                          C9                     D8

7)以下程序的输出结果是     

#include <stdio.h>

func(int a,int b)

{

    int c;

    c=a+b;

    return c;

}

main()

{

    int x=6,y=7,z=8,r;

    r=func((x--,y=x+y+1),z--);

    printf("%d\n",r);

}

A11                         B20                          C21                   D31

8)以下程序的输出结果是     

#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]);

}

A34756                    B23445                     C35745              D12345

9)以下程序的输出结果是     

#include <stdio.h>

f(int b[],int n)

{

    int i,r;

    r=1;

    for(i=0;i<=n;i++)

        r=r*b[i];

    return r;

}

main()

{

    int x,a[]={2,3,4,5,6,7,8,9};

    x=f(a,3);

    printf("%d\n",x);

}

A720                        B120                        C24                   D6

10)以下程序的输出结果是     

#include <stdio.h>

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);

}

A3                          B4                            C6                     D9

11)以下程序的输出结果是     

#include <stdio.h>

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);

}

A1                          B2                            C7                     D10

12)以下说法中正确的是     

AC语言程序总是从第一个函数开始执行

B.在C语言程序中,要调用的函数必须在main( )函数中定义

CC语言程序总是从main( )函数开始执行

DC语言程序中的main( )函数必须放在程序的开始部分

13)以下程序的输出结果是     

#include <stdio.h>

int f(int a)

{

    int b=0;

    static int 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);

}

A3                          B0                            C5                     D4

14)以下程序的输出结果是     

#include <stdio.h>

int d=1;

fun (int q)

{

    int d=5;

    d+=q++;

    printf("%d",d);

}

main()

{

    int a=3;

    fun(a);

    d+=a++;

    printf("%d\n",d);

}

A8                          B9                            C9                     D8

    4                  6                    4               5

15)以下程序的输出结果是     

#include <stdio.h>

fun(int h)

{

    static int a[3]={1,2,3};

    int k;

    for(k=0;k<3;k++)

        a[k]+=a[k]-h;

    for(k=0;k<3;k++)

        printf("%d",a[k]);

    printf("\n");

    return(a[h]);

}

main()

{

    int t=1;

    fun(fun(t));

}

A1,2,3,                   B1,3,5,                            C1,3,5,                     D1,3,5,

         1,5,9,               1,3,5,                0,4,8,            -1,3,7,

16)以下程序的输出结果是     

#include <stdio.h>  

int w=3;

int fun(int k)

{

    if(k==0) return w;

    return(fun(k-1)*k);

}

main()

{

    int w=10;

    printf("%d\n",fun(5)*w);

}

A360                      B3600                      C1080               D1200

17)函数调用语句strcat(strcpy(str1,str2),str3)的功能是     

A.将字符str1复制到字符串str2中,再连接到字符串str3之后

B.将字符串str1连接到字符串str2之后,再复制到字符串str3

C.将字符串str2复制到字符串str1中,再将字符串str3连接到字符str1之后

D.将字符串str2连接到字符串str1之后,再将字符串str1复制到字符串str3

18)以下对C语言函数的描述中,正确的是     

AC语言中调用函数时,只能把实参值传送给形参,形参的值不能传送给实参

BC语言函数既可以嵌套定义,又可以递归调用

CC语言函数必须有返回值,否则不能被调用

D.在C语言程序中,有调用关系的所有函数必须放在同一个源程序文件中

19)以下叙述中,不正确的是     

A.在C语言中,函数中的自动变量可以赋初值,每调用一次,赋一次初值

B.在C语言中,在调用函数时,实参和对应的形参在类型上只须赋值兼容

C.在C语言中,外部变量的隐含类别是自动存储类别

D.在C语言中,函数的形参可以说明为register变量

20)以下叙述中,不正确的是     

A.在不同的函数中,可以使用相同名称的变量

B.函数中的形式参数是局部变量

C.在一个函数内定义的变量,只在本函数范围内有效

D.在一个函数内的复合语句中定义的变量,只在本函数范围内有效

21)以下程序的输出结果是     

#include <stdio.h>

viod fun(int a,int b,int c)

{

    a=456;

    b=567;

    c=678;

}

main()

{

    int x=10,y=20,z=30;

    fun (x,y,z);

    printf("%d,%d,%d\n",x,y,z);

}

A30,20,10               B10,20,30          C456,567,678       D678,567,456

22)以下程序的输出结果是     

#include <stdio.h>

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;

}

A6                          B7                            C8                     D9

23)以下程序的输出结果是     

#include <stdio.h>

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)));

}

A6  9  9               B6  6  9                 C6  15  15       D6  6  15

24)以下程序的输出结果是     

#include <stdio.h>

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);

}

A8,17                            B8,16                       C8,20                D8,8

25)在C语言中,形参的默认存储类别是     

A.自动(auto                                                 B.静态(static

C.寄存器(register                                          D.外部(extern

26)以下函数调用语句含有      个实参。

func((exp1,exp2),(exp3,exp4,exp5));

A1                          B2                            C4                     D5

27sizeof(double)     

A.一种函数调用                                        B.一个双精度型表达式

C.一个整型表达式                                      D.一个不合法的表达式

28)若有以下调用语句,则不正确的fun( )函数的首部是     

#include <stdio.h>

main()

{  

    ...

    int a[50],n;

    ...

    fun(n,&a[9]);

    ...

}

Avoid fun(int m, int x[ ])                                   Bvoid fun(int s, int h[41])

Cvoid fun(int n, int a)                                 Dvoid fun(int p, int *s)

29)以下函数调用语句含有      个实参。

func(rec1,rec2+rec3,(rec4,rec5));

A3                          B4                            C5                     D.有语法错

30)以如下程序的输出结果是     

#include <stdio.h>

int func(int a,int b)

{

    return(a+b);

}

main()

{

    int x=2,y=5,z=8,r;

    r=func(func(x,y),z);

    printf("%d\n",r);

}

A12                        B13                          C14                   D15

31)以下函数的返回值是     

char fun(char *p)

{

    return  p; 

}

A.不确定的值                                             B.形参p中存放的地址值

B.一个临时存储单元的地址                        D.形参p自身的地址值

32)以下所列的各函数首部中,正确的是     

Avoid play(var :integer,var b:integer)           Bvoid play(int a,b)

Cvoid play(int a,int b)                                 DSub play(a as integer,b as integer)

33)以下程序的输出结果是     

#include <stdio.h>

fun(int x,int y,int z)

{

    z=x*x+y*y;

}

main()

{

    int a=31;

    fun(5,2,a);

    printf("%d",a);

}

A0                         B29                          C31                   D.不确定的值

34)以下程序的输出结果是     

#include <stdio.h>

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));

}

A1                          B2                            C3                     D4

35)在调用函数时,如果实参是简单变量,它与对应的形参之间的数据传递方式是

     

A.地址传递                                                B.单向值传递

C.由实参传给形参,再由形参传回实参              D.由用户指定的

36)以下函数值的类型是     

fun(float x)

{

    float y;

    y=3*x-4;

    return y;

}

Aint                        B.不确定                   Cvoid                Dfloat

37)设有如下函数:

f(int a)

{

    int b=0;

    static int c=3;

    b++;  c++;

    return(a+b+c);

}

如果在以下程序中调用该函数,则输出结果是     

#include <stdio.h>

main()

{

    int a=2,i;

    for(i=0;i<3;i++)

        printf("%d\n",f(a));

}

A7                          B7                            C7                     D7

        8                   9                   10              7

        9                   11                  13              7

38)以下程序的输出结果是     

#include <stdio.h>

int a,b;

void fun()

{

    a=100;

    b=200; 

}

main()

{  

    int a=5,b=7;

    fun();

    printf("%d%d\n",a,b);

}

A100200                 B57                          C200100            D75

39)若有如下程序:

#include <stdio.h>

void f(int n);

main()

{

    void f(int n);

    f(5);

}

void f(int n)

{

    printf("%d\n",n);

}

则以下叙述中,不正确的是     

A.若只在主函数中对函数f( )进行说明,则只能在主函数中正确调用函数f( )

B.若在主函数前对函数f( )进行说明,则在主函数和其后的其他函数中均可正

确调用函数f( )

C.对于以上程序,编译时系统会提示出错信息,提示对函数f( )重复说明

D.函数f( )无返回值,所以可用void将其类型定义为无值型

40)以下程序的输出结果是     

#include <stdio.h>

f(int b[],int m,int n)

{

    int i,s=0;

    for(i=m;i<n;i=i+2)

        s=s+b[i];

    return s;

}

main()

{

    int x,a[]={1,2,3,4,5,6,7,8,9};

    x=f(a,3,7);

    printf("%d\n",x);

}

A10                        B18                          C8                     D15

41)以下程序的输出结果是     

#include <stdio.h>

main()

{

    int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;

    for(i=0;i<3;i++)

       for(j=i;j<=i;j++)

           t=t+b[i][b[j][j]];

    printf("%d\n",t);

}

A3                         B4                            C1                     D9

42)以下程序的输出结果是     

#include <stdio.h>

int x=3;

incre()

{

    static int x=1;

    x*=x+1;

    printf("  %d",x);

}

main()

{

    int i;

    for(i=1;i<x;i++)

        incre();

}

A3 3                       B2 2                         C2 6                  D2 5

43)以下叙述中,正确的是     

A.构成C语言程序的基本单位是函数

B.可以在一个函数中定义另一个函数

Cmain( )函数必须放在其他函数之前

D.所有被调用的函数,一定要在调用之前进行定义

44)以下程序的输出结果是     

#include <stdio.h>

float fun(int x,int y)

{

    return(x+y);

}

main()

{

    int a=2,b=5,c=8;

    printf("%3.0f\n",fun(int)fun(a+c,b),a-c);

}

A.编译出错             B9                            C21                   D9.0

45)以下程序的输出结果是     

#include <stdio.h>

int f(int n)

{

    if(n==1)  return 1;

    else return f(n-1)+1;

}

main()

{

    int i,j=0;

    for(i=1;i<3;i++)

        j+=f(i);

    printf("%d\n",j);

}

A4                          B3                            C2                     D1

46)以下程序中,函数reverse( )的功能是将a所指数组中的内容进行逆置。该程序的输出结果是     

#include <stdio.h>

void reverse(int a[],int n)

{

    int i,t;

 

    for(i=0;i<n/2;i++)

    {

        t=a[i];

        a[i]=a[n-1-i];

        a[n-1-i]=t;

    }

}

main()

{

    int b[10]={1,2,3,4,5,6,7,8,9,10};

    int i,s=0;

 

    reverse(b,8);

    for(i=6;i<10;i++)

        s+=b[i];

    printf("%d\n",s);

}

A22                        B10                          C34                   D30

47)以下程序中,函数f( )的功能是将n个字符串按由大到小的顺序进行排序。该程序的输出结果是     

#include <stdio.h>

#include <string.h>

void f(char p[][10],int n)

{

    char t[20];

    int i,j;

    for(i=0;i<n-1;i++)

        for(j=i+1;j<n;j++)

            if(strcmp(p[i],p[j])<0)

            {

                strcpy(t,p[i]);

                strcpy(p[i],p[j]);

                strcpy(p[j],t);

            }

}

main()

{

    char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};

    int i;

    f(p,5);

    printf("%d\n",strlen(p[0]));

}   

A6                          B4                            C5                     D3

2填空题

1)以下的findmax( )函数的功能是返回数组s中最大元素的下标,数组中元素的个数由t传入。

findmax(int s[],int t)

{

    int k,p;

    for(p=0,k=p;p<t;p++)

        if(s[p]>s[k])      ;

    return k;

}

2)以下程序的输出结果是     

#include <stdio.h>

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);

}

3)以下invert( )函数的功能是将一个字符串str的内容倒置。

#include <string.h>

void invert(char str[])

{

    int i,j,      ;

    for(i=0,      ;i<j;i++,j--)

    {

        k=str[i];

        str[i]=str[j];

        str[j]=k;

    }

}

4)以下程序的功能是通过函数average( )计算数组中各元素的平均值。

#include <stdio.h>

float average(int a[],int n)

{

    int i;

    float avg=0.0;

    for(i=0;i<n;i++)

        avg=avg+      ;

    avg=      ;

    return avg;

}

main()

{

    int i,a[5]={2,4,6,8,10};

    float mean;

    mean=average(a,5);

    printf("mean=%f\n",mean);

}

5)以下fun( )函数的功能是将形参x的值转换成二进制数,所得二进制数的每一位数字放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其他依此类推。

fun(int x,int b[])

{

    int k=0,r;

    do

    {

        r=x%      ;

        b[k++]=r;

        x/=      ;

    } while(x);

}

6)若函数fun( )的类型为void型,且有以下定义和调用语句:

#include <stdio.h>  

#define M 50

main()

{

    int a[M];

    ...

    fun(a);

    ...

}

定义fun( )函数首部可以用三种不同的形式分别为:                 

7)函数fun( )的功能是使一个字符串按逆序存放。

void fun (char str[])

{

    char  m;

    int  i,j;

    for(i=0,j=strlen(str);      ;i++,j--)

    {

        m=str[i];

        str[i]=      ;

        str[j-1]=m; 

    }

    printf("%s\n",str);

}

8)以下程序的输出结果是     

#include <stdio.h>

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);

}

9)以下程序的功能是求a数组中所有素数的和,函数isprime( )用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。

#include <stdio.h>

int isprime(int x)

{

    int i;

    for(i=2;i<=x/2;i++)

        if(x%i==0) return (0);

         ;

}

main()

{

    int i,a[10],sum=0;

    printf("Enter 10 numbers:\n");

    for(i=0;i<10;i++)

    scanf("%d",&a[i]);

    for(i=0;i<10;i++)

    if(      )==1)

    {

        printf("%d",a[i]);

        sum+=a[i];

    }

    printf("\nThe sum=%d\n",sum);

}

10以下程序的功能是调用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[i]=s[j];

       s[j]=t;

       invert(s,      ,j-1);

    }

}

main()

{

    int a[N],i;

    for(i=0;i<N;i++)

    scanf("%d",      );

    invert(a,0,N-1);

    for(i=0;i<N;i++)

        printf("%d",a[i]);

    printf("\n");

}

11)设在主函数中有以下定义和函数调用语句,且fun( )函数为void型。写出fun( )函数的首部      ,要求形参名为b

#include <stdio.h>

main()

{

    double s[10][22];

    int  n;

    ...

    fun(s);

    ...

}

12)以下程序的输出结果是     

#include <stdio.h>

void fun(int x,int y)

{

    x=x+y; y=x-y; x=x-y;

    printf("%d,%d,",x,y);

}

main()

{

    int x=2,y=3;

    fun(x,y);

    printf("%d,%d\n",x,y);

}

13)以下程序的输出结果是     

#include <stdio.h>

void fun()

{

    static int a=0;

    a+=2;

    printf("%d",a);

}

main()

{

    int cc;

    for(cc=1;cc<4;cc++)

        fun();

    printf("\n");

}

14)以下程序输出的最后一个值是     

#include <stdio.h>

int ff(int n)

{

    static int f=1;

    f=f*n;

    return f;

}

main()

{

    int i;

    for(i=1;i<=5;i++)

        printf("%d\n",ff(i));

}

15)以下函数的功能是求xy次方。

double fun(double  x,int y)

{

    int i;

    double z;

    for(i=1,z=x;i<y;i++) z=z*      ;

    return z;

}

16)若已有定义语句:int a[10], i;,以下fun( )函数的功能是:在第一个循环中,给前10个数组元素依次赋值为12345678910;在第二个循环中,使a数组前10个元素中的值对称折叠,变成1234554321

fun(int a[])

{

    int i;

    for(i=1;i<=10;i++)

             =i;

    for(i=0;i<5;i++)

             =a[i];

}

17fun( )函数的功能是:对a所指的NN列的矩阵,先找出各行中的最大值,再将这N个最大值中的最小值作为函数值返回。

#include  <stdio.h>

#define N 100

int fun(int(*a)[N])

{

    int  row,col,max,min;

    for(row=0;row<N;row++)

    {

        for(max=a[row][0],col=1;col<N;col++)

            if(      ) max=a[row][col];

        if(row==0)min=max;

        else if(      )min=max;

    }

    return min;

}

3上机操作题

1)编写一个函数,统计字符串中非数字字符的个数。

2)编写一个函数,计算n!的值。

3)编写一个函数,求出三个数中的最大数。

4)编写一个函数,求任意一个整数的逆序数。

5)编写一个函数,求两个整数的最小公倍数。