国家二级(C语言)机试模拟试卷916
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列: 2,3,5,7,11,13,17,19,23,函数fun的作用是,用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件blank1.c中。
不得增行或删行,也不得更改程序的结构!
#include
int fun(int n)
{ int a[10000], i,j, count=0;
for (i=2; i<=n; i++) a[i] = i;
i = 2;
while (i<n) {
/**********found**********/
for (j=a[i]*2; j<=n; j+=___1___)
a[j] = 0;
i++;
/**********found**********/
while (___2___==0)
i++;
}
printf(\\
(1)a[i] (2)a[i] (3)0
解析:填空1:因为本题的方法是首先从素数2开始,将所有2的倍数的数从中删去(把数表中相应位置置零),可知本空应填a[i]。
填空2:while循环表示接着从数表中找下一个非零数,并从表中删去该数的所有倍数,此空填a[i]。
填空3:因为要统计表中素数个数,因而只需把置零的数排除开来,因而此空填写0。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:为一个偶数(大于等于6)寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。
请改正函数fun中的错误,使它能得出正确的结果。
注意:部分源程序在文件modi1.c中。
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
void fun(int a, int *b, int *c)
{ int i,j,d,y;
for (i=3;i<=a/2;i=i+2)
{
/*************found**************/
y=0;
for (j=2;j<=sqrt((double)i);j++)
if (i%j==0) y=0;
if (y==1)
{
/*************found**************/
d=i-a;
for (j=2;j<=sqrt((double)d);j++)
if (d%j==0) y=0;
if (y==1)
{*b=i; *c=d;}
}
}
}
void main( )
{ int a,b,c;
do
{ printf(\\
(1)y=1;
(2)d=a-i;
解析:
程序设计题
3.使VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,该函数的功能是:计算并输出n(包括n)以内所有能被5或9整除的自然数的倒数之和。
例如,若主函数中从键盘给n输入20后,则输出为S= 0.583333。
注意: n的值要求不大于100。
注意:部分源程序在文件prog1.c中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
double fun(int n)
{
\\t
}
void main( )
{ int n;
double s;
void NONO( );
printf(\\
double fun(int n)
{
int i;
double sum=0.0;
for(i=1;i<=n;++)
ifi%5==0||i%9==0)
sum+=1.0/i;
return sum;
}
解析:本程序中循环语句用来遍历n以内的所有自然数,条件语句用来判断该数是否能被5或9整除,注意此处判断条件中应使用逻辑或\\
本文档预览:3600字符,共2769字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载