第50次二级c语言真题,2014年3月计算机二级C语言上机模拟试题及答案 18

博客包含两个C语言程序。第一个程序统计长整数各数字出现次数,通过全局变量返回结果;第二个程序修复了计算零数字个数和最大数字的错误。第三个程序要求计算特定多项式并输出结果。所有程序均需考虑特定边界条件和效率。
摘要由CSDN通过智能技术生成

函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1,c2,c3返回主函数。例如:当n=123114350时,结果应该为: c1=3 c2=1 c3=2。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include

int c1,c2,c3;

void fun(long n)

{ c1 = c2 = c3 = 0;

while (n) {

switch(___1___)

{

case 1: c1++;___2___;

case 2: c2++;___3___;

case 3: c3++;

}

n /= 10;

}

}

main()

{ long n=123114350L;

fun(n);

printf("\nThe result :\n");

printf("n=%ld c1=%d c2=%d c3=%d\n",n,c1,c2,c3);

}

解题思路:

第一处:取个位数上的数,所以n就可以得到个位数。

第二处:switch条件判断中,满足条件做好后,必须使用break语句跳出选择体,所以应填: break。

第三处:同第二处。

***************************************************

给定程序MODI1.C中函数fun的功能是: 统计一个无符号整数中各位数字值为零的个数, 通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。例如, 若输入无符号整数30800, 则数字值为零的个数为3, 各位上数字值最大的是8。

请改正函数fun中指定部位的错误, 使它能得出正确的结果。

注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!

给定源程序:

#include

int fun(unsigned n, int *zero)

{ int count=0,max=0,t;

do

{ t=n;

if(t=0)

count++;

if(max

n=n/10;

}while(n);

zero=count;

return max;

}

main()

{ unsigned n; int zero,max;

printf("\nInput n(unsigned): "); scanf("%d",&n);

max = fun( n,&zero );

printf("\nThe result: max=%d zero=%d\n",max,zero);

}

解题思路:

第一处:条件相等符号为==。

第二处:由于zero是一个指针型变量,所以给它进行赋值时应带指针,因此应改为: *zero=count;。

***************************************************

请编写函数fun, 其功能是: 计算并输出下列多项式的值:

1       1              1

S = 1 + ── + ─── + … + ─────

1*2     1*2*3         1*2*3*…50

例如, 在主函数中从键盘给n输入50后,输出为:s=1.718282。

注意: 要求n的值大于1但不大于100。

部分源程序在文件PROG1.C中。

请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。

给定源程序:

#include

double fun(int n)

{

}

main()

{ int n; double s;

printf("\nInput n: "); scanf("%d",&n);

s=fun(n);

printf("\n\ns=%f\n\n",s);

NONO();

}

解题思路:

本题是根据公式计算多项式的值。注意变量的取值范围。

参考答案:

double fun(int n)

{

double s=0, t=1;

int i ;

for(i=1; i<=n; i++) {

t *= i;

s += 1./t;

}

return s;

}

※※※※※※※※※※※※※※※※※※※※※※※※※

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值