上机填空题2528.docx
《上机填空题2528.docx》由会员分享,可在线阅读,更多相关《上机填空题2528.docx(13页珍藏版)》请在冰豆网上搜索。
上机填空题2528
25
题目:
函数fun的功能是:
逆置数组元素中的值。
形参n给出数组中数据的个数。
例如,若a所指数组中的数据依次为:
1、2、3、4、5、6、7、8、9,则逆置后依次为:
9、8、7、6、5、4、3、2、1。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
voidfun(inta[],intn)
{
inti,t;
for(i=0;i<___1___;i++)
{
t=a[i];
a[i]=a[n-1-___2___];
___3___=t;
}
}
main()
{
intb[9]={1,2,3,4,5,6,7,8,9},i;
printf("\nTheoriginaldata:
\n");
for(i=0;i<9;i++)
printf("%4d",b[i]);
printf("\n");
fun(b,9);
printf("\nThedataafterinvert:
\n");
for(i=0;i<9;i++)
printf("%4d",b[i]);
printf("\n");
}
26
题目:
请补充fun函数,该函数的功能求能整除x,且是偶数的数,把这些数保存在数组bb,并按从大到小输出。
例如,当x=20时,依次输出:
201042。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
#include
voidfun(intk,intbb[])
{
inti;
intj=0;
for(___1___;i<=k;i++)
{
if(___2___)
bb[j++]=i;
}
printf("\n\n");
for(i=___3___;i>=0;i--)
printf("%d",bb[i]);
}
main()
{
intk=1;
inti;
intbb[100];
clrscr();
printf("\nPleaseinputX\n");
scanf("%d",&k);
fun(k,bb);
printf("\n");
}
27
题目:
请补充fun函数,该函数的功能是:
统计所有小于等于n(n>2)的素数的个数,素数的个数作为函数值返回。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
intfun(intn)
{
inti,j,count=0;
printf("\nTheprimenumberbetween2to%d\n",n);
for(i=2;i<=n;i++)
{
for(___1___;j
if(___2___%j==0)
break;
if(___3___>=i)
{
count++;
printf(count%15?
"%5d":
"\n%5d",i);
}
}
returncount;
}
main()
{
intn=20,r;
r=fun(n);
printf("\nThenumberofprimeis:
%d\n",r);
}
28
题目:
程序的功能是计算y=0!
+1!
+2!
+3!
+4!
+……+n!
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
longfun(intn)
{
inti;
longs;
s=___1___;
for(i=1;i<=n;i++)
s=___2___;
returns;
}
main()
{
longs;
intk,n;
scanf("%d",&n);
s=___3___;
for(k=0;k<=n;k++)
s=___4___;
printf("%ld\n",s);
}
明智的选择在淘宝
国货手机PK品牌手机
火热7月母婴用品大特卖
促销大联盟限时大抢购
09夏日男装采购节
09女人狂恋首饰潮
居家品省钱搜索,浪漫主义回归!
夏季特卖杯具大搜索~~
09别样手袋包包
解答
25
分析:
题目要求在fun函数中逆置数组元素中的值。
其中参数n给出数组中数据的个数。
为了实现以上要求,题目中的程序使用了以下思路:
将数组中最后一个数据和第一个数据进行互换,然后将倒数第二个数据和第二个数据进行互换,接着将倒数第三个数据和第三个数据进行互换,反复执行以上过程,直到互换完成。
为了实现以上思路,程序使用i变量记录从第一个数据开始进行互换的位置,使用n-i-1表示从最后一个数据开始进行互换的位置,然后i不断加一,使互换的数据不断向中间位置靠拢,直至i大于中间位置(即互换过程完成)。
程序注解如下:
#include
/*a数组为要进行数据互换的数组,n为a数组中数据的个数*/
voidfun(inta[],intn)
{
inti,t;
/*开始进行互换,直到i超出数据个数的一半*/
for(i=0;i{
/*将左边的数据先保存在t变量中,防止被下面语句覆盖而丢失*/
t=a[i];
/*将右边对应位置的数据覆盖左边对应位置的数据*/
a[i]=a[n-1-i];
/*将预先保存在t变量的左边的数据覆盖右边对应位置的数据,完成互换*/
a[n-i-1]=t;
}
}
main()
{
intb[9]={1,2,3,4,5,6,7,8,9},i;
printf("\nTheoriginaldata:
\n");
/*输出互换之前的数组中的所有数据*/
for(i=0;i<9;i++)
printf("%4d",b[i]);
printf("\n");
/*调用fun函数进行互换*/
fun(b,9);
printf("\nThedataafterinvert:
\n");
/*输出互换之后的数组中的所有数据*/
for(i=0;i<9;i++)
printf("%4d",b[i]);
printf("\n");
}
26
分析:
程序注解如下:
#include
#include
/*fun函数求能被参数k整除的偶数,把这些数保存在数组bb,并按从大到小输出*/
voidfun(intk,intbb[])
{
inti;
/*j变量指示符合条件的偶数放在bb数组中的位置*/
/*由于数组从0开始,所以j的初始值设置为0*/
intj=0;
/*使用循环从1至k检查是否有偶整数能被k整除*/
for(i=1;i<=k;i++)
{
/*使用k%i==0判断当前整数能否被k整除*/
/*使用i%2==0判断当前整数是否为偶数*/
if(k%i==0&&i%2==0)
/*将符合条件的整数放入bb数组,然后j加一,准备下一个存放位置*/
/*bb[j++]=i相当于bb[j]=i;j++*/
bb[j++]=i;
}
printf("\n\n");
/*由于题目要求按从大到小输出,所以从后往前输出bb数组中的整数*/
/*j由于for循环中多加了一次,所以需要减去一然后作为偶数个数赋值给i*/
/*--j先将j减去一,然后将j的值赋值给i*/
for(i=--j;i>=0;i--)
printf("%d",bb[i]);
}
main()
{
intk=1;
inti;
intbb[100];
/*clrscr函数用于清除输出窗口中已经显示的内容*/
/*clrscr函数定义在conio.h,所以需要#include*/
clrscr();
printf("\nPleaseinputX\n");
scanf("%d",&k);
fun(k,bb);
printf("\n");
}
27
分析:
该题的核心在于如何判断一个数是素数。
所谓素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。
例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。
另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。
了解素数的概念之后,我们介绍一下程序使用的实现思路如下。
由于题目要求统计所有小于等于n(n>2)的素数的个数,所以程序使用for循环从2开始至n之间的整数i逐一进行检查,检查过程如下:
使用for循环逐一检查从整数2至整数i-1之间是否存在整数j能够被当前检查的整数i整除,如果存在这样的整数的话,整数j就不是素数。
否则整数j就是一个素数,记录素数个数的变量count增加一。
当以上内层for循环结束的时候,继续外层for循环,将2至n之间的整数逐个的进行内层循环的检查。
当所有循环结束的时候,count变量即为所有小于等于n(n>2)的素数的个数。
fun函数直接将count作为返回值返回即可。
程序注解如下:
#include
intfun(intn)
{
/*count变量最终记录所有小于等于n(n>2)的素数的个数*/
inti,j,count=0;
/*在输出窗口输出提示信息*/
printf("\nTheprimenumberbetween2to%d\n",n);
/*从2到n逐一判断是否是素数*/
for(i=2;i<=n;i++)
{
/*判断当前整数i能否整除2至i-1的之间任一整数*/
for(j=2;j
/*如果能整除任一整数则不是素数,所以退出循环*/
if(i%j==0)
break;
/*如果j>=i,说明以上for循环没有执行break语句中途退出*/
/*那么说明整数i不能整除2至i-1的之间任一整数,所以i是一个素数*/
if(j>=i)
{
/*因为i是一个素数,所以记录素数个数的count变量加一*/
count++;
/*以下输出是素数的整数i,同时保证每一行15个素数*/
printf(count%15?
"%5d":
"\n%5d",i);
}
}
/*将统计的素数个数作为函数返回值返回*/
returncount;
}
main()
{
intn=20,r;
/*调用fun函数进行题目要求的处理,接收fun函数的返回值*/
r=fun(n);
/*输出fun的处理结果*/
printf("\nThenumberofprimeis:
%d\n",r);
}
28
分析:
由于题目要求计算y=0!
+1!
+2!
+3!
+4!
+……+n!
,所以需要使用循环从0至n计算每一项阶乘。
而阶乘n!
的计算公式是n!
=n*(n-1)*(n-2)*(n-3)*……*3*2*1,所以计算阶乘n!
也需要使用循环,这个循环应该从1至n。
程序注解如下:
#include
/*fun函数计算参数n的阶乘,即n!
的值*/
longfun(intn)
{
inti;
longs;
/*因fun函数的s变量保存n!
的值,而n!
是使用乘法计算的,所以初始值为1*/
s=1;
for(i=1;i<=n;i++)
/*计算i!
的值,将i!
的值放入s变量中*/
s=s*i;
returns;
}
main()
{
longs;
intk,n;
/*输入n的值*/
scanf("%d",&n);
/*s变量保存y=0!
+1!
+2!
+3!
+4!
+……+n!
的合计值,所以初始化为0*/
s=0;
for(k=0;k<=n;k++)
/*计算0!
+1!
+2!
+3!
+4!
+……+k!
的值,将k!
的值放入s变量中*/
s=s+fun(k);
printf("%ld\n",s);
}