Advertisement

C期末题库8

阅读量:

1

复制代码
    /*------------------------------------------------
    【程序设计】
    --------------------------------------------------
    
    功能:编写函数fun,它的功能是:计算并输出下列级数和:
    s=1/(1*2)+1/(2*3)+……+1/(n(n+1))
     例如,当n=10时,函数值为:0.909091。
    注意:部分源程序给出如下。请勿改动主函数main和其
      它函数中的任何内容,仅在函数fun的花括号中填
      入所编写的若干语句。
    *********Begin**********和**********  End  **********不可删除
    
    ------------------------------------------------*/
    void  TestFunc(); 
    #include <stdio.h>
    double fun( int n )
    {
      /*********Begin**********/
      
    
    
     
      /**********  End  **********/
    }
    
    main()
    {   printf("%f\n", fun(10));
         TestFunc();
    }
    
    void TestFunc()
    {
      FILE *IN,*OUT;
      int k;double j;
       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,"%d",&k);
       j=fun(k);
    fprintf(OUT,"%f\n",j);
      
      fclose(IN);
      fclose(OUT);
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【参考代码】
int i;
double s=0;
for(i=1;i<=n;i++) s+=1.0/(i*(i+1));
return s;

2

复制代码
    /*------------------------------------------------
    【程序设计】
    --------------------------------------------------
    
    功能:程序定义了N×N的二维数组,并在主函数中自动赋值。
    请编写函数fun(int a[ ][N]),函数的功能是:使数组左下三角元素中的值
    全部置成0。例如:a数组中的值为
       1   9   7                                    0   9   7 
    a= 2   3   8  ,则返回主程序后a数组中的值应为   0   0   8 
       4   5   6                                    0   0   0 
    *********Begin**********和**********  End  **********不可删除
    
     
    ------------------------------------------------*/
    void  TestFunc(); 
    #include <stdio.h>
    #include <stdlib.h>
    #define N 5
    void fun(int a[][N])
    {
      /*********Begin**********/
      
     
    
    
      /**********  End  **********/
    }
    
    main()
    {           int a[N][N],i,j;
        printf("***** The array *****\n");
        for(i=0;i<N;i++)
        {        for(j=0;j<N;j++)
        {  a[i][j]=rand()%10;
                printf("%4d",a[i][j]);}
                printf("\n");}
        fun(a);
        printf("THE RESULT\n");
        for(i=0;i<N;i++)
        {  for(j=0;j<N;j++) printf("%4d",a[i][j]);
    printf("\n");        }
         TestFunc();
    }
    
    void TestFunc()
    {
      FILE *IN,*OUT;
      int i,j,k[N][N];
       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<N;i++)
       for(j=0;j<N;j++)
       fscanf(IN,"%d ",&k[i][j]);
           
      fun(k);
    for(i=0;i<N;i++)
        {for(j=0;j<N;j++)
          fprintf(OUT,"%d",k[i][j]);
         fprintf(OUT,"\n");}
      fclose(IN);
      fclose(OUT);
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【参考代码】
int i,j;
for(i=0;i<N;i++)
for(j=0;j<=i;j++) a[i][j]=0;
3

复制代码
    /*------------------------------------------------------    
    【程序改错】
    --------------------------------------------------------
    
    功能:将a所指字符串中的字符和b所指字符串中的字符, 按排
      列的顺序交叉合并到c所指数组中,过长的剩余字符接在
      c所指数组的尾部。
    例如:当a所指字符串中的内容为“abcdefg”,b所指字符串中
      的内容为“1234”时,c所指数组中的内容应该为“a1b2
      c3d4efg”;而当a所指字符串中的内容为“1234”,b所
      指字符串中的内容为“abcdefg”时,c所指数组中的内
      容应该为“1a2b3c4defg”。
    
    ------------------------------------------------------*/
    
    #include "conio.h"
    #include "stdio.h"
    #include "string.h" 
    
    /**********ERROR**********/
    fun( char a, char b, char c )
    {
      while ( *a && *b )
      {
    *c = *a; 
    c++;
    a++;
    *c = *b; c++; b++;
      }
      if( *a == '\0' )
    /**********ERROR**********/
    while( *b ) *c = *b; c++; b++; }
      else
      /**********ERROR**********/
    while( *a ) *c = *a; c++; a++; }
      *c = '\0';
    }
    
    main()
    {
      char s1[100], s2[100], t[200];
      
      printf("\nEnter s1 string : ");scanf("%s",s1);
      printf("\nEnter s2 string : ");scanf("%s",s2);
      fun( s1, s2, t );
      printf("\nThe result is : %s\n", t );
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【改错1】 正确
【学生答案】
fun( char *a, char *b, char *c )
【参考答案】
void fun( char *a, char *b, char *c )
fun( char *a, char *b, char *c )

==============================
【改错2】 错误
【学生答案】
while( *b ) *c = *b; c++; b++;
【参考答案】
while( *b ) { *c = *b; c++; b++; }
while( *b!=’\0’) { *c = *b; c++; b++; }

==============================
【改错3】 错误
【学生答案】
while( *a ) *c = *a; c++; a++;
【参考答案】
while( *a ) { *c = *a; c++; a++; }
while( *a!=’\0’) { *c = *a; c++; a++; }
4

复制代码
    /*------------------------------------------------------    
    【程序改错】
    --------------------------------------------------------
    
    功能:生成一个周边元素为5,其它元素为1的3*3的二维数组。
    
    ------------------------------------------------------*/
    
    #include "stdio.h"
    void fun(int arr[][3])
    {
      /**********ERROR**********/
      int i,j
      /**********ERROR**********/
      for(i=1;i<3;i++)
    for(j=0;j<3;j++)
       /**********ERROR**********/
      if(i==0&&j==0||i==2||j==2)
        arr[i][j]=5;
      else
        arr[i][j]=1;
    }
    main()
    {
      int a[3][3],i,j;
      fun(a);
      for(i=0;i<3;i++)
      {
    for(j=0;j<3;j++)
      printf("%d ",a[i][j]);
    printf("\n");
      }
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【改错1】 正确
【学生答案】
int i,j;
【参考答案】
int i,j;

==============================
【改错2】 正确
【学生答案】
for(i=0;i<3;i++)
【参考答案】
for(i=0;i<3;i++)

==============================
【改错3】 正确
【学生答案】
if(i= =0||j= =0||i= =2||j= =2)
【参考答案】
if(i= =0||j= =0||i= =2||j= =2)

全部评论 (0)

还没有任何评论哟~