首页 第3章 结构化程序设计

第3章 结构化程序设计

举报
开通vip

第3章 结构化程序设计nullnull本章导读 本章从实例分析着手,使读者了解并掌握C语言三种基本流程控制结构:顺序、选择、循环结构 ,加深对C语言程序开发设计过程的感性认识,强化培养编程思路,为进一步进行C语言程序设计打下基础。 返回本书目录第3章 结构化程序设计本章主要知识点 (1) 顺序结构及程序设计。 (2)选择结构及程序设计。     (3)循环结构及程序设计。 (4)结构化程序设计方法、编程思路与综合实训null第3章 结构化程序设计返回本章导读3.2 选择结构程序设...

第3章   结构化程序设计
nullnull本章导读 本章从实例分析着手,使读者了解并掌握C语言三种基本流程控制结构:顺序、选择、循环结构 ,加深对C语言程序开发设计过程的感性认识,强化培养编程思路,为进一步进行C语言程序设计打下基础。 返回本书目录第3章 结构化程序设计本章主要知识点 (1) 顺序结构及程序设计。 (2)选择结构及程序设计。     (3)循环结构及程序设计。 (4)结构化程序设计方法、编程思路与综合实训null第3章 结构化程序设计返回本章导读3.2 选择结构程序设计3.3 循环结构程序设计3.4 结构化程序设计方法与综合实训3.1 顺序结构程序设计《 C语言程序设计》 商洛学院计算机科学系null3.1 顺序结构程序设计返回本章目录3.1.2 顺序结构语句3.1.3 程序实训3.1.1 顺序结构的C程序实例《 C语言程序设计》 商洛学院计算机科学系null3.1.1 C程序实例返回本节目录C程序实例 【例3.1】编程实现:输入一个长方形的二边长,求长方形的面积并输出。 /*程序名为l3_1.cpp。*/ #include "stdio.h" main() { float a,b,s; scanf("%f%f",&a,&b); s=a*b; printf("The area of rectangle is %5.2f .\n",s); }《 C语言程序设计》 商洛学院计算机科学系  【例3.1】编程返回本节目录程序运行情况如下: 输入: 3.0 4.0 < CR > 输出: The area of rectangle is 12.00 . 这个程序属于顺序结构,程序是按照书写的顺序自上而下一步步执行,程序中的每一条语句都被执行一次,且仅能被执行一次。《 C语言程序设计》 商洛学院计算机科学系null3.1.2 顺序结构语句1 C语言的顺序结构语句可以分为四大类: 1. 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式语句  表达式的后面加一个分号就构成了一个语句,例如:sum=a+b; 。事实上,C语言中有使用价值的表达式语句主要有3种: (1)赋值语句。 例如: sum=a+b; (2)自动增1、减1运算符构成的表达式语句。例如: i++; (3)逗号表达式语句。例: x=1,y=2; 2.空语句 语句仅有一个分号“;”,它表示什么也不做。一般和后面章节所讲循环语句结合使用起到延时作用。 3. 复合语句 由"{"和"}"把一些变量定义和执行语句组合在一起,称之为复合语句,又称语句块。复合语句的语句形式如下: {语句1;语句2;…;语句n;}返回本节目录《 C语言程序设计》 商洛学院计算机科学系null3.1.2 顺序结构语句2返回本节目录例如:{int a=0,b=1,sum; sum=a+b; printf("%d",sum); } 【注意】与C语言中的其他语句不同,复合语句不以分号作为结束符,若复合语句的"}"后面出现分号,那不是该复合语句的组成成分,而是单独的一个空语句。在复合语句起始部分可以有变量定义,如:"int a=0,b=1,sum;",也可以没有。复合语句的"{}"内可能会有多个语句,但在语法上把它整体上视为一条语句看待。 4.函数调用语句 由一个函数调用加上一个分号组成一个语句,如: scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);《 C语言程序设计》 商洛学院计算机科学系null3.1.3 程序实训【例3.2】C程序实例 【例3.2】由键盘输入两个整数给变量a和b,然后输出a和b,在交换a和b中的值后,再输出a和b,验证两个变量中的数值是否正确地进行了交换。 /*程序名为l3_2.cpp。*/ #include "stdio.h" main() { int a,b,t; printf("Enter a and b:\n"); scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); t=a;a=b;b=t; printf("a=%d,b=%d\n",a,b); } 程序运行情况如下: Enter a and b: 123 456 < CR > a=123,b=456 a=456,b=123 返回本节目录《 C语言程序设计》 商洛学院计算机科学系null3.1.3 程序实训【例3.3】返回本节目录注意:在程序中交换两个变量a 和b的值,不可以简单地用: a=b;b=a;两条语句来实现。假设a 和b的值分别为23和78,赋值语句a=b;将使a的值变为78,接下来的b=a;使b的值变为78,这样,a和b的值最终都变为78。所以在本例中引入了中间变量t,用来临时存放a的值,这样才能完成变量a和b的正确交换。【例3. 3】输入一个double类型的数,使该数保留小数点后两位,对第三位小数进行四舍五入处理,然后输出此数,以便验证处理是否正确。 /*程序名为l3_3.cpp。*/ #include "stdio.h" main() { double x; printf("Input x:\n"); scanf("%lf",&x); 《 C语言程序设计》 商洛学院计算机科学系null3.1.3 程序实训【例3. 3】返回本节目录 printf("(1) x=%f\n",x); /*将x输出*/ x=x*100; x=x+0.5; x=(int)x; x=x/100; /*将x扩大100倍,加上0.5之后取整,再缩小100倍*/ printf("(2) x=%f\n",x); /*将四舍五入后的x输出*/ } 程序运行情况如下: Input x:3.14159< CR > 则输出的结果为: (1) x=3.141590 (2) x=3.140000《 C语言程序设计》 商洛学院计算机科学系null3.1.3 程序实训【例3.4】返回本节目录【例3.4】从键盘上输入一大写英文字母,要求改用相应的小写字母输出。 /*程序名为l3_4.cpp。*/ #include "stdio.h" main() { char c1,c2; scanf("%c",&c1); printf("The upper case is %c .\n",c1); c2=c1+'a'-'A'; printf("The lower case is %c .\n",c2); }程序运行时: 输入:B 输出: The upper case is B . The lower case is b .《 C语言程序设计》 商洛学院计算机科学系null3.2 选择结构程序设计3.2.1 选择结构的C程序实例3.2.2 if 语句3.2.3 switch 语句3.2.4 程序实训 返回本章目录《 C语言程序设计》 商洛学院计算机科学系null3.2.1 选择结构的 C程序实例 返回本节目录 【例3.5】请输入两个整数a,b,比较a+b和a×b哪个大,输出判断结果。 /*程序名为l3_5.cpp。*/ #include "stdio.h" main() { int a,b,s1,s2; printf("请输入两个整数a,b:"); scanf("%d,%d",&a,&b); s1=a+b; s2=a*b; /*求两个数的和、积*/ if(s1>s2) printf("(a+b)>(a*b) /n"); /*语句A*/ else printf(" (a+b)<=(a*b)\n"); /*语句B*/ }《 C语言程序设计》 商洛学院计算机科学系null3.2.1 选择结构的 C程序实例结果 运行结果为: 请输入两个整数a,b:2,3 (a+b)<=(a*b) 在这个程序中使用了if分支语句,它不像前面的程序那样,按照语句的书写顺序一步步执行下去,而是根据所给条件的真假,选择两者其中之一执行。该程序执行的过程是:比较两数的和与积,如果s1>s2,则执行语句A(跳过语句B不执行),否则,就跳过语句A执行语句B。可见if语句在程序中起到了改变语句执行顺序的作用。if语句就是我们在下一节中要介绍的条件分支语句。返回本节目录《 C语言程序设计》 商洛学院计算机科学系null3.2.2 if 语句1. if语句的一般形式返回本节目录2. if-else中的复合语句3. 非关系、非逻辑表达式构成的条件表达式4. if语句的嵌套《 C语言程序设计》 商洛学院计算机科学系null1. if语句的一般形式1 1.if语句的一般形式: if语句有两种形式: (1)不含else子句的if语句 语句形式如下: if(<表达式>) <语句1> 例如if(a) <语句体1> [else <语句体2>] 执行过程:首先计算<表达式>的值,如果该表达式的值为非零("真"),则执行<语句体1>,如果该表达式的值为零("假"),则跳过<语句体1>,直接执行<语句体2>,两者执行其一后再去执行if语句后的下一个语句。返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null1. if语句的一般形式实例【例3.6】求分段函数的值,如果x≥0, y=2x+1,否则, y=0 。 #include "stdio.h" main() /*程序名为l3_6.cpp。*/ { int x,y; /*变量y存放f(x)的值*/ printf("请输入x的值:"); scanf("%d",&x); if(x>=0) y=2*x+1; else y=0; printf("当x=%d时,f(x)=%d",x,y); }返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null1. if语句的一般形式实例运行结果: 请输入x的值:3 当x=3时,f(x)=7 因为输入x=3,那么x>=0为真,所以输出2*3+1=7。 C语言中有一种特有的条件运算符“?:”,我们在前面章节已作介绍,它在某种程序上可以起到逻辑判断的作用。本例中的if语句也可用条件运算符表达式实现如下: y=x>=0?2*x+1:0; 但有些判断不能用条件表达式完成,或者很繁琐、表达不清晰。返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null2. if-else中的复合语句2. if-else中的复合语句 如果两个分支中需要执行的语句不止一条,必须用“{}”括起来,作为一个复合语句使用。若只是一条语句,“{}”可以省略。 【注意】 (1)if后面的<表达式>一定要有括号; (2)if和else同属于一个if语句,else不能作为语句单独使用,它只是if语句的一部分,与if配对使用,因此程序中不可以没有if而只有else; (3)只能执行与if有关的语句或者执行与else有关的语句,而不可能同时执行两者; (4)如果<语句1>和<语句2>是非复合语句,那么该语句一定要以分号结束, (5)if语句的表达式可以是任意类型的C语言的合法的表达式,但计算结果必须为整型、字符型或浮点型之一。返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null3.非关系、非逻辑表达式构成的条件表达式13.非关系、非逻辑表达式构成的条件表达式 【例3.10】以"赋值表达式"为分支条件的实例。 /*程序名为l3_10.cpp。*/ #include"stdio.h" main() { int s; if(s=2) printf("hello"); else printf("error"); }if后面圆括号中的<表达式>表示分支条件<表达式>的类型不限于逻辑/关系表达式,可以是任意的C语言有效表达式(如赋值表达式,算术表达式等等),因此也可以是作为表达式特例的常量或变量。返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null3.非关系、非逻辑表达式构成的条件表达式2【例3.10】中的条件表达式是一个赋值表达式,并不是判断s是否等于2。相当于if(2)printf("hello");,这是合法的。由于该条件表达式的值是非零值,恒为真,故本程序的printf("error");无论如何都不会被执行。if语句最终执行哪一个分支,取决于条件表达式的计算结果。同一个条件的也可以用多种表达方式。 【例3.11】以"变量"为分支条件的实例。 /*程序名为l3_11.cpp。*/ #include "stdio.h" main() { int x,y; scanf("%d",&x); if(x) y=1; else y=-1; 返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null3.非关系、非逻辑表达式构成的条件表达式3printf("y=%d\n",y); } 现把程序中if(x)改成if(x!=0),此时虽然条件表达式写法不同,但是完成的功能是相同的。 下面两种表示方法经常使用: if(x)等价于if(x!=0) if(!x)等价于if(x==0)返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null4. if语句的嵌套1 在一个if语句中又包含另一个if语句,从而构成了if语句的嵌套使用。内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。例如: 【例3.12】输入a,b两个整数的值,比较大小并输出结果。 #include "stdio.h“ /*程序名为l3_12.cpp。*/ main() { int a,b; printf("请输入a,b:") ; scanf("%d%d",&a,&b); if(a>b) printf("a>b\n"); else if(ay) if(z>x) max=z; else if(y>x) max=y; printf(" max=%d",max); } 运行结果: max=4返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null4. if语句的嵌套实例2 【例3.14】编写程序,根据输入的学生成绩,给出相应的等级。90分以上的等级为A,60分以下的等级为E,其余每10分一个等级。程序如下: #include"stdio.h" main() /*程序名为l3_14.cpp。*/ { int g; printf("input g:"); scanf("%d",&g); printf("g=%d: ",g); if(g>=90) printf("A\n"); else if(g>=80) printf("B\n"); else if(g>=70) printf("C\n"); else if(g>=60) printf("D\n"); else printf("E\n"); }返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null4. if语句的嵌套实例3当执行以上程序时,首先输入、输出学生的成绩,然后进入if语句; if语句中的表达式将依次对学生成绩进行判断,若能使某 if 后的表达式值为1,则执行与其相应的子句,之后便退出整个if结构。 例如,若输入的成绩为78分,首先输出: g=78 : ,当从上至下逐一检测时,使g>=70这一表达式的值为1,因此在输出"g=78 :"之后再输出C,便退出整个if结构。 若输入的成绩为30分,首先输出相应成绩"g=30:",其次进入相应判断,最后再输出相应等级"E",便退出整个if结构。返回3.2.2目录《 C语言程序设计》 商洛学院计算机科学系null3.2.3 switch 语句1. switch语句的一般形式返回本节目录2. switch语句的执行过程3. switch语句的实例《 C语言程序设计》 商洛学院计算机科学系null1 . switch语句的一般形式1. switch语句的一般形式switch语句的一般形式是: switch(<表达式>) {case <常量表达式1>:<语句序列1> case <常量表达式2>:<语句序列2> …… case <常量表达式n>:<语句序列n> [default:<语句序列n+1>] } 【说明】: ①switch语句是关键字,其后面大括号里括起来的部分称为 switch语句体。要特别注意必须写这一对大括号。 ②switch后<表达式>的运算结果可以是整型、字符型或枚举型表达式等,<表达式>两边的括号不能省略。返回3.2.3目录《 C语言程序设计》 商洛学院计算机科学系null1 . switch语句的一般形式③case也是关键字,与其后面<常量表达式>合称为case语句标号。<常量表达式>的值在运行前必须是确定的,不能改变,因此不能是包含变量的表达式,而且数据类型必须与<表达式>一致。如: int x=3,y=7, z; switch(z) { case 1+2: /*是正确的*/ case x+y: /*是错误的*/ } ④case和常量之间要有空格,case后面的常量之后有":"。 ⑤default也是关键字,起标号的作用。代表所有case标号之外的那些标号。default可以出现在语句体中任何标号位置上。在switch语句体中也可以无default标号。 ⑥<语句序列1>、<语句序列2>等,可以是一条语句,也可以是若干语句。 ⑦必要时,case 语句标号后的语句可以不写。 返回3.2.3目录《 C语言程序设计》 商洛学院计算机科学系null2 . switch语句的执行过程2. switch语句的执行过程首先计算<表达式>的值,然后在switch语句体内寻找与该吻合的case标号,如果有与该值相等的标号,则执行从该标号后开始的各语句,包括在其后的所有case和default语句,直到switch语句体结束。如果没有与该值相等的标号,并且存在default标号,则从default标号后的语句开始执行,直到switch语句体结束。如果没有与该值相等的标号,并且不存在default标号,则跳过switch语句体,什么也不执行。 在switch语句中使用break语句 break语句也称间断语句。可以在各个case之后的语句最后加上break语句,每当执行到break语句时,立即跳出switch语句体。switch语句通常总是和break语句联合使用,使得switch语句真正起到多个分支的作用。返回3.2.3目录《 C语言程序设计》 商洛学院计算机科学系null3 . switch语句的实例3. switch语句的实例【例3.17】模拟自动饮料机。按屏幕所示功能,输入所选择的合法数字,输出可获得的相应饮料名称。程序如下: /*程序名为l3_17.cpp。*/ #include "stdio.h" main() { int button; printf("==========自动饮料机 ==========\n"); printf("1.可口可乐\n"); printf("2.雪碧\n"); printf("3.芬达\n"); printf("4.百事可乐\n"); printf("5.非常可乐\n"); printf("请按1--5键选择饮料:\n"); scanf("%d",&button); 返回3.2.3目录《 C语言程序设计》 商洛学院计算机科学系null3 . switch语句的实例switch(button) { case 1:printf("\n你获得一听可口可乐\n");break; case 2:printf("\n你获得一听雪碧\n");break; case 3:printf("\n你获得一听芬达\n");break; case 4:printf("\n你获得一听百事可乐\n");break; case 5:printf("\n你获得一听非常可乐\n");break; default:printf("\n非法操作!\n");break; } } 运行结果: =============自动饮料机============== 1.可口可乐 2.雪碧 3.芬达 4.百事可乐 5.非常可乐 请按1-5按钮选择饮料:3 你获得一听芬达返回3.2.3目录《 C语言程序设计》 商洛学院计算机科学系null3.3 循环结构程序设计返回本章目录3.3.2 while语句3.3.3 do-while语句3.3.1 循环结构的C程序实例3.3.4 for 语句3.3.5 循环的嵌套3.3.6 break语句和continue语句3.3.7 程序实训《 C语言程序设计》 商洛学院计算机科学系null3.3.1 循环结构的C程序实例【例3.19】有一张厚度为0.1毫米的纸,假设它足够大,重复将其对折,问对折多少次之后,其厚度可以抵达(再对折一次就超过)珠穆朗玛峰的高度?程序如下: main() /*程序名为l3_14.cpp。*/ { double h=0.1; int n=0; /* n用来累计对折次数*/ while(h<=8848180) { h=h*2; n=n+1; } printf("对折次数为:%d,此时厚度:%.2f\n",n-1,h/2); } 重复对折一张纸,实质就是厚度乘以2,次数加1。用顺序结构编程为: h=h*2; n=n+1; …… 这样的语句一直重复写到h满足题目要求为止。实际中这类问题,就可用循环结构编程实现。本例中,使用的是循环结构中的while语句。 C语言共有三种类型的循环语句,while、do-while和for语句。返回本节目录《 C语言程序设计》 商洛学院计算机科学系null3.3.2 while语句返回本节目录1.while语句的一般形式while(<表达式>) <循环体语句> 说明:while语句是C的关键字,其后面的一对括号中的<表达式>,可以是C语言的任意合法表达式,由它来控制循环体语句是否执行,括号不能省略。<循环体语句>可以是一条语句,也可以是多条语句,一般来说循环体是一条语句时不用加"{}",如果是多条语句,就一定要加"{}" 构成复合语句。其中的语句可以是空语句、表达式语句或作为循环体一部分的复合语句,如果循环体是一个空语句,表示不执行任何操作(一般用于延时)。(1)计算while后一对括号中的<表达式>的值。当值为非零时,则执行步骤(2);当值为零时,则执行步骤(3)。 (2)执行<循环体语句>后,转去执行步骤(1)。 (3)退出while循环。2.while语句的执行过程《 C语言程序设计》 商洛学院计算机科学系nullwhile语句实例3.while语句实例 例3.21】用while循环语句实现从1加到100,并将结果打印出来。 /*程序名为l3_21.cpp。*/ #include "stdio.h" main() / *若sum的值超过int型变量能表示的范围,则设置成长整型*/ { int sum=0,i=1; while(i<=100) { sum+=i; i++;} printf("其和是 %d\n",sum); /*若sum为长整型,则相应的输出也设置成长整型ld*/ } 运行结果: 其和是5050返回本节目录《 C语言程序设计》 商洛学院计算机科学系null3.3.3 do-while语句     do <循环体语句> while(<表达式>); 说明:do是C语言的关键字,必须和while联合使用。do-while循环由do开始,用while结束;注意,在while结束后必须有分号,它表示该语句的结束。其它同while循环语句。1.do-while语句的一般形式返回本节目录2.do-while语句的执行过程  (1)执行do后面的<循环体语句>。 (2)计算while后一对括号中的<表达式>的值。当值为非零时,转去执行步骤(1)。当值为零时,则执行步骤(3)。 (3)退出while循环。《 C语言程序设计》 商洛学院计算机科学系nulldo-while语句实例 运行结果: 其和是5050 在本例中,循环条件和循环体以及得到的结果都是和while循环一样的,只是用do-while语句来实现。3.do-while语句实例 【例3.23】用do-while语句实现求1+2+…+100的和。 #include "stdio.h" /*程序名为l3_23.cpp。*/ main() { int sum=0,i=1; / *若sum的值超过int型变量能表示的范围,则设置成长整型*/ do { sum+=i; i++;} while(i<=100); printf("其和是 %d\n",sum); /*若sum为长整型,则相应的输出也设置成长整型ld*/ } 返回本节目录《 C语言程序设计》 商洛学院计算机科学系null3.3.4 for 语句for语句是C语言提供的一种在功能上比前面两种循环语句更强的一种循环语句。 for循环语句格式如下: for(<表达式1>;<表达式2>;<表达式3>) <循环体语句> 说明:for是C语言的关键字,三个表达式之间的必须用分号";"隔开。三个表达式可以是任意形式的C表达式,通常主要用于for循环的控制。一般<表达式1>用于计算循环变量初始值,<表达式2>为循环体是否执行的条件,<表达式3>为循环变量的调整。<循环体语句>的使用同while、do-while循环语句。for循环语句的格式还可以表示为: for(<初始化表达式>;<条件表达式>;<修正表达式>) <循环体语句> 在某种情况下,用for语句表示循环,显得紧凑而清晰。尤其是它能利用<表达式3>自动地使循环变量发生改变,不像while结构那样要在循环体中设置"修正操作"。实际上,for语句中的<表达式3>不仅限于修正循环变量,而且可以是任何操作。例如前面例题中介绍的求1到100的和,用for语句可以表示为: for(sum=0,i=1;i<=n;sum+=i,i++);返回本节目录1.for语句的一般形式《 C语言程序设计》 商洛学院计算机科学系nullfor 语句的执行过程返回本节目录2.for语句的执行过程①首先计算<表达式1>。 ②求<表达式2>的值;若其值为非零,则转去执行③;若<表达式2>的值为零,则转去执行⑤,结束for语句。 ③执行一次for循环体。 ④求解<表达式3>,转②执行。 ⑤结束循环,执行循环之后的语句。3.for语句实例【例3.25】用for语句实现求1-100之和。 #include "stdio.h" main() /*程序名为l3_25.cpp。 { int sum=0,i=1; / *若sum的值超过int型变量能表示的范围,则设置为长整型*/《 C语言程序设计》 商洛学院计算机科学系nullfor 语句的实例返回本节目录for( ;i<=n;i++) sum+=i; printf("其和是 %d\n",sum); /*若sum为长整型,则相应的输出也设置成长整型ld*/ } 运行结果: 其和是5050 for循环的执行过程:先执行表达式1,为空语句,然后判断"i<=n"是否成立,如果为真,执行循环体"sum+=i",转而执行"i++",再判断"i<=n",如此反复,直到"i<=n"为假为止。在这个例子中,i是循环控制变量,每次循环时,它的值都被改变且进行检验。《 C语言程序设计》 商洛学院计算机科学系nullfor 语句多样性返回本节目录for语句的多样性由于C语言中表达式的形式十分丰富,对for语句的三个控制表达式可以灵活运用,因此造成for语句形式多种多样。 (1)<表达式1>为空语句 如上例中求1-100的和。本来由<表达式1>完成的初始化可提到循环之外完成。 (2)<表达式1>和<表达式3>是逗号表达方式(3)用空循环来延长时间 常用空循环来产生延时,以达到某种特定要求。如: for(t=0;t 是一个无限循环。将成为死循环。《 C语言程序设计》 商洛学院计算机科学系null3.3.5 循环的嵌套返回本节目录在一个循环内又完整地包含另一个循环,称为循环的嵌套,即循环体自身包含循环语句。 前面介绍了三种类型的循环,它们自己本身可以嵌套,如在for循环中包含另一个for循环,也可以互相嵌套,例如可以for循环中包含一个while循环或者do-while循环等等。 下面通过几个例子来介绍循环嵌套的概念和运用。【例3.26】打印如下形式的乘法小九九表: 1*1=1 2*1=2 2*2=4 …… 9*1=9 9*2=18 9*3=27 …… 9*9=81 分析:表体共九行,所以首先考虑一个打印九行的算法: for(i=1;i<=9;i++) { 打印第i行} 其次考虑如何"打印第i行"。每行都有i个表达式?*?=积,可以写为: for(j=1;j <= i;j++) { 打印第j个表达式}《 C语言程序设计》 商洛学院计算机科学系null循环的嵌套实例返回本节目录打印第j个表达式,可写为: printf("%d*%d=%-3d",i,j,i*j); 在写这个语句时,不写换行,只能在第j个表达式输出后写一个语句使之换行。 printf("\n"); 综上所述,打印以上形式的乘法小九九表的程序如下:【例3.26】 /*程序名为l3_26.cpp。*/ #include "stdio.h" main() { int i,j; /* i,j 分别控制行和列的输出*/ for(i=1;i<=9;i++) { for(j=1;j <= i;j++) printf("%d*%d=%-3d",i,j,i*j); printf("\n"); /*另起一行*/ } }《 C语言程序设计》 商洛学院计算机科学系null3.3.6 break语句和continue语句返回本节目录1. break语句2. continue语句《 C语言程序设计》 商洛学院计算机科学系null1. break语句返回3.3.6目录1. break语句前面已经介绍过用break语句跳出当前的switch语句流程。在循环结构中,也可以用break语句使流程跳出本层循环体,从而提前强制性结束本层循环。 break语句的一般形式为: break;【例3.28】在循环体中break语句执行示例。 #include "stdio.h" main() /*程序名为l3_28.cpp。*/ { int i,s=0; for(i=1;i<=10;i++) { s=s+i; if(s>5) break; printf("s=%d\n",s); } printf("使用break语句时,s的最终值为:%d\n",s); }《 C语言程序设计》 商洛学院计算机科学系nullbreak语句程序运行后的输出结果如下: s=1 s=3 使用break语句时,s的最终值为:6 本例中,如果没有break语句,程序将进行10次循环;但当i=3时,s的值为6,if语句中的表达式s>5 值为1,于是执行break语句, 循环立即中断,跳出for循环,从而提前中止循环,并转向循环体外的下一条语句。此时,s的值为6。 break语句使用说明: (1)只能在switch语句体和循环体内使用break语句。 (2)当break语句出现在,其作用是跳出该switch语句体。当break语句出现在循环体中,但并不在switch语句体内时,则在执行break语句后,使流程跳出本层循环体。返回3.3.6目录《 C语言程序设计》 商洛学院计算机科学系null2. Continue语句2.continue语句continue语句的一般形式为: continue;【例3.30】将【例3.28】中的break语句改用continue语句,来比较两者的区别。 #include "stdio.h" main() /*程序名为l3_30.cpp。*/ { int i,s=0; for(i=1;i<=10;i++) { s=s+i; if(s>5) continue; printf("s=%d\n",s); } printf("使用continue语句时,s的最终值为:%d\n",s); }返回3.3.6目录《 C语言程序设计》 商洛学院计算机科学系nullContinue语句程序运行后的输出结果如下: s=1 s=3 使用continue语句时,s的最终值为:55 在本例中,当i=1时,输出s=1,当i=2时,输出s=3,当i=3时,s的值为6,if语句中的表达式s>5 值为1,于是执行continue语句,跳过循环体中余下的语句,而去对for语句中的"表达式3"求值,然后进行"表达式2"的条件测试,最后根据"表达式2"的值来决定循环是否继续执行。不论continue是作为何种语句成分出现的,都将按此功能执行,这点与break有所不同。可以看出,continue语句的功能是结束本次循环。返回3.3.6目录《 C语言程序设计》 商洛学院计算机科学系null3.3.7 编程实训1返回本节目录【例3.32】编程输出如下图形: * *** ***** ******* ********* 程序如下: #include "stdio.h" main() /*程序名为l3_32.cpp。*/ { int i,j; for(i=1;i<=5;i++) { for(j=1;j<=10-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } } 《 C语言程序设计》 商洛学院计算机科学系null3.3.7 编程实训2返回本节首【例3.33】求整数3-100中的素数。为了检查某数是否是素数,采用的方法是,从n=3起直到100止,逐个用i=2~n/2去试除n,只要有一个能整除,说明该数不是素数。程序如下:main() /*程序名为l3_27.cpp。*/ { int i,n,num; for(n=3,num=0;n<=100;n++) { for(i=2;i<=n-1;i++) if(n%i==0) break; if(n==i) /*若n=i,则说明n不能被2~n-1整除,所以n为素数 */ { printf("%4d",n); num++; } } printf("\n素数个数是:%d\n",num); } 运行结果: 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 素数个数是:24《 C语言程序设计》 商洛学院计算机科学系null3.4 结构化程序设计方法与综合实训返回本章目录3.4.2 综合实训3.4.1 结构化程序设计方法《 C语言程序设计》 商洛学院计算机科学系null3.4.1 结构化程序设计方法结构化程序设计的思想是由E.W.Dijkstra等人于上世纪60年代后期提出的。其思想是:一个程序的任何逻辑问题均可用“顺序”、“选择”和“循环”这三种基本逻辑结构来描述。实现这些程序流程的语句都是流程控制语句。流程控制语句在程序设计中起着重要的作用,通过三种基本控制结构,使结构化程序具有唯一入口和唯一出口,没有死循环。再一个特点是程序组织结构化,即程序设计采用自顶向下,逐步细化,功能模块化的方法。这种方法就是将程序设计成一个个功能简单独立的模块. C语言是一种很好的结构化程序设计语言,它提供了比其他高级语言更丰富的流程控制语句。有四种语句是顺序执行的:(1)空语句;(2)表达式语句;(3)函数调用语句;(4)复合语句。选择语句有if语句和switch语句。循环语句有for,while和do-while语句以及一些辅助流程转向语句,如continue,break等。顺序结构、选择结构和循环结构共同作为各种复杂程序的基本构造单元。由三种结构经过反复嵌套构成的程序称为结构化程序。使用结构化程序设计的优点是:结构化构造减少了程序的复杂性,提高了可靠性、可测试性和可维护性;使用少数基本结构,使程序结构清晰,易读易懂;容易验证程序的正确性。 循环程序设计是有一定的编程规律和思路的,穷举与迭代是两类具有代表性应用的基本算法。 本节主要内容是引导读者编程来实现这些基本算法。返回本节目录《 C语言程序设计》 商洛学院计算机科学系null3.4.2 综合实训1返回本节目录【例3.34】用泰勒级数求e的近似值。直到最后一项小于1e-6为止。 e=1+1/1!+1/2!+1/3!+…+1/n!+… 程序如下: /*源程序名为l3_34.cpp。 泰勒级数 e*/#include "stdio.h" main() { float e=1.0,t=1.0; /*用e存放结果,用t存放n!,n的值每次加1*/ int n=1; while(1/t>1e-6) { t=t*n; /*求n!*/ e=e+1/t; /* 实现求n!的倒数的和 */ n++; } printf("e=%8.6f\n",e); } 运行结果: e=2.718282《 C语言程序设计》 商洛学院计算机科学系null3.4.2 综合实训2返回本节目录通过本例可以体现这样一个编程思路:凡是遇到求若干个有规律变化的项的乘积,就可在循环体中用求累乘积的编程通式t=t*x来编程实现;求其和,用求累加和的编程通式s=s+x来编程实现,其中t 、s分别为累积、累和,初值分别为t=1,s=0,x为变化的项的通式。【例3.35】百钱百鸡问题。公元前,我国古代数学家张丘建在《算经》一书中提出了"百鸡问题":鸡翁一,值钱五,鸡母一,值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? 分析:这是一个有名的不定方程问题。设: cocks:鸡翁数、 hens:鸡母数、chicks:鸡雏数,则有: cocks+hens+chicks=100 5*cocks+3*hens+chicks/3=100 据上述不定方程,很容易得到三个变量的取值条件: cocks:0-19之间的整数。 hens:0-33之间的整数。 chicks:0-100之间的整数。 解题思路:依次取cocks值域中的一个值,然后再在试取hens值域中的每一个值,根据前两者取值,求出chicks后,看是否合乎题意,合乎者为解。《 C语言程序设计》 商洛学院计算机科学系null3.4.2 综合实训3返回本节目录编程如下:/*源程序名为l3_35.cpp。百钱百鸡问题*/ #include "stdio.h" main() { int cocks,hens,chicks; for(cocks=1;cocks<=19;cocks++) for(hens=1;hens<=33;hens++) { chicks=100-cocks-hens; if(5*cocks+3*hens+chicks/3.0==100) printf("cocks=%d,hens=%d,chicks=%d\n",cocks,hens,chicks"); } } 程序运行结果如下: cocks=4,hens=18,chicks=78 cocks=8,hens=11,chicks=81 cocks=12,hens=4,chicks=84 本例采用的编程算法是穷举法。其基本思想是:对问题的所有可能状态一一测试,直到找到解或全部可能状态都测试过为止。下面例题为另一类型的穷举问题。《 C语言程序设计》 商洛学院计算机科学系null3.4.2 综合实训4 【例3.36】爱因斯坦的阶梯问题。 设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶时,正好到阶梯顶。问共有多少阶梯? 问题分析:设阶梯数为:ladders,则题中条件可以改写为: (1)ladders % 2 =1 (2)ladders % 3 =2 (3)ladders % 5 =4 (4)ladders % 6 =5 (5)ladders % 7 =0 由条件(5)知,阶梯数一定为7的倍数。于是可以从7开始,分别对7、17、21、28、35…数列进行测试,看哪一个符合题意。由条件(1)又知,阶梯数一定是奇数,因此可把上述数列中的数去掉一半。 算法:依次对7、7+14、7+14+14、…用条件(2)(3)(4)进行测试,找出符合题意者。返回本节目录《 C语言程序设计》 商洛学院计算机科学系null3.4.2 综合实训5返回本节目录程序如下:
本文档为【第3章 结构化程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_214894
暂无简介~
格式:ppt
大小:959KB
软件:PowerPoint
页数:0
分类:工学
上传时间:2012-01-29
浏览量:23