




已阅读5页,还剩120页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 结构化程序设计 l3.1 结构化程序设计思想 l3.2 语句与分程序 l3.3 顺序结构程序设计 l3.4 关系运算符与逻辑运算符 l3.5 选择结构程序设计 l3.6 循环结构程序设计 3.1 结构化程序设计思想 3.1.1 结构化程序设计思想的产生 20世纪60年代“软件危机” 的产生 是否在程序设计中使用“goto”语句的争论 Corrado Bhm和Guiseppe Jacopini.就证明了只 要有顺序、选择和循环三种形式的控制结构, 就足以导出其它各式各样的程序结构,从而在 理论上奠定了结构化程序设计的基础。 3.1.2 结构化程序设计的三种基本结构 (1) 顺序结构 顺序结构就是一组逐条执行的可执行语 句。按照书写顺序,自上而下的执行。 (2) 选择结构(分支结构) 选择结构是一种先对给定条件进行判 断,并根据判断的结果执行相应命令的结 构。 (3) 循环结构 循环结构是指多次重复执行同一组 命令的结构。 具有循环结构的程序一般必须指定循 环的终止条件,以便对程序的循环进行有 效的控制,以免进入无限循环(或称死循 环)的状态。 C程序的执行部分由执行语句构成。 执行语句的种类 表达式语句 函数调用语句 控制语句 复合语句(或称分程序) 空语句 3.2 语句与分程序 最简单的可执行语句。只要在表达 式后面加上分号就可以了。 例如: +i; x=y; 有效的表达式语句一般都要有赋值 运算, 否则,不做任何赋值运算的表达 式大多数是无意义的。 表达式语句 函数调用语句 由函数名、实际参数以及分号构成。 例如: printf(“welcome“); printf是函数名,“welcome”是实际参数。函 数名既可以是C语言提供的库函数名,也 可以是我们自己定义的函数名。 控制语句 控制语句是用于控制程序流程的语句,控 制语句一般指那些改变了顺序结构的语句。 C语言的控制语句 分支语句(if 和 switch) 循环语句(while、do-while、for) 转向语句(break、goto、continue、return)。 熟练掌握控制语句是学会程序设计的基础。 复合语句和分程序结构 复合语句是用 和 把数据说明语句和若干 个有序的执行语句组合在一起而构成。 其一般格式为 数据说明; 语句; 复合语句在语法上相当于一个简单语句,在 程序中可以作为一个独立语句来看待,因此又 称为分程序。 空语句 C语言中有一个很特殊的语句,即空语句。空 语句,顾名思义,就是什么也不存在的语句,只 有一个分号: ; 尽管空语句不会有任何命令执行,但仍然是 一个有用的语句。常用于循环语句中,使循环体 为空。 例如:for (sum=0,i=0;i、=、=10) scanf(“%d“, if (xb将两个数的位置 调换;否则,保持不变。 #include “ stdio.h“ /*-swap a and b-*/ void main() int a,b,temp; scanf(“%d%d“, if (ab) temp=a; a=b; b=temp; printf(“%d,%dn“,a,b); 例3.6请判断下面程序的执行结果,并解释该程序 的功能。 #include “stdio.h“ void main() int a=10,b=20,x; x=a; if (a=A printf(“max is %d.n“,*x); else x= printf(“max is %d.n“,*x); #include “stdio.h“ /*-max-*/ void main() int a=30,b=20,*x; if (ab) x= printf(“max is %d.n“,*x); else x= printf(“max is %d.n“,*x); 3.5.4 else if 形式 例如我们要解决这样一个问题:输入一个股 票今天和昨天的收盘价,如果今天的收盘价大于 昨天的收盘价,提示“上涨”;如果今天的收盘价 小于昨天的收盘价,提示“下跌”;如果今天的收 盘价刚好等于昨天的收盘价,提示“平盘”。 判断条件的结果实际上是三种情况,我们先 用if else 解决这个问题: 用if else解决这个问题: #include “stdio.h“ /*-price of stock-*/ void main() float x,y; printf(“nPlease input price of stock yesterday:“); /*提示用户输入昨天的股票价格*/ scanf(“%f“, /*接收昨天的股票价格 */ printf(“nPlease input price of stock today:“); /*提示用户输入今天的股票价格*/ scanf(“%f“, /*接收今天的股票价格 */ if (x=y) /*若今天的股票价格等于昨天的股票价格 */ printf(“Equality!n“); /*输出提示:平盘 */ else if (x55) group=4; /*岁数大于55岁在第四组 */ else if (age40 ) group=3; /*岁数大于40岁在第三组 */ else if (age17) group=2; /*岁数大于17岁在第二组 */ else group=1; /*岁数小于等于17岁在第一组 */ printf(“Group is %c!n“,group); 3.5.3 嵌套的if语句 修改例3.12,排除不可能的岁数 。 #include “stdio.h“ /* sport group */ void main() int age; char group; printf(“Please input age:“); /*提示用户输入岁数 */ scanf(“%d“, if (age0 /*岁数大于55岁在第四组 */ else if (age40 ) group=3; /*岁数大于40岁在第三组 */ else if (age17) group=2; /*岁数大于17岁在第二组 */ else group=1; /*岁数小于等于17岁在第一组 */ printf(“Group is %c!n“,group); else printf(“Data Error!n“); if (表达式1) if (表达式2) 语句1; else 语句2; if (表达式1) if (表达式1) printf(“Please input one integer:“); /*输入一个整数 */ scanf(“%d“, if (x0) /*如果x大于0 */ if (x%2=0) /*如果x是偶数 */ printf(“positive and evenn“); else /*x是奇数 */ printf(“positive and oddn“); 3.5.4 switch语句 switch语句属于多路分支结构。 switch的常用形式: switch (条件表达式) case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; case 常量表达式3:语句3;break; case 常量表达式n:语句n;break; default 语句n+1; break; 功能:首先计算条件表达式的值,然 后找到与其相等的常量表达式的case分支 去执行语句,然后退出switch语句,若没 有与条件表达式相等的常量表达式,则执 行default语句后面的语句n+1。default 语 句可省略。若语句i后不含break,继续执 行下一条语句i+1,不用判断常量表达式。 例3.14假设花店里有四种花:玫瑰(rose) 、 百合(lily)、康乃馨(carnation)和兰 花 (orchid),其单价分别是4.50、20.00、 2.00和6.00。编写程序,首先显示一个简易 菜单,将花店里有的花列出来,请用户选择 , 然后请用户输入要买的数量,计算用户应付 的费用并输出。 #include “stdio.h“ void main() int kind,amount; double fee; printf(“n# Welcome you! #“);/*显显示简简易菜单单 */ printf(“nn“); printf(“n 1-rose.“); printf(“n 2-lily.“); printf(“n 3-carnation.“); printf(“n 4-orchid.“); printf(“nn“); printf(“nplease choose what you want buy:“); /*提示用户输户输 入买买花的品种 */ scanf(“%d“, printf(“nplease enter amount you want buy:“); /*提示用户输户输 入买买花的数量 */ scanf(“%d“, switch (kind) /*根据用户选户选 的种类类和数量计计算费费用 */ case 1:fee=amount*4.50;break; case 2: fee=amount*20.00;break; case 3: fee=amount*2.00;break; case 4: fee=amount*6.00;break; default:printf(“error choose“); printf(“nplease pay your fee %.2lf:“,fee); /*输输出费费用 */ 注意: (1) case分支中的语句i后面的break语句一般 情况下不要省略,因为没有break语句,程序 不能跳出switch语句,而是执行下一条case语 句后面的语句,直到遇到break才能终止 switch的执行。 switch (s) case +:a=a+b; case - :a=a*b;break; case *:a=a-b;break; case /:a=a/b;break (2) 条件表达式和常量表达式的数据类型必须 一致,常量表达式中不能包含变量。实际上, switch语句的重点就在于如何构造条件表达式, 并让它的值正好能够匹配n个常量表达式的值。 (3) 多个case 可以共同使用相同的语句i。 switch (s) case 1: case 2: case 4: case 5: printf(“%d“,x);break; (4) 每个常量表达式应不相等,因为它类似于语 句标号的作用,case部分与default的顺序可自由 书写。若每个case后包含break,则顺序不影响 最后的执行结果。反之,则有可能影响执行结果 s=2; switch (s) case 1: printf(“1“);break; case 2: printf(“2“);break; case 3: printf(“3“);break; 结果? switch (s) case 1: printf(“1“); case 2: printf(“2“); case 3: printf(“3“); 结果? (5) 语句i可以用复合语句,而且允许省略花括号 。 (6) switch语句可以嵌套,即在一个switch语句 中嵌套另一个switch语句,但是要注意break只 能跳出最内层的switch语句。 例3.15根据输入字符(0到F,用%c接收)显示与该字 符所表示的十六进制数相对应的十进制数。(例 如输入A,输出10;输入0,输出0。) #include “stdio.h“ #include “stdio.h“ void main() char i; printf(“nplease input 0F :“); scanf(“%c“, /*接收输输入 */ switch (i) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: printf(“n%d“,i-0);break; case A: case a:printf(“n%d“,10);break; case B: case b:printf(“n%d“,11);break; case C: case c:printf(“n%d“,12);break; case D: case d:printf(“n%d“,13);break; case E: case e:printf(“n%d“,14);break; case F: case f:printf(“n%d“,15);break; default:printf(“error data“); C语言中提供的唯一的一个三目运算符就是 条件运算符“?:”,它的运算对象有三个。 条件运算符的语法格式是: 表达式1 ?表达式2 :表达式3 由条件运算符与操作数构成的表达式也可以 称为条件表达式。 包括了条件运算符的条件表达式的计算方法 是:首先计算表达式1的值,若表达式1为真,条 件表达式的解取表达式2的值,表达式1为假,条 件表达式的解取表达式3的值。 3.5.5 3.5.5 条件运算符条件运算符 例3.16 使用条件运算符将输入的字母小写变大写。 #include “stdio.h“ #include “string.h“ void main() char c; puts(“please input one char:“); c=getchar(); c=(c=a?(c+A-a):c); putchar(c); putchar(n); 例3.17 使用条件运算符输出两个输入整数的较大 者,使用指针指向较大的数所在的存储单元。 #include “stdio.h“ void main() int i,j,*pmax; printf(“nplease input two integer:“); scanf(“%d%d“, pmax=ij? printf(“%dn“,*pmax); printf(“%un“,pmax); /*输出pi的内容,实际上是i和j中较大数 的地址 */ 3.5.6 3.5.6 选择结构程序举例选择结构程序举例 例3.18在我们国内的大学中,学生的学习成绩以 百分制计算,但有些国家的大学是按等级记录 学生的成绩,例如:A、B、C、D等。如果一 个学生要出国,就需要将自己成绩单中的成绩 做一个转换。假设需要按下表进行转换,编写 程序,分别使用if语句和switch语句根据输入的 百分制分数,输出相应的分数等级。 程序一: 首先排除非法的分数,然后使用else if形式将 分数分级。 程序二: 没有先排除非法的分数,因此else if形式时 要使用两个并列的条件才能将分数分级。 程序三: 先排除了非法的分数,然后使用switch语句 将分数分级。赋值语句s=score/10的功能是将分 数取整,取整以后的结果有11中情况:0,19, 10。 例3.19 编写程序,输入一个用整数表示的年份,输出显示 该年份是否是闰年。 判断一个用整数表示的年份是不是闰年的规则是: 该数满足二个条件之一是闰年: (1) 能被400整除; (2) 能被4整除,但不能被100整除。 根据上述规则,我们可以画一个N-S流程图来解决 该问题。其中用到两个存储单元year和flag,year 存放 整数表示的年份,flag是个标记,其值为1表示是闰年, 其值为0表示不是闰年。 程序一: 判断闰年用if形式嵌套if else 形式, #include “stdio.h“ /* leap year */ void main() int year,flag; printf(“Pleae input a year:“); scanf(“%d“, if (year%400!=0) if (year%4=0) if (year%100=0) flag=0; else flag=1; else flag=0; else flag=1; if (flag=0) printf(“%d is not leap yearn“,year); else printf(“%d is leap yearn“,year); 程序二: 判断闰年用else if和if else 形式,可编写程序如下: #include “stdio.h“ void main() int year,flag; printf(“Pleae input a year:“); scanf(“%d“, /*输入年度 */ if (year%400=0) flag=1; else if (year%4!=0) flag=0; else if (year%100!=0) flag=1; else flag=0; if (!flag) printf(“%d is not a leap yearn“,year); /*输出“不是闰年” */ else printf(“%d is a leap yearn“,year); /*输出“是闰年” */ 程序三: 判断闰年用逻辑表达式,可编写程序如下: #include “stdio.h“ void main() int year,flag; printf(“Pleae input a year:“); scanf(“%d“, /*输入年度 */ flag=(year%400=0)|(year%4=0 /*用逻辑表达式计算是否是闰年 */ flag?printf(“%d is a leap yearn“,year):printf(“%d is not a leap yearn“,year); 3.6 循环结构程序设计 l3.6.1 问题的提出 l3.6.2 while while 语句语句 l3.6.3 do whiledo while语句语句 l3.6.4 forfor语句语句 l3.6.5 多重循环多重循环 l3.6.6 break语句在循环语句中的用法 l3.6.7 continuecontinue语句语句 l3.6.8 程序举例 3.6.1 问题的提出 第一个问题: 在屏幕上输出40个星号。 第二个问题: 重复接收用户输入的整数,直到这个数是一 个正确的百分制的分数。 第三个问题: 计算1+1/2+1/3+ +1/n。n由用户指定(程 序运行时输入)。 3.6.2 while语句 while循环语句的语法是: while (表达式) 语句; 功能:首先计算表达式的值,如果表达式的值 非零(真),执行“语句”,并再次计算表达式 的值,此过程重复执行,直到表达式的值为零 (假),循环结束。 重复执行的语句被称为循环体,表达式被称 为循环表达式。 while 语句的框图 例3.20 用while 语句解决“在屏幕上输出40 个星号 ”的问题。 #include “stdio.h“ void main() int i; i=1; while (i100) printf(“Data error!Please input your score again:“); scanf(“%d“, printf(“nYour score is %d!“,score); 例3.22 用while语句解决“计算1+1/2+1/3+ +1/n。n由 用户指定(程序运行时输入)。”的问题。 /* sum of 1+1/2+1/3+ +1/n */ #include “stdio.h“ void main() int i, n; double sum; i=1; sum=0; printf(“nPlease input a integer:“); scanf(“%d“, while (i100); printf(“nYour score is %d!“,score); 例3.25 用do while语句解决“计算1+1/2+1/3+ +1/n。n由 用户指定(程序运行时输入)。”的问题。 #include “stdio.h“ void main() int i, n; double sum; i=1; sum=0; printf(“nPlease input a integer:“); scanf(“%d“, do sum=sum+1.0/i; i+; while (i100;) printf(“Data error!Please input your score again:“); scanf(“%d“, printf(“nYour score is %d!“,score); 例3.29 用for语句解决“计算1+1/2+1/3+ +1/n。n 由用户指定(程序运行时输入)。”的问题。 /* sum of 1+1/2+1/3+ +1/n */ #include “stdio.h“ void main() int i,n;double sum; printf(“nPlease input a integer:“); scanf(“%d“, for( i=1,sum=0;imaxi) if (auxmaxi) maxi=aux; maxi=aux; c+; c+; printf printf(“The largest ASCII value is %d- (“The largest ASCII value i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年健身教练专业认证考核试卷及答案解析
- 2025年健康食品营养师职业资格评价试题及答案解析
- 2025年建筑土木勘察师认证考试试题及答案解析
- 2025年计算机网络工程师专业能力考试试题及答案解析
- 2025年化学分析师专业知识鉴定试题及答案解析
- 2025年国际贸易实务考试试题及答案解析
- 2025年广告营销策划师资格认证考试试题及答案解析
- 2025年公务员职业能力测评试题及答案解析
- 关于字母O 的教学课件
- 2025年本科院校审计处招聘笔试预测题
- 单片机的看门狗
- 市场营销(第2版)课件全套 王永贵 第1-17章-市场与市场营销概述及发展-顾客营销学
- 高中数学 人教A版 必修一 《集合与常用逻辑用语》 1.1集合的概念
- 深圳某电厂锅炉维修改造施工组织设计-new(常用版)
- GB/T 4950-2021锌合金牺牲阳极
- GB/T 15171-1994软包装件密封性能试验方法
- 中药调剂技术-课件
- 证券从业考试基础模拟卷二(题目+解析)
- 水轮发电机讲义课件
- 信息系统运维服务方案
- 化工试生产总结报告
评论
0/150
提交评论