文档库 最新最全的文档下载
当前位置:文档库 › 上机填空题5-8

上机填空题5-8

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);

}

相关文档