《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx

上传人:b****2 文档编号:392462 上传时间:2023-04-28 格式:DOCX 页数:63 大小:33.76KB
下载 相关 举报
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第1页
第1页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第2页
第2页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第3页
第3页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第4页
第4页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第5页
第5页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第6页
第6页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第7页
第7页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第8页
第8页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第9页
第9页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第10页
第10页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第11页
第11页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第12页
第12页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第13页
第13页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第14页
第14页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第15页
第15页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第16页
第16页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第17页
第17页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第18页
第18页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第19页
第19页 / 共63页
《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx_第20页
第20页 / 共63页
亲,该文档总共63页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx

《《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx》由会员分享,可在线阅读,更多相关《《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx(63页珍藏版)》请在冰点文库上搜索。

《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解Word下载.docx

scanf("

%d"

&

n);

//限制数的大小

if(n<

0||n>

12)

printf("

你输入错误!

\n"

if(n==0||n==1)

此数的阶乘为1\n"

//求当n大于一时的阶乘!

if(n>

1&

&

n<

=12)

{

for(i=2;

i<

=n;

i++)

{

sum*=i;

}

%d!

=%d\n"

n,sum);

}

}

#endif

/***********************************************************************************************

请输入要求什么数的阶乘

12

12!

=479001600

Pressanykeytocontinue

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

13

****************************************************************************************************/

/**********************************************第二个函数利用数组求大数阶乘!

*******************************/

/*******************************************************************************************************

重点!

要将数组中的每一位元素都乘以2到n的数;

规范数组元素,看每位数组元素保留几位数;

在规范中,如何计算进位?

解决:

用数组元素整除位数加一的最小数例如:

保留3位,就要用数组元素整除1000;

123/1000=0,进位为0

1234/1000=1,进位为1;

如何保证每位数组元素有一定的位数?

用数组元素整除位数加一的最小数求余如:

保留3位123%1000=123;

1234%1000=234;

当有进位时,数组下标要加一;

如何判断有进位?

当当前的下标元素加一的数组元素>

零时,说明有进位;

正确输出(要逆序输出数组,从右向左);

例如:

7!

=5040假如每位数组元素保留3位数则在数组中7!

的表示法为40/5(为了方便看每位数组元素用/隔开)

由上知数组逆序输出,因为产生的进位都会加到数组的下一位;

由上可以看到如果按上面的逆序输出得到的是540,少了一个零,为了保证零的不缺失,所以输出时除了最高位的都要用

03d%保证三位,不足三位的在左边补零。

(最高位用不到补零,如果补上的话就成了005040这样不符合我们的常规看法,当然这样也不错)

#if0

{

unsignedlonga[10000]={0};

intn,i,j,k,carry,val;

do

//为了下一次计算的正确,必须循环一次初始化一次

val=0;

a[0]=1;

//请求用户输入要求数的阶乘

请输入要求阶乘的数:

输入结束!

scanf("

//判断输入的值是不是合法n必须大于等于0

if(n<

0)

printf("

输入错误!

continue;

//当n等于一或等于0时01的阶乘都为1,,当用户输入0时,输出0的阶乘,并退出do{}whie(n!

=0)循环;

elseif(n==1||n==0)

printf("

=1\n"

n);

//当n大于一的情况

else

{

for(i=2;

i++)//此循环来控制从2乘到n

{

for(j=0;

j<

=val;

j++)//此循环来控制数组中的每个元素都乘以2-n

{

a[j]*=i;

}

for(k=0;

k<

k++)//用来规范数组中的元素,每个数组元素是一个5位数

carry=a[k]/100000;

//carry为进位,要加到k+1位

a[k]%=100000;

//每个元素保留5位数

a[k+1]+=carry;

//将进位加到下一位

if(a[val+1]>

0)//如果产生的进位大于零,就是有进位,就把下标加一

val++;

}

}

//将数组逆序输出

%5d"

a[val]);

a[val]=0;

//为了保证下次的计算,数组元素要清零

for(k=val-1;

k>

=0;

k--)

%05d"

a[k]);

//%05d是为了保证数组元素是一个5位数,并且0保证了不丢失数组元素中左边的零

a[k]=0;

//每输出一位,每一位数组元素就清零

}while(n!

=0);

/*************根据上面所求的100和1000的阶乘结果**************************************

100

933262154439441526816992388562667004907159682643816214685929638952175999932299

156********976156518286253697920827223758251185210916864000000000000000000000000

1000

402387260077093773543702433923003985719374864210714632543799910429938512398629

020*********

74245040870737599188236277271887325197795059509952761208749754624970436014182780

94646496291056393887437886487337119181045825783647849977012476632889835955735432

51318532395846307555740911426241747434934755342864657661166779739666882029120737

91438537195882498081268678383745597317461360853795345242215865932019280908782973

08431392844403281231558611036976801357304216168747609675871348312025478589320767

16913244842623613141250878020800026168315102734182797770478463586817016436502415

36913982812648102130927612448963599287051149649754199093422215668325720808213331

86116811553615836546984046708975602900950537616475847728421889679646244945160765

35340819890138544248798495995331910172335555660213945039973628075013783761530712

77619268490343526252000158885351473316117021039681759215109077880193931781141945

45257223865541461062892187960223838971476088506276862967146674697562911234082439

20816015378088989396451826324367161676217916890977991190375403127462228998800519

54444142820121873617459926429565817466283029555702990243241531816172104658320367

86906117260158783520751516284225540265170483304226143974286933061690897968482590

12545832716822645806652676995865268227280707578139185817888965220816434834482599

32660433676601769996128318607883861502794659551311565520360939881806121385586003

01435694527224206344631797460594682573103790084024432438465657245014402821885252

47093519062092902313649327349756551395872055965422874977401141334696271542284586

23773875382304838656889764619273838149001407673104466402598994902222217659043399

01886018566526485061799702356193897017860040811889729918311021171229845901641921

06888438712185564612496079872290851929681937238864261483965738229112312502418664

93531439701374285319266498753372189406942814341185201580141233448280150513996942

90153483077644569099073152433278288269864602789864321139083506217095002597389863

55427719674282224875758676575234422020757363056949882508796892816275384886339690

99598262809561214509948717012445164612603790293091208890869420285106401821543994

57156805941872748998094254742173582401063677404595741785160829230135358081840096

99637252423056085590370062427124341690900415369010593398383577793941097002775347

20000000000000000000000000000000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000000000000000000000000000000

0000000000

0!

=1

1

**************************************************************************************/

