计算机二级C语言上机真题(70)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:计算函数F(x,y,z)=(x+y)/(xy)+(
z+y)/(z-y)的值。其中x 和y 不相等,z 和y 不等。例如,当x 的值为9,y
的值为11,z 的值为15 时,函数值为-3.50。
试题程序:
#include < stdio.h >#include < math.h >#define FU(m,n) (m)/(n)
float fun(float a,float b,float c)
{ __1__ value;
value=FU(a+b,a-b)+FU(c+b,c-b);
return(value);
}
main()
{ float x,y,z,sum;
printf("Input x y z:: ");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n ",x,y,z);
if(x==y__2__y==z) {printf("Data error! \n ");}
sum=fun(x,y,z);
printf("The result is:%5.2f\n ",__3__);
}
(2011年2月)
解析: 【解析】填空1:在子程序中我们看到value是作为存放函数值的变量
而使用的,由题目的分析我们知道函数值是浮点型的,因此这里我们用float对
变量进行声明。
填空2:在题目中我们看到x和y不相等,z和y不相等,由选择支我们知道这
里是判断自变量是否符合要求的,而这两个条件任何一个不满足就会使函数结
果无意义,因此这里用"||"符号。
填空3:在主程序中,函数的返回值赋给了sum,由输出语句我们知道这是输
出结果的语句,所以这里填变量sum。
答案:【1】float 【2】|| 【3】sum
【真题2】 给定程序modi.c 中,函数fun 的功能是:求出两个非零正整数的最大
公约数,并作为函数值返回。
例如,若给num1 和num2分别输入49 和21,则输出的最大公约数为7;若给
num1 和num2 分别输入27 和81,则输出的最大公约数为27。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < stdio.h >int fun(int a,int b)
{int r,t;
if(a< b)
{t=a;b=a;a=t;}
r=a%b;
while(r!=0)
{a=b;b=r;r=a%b;}
/************found************/
return(a);
}
main()
{int num1,num2,a;
printf("Input num1 num2: ");scanf("%d%d",&num1,&num2);
printf("num1=%d num2=%d\n\n",num1,num2);
a=fun(num1,num2);
printf("The maximun common divisor is %d\n\n",a);
}
(2011年2月)
解析: 提示思路:当a与b的余数为零时,即可求得a、b的最大公约数。
当余数为零时,最大公约数放在除数变量中,即变量b,即应返回变量b的
值,所以程序中的语句"return(a);"应改为"return(b);"或相同作用的语句。
【真题3】 函数fun 的功能是:将s 所指字符串中ASCII值为奇数的字符删除,串
中剩余字符形成一个新串放在t 所指的数组中。
例如,若s 所指字符串中的内容为“ABCDEFG12345”,其中字符A 的ASCII码值
为奇数、…、字符1 的ASCII码值也为奇数、…都应当删除,其他依次类推。最后t
所指的数组中的内容应是:“BDF24”。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#include < string.h >void
fun(char *s, char t[])
{……}
main()
{ char s[100], t[100];
clrscr();
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
}
(2011年2月)
解析: 本题的考核点是数组、循环语句。
提示思路:使用循环语句将数组元素与2 做取余操作,如果余数为零则将其值
存入另外一个数组中。
void fun(char *s, char t[])
{ int i,slenth,n=0;
slenth=strlen(s); /*统计字符串s中字符的个数*/
/*判断字符s[i]其值的ASCII码值是否为奇数,如果是,则继续下一个字符的
判断,否则将字符s[i]复制到t数组中*/
for(i=0;i< slenth;i++)
if(s[i]%2==0)
t[n++]=s[i];
t[n]='\0';
}
z+y)/(z-y)的值。其中x 和y 不相等,z 和y 不等。例如,当x 的值为9,y
的值为11,z 的值为15 时,函数值为-3.50。
试题程序:
#include < stdio.h >#include < math.h >#define FU(m,n) (m)/(n)
float fun(float a,float b,float c)
{ __1__ value;
value=FU(a+b,a-b)+FU(c+b,c-b);
return(value);
}
main()
{ float x,y,z,sum;
printf("Input x y z:: ");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n ",x,y,z);
if(x==y__2__y==z) {printf("Data error! \n ");}
sum=fun(x,y,z);
printf("The result is:%5.2f\n ",__3__);
}
(2011年2月)
解析: 【解析】填空1:在子程序中我们看到value是作为存放函数值的变量
而使用的,由题目的分析我们知道函数值是浮点型的,因此这里我们用float对
变量进行声明。
填空2:在题目中我们看到x和y不相等,z和y不相等,由选择支我们知道这
里是判断自变量是否符合要求的,而这两个条件任何一个不满足就会使函数结
果无意义,因此这里用"||"符号。
填空3:在主程序中,函数的返回值赋给了sum,由输出语句我们知道这是输
出结果的语句,所以这里填变量sum。
答案:【1】float 【2】|| 【3】sum
【真题2】 给定程序modi.c 中,函数fun 的功能是:求出两个非零正整数的最大
公约数,并作为函数值返回。
例如,若给num1 和num2分别输入49 和21,则输出的最大公约数为7;若给
num1 和num2 分别输入27 和81,则输出的最大公约数为27。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,
#include < stdio.h >int fun(int a,int b)
{int r,t;
if(a< b)
{t=a;b=a;a=t;}
r=a%b;
while(r!=0)
{a=b;b=r;r=a%b;}
/************found************/
return(a);
}
main()
{int num1,num2,a;
printf("Input num1 num2: ");scanf("%d%d",&num1,&num2);
printf("num1=%d num2=%d\n\n",num1,num2);
a=fun(num1,num2);
printf("The maximun common divisor is %d\n\n",a);
}
(2011年2月)
解析: 提示思路:当a与b的余数为零时,即可求得a、b的最大公约数。
当余数为零时,最大公约数放在除数变量中,即变量b,即应返回变量b的
值,所以程序中的语句"return(a);"应改为"return(b);"或相同作用的语句。
【真题3】 函数fun 的功能是:将s 所指字符串中ASCII值为奇数的字符删除,串
中剩余字符形成一个新串放在t 所指的数组中。
例如,若s 所指字符串中的内容为“ABCDEFG12345”,其中字符A 的ASCII码值
为奇数、…、字符1 的ASCII码值也为奇数、…都应当删除,其他依次类推。最后t
所指的数组中的内容应是:“BDF24”。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#include < string.h >void
fun(char *s, char t[])
{……}
main()
{ char s[100], t[100];
clrscr();
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
}
(2011年2月)
解析: 本题的考核点是数组、循环语句。
提示思路:使用循环语句将数组元素与2 做取余操作,如果余数为零则将其值
存入另外一个数组中。
void fun(char *s, char t[])
{ int i,slenth,n=0;
slenth=strlen(s); /*统计字符串s中字符的个数*/
/*判断字符s[i]其值的ASCII码值是否为奇数,如果是,则继续下一个字符的
判断,否则将字符s[i]复制到t数组中*/
for(i=0;i< slenth;i++)
if(s[i]%2==0)
t[n++]=s[i];
t[n]='\0';
}