计算机二级C语言上机真题(90)【附详解】
【真题1】 给定程序的功能是:根据整型形参n,计算如下公式的值。 1 1 1
A1=1,A2=───,A3=───,……,An=──── 1+ A1 1+ A2 1+ An-1
例如,若n=10,则应输出:0.618056。
#include < stdio.h >
float fun ( int n )
{/************found************/
float A=___1___ ; int i;
/************found************/
for (i=1; i< = ___2___; i++)
A = 1.0/(1+A);
/************found************/
___3___ ;
}
main( )
{ int n ;
printf("\nPlease enter n: ") ;
scanf("%d", &n ) ;
printf("A%d=%f\n", n, fun(n) ) ;
}
(2011年2月)
解析: 本题着重考察考生对C 语言中函数的定义、引用和参数传递、返回值的
掌握情况。
题中第一空填"1":此句是定义变量并为变量赋初值,根据题中的公式将变量A
定义为float型变量并赋值为1。
题中第二个空填"n":由题意可知,程序要求出An的值,循环的终止值应为
n,所以此循环语句应该为"for (i=2;i< =n;i++)"。
题中第三个空填"return A":通过return 语句将被调用函数中一个确定值带回
主调函数中去。
答案:【1】1 【2】n 【3】return A;
【真题2】 给定程序modi.c 中 fun 函数的功能是:求 s = aa … aa - … - aaa -
aa - a(此处a 和n的值在1 至9 之间,aa… aa 表示n 个a) 例如 a = 3, n =
6, 则以上表达式为:s = 333333 - 33333 - 3333 - 333 - 33 - 3其和值是:
296298。a 和n 是fun 函数的形参,表达式的值作为函数值传回 main 函数。 请
改正 fun 函数中的错误,使它能计算出正确的结果。 注意:不要改动 main 函数,
#include < conio.h >
#include < stdio.h >
long fun(int a,int n)
{ int j;
/************found************/
long s=0,t=1;
for(j=0;j< n;j++)
t=t*10+a;
s=t;
for(j=1;j< n;j++) {
/************found************/
t=t%10;
s=s-t;
}
return(s);
}
main()
{ int a,n;
clrscr();
printf("\nPlease enter a and n:");
scanf("%d%d",&a,&n);
printf("The value of function is:%ld\n",fun(a,n));
}
(2011年2月)
解析: 首先,我们必须先读懂题中程序的大致意思,这是发现并改正程序中错
误的重要前提。
程序中的重要思想如下:
1、题中函数fun()的目的是为了得到整数aa… aa - ... - aaa - aa - a的值;
2、函数的返回值有可能超出C 语言中整型的范围,所以返回值必须为长整型。
本题的第一个错误:函数fun()的赋值语句"long s=0,t=1"中,t的初值设
定,而第一个for 循环的目的是得到aa…aa的值,如果t的初值为1,遗漏掉
了a本身,所以,应当改为"long s=0,t=0;";
本题的第二个错误:函数fun()的第二个for 循环的循环体中,错误的将除运算
变成了求余运算,所以应当改正为"t=t/10;"。
【真题3】 函数fun 的功能是:将两个两位数的正整数a、b 合并形成一个整数放在
c 中。合并的方式是:将a 数的十位和个位数依次放在c 数的百位和个位上, b 数的
十位和个位数依次放在c 数的十位和千位上。 例如,当a=45,b=12。调用该函
数后,c=2415。 注意: 部分源程序存在文件prog.c中。数据文件IN1.DAT 中的
数据不得修改。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的
花括号中填入你编写的若干语句。
#include < conio.h >
#include < stdio.h >
void fun(int a, int b, long *c)
{……}
main()
{ int a,b; long c;
clrscr();
printf("Input a, b:");
scanf("%d%d", &a, &b);
fun(a, b, &c);
printf("The result is: %ld\n", c);
}
解析: 本题的考核点是求取整数相应位上的数值的算法。 提示思路:可用整除
和求余的运算求取整数各位上的数值。方法是整除相应位上的位权值,再对其
求余,余数即为相应位上的数值。
void fun(int a, int b, long *c)
{ int a_up,a_low,b_up,b_low;
a_up=a/10; /*求a 数的十位数*/
a_low=a%10; /*求a 数的个位数*/
b_up=b/10; /*求b 数的十位数*/
b_low=b%10; /*求b 数的个位数*/
*c=b_low*1000+a_up*100+b_up*10+a_low; /*将a 数的十位和
个位数依次放在c 数的百位和个位上, b 数的十位和个位数依次放在c 数的
十位和千位上*/
}
A1=1,A2=───,A3=───,……,An=──── 1+ A1 1+ A2 1+ An-1
例如,若n=10,则应输出:0.618056。
#include < stdio.h >
float fun ( int n )
{/************found************/
float A=___1___ ; int i;
/************found************/
for (i=1; i< = ___2___; i++)
A = 1.0/(1+A);
/************found************/
___3___ ;
}
main( )
{ int n ;
printf("\nPlease enter n: ") ;
scanf("%d", &n ) ;
printf("A%d=%f\n", n, fun(n) ) ;
}
(2011年2月)
解析: 本题着重考察考生对C 语言中函数的定义、引用和参数传递、返回值的
掌握情况。
题中第一空填"1":此句是定义变量并为变量赋初值,根据题中的公式将变量A
定义为float型变量并赋值为1。
题中第二个空填"n":由题意可知,程序要求出An的值,循环的终止值应为
n,所以此循环语句应该为"for (i=2;i< =n;i++)"。
题中第三个空填"return A":通过return 语句将被调用函数中一个确定值带回
主调函数中去。
答案:【1】1 【2】n 【3】return A;
【真题2】 给定程序modi.c 中 fun 函数的功能是:求 s = aa … aa - … - aaa -
aa - a(此处a 和n的值在1 至9 之间,aa… aa 表示n 个a) 例如 a = 3, n =
6, 则以上表达式为:s = 333333 - 33333 - 3333 - 333 - 33 - 3其和值是:
296298。a 和n 是fun 函数的形参,表达式的值作为函数值传回 main 函数。 请
改正 fun 函数中的错误,使它能计算出正确的结果。 注意:不要改动 main 函数,
#include < conio.h >
#include < stdio.h >
long fun(int a,int n)
{ int j;
/************found************/
long s=0,t=1;
for(j=0;j< n;j++)
t=t*10+a;
s=t;
for(j=1;j< n;j++) {
/************found************/
t=t%10;
s=s-t;
}
return(s);
}
main()
{ int a,n;
clrscr();
printf("\nPlease enter a and n:");
scanf("%d%d",&a,&n);
printf("The value of function is:%ld\n",fun(a,n));
}
(2011年2月)
解析: 首先,我们必须先读懂题中程序的大致意思,这是发现并改正程序中错
误的重要前提。
程序中的重要思想如下:
1、题中函数fun()的目的是为了得到整数aa… aa - ... - aaa - aa - a的值;
2、函数的返回值有可能超出C 语言中整型的范围,所以返回值必须为长整型。
本题的第一个错误:函数fun()的赋值语句"long s=0,t=1"中,t的初值设
定,而第一个for 循环的目的是得到aa…aa的值,如果t的初值为1,遗漏掉
了a本身,所以,应当改为"long s=0,t=0;";
本题的第二个错误:函数fun()的第二个for 循环的循环体中,错误的将除运算
变成了求余运算,所以应当改正为"t=t/10;"。
【真题3】 函数fun 的功能是:将两个两位数的正整数a、b 合并形成一个整数放在
c 中。合并的方式是:将a 数的十位和个位数依次放在c 数的百位和个位上, b 数的
十位和个位数依次放在c 数的十位和千位上。 例如,当a=45,b=12。调用该函
数后,c=2415。 注意: 部分源程序存在文件prog.c中。数据文件IN1.DAT 中的
数据不得修改。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的
花括号中填入你编写的若干语句。
#include < conio.h >
#include < stdio.h >
void fun(int a, int b, long *c)
{……}
main()
{ int a,b; long c;
clrscr();
printf("Input a, b:");
scanf("%d%d", &a, &b);
fun(a, b, &c);
printf("The result is: %ld\n", c);
}
解析: 本题的考核点是求取整数相应位上的数值的算法。 提示思路:可用整除
和求余的运算求取整数各位上的数值。方法是整除相应位上的位权值,再对其
求余,余数即为相应位上的数值。
void fun(int a, int b, long *c)
{ int a_up,a_low,b_up,b_low;
a_up=a/10; /*求a 数的十位数*/
a_low=a%10; /*求a 数的个位数*/
b_up=b/10; /*求b 数的十位数*/
b_low=b%10; /*求b 数的个位数*/
*c=b_low*1000+a_up*100+b_up*10+a_low; /*将a 数的十位和
个位数依次放在c 数的百位和个位上, b 数的十位和个位数依次放在c 数的
十位和千位上*/
}