第4章 循环结构
第4章 循环结构(C++版)
些数都是不超过1000的整数。 样例输入:2 8 3 5 1 7 3 6 样例输出:1 8 4.375
【参考程序】 #include<cstdio> int main() {
int x,n=0,min,max,s=0; while (scanf("%d",&x)==1) {
(5)按所示数列改变控制变量值:99、88、77、66、55、44、33、22、11、0,增 量为-11
for(int j=99;j>=0;j-=11) (6)控制变量i和j共同进行循环控制,i从1变到99,j从2变到100,增量均为2。
for(int i=1,j=2;i<=99&&j<=100;i+=2,j+=2)
sum+=i; cout << sum; return 0; }
第一节 for语句
例4.3 利用for循环计算n!的值。
分析:n!=1*2*3…*n
#include <cstdio>
Байду номын сангаас
using namespace std;
int main ()
{
long long s;
//Noip2010开始C++语言中long long类型允许使用
int n;
//n不能定义为long long,否则for语句死循环
s=1;
scanf("%d",&n);
for (int i=1; i<=n ; ++i)
C语言程序设计(第3版)何钦铭-颜-晖-第4章-循环结构
第4章循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对 item 赋初值 0,则程序运行结果是 pi=0,因为 item 为 0 时不满足 while 循环的执行条件,即不执行循环,故 pi 值为 0。
如果将精度改为10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得 while 循环次数减少,必然影响到π的值。
【练习 4-2】运行例 4-2 程序时,如果将最后一个输入数据改为-2,运行结果有变化吗?如果第一个输入数据是 -1,运行结果是什么?为什么?解答:如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。
如果第一个输入数据是-1,运行结果是:Grade averageis 0,因为第一个输入就是-1,则 while 循环条件不成立,不执行循环体。
【练习 4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+…):输入一个正实数 eps,计算序列1-1/4+1/7-1/10+1/13-1/16+…的值,精确到最后一项的绝对值小于eps(保留6位小数)。
试编写相应程序。
解答:#include <stdio.h>#include <math.h>int main(void){int denominator, flag;double item, s,eps;printf(“Input eps:”);scanf(“%lf”,&eps);flag = 1;denominator = 1 ;item = 1.0;s = 0;while(fabs (item) >= eps) {item = flag * 1.0 / denominator;s = s + item;flag = -flag;denominator = denominator +3;}printf ( “s = %f\n”, s);return 0;}【练习 4-4】如果将例 4-3 程序中的 do-while 语句改为下列 while 语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number != 0){number = number / 10;count ++;}解答:会有影响,因为当输入数据 number 为 0 时,上述 while 循环将不执行,count 值仍为 0,故输出为 0,不符合题目要求。
C语言程序设计习题集第4章 循环结构(答案)
第4章循环结构一、选择题1、有以下程序段int k=0;while(k=1)k++;while 循环执行的次数是(A)A)无限次B)有语法错,不能执行C) 一次也不执行D)执行1次2、t为int类型,进入下面的循环之前,t的值为0while(t=1){ …… }则以下叙述中正确的是(B)A) 循环控制表达式的值为0B)循环控制表达式的值为1C) 循环控制表达式不合法D)以上说法都不对3、在C程序中,与while(m)中表达式m完全等价的是(B )A) m==0 B) m!=0 C) m==1 D)m!=14、有以下程序,程序运行后的输出结果是(C).main(){int i=1,sum=0;while(i<=4){sum=sum+i;i=i+1;}printf(“%d\n”,sum);}A)4 B)5 C)10 D)死循环5、有以下程序,程序运行后的输出结果是(D ).main(){int i=1,sum=0;while(i<=4)sum=sum+i;i=i+1;printf(“%d\n”,sum);}A)4 B)5 C)10 D)死循环6、有如下程序main(){int n=9;while(n>6){n-—;printf(“%d",n);}}该程序段的输出结果是(B)A)987 B) 876 C) 8765 D) 98767、以下程序的输出结果是(B)main(){int num= 0;while(num<=2){num++;printf(“%d\n”,num);}}A) 1 B) 1 C)1 D)l2 2 23 348、有以下程序,若运行时输入3.6 2.4<回车〉,则输出的结果是( B)。
main(){float x,y,z;scanf(“%f%f”,&x,&y);z=x/y;while(1){if(fabs(z)>1。
0){x=y;y=z;z=x/y;}elsebreak;}printf(“%f\n”,y);}A)1.500000 B)1.600000 C)2。
第4章 循环结构程序设计ppt课件
第4章 循环结构程序设计
在解决实际问题的过程中,常常会遇 到一些需要重复处理的问题。循环结构可 用来处理需要重复处理的问题,所以,循 环结构又称为重复结构。
普通高等教育“十一五 ” 国家级规划教材
第4章 循环结构程序设计
4.1 循环的概念 4.2 while 语句 4.3 do…while循环 4.4 for循环 4.5 break语句和continue 4.6 4.7 程序举例 4.8 三种循环语句的比较
符中数字字符的个数。
(a) 流程图描述
(b) N-S图描述
4.2 while 语句
普通高等教育“十一五 ” 国家级规划教材
#include <stdio.h> void main() { char ch;
程序运行结果:
Press enter to end input <Enter> 5!a66bc7↙ 5667 num=4
4.3 do…while循环
普通高等教育“十一五 ” 国家级规划教材
#include <stdio.h> void main() { int num=0;
float score,sum=0,ave; printf("input score of student:\n"); scanf("%f",&score);
#include <stdio.h>
void main( )
{ int sum=0,i=1;
do
/* 开始执行循环 */
{ sum=sum+i;
/* 计算累加和 */
i++;
第4章 选择结构与循环结构
4.1 条件表达式
>>> if 666: print(9)
9 >>> a = [3, 2, 1] >>> if a:
print(a)
[3, 2, 1]
#使用整数作为条件表达式 #使用列表作为条件表达式
3
4.1 条件表达式
>>> a = [] >>> if a:
print(a) else:
print('empty')
#先把x转换成实数,然后追加到列表numbers尾部 numbers.append(float(x)) except: print('不是合法成绩') #下面的循环用来限制用户只能输入任意大小写的“yes”或者“no” while True: flag = input('继续输入吗?(yes/no)').lower() if flag not in ('yes', 'no'):
while 条件表达式: 循环体
[else: else子句代码块]
和
for 取值 in 序列或迭代对象: 循环体
[else: else子句代码块]
21
4.3.1 for循环与while循环
• 例4-5 编写程序,输出1~100之间能被7整除但不能同时被5整除的所有整数。
for i in range(1, 101): if i%7==0 and i%5!=0: print(i)
print('鸡:{0},兔:{1}'.format(int(jitu-tu), int(tu))) else:
print('数据不正确,无解')
第四章 循环结构程序设计
while(i<=100)
{ i++;
程序运行结果: sum=5050
sum=sum+i;
}
6
4.3 do-while语句
do-while语句的结构 do 语句 while(表达式);
例如: do
x-=1; while(x>0);
功能:
1)执行“语句”。 2)计算“表达式”的值。如果值为非0,转1);否则转3)。
}
8
4.3 do-while语句
1)循环体如果包含一个以上的语句,要用复合语句表示。 2)在循环体中应有使循环趋于结束的语句。 3)while语句的特点是先执行循环体,然后判断表达式的值。 4)一般情况下,用while语句和用do-while语句处理同一 个问题时,若二者的循环体部分一样,其结果也一样。但如
18
4.7 goto语句以及用goto语句构成循环结构
goto语句的一般格式:
goto 语句标号;
例如: goto loop;
功能:程序执行到goto语句时,将程序流程转到语句标号指定的 语句去执行。
有标号的语句的格式:
语句标号: 语句
例如: loop: sum=sum+i;
19
4.7 goto语句以及用goto语句构成循环结构
【例4-9】用goto语句实现求1~100累加和。
#include <stdio.h>
main() { int n=1, sum=0; loop: sum += n; n++;
if(n<=100) goto loop;
printf("sum=%d\n",sum); }
第4章 循环结构(C++版)_第二节 while语句-2019-01-04
【上机练习】
2.角谷猜想【1.5编程基础之循环控制18】 /ch0105/21/ :8088/problem_show.php?pid=1086 谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以 2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算 过程分别为16、8、4、2、1。程序要求输入一个整数,将经过处理得到1的过程输出来。 输入: 一个正整数N(N <= 2,000,000) 输出: 从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End"。 如果输入为1,直接输出"End"。 样例输入: 5 样例输出: 5*3+1=16 16/2=8 8/2=4 4/2=2 2/2=1 End
第二节 while语句
第2种方法也许更加常用(你再 最后,我们来更仔细地研究一下 也不用记住%d、%lf等恼人的占位符 输入输出。研究对象就是经典的“A+B” 问题:输入若干对整数,输出每对之和。 了): 假设每个整数不超过109,一共不超过 #include<iostream> 106个数对。 using namespace std; 第1种方法是: #include <cstdio> int main() { int a,b; while(scanf("%d%d",&a,&b)==2) printf("%d\n",a+b); return 0; } int main() { int a,b; while(cin >> a >> b ) cout << a+b <<endl; return 0; }
第四章。循环结构(while、do-while、for)
Top1.循环结构(while、do…while、for)1. 循环结构(while、do…while、for)1.1. 什么是循环结构在日常生活中,会有很多需要反复执行的事情,比如:每一年的4个季节,每一周的7天,每日的3餐,打印机每份文档打印50份,一圈跑道400米跑3圈,都是在反复执行的。
再看软件系统中的需求:问题1:输出100行语句,每行语句都一样,即:∙行动是成功的阶梯,行动越多,登得越高!∙行动是成功的阶梯,行动越多,登得越高!∙行动是成功的阶梯,行动越多,登得越高!…问题2:输出100行语句,每行语句都类似,即:∙第1,行动是成功的阶梯,行动越多,登得越高!∙第2,行动是成功的阶梯,行动越多,登得越高!∙第3,行动是成功的阶梯,行动越多,登得越高!∙…∙第100,行动是成功的阶梯,行动越多,登得越高!问题3:计算1到50乘以8.88的结果∙1×8.88 =8.88∙ 2 ×8.88 =17.76∙ 3 ×8.88 =26.64∙ 4 ×8.88 =35.52∙…∙50 ×8.88 =444诸如此类问题都是在反复执行的,在软件系统中可以通过循环这种语法结构来解决。
循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性执行。
对于循环来说,需要考虑两个要素,其一要素为循环体,也就是被反复执行的相同或相似的语句,其二要素为循环的条件,也就是循环得以继续执行下去的条件,常常以循环次数的方式体现。
常用的循环结构有:while、do-while、for。
1.2. while语句1.2.1. while语句的执行逻辑while语句是循环的一种常见语法结构,语法如下:1.while(boolean表达式){语句块;2.}while语句的执行过程为,首先计算boolean表达式的值,而后进行判断,若值为true则执行语句块,语句块执行完后再次判断boolean表达式的值,如果为true则继续执行语句块,如此循环往复,直到boolean表达式的值为false时退出while循环而执行while之后的语句。
Python程序设计 第4章 循环结构程序设计(第6次课)
Copyright © SWFU-CISD, 2012. All rights reserved. 1-8
计算机编程导论
4.2 循环结构概述
(3)给定2个整数,求它们的最大公约数和最小 公倍数。例如:给定6和9,求最大公约数时, 循环过程从6依次பைடு நூலகம்减至1,当循环到3时,判 断得6和9都能被3整除,于是终止循环,求得 最大公约数是3.;求最小公倍数时,循环过程 从9依次递增至54,当循环到18时,判断得18 同时能被6和9整除,于是终止循环,求得最小 公倍数是18。
练习: 1. 求1+3+5+…+99 2. 求2*4*6*…*12
Copyright © SWFU-CISD, 2012. All rights reserved.
1-21
计算机编程导论
第6次上机作业: 1.计算,参考值: S=1.718282 1 1 1 S 1 1*2 1*2*3 1*2*3*50 2.编程求斐波拉契数列的前20项,已知该数列 的第一、二项分别是0、1,从第三项开始,每 一项都是前两项之和。例如:0, 1, 1, 2, 3, 5, 8, 13……
Copyright © SWFU-CISD, 2012. All rights reserved. 1-12
输出 s 结束 图 4-3 累加若干整数值的框图
计算机编程导论
程序:
#Exp4_1.py print '请输入若干正整数进行求和操作,当输入负数时结束: ' s=0 x = input("请输入一个整数: ") while x >= 0: s=s+x x = input("请输入一个整数: ") print '整数之和=', s
第4章--循环结构 - 参考答案
for(k=2;k<6;k++,k++)
{ s=1;
for(j=k;j<6;j++)
s+=j;}
printf("%d\n",s);
A) 1 B) 9
C) 11 D) 10
D
15、以下程序段的输出结果是( )。
int k,n,m;
n=10;m=1;k=1;
while (k<=n) {m*=2;k+=4;}
printf("%d\n",m);
A) 4 B) 16
C) 8 D) 32
C
16、设有如下程序段:
int i=0, sum=1;
do
{ sum+=i++;}
while(i<6);
printf("%d\n", sum);
上述程序段的输出结果是( )。
A) 11 B) 16
C) 22 D) 15
B
17、以下程序的输出结果是( )。
else printf("%d,",x++); }
程序运行后的输出结果是( )。
A) 4,3,1 B) 4,3,1,
C) 5,4,2 D) 5,3,1,
B
20、下面程序是计算n个数的平均值,请填空。
main( )
{ int i,n;
float x,avg=0.0;
scanf("%d",&n);
for(i=0;i<n;i++)
输出结果是( )。
main( )
[其它]第四章循环结构PPT课件
• 语句标号用标识符表示,它的定名规则与变 量名相同,即由字母、数字和下划线组成, 其第一个字符必须为字母或下划线。
例如:goto label_1; 合法; goto 123; 不合法.
§4.2 用goto语句实现循环
结构化程序设计方法主张限制使用goto语句,因 为滥用goto语句将使程序流程无规律、可读性差. 一般来说,可以有两种用途:
}
运行结果:5050
【例】4.6
§4.4 用do-while语句实现循环
while语句和用do-while语句的比较: 在一般情况下,用while语句和用do-while语 句处理同一问题时,若二者的循环体部分是一 样的,它们的结果也一样。但是如果while后面 的表达式一开始就为假(0值)时,两种循环的结 果是不同的。
100
n
n 1
例4.4 while和do-while循环的比较
(1) #include <stdio.h> (2) #include <stdio.h>
void main ( )
void main( )
{int sum=0,i;
{int sum=0,i;
scanf(″%d″,&i);
scanf(″%d″,&i);
while (i<=10)
do
{sumi=s+u+m;+}i运; 行结果:
{ sum=siu+m++;i};运行结果:
1↙ 说明:(w1h)i当le w(hii<l=e10后1);↙面的表达式的
printf(″sum=%d\n″
,sum); sum=55
第4章循环程序设计
▪ while语句和for语句都是先判断循环条件再决 定是否执行循环体,可能一次循环也不执行。
▪ do_ while语句则是先执行循环体再判断循环 条件,至少执行循环体一次。
▪ break和continue是循环的辅助语句, continue 只能用于循环语句。
▪ while、do_while、for可以相互嵌套,自由组 合。
例4-6:打印九九乘法表。
main( )
{ int i, j;
for(i=1; i<10; i++)
printf ( "%8d", i );
printf (" \n---------------------------------" );
}
说明: ▪ 当求累加值时,存放累加值的变量sum的初
值应该为0。 ▪ for括号中用两个分号分隔的三个表达式:
“表达式1”只在循环开始时执行一次;“表 达式2”是循环条件,在每一轮循环开始前进 行计算,如果结果为真则执行循环体,否则 退出for循环;“表达式3”用于循环变量的更 新。 ▪ 可以省略for语句括号中的一个或几个表达式, 但不能省略分号。
for语句的执行过程
表达式1
表达式2 真(非0)
语句序列
假(0)
表达式3
例4-4:从键盘上输入10个整数,求其和。
main( ) {
int i, num, sum; sum = 0; for(i=1; i<=10; i++) { scanf("%d", &num ); sum = sum + num; } printf("这10个整数的和为:%d", sum ); getch( );
《C语言程序设计》2教学课件 第4章 循环结构程序设计
—7—
4.1 while循环
【例4.1】
计算从1到100的和。
#include<stdio.h> int main() {
int i,sum; sum=0; i=1; while(i<=100) {
sum=sum+i; i=i+1; } printf("1+2+3+...+99+100=%d",sum); return 0; }
表达式3
一般被称为“步长”,用于循 环变量的修改,该表达式是在 每次循环体执行完以后、下一 次循环条件判断之前执行的, 使循环变量经过多次循环的累 积而发生改变,最终因为不满 足循环条件退出循环。
— 26 —
4.3 for循环
【例4.7】
编程计算1到49之内的奇数和。
#include<stdio.h> int main() {
可将for循环语句改写为如下的while循环形式:
表达式1; while(表达式2) {
语句; 表达式3; }
例如:
for(i=1;i<=100;i++) sum=sum+i;
相当于:
i=1; while(i<=100) {
sum=sum+i; i++; }
— 28 —
4.3 for循环
因此,可以将例4.7用while语句进行改写如下:
/*定义及初始化变量*/ /*输出提示语*/ /*输入整数*/ /*如果输入的为负整数则取反*/
/*number整除10,即去掉最低位*/ /*位数加1*/ /*number不为0时循环*/ /*输出位数*/
第4章 循环结构(C++版)_第四节 循环嵌套(新)02
第四节 循环嵌套
同时也可以采用一个for循环来求解,表面上看好像优于三重循环,实际上却比 上面的程序效率低,请同学们自己分析。 程序如下:
#include<iostream> #include<iomanip> using namespace std; int main() { int a,b,c; for (int m=100; m<=999; ++m) { a=m/100; b=(m%100)/10; c=m%10; if (a*a*a+b*b*b+c*c*c==m) cout<<setw(6)<<m; } return 0; }
【说明】 这里用了一个三层循环的程序解决问题。当x取得一个数值时, for的y循环体都要执行遍y的所有取值;当y取得一个数值时,for的z 循环体都要执行遍z的所有取值;对于z的每一个取值,if语句都要执 行一次。
不难算法,在程序的执行过程中,作为最内层循环体的if语句, 将被执行:(1+100/5)*(1+100/3)*(1+3*100)=214914次。而观察程序 的运行结果,问题的解远远小于这个数字,只有4组解。如何减少循 环次数呢?
第四节 循环嵌套
例4.15 求100-999中的水仙花数。若三位数ABC,ABC=A3+B3+C3,则称ABC为水 仙花数。 例如153,13+53+33=1+125+27=153,则153是水仙花数。 【分析】 根据题意,采用三重循环来求解。由于循环次数一定,用for循环最为 简单。程序如下: #include<iostream> #include<iomanip> //调用setw函数需注明使用该库 using namespace std; int main() { for (int a=1; a<=9; ++a) for (int b=0; b<=9; ++b) for (int c=0; c<=9; ++c) { if ( a*a*a+b*b*b+c*c*c==a*100+b*10+c ) cout<<setw(6)<<a*100+b*10+c; //setw函数控制输出场宽 } return 0; } 运行结果: 153 370 371 407
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.2
for循环
(2)for循环中的①循环变量赋初值可省略,但后面的 ; 不能 省略。 如果省略,则要求循环变量在 for 之前已经赋值。 另外,该处也环条件可省略,但后面的;不能省。 如果省略,即无循环结束的条件,循环将无终止地执行下去。 如果省略,还可用 break 语句替代其功能(在 4.7 节详细说 明) 。 ②循环条件可以是关系、逻辑、数值、字符表达式,只要值不为 0 就执行循环体。
西南交通大学
4.2
for循环
(4)for 循环中的 ③循环变量值的改变可省略。 如果省略,应在④循环体语句中设置变量值的改变,否 则循环可能无法结束。 另外,该处也可写与循环变量无关的其他表达式。 (5)for 循环中的①②③都可省略,如: for( ; ; ) 表示无限循环。 (6)④循环体语句如果超过一条应加上花括号“{}”构 成复合语句。
西南交通大学
while循环 举例
【例4.8】 使用公式 π /4≈1-1/3+1/5-1/7+„求π , 直到最后一项的绝对值小于 10-8为止。 例4.8 #include<stdio.h> #include<math.h> int main(void) { double pi=0,t=1,n=1; int s=1; while(fabs(t)>=1E-8) { pi+=t; n+=2; s=-s; t=s/n; } printf("π ≈%.8f\n",pi*4); return 0; }
西南交通大学
4.4
do-while循环
(2)无论条件是否成立, do-while 循环的循环体语句至少执行一次; 而 while 循环的循环体语句可能一次都不执行。 (3)do-while 循环中,while 后的循环条件 后有一个分号 ; 书写时不要遗漏了。
西南交通大学
do-while循环
西南交通大学
for循环
举例
程序说明: (1)该例中,count=0,sum=0; 还可写为:count=sum=0; (2)该例中,可省略①和③,即将①放在循环体之前进行, 将③放在循环体中进行。 例4.1.2 (3)循环结束时,count 的值为 10。 (4)循环体语句执行了 10 次。
西南交通大学
4.3
while循环
(2)循环体语句如果有一个以上的语句,应以 一对花括号“{ }”括起来,成为复合语句。 (3)循环体语句中应该有使循环趋于结束的语 句。 (4)while 循环,首先就要判断条件,如果条 件一开始就为假,循环体语句可能一次都不执行。
西南交通大学
while循环 举例
西南交通大学
while循环 举例
程序说明:
(1)最后一项的绝对值小于 10-8,即有效位数 超过 7 位,已超出 float 型的精度范围,因此 应定义为 double 型。 (2)该例中循环次数不明确, 循环条件要通过 计算才能得到, 这种类型的程序, 选择 while 循环实现要更清楚明确,读者可以尝试用 for 循 环来实现。
例4.2
西南交通大学
for循环
举例
程序说明: (1)跳出循环时,i=11,循环体共执行了 10 次。 (2)本题中,变量 i 也可从 2 开始。 (3)由于 10!超过了“整型”范围,因此必须 定义为“长整型” 。 (4)循环体语句只有一句 s*=i; 因此可以不用 加花括号。
西南交通大学
西南交通大学
for循环
举例
【例4.1】求和。 输入 10 个数,求这 10 个数的和,然后输出结果。 #include<stdio.h> int main(void) 例4.1.1 { float count,sum,x; printf("输入10 个数:"); for(count=0,sum=0;count<10;count++) { scanf("%f",&x); sum+=x; } printf("结果为%g\n",sum); return 0; }
西南交通大学
do-while循环
举例
程序说明: 如果 count 初值为10,输入x的值为10 : 那么 do-while 循环的循环体仍然要执行一次, 最后sum 的值为 10
如果是 while 循环,则循环体一次都不执行, 最后 sum 值为 0
循环的执行顺序: 当 count=0 时,判断条件满足,第 1 次执行循环体语句; 当 count=9 时,判断条件满足,第 10 次执行循环体语句; 当 count=10 时,判断条件不满足,跳出循环。
注意
西南交通大学
for循环
举例
【例4.2】 求阶乘。编程求 10!。 #include<stdio.h> int main(void) { long int i,s; for(i=1,s=1;i<=10;i++) s*=i; printf("10!=%ld\n",s); return 0; }
第4章 循环结构
计算机系
西南交通大学
内容提要
1 2 3 4 5 6
for循环
while循环
do-while循环
goto语句
循环嵌套
break语句和continue语句
西南交通大学
4.1 引言
在不少实际问题中有许多具有规律性的重复操 作,在程序中就需要重复执行某些语句。一组被重 复执行的语句称之为循环体,能否继续重复,取决 于循环的终止条件。 循环语句是由循环体及循环的终止条件两部分 组成的。 要使用循环语句时,必须要确定两个重要因素: 要重复执行哪些语句,重复到什么时候为止。
西南交通大学
for循环
举例
例4.4 【例 4.4】 输出所有水仙花数。 水仙花数为一个三位数,该三位数每位数字的立 方和等于该数本身。编程求出所有三位水仙花数。 基本思路: 三位数即表示范围为 100~999,这种明确 给出了数值范围的题目,用 for 循环来表示, 结构上非常清晰。 该题也可用 while 循环来实现,读者可以 自己尝试写出程序,比较这两种循环在表达上的 差异。
【例4.6】 求和(与例 4.1 的 for 循环比较) 。 #include<stdio.h> 例4.6 int main(void) { float count=0,sum=0,x; /*变量赋初值*/ printf("输入10 个数:"); while(count<10) { scanf("%f",&x); count++,sum+=x; } printf("结果为%g\n",sum); return 0; }
西南交通大学
for循环
举例
#include <stdio.h> void main() { int i,a,b,c; for(i=100;i<=999;i++) { a=i%10; /*a 为个位*/ c=i/100; /*c 为百位*/ b=i%100/10; /*b 为十位*/ if(i==a*a*a+b*b*b+c*c*c) printf("%d,",i); } }
西南交通大学
for循环
举例
每输入一个字符,按回车键,结果如下:
连续输入一串字符,最后一个输入 t,然后按回车 键,结果如下:
西南交通大学
4.3
1. 语法格式 while(循环条件) 循环体语句
while循环
2. 说 明 (1)执行顺序: 当循环条件“真” , 即值为非 0 时,执行 循环体语句; 当循环条件“假” , 即值为 0 时,跳出循 环。
西南交通大学
for循环
举例
【例4.5】 输入任意字符,并将刚才输入的字 符输出,如果想结束输入,则输入字母 t。 该题省略了①和③, #include <stdio.h> 函数 getchar()获取从 只保留了② 例4.5 键盘上输入的字符, int main(void) { 赋给变量 c char c; 循环体语句只有一句 for(;(c=getchar())!='t';) 而printf("\n");是循环 printf("%c",c); 外的语句,要在整个 printf("\n"); 循环结束后才会执行 return 0; }
举例
【例4.9】 求和(与例 4.6 的 while 循环比较) 。 #include<stdio.h> int main(void) 例4.9 { float count=0,sum=0,x; printf("输入10 个数:"); do{ scanf("%f",&x); count++,sum+=x; }while(count<10); printf("结果为%g\n",sum); return 0; }
for循环
【例4.3】
举例
求阶乘的和。编程求 1!+2!+„„10!。
例4.3
基本思路: 本题把例 4.1 和例 4.2 的要求融合在一起, 用循环实现累加和累乘。 很多程序都是在累加和累乘的基础上实现的, 请读者在初学时,多练习写相关的程序,以更好地 理解程序设计中循环的解题思想。 如:求 100~200 所有的奇数和; 求 10~20 所有偶数的乘积。