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)