例2

/************************************************************************

将键盘输入的一串字符显示在屏幕上,遇到字符‘*’时终止(用while循环来实现)

设计;

2012-03-0523:

48

*********************************************************************************/

/**********************************************************************************************************************

哈!

在下面还有另一种实现方法,感兴趣的可以看看啊!

(当然还有其他方法,在这就不一一介绍啦,,可以自己去发掘啊!

******************************************************************************************************************/

/****第一种方法用while来实现****************************************/

charch;

请输入字符\n"

ch=getchar();

while(ch!

='

*'

%c"

ch);

//*********1

ch=getchar();

//**********2

/*******************当把1放在2的上面的时候输出的结果如下**************

请输入字符

sds

sddd*

sddd

//*********************************当把1放在2的下面的时候输出结果如下**********************

sdsd

dsd

sdsff*

***********************************************************************/

//***************第二中方法****************************

intch;

loop:

//用goto语句实现循环

if(ch!

gotoloop;

/************************************************************

请输入字符

sfse

er

ssfd/*

ssfd/Pressanykeytocontinue

/*************************************************************/

例3

/******************************************************************************

输入某门课程的若干名同学的成绩,以-1作为结束输入的标志,计算该门课程的平均成绩。

2012-03-0610:

10

**************************************************************************/

/*************************************先分析下课本上的例题,哈!

这题有问题啊!

可以看下面改的代码,虽用while也能改,但用惯了do{}while()*************/

/***********************可以自己尝试用while来改啊!

**********************************************/

intn=0;

floatscore,sum=0;

//要求用户输入成绩!

请输入成绩按-1结束\n"

%f"

score);

//判断取值是不是合法,可惜只能判断一次

if(score==-1||score<

0)

错误数据\n"

if(score>

0)//只能判断第一次输入的值,而不能在判断第二次,因此运算时会产生错误

while(score!

=-1)//问题:

当在循环时,用户输入不是-1的负数时,会产生怎样的结果?

由下面的第二部分可知;

明显是错误的结果;

sum+=score;

n++;

scanf("

//输出平均值,没有学生个数,总分,即使错了,用户也很难发觉

平均值为%g\n"

sum/n);

/**************第一部分**************************

请输入成绩按-1结束

23

45

34

56

-1

平均值为39.5

/*****************************第二部分***********

12-4-1

平均值为4

*********************************************************/

/**********************分析****************

1由上面的输出结果首先的问题是没有好的人机交互方式,显得比较生硬;

2由上面的第二部分看出,明显输出的是错误结果,当用户误输入时,不会有提醒,直接算出错误结果;

***********************************************************************************************/

/*下面是改的代码,,大家给我找错误,告诉我啊感激不尽!

只有不断发现错误,才会进步的*/

floatscore,average,sum=0;

//do{}while()来控制循环直到输入-1结束循环

请输入学生的成绩按-1结束\n"

if(score<

-1||(score>

-1&

score<

0))//判断用户输入值是不是合法

你输入错误\n"

elseif(score==-1)

结束输入\n"

sum+=score;

//计算总分

n++;

//计数器,记载输入学生的个数

}while(score!

=-1);

//对总分。

平均分的输出

if(n!

=0)//如果n为0说明没有输入学生数据(或正确的学生数据),就不执行下面的语句

你输入数据的个数为%d\n"

n);

你输入的成绩的总分为%g\n"

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

当前位置:首页 > 法律文书 > 调解书

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

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