计算机二级C语言上机真题(93)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:将长整型数中每一位上为偶数的
数依次取出,构成一个新数放在t 中。高位仍在高位,低位仍在低位。例如,当s 中
的数为87653142 时,t 中的数为8642。 试题程序:
#include < conio.h >
#include < stdio.h >
void fun(long s,long *t)
{ __1___;
long s1=1;
*t=0;
while(s >0)
{ d=s%10;
if(___2___)
{*t=d*s1+*t;
s1*=10;
}
__3___;
}
}
main()
{ long s,t;
printf("\nPlease enter s: "); scanf("%ld",&s);
fun(s,&t);
printf("The result is :%ld\n",t);
}
(2011年2月)
解析: 填空1:这里缺少一句话,我们在程序中可以看到变量d是没有被定义
的,这时我们可以想到这里肯定要对变量d进行声明,但是d是什么类型的变
量就要根据它在程序中的使用情况了,这里d是长整型的。
填空2:这一行上一句指令的作用是将十进制数的每一位依次取出,然后考查这
一位是不是偶数,如果是的话就将它放在新的数中,这里要注意的是逻辑判断
符号"=="不要写成"="。
填空3:在if语句结束之后,我们从给定的数字中取出了一位数字,下面要取
下一位了,我们的方法是将个位去掉。
答案:【1】long d 【2】d%2==0 【3】s/=10
【真题2】 给定程序modi.c 中函数fun的功能是:根据输入的三个边长(整型
值),判断能否构成三角形: 构成的是等边三角形,还是等腰三角形。若能构成等
边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返
回1,若不能构成三角形函数返回0。 请改正函数fun 中指定部位的错误,使它能
得出正确的结果。 注意:不要改动main 函数,
#include < math.h >
int fun(int a,int b,int c)
{ if(a+b >c && b+c >a && a+c >b) {
if(a==b && b==c)
/**************found**************/
return 1;
else if(a==b||b==c||a==c)
return 2;
/**************found**************/
else return 3;
}
else return 0;
}
main()
{ int a,b,c,shape;
printf("\nInput a,b,c: ");
scanf("%d%d%d",&a,&b,&c);
printf("\na=%d, b=%d, c=%d\n",a,b,c);
shape =fun(a,b,c);
printf("\n\nThe shape : %d\n",shape);
}
解析: 本题的考核点是逻辑运算、函数的返回值和if语句的使用。
提示思路:根据平面几何知识,如果任意两边之和大于第三边,则可以构成三
角形。在给出的程序中,先判断输入的三个边长是否能够构成三角形,若不
能,则返回0;反之,若判断其中的任意两条边相等,即逻辑或的关系,则能够
构成等腰三角形,返回2;若三条边均相等,即a==b && b==c,则构成等边
三角形,返回3;若不存在边相等的情况,仅仅两边之和大于第三边,则构成一
般的三角形,返回1。
本题中的第一个错误:如果if(a==b && b==c)为真,即三条边均相等,则是
等腰三角形,所以程序中语句" return 1;"应改为" return 3;"或相同作用的语
句。
本题中的第二个错误:else语句的条件是三条边不存在相等的情况,所以构成
的应该是一般三角形,应该将"return 3;"改为"return 1;"或相同作用的语句。
【真题3】 函数fun 的功能是:实现两个整数的交换。 例如给a 和b 分别输入:
60 和65,输出为:a=65 b=60
#include < stdio.h >
#include < conio.h >
void fun(int *a,int *b)
{……}
main()
{int a,b;
clrscr();
printf("Enter a,b:");scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%d b=%d\n",a,b);
}
(2011年2月)
解析:
void fun(int *a,int *b)
{int t;
t=*b;*b=*a;*a=t;
}
数依次取出,构成一个新数放在t 中。高位仍在高位,低位仍在低位。例如,当s 中
的数为87653142 时,t 中的数为8642。 试题程序:
#include < conio.h >
#include < stdio.h >
void fun(long s,long *t)
{ __1___;
long s1=1;
*t=0;
while(s >0)
{ d=s%10;
if(___2___)
{*t=d*s1+*t;
s1*=10;
}
__3___;
}
}
main()
{ long s,t;
printf("\nPlease enter s: "); scanf("%ld",&s);
fun(s,&t);
printf("The result is :%ld\n",t);
}
(2011年2月)
解析: 填空1:这里缺少一句话,我们在程序中可以看到变量d是没有被定义
的,这时我们可以想到这里肯定要对变量d进行声明,但是d是什么类型的变
量就要根据它在程序中的使用情况了,这里d是长整型的。
填空2:这一行上一句指令的作用是将十进制数的每一位依次取出,然后考查这
一位是不是偶数,如果是的话就将它放在新的数中,这里要注意的是逻辑判断
符号"=="不要写成"="。
填空3:在if语句结束之后,我们从给定的数字中取出了一位数字,下面要取
下一位了,我们的方法是将个位去掉。
答案:【1】long d 【2】d%2==0 【3】s/=10
【真题2】 给定程序modi.c 中函数fun的功能是:根据输入的三个边长(整型
值),判断能否构成三角形: 构成的是等边三角形,还是等腰三角形。若能构成等
边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返
回1,若不能构成三角形函数返回0。 请改正函数fun 中指定部位的错误,使它能
得出正确的结果。 注意:不要改动main 函数,
#include < math.h >
int fun(int a,int b,int c)
{ if(a+b >c && b+c >a && a+c >b) {
if(a==b && b==c)
/**************found**************/
return 1;
else if(a==b||b==c||a==c)
return 2;
/**************found**************/
else return 3;
}
else return 0;
}
main()
{ int a,b,c,shape;
printf("\nInput a,b,c: ");
scanf("%d%d%d",&a,&b,&c);
printf("\na=%d, b=%d, c=%d\n",a,b,c);
shape =fun(a,b,c);
printf("\n\nThe shape : %d\n",shape);
}
解析: 本题的考核点是逻辑运算、函数的返回值和if语句的使用。
提示思路:根据平面几何知识,如果任意两边之和大于第三边,则可以构成三
角形。在给出的程序中,先判断输入的三个边长是否能够构成三角形,若不
能,则返回0;反之,若判断其中的任意两条边相等,即逻辑或的关系,则能够
构成等腰三角形,返回2;若三条边均相等,即a==b && b==c,则构成等边
三角形,返回3;若不存在边相等的情况,仅仅两边之和大于第三边,则构成一
般的三角形,返回1。
本题中的第一个错误:如果if(a==b && b==c)为真,即三条边均相等,则是
等腰三角形,所以程序中语句" return 1;"应改为" return 3;"或相同作用的语
句。
本题中的第二个错误:else语句的条件是三条边不存在相等的情况,所以构成
的应该是一般三角形,应该将"return 3;"改为"return 1;"或相同作用的语句。
【真题3】 函数fun 的功能是:实现两个整数的交换。 例如给a 和b 分别输入:
60 和65,输出为:a=65 b=60
#include < stdio.h >
#include < conio.h >
void fun(int *a,int *b)
{……}
main()
{int a,b;
clrscr();
printf("Enter a,b:");scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%d b=%d\n",a,b);
}
(2011年2月)
解析:
void fun(int *a,int *b)
{int t;
t=*b;*b=*a;*a=t;
}