第5章作业答案DOC.docx

上传人:b****8 文档编号:12629821 上传时间:2023-06-06 格式:DOCX 页数:27 大小:21.54KB
下载 相关 举报
第5章作业答案DOC.docx_第1页
第1页 / 共27页
第5章作业答案DOC.docx_第2页
第2页 / 共27页
第5章作业答案DOC.docx_第3页
第3页 / 共27页
第5章作业答案DOC.docx_第4页
第4页 / 共27页
第5章作业答案DOC.docx_第5页
第5页 / 共27页
第5章作业答案DOC.docx_第6页
第6页 / 共27页
第5章作业答案DOC.docx_第7页
第7页 / 共27页
第5章作业答案DOC.docx_第8页
第8页 / 共27页
第5章作业答案DOC.docx_第9页
第9页 / 共27页
第5章作业答案DOC.docx_第10页
第10页 / 共27页
第5章作业答案DOC.docx_第11页
第11页 / 共27页
第5章作业答案DOC.docx_第12页
第12页 / 共27页
第5章作业答案DOC.docx_第13页
第13页 / 共27页
第5章作业答案DOC.docx_第14页
第14页 / 共27页
第5章作业答案DOC.docx_第15页
第15页 / 共27页
第5章作业答案DOC.docx_第16页
第16页 / 共27页
第5章作业答案DOC.docx_第17页
第17页 / 共27页
第5章作业答案DOC.docx_第18页
第18页 / 共27页
第5章作业答案DOC.docx_第19页
第19页 / 共27页
第5章作业答案DOC.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第5章作业答案DOC.docx

《第5章作业答案DOC.docx》由会员分享,可在线阅读,更多相关《第5章作业答案DOC.docx(27页珍藏版)》请在冰点文库上搜索。

第5章作业答案DOC.docx

第5章作业答案DOC

[5-1]编写程序,输入某种功课的若干个同学的成绩,以-1作为终止的特殊成绩,计算平均成绩并输出.

[解]

#include“stdio.h”

voidmain()

{

inti,score;

floatsum;

i=0;

printf(“enterscoreendwith-1:

”);

scanf(“%d”,&score);

while(score!

=-1)

{i=i+1;

sum=sum+score;

scanf(“%d”,&sore);

}

printf(“averscoreis%f”,sum/i);

}

程序运行时,首先显示enterscoreendwith-1:

如果用户输入:

98998786-1

则运行结果为:

啊上十92.500000

[5-2]编写程序计算如果每年按照年利率I(例如2%)投资S(例如50000元),在第Y(例如10)年得到的总钱数M。

公式:

M=S*(1+I)y

[解]

#Include“stdio.h”

Voidmain()

{

floatI,s,m;

inty;

printf(“Enterdata:

”);

scanf(“%f%f%d”,&I,&s,&y);

m=s;

while(y>=1)

{m=m*(1+i);

y--;

}

printf(“Thereare%10.2fyuan”,m);

}

程序运行时,首先显示Enterdata:

如果用户输入:

0.025000010

则运行结果为:

Thereare59754.63yuan

[5-3]编写程序,用循环语句输入下列图形。

ABCDEFGHIJKLM*NOPQRSTUVWXYZ

BCDEFGHIJKLM*NOPQRSTUVWXY

CDEFGHIJKLM*NOPQRSTUVMX

DEFGHIJKLM*NOPQRSTUVM

EFGHIJKLM*NOPQRSTUV

FGHIJKLM*NOPQRSTU

GHIJKLM*NOPQRST

HIJKLM*NOPQRS

IJKLM*NOPQR

JKLM*NOPQ

KLM*NOP

LM*NO

M*N

*

[解]

#include“stdio.h”

Voidmain()

