上机填空题58.docx
- 文档编号:29461219
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:12
- 大小:19.03KB
上机填空题58.docx
《上机填空题58.docx》由会员分享,可在线阅读,更多相关《上机填空题58.docx(12页珍藏版)》请在冰豆网上搜索。
上机填空题58
5
题目:
给定程序的功能是求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:
圆面积公式为:
S=3.14159*r*r,在程序中定义的变量名要与公式的变量相同)。
例如,输入圆的半径值:
19.527,输出为s=598.950017。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
floatfun(float___1___)
{
return3.14159*___2___/2.0;
}
main()
{
floatx;
printf("Enterx:
");
scanf("%f",___3___);
printf("s=%f\n",fun(x));
}
6
题目:
给定程序的功能是计算并输出下列级数的前n项之和Sn,直到Sn大于q为止,q的值通过形参传入。
Sn=2/1+3/2+4/3+……+(n+1)/n
例如,若q的值为50.0,则函数值为50.416687。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
doublefun(doubleq)
{
intn;
doubles;
n=2;
s=2.0;
while(s___1___q)
{
s=s+(double)(n+1)/n;
___2___;
}
printf("n=%d\n",n);
___3___;
}
main()
{
printf("%f\n",fun(50));
}
7
题目:
函数fun的功能是:
统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1、c2、c3返回主函数。
例如,当n=123114350时,结果应该为:
c1=3c2=1c3=2。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
intc1,c2,c3;
voidfun(longn)
{
c1=c2=c3=0;
while(n)
{
switch(___1___)
{
case1:
c1++;___2___;
case2:
c2++;___3___;
case3:
c3++;
}
n/=10;
}
}
main()
{
longn=123114350L;
fun(n);
printf("\nTheresult:
\n");
printf("n=%ldc1=%dc2=%dc3=%d\n",n,c1,c2,c3);
}
8
题目:
请补充main函数,该函数的功能是:
从键盘输入一组整数,使用条件表达式找出最大的整数。
当输入的整数为0时结束。
例如,当输入123540时,最大的数为5。
注意:
部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其他任何内容。
#include
#include
#defineN100
main()
{
intnum[N];
inti=-1;
intmax=0;
clrscr();
printf("\nInputintegernumber:
\n");
do
{
i++;
printf("num[%d]=",i);
scanf("%d",___1___);
max=___2___num[i]:
max;
}while(___3___);
printf("max=%d\n",max);
}
淘宝网有更多的实惠等着你呢
10元封顶文具特卖场给宝宝全世界的呵护数码产品暑期排行榜09全球购夏日折扣季时尚与手机同行时尚尤物百变女人机女装夏末大扫购-T恤特惠专场学生性价比手机全攻略炎夏美装美肤搭配指南新品泳装购买指南清凉生活全攻略消费保障服务
解答
5
分析:
该程序求二分之一的圆面积,而圆面积公式为S=3.14159*r*r,所以main函数中需要输入圆的半径r,然后在fun函数中使用圆面积公式计算圆面积的二分之一。
在main函数中,由于圆的半径长度可以带有小数部分,所以代表圆的半径长度的变量必须是实数类型,即float或者double类型。
所以第三处填空处应该填写&x,使用x变量接收scanf函数输入的圆的半径长度。
由于题目要求"在程序中定义的变量名要与公式的变量相同",所以在fun函数中代表圆的半径长度的变量必须使用r变量(因为圆面积公式为S=3.14159*r*r),所以第一处填空处填写"r",而第二处填空处根据圆面积公式为S=3.14159*r*r填写"r*r"。
整个程序注解如下:
#include
floatfun(floatr)
{
/*根据圆面积公式计算二分之一的圆面积*/
return3.14159*r*r/2.0;
}
main()
{
/*定义代表圆半径的变量x*/
floatx;
/*输出提示信息"Enterx:
"*/
printf("Enterx:
");
/*使用x变量接收键盘输入的圆半径*/
scanf("%f",&x);
/*输出计算结果*/
printf("s=%f\n",fun(x));
}
6
分析:
注解如下:
#include
doublefun(doubleq)
{
intn;
/*定义s变量保存Sn的值*/
doubles;
n=2;
/*由于Sn计算公式的第一项是2,所以代表Sn之和的s变量初始值为2.0*/
s=2.0;
/*由于Sn计算直到Sn大于q为止,所以进行计算的循环设置以下循环条件*/
while(s<=q)
{
/*计算Sn新的值*/
s=s+(double)(n+1)/n;
/*准备计算Sn中下一项,为下一次循环作准备*/
n++;
}
printf("n=%d\n",n);
/*将计算得到的Sn合计值返回给main函数*/
returns;
}
main()
{
printf("%f\n",fun(50));
}
7
分析:
在程序设计方法中,有一个常用的技巧,这就是如何获得一个整数的各个位数上的数字。
方法就是运用取模(%)和整除(/)两种运算符。
两个整数进行整除运算得到的结果将只取整数部分,如果有小数部分将被丢弃。
所以通过将某个整数整除10的倍数可以去掉低位的若干位的数字,例如将123114350整除1000,即得到123114,所有低于四位数的位数都被除去,而剩下了高位的数字。
如果我想得到123,既可以进行以下运算:
123114350/100000=123。
再来看取模运算的作用。
取模运算就是取余数,例如5%3=1,因为5除以3得到余数为1。
利用取模运算我们可以得到一个整数的低位数字。
例如123114350%10=0,即得到最低位的数字0,而我们如果需要得到低两位的数字,可以进行以下运算:
123114350%100=50。
综上所述,通过整除(/)运算可以高位数字,通过取模(%)运算可以低位数字,如果我们配合使用这两种运算,即可获得整数中任一位的数字。
例如我们想得到某个整数n的千位数字,我们可以先进行整除运算,然后再进行取模运算,即进行n/1000%10运算即可。
或者先取模后整除也可以,即n%1000/1000。
例如取123114350的千位数字4,可以进行以下运算:
123114350/1000%10。
了解了以上程序设计的技巧之后,我们再回到题目中。
为了统计长整数n的各个位上出现数字1、2、3的次数,我们可以使用循环逐个检查长整数n的各个位数上的数字。
那如何做到逐个检查长整数n的各个位数上的数字呢?
我们可以使用取模(%)和整除(/)两种运算实现以上思路。
先使用n%10取得n变量中123114350最低位的数字,判读该数字是否为数字1、2、3。
如果是1,记录数字1个数的c1变量加一。
如果是2,记录数字2个数的c2变量加一。
如果是3,记录数字3个数的c3变量加一。
然后将n值整除10,得到的值覆盖n值,这样就丢弃了最低位的数字,然后再次使用n%10取得n变量中12311435最低位的数字,然后再判断该数是否为数字1、2、3,反复以上过程,直至n等于0为止。
程序注解如下:
#include
intc1,c2,c3;
voidfun(longn)
{
/*c1、c2、c3分别表示数字1、2、3的个数,所以初始值应该为0*/
c1=c2=c3=0;
/*进行循环逐个检查每个位数上的数字是否为数字1、2、3*/
/*类似于while(n)的写法是while(n!
=0)的简写方式*/
while(n)
{
/*判断n最低位的数字是否为数字1、2、3*/
switch(n%10)
{
/*判断n最低位的数字是否为数字1*/
/*注意要加break语句,否则即使为数字1,也会执行case2的程序*/
case1:
c1++;break;
/*判断n最低位的数字是否为数字2*/
case2:
c2++;break;
/*判断n最低位的数字是否为数字3*/
case3:
c3++;
}
/*丢弃n的最低位,因为最低位已经检查过了*/
n/=10;
}
}
main()
{
longn=123114350L;
fun(n);
printf("\nTheresult:
\n");
printf("n=%ldc1=%dc2=%dc3=%d\n",n,c1,c2,c3);
}
以上程序中要注意的是第二处和第三处填空必须填写break语句。
如果第二处不加break语句,当n%10等于1的情况下,程序会执行case2的部分,虽然我们的意图是只执行case1的部分。
这是很多考生容易犯错的地方。
同理,第三处填空处也需要填写break语句。
如果不写break语句,当n%10等于2的时候,将执行case2部分的程序,c2变量得到加一,但是没有break语句,程序将继续执行case3部分的程序,将c3变量也加一了,也不是我们希望的,所以必须在第三处填空处加上break语句,这样的话,c2变量加一之后,执行break语句,就直接执行n/=10这一句了。
这才是我们所希望的。
8
分析:
题目要求使用条件表达式找出最大的整数,所谓条件表达式就是指a>b?
c:
d,根据C语言的语法,a>b?
c:
d整个表达式表示根据a>b条件是否成立判断整个表达式的值为c还是d,如果a>b成立,则整个表达式的值为c,否则为d。
所以e=a>b?
c:
d整个表达式是以下语句的简写方式:
if(a>b)
e=c;
else
e=d;
在题目的程序中首先定义了保存最大值的变量max,然后使用了do-while循环语句进行输入整数,输入之后使用条件表达式将输入的整数和max进行比较大小。
如果输入的整数大于max的值,则将输入的整数覆盖max的值,否则max的值不变,这样max始终保持目前的最大值。
反复进行以上过程,直到输入的整数为0,do-while循环应该退出,这时候max变量的值就是从键盘输入一组整数中最大的值。
这里注意的是,max的初始值设置为0,这样才能在第一次和输入的整数比较大小的时候替换成输入的整数,这是程序设计中的一个技巧,希望考生能够自己体会一下。
程序注解如下:
#include
#include
#defineN100
main()
{
/*定义一个足够大的数组存放从各个键盘上输入的整数*/
intnum[N];
inti=-1;
/*max存放最大值,初始值为0可以使max小于其他整数*/
/*从而在与其他整数比较大小的时候被替换成较大者,保持max变量为最大值*/
intmax=0;
/*clrscr函数的作用是清除程序输出窗口的所有已经显示的内容*/
/*clrscr函数定义在conio.h中,所以需要#include
clrscr();
/*输出提示信息"Inputintegernumber:
"*/
printf("\nInputintegernumber:
\n");
/*下面使用do-while循环反复输入整数和max进行比较大小*
/*关键在于max的值一直被较大的整数替换*/
do
{
i++;
/*输出提示信息:
"num[i]=",其中i的值是由i变量决定的*/
printf("num[%d]=",i);
/*使用scanf函数输入整数,并且存放在num数组中*/
scanf("%d",&num[i]);
/*将输入的整数与max当前值比较大小*/
/*如果max /*否则还是使用max原有的值替换,也就是值保持不变*/ max=max num[i]: max; }while(num[i]! =0); /*由于题目要求当输入的整数为0时结束,所以循环条件为num[i]! =0*/ /*输出最大值max*/ printf("max=%d\n",max); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 填空 58