C语言程序设计 第四章 循环语句和转移语句.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{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; }
}
练习:
其中,″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……)
已知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++){
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) ; }
循环结构来处理重复计算的问题。 对于上述问题可以用以下程序: …… 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 输入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.Baidu Nhomakorabea> void main(void) { int a , d , n , i ;
第4章 循环语句和转移语句
4.1 for循环 4.2 while循环 4.3 do-while循环 4.4 跳转语句 4.5 循环的嵌套 4.6 程序设计举例
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多条语句。
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++)
例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( )
x=3*a2+a1; sum+=x; a1=a2; a2=x; } printf("前10项和=%d\n",sum); }
例5 利用公式计算 ex=1+x/1!+x2/2!+x3/3!+……+xn/n! 对于求级数的和,常用两类方法: 1)通项公式法 t0=1 ti=xi/i! (i=1,2,…….n) 2)递推公式法
对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;
语句 表达式1用于循环赋初始值,它只能执行一次; 表达式2是循环条件; 表达式3用于对循环条件的修改,以使循环能于结束。
求解表达式1
表达式2
0
非0 语句
求解表达式3
for循环下面的语句
例1:求从1加到100的程序。
#include <stdio.h> void main() { int s,i; s=0; for(i=1;i<=100;i++)
fact*=i; printf("%d!=%ld",n,fact); }
对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;
t0=1 ti= ti-1 .x/i (i=1,2,……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++)
{printf(“%ld\t%ld\n”,f1,f2); f1=f1+f2; f2=f2+f1; }
}
练习:
其中,″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……)
已知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++){
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) ; }
循环结构来处理重复计算的问题。 对于上述问题可以用以下程序: …… 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 输入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.Baidu Nhomakorabea> void main(void) { int a , d , n , i ;
第4章 循环语句和转移语句
4.1 for循环 4.2 while循环 4.3 do-while循环 4.4 跳转语句 4.5 循环的嵌套 4.6 程序设计举例
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多条语句。
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++)
例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( )
x=3*a2+a1; sum+=x; a1=a2; a2=x; } printf("前10项和=%d\n",sum); }
例5 利用公式计算 ex=1+x/1!+x2/2!+x3/3!+……+xn/n! 对于求级数的和,常用两类方法: 1)通项公式法 t0=1 ti=xi/i! (i=1,2,…….n) 2)递推公式法
对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;
语句 表达式1用于循环赋初始值,它只能执行一次; 表达式2是循环条件; 表达式3用于对循环条件的修改,以使循环能于结束。
求解表达式1
表达式2
0
非0 语句
求解表达式3
for循环下面的语句
例1:求从1加到100的程序。
#include <stdio.h> void main() { int s,i; s=0; for(i=1;i<=100;i++)
fact*=i; printf("%d!=%ld",n,fact); }
对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;
t0=1 ti= ti-1 .x/i (i=1,2,……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++)