基于自然语言思想的递进C-C++教程1ppt.ppt

上传人:za****8 文档编号:15872736 上传时间:2020-09-11 格式:PPT 页数:139 大小:1.42MB
返回 下载 相关 举报
基于自然语言思想的递进C-C++教程1ppt.ppt_第1页
第1页 / 共139页
基于自然语言思想的递进C-C++教程1ppt.ppt_第2页
第2页 / 共139页
基于自然语言思想的递进C-C++教程1ppt.ppt_第3页
第3页 / 共139页
点击查看更多>>
资源描述
我们采用的教材,自然语言小结: 自然语言构成单位由小到大可以粗略地分为字、词、短语、句子、段落和篇章 名词、动词和连词等的有序连接得到短语或句子 多个句子的连接形成段落 多个段落形成文章,第1章 概述,1.1自然语言/函数内定义的四个整型变量 printf(“n请输入x1和x2的值:n”);/格式化输出函数,将双引号中的部分输出到屏幕。 / n表示换行回车,即光标移到下一行的行首 printf(nx1= ); /main函数实现部分结束标记。,scanf(%d, /main函数实现部分结束标记。,运行时输入10和20,程序运行结果如图1.8所示。,图1. 8 例1.1的运行结果,1.3.2 格式化输出输入函数printf()和scanf() 1. printf函数(格式输出函数) 功能:向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。 printf(“格式控制”,输出表列) printf(“%d %d”, a, b); printf(“a = %d b =%d”, a, b);,格式字符 d格式符十进制有符号整型数输出格式 %d,按实际长度输出。 %md,m为输出的宽度,如果实际宽度小于m,左补空格;否则按实际数输出。 %ld,按长整型输出。 %mld,m为长整型的输出宽度。,格式字符 o格式符八进制数输出格式 符号位成为八进制数的一部分;也有%lo、%mo形式。 x格式符十六进制数输出格式 和八进制一样,不会出现负十六进制数;也有%lx、%mx形式。 u格式符 以十进制形式输出无符号(unsigned)整型数据。,本质上,一个数在计算机内部的二进制形式是固定的,不同的格式输出,就是以不同的形式,或者说是以不同的视角来看这个数。,例1. 2计算机内部的数据表示于不同格式输出 #include void main() unsigned int a=65535; int b=-2; printf(“a=%d, %o, %x, %un”, a, a, a, a ); printf(“b=%d, %o, %x, %un”, b, b, b, b ); ,格式字符 c格式符输出一个字符。 s格式符输出一个字符串。 %s,printf(“%s”, “CHINA”); %ms,m小于实际宽度,按实际输出,否则,左补空格。 %-ms,左对齐。 %m.n,输出m列,但只取n个字符,右对齐。 %-m.n,输出m列,但只取n个字符,右对齐。,格式字符 f格式符以小数形式输出实数(包括单、双精度) %f,输出全部正数和6位小数。(注意:单精度有效位数是7,双精度是16) %m.nf,输出共占m列,n位小数,右对齐 %-m.nf,输出共占m列,n位小数,左对齐,格式字符 e格式符以指数形式输出实数 %e,默认输出精度是6位小数,用三位整数表示幂次,e后是“+”表示正幂次,e后是“-”表示负幂次,如printf(“%e”, 123.456);结果是1.234560e+002。 %m.ne和%-m.ne,m是数据占的总宽度,n是小数位数。 g格式符 系统自动选择f和e格式中所占列数较少的的形式输出。,scanf的一般格式 scanf(格式控制,地址表列)“格式控制”含义同与printf函数。 例1. 3 C语言的格式化输入 #include void main() int a, b, c; scanf(“%d %d %d”, ,格式说明 格式说明同与printf函数。 scanf函数执行中应注意的问题 scanf函数中“格式控制”后面应是变量地址,而不仅是变量。 如果“格式控制”字符串中还有其它字符,输入时应原样输入。 scanf(“a=%d, b=%d”, 定义x为基本整型变量。23,023,-023,-0 x23都是正确的不同进制基本整型常量。 (2)长整型 long int 或简写成long。如long int x; 或 lont x; 定义x为长整型变量。 如:23l,或23L或1234567899;023l,023L,0 x23l,0 x23L都是长整型常量,分别为8进制和16进制形式。,3在C和C+中,整型还可分为更精细的类型。 (3)短整型 short int 或简写成short。如short int x; 或short x; 定义x为短整型变量。如:23,023,023,0 x23都是短整型常量,因为数小,又没有明确说明为long。基本整型通常就是短整型。,3在C和C+中,整型还可分为更精细的类型。 (4)无符号整型 unsigned int 或简写成unsigned。如unsigned int x; 或 unsigned x; (5)无符号长整型 unsigned long int 或简写成unsigned long。如unsigned long x;,3在C和C+中,整型还可分为更精细的类型。 (6)无符号短整型 unsigned short int或简写成unsigned short。unsigned short x; 将整型量值区分成不同类型的目的是有效使用计算机的内存资源。,例2.1不同类型数据所占内存字节数 #include void main() printf(n%dn,sizeof( int); printf(%dn,sizeof(short int); printf(%dn,sizeof(long int); printf(%dn,sizeof(unsigned int); printf(%dn,sizeof(unsigned short int); printf(%dn,sizeof(unsigned long int); ,4各种类型整型变量的定义和使用 例2. 2整型变量的定义和使用 #include void main() int x1, x2, x3, x4; /定义4个基本整型变量 unsigned x5; /定义x5为无符号整型变量 x1 = 12; x2 = -214; x5 = 10; /给变量赋值 x3 = x1+ x5; x4 = x2 + x5; /两变量相加,将和赋值给另一个变量 printf (“x1+x5 = %d, x2 + x5 = %dn”, x3, x4); /输出变量求和表达式及结果 ,2.1.2浮点型和浮点量值(常量和变量) 1浮点型 浮点型的关键字是:float单精度浮点型;double双精度浮点型。 2浮点型变量 float x1; double x2;,3浮点型常量 浮点型常量有小数和指数两种形式。 如123.4567、0.123、.123、123.0、123.、0.0都是正确的小数形式浮点型常量;12.3e3(12.3乘以10的3次方)、12.3e-5(12.3乘以10的-5次方)都是正确的指数形式浮点型常量。,例2. 3浮点型数据的使用 #include void main() float x1=123e-5; float x2=123.45; float x3; x3=x1+x2; printf(x1= %fn,x1); printf(x2=%fn,x2); printf(x1+x2= %fn,x3); ,2.1.3 字符型和字符量值(常量和变量) 1字符型 char是字符型的关键字。 2.字符型变量 char c1, c2; 3字符型常量 (1)单引号引起的一个字符,如a、B,7等 (2)单引号引起的转意字符,如n、t等,它们输出的是不可见的格式字符。,例2. 4字符型数据的使用 #include void main() char c1,c2; c1=A; c2=n; printf(c1=%ct,c1); printf(c2=%ct,c2); ,5字符变量在内存中的存储形式及使用方法 计算机是通过存储字符的ASCII码来存储字符的。所以字符和整型数间可以通用,例2.5 字符型和整型通用性 #include void main() char c1; int c2; c1=97; c2=97-32; printf(“%c, %d, %c, %d”, c1, c1, c2, c2); ,2.1.4 字符串常量 字符串常量是一对双引号引起来的一个或多个字符。如 “How are you ?”, “CHINA”,”a”,”123”都是正确的字符串常量。要注意区分字符和字符串。 不能把字符串常量赋给字符变量。 char c; c=”a”; 是错误的。,例2. 6字符串结束标记的作用 #include void main() printf(n%s, abcdef); printf(n%sn, abc0def); ,2.2 C/C+语言中的动词运算符,短语表达式 和特殊动词性关键字 短语是动词作用在名词上的形式,表达式是运算符作用在量值(常量和变量)上的形式。 我们已经将量值理解为名词,现在我们将运算符理解为动词。 在C和C+中起着动词作用的运算符大致可以分为五类,相应地有五类表达式。,2.2.1赋值运算符和赋值表达式 赋值运算符“=” 赋值运算符是将右边的量值赋予左边的变量,本质上是从右向左的拷贝过程。 复合赋值运算符。 复合赋值运算符是赋值运算和其它算术运算的结合,是先做算术运算,然后赋值的简洁形式。,表2. 1复合赋值运算符的形式和作用,赋值表达式是通过各种形式的赋值运算符将一个量值赋值给另一个变量的形式,如 a=5 b+=a,例2. 7赋值运算 #include void main() int x1; int x2; int x3; scanf(“%d %d”, ,2.2.2算术运算符和算术表达式 算术运算符包括:+-*/%, 算术表达式是算术运算符作用在常量或变量上的形式,如x+y,x*y+z,x/y+100%z 说明: 两整数相除舍去小数。如5/3的结果是1。 正负数混除向零取整。如-5/3的结果是-1。 模运算()是取余数,只能在整数间进行。如5%3的结果是2。,算术运算符的优先级与结合性 当多个运算符(不仅仅限定算术运算符)做混合运算时,要根据运算符的优先级和结合性进行。 优先级是指在混合运算表达式中,先算哪种运算(优先级最高),后算哪种运算(优先级较低),再算哪种运算(优先级更低)。 结合性是指在混合运算表达式中,连续的几个优先级相同的运算,应该从左向右依次运算,还是应该从右向左依次运算。,图2. 7算术运算符和赋值运算的相对优先级,例2. 8算术运算 #include void main() int x1=1, x2=2; float y1=1.2, y2=2.3; double z1=3.4, z2=4.5; int x; float y; double s;,printf(nx1=%d, x2=%d, y1=%f, y2=%f, z1=%f, z2=%f ,x1, x2, y1, y2, z1, z2); x=x1+x2; printf(nx1+x2=%d,x); y=x1-x2*y1; printf(nx1-x2*y1=%f,y); s=x1%x2+(y1-y2)*z1/z2; printf(nx1%x2+(y1-y2)*z1/z2=%fn ,s); ,2.2.3逻辑运算符和逻辑表达式 逻辑值 真 假 逻辑运算符: printf(nx0 %dtx1 %dtx2 %d, x0, x1, x2); printf(n!x0 %dtx0 ,2.2.4关系运算符和关系表达式 关系运算也就是比较运算,关系运算符有、=、=、!=。关系运算的结果是逻辑值 关系表达式是关系运算符作用在量值上的形式。作为操作数的量值可以是任何量值,0代表真,非0代表假。而关系表达式的值只能是0或1,分别表示假或真。 关系运算符的优先级和结合性,图2. 11关系运算的优先级,例2. 10关系运算 #include void main() int x0=0, x1=1, x2=2, x3=3, x4=4; printf(nx0 %dtx1 %dtx2 %dtx3 %d x4 %dt , x0, x1, x2, x3, x4); printf(nx0 x1 %dt x0=x1 %dt x0 x1, x0=x1, x0 x3x2 %dt, x0!=x4=x1 %dn , x4x3x2, x0!=x4=x1); ,2.2.5其它运算符和表达式 1( )括号运算符 (1)( )运算符的一个作用是提升表达式中某部分运算的优先级,即括号括起的部分先算,这和数学是完全一直的,前面已经用到。,2.2.5其它运算符和表达式 1( )括号运算符 (2)( )运算符的另一个作用是强制类型转换。 强制类型转换格式:(已定义类型)其它类型变量。如: (double) x /无论x是什么类型, /(double)x的结果是double型。 理解为“将x强制转换为double型”是错误的,本质上是对x施加了向double类型转换的运算,运算的结果是double型,而x还是原来的类型,没有变化。,(2)( )运算符的另一个作用是强制类型转换 (int) (x + y )/无论(x+y)是什么类型,(int) (x + y )的结果是int型,说“将x+y的结果强制转换为int型”是错误的 (double) ( 5 % 2 )/5 % 2的结果是整型,(double) ( 5 % 2 )的结果是double型。,例2. 11强制类型转换运算 #include void main() int x=5; printf(n%d, x); (float)x; printf(n%f,x); printf(n%f, (float)x); printf(n%dn, x); ,2. 自增+、自减-运算符及表达式 自增自减运算是单目运算,只能作用在简单变量上,其本质含义是将变量在原来量值基础上加1或减1,然后再赋值给该变量。自增自减运算还有前后之分。 如:有变量x和变量y + x,-y x+,y- +(x+y),(x-y)- /错误的自增自减运算,不能作用在表达式上,无法给表达式赋值,2. 自增+、自减-运算符及表达式 (2) 前自增自减运算的“前”,是指在计算它所在表达式的值之前,做自增自减运算。后自增自减运算的“后”, 如x的值是2,y=3+x-; y的值是3+2(x的值)的和5,然后计算x的后自减,x的值变为1。,例2. 12自增自减运算 #include void main() int x; int y; scanf(“%d”, ,3. 逗号运算符和逗号表达式 (1)逗号在C/C+语言中通常起着分隔符的作用,不体现出运算的含义,如int a, b; 逗号分隔开的a和b被声明为整型变量。逗号在这里只是分隔并列成分的作用。 (2)用逗号分开的多个表达式的整体,叫做逗号表达式,如x1+x2, x3*x4-x1x2。 逗号表达式的一般形式是: 表达式1,表达式2,表达式3,表达式n; 其求解顺序是依次求解表达式1-n的值,整个表达式的值是表达式n的值。,例2. 13逗号运算 #include void main() int x1, x2, x3, x4; int y, z; scanf(“%d %d %d %d”, ,4方括号运算符,取地址运算符 float x1, x2; scanf(“%d %d %d”, /输出3.3 2.52,结果是浮点数 ,(2)结果都是逻辑值,即结果只能是0或1 例2. 15任何类型的关系和逻辑运算 #include void main() int a, b, c; float x1, x2; scanf(“%d %d %d”, / 输出0 1 ,(3)不同类型量值的算术混合运算,结果与参加运算的量值中,精度高的那种相同,这与物理学中的误差和有效数字计算是相反的。,例2. 16不同类型量值混合算术 #include void main() int a=1, c, d; long b=-2; unsigned u=10; float x1=1.2; double x2=2.3; c = a+ u; d = b + u; printf(na= %d b= %d u= %u x1= %f x2= %f, a, b, u ,x1, x2); printf (na+u = %d b + u = %ld, c, d); printf(nx1+a= %f x1+x2=%f x1+x2*b=%fn, x1+a, x1+x2, x1+x2*b); ,(4)当算术运算和关系、逻辑混合运算时,由于关系和逻辑运算的结果是0或1的整型,满足(3)的运算规则。 例2. 17算术运算和关系、逻辑混合运算 #include void main() int a=5, b=2, c=3; float x1=1.2, x2=2.1; printf(%f %f n, (ab)+x1, (a!=c)-x2); /输出2.2 -1.1 printf(%d %dn, -ab/ 输出0 1 ,(5)将一个量值赋值给另一个不同类型变量时,量值类型转化: 实型数据赋给整型变量,舍去小数。 整型变量赋给单、双精度变量,小数部分补零。 字符型数据赋给整型数据(如字符一个字节;整型数两个字节),把对应的ASCII码置于低8位。 short int 赋给long int,高端要根据正负补0或1。反之,只截取低8位。 将非无符号(unsigned)型数据负给unsigned型变量,连原有的符号也被当成数值一起传送。,2.3 C/C+语言中的连词及句子分支、循环和顺序结构,C/C+语言中的基本连词包括if-else,switch-case,for,while,do-while。以及相当于连词的运算符?-:。 连词使C/C+语言可以实现语义的转折和循环,从结构化程序设计的角度看,实现了分支结构和循环结构。,2.3.1顺序结构 顺序结构是最基本的程序结构,它是分支和循环结构的基础。顺序结构是按程序语句的物理位置先后来执行程序的,前面的例子程序都是顺序结构程序。 2.3.2 if-else分支结构 if-else相当于“如果那么”,通常说成是分支语句,或选择语句。 if (量值) if的各种语句; else else的各种语句; ,例2. 18 下面例子用if-else实现输出两个数中的大数。 #include void main() int x1, x2; scanf(“%d %d”, ,2. if-else的第一种变化形式: if (0号量值) 0号if的各种语句; else if (1号量值) 1号if的各种语句; . else if(i号量值) i号if的各种语句; else else的各种语句; ,例2. 19 更改x的值,使x在0到100间取值。 #include void main() int x; scanf(“%d”, ,3. if-else的极限形式:if 例2. 20只有if的选择结构 #include void main() int x; scanf(“%d”, ,2.3.3 switch-case分支结构 其一般形式是: switch (量值) case常量1: 常量1对应的各语句; case常量2: 常量2对应的各语句; case常量n: 常量n对应的各语句; default : 和上面n个常量都不对应的各语句; ,例2. 21 #include void main ( ) int id; printf(n请输入下面功能对应的标号:); printf(“n1 新建文件; 2 打开文件; 3 4 保存文件。n); scanf(%d, ,case 2: printf(nn您调用了功能 2 打开文件); printf(nn下面将转向打开文件功能模块n); break; case 3: case 4: printf(nn您调用了功能 3或4 保存文件); printf(nn下面将转向保存文件功能模块n); break; default: printf(nn转向默认处理模块n); ,说明: (1)当switch后面的表达式与某一case后面的常量表达式相等时,就从此case后面的语句开始执行,包括后面的其它case语句。若找不到匹配,就执行default语句。 (2)每一个case后面的常量表达式的值必须互不相同。 (3)多个case可以共用一组执行语句。 (4)当case后面的常量和switch后面的量值相等时,程序以该case为入口开始执行,执行完与该case对应的语句后,会继续执行后面各case的语句及default的语句。,2.3.4 ?-:分支结构 ?-:语句是if-else语句的简洁形式,具体语法形式为: 量值0 ? 量值1 :量值2; 注意:三个量值可以是常量、变量或任何合法形式的C/C+表达式。当“量值0”为真时,整个表达式的值是“量值1”;当“量值0”为假时,整个表达式的值是“量值2”。,例2. 22 请分别输入3 5和5 3,两次运行下面程序。 #include void main() int x,y,z; printf(n请输入两个整数,空格分隔:); scanf(%d %d, ,2.3.6 for循环结构 for循环的语法格式如下: for (语句 0;语句 1;语句 2) 语句 3;/语句3可以是多语句的程序块 ,for语句的执行过程是: 执行“语句0”; 执行“语句1”,若其值为真(非0),则执行for内部的“语句3”,然后执行“语句2”。 重复(2)的过程。 执行(2)中,若“语句1”的结果为假(0),for循环结束。从右花括号后开始执行。,例2. 23 for循环示例:计算120奇数的和 #include void main() int i; int sum=0;/一定要先赋初值0,否则sum中有一随机数 printf(n计算120内奇数的和:n); for (i=1;i20;i+=2) sum+=i; printf(ni= %d时, i); printf(nsum= %d, sum); /严格地说,此处应该有分号 printf(n最后和为sum= %dn, sum); ,2.3.6 while循环结构 while循环的语句格式如下: while (量值) 语句; /此处可以是多个语句的程序模块 while循环的执行过程 当“量值”非0,即为真,执行“语句”; 再判断量值是否为真,若为真,执行“语句”,如此循环; 若量值为0,即为假,循环结束,从右花括号后开始执行其它语句。,例2. 24 while循环示例:计算120奇数和 #include void main() int i=1; int sum=0; printf(n计算120内奇数的和:n); while (i=20) sum+=i; printf(ni= %d时, i); printf(nsum= %d, sum); i+=2; /严格地说,此处应该有分号 printf(n最后和为sum= %dn, sum); ,2.3.7 do-while循环结构 do-while循环的语句格式为: do 语句;/此处可以是多个语句的语句块 while (量值); do-while循环语句的执行过程是: 首先执行“语句”,然后判断“量值”是否为真,若为真(非0), 再执行“语句”,如此循环;若量值为假(0),循环结束,执行后面的语句。,例2. 25 do-while循环语句示例:计算120内奇数和的程序 #include void main() int i=1; int sum=0; printf(n计算120内奇数的和:n); do sum+=i; printf(ni= %d时, i); printf(nsum= %d, sum); i+=2; while (i=20); printf(n最后和为sum= %dn, sum); ,2.3.8 goto-label-if循环结构 goto-label是无条件转向语句,可以不受任何程序结构限制地转向到程序的任何部分。 下面的示例是一个死循环程序,要结束时,请先按Ctrl键不松,然后按下Break(Pause)键,例2. 26 goto语句的使用 #include void main() int i=1; int sum=0; printf(n这时一个goto-label的示例程序:n);,label1: sum+=i; printf(ni= %d时, i); printf(nsum= %d, sum); printf(n按任意键继续); getchar(); /此处是等待输入一个字符,实现了程序的等待,按任意键, /得到字符,程序继续执行,输入的字符对程序没有任何实质影响 goto label2; i=10; sum=100; printf(ni= %d时, i); printf(nsum= %d, sum);,label2: i=20; sum=200; printf(ni= %d时, i); printf(nsum= %d, sum); printf(n按任意键继续); getchar(); goto label1; ,goto-label也可以和if语句一同构成循环句式 由于goto可以直接转向到设定在程序任意位置的标签,所以goto-label-if不是结构化的循环语句形式,不提倡使用。 goto-label必须和if配合使用,否则是永不停止的死循环。,例2. 27 goto-label-if循环示例:计算120内奇数和的程序 #include void main() int i=1; int sum=0; printf(n计算120内奇数的和:n); loop_begin: if(i=20) sum+=i; printf(ni= %d时, i); printf(nsum= %d, sum); i+=2; goto loop_begin; printf(n最后和为sum= %dn, sum); ,3.几种循环的比较: (1)goto-label-if循环不是结构化的语句,不提倡使用,除非使用它会使程序效率大幅度提供。 (2)while和do-while本质上没有区别。while循环先判断,后执行;do-while先执行,后判断。 (3)for循环通常用于循环次数已知的问题中,while和do-while往往用于循环终止条件已知,但循环次数未知的情况下。,2.3.9 break终止循环或开关 break语句用来跳出它所在的那一层switch开关结构或循环结构。,例2. 28 计算1-20整数的平方,但由于if和break的使用,当平方值是5的倍数时,就停止,不再继续计算。 #include void main() int i=1; long power=0; for (i=1; i=20; i+) power=i*i; if (!(power%5) break; /continue; printf(n%ldt, power); ,2.3.10 continue continue语句的作用是不执行continue下面的其它循环体语句,而提前结束本次循环,但继续执行下一次循环判断。 continue语句和break语句的区别:continue只结束本次循环,而不是终止整个循环;break是结束本层的整个循环,不再进行条件判断。,2.4 C/C+语言中的句子小结,语句是C/C+语言的最基本执行单位,是用分号(;)结束的部分,通常是用分号结束的表达式。如: x=1; y=x1+x1; y=x1x2; y=x1x2?x1:x2; printf(“%d %d”, x1, x2); x; 8; ;,若干个语句的顺序安排,程序从前向后执行,就是结构化程序设计的第一种结构:顺序结构。 最简单情况下,就一个语句,也是顺序结构,这个语句甚至可能是就一个分号(;)的空语句。 由if-else和switch-case构成的程序结构是结构化程序设计的第二种结构:分支结构,或者说选择结构。,由for、while和do-while构成的循环语句,是结构化程序设计的第三种结构:循环结构。循环中的语句可能是一条语句,也可能是多条语句的顺序结构。 分支结构和循环结构内部的语句,除了可以是顺序结构外,还可能是另一个或多个分支结构和循环结构的语句。这就是复合结构的语句语句的嵌套,2.5用C/C+语言编写程序段落,段落是用顺序的、分支的或循环的程序结构的一种或几种组合编写的具有一定意义,实现一定功能的一段程序。 这段程序可长可短,可以长到几千行,也可以短到就一行语句。 开发软件,就是根据功能要求编写一段或几段程序。,2.6 用C/C+语言编写复杂段落语句嵌套,2.6.1复杂段落语句嵌套的含义 复杂一点的程序段是前面若干个顺序执行的语句,然后是一个分支结构或循环结构的语句,然后可能再有几条顺序结构的语句,例2. 29 计算120内奇数和的程序。 #include void main() int i=1; int sum=0; printf(n计算120内奇数的和:n); do sum+=i; printf(ni= %d时, i); printf(nsum= %d, sum); i+=2; while (i=20); printf(n最后和为sum= %dn, sum); ,do sum+=i; printf(ni= %d时, i); printf(nsum= %d, sum); i+=2; while (i=20);,改变一下视角,将语句重新展开为循环结构的语句。这时整个程序段就是顺序结构的语句内嵌套了一个循环语句的复杂段落,是语句的嵌套; 再看do-while语句内部,里面有多条顺序结构的语句,do-while循环语句内嵌套了顺序结构的语句。再纵观整个程序段,是顺序结构内嵌套循环结构,而循环结构内又嵌套了顺序结构,是复杂的程序段。,由于是循环和顺序的相互嵌套,我们没有感到真正的复杂。 推而广之,如果程序是顺序结构内嵌套循环结构,而循环结构内又嵌套分支结构和另一个其它形式的循环结构,分支结构内又嵌套了另一种形式的循环和分支结构等等等等。理论上可以无限地嵌套下去。这就是狭义的复杂段落,语句的嵌套。,2.6.2嵌套语句的示例 1.循环结构内嵌分支结构:判断整数num是否为素数。 素数的定义是:只能被1和它本身整除的数。最简单的判断算法是让num被2到num1的整数除,如果没有一个整数能除尽,则num是素数。,例2. 30 从键盘输入一个正整数,判断该数是否为素数1 #include #include void main() int num, i, k; scanf(%d, ,2.外层循环里面嵌套内层循环,内层循环再嵌套分支语句:区分某一指定区间a, b内所有数,哪些是素数,哪些不是素数。 例2. 31区分某一指定区间a, b内所有数,哪些是素数,哪些不是素数 #include #include void main() int lower, uper, i, j, k; printf(n请输入区间的下限和上限两个整数,用空格分开n); scanf(%d %d, ,for(i=lower; i=k+1) printf(%d is a prime number n, i); else printf(%d is not a prime number n,i); ,3.将例2.31中for-for-if-else嵌套,改为while-for-if-else嵌套。 例2. 32while-for-if-else嵌套 #include #include void main() int lower, uper, i, j, k; printf(n请输入区间的下限和上限两个整数,用空格分开n); scanf(%d %d, ,while (i=k+1) printf(%d is a prime number n, i); else printf(%d is not a prime number n,i); i+; ,4.将上例的while-for-if-else嵌套,改为while-do-while-if-else嵌套。 例2. 33 while-do-while-if-else嵌套 #include #include void main() int lower, uper, i, j, k; printf(n请输入区间的下限和上限两个整数,用空格分开n); scanf(%d %d, ,while (i=k+1) printf(%d is a prime number n, i); else printf(%d is not a prime number n,i); i+; ,2.3.6复杂段落语句嵌套的小结 顺序语句;分支语句(包括if-else及其变化形式,switch-case语句);循环语句(包括for、while和do-while)是可以任意嵌套的; 嵌套的原则是,外层包裹内层,内外层在逻辑上不可能出现交叉,这正是结构化程序设计的基本思想。 当循环嵌套时,外层循环执行一步,内层循环执行一圈。,例2. 34 语句嵌套的综合示例1:编程实现如下求和 #include void main() int i, j, k, n; float s=0.0; int sign=1; scanf(%d, /输出最后的和 ,例2. 35语句嵌套的综合示例2:编程实现如下求和 分析:该多项式求和比较复杂,可以从不同角度理解其规律性,当然就可以写出不同的程序来。我们是这样理解的: (1)首先将各项都理解为加法,这是比上例还简单的求和。 (2)负项的规律是第一负项“2”加3就是第二负项“5”,第二负项“5”加4得到第三负项“9”,如此递推,每次都是当前位置比上一次多加1。按此规律编写出如下程序。,#include void main() int i, j, k, n; float s=0.0; int sign=1; int step=2; int negative=0; scanf(%d, ,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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