单元5 循环结构源代码.docx

上传人:b****3 文档编号:3857923 上传时间:2022-11-25 格式:DOCX 页数:12 大小:42.04KB
下载 相关 举报
单元5 循环结构源代码.docx_第1页
第1页 / 共12页
单元5 循环结构源代码.docx_第2页
第2页 / 共12页
单元5 循环结构源代码.docx_第3页
第3页 / 共12页
单元5 循环结构源代码.docx_第4页
第4页 / 共12页
单元5 循环结构源代码.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

单元5 循环结构源代码.docx

《单元5 循环结构源代码.docx》由会员分享,可在线阅读,更多相关《单元5 循环结构源代码.docx(12页珍藏版)》请在冰豆网上搜索。

单元5 循环结构源代码.docx

单元5循环结构源代码

单元5循环结构源代码

【例5-1】计算1到100的和。

#include"stdio.h"

#defineN100

intSum(void)

{

inti=1,s=0;//变量s为累加器

while(i<=N)

{

s=s+i;

i++;

}

returns;

}

intmain()

{

ints=0;

s=Sum();

printf("1+2+...+%d=%d\n",N,s);

return0;

}

【例5-2】计算给定数列前n项的和。

计算数列1/2,2/3,3/5,5/8,8/13,…前n项的和,n由用户通过键盘输入。

#include"stdio.h"

doubleSeqSum(intn)

{

doubles=0,num=1,den=2,i=1;

do

{

s=s+num/den;

den=den+num;

num=den-num;

i++;

}while(i<=n);

returns;

}

intmain()

