本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
1.填空题
下列给定程序中,函数fun()的功能是:求k!(求k的阶乘,且k小于13),所有阶乘的值作为函数值返回。例如:若k=10,则应输出3628800。
【答案】
【1】long 【2】k>0 【3】return 1
3.编程题
请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。
例如,若输入:17,5,则应输出:19,23,29,3l,37。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
void fun(int m,int k,int xx[])
{
}
main()
{
int m,n,zz[1000];
clrscr();
printf("\nPlease enter two integers:");
scanf("%d,%d",&m,&n);
fun(m,n,zz);
for(m=0;m<n;m++)
printf("%d ",zz[m]);
printf("\n");
}
【答案】
void fun(int m,int k,int xx[])
{
int g=0,i,j,flag=1;
for(i=m+1;i<m*m;i++)
{
for(j=2;j<i;j++)
{
if(i%j!=0)
flag=1;
else
{
flag=0;
break;
}
}
if(flag==1&&j>=i)
{
if(k>=0)
{
xx[g++]=i;
k--;
}
else
break;
}
}
}
【考点】数组、for循环语句、查找算法、参数传递、求素数的算法,以及函数返回。
【解析】
void fun(int m,int k,int xx[])
{int g=0,i,j,flag=1;/*定义作为形参数组xx下标的整型变量g,定义变量flag用于标识所对应的数是否保存到 数组中,并为flag赋初值1*/
for(i=m+1;i<m*m;i++)/*遍历m+1到m*m间的整数,m*m用于保证i有一个足够的上限,也可以用其他足够大的值代 替*/
{
for(j=2;j<i;j++)/*判断i是否为素数*/
{
if(i%j!=0)
flag=1;
else
/*若i能被j整除(即i不是素数),就跳出内循环,并把拷贝素数的标志设为0*/
{
flag=0;
break;}
}
if(flag==1&&j>=i)/*若拷贝标志flag=l并且j>=i则进行拷贝。如果当前的i是素数,则此刻的j和i必然等值,所以可将条件j>=i改写为j==i;而如果当前的i不是素数,则根本不会执行到这条语句,所以条件j>=i可以省略*/
{
if(k>=0)/*k>=0保证只拷贝k个素数*/
{
xx[g++]=i;/*将当前i值拷贝到数组xx中*/
k--;/*k值自减1*/
}
else
/*当k<0(if语句条件为假)时,执行else语句中的break;即如果已经保存了k个素数,则跳出第一个for循环*/
break;
}
}
}
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |