期末试题(5)

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

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

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

# include <stdio.h>

void ex(int, int);

int main( )

{

        int a = 10, b = 20;

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

20

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

b=20

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

11

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

x=11

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

21

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

y=21

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

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

#include "stdio.h"

union pw

{

        int i;

        char ch[2];

}a;

main()

{

        a.ch[0]=97;

        a.ch[1]=0;

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

}

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

97

第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分)        题号:1894        难度:较难        第22章

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

#include <stdio.h>

int a=10,b=20;

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分)        题号:1462        难度:难        第22章

程序运行时若依次输入25,3,40,则输出结果是【1】.

main()

{int *p1,*p2,*p3;

int i,j,k,t;

scanf("%d%d%d",&i,&j,&k);

p1=&i;

p2=&j;

p3=&k;

if(*p1<*p2){t=*p1;*p1=*p2;*p2=t;}

if(*p1<*p3){t=*p1;*p1=*p3;*p3=t;}

if(*p2<*p3){t=*p2;*p2=*p3;*p3=t;}

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

}

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

25

二、程序填空   共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分)        题号:334        难度:中        第10章

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

【程序填空】

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

功能:将一个字符串中下标为m的字符开始的全部字符复制成为另

      一个字符串。

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

#include<stdio.h>

void strcopy(char *str1,char *str2,int m)

{

   char *p1,*p2;

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

   【?】;  

   p2=str2;

   while(*p1)

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

   【?】;

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

   【?】;

}

main()

{

   int m;

   char str1[80],str2[80];

   gets(str1);

   scanf("%d",&m);

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

   【?】;

   puts(str1);puts(str2);

}

答案:

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

p1= str1 + m

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

*p2++=*p1++

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

*(p2++)=*(p1++)

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

*p2=*p1,p2++,p1++

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

*p2=*p1++,p2++

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

*p2++=*p1,p1++

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

*p2='\0'

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

*p2=0

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

*p2=NULL

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

strcopy(str1,str2,m)

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

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

【程序填空】

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

说明:下面程序的功能是统计文件fname.dat中字符个数,

      现文件中的内容为: 1234567890

      请填写程序所缺内容。

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

#include  "stdio.h"

void  main()

{

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

  【?】*fp;

   long  num=0L;

      if((fp=fopen("fname.dat","r"))==NULL)

       {  

         printf("Open error\n");  

       }

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

       while(【?】)

        {  

          fgetc(fp);  

          num++;

        }

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

     printf("num=%ld\n",【?】);

     fclose(fp);

 }

答案:

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

FILE

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

!feof(fp)

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

feof(fp)==0

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

num-1

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

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

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

【程序改错】

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

功能:找出大于m的最小素数,并将其作为函数值返回。

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

#include <math.h>

#include <stdio.h>

int fun( int m)

{

  int i,k;

  for(i=m+1;;i++)

  {

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

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

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

      if(i%k!=0) break;

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

        if(k<i)

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

          return k;

  }

}

main()

{

  int n;

  scanf("%d",&n);

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

}

答案:

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

for(k=2;k<i;k++)

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

for(k=2;i>k;k++)

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

for(k=2;k<=i-1;k++)

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

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

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

for(k=2;i/2>k;k++)

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

for(k=2;k<=sqrt(i);k++)

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

for(k=2;sqrt(i)>=k;k++)

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

if( i%k == 0 ) break;

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

if(!(i%k)) break;

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

if(i<=k)

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

if(k>=i)

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

if( k == i )

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

if(k>=i/2)

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

if(k=i/2)

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

if(k>sqrt(i))

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

return i;

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

return (i);

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

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

【程序改错】

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

题目:下列给定程序中函数fun的功能是:删除s所指字符中所有的小写字母c 。

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

#include <stdio.h>

void  fun( char  *s )

{   

        int  i,j;

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

                if(s[i]!='c')

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

                        s[j]=s[i];

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

                s[i]=0;

}

main()

{

        char  s[80];

        printf("Enter a string:       ");

        gets(s);

        printf("The original string:  ");

        puts(s);

        fun(s);

        printf("The string after deleted :  ");

        puts(s);printf("\n\n");

}

答案:

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

s[j++]=s[i];

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

{s[j]=s[i];j++;}

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

s[j]= '\0';

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

s[j]= 0;

第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分)        题号:313        难度:易        第3章

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

【程序设计】

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

功能:求一个四位数的各位数字的立方和

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

#include <stdio.h>

void wwjt();

     

int fun(int n)

{

  

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

  

  

  

  

  

  

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

  

}

main()

{

  int k;

  k=fun(1234);

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

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int iIN,iOUT,i;

  IN=fopen("22.IN","r");

  if(IN==NULL)

  {

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

  }

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

  if(OUT==NULL)

  {

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

  }

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

  {

    fscanf(IN,"%d",&iIN);

    iOUT=fun(iIN);

    fprintf(OUT,"%d\n",iOUT);

  }

  fclose(IN);

  fclose(OUT);

}

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

