本系列資料由"韜略宏智" 授權(quán)發(fā)布,任何網(wǎng)站不得轉(zhuǎn)載,否則追究法律責(zé)任。
1.填空題
下列給定程序中,函數(shù)fun()的功能是:求k!(求k的階乘,且k小于13),所有階乘的值作為函數(shù)值返回。例如:若k=10,則應(yīng)輸出3628800。
【答案】
【1】long 【2】k>0 【3】return 1
3.編程題
請(qǐng)編寫(xiě)一個(gè)函數(shù)void fun(int m,int k,int xx[]),該函數(shù)的功能是:將大于整數(shù)m且緊靠m的k個(gè)素?cái)?shù)存入xx所指的數(shù)組中。
例如,若輸入:17,5,則應(yīng)輸出:19,23,29,3l,37。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
試題程序:
#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;
}
}
}
【考點(diǎn)】數(shù)組、for循環(huán)語(yǔ)句、查找算法、參數(shù)傳遞、求素?cái)?shù)的算法,以及函數(shù)返回。
【解析】
void fun(int m,int k,int xx[])
{int g=0,i,j,flag=1;/*定義作為形參數(shù)組xx下標(biāo)的整型變量g,定義變量flag用于標(biāo)識(shí)所對(duì)應(yīng)的數(shù)是否保存到 數(shù)組中,并為flag賦初值1*/
for(i=m+1;i<m*m;i++)/*遍歷m+1到m*m間的整數(shù),m*m用于保證i有一個(gè)足夠的上限,也可以用其他足夠大的值代 替*/
{
for(j=2;j<i;j++)/*判斷i是否為素?cái)?shù)*/
{
if(i%j!=0)
flag=1;
else
/*若i能被j整除(即i不是素?cái)?shù)),就跳出內(nèi)循環(huán),并把拷貝素?cái)?shù)的標(biāo)志設(shè)為0*/
{
flag=0;
break;}
}
if(flag==1&&j>=i)/*若拷貝標(biāo)志flag=l并且j>=i則進(jìn)行拷貝。如果當(dāng)前的i是素?cái)?shù),則此刻的j和i必然等值,所以可將條件j>=i改寫(xiě)為j==i;而如果當(dāng)前的i不是素?cái)?shù),則根本不會(huì)執(zhí)行到這條語(yǔ)句,所以條件j>=i可以省略*/
{
if(k>=0)/*k>=0保證只拷貝k個(gè)素?cái)?shù)*/
{
xx[g++]=i;/*將當(dāng)前i值拷貝到數(shù)組xx中*/
k--;/*k值自減1*/
}
else
/*當(dāng)k<0(if語(yǔ)句條件為假)時(shí),執(zhí)行else語(yǔ)句中的break;即如果已經(jīng)保存了k個(gè)素?cái)?shù),則跳出第一個(gè)for循環(huán)*/
break;
}
}
}
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |