C语言第3章C程序的基本控制结构.ppt

上传人:xin****828 文档编号:14949863 上传时间:2020-08-02 格式:PPT 页数:97 大小:1.09MB
收藏 版权申诉 举报 下载
C语言第3章C程序的基本控制结构.ppt_第1页
第1页 / 共97页
C语言第3章C程序的基本控制结构.ppt_第2页
第2页 / 共97页
C语言第3章C程序的基本控制结构.ppt_第3页
第3页 / 共97页
资源描述:

《C语言第3章C程序的基本控制结构.ppt》由会员分享,可在线阅读,更多相关《C语言第3章C程序的基本控制结构.ppt(97页珍藏版)》请在装配图网上搜索。

1、第3章 C程序的基本控制结构,3.1 顺序结构 3.2 选择结构 3.3 循环结构,学习目标,(1)掌握C语言语句的分类。 (2)理解三种程序控制结构的流程图。 (3)掌握各种类型数据的格式化输入/输出方法。 (4)掌握字符数据的非格式化输入/输出方法。 (5)理解选择结构的含义;掌握if、switch语句的使用方法。 (6)掌握关系运算符、逻辑运算符和条件运算符的用法;运算符的优先级关系和结合性。 (7)理解循环结构的含义;掌握不同循环结构的选择及其转换方法;掌握混合控制结构程序设计的方法。 (8)掌握C语言三种循环结构的特点;掌握while、do-while、for、break、conti

2、nue语句的使用方法。,程序设计语言有顺序、选择、循环三种基本 的控制结构。 1用流程图表示 (1)顺序结构 表示先执行A,再执行B。,a,b,(2)选择结构 如果P条件成立,执行A,否则执行B,然后转向后面的语句。,a,b,a,b,(3)循环结构 有两种形式。 while 结构(当型循环) 表示先判断条件表达式P,当P成立,即为“真”, 反复执行循环体A;直到P不成立,即为“假”,转向其 后面的语句。,注意: 如果P一开始就不成立, 则A一次也不执行, 直接转到下一条语句。,a,b, do-while结构(直到型循环) 先执行循环体语句A ,然后判断条件表达式P。,注意: 不管条件P 成立与

