期末考试题(3)

这篇博客主要涵盖了C语言的编程练习,包括填空题、程序改错和程序设计。题目涉及了变量交换、字符串处理、数值计算、文件操作、循环控制、函数调用等C语言核心概念。通过这些练习,读者可以巩固对C语言基本语法和逻辑的理解。
摘要由CSDN通过智能技术生成

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

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

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

# include <stdio.h>

void ex(int, int);

int main( )

{

        int a = 11, b = 17;

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

11

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

a=11

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

17

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

b=17

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

12

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

x=12

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

18

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

y=18

第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分)        题号:1888        难度:中        第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(5));

        return 0;

}

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

16

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

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

#include <stdio.h>

int a=30,b=50;

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分)        题号:529        难度:中        第9章

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

【程序填空】

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

功能:输入学生成绩并显示。

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

# include <stdio.h>

struct student

{

  char number[6];

  char name[6];

  int  score[3];

} stu[2];

void output(struct student stu[2]);

void main()

{

  int i, j;

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

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

  {

    printf("请输入学生%d的成绩:\n", i+1);

    printf("学号:");

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

    scanf("%s", 【?】.number);

    printf("姓名:");

    scanf("%s", stu[i].name);

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

    {

      printf("成绩 %d.  ", j+1);

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

      scanf("%d", 【?】.score[j]);

    }

    printf("\n");

  }

  output(stu);

}

void output(struct student stu[2])

{

  int i, j;

  printf("学号  姓名  成绩1  成绩2  成绩3\n");

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

  {

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

  【?】("%-6s%-6s", stu[i].number, stu[i].name);

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

    printf("%-8d", stu[i].score[j]);

    printf("\n");

  }

}

答案:

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

i++

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

++i

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

i=i+1

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

i+=1;

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

stu[i]

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

&stu[i]

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

printf

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

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

【程序填空】

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

题目:给定程序中,函数fun的功能是:统计形参s所指的字符串中数字字符出现的次数,

      并存放在形参t所指的变量中,最后在主函数中输出。

例如:若形参s所指的字符串为"abcdef35adgh3kjsdf7",则输出结果为4。

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

#include  <stdio.h>

void fun(char  *s, int  *t)

{  

        int i, n;

        n=0;

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

        for(i=0; 【?】 !=0; i++)

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

                if(s[i]>='0'&&s[i]<= 【?】 ) n++;

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

                【?】 ;

}

main()

{  

        char  s[80]="abcdef35adgh3kjsdf7";

        int t;

        printf("\nThe original string is :  %s\n",s);

        fun(s,&t);

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

}

答案:

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

s[i]

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

'9'

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

*t=n

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

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

【程序填空】

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

功能:文件操作。

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

# include <stdio.h>

# include <stdlib.h>

void main()

{

  /* 定义一个文件指针fp */

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

  【?】 *fp;

  char filename[10];

  printf("Please input the name of file: ");

  scanf("%s", filename);  /* 输入字符串并赋给变量filename */

  /* 以读的使用方式打开文件filename */

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

  if((fp=fopen(filename, "【?】")) == NULL)

  {

    printf("Cannot open the file.\n");

    exit(0);  /* 正常跳出程序 */

  }

  /* 关闭文件 */

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

 【?】;

}

答案:

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

FILE

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

r

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

fclose(fp)

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

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

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

【程序改错】

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

功能:给定n个实数,输出平均值,并统计在平均值以下(含平

      均值)的实数个数。

例如:n=6时,输入23.5, 45.67, 12.1, 6.4,58.9, 98.4所得

      平均值为40.828335,在平均值以下的实数个数应为3。

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

#include <stdio.h>

int fun(double x[],int n)

{

  int j,c=0;

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

  float j=0;

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

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

    xa+=x[j];

  xa=xa/n;

  printf("ave=%f\n",xa);

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

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

    if(x[j]<=xa)   c++;

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

  return xa;

}

main()

{

  double x[]={23.5,45.67,12.1,6.4,58.9,98.4};

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

}

答案:

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

float xa=0;

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

float xa=0.0;

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

double xa=0;

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

double xa=0.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

return c;

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

return (c);

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

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

【程序改错】

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

题目:下列给定程序中函数fun的功能是:把从主函数中输入的3个数,最大的数放

      在a中,中间的数放在b中,最小的数放在c中。

例如:若输入的数为:55 12 34,输出的结果应当是:a=55.0,b=34.0,c=12.0。

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

#include <stdio.h>

void  fun(float *a,float *b,float *c)

{

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

        float   *k;

        if( *a<*b )

        {   

                k=*a;

                *a=*b;

                *b=k;

        }

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

        if( *a>*c )

        {  

                k=*c;

                *c=*a;

                *a=k;

        }

        if( *b<*c )

        {   

                k=*b;

                *b=*c;

                *c=k;

        }

}

main()

{  

        float   a,b,c;

        printf("Input  a  b  c:  ");

        scanf("%f%f%f",&a,&b,&c);

        printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);

        fun(&a,&b,&c);

        printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);

}

答案:

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

float k;

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

if(*a< *c)

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

if(*c> *a)

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

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

【程序设计】

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

功能:根据整型形参m,计算如下公式的值:y=1/2+1/4+

      1/6+...+1/2m 。

例如:若m=9,则应输出:1.414484

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

#include <stdio.h>

void  wwjt();

  

double fun(int m)   

{

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

  

  

  

  

  

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

}

main()   

{

  int n;   

  printf("Enter n: ");   

  scanf("%d", &n);   

  printf("\nThe result is %1f\n", fun(n));

  wwjt();  

}   

void wwjt()

{

  FILE *IN,*OUT;

  int i ;

  int t;

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

  {   

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

    o=fun(t);

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

    

  }

  fclose(IN);

  fclose(OUT);

}

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

     double y=0;

     int i;

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

     {y+=1.0/(2*i);  }

     return(y);

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

第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分)        题号: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 ;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值