int d,k,s=0;

   while (n>0)

    {d=n%10;

    s+=d*d*d;

     n/=10;

     }

     return s;

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

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

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

【程序设计】

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

题目:求出1000以内前20个不能被2,3,5,7整除的数之和。

要求:使用程序中定义的变量

  

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

#include"stdio.h"

void wwjt();

//fun函数功能:求出求出1000以内,前n个不能被2,3,5,7整除的数,求出这些数的和

int  fun(int n)  

{

        int i,j=0,a[20],sum=0; //前20个不能被2,3,5,7整除的数保存在a数组中,它们的和保存在sum中。

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

  

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

       return sum;

}

void main()

{

        printf("和为:%d\n",fun(20));

                wwjt();

}

void wwjt()

{

        FILE *IN,*OUT;

        int i,n;

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

        if(IN==NULL)

        {

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

        }

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

        if(OUT==NULL)

        {

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

        }

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

        {

                fscanf(IN,"%i",&n);

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

        }

        

        fclose(IN);

        fclose(OUT);

}

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

{

if((i%2!=0)&&(i%3!=0)&&(i%5!=0)&&(i%7!=0))

{

a[j++]=i;  

//printf("%d,",i);

}

if(j>n-1) break;

}

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

sum+=a[i];

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

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

【程序设计】

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

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

      请编写函数fun,其功能是:把高于等于平均分的学生数据放在b所指的数组中,

      高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。

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

      你编写的若干语句。

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

#include <stdio.h>

#define   N   12

void wwjt ( );

typedef  struct

{  

        char  num[10];

        int  s;

} STREC;

double  fun( STREC  *a, STREC *b, int *n )

{

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

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

}

void main()

{

        STREC  s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},

                {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},

                {"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};

        STREC  h[N];

        int i, n;  

        double  ave;

        ave=fun( s,h,&n );

        printf("The %d student data which is higher than %7.3f:\n",n,ave);

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

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

        printf("\n");

        wwjt ( );

        

}

void wwjt( )

{

        FILE *in, *out ;

        STREC  h[N];

        int  i,j, n;

        double  ave;

        STREC  s[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<N; i++)

                {

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

                }

                ave=fun( s,h,&n );

                fprintf(out, "%d\n%7.3f\n", n, ave);

        }

        fclose(in);

        fclose(out);

}

答案: int i;

double av=0.0;

*n=0;

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

av=av+a[i].s;

av=av/N;                                                                                  

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

if(av<=a[i].s)

                {

b[*n]=a[i];

*n=*n+1;

                }     

return av;

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

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

【程序设计】

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

功能:输入2个学生3门课的成绩,计算学生成绩平均分,

      课程平均分和最高分.

例如:输入2名学生3门课的成绩分别为92,87,68,56,

      92,84 则

      学生1平均分:82.33

      学生2平均分:77.33

      课程1平均分:74.00

      课程2平均分:89.50

      课程3平均分:76.00

      最高分为:92

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

#include <stdio.h>

void wwjt();

/*定义全局变量*/

/*学生成绩平均分*/

float StuAgv[2];

/*课程平均分*/

float CouAgv[3];

/*所有学生的所有课程最高分*/

float Max=0;

/*说明:需要在下面函数中把题干要求中的结果赋值到上面定义一变量中*/

void fun(float score[2][3])

{

  

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

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

  

}

void main()

{

        int i,j;

        float score[2][3];

    

        printf("输入学生的成绩:");

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

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

         scanf("%f",&score[i][j]);

    printf("\n输出学生的成绩:");

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

        {  

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

             printf("%.2f  ",score[i][j]);

       printf("\n");

        }

   

    fun (score);

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

       printf("第%d个学生的平均成绩是:%0.2f\n",i+1,StuAgv[i]);

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

       printf("第%d门课的平均成绩是:%0.2f\n",j+1,CouAgv[j]);

        

        printf("所有分数中的最高分为:%.2f\n",Max);

        wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  float iIN[2][3];

  int i,j;

  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(i=0;i<2;i++)

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

      fscanf(IN,"%f",&iIN[i][j]);

  fun(iIN);

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

    fprintf(OUT,"%.2f\n",StuAgv[i]);

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

    fprintf(OUT,"%.2f\n",CouAgv[j]);

  fprintf(OUT,"%.2f\n",Max);

        fclose(IN);

  fclose(OUT);

  return ;

}

答案: int i,j;

float sum;

    for(i=0;i<2;i++)            /*计算第i个学生平均分*/

{

  sum=0;

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

        sum=sum+score[i][j];

      StuAgv[i]=sum/3;

 }

     for(j=0;j<3;j++)            /*计算第j门课的平均分*/

 {

   sum=0;

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

         sum=sum+ score [i][j];

       CouAgv[j]=sum/2;

 }

      Max=score[0][0];

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

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

          if(Max<=score[i][j])

  {

Max=score[i][j];

   }

  return ;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值