计算机二级C语言上机真题(69)【附详解】
【真题1】 给定程序功能是计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+f(n)
的值。例如,当n 为5 时,函数值应为:10.407143。
┌(x+1)/(x-2) x >0
f(x) = ┤0 x=0 或 x=2
└(x-1)/(x-2) x< 0
#include < stdio.h >#include < math.h >float f( double x)
{
if (x == 0.0 || x == 2.0)
/************found************/
return ___1___;
else if (x < 0.0)
return (x -1)/(x-2);
else
return (x +1)/(x-2);
}
double fun( int n )
{ int i; double s=0.0, y;
/************found************/
for (i= -n; i< =___2___; i++)
{y=f(1.0*i); s += y;}
/************found************/
return ___3___;
}
main ( )
{
printf("%f\n", fun(5) );
}
(2011年2月)
解析: 本题的考核点是C语言中的函数的入口参数和类型转换。
题中第一个空填"0.0":根据题意,当x=0或x=2时,f(x)返回0。因为f(x)
定义为float型,所以也可以返回0.0。
题中第二个空填"n":由程序可知,此处是设置循环的次数,其值是由主调函数
中的实参所确定。由于在主调函数中是以确定的值定义的,所以循环变量可以
由形参变量所确定,也可以用主调函数中的确定值所确定。
题中第三个空填"s":通过return 语句将被调用函数中s 的值带回主调函数中
去。
答案:【1】0.0 【2】n 【3】s
【真题2】 给定程序modi.c 中,函数fun 的功能是:求三个数的最小公倍数。
例如,给变量x1、x2、x3 分别输入15 11 2,则输出结果应当是:330。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < stdio.h >fun(int x,int y,int z)
{ int j,t,n,m;
/************found************/
j=0;
t=j%x;
/************found************/
m=t%y;
n=j%z;
while(t!=0||m!=0||n!=0)
{j=j+1;
t=j%x;
/************found************/
m=t%y;
n=j%z;
}
return j;
}
main()
{ int x1,x2,x3,j;
printf("Input x1 x2 x3: ");scanf("%d%d%d",&x1,&x2,&x3);
printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);
j=fun(x1,x2,x3);
printf("The minimal common multiple is :%d\n",j);
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
本题中的第一个错误:由程序可知,应从1 开始穷举数的最小公倍数,即j的
初始值应为1,所以程序中的语句"j=0;"应改为"j=1;";
本题中的第二和第三个错误:变量j中存放的即为要求的最小公倍数,即j能够
整除x、y、z,所以程序中的语句" m=t%y;"应改为" m=j%y;"。
【真题3】 请编写一个函数void fun (char a[],char b[],int n),其功能是:删除
一个字符串中指定位置的字符。其中, a 存放原字符串, b存放删除后的字符串。
例如,输入一个字符串"World",然后输入3,则调用该函数后的结果为"Word"。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < stdio.h >#include < conio.h >#define LEN 20
void fun (char a[], char b[], int n)
{……}
main( )
{ char str1[LEN], str2[LEN] ;
int n ;
clrscr() ;
printf("Enter the string:\n") ;
gets(str1) ;
printf("Enter the position of the string deleted:") ;
scanf("%d", &n) ;
fun(str1, str2, n) ;
printf("The new string is: %s\n", str2) ;
}
(2011年2月)
解析: 本题的考核点是删除一个字符串中指定位置的字符。
解题思路:
1、建立循环,在原字符串a[]中定位到指定位置;
2、在以上循环中,当没有到达指定位置时,将a[]当前位置的字符复制到数组
b[]中;
3、当到达a[]中指定位置后,跳过这个字符,将下一个字符复制到数组b[]
中,直至复制完毕。
#include < stdio.h >
#include < conio.h >
#define LEN 20
void fun (char a[], char b[], int n)
{ int i=0,j=0;
for( i=0,j=0; i< LEN; i++) { /*建立循环,在原字符串a[]中定位到指定位
置*/
if (i!=n) { /*在以上循环中,当没有到达指定位置时,将a[]当前位置的字符
复制到数组b[]中*/
b[j]=a[i];
j++;
}
}
}
的值。例如,当n 为5 时,函数值应为:10.407143。
┌(x+1)/(x-2) x >0
f(x) = ┤0 x=0 或 x=2
└(x-1)/(x-2) x< 0
#include < stdio.h >#include < math.h >float f( double x)
{
if (x == 0.0 || x == 2.0)
/************found************/
return ___1___;
else if (x < 0.0)
return (x -1)/(x-2);
else
return (x +1)/(x-2);
}
double fun( int n )
{ int i; double s=0.0, y;
/************found************/
for (i= -n; i< =___2___; i++)
{y=f(1.0*i); s += y;}
/************found************/
return ___3___;
}
main ( )
{
printf("%f\n", fun(5) );
}
(2011年2月)
解析: 本题的考核点是C语言中的函数的入口参数和类型转换。
题中第一个空填"0.0":根据题意,当x=0或x=2时,f(x)返回0。因为f(x)
定义为float型,所以也可以返回0.0。
题中第二个空填"n":由程序可知,此处是设置循环的次数,其值是由主调函数
中的实参所确定。由于在主调函数中是以确定的值定义的,所以循环变量可以
由形参变量所确定,也可以用主调函数中的确定值所确定。
题中第三个空填"s":通过return 语句将被调用函数中s 的值带回主调函数中
去。
答案:【1】0.0 【2】n 【3】s
【真题2】 给定程序modi.c 中,函数fun 的功能是:求三个数的最小公倍数。
例如,给变量x1、x2、x3 分别输入15 11 2,则输出结果应当是:330。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < stdio.h >fun(int x,int y,int z)
{ int j,t,n,m;
/************found************/
j=0;
t=j%x;
/************found************/
m=t%y;
n=j%z;
while(t!=0||m!=0||n!=0)
{j=j+1;
t=j%x;
/************found************/
m=t%y;
n=j%z;
}
return j;
}
main()
{ int x1,x2,x3,j;
printf("Input x1 x2 x3: ");scanf("%d%d%d",&x1,&x2,&x3);
printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);
j=fun(x1,x2,x3);
printf("The minimal common multiple is :%d\n",j);
}
(2011年2月)
解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。
本题中的第一个错误:由程序可知,应从1 开始穷举数的最小公倍数,即j的
初始值应为1,所以程序中的语句"j=0;"应改为"j=1;";
本题中的第二和第三个错误:变量j中存放的即为要求的最小公倍数,即j能够
整除x、y、z,所以程序中的语句" m=t%y;"应改为" m=j%y;"。
【真题3】 请编写一个函数void fun (char a[],char b[],int n),其功能是:删除
一个字符串中指定位置的字符。其中, a 存放原字符串, b存放删除后的字符串。
例如,输入一个字符串"World",然后输入3,则调用该函数后的结果为"Word"。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < stdio.h >#include < conio.h >#define LEN 20
void fun (char a[], char b[], int n)
{……}
main( )
{ char str1[LEN], str2[LEN] ;
int n ;
clrscr() ;
printf("Enter the string:\n") ;
gets(str1) ;
printf("Enter the position of the string deleted:") ;
scanf("%d", &n) ;
fun(str1, str2, n) ;
printf("The new string is: %s\n", str2) ;
}
(2011年2月)
解析: 本题的考核点是删除一个字符串中指定位置的字符。
解题思路:
1、建立循环,在原字符串a[]中定位到指定位置;
2、在以上循环中,当没有到达指定位置时,将a[]当前位置的字符复制到数组
b[]中;
3、当到达a[]中指定位置后,跳过这个字符,将下一个字符复制到数组b[]
中,直至复制完毕。
#include < stdio.h >
#include < conio.h >
#define LEN 20
void fun (char a[], char b[], int n)
{ int i=0,j=0;
for( i=0,j=0; i< LEN; i++) { /*建立循环,在原字符串a[]中定位到指定位
置*/
if (i!=n) { /*在以上循环中,当没有到达指定位置时,将a[]当前位置的字符
复制到数组b[]中*/
b[j]=a[i];
j++;
}
}
}