C语言三种循环语句


if(i==51) break; /*如果 i 等于 51,则跳出循环*/ sn+=i; /*1+2+……+50*/ } printf(%d\n,sn); }
可以看出,最终的结果是 1+2+……+50。因为在 i 等于 51 的时候,就跳出循环了。自己写写怎样在 while 和 do--while 循环中增加 break 语句。 注意: 1. break 语句对 if-else 的条件语句不起作用。 2. 在多层循环中,一个 break 语句只向外跳一层。 例如: main() { int i,j; printf(i j\n); for(i=0;i<2;i++) for(j=0;j<3;j++) { if(j==2) break; printf(%d %d\n,i,j);
for(i=0;i<2;i++) { for(j=0;j<3;j++) { for(k=0;k<3;k++) { if(k==2) break; printf(%d %d %d\n,i,j,k); } if(k==2) break; } if(k==2) break; } } 输出结果为: ijk 000 001 所以在同时跳出多层循环时,应该使用 goto 语句。记住, 所有的 goto 语句其实都是可以用 break,continue 代替的。
12 (三)、goto 语句 goto 语句是一种无条件转移语句,与 BASIC 中的 goto 语句 相似。goto 语句的使用格式为: goto 标号; 其中标号是 Turbo C 2.0 中一个有效的标识符,这个标识符 加上一个:一起出现在函数内某处,执行 goto 语句后,程序 将跳转到该标号处并执行其后的语句。标号既然是一个标识 符,也就要满足标识符的命名规则。另外标号必须与 goto 语句同处于一个函数中,但可以不在一个循环层中。通常 goto 语句与 if 条件语句连用,当满足某一条件时,程序跳 到标号处运行。goto 语句通常不用,主要因为它将使程序层 次不清,且不易读,但在多层嵌套退出时,用 goto 语句则 比较合理。 main() { int sn=0,i; for(i=1;i<=100;i++) { if(i==51) goto loop; /*如果 i 等于 51,则跳出循环*/ sn+=i; /*1+2+……+50*/ }
二、递归 递归,是函数实现的一个很重要的环节,很多程序中都或多 或少的使用了递归函数。递归的意思就是函数自己调用自己 本身,或者在自己函数调用的下级函数中调用自己。 递归之所以能实现,是因为函数的每个执行过程都在栈中有 自己的形参和局部变量的拷贝,这些拷贝和函数的其他执行 过程毫不相干。这种机制是当代大多数程序设计语言实现子 程序结构的基础,是使得递归成为可能。假定某个调用函数 调用了一个被调用函数,再假定被调用函数又反过来调用了 调用函数。这第二个调用就被称为调用函数的递归,因为它 发生在调用函数的当前执行过程运行完毕之前。而且,因为 这个原先的调用函数、现在的被调用函数在栈中较低的位置 有它独立的一组参数和自变量,原先的参数和变量将不受影 响,所以递归能正常工作。程序遍历执行这些函数的过程就 被称为递归下降。 程序员需保证递归函数不会随意改变静态变量和全局变量 的值,以避免在递归下降过程中的上层函数出错。程序员还 必须确保有一个终止条件来结束递归下降过程,并且返回到 顶层。 例如这样的程序就是递归: void a(int); main()
变量赋初值。省略了条件表达式,则不做其它处理时便成为 死循环。省略了增量,则不对循环控制变量进行操作,这时 可在语句体中加入修改循环控制变量的语句。 (3).for 循环可以有多层嵌套。 例如: for(;;) 语句; for(i=1;;i+=2) 语句; for(j=5;;) 语句; 这些 for 循环语句都是正确的。 main() { int i,j; printf(i j\n); for(i=0;i<2;i++) for(j=0;j<3;j++) printf(%d %d\n,i,j); } 输出结果为: ij 00 01 02
下面举几个例子:
1.求两个整数的最大公约数。例如 10 和 15 的最大公约数是 5。 分析:最大公约数一定小于等于最小的那个数一半,同时能 被两数整除。 main() { int num1,num2,i,min; scanf(%d%d,&num1,&num2); min=num1 for(i=min/2;i>0;i--) if(num1%i==0&&num2%i==0) break; printf(最大公约数为%d\n,i); }
sn+=i; /*1+2+……+50+52+……+100*/ } printf(%d\n,sn); } 从程序中可以看出,continue 语句只是当前的值没有执行, 也就是说当前的值跳过去了,接着执行下次循环。 main() { int i,j; printf(i j\n); for(i=0;i<2;i++) for(j=0;j<3;j++) { if(j==1) continue; printf(%d %d\n,i,j); } } 输出结果为: ij 00 02 10
3.判断一个整数是不是素数(素数就是只能被本身和 1 整除 的数)。 #include math.h main() { int num,i,flag=0; scanf(%d,&num); for(i=2;i { flag=0; /*标志变量复位*/ if(num%i==0) { flag=1; break;
} } 输出结果为: ij 00 01 10 11 当 i==0,j==2 时,执行 break 语句,跳出到外层的循环,i 变为 1。 (二)、continue 语句 continue 语句的作用是跳过循环本中剩余的语句而强行执 行下一次循环。 continue 语句只用在 for、while、do-while 等循环体中, 常 与 if 条件语句一起使用,用来加速循环。 例如: main() { int sn=0,i; for(i=1;i<=100;i++) { if(i==51) continue; /*如果 i 等于 51,则结束本次循环*/
二、循环控制 (一)、break 语句 break 语句通常用在循环语句和开关语句中。当 break 用于 开关语句 switch 中时,可使程序跳出 switch 而执行 switch 以后的语句;如果没有 break 语句,则将成为一个死循环而 无法退出。break 在 switch 中的用法已在前面介绍开关语 句时的例子中碰到,这里不再举例。 当 break 语句用于 do-while、for、while 循环语句中时, 可使程序终止循环而执行循环后面的语句,通常 break 语句 总是与 if 语句联在一起。即满足条件时便跳出循环。 例如: main() { int sn=0,i; for(i=1;i<=100;i++) {
三种基本的循环语句: for 语句、while 语句和 do-while 语 句。
一、循环语句 (一)、for 循环 它的一般形式为: for(<初始化>;<条件表过式>;<增量>) 语句; 初始化总是一个赋值语句,它用来给循环控制变量赋初值; 条件表达式是一个关系表达式,它决定什么时候退出循环; 增量定义循环控制变量每循环一次后按什么方式变化。这三 个部分之间用;分开。 例如: for(i=1;i<=10;i++) 语句; 上例中先给 i 赋初值 1,判断 i 是否小于等于 10,若是则执 行语句,之后值增加 1。再重新判断,直到条件为假,即 i>10 时,结束循环。 注意: (1).for 循环中语句可以为语句体,但要用{和}将参加循环的 语句括起来。 (2).for 循环中的初始化、条件表达式和增量都是选择项,即 可以缺省,但;不能缺省。省略了初始化,表示不对循环控制
loop: ; printf(%d\n,sn); } 可以看出,这儿的 goto 语句和 break 作用很类似。 这儿的 loop: ; printf(%d\n,sn); 也可以写成 loop: printf(%d\n,sn); main() { int sn=0,i; for(i=1;i<=100;i++) { if(i==51) goto loop; /*如果 i 等于 51,则跳出本次循环*/ sn+=i; /*1+2+……+50+52+……+100*/ loop: ; } printf(%d\n,sn); } 可以看出这儿的 loop 语句和 continue 的作用类似。 但是某些情况下又必须使用 goto 语句,否则会让程序大大 臃肿。如: main()
{ int i,j,k; printf(i j k\n); for(i=0;i<2;i++) for(j=0;j<3;j++) for(k=0;k<3;k++) { if(k==2) goto loop; printf(%d %d %d\n,i,j,k); } loop: ; } 输出结果为: ijk 000 001 如果不使用 goto 语句,而使用 break,continue 语句,应该 这样 main() { int i,j,k; printf(i j\n);
char c; c='\0'; /*初始化 c*/ while(c!='\n') /*回车结束循环*/ c=getche(); /*带回显的从键盘接收字符*/ }
合集下载

c语言的三种流程控制语句及语法格式

c语言的三种流程控制语句及语法格式

C语言是一种广泛应用的编程语言,其流程控制语句是编写程序中的重要部分。

流程控制语句用于控制程序的执行流程,包括顺序执行、条件执行和循环执行。

C语言中常用的流程控制语句主要包括顺序结构、选择结构和循环结构,下面将分别介绍它们的语法格式及使用方法。

1. 顺序结构顺序结构是程序中最简单的流程控制结构,也是最基本的结构。

顺序结构指的是按照代码的编写顺序依次执行,没有跳跃或分支。

在C语言中,顺序结构是程序的默认执行方式,没有特定的关键字或语法格式。

程序中的语句按照编写的顺序依次执行,直到程序结束。

例如:```cint m本人n() {int a = 1;int b = 2;int c = a + b;printf("The result is d\n", c);return 0;}```以上代码中的语句就是按照顺序依次执行的,没有条件判断或循环。

2. 选择结构选择结构是根据条件判断的结果决定程序执行的流程控制结构。

在C 语言中,选择结构有两种形式,分别是if语句和switch语句。

(1)if语句if语句用于根据条件判断的结果决定程序的执行流程。

其基本语法格式如下:```cif (condition) {// 当条件为真(非0)时执行此处的语句块} else {// 当条件为假(0)时执行此处的语句块}```在if语句中,condition代表一个表达式或逻辑判断,如果condition 的值为真(非0),则执行if后面的语句块;否则执行else后面的语句块。

例如:```cint score = 80;if (score >= 60) {printf("Pass\n");} else {printf("F本人l\n");}```以上代码中,根据score的值来判断是否及格,如果score大于等于60,则输出Pass,否则输出F本人l。

除了if和else关键字,还可以使用else if语句来实现多重条件判断:```cint score = 75;if (score >= 90) {printf("Excellent\n");} else if (score >= 80) {printf("Good\n");} else if (score >= 70) {printf("Average\n");} else {printf("F本人l\n");}```(2)switch语句switch语句也是一种选择结构,适用于有多个条件判断的情况。

c语言while循环语句例子

c语言while循环语句例子

c语言while循环语句例子以下是 7 条关于 C 语言 while 循环语句的例子:1. 嘿,你知道吗,就像数数一样,while 循环可厉害啦!比如我们可以用它来计算 1 到 10 的累加和呀。

int sum = 0, i = 1; while (i <= 10) {sum += i; i++;} 哇塞,是不是很直观?2. 哎呀呀,当你想一直做一件事直到某个条件不满足时,while 循环就派上用场咯!好比你在不停地吃糖果,直到糖果吃完就停止。

int candies = 10; while (candies > 0) {printf("吃了一颗糖果\n"); candies--;} 瞧见没?3. 你想想看呀,while 循环不就像是一场游戏,只要条件成立就一直玩下去吗?比如说要打印出所有的奇数。

int num = 1; while (num <= 10) {if (num % 2!= 0) printf("%d ", num); num++;} 这多有趣呀!4. 哇哦,如果把程序比作一场冒险,那 while 循环肯定是英勇的战士啦!例如计算有多少个数能被 3 整除。

int count = 0, value = 1; while (value <= 20) {if (value % 3 == 0) count++; value++;} 厉害吧?5. 嘿,你说 while 循环是不是很神奇呀,就像一个不知疲倦的工人在不停工作。

比如从 100 倒着数到 1。

int num2 = 100; while (num2 >= 1) {printf("%d ", num2); num2--;} 多有意思呀!6. 哎呀,while 循环就好像是一个固执的小孩,不达目的不罢休呢!那来用它打印出 5 次”我爱 C 语言“。

int times = 0; while (times < 5) {printf("我爱 C 语言"); times++;} 是不是很带劲?7. 讲真的,while 循环真的是编程里的好帮手呢!就像一个随时准备行动的伙伴。

C语言 第五章-循环结构程序设计

C语言 第五章-循环结构程序设计

执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/

c语言中常用的循环语句有几种,说出他们之间的异同

c语言中常用的循环语句有几种,说出他们之间的异同

c语言中常用的循环语句有几种,说出他们之间的异同在C语言中,常用的循环语句有三种:for循环、while循环和do-while循环。

1. for循环:for循环适用于循环次数已知的情况。

它由三个部分组成:循环变量的初始化、循环条件的判断和循环体内的语句执行。

for循环的执行流程是先执行初始化语句,然后判断循环条件,如果条件满足,则执行循环体内的语句,再执行步进语句,然后再次判断循环条件。

在执行过程中,可以通过改变循环变量的值来控制循环次数。

2. while循环:while循环适用于循环次数未知但循环条件已知的情况。

它只有一个循环条件,而没有特定的初始化和步进语句。

在执行过程中,先判断循环条件,如果条件满足,则执行循环体内的语句,再回到判断循环条件的步骤。

在循环体内需要手动改变循环条件,否则可能导致死循环。

3. do-while循环:do-while循环适用于至少执行一次循环体的情况。

它先执行循环体内的语句,然后再判断循环条件。

如果条件满足,则继续执行循环体内的语句,再次判断循环条件。

与while循环不同的是,do-while循环保证了循环体至少执行一次。

这三种循环语句之间的异同点如下:1.初始化和步进语句:for循环中有明确的初始化和步进语句,适用于循环次数已知的情况;而while循环和do-while循环没有特定的初始化和步进语句,适用于循环次数未知的情况或至少执行一次循环体的情况。

2.循环条件的位置:for循环和while循环的循环条件在循环体外进行判断,因此在初次判断循环条件时可能不会执行循环体内的语句;而do-while循环的循环条件在循环体内进行判断,因此在初次判断循环条件时一定会执行循环体内的语句至少一次。

3.使用场景:for循环适用于循环次数已知的场景;while循环和do-while循环适用于循环次数未知或至少执行一次循环体的场景。

另外,在C语言中还有一种特殊的循环语句,即无限循环语句。

c语言语句大全表解释

c语言语句大全表解释

c语言语句大全表解释C语言语句大全表解释C语言是一种广泛使用的编程语言,它的语法简洁、灵活,可以用于开发各种类型的应用程序。

在C语言中,语句是程序的基本构建块,它们用于执行特定的操作。

本文将按照语句的类型,对C语言语句大全表进行解释。

1. 表达式语句表达式语句是C语言中最简单的语句类型之一,它由一个表达式和一个分号组成。

表达式可以是任何有效的C语言表达式,例如变量赋值、函数调用等。

表达式语句的主要作用是执行表达式并将其结果丢弃。

2. 选择语句选择语句用于根据条件执行不同的代码块。

C语言中有两种选择语句:if语句和switch语句。

if语句用于执行单个代码块,而switch语句用于执行多个代码块。

3. 循环语句循环语句用于重复执行一段代码块,直到满足某个条件为止。

C语言中有三种循环语句:while语句、do-while语句和for语句。

while语句和do-while语句用于执行未知次数的循环,而for语句用于执行已知次数的循环。

4. 跳转语句跳转语句用于在程序中跳转到指定的代码块。

C语言中有三种跳转语句:goto语句、break语句和continue语句。

goto语句可以跳转到程序中的任何位置,而break语句和continue语句用于跳出循环。

5. 函数语句函数语句用于定义和调用函数。

C语言中的函数由函数头和函数体组成。

函数头包含函数的返回类型、函数名和参数列表,而函数体包含函数的实际代码。

函数调用是通过函数名和参数列表来实现的。

6. 复合语句复合语句是由多个语句组成的代码块。

C语言中的复合语句用花括号括起来,可以包含任意数量的语句。

复合语句通常用于定义函数、循环和选择语句的代码块。

总结C语言语句大全表包含了C语言中所有的语句类型。

本文按照语句的类型,对这些语句进行了解释。

掌握这些语句的使用方法,可以帮助程序员编写出高效、可读性强的C语言程序。

c语言中dowhile语句例子

c语言中dowhile语句例子

C语言中do…while语句例子1. 了解do…while语句的基本概念在C语言中,do…while语句是一种循环语句,用于执行一段程序代码直到指定的条件不再满足。

与while语句不同的是,do…while语句是先执行一次循环体的代码,然后再检查循环条件是否满足。

无论条件是否成立,do…while循环中的代码至少会执行一次。

2. 示例1:计算1到10的和下面是一个使用do…while语句来计算1到10的和的示例代码:```c#include <stdio.h>int m本人n() {int sum = 0;int i = 1;do {sum += i;i++;} while (i <= 10);printf("1到10的和为:d\n", sum);return 0;}```在这个示例中,首先声明了两个变量sum和i,分别用于保存和的结果和作为计数器。

接着使用do…while语句来进行累加操作,直到i 的值大于10为止。

最后输出计算结果。

3. 示例2:输入密码进行验证下面是一个使用do…while语句来进行密码验证的示例代码:```c#include <stdio.h>int m本人n() {int password = xxx;int input;do {printf("请输入密码:");scanf("d", input);} while (input != password);printf("密码正确,欢迎进入系统!\n");return 0;}```在这个示例中,首先声明了一个变量password用于保存正确密码的值,然后使用do…while语句进行密码输入和验证的操作。

当输入的密码不等于正确密码时,会一直提示用户重新输入密码,直到输入正确为止。

4. 结论通过以上两个示例,我们可以看到do…while语句的灵活性和实用性。

C语言讲课-while循环结构课件

输入:1
输入:101=0
输出:
sum=101
此程序的功能?
什么情况下两者结果相同?
二、do-while语句
5.3 for语句
语句一般格式 for (表达式1;表达式2;表达式3) 语句
功能:计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。
?
-3
do-while语句
语句一般格式 do 语句 while (表达式); 功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。
do-while循环的算法

2
)直到型循环(
while循环控制结构
假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?
#include <stdio.h>void main( ){ float t=0.0001; int n=0; while(t<=8844) { t=t*2; n++; } printf(“ %d\n”,n);}
while循环控制结构
假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?
#include <stdio.h>void main( ){ float t=0.0001; t=t*2; printf(“ %f”,t);}
while循环控制结构
假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?
学习内容
循环结构的引入
C语言提供了三种循环控制语句,构成了三种基本的循环结构:while语句构成的循环结构do-while语句构成的循环结构for语句构成的循环结构

《C语言程序设计课件》第四章-循环语句

scanf("&d",&n); while(n!=0)
{ sum+=n; scanf("%d",&n); }
printf("The sum is :%d\n",sum);
return 0; }
从任意 n 个实数中选出最大数 和最小数
从任意 n 个实数中选出最大数和最小数
#include <stdio.h> int main( ) {
/*程序4-1*/ #include <stdio.h> int main() {
int i,sum=0; i=1; while(i<=100) {
sum += i; i++; } printf("sum=%d\n",sum); return 0; }
【例4-2】输入一行字符以回车键结束,分别 统计出其中英文字母、空格、数字和其它字符 的个数。
#include <stdio.h> int main( ) {
int i,n;
printf("This program prints a table of squares.\n"); printf("Enter number of entries in table:");
scanf("%d",&n); i=1; while (i<=n)
【例】求整数1~100的累加和,使用for语句实 现。
#include <stdio.h> int main() {
int i,sum=0; for(i=1;i<=100;i++)

[计算机软件及应用]计算机基础2C语言第6章循环结构


2021/8/26
2
while语句
(1)一般格式 while(循环继续条件) { 循环体语句组;}
while语句的语义是:计算表达式的值,当值为真(非 0)时, 执行循环体语句。
2021/8/26
3
#include <stdio.h>
main()
{ int n=0; printf("input a string:\n"); while(getchar()!='\n') n++; printf("%d",n); }
重循环
2021/8/26
5
当输入a的值为5时,分析以下程序 的结果
main() {
int a,n=0; scanf(“%d”,&a); while(a=5)
printf("%d ",n++); }
2021/8/26
6
以下程序的输出结果是2 0。
#include <stdio.h> void main() {
char c; c=getchar( ); while((getchar())!='?')
putchar(++c); }
jhiu
2021/8/26
9
#include <stdio.h> void main() {
输入:2473<CR>(<CR>代表回车符), 程序的输出结果是
int c;
while((c=getchar())!='\n')
for(n=7;n<=100;n+=7)

