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

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

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

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

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

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

例1

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

题目:

计算n的阶乘!

设计:

狼影

时间:

2012-03-0519:

59

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

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

注意!

下面所求数的阶乘不能超过31,要请求更大数的阶乘!

请参照第二个阶乘函数!

哈!

第二个能看懂的就看啊!

思想是用数组来保存数据,然后在输出数组中的数!

(下面对它做了充分的解释,祝你能看懂哈!

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

/***********************第一个函数*******************************/

#if1

#include

main()

{

intn,i;

unsignedlongsum=1;

//请求用户输入数据,不能超过12,所以为了避免溢出出错,在下面限制了数的大小

printf("请输入要求什么数的阶乘\n");

scanf("%d",&n);

//限制数的大小

if(n<0||n>12)

printf("你输入错误!

\n");

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

printf("此数的阶乘为1\n");

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

if(n>1&&n<=12)

{

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

{

sum*=i;

}

printf("%d!

=%d\n",n,sum);

}

}

#endif

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

请输入要求什么数的阶乘

12

12!

=479001600

Pressanykeytocontinue

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

请输入要求什么数的阶乘

13

你输入错误!

Pressanykeytocontinue

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

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

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

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

重点!

要将数组中的每一位元素都乘以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

#include

main()

{

unsignedlonga[10000]={0};

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

do

{

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

val=0;

a[0]=1;

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

printf("请输入要求阶乘的数:

输入结束!

\n");

scanf("%d",&n);

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

if(n<0)

{

printf("输入错误!

\n");

continue;

}

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

=0)循环;

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

printf("%d!

=1\n",n);

//当n大于一的情况

else

{

for(i=2;i<=n;i++)//此循环来控制从2乘到n

{

for(j=0;j<=val;j++)//此循环来控制数组中的每个元素都乘以2-n

{

a[j]*=i;

}

for(k=0;k<=val;k++)//用来规范数组中的元素,每个数组元素是一个5位数

{

carry=a[k]/100000;//carry为进位,要加到k+1位

a[k]%=100000;//每个元素保留5位数

a[k+1]+=carry;//将进位加到下一位

}

if(a[val+1]>0)//如果产生的进位大于零,就是有进位,就把下标加一

val++;

}

}

//将数组逆序输出

printf("%5d",a[val]);

a[val]=0;//为了保证下次的计算,数组元素要清零

for(k=val-1;k>=0;k--)

{

printf("%05d",a[k]);//%05d是为了保证数组元素是一个5位数,并且0保证了不丢失数组元素中左边的零

a[k]=0;//每输出一位,每一位数组元素就清零

}

printf("\n");

}while(n!

=0);

}

#endif

/*************根据上面所求的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

00000000000000000000000000000000000000000000000000000000000000000000000000000000

0000000000

请输入要求阶乘的数:

输入结束!

0

0!

=1

1

Pressanykeytocontinue

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

例2

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

题目:

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

设计;狼影

时间:

2012-03-0523:

48

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

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

哈!

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

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

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

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

#if0

#include

main()

{

charch;

printf("请输入字符\n");

ch=getchar();

while(ch!

='*')

{

printf("%c",ch);//*********1

ch=getchar();//**********2

}

printf("\n");

}

#endif

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

请输入字符

sds

sds

sddd*

sddd

Pressanykeytocontinue

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

请输入字符

sdsd

dsd

sdsff*

sdsff*

Pressanykeytocontinue

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

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

#if1

#include

main()

{

intch;

printf("请输入字符\n");

loop:

//用goto语句实现循环

ch=getchar();

if(ch!

='*')

{

printf("%c",ch);

gotoloop;

}

}

#endif

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

请输入字符

sfse

sfse

er

er

ssfd/*

ssfd/Pressanykeytocontinue

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

例3

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

题目:

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

设计:

狼影

时间:

2012-03-0610:

10

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

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

这题有问题啊!

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

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

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

#if1

#include

main()

{

intn=0;

floatscore,sum=0;

//要求用户输入成绩!

printf("请输入成绩按-1结束\n");

scanf("%f",&score);

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

if(score==-1||score<0)

printf("错误数据\n");

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

{

while(score!

=-1)//问题:

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

由下面的第二部分可知;明显是错误的结果;

{

sum+=score;

n++;

scanf("%f",&score);

}

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

printf("平均值为%g\n",sum/n);

}

}

#endif

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

请输入成绩按-1结束

23

45

34

56

-1

平均值为39.5

Pressanykeytocontinue

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

请输入成绩按-1结束

12-4-1

平均值为4

Pressanykeytocontinue

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

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

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

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

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

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

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

#if0

#include

main()

{

floatscore,average,sum=0;

intn=0;

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

do

{

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

scanf("%f",&score);

if(score<-1||(score>-1&&score<0))//判断用户输入值是不是合法

{

printf("你输入错误\n");

continue;

}

elseif(score==-1)

printf("结束输入\n");

else

{

sum+=score;//计算总分

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

}

}while(score!

=-1);

//对总分。

平均分的输出

if(n!

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

{

printf("你输入数据的个数为%d\n",n);

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

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

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

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

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