期末考试题(2)

一、填空   共5题 (共计20分)

第1题 (4.0分)        题号:1878        难度:易        第22章

以下程序运行后,输出的a值是【1】,b值是【2】,x的值是【3】,y的值是【4】。

# include <stdio.h>

void ex(int, int);

int main( )

{

        int a = 10, b =4;

        ex(a, b);

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

        return 0;

}

void ex(int x, int y)

{

        x++;

        ++y;

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

}

=======(答案1)=======

10

=========或=========

a=10

=======(答案2)=======

4

=========或=========

b=4

=======(答案3)=======

11

=========或=========

x=11

=======(答案4)=======

5

=========或=========

y=5

第2题 (4.0分)        题号:1885        难度:较易        第22章

以下程序输出结果是【1】。

#include "stdio.h"

union pw

{

        int i;

        char ch[2];

}a;

main()

{

        a.ch[0]=68;

        a.ch[1]=0;

        printf("%d\n",a.i);

}

=======(答案1)=======

68

第3题 (4.0分)        题号:1891        难度:中        第22章

以下程序输出结果是【1】。

# include <stdio.h>

int  age(int n)

{

        int c;

        if (n==1)

                c = 8;

        else

                c = age(n-1)+2;

        return c;

}

int main()

{

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

        return 0;

}

=======(答案1)=======

18

第4题 (4.0分)        题号:1893        难度:较难        第22章

以下程序输出结果是【1】。

#include <stdio.h>

int a=3,b=5;

int main()

{        int f(int);           

        int a=2,i;

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

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

        return 0;

}

int f(int a)

{         auto  int b=0;

           static int c=3;

        b=b+1;

           c=c+1;

        return(a+b+c);

}

=======(答案1)=======

7 8 9

第5题 (4.0分)        题号:1442        难度:难        第22章

程序运行结果是【1】.

main()

{int oddadd(int *pt,int n);

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

int *p,total;

p=&a[1];

total=oddadd(p,10);

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

}

oddadd(int *pt,int n)

{int i,sum=0;

for(i=1;i<n;i+=2,pt+=2) sum=sum+*pt;

return(sum);

}

=======(答案1)=======

30

二、程序填空   共3题 (共计20分)

第1题 (5.0分)        题号:461        难度:中        第9章

/*-------------------------------------------------------

【程序填空】

---------------------------------------------------------

题目:程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。

      函数fun的功能是输出这位学生的信息。

-------------------------------------------------------*/

#include     <stdio.h>

typedef  struct

{  

        int  num;

        char  name[9];

        char  sex;

        struct { int  year,month,day ;} birthday;

        float  score[3];

}STU;

/***********SPACE***********/

void show(STU  【?】)

{  

        int  i;

        printf("\n%d %s %c %d-%d-%d", tt.num, tt.name, tt.sex,

            tt.birthday.year, tt.birthday.month, tt.birthday.day);

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

/***********SPACE***********/

                printf("%5.1f", 【?】);

        printf("\n");

}

main( )

{        

        STU  std={ 1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0 };

        printf("\nA student data:\n");

/***********SPACE***********/

        show(【?】);

}

答案:

=======(答案1)=======

tt

=======(答案2)=======

tt.score[i]

=======(答案3)=======

std

第2题 (10.0分)        题号:365        难度:中        第10章

/*-------------------------------------------------------

【程序填空】

---------------------------------------------------------

功能:将s所指字符串的正序和反序进行连接,形成一个新串放在t

      所指的数组中。

例如:当s串为"ABCD"时,则t串的内容应为"ABCDDCBA"。

-------------------------------------------------------*/

#include  <conio.h>

#include  <stdio.h>

#include  <string.h>

void fun (char  *s, char  *t)

{

  int   i, d;

  /***********SPACE***********/

  d = 【?】;

  /***********SPACE***********/

  for (i = 0; i<d; 【?】)  

    t[i] = s[i];

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

    /***********SPACE***********/

    t[【?】] = s[d-1-i];

  /***********SPACE***********/

  t[【?】] ='\0';

}

