C语言程序设计 第四章 循环语句和转移语句
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
练习:
已知a1=10,a2=-3、an=3an-1+an-2,求{an} 前10项之和。
分析:从第3项起都可以根据公式求出,可 设变量x表示当前项,sum表示和,通过 8次循环,求出第3项到第10项当前项的 值,并累加到sum中。
#include <stdio.h> void main(void) { int a1=10,a2=-3,i,x,sum; sum=a1+a2; for(i=3;i<=10;i++){ x=3*a2+a1; sum+=x; a1=a2; a2=x; } printf("前10项和=%d\n",sum); }
1. break语句的功能:用于从循环体内跳出循环体, 即提前结束循环。
2.使用要点:break只能用在循环语句和switch语句中.
break语句---范例 for(r=1;r<=10;r++)
例2 从键盘输入一个字符,判别其是否为大 写字母,如果是,则将其转换为小写字母并 输出;否则不转换,不输出;并提示是否继 续输入(按‘y‟继续)。
#include <stdio.h>
#include <ctype.h>
void main()
{ char ch, answer;
do {printf(“Enter a letter:”); ch=getchar( ); if(isupper(ch)) printf(“%c”,ch+‟a‟-‟A‟); getchar( ); printf(“\ndo you want to try again?(y/other letter)”); answer=getchar( ); getchar( ); }while (answer==„Y‟ || answer==„y‟); }
求解表达式1 0
表达式2
非0 语句
求解表达式3
for循环下面的语句
例1:求从1加到100的程序。
#include <stdio.h> void main() { int s,i; s=0; for(i=1;i<=100;i++) s=s+i; printf(″sum=%d″,s); }
循环体!
结果:
sum=5050
for语句---范例
例2:求n! #include <stdio.h> void main(void ) { int i,n; long fact=1; printf("please input n:"); scanf("%d",&n); for(i=1;i<=n;i++) fact*=i; printf("%d!=%ld",n,fact); }
例2 利用辗转相除法,求两个正整数的最大公约数 算法: (1) 若j=0,则i为最大公约数 (2) 若j不为0 将i除以j,余数为k i=j;j=k 转(1)
#include <stdio.h> void main() {int i, j, temp; printf(“Enter 2 integers:”); scanf(“%d%d”,&i,&j); while( j ) { temp=i%j; i=j; j=temp; } printf(“Gcd=%d\n”,i); }
对for语句作几点说明:
(3)可以把表达式3改为表达式语句移到循 环体的尾部,作为循环体的一部分。 例如: s=0; for(i=1;i<=100;) { s=s+i; i++; }
对for语句作几点说明:
(4)可以把与循环控制变量无关的循环初始 化操作放入表达式1中,也可以把循 环体 中与循环变量无关的操作放到表达式3中。 例如: for(s=0,i=1;i<=100;i++) s=s+i; 其中,″s=0,i=1″是逗号表达式。
对for语句作几点说明:
(5)如果循环体中没有任何语句,则应该加 一个分号。 例如: s=0; for(i=1; i<=100; s=s+i, i++) ;
此分号不能少!
for语句---范例
例3: 求一个等差数列前n项的和: ai+1-ai=d (i=1,2,3……) 分析:1 输入n、d和等差数列的第一个数a的取值。 2 sum 、i的初值置0 3 a+sumsum 4 计算数列中下一个数的取值 a+da 5 i+1i 6 重复3、4、5步直到i大于n 7 输出结果n
#include <stdio.h> void main(void) {int i,n; double t,x,ex; ex=1.0; t=1.0; printf(“Enter value of n,x:”); scanf(“%d%lf”,&n,&x); for (i=1;i<n;i++) { t*=x/i; ex+=t; } printf(“exp(%f)=%lf\n”,x,ex); }
例5 利用公式计算 ex=1+x/1!+x2/2!+x3/3!+……+xn/n! 对于求级数的和,常用两类方法: 1)通项公式法 t0=1 ti=xi/i! (i=1,2,…….n) 2)递推公式法 t0=1 ti= ti-1 .x/i (i=1,2,……n) 对于本题使用递推公式法计算量要小。 程序如下:
4.3 do-ቤተ መጻሕፍቲ ባይዱhile循环
1、功能:do-while语句一般完成直到型循环,
2、格式为:
do { 语句块
}while(表达式);
3、do-while语句控制流程为:先执行一次循环体内的语句,然 后再求判终表达式的值,若判终表达式的值为“非0”,则重 复执行循环体,否则当表达式的值为“0”时,循环结束。
例3 将键盘输入复制到屏幕,直到按下一个回车 键为止. #include <stdio.h> void main( ) {char c; c=getchar( ); while(c!=„\n‟) {putchar( c ); c=getchar( ); } }
while语句的特点: 1、循环一般由条件控制 2、在循环体内至少有一条语句能对循环 条件产生影响,以防止死循环
对for语句作几点说明:
(1)可以将表达式1放到for语句之前,在 for语句内缺省表达式1。 例如: … s=0,i=1; for(; i<=100; i++) s=s+i;
对for语句作几点说明:
(2)表达式2如果缺省(分号不能缺省),相当于 表达式2永远为非0(“真”),从而循环无终 止地进行下去。 例如: s=0; for(i=1; ;i++) s=s+i;
for语句的特点:
1、使用了三个表达式 2、循环控制变量可以在循环体内使用,也可 以不使用,仅用来控制循环次数
3、从正常出口离开循环时,循环控制变量会 超过终值
4.2
while循环
while语句的一般格式为: while(表达式) 语句
while语句的执行过程
while语句的执行过程为: (1)计算并判断表达式的值。若值为0,则结束 循环,退出while语句;若值为非0,则执行循 环体。 (2)转步骤(1)。
执行过程:
=0 计算表达式并判断 非0 循 环 体
while语句---范例
100 例1:求 n n=1
注意“边界值” 的选择! 应有使循环趋于 结束的语句!
#include <stdio.h> void main(void) { int a = 1, sum = 0; while(a <= 100){ sum += a; a++; } printf("%d", sum); }
例6 求10个大于0小于100的数中的最大数和最小数 置初值的方法一般有两种: 1)极值法:取有界数据的上界作为最小值的初值,取 有界数据的下界作为最大的初值 2)成员法:取一批数据的第一个数作为最大值和最小 值的初值。 本程序采用极值法
#include <stdio.h> void main( ) {int a, i, max, min; max=0; min=100; for (i=1;i<=10;i++) {scanf(“%d”, &a); if (max<a) max=a; if (min>a) min=a; } printf(“Max=%d,Min=%d\n”,max,min); }
while语句—练习
练习:输入一批整数,以0为结束,输出其中的 最大值。 分析:采用“打擂台”的方法,即两两相比, 大 者留下,当所有数比完时留下的那个数 为最大。程序用一个变量max保存(留 下)每两两相比中大的那个数。
#include <stdio.h> void main(void) { int x,max; printf(“请输入数字,输入0结束:\n"); scanf("%d",&x); max=x; while(x) { scanf("%d",&x); if(max<x) max=x;} printf("max=%d\n",max); }
循环结构来处理重复计算的问题。 对于上述问题可以用以下程序: …… for(i=0;i<=3600;i++) {x=i*3.14159/180.00; y=sin(x); printf(“y=%f”,y); } …… 显然,这段程序简洁易懂。
4.1 for循环
for语句的一般格式为: for(表达式1;表达式2;表达式3) 语句 表达式1用于循环赋初始值,它只能执行一次; 表达式2是循环条件; 表达式3用于对循环条件的修改,以使循环能于结束。
第4章 循环语句和转移语句
4.1 4.2 4.3 4.4 4.5 4.6 for循环 while循环 do-while循环 跳转语句 循环的嵌套 程序设计举例
4.1 for循环
循环: 就是有规律地重复执行某些语句 的过程。
例如:要计算0到360度的正弦函数,要求每隔0.1 度计算一次,如果没有循环结构,则: …….. x=0.0; y=sin(x); printf(“y=%f”,y); x=0.1; y=sin(x*3.14159/180.0); printf(“y=%f”,y); …… 对于如此简单的问题,需要10000多条语句。
例4 求Fibonacci数列1,1,2,3,5,8 的前30个数 F1=1 F2=1 Fn=Fn-1+Fn-2 2=1+1 3=1+2 5=2+3 8=3+5 在一次循环中计算两项,递推公式为: F1=1 F2=1 (初值) F1=F1+F2 F2=F2+F1
#include <stdio.h> void main( ) {long int f1, f2; int i, n; printf (“ Input n:”); scanf (“ %d”, &n); f1=f2=1; for (i=1;i<=n;i++) {printf(“%ld\t%ld\n”,f1,f2); f1=f1+f2; f2=f2+f1; } }
#include <stdio.h> void main(void) { int a , d , n , i ; int ai , sum=0 ; printf(“input a=?\td=?\tn=?\n”) ; scanf(“%d%d%d”, &a,&d,&n) ; ai=a; for(i=1; i<=n ; i++) { sum+=ai ; ai+=d ; } printf(“sum=%d\n” , sum) ; }
执行过程:
循
环
体
非0 计算表达式并判断 =0
do-while语句---范例
100 例1:求 n n=1
无论表达式的值 是多少,循环体 至少执行一次!
#include <stdio.h> void main(void) { int i,sum=0; i=1; do { sum=sum+i; i++; } while(i<=100); printf(“%d”,sum); }
do-while语句与while语句的本质区别
while语句是先计算并判断表达式的值。若其 值为非 0,则执行循环体;若其值为0,则退 出循环。
do-while语句则首先执行循环体,然后再计算 并判断表 达式的值。因此,do-while语句至 少要执行一次循环体。
4.4 跳转语句1_____break语句