版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 结构化程序设计的开发主要内容理解算法,并会画流程图理解计数器控制的循环和用标记控制的循环条件运算符理解复合语句, 类型转换运算符, 性能问题自增、自减和赋值运算符掌握if和if/else选择语句掌握while语句本章掌握以下算法:判断一个数是否回文。2. 二进制转换为十进制。3。求阶层n!4. 求和sum. 数据的加密和解密。从十个数中找出最大数,最小数.算法的概念一个程序应包括以下两个方面的内容:对数据的描述: 在程序中要指定数据的类型的数据的组织形式, 即数据结构.2) 对操作的描述: 即解决一个问题要采取的步骤也就是算法。提出问题编写程序确定处理方案确定操作步骤调试和运行程序输出
2、整理结果算法设计算法的表示方法伪代码表示算法;用传统流程图表示算法;用N-S(I.Nassi and B. Schneiderman)结构化流程图表示的算法;伪码是帮助程序员制定算法的智能化的信息语言. 与日常英语类似.例如:if stdudentsgrade greater than or equal to 60 print “Passed”else print “Failed”结构化程序设计的核心思想 采用顺序、选择和循环三种基本结构作为程序设计的基本单元 只有一个入口;只有一个出口;无死语句,即不存在永远都执行不到的语句;无死循环,即不存在永远都执行不完的循环。采用“自顶向下、逐步求精”
3、和模块化的方法进行结构化程序设计 一般处理框判断框流程线输入输出框起止框传统流程图:优点:直观形象,流程清晰,各种操作一目了然,不易产生二义; 缺点:流程图占面积大,由于允许使用流程线,使流程任意转移,容易使人弄不清流程的思路。传统流程图里的符号连接符ab?12读入 a, b, c开始 ac? cb?12显示a显示c显示 b结束NYNNYY用N-S结构化流程图表示算法(I)顺序结构A块B块A块B块(a)传统流程图表示的顺序结构(b)图表示的顺序结构N-S选择结构A块B块(a)传统流程图表示的选择结构(b)N-S图表示的选择结构条件P条件PA块B块满足不满足满足不满足用N-S结构化流程图表示算法
4、(2)循环结构A块A块条件P当给定条件P满足满足不满足A块A块条件P直到给定条件P不满足不满足满足当型循环结构直到型循环结构用N-S结构化流程图表示算法(3)用传统流程图表示算法求三个整数之和及平均值.开始sum=num1+num2+num3aver=sum/3输出sum, aver的值结束输入num1,num2,num3aver=sum/3输出sum, aver的值输入num1,num2,num3sum=num1+num2+num3用传统流程图表示算法(举例)问题:输入10个数,打印出其中正数counter10是x0否输入xcounter=counter+1是否终止开始打印xcounter=
5、1counter+当count10count=0输入xx0打印x是否n=,m=0n=n+1n50当n50是g60否输入成绩gn=n+1m=m+1是输出m否终止开始输出m的值n=0,m=0输入学生成绩g60m=m+1是否n:存放输入人数m:存放不及格人数问题:输入全班50个同学成绩,统计出不及格人数用传统流程图表示算法(举例)问题:输入全班50个同学成绩,统计出不及格人数及平均分counter=1,m=0, total=0counter=50是grade60否输入成绩gradecounter+m=m+1是输出m, total/(count-1)否终止开始counter:存放输入人数m:存放不及格
6、人数total:存放学生总成绩total+=grade简单算法举例1例1 求两个整数整商Step 1:读入两个整数,即被除数和除数;Step 2:如果除数等于0,则输出除数为0的错误信息;否则,计算被除数和除数的整商,并输出计算结果。例1 用流程图描述求两个整数整商的算法读入m和nn等于0吗?m为被除数n为除数开始YES输出“除数为0错误”NOm/n q输出整商q结束例2 求5!S1:求1*2,得结果2;S2:将S1得到的乘积2再乘以3,得结果6;S3:6乘以4,得结果24;S4:24乘以5,得结果120算法一:简单算法举例2例2 求5!S1:1p;S2:2i; S3:p*ip;S4:i+1i
7、;s5:若i5输出p1p2 ip*i pi+1 ii5NY输出p开始结束例3 求三个数中最小的数。S1:输入三个数a、b、c ;S2:比较a和b,若ac,则cmin;S4:输出min的值,结束。算法:设变量min,存放较小的数。简单算法举例3例3 用流程图描述求三个数中最小数的算法YNmin=a1开始读入a,b,cac?结束输出min的值YNmin=c否读入a,b,cac输出min的值min=c是min=b是否ABCD例4 判断20002500年中的每一年是否闰年闰年是符合下面两个条件之一的年份 (1)能被4整除,但不能被100整除 (2)既能被100整除又能被400整除简单算法举例4S1:2
8、000y;S2:若y不能被4整除,则输出y“不是闰年”, 转s6; S3:若y能被4整除,不能被100整除,则输出y“是闰年”,转s6; S4:若y能被100整除,又能被400整除,则输出y“是闰年”,转s6;s5:输出y“不是闰年”s6:y+1ys7:当y2500时,转S2,否则,结束算法:设变量y存放被检测的年份简单算法举例42.4.2 用流程图表示算法例5 求S1:sign1;S2:sum1; S3:deno2;S4:sign(-1)*sign;s5:termsign*(1/deno)s6:sumsum+terms7:deno=deno+1s8:若deno 100,返回S4;否则结束算法
9、:设变量sum存放累加和,deno存放分母,sign代表数值的符号,term存放式中的某一项。简单算法举例5 条件运算符(P45)在“if() 语句1 else 语句2”形式的语句中,如果语句1和语句2同时赋给同一个变量,如: if(xy) min=x; else min=y; 则可以用条件运算符来处理,格式: min=(x=60) printf(passedn); else printf(Failedn); printf(%sn,grade=60? Passed:Failed);grade=60? printf(passedn): printf(Failedn);条件运算符例1:输入任意字符
10、,如果是小字母,则把他改成大写。 void main() char ch; scanf(“%c”,&ch);/ch=getchar(); ch=(ch=a & ch 6) ? puts( 6) : puts(6原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。 复合语句(P47)把多个语句用括号括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句,例如 x=y+z; a=b+c; printf(“%d%d”,x,a); 是一条复合语句。复合语句内的各条语句都必须以分
11、号“;”结尾,在括号“”外不能加分号。强制类型转换运算符(P54)1)强制类型转换运算符 利用强制类型转换运算符将一个表达式转换成所需类型。一般形式: (类型名)(表达式)(double)a -将a转换成double类型(int)(x+y) -将x+y的值转换成整型(float)(5%3)-将5%3的值转换成实型注意:1.表达式应用括号括起来.如果写成:(int)x+y 则只将x转换成整数,然后与y相加. 2.在强制类型转换时,得到一个所需的中间变量.原来变量的类型并未变化.例2:强制类型转换#include void main( ) int a=5,m; float b=3.15,n; m=
12、(int)b; n=(float)a; printf(n=%f,a=%dn,n,a); printf(m=%d,b=%fn,m,b);n=5.000000,a=5m=3,b=3.150000赋值运算符(P58) 变量=表达式含义:将“=”右边的运算对象之值赋给左边的运算对象。 如:x=1; x=x+1;使用要点:(1)赋值运算符左边的量(称为左值)一般是变量。(2)当“=”两边数据类型不同时,将进行数据类型的自动转换,原则是:以“=”左边运算对象的数据类型为准。 如: int x; float y=3.5; x=y; 则运行结果为int型赋值表达式求解过程:赋值运算符按照“右结合性”顺序运算,
13、将“=”右边表达式的值赋值给左边的变量。使用举例:a=b=c=3 a=5+(c=2)a=(b=4)+(c=6)a=(b=10)/(c=2)a+=a- =a*a (若a=12,)表达式值为3,a,b,c值均为3表达式值为7,a值为7,c为2表达式值为10,a=10,b=4,c=6表达式值为5,a=5,b=10,c=2(1)则a-=a*a 后,a=-132,(2)a+=-132后,a=-264赋值表达式注意:(1)区分赋值语句和赋值表达式;(2)赋值表达式不仅可以出现在赋值语句中,也可以出现在其它语句中。(3)赋值运算符的优先级别今比逗号运算符级别高,低于其他运算符。(4)赋值表达式的值等于右边表
14、达式的值。赋值运算时不同类型数据间的自动转换1、实型数据赋值给整型数据时,舍弃小数部分;即:int=float的结果为: int型。如:float a; int s; a=12.34; s=a; 这时s的值为12。2、将整型数据赋值给实型变量时,数值不变,但数据是浮点形式的; 即float=int的结果为:float型。如:int s; float a; s=12; a=s;这时a的值为12.00000。例3 赋值运算和类型转换示例#include void main() int i=5; float a=35.15, b; double c=123456789.456123; char d=
15、b; printf(i=%d,a=%f,c=%f,d=%cn,i,a,c,d); b=i; i=a; a=c; d=i; printf(i=%d,a=%f,b=%f,d=%cn,i,a,b,d); i=5, a=35.150002, c=123456789.456123, d=b 将实型数据(包括单精度、双精度)赋给int型变量时,将实型数据的小数部分舍去,再赋给int型变量将double型数据赋给float型变量时,先截取double型数据的前7位有效数字,再赋给float型变量将int型数据赋给char型变量时,先截取int型数据的低8位,再赋给char型变量将int型数据赋给float型
16、变量时,先将int型数据转换为float型数据,再赋给float型变量避免将精度高的数据赋给精度低的变量,以免带来数据精度损失i=35, a=123456792.000000, b=5.000000, d= #复合赋值运算符在赋值运算符“=”之前加上其它运算符构成的运算符。 表达式1 运算符=表达式2 等价于:表达式1=表达式1 运算符 (表达式2) a+=3 等价于 a=a+3 x*=3 等价于 x=x*3 x%=3 等价于 x=x%3 x/=y+3 等价于 x=x/(y+3)使用要点:凡是二元(二目)运算符,都可以与“=”组合成复合赋值符 如:+=,-=,*=,/=,%=,=,&=,=,|
17、=等。使用复合赋值符的目的:简化程序;提高编译效率。例4 复合赋值运算符举例#include void main() int a=3,b=9,c=-7; a+=b; c+=b; b+=(a+c); printf(a=%d,b=%d,c=%dn,a,b,c); a+=b=c; printf(a=%d,b=%d,c=%dn,a,b,c); c+=c-=c*c; printf(“c=%dn,c);a=12,b=23,c=2a=14,b=2,c=2c=-43.12 自增、自减运算符(P59)功能: + (使变量值增1), - (使变量值减1) +i、-i前缀形式,在使用i之前,先使i的值加(减)1 i
18、+ 、i-后缀形式,在使用i之后,使i的值加(减)1a=1;b=a+;a=1;b=+a;a=1;b=a-;a=1;b=-a;a为2;b为1;a为2;b为2;a为0;b为1;a为0;b为=0;在printf()中,参数的求解过程是“自右到左”。 k=5; printf(“%d,%d”,k,k+); k=5; printf(“%d,%d”,(+k)+(k+);/*值?*/6,512具有右结合性int k=3,j; j=-k+ ; /*j=-3,k=4*/int a,b=12,c=5;a = (b+c)+; a = 34+;不能用于常量和表达式if 语句的三种形式:单路选择格式:if (expres
19、sion) statementexprstatement非0=0if(xy) printf(“%d”,x);printf(“%d”,y); exprstatement1statement2非0=02. 双路选择格式:if (expression) statement1else statement2if (xy) max=x; else max=y;printf(“max=%d”,max);3. 形式三(多路选择):if ( expr1 ) statement1else if (expr2 ) statement2else if (expr3 ) statement3. else stateme
20、ntn expr1statemnt1非0=0expr2statemntnstatemnt2非0=0执行过程: 例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if (salary400) index=0.1;else index=0; 如:if(a=b&x=y) printf(“a=b,x=y”); if(3) printf(“OK”); if(a) printf(“%d”,a);说明:if后面的表达式类型任意语句可以是复合语句 if(x) if(x!
21、=0) if(!x) if(x=0)例 考虑下面程序的输出结果: #include void main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn”,x,y); 1.已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是。 if(xy) z=x;x=y;y=z; A) x=10,y=20,z=30 B) x=20,y=30,z=30 C) x=20,y=30,z=10 D) x=20,y=30,z=20 2.以下程序运行结果是。#include int main(v
22、oid) int a=5,b=0,c=0; if(a=b+c)printf(*); else printf($); A) * B) $ C) *$ D) 显示错误信息例如:求函数: -1 x0 y= 0 x=0 1 x=1/* * 程序名:c3_2.c( 分支程序示例示例) * * 作 者:lyx * * 编制时间:2010年3月8日 * * 主要功能:实现符号函数(方法一) * */void main() int x,y; printf(“x=“); scanf(“%d”,&x); if(x=0) if(x0) y=1; else y=0; else y=-1; printf(“y=%d”,
23、y);例: 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 正确配对方法:加 /* * 程序名:c3_3.c( 分支程序示例示例) * * 作 者:lyx * * 编制时间:2010年3月9日 * * 主要功能:将考试成绩按等级制输出 * */#include “stdio.hint main() float grade; char ch; printf(input grade:); scanf(%f
24、,&grade); if(grade=90) ch=A; else if(grade=80) ch=B; else if(grade=70) ch=C; else if(grade=60) ch=D; else ch=E; printf(%.1f-%cn,grade,ch); return 0;/*在考试成绩大于等于90打印A, 8089打印B, 7079打印C,6069打印D,小于60打印D (书P46页)*/思考题:.计算表达式(形如3+5,9/3的四则运算式)的值 输入:+5输出: 3+5=7是否继续(y/n)?输入:5/2输出:=2.50 while语句while语句的一般格式: wh
25、ile(表达式) 语句 功能:当表达式为真时执行语句,一直到表达式为假时为止。条件语句非00退出循环#include Stdio.hint main() float average; int counter, grade, total; total=0; counter=0; /*初始化阶段*/ printf(Enter grade,-1 to end:); scanf(%d,&grade); while(grade!=-1) total+=grade; counter+; printf(Enter grade,-1 to end:); scanf(%d,&grade); if(counter
26、!=0) average=(float)total/counter; printf(Class average is %.2f,average); else printf(No grade were enteredn);/*( 书P53) 求全班平均成绩的程序,程序在每次运行时都能够处理任意个数的成绩 */ /* 书P55 输入每个学生的考试结果(即输入1或2),计算每种类型考试结果的个数int main() int passes=0,failures=0,student=1,result; while(student8) /*通过考试的学生超过8人*/ printf(“Raise tuiti
27、onn”); /*提高学费*/ return 0; /*统计个位数是6,且能被3整除的5位数的数目*/#include int main(void ) long int n=10006; int count=0; while(n=99999) if(n%3=0) count+; n+=10; printf(“count=%dn”,count); return 0; 1.设有程序段:则下列描述正确的是。 int k=10; while(k=0)k=k-1; A) 循环体语句执行一次 B) while循环执行10次 C) 循环体语句一次也不执行 D) 死循环2.下列程序段运行结果是。 a=1;b=
28、2;c=2; while(abc) t=a;a=b;b=t;c-; printf(%d,%d,%d,a,b,c); A) 1,2,2 B) 2,1,0 C) 1,2,0 D) 2,1,13. 下列程序运行结果是。 void main() int num=0; while(num=2) num+;printf(%3d,num); A) 1 B) 1 2 C) 1 2 3 D) 1 2 3 41)以下程序的输出结果是 A)17,021,0 x11 B)17,17,17 B)17,0 x11,021 D)17,21,11 main( ) int k=17; printf(%d,%o,%x n,k,k
29、,k); 2)以下程序的输出结果是 A)-1 1 B)0 1 C)1 0 D)0 0 main( ) int a= -1,b=1,k; if(+a0)& ! (b- =0) printf(%d %dn,a,b); else printf(%d %dn,b,a); /* * 程序名:c3_3.cpp(循环语句示例) * * 作 者:lyx * * 编制时间:2010年3月8日 * * 主要功能:计算10 的阶乘 * */#include /* 预编译命令*/void main() /* 主函数 */ /* 主函数开始*/ int i =10; long sum = 1; while(i= 1) /* 用while循环作累乘运算*/ printf(i=%d,i); /*显示i */ sum = sum *
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 涂料生产工创新意识强化考核试卷含答案
- 贵金属冶炼工安全强化模拟考核试卷含答案
- 废金属加工处理工安全教育强化考核试卷含答案
- 自由锻锻工测试验证模拟考核试卷含答案
- 水泥混凝土制品制作工安全文明能力考核试卷含答案
- 高纯试剂工岗前岗中实操考核试卷含答案
- 熔炼浇注工操作评估考核试卷含答案
- 燃气具装配工岗中实操掌握考核试卷含答案
- 粉末冶金烧结工岗中实践水平考核试卷含答案
- 海藻制碘工岗位环保竞赛考核试卷含答案
- 2026年水务集团招聘考试笔试试题及答案
- 2026年甘肃省酒泉市金塔县招聘社区工作者考试参考题库及答案解析
- 武汉市2027届高中毕业生九月调研考试地理试卷(含答案)
- 华为光芯片机考题库(完整版含答案解析)
- 2026考研全国统考英语二冲刺试卷(详细解析)
- 苏教版六年级上册数学《比的意义》教学设计
- JJF(吉)106-2022 水分接收器校准规范
- 中药饮片调剂规范考核试题及答案
- 四川省水利工程设计概(估)算编制规定2025
- XJJ013-2012 新疆维吾尔自治区城市规划管理技术规定
- 园林植物病虫害防治技术全套课件
评论
0/150
提交评论