main()

{

  char  s[100], t[100];

  printf("\nPlease enter string S:"); scanf("%s", s);

  fun(s, t);

  printf("\nThe result is: %s\n", t);

}

答案:

=======(答案1)=======

strlen(s)

=======(答案2)=======

i++

=========或=========

i=i+1

=========或=========

i+=1

=========或=========

++i

=======(答案3)=======

d+i

=========或=========

i+d

=======(答案4)=======

2*d

=========或=========

d*2

=========或=========

i+d

=========或=========

d+i

第3题 (5.0分)        题号:439        难度:中        第11章

/*-------------------------------------------------------

【程序填空】

---------------------------------------------------------

题目:给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件

      中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。

-------------------------------------------------------*/

#include  <stdio.h>

void fun(char  *s, int  a, double  f)

{

/***********SPACE***********/

        【?】 fp;

        char  str;

        fp = fopen("file1.txt", "w");

        fprintf(fp, "%s %d %f\n", s, a, f);

        fclose(fp);

        fp = fopen("file1.txt", "r");

        printf("\nThe result :\n\n");

        str = fgetc(fp);

/***********SPACE***********/

        while (!feof(【?】))

        {

/***********SPACE***********/

                putchar(【?】);

                str = fgetc(fp);  

        }

        putchar('\n');

        fclose(fp);

}

main()

{

        char  a[10]="Hello!";  

        int  b=12345;

        double  c= 98.76;

        fun(a,b,c);

}

答案:

=======(答案1)=======

FILE *

=======(答案2)=======

fp

=======(答案3)=======

str

三、程序改错   共3题 (共计20分)

第1题 (5.0分)        题号:222        难度:中        第8章

/*------------------------------------------------------        

【程序改错】

--------------------------------------------------------

功能:计算并输出k以内最大的10个能被13或17整除的自然数之和。

      k的值由主函数传入。

例如:若k的值为500,则函数值为4622。

------------------------------------------------------*/

#include <stdio.h>

int fun(int k)

{

  int m=0,mc=0;

  /**********FOUND**********/

  while ((k>=2)||(mc<10))

  {

    /**********FOUND**********/

    if((k%13=0)||(k%17=0))

    {

      m=m+k;

      mc++;

    }

    /**********FOUND**********/

    k++;

  }

  /**********FOUND**********/

  return  ;

}

main()

{

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

}

答案:

=======(答案1)=======

while ( (2<=k) && (mc<10) )

=========或=========

while ( (k>=2) && (mc<10) )

=========或=========

while ( (2<=k) && (mc<=9) )

=========或=========

while ( (k>=2) && (mc<=9) )

=======(答案2)=======

if(!( k%17!=0 || k%13!=0 ))

=========或=========

if( k%13==0 || k%17==0)

=======(答案3)=======

k--;

=========或=========

k=k-1;

=========或=========

k-=1;

=======(答案4)=======

return  m;

=========或=========

return(m);

第2题 (10.0分)        题号:305        难度:中        第10章

/*-------------------------------------------------------

【程序改错】

---------------------------------------------------------

题目:下列给定程序中,函数fun的功能是:找出100~n(不大于1000)之间三个位上的数

      字都相等的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。

-------------------------------------------------------*/

#include  <stdio.h>

#define  N  100

/***********FOUND***********/

int  fun(int s, int  n)

{

        int i,j,k,a,b,c;

        j=0;

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

        {

/***********FOUND***********/

                k=n;  

                a=k%10;  

                k/=10;   

/***********FOUND***********/

                b=k/10;  

                c=k/10;  

                if(a==b && a==c)

                        s[j++]=i;

        }

        return  j;

}

void main()

{  

/***********FOUND***********/

        int a[N], n, num, i;

        do

        {

                printf("\nEnter  n(<=1000) :");  

                scanf("%d",&n);

        }

        while(n > 1000);

        num= fun(a,n);

        printf("\n\nThe result :\n");

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

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

        printf("\n\n");

}