c语言循环控制语句

c语⾔循环控制语句循环控制结构(⼜称重复结构)是程序中的另⼀个基本结构.在实际问题中,常常需要进⾏⼤量的重复处理,循环结构可以使我们只写很少的语句,⽽让计算机反复执⾏,从⽽完成⼤量类同的计算.C语⾔提供了while语句、do...while语句和for语句实现循环结构.3.4.1while语句while语句是当型循环控制语句,⼀般形式为:while<表达式>语句;语句部分称为循环体,当需要执⾏多条语句时,应使⽤复合语句.while语句的流程图见图3-8,其特点是先判断,后执⾏,若条件不成⽴,有可能⼀次也不执⾏.[例3-11]求n!分析:n!=n*(n-1)*(n-2)*..2*1,0!=1.即S0=1,Sn=Sn-1*n.可以从S0开始,依次求出S1、S2、...Sn.统⼀令S等于阶乘值,S的初值为0!=1;变量i为计数器,i从1变到n,每⼀步令S=S*i,则最终S中的值就是n!.流程图见图3-9,程序如下:考察图3-9中循环部分的流程图可以看出,在循环前各变量应有合适的值(s=1),另外,控制循环结束的变量(此处为i)必须在循环体中被改变,否则,循环将⽆限进⾏下去,成为死循环.本题中,将多项式的每⼀项⽤t表⽰,s代表符号,在每⼀次循环中,只要改变s、n的值,就可求出每⼀项t.⼀般情况下,while型循环最适合于这种情况:知道控制循环的条件为某个逻辑表达式的值,⽽且该表达式的值会在循环中被改变,如同例3-12的情况⼀样.3.4.2do...while语句在C语句中,直到型循环的语句是do...while,它的⼀般形式为:do语句while<表达式>其中语句通常为复合语句,称为循环体.do...while语句的流程图见图3-10,其基本特点是:先执⾏后判断,因此,循环体⾄少被执⾏⼀次.但需要注意的是,do...while与标准的直到型循环有⼀个极为重要的区别,直到型循环是当条件为真时结束循环,⽽do...while 语句恰恰相反,当条件为真时循环,⼀旦条件为假,⽴即结束循环,请注意do...while语句的这⼀特点.例[3-13]计算sin(x)=x-x3/3!+x5/5!-x7/7!+...直到最后⼀项的绝对值⼩于1e-7时为⽌.分析:这道题使⽤递推⽅法来做.让多项式的每⼀项与⼀个变量n对应,n的值依次为1,3,5,7,...,从多项式的前⼀项算后⼀项,只需将前⼀项乘⼀个因⼦:(-x2)/((n-1)*n)⽤s表⽰多项式的值,⽤t表⽰每⼀项的值,程序如下:#include# includem a i n ( ){double s,t,x ;int n ;printf("please input x :");scanf("%lf",&x);t=x;n=1;s=x;do{n=n+2;t=t*(-x*x)/((float)(n)-1)/(float)(n);s=s+t;}while(fabs(t)>=1e-7);printf("sin(%f)=%lf,"x,s);}运⾏结果如下:RUN?pleaseinputx:1.5753?sin(1.575300)=0.999990RUN?pleaseinputx:-0.65?sin(-0.650000)=-0.6051863.4.3for语句for语句是循环控制结构中使⽤最⼴泛的⼀种循环控制语句,特别适合已知循环次数的情况.它的⼀般形式为:for(<表达式1>;<表达式2>;<表达式3>)语句for语句很好地体现了正确表达循环结构应注意的三个问题:1)控制变量的初始化.2)循环的条件.3)循环控制变量的更新.表达式1:⼀般为赋值表达式,给控制变量赋初值;表达式2:关系表达式或逻辑表达式,循环控制条件;表达式3:⼀般为赋值表达式,给控制变量增量或减量.语句:循环体,当有多条语句时,必须使⽤复合语句.for循环的流程图如图3-11,其执⾏过程如下:⾸先计算表达式1,然后计算表达式2,若表达式2为真,则执⾏循环体;否则,退出for 循环,执⾏for循环后的语句.如果执⾏了循环体,则循环体每执⾏⼀次,都计算表达式3,然后重新计算表达式2,依此循环,直⾄表达式2的值为假,退出循环.[例3-14]计算⾃然数1到n的平⽅和.# include# includemain ( ){int i;float s;printf("please input n :");scanf("%d",&n);s=0.0;for(i=1;i<=n;i++)s=s+(float)(i)*(float)(i);printf("1*1+2*2+...+%d*%d=%f\,nn",n,s);}运⾏结果如下:RUNplease input n:51*1+2*2+...+5*5=55.000000for语句的⼏种格式for语句的三个表达式都是可以省略的,但分号“;”绝对不能省略.a.for(;;)语句;这是⼀个死循环,⼀般⽤条件表达式加break语句在循环体内适当位置,⼀旦条件满⾜时,⽤break语句跳出for循环.例如,在编制菜单控制程序时,可以如下:for(;;){printf("please input choice(Q=Exit):");显/*⽰菜单语句块:*/scanf("%c",&ch);if(ch=='Q')or(ch=='q')break;语/*句段*/}b.for(;表达式2;表达式3)使⽤条件是:循环控制变量的初值不是已知常量,⽽是在前⾯通过计算得到,例如:i=m-n;for(;ic.for(表达式1;表达式2;)语句⼀般当循环控制变量⾮规则变化,⽽且循环体中有更新控制变量的语句时使⽤.例如:for(i=1;i<=100;){i=i*2+1;}d.for(i=1,j=n;i在for语句中,表达式1、表达式3都可以有⼀项或多项,如本例中,表达式1同时为i和j 赋初值,表达式3同时改变i和j的值.当有不⽌⼀项时,各项之间⽤逗号“,”分隔.另外,C语⾔还允许在循环体内改变循环变量的值,这在某些程序的设计中是很有⽤的.到此,我们已经学习了C语⾔中三种循环控制语句while、do...while和for语句,下⾯再讨论两个问题:三种语句的选⽤同⼀个问题,往往既可以⽤while语句解决,也可以⽤do...while或者for语句来解决,但在实际应⽤中,应根据具体情况来选⽤不同的循环语句,选⽤的⼀般原则是:1)如果循环次数在执⾏循环体之前就已确定,⼀般⽤for语句;如果循环次数是由循环体的执⾏情况确定的,⼀般⽤while语句或者do...while语句.2)当循环体⾄少执⾏⼀次时,⽤do...while语句,反之,如果循环体可能⼀次也不执⾏,选⽤while语句.循环的嵌套⼀个循环的循环体中有另⼀个循环叫循环嵌套.这种嵌套过程可以有很多重.⼀个循环外⾯仅包围⼀层循环叫⼆重循环;⼀个循环外⾯包围两层循环叫三重循环;⼀个循环外⾯包围多层循环叫多重循环.三种循环语句for、while、do...while可以互相嵌套⾃由组合.但要注意的是,各循环必须完整,相互之间绝不允许交叉.如下⾯这种形式是不允许的:do{for(;;){......}while();}[例3-15]打印8⾏7列的星形矩阵.流程图见图3-12,程序如下:#includemain(){inti,j;for(i=0;i<8,i++)/*控制⾏*/{for(j=0;j<7>;j++)/*控制列*/printf("*");printf("\n");/*换⾏*/}}打印结果如下:RUN********************************************************将程序中for(j=0;j<7;j++)改为for(j=0;j打印三⾓形.3.4.4break与continue语句有时,我们需要在循环体中提前跳出循环,或者在满⾜某种条件下,不执⾏循环中剩下的语句⽽⽴即从头开始新的⼀轮循环,这时就要⽤到break和continue语句.1.break语句在前⾯学习switch语句时,我们已经接触到break语句,在case⼦句执⾏完后,通过break 语句使控制⽴即跳出switch结构.在循环语句中,break语句的作⽤是在循环体中测试到应⽴即结束循环时,使控制⽴即跳出循环结构,转⽽执⾏循环语句后的语句.[例3-16]打印半径为1到10的圆的⾯积,若⾯积超过100,则不予打印.#includemain(){intr;float area;for(r=1;r<=10;r++){area=3.141593*r*r;if(area>100.0)break;printf("square=%f\n",area);}printf("nowr=%d\n",r);}运⾏程序:RUNsquare=3.141593square=12.566373square=28.274338square=50.265488square=78.539825nowr=6当break处于嵌套结构中时,它将只跳出最内层结构,⽽对外层结构⽆影响.2.continue语句continue语句只能⽤于循环结构中,⼀旦执⾏了continue语句,程序就跳过循环体中位于该语句后的所有语句,提前结束本次循环周期并开始新⼀轮循环.[例3-17]计算半径为1到15的圆的⾯积,仅打印出超过50的圆⾯积.#includemain(){int r;float area;for(r=1;r<=5;r++){area=3.141593*r*r;if(area<50.0)continue;printf("square=%f",area);}}结果为:RUNsquare=50.265488square=78.539825同break⼀样,continue语句也仅仅影响该语句本⾝所处的循环层,⽽对外层循环没有影响.3.4.5程序应⽤举例[例3-18]验证哥德巴赫猜想:任⼀充分⼤的偶数,可以⽤两个素数之和表⽰,例如:4=2+26=3+3......98=19+79哥德巴赫猜想是世界著名的数学难题,⾄今未能在理论上得到证明,⾃从计算机出现后,⼈们就开始⽤计算机去尝试解各种各样的数学难题,包括费马⼤定理、四⾊问题、哥德巴赫猜想等,虽然计算机⽆法从理论上严密地证明它们,⽽只能在很有限的范围内对其进⾏检验,但也不失其意义.费马⼤定理已于1994年得到证明,⽽哥德巴赫猜想这枚数学王冠上的宝⽯,⾄今⽆⼈能及.分析:我们先不考虑怎样判断⼀个数是否为素数,⽽从整体上对这个问题进⾏考虑,可以这样做:读⼊⼀个偶数n,将它分成p和q,使n=p+q.怎样分呢?可以令p从2开始,每次加1,⽽令q=n-p,如果p、q均为素数,则正为所求,否则令p=p+q再试.其基本算法如下:1)读⼊⼤于3的偶数n.2)P=13)do{4)p=p+1;q=n-p;5)p是素数吗?6)q是素数吗?7)}whilep、q有⼀个不是素数.8)输出n=p+q.为了判明p、q是否是素数,我们设置两个标志量flag p和flag q,初始值为0,若p是素数,令flag p=1,若q是素数,令flagq=1,于是第7步变成:7)}while(flag p*flag q==0);再来分析第5、第6步,怎样判断⼀个数是不是素数呢?素数就是除了1和它⾃⾝外,不能被任何数整除的整数,由定义可知:2、3、5、7、11、13、17、19等是素数;1、4、6、8、9、10、12、14等不是素数;要判断i是否是素数,最简单的办法是⽤2、3、4、??i-1这些数依次去除i,看能否除尽,若被其中之⼀除尽,则i不是素数,反之,i是素数.但其实,没必要⽤那么多的数去除,实际上,⽤反证法很容易证明,如果⼩于等于i的平⽅根的数都除不尽,则i必是素数.于是,上述算法中的第5步、第6步可以细化为:第5)步p是素数吗?flag p=1;for(j=2;j<=[sqrt(p)];j++)ifp除以j的余数=0{flag p=0;break;}第6)步q是素数吗?flag q=1;for(j=2;j<=[sqrt(q)];j++)ifq除以j的余数=0{flag q=0;break;}程序如下:#include#includemain(){intj,n,p,q,flag p,flag q;printf("please input n:");scanf("%d",&n);if(((n%2)!=0)||(n<=4))printf("inputdataerror!\n");else{p=1;do{p=p+1;q=n-p;flag p=1;for(j=2;j<=(int)(floor(sqrt((double)(p))));j++) {if((p%j)==0){flag p=0;break;}}flag q=1;for(j=2;j<=(int)(floor(sqrt((double)(q))));j++) { if((q%j)==0){flag q=0;break;}}}while(flag p*flag q==0);printf("%d=%d+%d\n,"n,p,q);}}程序运⾏结果如下:RUN?please input n:88=3+5RUNplease input n:98 98=19+79RUNplease input n:9 input data error!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档