计算机二级C语言上机真题(72)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:判断一个整数m 是否是素数,
若是返回1,否则返回0。在main()函数中,若fun()返回1 则输出YES,若fun()
返回0 则输出NO!
试题程序:
#include < conio.h >#include < stdio.h >int fun(int m)
{ int k=2;
while (k< =m__1__(m%k))
__2___
if(__3__)
return 1;
else return 0;
}
main()
{ int n;
printf("\nPlease enter n: "); scanf("%d",&n);
if(fun(n)) printf("YES\n");
else printf("NO!\n");
}
(2011年2月)
解析: 填空1:函数fun()的功能是判断m 是否为素数:m 从2 开始作为除
数,并对m取余,空的两边都是逻辑表达式,左边判断k是否小于m,右边判
断k是否可以被m 整除,两边的关系是逻辑与。
填空2:这个循环的作用是在k小于m且不被m整除的情况下自加,要注意的
是在句尾加';',这是C语言的规定。
填空3:在循环结束之后,如果m 和k相等那么m就是素数,这里要注意的是
表达式中的'=='不要写成赋值符号'=' 。
答案:【1】&& 【2】k++ ; 【3】m==k
【真题2】 给定程序modi.c 中,函数fun 的功能是:计算并输出k 以内最大的10
个能被13 或17 整除的自然数之和。k 的值由主函数传入,若k 的值为500,则函
数值为4622。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数,
#include < conio.h >#include < stdio.h >int fun( int k )
{ int m=0, mc=0, j, n;
while ((k >= 2) && (mc < 10))
{/************found************/
if ((k%13 = 0) || (k%17 = 0))
{ m = m+ k; mc++; }
k--;
}
return m;
/************found************/
_____
main ( )
{ clrscr( );
printf("%d\n", fun (500));
}
(2011年2月)
解析: 本题的考核点是C语言中常用运算符的使用,以及一些常用规定。
观察题目可知,if语句表达的条件必须是能够整除13 或整除17,即某个数除
以13 或17 后等于0。"="是赋值运算符,"=="才是"等于"运算符。所以,
"="应改为"=="。
每一个C 程序的函数体部分都必须由大括弧{ }括起来。{ }对应要完整,所以
在横线处应填入}。
【真题3】 请编一个函数 fun ,其中n 所指存储单元中存放了数组中元素的个数。
函数的功能是:删除所有值为 y 的元素。数组元素中的值和 y 的值由主函数通过键
盘读入。
注意: 部分源程序存在文件prog.c 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#define M 20
void fun ( int bb[ ], int *n, int y )
{……}
main( )
{ int aa[M], n, y, k;
clrscr();
printf( "\nPlease enter n : " ); scanf ( "%d", &n );
printf ( "\nEnter %d positive number :\n ", n );
for (k = 0; k< n; k++ )scanf ("%d",&aa[k]);
printf ( "The original data is : \n" );
for (k = 0; k< n; k++ ) printf ("%5d",aa[k]);
printf ("\nEnter a number to deleted: " ); scanf ("%d", &y );
fun ( aa, &n, y );
printf ("The data after deleted %d : \n", y );
for ( k = 0; k < n; k++ ) printf ( "%4d ", aa[ k ] );
printf( "\n" );
}
(2011年2月)
解析: 本题的考核点是数组、循环语句和删除数组中某个元素的算法。
解题思路:先通过外循环语句将数组中的所有元素依次与y值相比较,如果与y
值不相等,则将其值存入另一个数组中,最后再将这些与y值不相等的值存回
原来数组中,并修改数组元素总个数。
void fun ( int bb[ ], int *n, int y )
{ int i,j=0;
int aa[M];
for(i=0;i< *n;i++)
if(bb[i]!=y)
aa[j++]=bb[i]; /*如果与y值不相等,则将其值存入到aa数组中*/
*n=j; /*修改数组元素总个数*/
for(i=0;i< *n;i++)
bb[i]=aa[i]; /*些与y值不相等的值存回原数组aa中*/
}
若是返回1,否则返回0。在main()函数中,若fun()返回1 则输出YES,若fun()
返回0 则输出NO!
试题程序:
#include < conio.h >#include < stdio.h >int fun(int m)
{ int k=2;
while (k< =m__1__(m%k))
__2___
if(__3__)
return 1;
else return 0;
}
main()
{ int n;
printf("\nPlease enter n: "); scanf("%d",&n);
if(fun(n)) printf("YES\n");
else printf("NO!\n");
}
(2011年2月)
解析: 填空1:函数fun()的功能是判断m 是否为素数:m 从2 开始作为除
数,并对m取余,空的两边都是逻辑表达式,左边判断k是否小于m,右边判
断k是否可以被m 整除,两边的关系是逻辑与。
填空2:这个循环的作用是在k小于m且不被m整除的情况下自加,要注意的
是在句尾加';',这是C语言的规定。
填空3:在循环结束之后,如果m 和k相等那么m就是素数,这里要注意的是
表达式中的'=='不要写成赋值符号'=' 。
答案:【1】&& 【2】k++ ; 【3】m==k
【真题2】 给定程序modi.c 中,函数fun 的功能是:计算并输出k 以内最大的10
个能被13 或17 整除的自然数之和。k 的值由主函数传入,若k 的值为500,则函
数值为4622。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数,
#include < conio.h >#include < stdio.h >int fun( int k )
{ int m=0, mc=0, j, n;
while ((k >= 2) && (mc < 10))
{/************found************/
if ((k%13 = 0) || (k%17 = 0))
{ m = m+ k; mc++; }
k--;
}
return m;
/************found************/
_____
main ( )
{ clrscr( );
printf("%d\n", fun (500));
}
(2011年2月)
解析: 本题的考核点是C语言中常用运算符的使用,以及一些常用规定。
观察题目可知,if语句表达的条件必须是能够整除13 或整除17,即某个数除
以13 或17 后等于0。"="是赋值运算符,"=="才是"等于"运算符。所以,
"="应改为"=="。
每一个C 程序的函数体部分都必须由大括弧{ }括起来。{ }对应要完整,所以
在横线处应填入}。
【真题3】 请编一个函数 fun ,其中n 所指存储单元中存放了数组中元素的个数。
函数的功能是:删除所有值为 y 的元素。数组元素中的值和 y 的值由主函数通过键
盘读入。
注意: 部分源程序存在文件prog.c 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#define M 20
void fun ( int bb[ ], int *n, int y )
{……}
main( )
{ int aa[M], n, y, k;
clrscr();
printf( "\nPlease enter n : " ); scanf ( "%d", &n );
printf ( "\nEnter %d positive number :\n ", n );
for (k = 0; k< n; k++ )scanf ("%d",&aa[k]);
printf ( "The original data is : \n" );
for (k = 0; k< n; k++ ) printf ("%5d",aa[k]);
printf ("\nEnter a number to deleted: " ); scanf ("%d", &y );
fun ( aa, &n, y );
printf ("The data after deleted %d : \n", y );
for ( k = 0; k < n; k++ ) printf ( "%4d ", aa[ k ] );
printf( "\n" );
}
(2011年2月)
解析: 本题的考核点是数组、循环语句和删除数组中某个元素的算法。
解题思路:先通过外循环语句将数组中的所有元素依次与y值相比较,如果与y
值不相等,则将其值存入另一个数组中,最后再将这些与y值不相等的值存回
原来数组中,并修改数组元素总个数。
void fun ( int bb[ ], int *n, int y )
{ int i,j=0;
int aa[M];
for(i=0;i< *n;i++)
if(bb[i]!=y)
aa[j++]=bb[i]; /*如果与y值不相等,则将其值存入到aa数组中*/
*n=j; /*修改数组元素总个数*/
for(i=0;i< *n;i++)
bb[i]=aa[i]; /*些与y值不相等的值存回原数组aa中*/
}