5
题目:
给定程序的功能是求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:圆面积公式为:S=3.14159*r*r,在程序中定义的变量名要与公式的变量相同)。
例如,输入圆的半径值:19.527,输出为s=598.950017。
注意:部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
float fun ( float ___1___ )
{
return 3.14159 * ___2___ /2.0;
}
main()
{
float x;
printf ( "Enter x: ");
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
double fun( double q )
{
int n;
double s;
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=3 c2=1 c3=2。
注意:部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#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);
}
8
题目:
请补充main函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找出最大的整数。当输入的整数为0时结束。
例如,当输入1 2 3 5 4 0时,最大的数为5。
注意:部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其他任何内容。
#include
#include
#define N 100
main()
{
int num[N];
int i=-1;
int max=0;
clrscr();
printf("\nInput integer number: \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
float fun ( float r )
{
/* 根据圆面积公式计算二分之一的圆面积 */
return 3.14159 * r * r /2.0;
}
main()
{
/* 定义代表圆半径的变量x */
float x;
/* 输出提示信息"Enter x: " */
printf ( "Enter x: ");
/* 使用x变量接收键盘输入的圆半径 */
scanf ( "%f", &x );
/* 输出计算结果 */
printf (" s = %f\n ", fun ( x ) );
}
6
分析:
注解如下:
#include
double fun( double q )
{
int n;
/* 定义s变量保存Sn的值 */
double s;
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函数 */
return s;
}
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
int c1,c2,c3;
void fun(long n)
{
/* 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,也会执行case 2的程序 */
case 1: c1++;break;
/* 判断n最低位的数字是否为数字2 */
case 2: c2++;break;
/* 判断n最低位的数字是否为数字3 */
case 3: c3++;
}
/* 丢弃n的最低位,因为最低位已经检查过了 */
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);
}
以上程序中要注意的是第二处和第三处填空必须填写break语句。如果第二处不加break语句,当n%10等于1的情况下,程序会执行case 2的部分,虽然我们的意图是只执行case 1的部分。这是很多考生容易犯错的地方。同理,第三处填空处也需要填写break语句。如果不写break语句,当n%10等于2的时候,将执行case 2部分的程序,c2变量得到加一,但是没有break语句,程序将继续执行case 3部分的程序,将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
#define N 100
main()
{
/* 定义一个足够大的数组存放从各个键盘上输入的整数 */
int num[N];
int i=-1;
/* max存放最大值,初始值为0可以使max小于其他整数 */
/* 从而在与其他整数比较大小的时候被替换成较大者,保持max变量为最大值 */
int max=0;
/* clrscr函数的作用是清除程序输出窗口的所有已经显示的内容 */
/* clrscr函数定义在conio.h中,所以需要#include
clrscr();
/* 输出提示信息"Input integer number:" */
print
f("\nInput integer number: \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
}while(num[i]!=0);
/* 由于题目要求当输入的整数为0时结束,所以循环条件为num[i]!=0 */
/* 输出最大值max */
printf("max=%d\n", max);
}