3、否,循环体A至少执行一次。,a,b,三种基本结构的共同特点,只有一个入口; 只有一个出口; 结构内的每一部分都有可能被执行到; 结构内不存在“死循环”。,3.1.1 C程序的语句,C语言的语句可分为以下四类: 表达式语句 函数调用语句 控制语句 复合语句 空语句,简单语句,1. 表达式语句 由一个表达式加上一个分号构成。其一般形式为:表达式; 如: x=y+z; y+z; i+; 2. 函数调用语句 由函数调用表达式加分号构成. 如: printf(“C Program”); scanf(“%d”,3.控制语句 用于控制程序的流程, 以实现程序的各种结构方式。 语言有九种控制语句, 可分成以下

4、三类。 (1) 条件判断语句:if语句,switch语句。 (2) 循环执行语句:do while语句,while语句,for语句。 (3) 转向语句:break语句,goto语句,continue语句,return语句。,4. 复合语句 把多个语句用大括号括起来组成的一个语句 称复合语句。 例如:,花括号中的语句,可以是简单语句、空语句、复合语句、流程控制语句,所有这些语句括在一起,在语法上看成是一条语句,执行时顺序执行花括号中的每条语句。复合语句多用于流程控制语句中。, x=y+z; a=b+c; printf(“%d%d”,x,a); ,复合语句内的各条语句都必须以分号“;”结尾, 在括

5、号“”外不能加分号。,5.空语句 只有分号组成的语句称为空语句。 例如: while(getchar()!=n) ;,3.1.2 数据输出函数printf() 和putchar,一printf()函数(格式输出函数) 1.调用的一般形式 printf(“格式控制字符串”,输出表列) 其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。,可以是常量、变量、表达式,格式字符 转义字符 普通字符,【练一练】 void main() int a=88,b=89; pri

6、ntf(%d %dn,a,b); printf(%d,%dn,a,b); printf(%c,%cn,a,b); printf(a=%d,b=%dn ,a,b); ,程序运行输出结果: 88 89 88,89 X,Y a=88,b=89,2格式字符串 格式字符串的一般形式为:,3.1 顺序结构,格式转换说明符(格式字符)功能 %c 输出一个字符 %d 输出十进制整数,按实际位数输出 %f 定点格式输出浮点数,整数部分取实际位数,小数部分保留6位 %e 指数格式-m.ddddde+nn输出浮点数 %g 选择 %f和%e格式中,输出宽度较小的一种 %s输出字符串,按实际位数输出 %u输出十进制无符

7、号整数,按实际位数输出 %o输出八进制无符号整数,按实际位数输出 %x输出十六进制无符号整数,按实际位数输出 %输出一个% %p输出指针值,对于格式转换说明符可以进行以下三类修饰: 1. 指定字段宽度 (1) %m.nd 其中:m 规定输出字段的最小宽度;n 规定输出最小有效位数。,例如, printf(“%3d,%6d,%6.5dn”,1234,1234,1234); 输出结果为 1234, 1234, 01234,(2) %m.nf 其中:m 规定输出字段的最小宽度;n 规定输出小数位数。,例如, printf(“%10f,%10.2f,%.2fn”,123.456,123.456,123

8、.4); 输出结果为 123.456000, 123.46,123.40,(3) %m.ne 其中:m 规定输出最小宽度;(n-1)为尾数部分的小数位数。 例如, printf(“%10e,%10.4e,%.3en”,123.456,123.456,123.4); 输出结果为 1.23456e+02, 1.235e+02,1.23e+02,注意: (1) 无论是 %m.nf 还是 %m.ne 格式,对舍去的小数最高 位都四舍五入。,例如, printf(“%04d,%010.2f,%010.3en”,125,12.3,123.5); 输出结果为: 0125,0000012.30,001.24e

9、+02,(2) 对以上三种情况,如果在“%”和 m.n 之间加一个 0, 则在规定字段宽度内左边多余的空位以 0 来填充,而不 是空格。,(4) %m.ns,2. 左对齐 如果在“%”之后加一个负号(即“-”),则在规定的宽度 内输出内容向左对齐,右面补空格或“0”。,例如, printf(“%3s,%15s,%10.5s,%.4sn”,”China”,”Beijing”, ”Beijing”,”China”);,其中:m 的含义与前面相同;n 规定截取输出字符串左面的字符 个数,字符串长度小于 n 时,按实际长度输出(n不起作用)。,输出结果为 China, Beijing, Beiji,C

10、hin,例如, printf(“%-3d,%-6d,%-6.5dn”,1234,1234,1234); printf(“%-10f,%-10.2f,%-.2fn”,123.456,123.456,123.4); printf(“%-3s,%-15s,%-10.5s,%-.4sn”, ”China”,”Beijing”, ”Beijing”,”China”);,输出结果为 1234,1234 , 01234 123.456000,23.46 ,123.40 China, Beijing , Beiji ,Chin,3. 类型修饰,(2) 在类型说明符 f、e、g 前面可以加字母 l,表示输出 d

11、ouble 型数据。,(1) 在类型说明符 d、u、o、x、i 前面可以加字母“l”或“h”,分别表示输出 long 或 short 型的数据。,例如, printf(“%d,%ldn”,7000,70000l,);,例如, printf(“%15.8lf,%16.9len”,12.34567889,12.34567889);,输出结果为 12.34567889, 1.234567889e+01,关于格式输出的几点说明:,-1和65535,例如, printf(“%d,%u,%o,%xn”,-1,-1,-1,-1); printf(“%d,%u,%o,%xn”,65534u,65534u,65

12、534u,65534u);,(1)对于任何一种形式的整数都可以用 d、i、o、u、x(或 “X”)格式输出,其中 d、 i 输出带符号十进制形式,而 u、o、x格式输出无符号整数。,输出结果为 -1,65535,177777,ffff -2,65534,177776,fffe,-2和65534,假设一个基本整型数据在内存占2B,(2)如果 printf( ) 函数中有多个表达式时,不同系统求值顺序不同。Turbo C 系统的求值顺序是自右至左的。而Visual C+6.0在从右到左进行时,还按运算符不同分批运算。 例如, printf(“%d,%d,%dn”,2+3,3*4,6/2);,voi

13、d main() int i=8; printf(%dn,+i); printf(%dn,-i); printf(%dn,i-); printf(%dn,i+); printf(%dn,-i-); ,例3-1 printf函数输出表列中的求值顺序,运行输出结果: 9 8 8 7 -8,void main() int i=8; printf(%dn%dn%dn%dn%dn,+i,-i,i-,i+,-i-); ,Turbo C中的结果: 7 6 8 7 -8,Visual C+6.0中的结果 8 7 8 8 -8,因为不同的系统对这种问题的处理方式采用不同的规则。所以,应该尽可能在printf语句

14、内输出变量的值,不建议输出表达式的值。,例3-2:使用printf函数输出如下信息: * 好好学习,天天向上 *,#include void main() printf(“*n”); printf( 好好学习,天天向上n); printf(*n); ,输出结果: * 好好学习,天天向上 *,例3-3:使用printf函数输出如下信息: 姓名 外语 数学 王丽 60 70,程序: #include void main() printf(姓名t外语t数学n); printf(“王丽t60t70n”); ,二字符输出函数putchar() 一般调用形式为: putchar(字符参数) 其功能是在显示

15、器上输出单个字符。 例如:设char x=B;int i=66; putchar(A); 输出大写字母A putchar(x); 输出字符变量x的值字母B putchar(101);输出字符A putchar(n);换行 putchar(65);输出大写字母A putchar(i); 输出变量i的值为ASCII码的字母B,字符型常量、变量 或整型常量、变量,注意:使用本函数前必须要用文件包含命令: #include,3.1.3数据输入函数scanf()和getchar,一 scanf函数(格式输入函数),一般调用形式,scanf(“输入格式控制串”,输入变量地址清单);,格式转换说明符 其他字

16、符,例如, int k ; float x; char ch; scanf(“%d,%f,%c”,格式转换说明符功能 %c 输入一个字符 %d 输入十进制整数 %f 输入浮点数,不能指定小数位数 %e 输入浮点数,不能指定小数位数 %s输入字符串,遇空格、制表符或回车符结束 %u输入十进制无符号整数 %o输入八进制无符号整数 %x输入十六进制无符号整数,关于 scanf( ) 函数使用的几点说明:,1 输入数据的分隔符:空格、制表符或回车键,例如, scanf(“%d%d%d”,输入形式可以是: 3 4 5 3 4 5 3 4 5,2 输入数据类型 1) 输入长整型数据时,可以用 %ld、%l

17、o、%lx 或%lu, 而且用整型格式控制整型变量输入时,从键盘输入的必须是整 数。 例如, scanf(“%d%d”, 如果输入 12 .56 23 结果 a=12,而变量 b 没有得到值。,2)当用%f 或%e 格式控制float和double型变量的输入时,输入的数据可以是小数形式、指数形式或整数。不能指定小数位数。,3)对于用%c 格式输入 char 型数据时,不需加单引号。如 果连续输入多个字符时,不需要使用分隔符。 例如, scanf(“%c%c%c”, 如输入 ABC 则有 c1=A,c2=B,c3=C 而如输入 A B C 则有 c1=A,c2= ,c3=B,4. 限制输入数据

18、的宽度(“m”),例如, scanf(“%5d%4d%4d”, 如果输入 1234567890 good morning 则各变量的值:a=12345,b=6789,c=0 字符型数组 str 得到的值是“good”,二getchar()函数 一般形式为: getchar() 功能:是从键盘上输入一个字符。 通常把输入的字符赋予一个字符变量,构成赋值语句,如: #include void main() char c; printf(input a charactern); c=getchar(); putchar(c); ,注意:使用本函数前必须要用文件包含命令: #include,3.1.4

19、顺序结构程序举例,例3-1:编写程序,要求输入以华氏度表示的温度值,输出以摄氏度表示的温度值。 【提示】表示温度的单位有两种:摄氏度和华氏度。由华氏度转换为摄氏度的转换公式为: C=5/9(F-32) 其中C代表摄氏度,F代表华氏度。,测试(运行) 输入华氏温度: 75.5 摄氏温度为:24.2C,程序如下:,#include void main() float f,c; printf(输入华氏温度:n); scanf(%f, ,3.1.5 常见错误(自修),3.2.1关系运算,1. 关系运算符,3.2 选择结构,2. 关系表达式 用关系运算符将两个表达式连接起来所构成的表达式。 一般形式为:

20、 关系表达式的值: “真”和“假”两种,分别用“1”和“0” 表示。,例如,设有定义:int a=3,b=4,c=5,d=6,i=-8,j=1,k=2,x=0; 计算下列各表达式的值 。,a+bc-d x3/2 a+1(bc) a!=(c=d) abc,1,0,0,1,1,1,0,3.2.2逻辑运算,1. 逻辑运算符 语言中提供了三种逻辑运算符 。,2逻辑表达式 用逻辑运算符将任意C表达式连接起来构成的表达式。 一般形式为: ,3逻辑运算的值 在C语言中分别用“1”和“0”来表示 “真”和“假” 。参加逻辑 运算的表达式以“非0”和“0”代表“真”和“假” 。,int a=5; float b

21、=3.5; !a ( ) !(a 0) ( ) (a 0) ( ),例如,0,1,1,0,0,0,1,1,0,0,0,1,1 if-else语句 一般格式: if(表达式) 语句1; else 语句2;,功能:如果表达式的值为真,则执行语句1, 否则执行语句2 。,语言的if语句有两种基本形式。,例 输入两个整数,求最大数。,#include void main() /* 主函数 */ int a,b; int max; printf(n 请输入两个数: ); scanf(%d%d, ,请输入两个数:8 9 max=9,3.2.3 if语句和条件运算符,省略else分支的if语句,一般形式:

22、if(表达式) 语句1 或 if(表达式) 语句1,功能:如果表达式的值为真, 则执行其后的“语句1”, 否则不执行“语句1”。,例 输入两个整数,求最大数。,#include void main() /* 主函数 */ int a,b; int max; printf(n 请输入两个数: ); scanf(%d%d, ,请输入两个数:8 9 max=9,#include void main() int a,b,t; scanf(“%d,%d ”, ,例3-5:输入两个整数,按从小到大顺序输出。,2 if-else-if形式(当有多个分支选择时采用) 一般形式为:,if(表达式1) 语句1 e

23、lse if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式n) 语句n else 语句n+1,执行流程如下图所示:,功能:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n+1。然后继续执行后续程序。,例 从键盘输入任意字符,根据其ASCII码来判别属于哪类字符。,#includestdio.h void main() char c; printf(input a character: ); c=getchar(); if(c=0 ,例3-6.输入某学生的成绩,经处理后给出成

24、绩的等级。等级划分如下: 输入一个分数score 当score = 90 输出 A 当80=score 90 输出 B 当70=score 80 输出 C 当60=score 70 输出 D 当 score60 输出 E,#include /* li3-6.c */ main( ) float score; scanf(“%f”, ,程序如下:,3 选择结构的嵌套。,if ( 表达式1) if ( 表达式2) 语句1 else 语句2 else if ( 表达式3) 语句3 else 语句4,2条件运算符和条件表达式 条件运算符 ? : 它是一个三目运算符。 条件表达式形式为: 表达式1?表达

25、式2:表达式3 功能:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。 优先级:仅高于逗号和赋值运算。 结合性:右结合的。,例如: max=ab?a:b 相当于 max=(ab?a:b) ab?a:cd?c:d 相当于 ab?a:(cd?c:d),if(ab) max=a; else max=b;,max=(ab)?a:b;,等价于,如:if(a=b,例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”, ,Compile Error!,3在使用if语句中应注意的问题,语句可以是复合语句

26、,if后面的表达式类型任意,if(x) if(x!=0) if(!x) if(x=0),缺省 时,else总是和它上面离它最近的未配对的if配对,if else 配对原则:,实现if else 正确配对方法,例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,实现if else 正确配对方法:加 ,3.2.4 switch语句,一般形式为: switch(表达式E) case E1: 语句组1; break; ca

27、se E2: 语句组2; break; case En: 语句组n; break; default: 语句组n+1; ,E1En常量表达式,注意: E1,E2,En是常量表达式,且值必须互不相同。 语句标号作用, case后可包含多个可执行语句,且不必加 ,必须用break跳出。 default可以缺省,在这种情况下,如果没有成功的匹配,则程序什么都不执行,直接退出switch。 break语句也可以缺省,程序流程如图3-14所示。 多个case可共用一组执行语句,如: case A: case B: case C: printf(“score60n”); break; .,缺省全部break

28、语句后, switch语句的执行流程:,例3-7 要求输入某学生的成绩,经处理后给出学生的等级,等级分类如下: 90分以上(包括90):A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下: E,分析: 设score为整型数,利用两个整数相除,结果自动取整的特性,score和 score /10 有如下对应关系: score score/10 90以上 10, 9 7089 7 , 8 6069 6 60以下 5,4,3,2,1,0 因此,可以用score /10的值来确定分支。,#include void main() int score;

29、 char ch; printf(ninput a students grade:); scanf(%d, ,3.2.5选择结构程序举例,例3-8 下面程序的功能是将一个50000以内的正整数逆序输出。例如输入1234,输出4321,程序如下:,#include main() int a,b,c; int n; printf(Please input an integer(0 and =10000)n=5; else if(a=1000) n=4; else if(a=100)n=3; else if(a=10)n=2; else n=1; b=0; switch(n) case 5: c=a

30、%10; a/=10; b=b*10+c; case 4: c=a%10; a/=10; b=b*10+c; case 3: c=a%10; a/=10; b=b*10+c; case 2: c=a%10; a/=10; b=b*10+c; case 1: c=a%10; a/=10; b=b*10+c; printf(Result: %d.n, b); ,3.2.6 常见错误(自修),1. 把关系运算符“=”误写为赋值运算符“=” 比较两个数的大小关系。 x=3;y=4; if(x=y) printf(x=yn); 运行状态:正常运行,但没有得到预期结果。 原因:if(x=y)中x=y是赋值

31、表达式,其x=4。x=y赋值表达式的值也是4,非零,永远为真。应把if(x=y)改为if(x=y),2.遗漏括号 语句: if x=y x=9; 运行状态:语法错误。 错误描述:syntax error : identifier x。 原因:if语句中,条件判断表达式必须加括号才正确。应改为:if (x=y) x=9;,3.遗漏大括号 程序段: if(ba) t=a;a=b;b=t;/*交换a,b两个变量的值*/ 运行状态:得出不正确的结果。 原因:if语句中,满足同一条件的多条执行语句必须用大括号括起来才能得出正确结果。应改为:if(ba) t=a;a=b;b=t;,3.3.1while语句

32、,while语句属于“当型”循环,一般适合解决非计数循环。 一般格式为 while (表达式) 语句,3.3 循环结构,例3-9:把一个非零整数的各位分解出来,并按逆序输 出。例如,若输入为6582,则输出2 8 5 6。,#include main() int n; int remainder; printf(请输入要分解的数:); scanf(%d, ,请输入要分解的数:6582 2 8 5 6,3.3.2do-while语句,do-while语句属于“直到型”循环。 一般形式是,do 语句 while(表达式);,注意,例3-9-2:把一个非零整数的各位分解出来,并按逆序输 出。例如,若

33、输入为6582,则输出2 8 5 6。,#include main() int n; int remainder; printf(请输入要分解的数:); scanf(%d, ,请输入要分解的数:6582 2 8 5 6,3.3.3for语句,for语句属于当型循环,它按步长修改循环控制变量 的值,故也称为“步长型”循环。,一般格式为:,for(表达式1;表达式2;表达式3) 循环体语句,1.计算表达式1,通常用于循环开始前设置变量初值。 2.计算表达式2,值为0则结束循环,否则执行第3步。 3.执行循环体语句。 4.计算表达式3,返回第2步。,执行流程,例: 求 1+2 +99,#includ

34、e main( ) int i,s=0; for(i=1;i=99;i+) s=s+i; printf(“s=%d”,s); ,分析:用变量i从1到99循环,把i的值累加到变量s中,最后输出s的值。,程序如下:,从上面的程序我们看到,for语句中: 表达式1:通常是给循环控制变量赋初值 表达式2:循环是否继续执行的判别表达式,这个表达式通常与某一个(或多个)变量的值有关。 表达式3:通常用于改变循环控制变量的值。,在某些情况下,for语句中的表达式1、2、3都可以省略,而改用其他的方式来实现这些功能。我们还用上面的例子说明for语句省略表达式的情形。,例如, for(i=1,j=10;ij;i

35、+,j-) printf(%d+%d=%dn,I,j,i+j);,1.省略表达式1:,#include main( ) int i=1,s=0; for(;i=99;i+) s=s+i; printf(“s=%d”,s); ,2.省略表达式3:,#include main( ) int i,s=0; for(i=1;i=99;) s=s+i;i+; printf(“s=%d”,s); ,3. 同时省略表达式1、3,#include main( ) int i=1,s=0; for(;i=99;) s=s+i;i+; printf(“s=%d”,s); ,表达式2也可以省略 但在循环体中要借助

36、break;语句来实现循 环的结束,我们将在 后面介绍。,注意:表达 式省略,分 号不省略。,for语句中的表达式可以是一切形式的表达式,逗号运算符参与的表达式也可以运用在for语句中,通常运用于表达式1和表达式3。 如上面的例子可以改写为:,#include main( ) int i,s; for(s=0,i=1;i=99;s=s+i,i+) ; printf(“s=%d”,s); ,注意此处 的分号。,此处,表达式1用逗号表达式的形式,给多个变量赋初值。表达式3用逗号表达式把循环体也写入其中。注意表达式3书写顺序不能交换。,例3-11:求sum=1+3+5+7+9+99。,#includ

37、e main( ) int i,s=0; for(i=1;i=99;i+=2) s=s+i; printf(“s=%d”,s); ,3.3.4 三种循环的比较,(1)从功能和使用角度讲,for循环功能最强,最方便灵活,因而使用较多。 (2)for循环与while循环是等价的,两者可以相互代替 (3) for循环和while循环是先判断循环条件,后执行循环体;而do-while循环则是先执行一次循环体,然后才判断循环条件因此,后者不管在什么情况下,都至少要执行一次循环体,3.3.5循环的嵌套,一个循环体内又包含另一个完整的循环结构,称循环嵌 套。三种循环语句都可以任意地互相嵌套。执行时把内层循

38、环看做是外层循环体中的一部分。,例如, for(;) for(;) ,注意: 在使用循环相互嵌套时,被嵌套的一定是一个完整的循 环结构,即两个循环结构不能相互交叉。,例3-12:用for循环输出如下图案: * * * *,#include main() int row,col,m,n; scanf(%d%d, ,9 * * * *,例:输出九九乘法表。,#include main() int i,j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf( %d*%d=%d,i,j,i*j); printf(n); ,1*1=1 2*1=2 2*2=4 3*1=3 3*

39、2=6 3*3=9 9*1=9 9*2=18 9*3=279*9=81,3.3.6 break和continue语句,1 break语句 功能:是退出当前循环或当前switch结构 一般格式为 break;,main( ) int s=0,i=1; for (; ;) if (i99) break; s = s+i; i+; printf(“s=%d”,s);,2continue语句 功能:只用在循环结构中,功能是结束本次循环。 一般格式 continue;,(a) while循环 (b) do while循环 (c) for循环,例:输出10以内不能被5整除的数。,#include main

40、() int i; for(i=1;i=10;i+) if(i % 5 =0) continue; printf(%dt,i); printf(n); ,12346789,例3-14:判断一个整数是否是素数。,分析: 素数就是只能被1和这个数本身整除,而不能被其他任何数整除的数。例如2,3,5,7是素数;6,8,10不是素数。判断一个数n是否素数,可以有三种方法: 用n依次除以2n-1 用n依次除以2n/2 用n依次除以2 若之间有一个数能整除n,即说明n不是素数。,3.3.7 循环结构举例,可以使用for循环结构实现。,#include /* 方法一:使用标志变量 */ main() int

41、 n,i; int flag=-1; printf(请输入一个整数:); scanf(%d, ,第一次运行: 113 113:是素数 第二次运行: 56 56:不是素数,i的终止值可以换成n/2 或 sqrt(n),#include /* 方法二:不用标志变量 */ #include main() int n,i,k; printf(请输入一个整数:); scanf(%d, ,第一次运行: 113 113:是素数 第二次运行: 56 56:不是素数,例3-15:输出100200之间的所有素数。,#include #include main() int n,i,k; for(n=100;ik)

42、printf(%4d,n); ,3.3.8 常见错误(自修),1遗漏大括号 求sum=1+2+3+4+5+6+7+8+9+10和的程序段: while(i=10) sum=sum+i; i+; printf(%d,sum); 运行状态:无限循环。 原因:循环体由两条语句构成,但没用花括号括起来。,2遗漏右括号 程序段: for(i=0;i9;i+) for(j=0;ji;j+) sum+=j; 运行状态:出错。 原因:最外层循环缺少右大括号。,3直接在for或while语句后加一个“;”号 下面程序段希望实现从08的累加: for(i=0;i9;i+); sum+=i; 运行状态:正常运行,但

43、没有得到预期结果。 原因:for(i=0;i9;i+);语句后多加一个“;”号。将一个分号放在for 语句的末尾,将产生一个什么都不做的空循环,从而改变了程序的结构,并没有实现累加操作。,4差1错误 下面程序段功能,使循环体运行次数为10次。 for(count=0;count=10;count+) 运行状态:运行循环体11次。 原因:循环变量的初值或终值不正确;为了保证运行10次可以这样修改,或者把count的初值改为1,或者是把count的终值改为count10,究竟是修改循环变量的初值还是修改循环变量终值,要根据具体情况而定。,3.3 循环结构,5语法错误 程序段: for(count=0;count=10,count+) sum+=count; 运行状态:语法错误 原因:for语句中用“,”号代替了“;”,6在累加、累乘、统计中变量没有赋初值 程序段: int count ,fact,int sum; for(count=1;count=10;count+) sum+=count; for(count=1;count=10;count+) fact*=count; 运行状态:正常运行,但没有得到预期结果。 原因:变量sum和fact作为累加、累乘必须赋初值,sum=0,fact=1。,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!