循环结构Word文件下载.docx
- 文档编号:4527829
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:17
- 大小:24.83KB
循环结构Word文件下载.docx
《循环结构Word文件下载.docx》由会员分享,可在线阅读,更多相关《循环结构Word文件下载.docx(17页珍藏版)》请在冰点文库上搜索。
②把本题中的s称为“累加器”,它以“s=s+……”形式出现在循环中,所以该式称为“累加式”。
累加器在进入循环前一定要获得合适的初值,通常是0。
③本题中i是特殊的累加器,每次增1,又称“计数器”。
此题i还有一个兼职:
它在做通项的同时还兼职控制循环的次数。
又称“循环控制变量”。
三、do……while循环(直到型循环)
do
while(表达式);
(1)整个语句以“;
”结束。
(2)循环体语句只能是一个语句。
当含多个语句分量时,必须用{}括成复合语句。
4、改写“1+2+……+100”
do{s=s+i;
}while(i<
=100);
例2、求
{inti,t;
floats;
s=0.0;
i=1;
t=1;
=99)
{s=s+1.0/i*t;
t=(-1)*t;
i=i+2;
}
printf(“1-1/3+…=%f\n”,s);
四、for语句(擅长于计数型循环)
for(表达式1;
表达式2;
表达式3)
语句
(1)“语句”即循环体(语句),只能是一个语句(由分号结束的单个语句或一个复合语句)。
(2)for后的()内有3个表达式,由2个分号分隔。
可以省略任意多个表达式,但分号不可以省。
(3)“表达式1”通常用来给循环控制变量等赋初值,“表达式2”通常为关系或逻辑表达式,“表达式3”通常给循环控制变量等增值。
for(s=0,i=1;
i<
=100;
i++)
s=s+i;
printf(“%d\n”,s);
【省略各表达式:
】
s=0;
i=1;
for(;
;
)
{s=s+i;
i++;
if(i>
100)break;
五、几个重要算法
1、穷举法
对所有的可能性进行判断,一旦符合条件立即处理(输出或存储等)。
例1:
求出所有的“水仙花”数,即这样的三位正整数:
其每个数位上数字的立方和等于该数本身。
比如:
153=13+53+33。
【法一:
一重循环】
{intx,b,s,g;
/*b-百位数字*/
for(x=100;
x<
=999;
x++)
{b=x/100;
s=x/10%10;
g=x%10;
/*任何一个非负整数的个位数字%10*/
if(g*g*g+s*s*s+b*b*b==x)
printf(“%d\n”,x);
【结论:
计数型循环,循环次数=
循环控制变量的终值即最后一个合法取值,初值为其第一个合法取值,步长即循环控制变量每次增加的那个值。
【法二:
三重循环】
{intb,s,g;
for(b=1;
b<
=9;
b++)/*时针*/
for(s=0;
s<
s++)/*分针*/
for(g=0;
g<
g++)/*秒针*/
if(b*b*b+s*s*s+g*g*g==100*b+10*s+g)
printf("
%d\n"
100*b+10*s+g);
【补充:
循环的嵌套】
(1)外循环变化得慢,内循环变化得快。
若外循环独立执行的次数为x次,内循环独立执行的次数为y次,则核心语句被执行x×
y次。
(2)外循环必须完整地套住内循环。
例2、用100元购买麦当劳(5元/份)、肯德基(7元/份),恰巧用完,问共有几种买法?
{intm,k;
for(m=0;
m<
=20;
m++)
for(k=0;
k<
=14;
k++)
if(7*k+5*m==100)
printf(“M:
%d,K:
%d\n”,m,k);
例3、将1元人民币兑换成分币(1分、2分、5分),共有多少种兑换法?
输出每一种兑换法。
2、整数各数位上数字的获取
任意读入正整数,然后依次输出其低位到高位上的每一位数字。
{longx;
scanf(“%ld”,&
x);
while(x<
=0);
while(x!
=0)
{printf(“%d\n”,x%10);
x=x/10;
例2:
任意读入一个整数,然后依次输出其低位到高位上的每一位数字及其符号位,但是,是0则不输出符号位。
longy;
charfh;
y=x;
/*保留原值*/
if(x<
0)
{fh='
-'
x=-x;
else
fh='
+'
}while(x!
if(y!
printf(“%c\n”,fh);
3、迭代法
猴子吃桃问题。
某猴子某天摘了若干只桃子,它吃了一半,不过瘾,又多吃了1只;
第二天,吃了一半,不过瘾,再多吃了1只……到第10天,发现只剩1只,问第一天摘了多少只桃子?
{intpeach=1,day=10;
day--;
/*想求第9天的桃子数*/
while(day>
=1)
{peach=(peach+1)*2;
printf("
Firstday:
peach);
迭代法的特征,类似于本题的peach变量,该变量不停地被新值(由原值变化而来)替代,直到该变量获得最终所求即终止。
%dday:
day,peach);
【for循环改写】
for(day=9;
day>
=1;
day--)
4、“辗转相除法”求两个正整数的最大公约数
{intx,y,r;
scanf("
%d%d"
&
x,&
y);
r=x%y;
while(r!
{x=y;
y=r;
r=x%y;
y);
【改写:
让“r=x%y;
”只出现一次。
{r=x%y;
x=y;
}while(r!
x);
【法三:
09春的一道题】不好!
!
while(y!
{r=x%y;
5.素数(质数)判断
【数学定义:
只能被1和自身整除的大于1的整数。
紧扣数学定义。
“大于1的整数若不能被2到自身减1整除,就叫素数。
”】
{intx;
intk;
do{printf(“Inputx>
1!
\n”);
scanf(“%d”,&
}while(x<
=1);
for(k=2;
=x-1;
if(x%k==0)break;
if(k==x)
printf(“%dissushu\n”,x);
printf(“%disnotsushu\n”,x);
【小技巧:
定义一个“逻辑型”变量,
实际上就定义一个整型变量(取值0或1),表示假和真,即条件不成立、成立。
intflag;
flag=1;
/*总是假设x就是素数。
*/
if(x%k==0){flag=0;
break;
if(flag==1)
缩小判断范围,改为“2-自身的一半”】
intflag=1;
=x/2;
if(flag)
【用while循环改写】
{intx,k;
scanf(“%d”,&
k=2;
while(x%k!
=0)k++;
继续缩小判断范围到“2-”】
#include<
math.h>
{intx,k,flag=1;
=sqrt(x);
if(falg!
break语句和continue语句:
(1)break语句只能出现在循环语句和switch中,用于提前跳出所在语句。
通常在if语句的控制下。
(2)continue语句只能出现在循环语句中,通常在if语句的控制下,一旦执行到continue语句,则本次循环中其后的语句不再执行,转而下一轮循环。
例如:
输出100以内所有3的倍数。
for(x=1;
{if(x%3!
=0)continue;
printf(“%d\n”,x);
6.累乘(基本算法)
例1、求n!
(n>
=0的整数)。
设n=10,改写成10!
=1×
2×
3…×
10。
{longjc;
intn;
%d"
n);
/*n>
=0,注意n不能大*/
jc=1;
for(k=1;
=n;
jc=jc*k;
%ld\n"
jc);
}
{floatjc;
%20.0f\n"
【累乘的算法要领:
累乘器在进入循环前,必须获得初值,通常为1;
累乘式“jc=jc*……”必须出现在循环中。
注意不能溢出!
●算法分为“数值型”算法和“非数值型”算法两大类。
“数值型”算法主要用来解决较难的数学计算问题。
级数计算(展开式的求解)、求高次方程的根、求定积分等。
7.级数计算(展开式的求解)
关键在于描述出“通项”:
法一:
直接法。
即利用项次直接描述通项。
法二:
间接法(又称递推法),利用前项求后项。
例如:
计算1+1/2!
+1/3!
+…+1/n!
+…
的和(当某项的值小于10-6时终止)。
直接法】
{floats,t;
/*t代表通项*/
/*k代表项次*/
k=1;
/*让t先获得第一项的值*/
while(t>
=1e-6)
{s=s+t;
k++;
/*k加1后成下一项项次*/
/*以下复合语句求k!
{longf;
inti;
f=1;
for(i=1;
=k;
i++)f=f*i;
t=1.0/f;
printf(“%f\n”,s);
间接法】
t=1.0;
=1-6)
t=t/k;
/*求下一项*/
printf(“%f\n”,s);
【补充】变量的定义一般集中在函数的最前面,其作用域为整个函数。
还可以定义在复合语句的最前面,其作用域为整个复合语句。
数据文件
将输出结果保存到记事本等格式的文本文件中。
方便查看运算结果。
#include<
stdio.h>
main(){inty,e,w;
intn=0;
FILE*fp;
fp=fopen("
D:
\\my\\fb.txt"
"
w"
);
……if(y+2*e+5*w==100){n++;
{printf("
%d,%d,%d\n"
y,e,w);
fprintf(fp,"
}}
n);
fprintf(fp,"
fclose(fp);
【说明】
(1)因为用到系统函数fopen、fclose、fprintf,所以要加头文件“stdio.h”(标准输入输出)。
(2)定义一个文件指针变量:
FILE*变量名;
(3)在定义后,即用fopen打开一个可以写入的文件(”w”),注意路径分隔符一定要用双斜杠(转义字符)。
fopen("
盘符\\路径\\文件主名.文本类型"
,"
w"
),将返回值(函数值)赋给文件指针变量。
(4)将用printf往屏幕上书写的结果也输出到文件指针变量所指的文件中(方便查看)。
fprintf专门将结果输出到文件中,格式一般与printf一样。
(5)在主函数之前,用
fclose(指针变量);
关闭文件(以便保存到外存中)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 结构