{

intI,j;charc;

for(i=0,i<=13;i++)

{

for(j=0;j

putchar(‘’);

for(c=‘A’+i;c<=‘M’;c++)

putchar(c);

putchar(‘*’);

for(c=‘N’;c<=‘Z’-i;c++)

putchar(c);

putchar(‘\n’);

}

}

程序运行时,将按题目要求显示图形。

[5-4]编写程序,输出九九乘法表。

1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9

2*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18

……….

[解]

#include“stdio.h”

Voidmain()

{

inti,j;

for(i=1;i<=9;i++)

{

for(j=1;j<=9;j++)

printf(“%d+%d=%2d”,i,j,i*j);

printf(“\n”);

}

}

程序运行时,将按题目要求显示九九表。

[5-5]编写程序,输入一组字符(以#号结尾),对该组字符做一个统计,统计字母、数字和其他字符的个数,输出统计结果。

[解]

#include“stdio.h”

Voidmain()

{

charc;

intcount_char,count_digital,count_other;

count_char=count_digital=count_other=0;

c=getchar();

while(c!

=‘#’)

{

if(c>=‘a’&&c<=‘z’∣∣c>=‘A’&&c<=‘Z’)

count_char++;

elseif(c>=‘0’&&c<=‘9’)

count_digital++;

else

count_other++;

c=getchar();

}

printf(“\nchar:

%d,digital:

%d,others:

%d\n”,count_char,count_digital,count_other);

}

程序运行时,

如果用户输入:

Thereare30studentsintheclassroom

则运行结果为:

char:

30,digital:

2,others:

7

[5-6]编写程序通过计算100个矩形的面积得到函数f(x)的数值积分。

f(x)=(x+x2,其中0≤x≤b。

[解]

#definef(x)((x)*(x)+(x))

#include“stdio.h”

voidmain()

{

Doublea,b,h,x,sum;

inti;

a=0;

b=0;

h=(b-a)/100;

sum=0;

for(i=0;i<100;i++)

{

x=a+i*h;

sum=sum+h*f(x);

}

printf(“\nsumofareais%lf”,sum);

}

程序运行结果:

Sumofareais4.066800

[说明]

本题的循环是比较简单的,是循环100次,框图在此略去。

主要是要计算在区间(a,b)之间的100个小矩形的面积,这100个小矩形的宽是(b-a)/100,高是f(x),x的值在区间(a,b)中,第一个x的值是a+1*h,第二个x值是a+2*h,依次类推。

[5-7]求1-1/2+1/3-1/4+.....+(-1)n+1/n的值并输出。

结束条件为︳1/n︳<10-5。

[解]

#include“stdio.h”

#include“math.h”

voidmain()

{

floata,b,h,x,sum;

intflag;

longi;

for(i=1,sum=0,flag=1;fabs(1.0/i)>=1.E-5;I++)

{

sum=sum=flag*1.0/i;

flag=-flag;

}

Printf(“\nSumis%f”,sum);

}

[解]

程序的运行结果:

sumis0.693134

[说明]

本题的关键是循环的次数不是使用循环计数器控制,而是使用一个条件来控制循环,循环条件是:

fads(1.0/i)>=1.E-5

[5-8]

若口袋放12个球,3个红的,3个白的,6个黑的,从中任选8个,编写程序列出所有可能的取法。

[解]

方法一:

#include“stdio.h”

voidmain()

{

intred,white,black;

for(red=0;red<=3;red++)

for(white=0;white<=3;white++)

for(black=0;black<=6;black++)

if(red+white+black==8)

printf(“\nred%d,white%d,black%d”,red,white,black);

}

方法二:

#include“stdio.h”

voidmain()

{

intred,white,black;

for(red=0;red<=3;red++)

for(white=0;white<=3;white++)

if((8-red-white)<=6)

printf(“\nred%d,white%d,black%d”,red,white,8-red-white);

}

程序运行结果:

red0,white2,black6

red0,white3,black5

red1,white1,black6

[说明]

本题使用穷举法解决问题。

第一种方法使用三重循环,对每一种颜色的球的个数进行穷举,红色和白色球个数的上限为3,黑色白色球个数的上限为6,三种球的个数想加是8,就是一组取法;第二种方法使用双重循环,只对红色和白色球的个数进行穷举,而黑色球使用公式8-red-white计算出来,当然这个数的上限为6,所以要用if语句做判断,黑色球满足这个条件时,就是一组取法。

[5-9]编写程序,输入一个正整数,计算并显示该整数的各位数字之和,例如整形数1987各位数字之和是1+9+8+7,等于25。

[解]

#incliude“stdio.h”

voidmain()

{

longi,sum;

intk;

printf(“\nenterainteger:

”);

scanf(“%d”,&i);

sum=0;

while(i!

=0)

{k=i%10;

sum=sum+k;

i=i/10;

}

printf(“\nsumis%d”,sum);

}

程序运行时,首先显示Enterainteger:

如果用户输入:

1987

则运行结果为

sumis25

[5-10]编写程序用循环语句解决下列问题:

一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第10次落地时共经过多少米?

第10次反弹多少米?

[解]

方法一:

#include“stdio.h”

voidmain()

{

inti;

floattotal,high;

total=high=100.0;

i=1;

while(i<=10)

{

high=hight/2;

total=total+2*high;

i++;

}

total=total-2*high;

printf(“\nTotalis%f,thetenthis%f”,total,high);

}

方法二:

#include“stdio.h”

voidmain()

{

inti;

floattotal,high;

total=100.0;

higf=total/2;

i=2;

while(i<=10)

{

total=total+2*high;

high=high/2;

i++;

}

printf(“\nTotalis%f,thetenthis%f!

”,total,high);

}

程序运行结果:

Totalis299.609375,thetenthis0.097656!

[说明]

本题循环语句控制也是比较简单的,只是要注意循环次数与题目的要求是否吻合。

例如,方法一中,循环次数是10次,则为了求在第十次落地时共经过多少米,需要将第十次反弹的距离减掉。

[5-11]请为“百鸡问题”编写程序。

百鸡问题:

“鸡翁一,值钱三;鸡雠三,值钱一。

百钱买百鸡,问鸡翁、母、雠各几只“。

[解]

方法一:

#include“stdio.h”

voidmain()

{

intcock,hen,chick;

for(cock=0;cock<=20;cock++)

for(hen=0;hen<=33:

hen++)

for(chick=0;chick<=100;chick++)

if(cock*5+hen*3+chick/3==100&&chick%3\

==0&&(cock+hen+chick)==100)

printf(“\ncock%d,hen%d,chick%d”,cock,hen,chick);

}

方法二:

#include“stdio.h”

voidmain()

{

intcock,hen,chick;

for(cock=0;cock<=20;cock++)

for(hen=0;hen<=33;hen++)

{

chick=100-hen-cock;

if(cock*5+hen*3+chick/3==100&&chick%3==0&&(cock+hen+chick)==100)

printf(“\ncock%d,hen%d,chick%d”,cock,hen,chick);

}

}

方法三:

#include“stdio.h”

voidmain()

{

intcock,hen,chick;

for(cock=0;cock<=20;cock++)

{hen=(100-7*cock)/4;

chick=100-hen-cock;

if(cock*5+hen*3+chick/3==100&&chick%3==0&&(cock+hen+chick)

==100\&&hen>=0&&chick>=0)

printf(“\ncock%d,hen%d,chick%d”,cock,hen,chick);

}

}

程序运行结果:

cock0,hen25,chick75

cock4,hen18,chick78

cock8,hen11,chick81

cock12,hen4,chick84

[说明]

方法一使用三重循环对鸡翁、母、雏的只数进行穷举,是最容易想到的方法,也是效率最低的;方法二使用双重循环对鸡翁、母的只数进行穷举,而鸡雏的只数由公式“100-鸡翁-鸡母”计算;而由下面两个公式:

鸡翁+鸡母+鸡雏=100

鸡翁*5+鸡母*3+鸡雏/3=100

可以推出:

鸡翁*7+鸡母*4=100,从而得出鸡母=(100-鸡翁*7)/4,因此方法三只对鸡翁的只数进行穷举,而鸡母和鸡雏分别用公式求得,因此用单循环即可,是效率最高的方法。

[5-12]编写程序求解1000!

的末尾有多少个0(注意,不能做连乘,否则会溢出的)。

[解]

#include“stdio.h”

voidmain()

{

intI,sum,k;

sum=0;

for(i=5;i<=1000;i=i+5)

{

k=i;

while(k%5==0)

{sum=sum+1;

k=k/5;

}

}

printf(“\nThereare%dzerointheendof1000!

\n”,sum);

}

程序运行结果:

Thereare249zerointheendof1000!

[说明]

本题不能用连乘来判断1000!

末尾的0的个数,而是判断从1到1000中有多少个因子5,因为任何一个偶数乘以5都会得到一个0。

[5-13]编写程序求a+aa+aaa…+aa…a,其中a是一个数字。

例如:

3+33+333+3333+33333(此时n为5)。

要求a和n从键盘输入,输出格式为:

3+33+333+3333+33333=37035。

[解]

方法一:

#include“stdio.h”

voidmain()

{

longsum,s,j;

inti,a,n;

printf(“\nEnteraandn:

”);

scanf(“%d%d”,&a,&n);

sum=0;

j=1;

for(i=n;i>0;i--)

{s=i*j*a;

sum=sum+s;

j=j*10;

}

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

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

printf(“%d”,a);

if(i==n)

printf(“=%ld”,sum);

else

printf(“+”);

}

}

方法二:

#include“stdio.h”

voidmain()

{

longsum,s,a;

intI,n,j,b;

printf(“\nEnteraandn:

”);

scanf(“%ld%d”,&a,&n);

sum=0;

s=0;

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

{s=s+a;

sum=sum+s;

s=s*10;

{

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

{for(j=1;j<=I;j++)

printf(“%d”,b);

if(i==n)

printf(“=%ld\n”,sum);

else

printf(“+”);

}

}

程序运行时,首先显示Enteraandn:

如果用户输入:

25

则运行结果为:

2+22+222+2222+22222=24690

[说明]

方法一与方法二的思路完全不同。

方法一中将a+aa+aaa+aaaa+aaaaa看成是下面的式子

a

aa

aaa

aaaa

+aaaaa

----------------------------------------

从该式子看出,计算的结果应该是:

“个位的n个a”+“十位的n-1个a”+“百位的n-2个a”+…。

因此,在程序中用s=i*j*a计算“个位的n个a”,“十位的n-1个a”…;其中,i从n递减到1,而j以1,10,100的方法扩大,表示个位,十位,百位。

而方法二的思路是将a扩大10倍并加上a,变成aa;再将aa扩大10倍并加上a,变成aaa,依此类推,在变化的同时将a与aa以及aaa进行累加。

[5-14]编写程序求1!

+2!

+3!

+......+n!

n为输入并且3〈=n〈=20。

[解]

#include“stdio.h”

voidmain()

{

floatsum,product;

inti,n;

printf(“\nentern\(4<=n<=20):

”);

scanf(“%d”,&n);

while(n>20IIn<4)

{

printf(“\nenternagain:

”);

Scanf(“%d”,&n);

}

sum=0;

product=1;

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

{

product=product*i;

sum=sum+product;

}

printf(“1!

+2!

+3!

+.....%d!

=%f\n”,n,sum);

}

方法二:

#include“stdio.h”

voidmain()

{

floatsum,product;

inti,n,j;

printf(“\nEntern\(4<=n<=20\):

”);

scanf(“%d”’&n);

while(n>20IIn<4)

{

printf(“\nEnternagain:

”);

scanf(“%d”,&n);

}

sum=0;

product=1;

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

{product=1;

for(j=1;j<=i;j++)

product=product*j;

sum=sum+product;

}

printf(“1!

+2!

+%d=%f\n”’n,sum);

}

[说明]

本题为了输出格式好看,n的下限是4,为防止溢出,n的上限使20。

两种方法第一种的效率高,而第二种比较容易理解,内循环是求一!

[5-15]猴子吃桃问题。

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。

第二天剩下的桃子,吃掉一半,又多吃了一个。

以后每天将前一天的桃子吃掉一半,再多吃一个。

到第10天只剩下一个桃子,求第一天共摘了多少桃子。

[解]

#include“stdio.h”

voidmain()

{

inti,y,x;

i=1;

x=1;

while(i<=9)

{x=(x+1)*2;

i++;

}

printf(“Totalis%d\n”,x);

}

[说明]

根据题目,第10天剩下一个桃子(设为X),第9天的桃子就是(X+1)*2,第8天的桃子就是(第9天的桃子+1)*2,依次类推。

[5-16]编写程序输出下列图形:

1

22

333

4444

55555

666666

7777777

88888888

999999999

[解]

#include“stdio.h”

voidmain()

{

inti,j;charc;

for(i=1;i<=9;i++)

{

for(j=9;j>i;j--)

putchar(‘‘)’;

for(j=1;j<=I;j++)

putchar(i+‘0’);

putchar(‘\n’);

}

}

 

[5-17]判断下面程序的运行结果,并用for语句代替while语句重新编写程序,确保输出结果相同。

#include“stdio.h”

voidmain()

{

inti,sum;

i=sum=0;

while(i<=5)

{sum+=1;

i++;

}

printf(“i=%d,sum=%d\n”,i,sum);

}

[解]

程序的运行结果是:

i=6,sum=15

用for语句代替while语句程序如下:

#include“stdio.h”

voidmain*()

{

inti,sum;

for(i=sum=0;i<=5;sum+=i,i++);

printf(“i=%d,sum=%d\n”,i,sum);

}

[5-18]判断下面程序的运行结果,并用while语句代替dowhile语句重新编写程序,确保输出结果相同。

#includestdio.h”

voidmain()

{

inti,sum;

i=5;

sum=0;

do

{

Sum+=2*i;

i--;

}while(i>0);

printf(“i=%d,s

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2