答案:

=======(答案1)=======

int  fun(int *s, int  n)

=======(答案2)=======

k=i;

=======(答案3)=======

b=k%10;

=======(答案4)=======

int a[N], n, num=0, i;

第3题 (5.0分)        题号:207        难度:难        第10章

/*------------------------------------------------------        

【程序改错】

--------------------------------------------------------

功能:为一维数组输入10个整数;将其中最小的数与第一个数

      对换,将最大的数与最后一个数对换,输出数组元素。

------------------------------------------------------*/

#include <stdio.h>

main()

{

  int a[10];

  void input();

  void output();

  void max_min();

  input(a,10);

  max_min(a,10);

  output(a,10);

}

void input(int *arr,int n)

{

  int *p,i;

  p=arr;

  printf("please enter 10 integers:\n");

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

  /**********FOUND**********/

  scanf("%d",p);

}

void max_min(int *arr,int n)

{

  int *min,*max,*p,t;

  min=max=arr;

  for(p=arr+1;p<arr+n;p++)

    /**********FOUND**********/

    if(*p<*max)

       max=p;

    else if(*p<*min) min=p;

      t=*arr;*arr=*min;*min=t;

/**********FOUND**********/

  if(max=arr) max=min;

  t=*(arr+n-1);

  *(arr+n-1)=*max;

  *max=t;

}

void output(int *arr,int n)

{

  int *p,i;

  p=arr;

  printf("The changed array is:\n");

  /**********FOUND**********/

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

    printf("%3d",*p++);

  printf("\n");

}

答案:

=======(答案1)=======

scanf("%d",p ++);

=========或=========

scanf("%d",arr[i]);

=========或=========

scanf("%d",p+i);

=========或=========

scanf("%d",arr+i);

=======(答案2)=======

if(*p>*max)

=========或=========

if(*max<*p)

=======(答案3)=======

if( max == arr )

=======(答案4)=======

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

=========或=========

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

=========或=========

for(p=arr;p<arr+n;)

=========或=========

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

=========或=========

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

=========或=========

for(p=arr;p<=arr+n-1;)

=========或=========

for(p=arr;arr+n-1>=p;)

四、程序设计   共4题 (共计40分)

第1题 (10.0分)        题号:490        难度:易        第3章

/*------------------------------------------------

【程序设计】

--------------------------------------------------

功能:编写函数fun,求任一整数m的n次方。

------------------------------------------------*/

#include <stdio.h>

void  wwjt();

long fun(int m,int n)

{

  /**********Program**********/

  

  

  

  

  

  

  /**********  End  **********/

}

main()

{

  int m,n;

  long  s;

  long fun(int,int);

  printf("输入m和n的值:");

  scanf("%d,%d",&m,&n);

  s=fun(m,n);

  printf("s=%ld\n",s);

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int n;

  int i[2];

  long o;

  IN=fopen("in.dat","r");

  if(IN==NULL)

  {

    printf("Read FILE Error");

  }

  OUT=fopen("out.dat","w");

  if(OUT==NULL)

  {

    printf("Write FILE Error");

  }

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

  {    

    fscanf(IN,"%d",&i[n]);

  }

  o = fun(i[0],i[1]);

  fprintf(OUT,"%ld\n",o);

  

  fclose(IN);

  fclose(OUT);

}

答案:----------------------

long int x=1;

  int i;

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

       x=x*m;

  return x;

----------------------

第2题 (10.0分)        题号:470        难度:中        第3章

/*------------------------------------------------

【程序设计】

--------------------------------------------------

功能:用函数实现字符串的复制, 不允许用strcpy()函数。

------------------------------------------------*/

#include <stdio.h>

void  wwjt();

void copy(char str1[],char str2[])

{

  /**********Program**********/

  

  

  

  

  

  

  /**********  End  **********/

}

main()

