当前位置:文档之家› C语言程序设计 第四章 循环语句和转移语句

C语言程序设计 第四章 循环语句和转移语句


4.3 do-while循环
1、功能:do-while语句一般完成直到型循环,
2、格式为:
do { 语句块
}while(表达式);
3、do-while语句控制流程为:先执行一次循环体内的语句,然 后再求判终表达式的值,若判终表达式的值为“非0”,则重 复执行循环体,否则当表达式的值为“0”时,循环结束。
例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‟); }
对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;
例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); }
求解表达式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); }
1. break语句的功能:用于从循环体内跳出循环体, 即提前结束循环。
2.使用要点:break只能用在循环语句和switch语句中.
break语句---范例 for(r=1;r<=10;r++)
对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″是逗号表达式。
例3 将键盘输入复制到屏幕,直到按下一个回车 键为止. #include <stdio.h> void main( ) {char c; c=getchar( ); while(c!=„\n‟) {putchar( c ); c=getchar( ); } }
while语句的特点: 1、循环一般由条件控制 2、在循环体内至少有一条语句能对循环 条件产生影响,以防止死循环
例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; } }
for语句的特点:
1、使用了三个表达式 2、循环控制变量可以在循环体内使用,也可 以不使用,仅用来控制循环次数
3、从正常出口离开循环时,循环控制变量会 超过终值
4.2
while循环
while语句的一般格式为: while(表达式) 语句
while语句的执行过程
while语句的执行过程为: (1)计算并判断表达式的值。若值为0,则结束 循环,退出while语句;若值为非0,则执行循 环体。 (2)转步骤(1)。
例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(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用于对循环条件的修改,以使循环能于结束。
#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); }
第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多条语句。
练习:
已知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); }
相关主题