{

doublesum;

intn;

printf("请输入项数:

");

scanf("%d",&n);

sum=SeqSum(n);

printf("数列前%d的和为:

%lf\n",n,sum);

return0;

}

【例5-3】求整数的各位数码及位数。

键盘输入一个正整数,逆序输出各位数码,并输出该整数的位数。

#include"stdio.h"

intReverse(intn)

{

intm,sum=0;//m表示当前商n的个位,sum为计数器

printf("逆序输出整数%d的各位数码为:

\n",n);

for(;n!

=0;n=n/10)

{

m=n%10;//得到n的个位数

sum++;

printf("%d\t",m);

}

returnsum;

}

intmain()

{

intn,sum;

printf("请输入一个正整数:

");

scanf("%d",&n);

sum=Reverse(n);

printf("\n整数%d是一个%d位数。

\n",n,sum);

return0;

}

【示例5-4】continue语句的使用

voidtest()

{

inta,b;

for(a=1,b=1;a<=10;a++,b++)

{

if(b%3==1)

{

b+=3;

continue;

}

if(b>=10)

break;

}

printf("%d,%d\n",a,b);

}

【例5-4】百马百担问题

有100匹马,驮100担货,大马驮三担,中马驮两担,两匹小马驮一担,问有大、中、小马各多少?

共有多少种方案?

#include"stdio.h"

#defineH100

#defineN29

#defineM46

intHorse(void)

{

intdm,zm,xm,sum=0;

for(dm=1;dm<=N;dm++)

{

for(zm=1;zm<=M;zm++)

{

xm=H-dm-zm;//计算小马的数量

if(xm%2==0&&dm*3+zm*2+xm/2==H)

{//xm%2==0保证小马的数量是偶数

printf("大马:

%3d\t中马:

%3d\t小马:

%3d\n",dm,zm,xm);

sum++;

}

}

}

returnsum;

}

intmain()

{

intsum;

sum=Horse();

printf("共有%d种方案。

\n",sum);

return0;

}

【例5-5】用递归法求n!

#include"stdio.h"

doubleFactorial(doublen)

{

if(n==1||n==0)//递归调用终止条件

return1;

else

returnn*Factorial(n-1);//利用递归关系进行递归调用

}

intmain()

{

doublen,m;

printf("请输入一个自然数:

");

scanf("%lf",&n);

m=Factorial(n);

printf("%.0lf!

=%.0lf\n",n,m);

return0;

}

【例5-6】统计输出指定范围内的素数

输出指定范围内的所有素数,并统计输出此范围内素数的个数,要求指定范围由用户输入,每行输出5个素数。

#include"stdio.h"

#include"math.h"

intPrime(intn)

{

inti,flag=1;

if(n==1)

flag=0;

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

{

if(n%i==0)

{

flag=0;

break;

}

}

returnflag;

}

intCount(inta,intb)

{

intn,count=0;

printf("%d~%d之间的素数有:

",a,b);

for(n=a;n<=b;n++)

{

if(Prime(n))

{

if(count%5==0)

printf("\n");

printf("%6d\t",n);

count++;

}

}

returncount;

}

intmain()

{

inta,b,count;

printf("请输入指定范围[a,b](用空格分隔):

");

scanf("%d%d",&a,&b);

count=Count(a,b);

printf("\n%d~%d之间共有%d个素数。

\n",a,b,count);

return0;

}

【例5-7】输出指定图案

输出以下由星号组成的图案。

*

***

*****

*******

*****

***

*

#include"stdio.h"

#defineN6

voidPattern(void)

{

intx,y,z;

for(x=0;x<=N;x++)

{

if(x<=N/2)

{

for(y=1;y<=3-x;y++)

printf("");

for(z=1;z<=2*x+1;z++)

printf("*");

printf("\n");

}

else

{

for(y=1;y<=x-3;y++)

printf("");

for(z=1;z<=13-2*x;z++)

printf("*");

printf("\n");

}

}

}

intmain()

{

Pattern();

return0;

}

【例5-8】简易菜单

制作一个如图5-14的简易菜单。

用户可通过选择菜单项完成某一功能,只有当用户选择退出时才结束程序的执行,否则,一直可供用户选择操作。

要求:

程序只有一个入口和一个出口(主函数既是入口也是出口)。

图5-14例5-8程序执行图

#include"stdio.h"

#include"conio.h"

#include"stdlib.h"

voidFunction1(void)

{

printf("功能1:

\n");

}

voidFunction2(void)

{

printf("功能2:

\n");

}

intSelect(charch)

{//菜单选择

switch(ch)

{

case'1':

Function1();break;

case'2':

Function2();break;

case'0':

return1;

default:

printf("选择错误!

!

!

\n");

}

printf("按任意键继续……");

getch();

return0;

}

voidShowMenu()

{//显示菜单

printf("\t*************************\n");

printf("\t*\t功能菜单\t*\n");

printf("\t*\t1.功能一\t*\n");

printf("\t*\t2.功能二\t*\n");

printf("\t*\t0.退出\t\t*\n");

printf("\t*************************\n");

}

intmain()

{

charch;

while

(1)

{

system("cls");

ShowMenu();

printf("请选择(1,2,0):

");

ch=getchar();getchar();

if(Select(ch))

{

printf("感谢使用,再见!

\n");break;

}

}

return0;

}

【例5-9】汉诺塔问题

古代有一个梵塔,塔内有三个柱A、B、C,A柱上有64个盘子,盘子大小不等,大的在下,小的在上(如图5-15)。

有一个和尚想把这64个盘子从A柱移到B柱,但每次只能允许移动一个盘子,并且在移动过程中,3个柱上的盘子始终保持大盘在下,小盘在上。

在移动过程中可以借助C柱,要求打印移动的步骤。

图5-15汉诺塔

#include"stdio.h"

voidHanoi(intn,charA,charB,charC)

{

if(n==1)

{

printf("将%d号盘子从%c柱移动到%c柱\n",n,A,B);

}

else

{

Hanoi(n-1,A,C,B);

printf("将%d号盘子从%c柱移动到%c柱\n",n,A,B);

Hanoi(n-1,C,B,A);

}

}

intmain()

{

intn;

printf("请输入汉诺塔盘子个数:

\n");

scanf("%d",&n);

Hanoi(n,'A','B','C');printf("%d\n",sum);

return0;

}

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1