{

  void copy();

  char c1[40],c2[40];

  gets(c1);

  copy(c1,c2);

  puts(c2);

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  char i[100];

  char o[100];

  IN=fopen("in.dat","r");

  if(IN==NULL)

  {

    printf("Read FILE Error");

  }

  OUT=fopen("out.dat","w");

  if(OUT==NULL)

  {

    printf("Write FILE Error");

  }

  fscanf(IN,"%s",i);

  copy(i,o);

  fprintf(OUT,"%s\n",o);

  fclose(IN);

  fclose(OUT);

}

答案:----------------------

int i;

    for(i=0;str1[i]!='\0';i++)

       str2[i]=str1[i];

    str2[i]='\0';

----------------------

第3题 (10.0分)        题号:362        难度:较难        第3章

/*-------------------------------------------------------

【程序设计】

---------------------------------------------------------

题目:学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中。

      请编写函数fun,其功能是:把指定分数范围内的学生数据放在b所指的数组中,分

      数范围内的学生人数由函数值返回。

例如:输入的分数是60、69,则应当把分数在60~69的学生数据输出,包含60分和69分的学

      生数据。主函数中把60放在low中,把69放在heigh中。

注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

      你编写的若干语句。

-------------------------------------------------------*/

#include <stdio.h>

#define   N   16

void wwjt();

typedef  struct

{  

        char  num[10];

        int   s;

} STREC;

int  fun( STREC  *a,STREC *b,int l, int h )

{

        /**********Program**********/

        /**********  End  **********/

}

main()

{  

        STREC  s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

                {"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},

                {"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},

                {"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};

        STREC  h[N];

        int  i,n,low,heigh,t;

        printf("Enter 2 integer number low & heigh :  ");

        scanf("%d%d", &low,&heigh);

        if ( heigh< low )

        {

                t=heigh;

                heigh=low;

                low=t;

        }

        n=fun( s,h,low,heigh );

        printf("The student's data between %d--%d :\n",low,heigh);

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

                printf("%s  %4d\n",h[i].num,h[i].s);

        printf("\n");

        wwjt();

}

void wwjt()

{

        FILE *in, *out ;

        STREC  s[N],h[N];

        int i,j,n;

        in=fopen("in.dat","r");

        if(in==NULL)

        {

                printf("Please Verify The Currernt Dir..It May Be Changed");

        }

        out=fopen("out.dat","w");

        if(out==NULL)

        {

                printf("Please Verify The Current Dir.. It May Be Changed");

        }

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

        {

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

                {

                        fscanf(in,"%s %d",&s[i].num,&s[i].s);

                }

                n=fun( s,h,80,98 );

                fprintf(out,"%d\n",n);

        }

        fclose(in);

        fclose(out);

}

答案: int i,j=0;

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

if(a[i].s>=l&&a[i].s<=h)

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

return j;

第4题 (10.0分)        题号:275        难度:难        第3章

/*-------------------------------------------------------

【程序设计】

---------------------------------------------------------

  题目:C语言编程题实现以下功能:

  1) 从键盘输入10个学生的成绩,计算平均成绩ave

  2) 统计及格人数pass,计算高于平均分的学生的人数better

  3) 将10个学生成绩排名。

  

-------------------------------------------------------*/

#include "stdio.h"

#define N 10

void main()

{

        int i,j,a[N],ave,sum=0,pass=0,better=0,t;

/**********Program**********/

/**********  End  **********/

        printf("平均分:%d\n及格人数%d\n高于平均分人数%d\n",ave,pass,better);

}

答案:        for(i=0;i<N;i++)

        {

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

                sum+=a[i];

        }

        ave=sum/N;

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

        {

                if(a[i]>=60)

                        pass++;

                if(a[i]>ave)

                        better++;

        }

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

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

                {

                        if (a[i]<a[j])

                        {

                                t=a[i];

                                a[i]=a[j];

                                a[j]=t;

                        }

                }

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

                {

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

                }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值