计算机二级C语言上机真题(74)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:找出一个大于给定整数m 且紧
随m 的素数,并作为函数值返回。
试题程序:
#include < conio.h >#include < stdio.h >int fun( int m)
{ int i,k;
for (i=__1__; ;i++)
{ for (k=2;k< __2__;k++)
if (i%k==0)
break;
if (k >=i)
__3__;
}
}
main()
{ int n;
printf("\nPlease enter n: ");
scanf("%d",&n);
printf ("%d\n",fun(n));
}
解析: 填空1:根据题目的意思,这里应该是找出m 后面第一个素数,所以循
环的开始条件应该是m 之后的第一个数,即m+1。
填空2:根据题目的意思,此处是验证产生的这个i是不是素数,所以由求素数
的一般思路可以知道,应该验证2 到i之间的所有数字。
填空2:由算法可以看出,如果满足条件,则证明该数是素数,应该把它作为子
函数的返回值。
答案:【1】m+1 【2】i 【3】return(i)
【真题2】 下列给定的程序中,函数fun()的功能是:计算并输出k 以内最大的6
个能被7 或11 整除的自然数之和。K 的值由主函数传入,若k 的值为500,则函数
的值为2925。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include< stdio.h >#include < conio.h >int fun(int k)
{ int m=0,mc=0, j;
/**********************found***********************/
while(k >=2)&&(mc< 6)
{
/**********************found***********************/
if((k%7=0)||(k%11=0))
{
/**********************found***********************/
m=k;
mc++;
}
k--;
}
return m;
}
main()
{ clrscr();
printf("%d\n ",fun(500));
}
(2011年2月)
解析: (1)错误:while(k >=2)&&(mc< 6) 正确:while((k
>=2)&&(mc< 6))
(2)错误:if((k%7=0)||(k%11=0)) 正确:if((k%7==0)||(k%11=
=0))
(3)错误:m=k; 正确:m=m+k;
错误1:C语言规定while语句后的表达式两侧必须要有圆括号。
错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。
错误3:根据题意,将满足条件的数求累加和。
【真题3】 函数fun 的功能是:将s 所指字符串中下标为偶数的字符删除,串中剩
余字符形成的新串放在t 所指数组中。
例如,当s 所指字符串中的内容为:"ABCDEFGHIJK",
在t 所指数组中的内容应是:"BDFHJ"。
注意: 部分源程序存在文件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月)
解析: 本题的考核点是数组、循环语句。
解题思路:使用循环语句将数组下标为奇数的元素的值存入另外一个数组中。
void fun(char *s, char t[])
{ int i,slenth,n=0;
slenth=strlen(s); /*通过strlen 函数求字符串s的长度*/
for(i=1;i< slenth;i+=2) /*循环语句将数组下标为奇数的元素的值存入数组
t中*/
t[n++]=s[i];
t[n]='\0';
}
随m 的素数,并作为函数值返回。
试题程序:
#include < conio.h >#include < stdio.h >int fun( int m)
{ int i,k;
for (i=__1__; ;i++)
{ for (k=2;k< __2__;k++)
if (i%k==0)
break;
if (k >=i)
__3__;
}
}
main()
{ int n;
printf("\nPlease enter n: ");
scanf("%d",&n);
printf ("%d\n",fun(n));
}
解析: 填空1:根据题目的意思,这里应该是找出m 后面第一个素数,所以循
环的开始条件应该是m 之后的第一个数,即m+1。
填空2:根据题目的意思,此处是验证产生的这个i是不是素数,所以由求素数
的一般思路可以知道,应该验证2 到i之间的所有数字。
填空2:由算法可以看出,如果满足条件,则证明该数是素数,应该把它作为子
函数的返回值。
答案:【1】m+1 【2】i 【3】return(i)
【真题2】 下列给定的程序中,函数fun()的功能是:计算并输出k 以内最大的6
个能被7 或11 整除的自然数之和。K 的值由主函数传入,若k 的值为500,则函数
的值为2925。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include< stdio.h >#include < conio.h >int fun(int k)
{ int m=0,mc=0, j;
/**********************found***********************/
while(k >=2)&&(mc< 6)
{
/**********************found***********************/
if((k%7=0)||(k%11=0))
{
/**********************found***********************/
m=k;
mc++;
}
k--;
}
return m;
}
main()
{ clrscr();
printf("%d\n ",fun(500));
}
(2011年2月)
解析: (1)错误:while(k >=2)&&(mc< 6) 正确:while((k
>=2)&&(mc< 6))
(2)错误:if((k%7=0)||(k%11=0)) 正确:if((k%7==0)||(k%11=
=0))
(3)错误:m=k; 正确:m=m+k;
错误1:C语言规定while语句后的表达式两侧必须要有圆括号。
错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。
错误3:根据题意,将满足条件的数求累加和。
【真题3】 函数fun 的功能是:将s 所指字符串中下标为偶数的字符删除,串中剩
余字符形成的新串放在t 所指数组中。
例如,当s 所指字符串中的内容为:"ABCDEFGHIJK",
在t 所指数组中的内容应是:"BDFHJ"。
注意: 部分源程序存在文件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月)
解析: 本题的考核点是数组、循环语句。
解题思路:使用循环语句将数组下标为奇数的元素的值存入另外一个数组中。
void fun(char *s, char t[])
{ int i,slenth,n=0;
slenth=strlen(s); /*通过strlen 函数求字符串s的长度*/
for(i=1;i< slenth;i+=2) /*循环语句将数组下标为奇数的元素的值存入数组
t中*/
t[n++]=s[i];
t[n]='\0';
}