第三章 基本结构程序设计_第1页
第三章 基本结构程序设计_第2页
第三章 基本结构程序设计_第3页
第三章 基本结构程序设计_第4页
第三章 基本结构程序设计_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章基本结构程序设计第1页,课件共49页,创作于2023年2月基本结构程序设计程序的基本结构与结构化程序设计顺序结构程序设计选择结构程序设计循环结构程序设计程序设计举例第2页,课件共49页,创作于2023年2月程序=算法+数据结构数据结构:指对数据(操作对象)的描述算法:指对操作步骤的描述编写程序的本质:

对哪些数据进行什么样的一系列加工就可以达到目标第3页,课件共49页,创作于2023年2月程序基本结构与结构化程序设计算法程序基本结构结构化程序设计的基本方法第4页,课件共49页,创作于2023年2月算法的概念广义的说,为解决一个问题而采用的方法和步骤,就称为算法炒菜点火->放油->放菜->炒菜->熄火->盛菜选择合适的算法数值运算算法和非数值运算算法(人事管理)

第5页,课件共49页,创作于2023年2月算法举例例:求解一元二次方程ax2+bx+c=0(a≠0)的两个根。s1:输入数据a,b,cs2:求根x1,x2s3:输出结果可以将求解算法(s2)进行细化设计如下:

s1:输入数据a,b,cs2_1:求判别式d的值,d=b*b-4*a*cs2_2:判断:如果d>=0,则按实根求法计算:

x1=(-b+sqrt(d))/(2*a)x2=(-b-sqrt(d))/(2*a)

否则,按复根求法计算:实部r=-b/(2*a)

虚部p=±sqrt(-d)/(2*a)

s3:输出结果第6页,课件共49页,创作于2023年2月例:依次读入30个学生成绩,输出平均成绩及最高成绩具体算法描述:s1:0=>is2:0=>sum,0=>maxs3:读入一个学生成绩存入scores4:i+1=>is5;sum+score=>sums6:如果score大于max,则score=>maxs7:如果i小于30,转移至s3s8:sum/30=>averages9:打印average,maxs3,s4,s5,s6,s7这些步骤会被重复执行30次变量i用于统计已处理的学生人数当i值小于30时,流程转至s3读下一个学生成绩当i值等于30时,所有学生成绩处理完毕,到s8,s9输出结果第7页,课件共49页,创作于2023年2月算法的特性算法是解决问题逻辑思路的表述。同一个问题有不同的解题方法和步骤,设计出不同的算法。正确的算法应该具备以下特性:有穷性:包含有限的操作步骤,不能无限制地执行下去确定性:每一个步骤必须有确定的含义,无二义性有若干个输入数据(0~n)输入是指在算法执行过程中需要用户输入的信息有若干个输出数据(1~n)一般地,算法都有一个或多个输出数据,因为设计算法的目的就是进行数值运算或进行某种数据处理,给用户输出处理结果是必然的要求有效性在一个算法中,要求每个步骤都能被有效地执行第8页,课件共49页,创作于2023年2月算法的表示用自然语言表示算法(通俗易懂)用流程图表示算法(传统、N-S流程图)用伪代码表示算法用计算机语言表示算法第9页,课件共49页,创作于2023年2月流程图表示法

用图形符号配合文字说明表示各种操作起止框输入输出框处理框判断框流程线第10页,课件共49页,创作于2023年2月例:输入三个数,然后输出其中最大的数盒图(NS图)第11页,课件共49页,创作于2023年2月程序基本结构与结构化程序设计算法程序基本结构结构化程序设计的基本方法第12页,课件共49页,创作于2023年2月程序基本结构顺序结构选择结构循环结构结构化程序:由三种基本结构反复嵌套构成的程序叫~第13页,课件共49页,创作于2023年2月顺序结构

ABAB流程图N-S反映了若干模块(语句)之间连续执行的顺序第14页,课件共49页,创作于2023年2月选择结构二分支选择结构PAB真假PBA真假PA真假(a)(b)第15页,课件共49页,创作于2023年2月多分支选择结构kA1A2AiAnk=k2k=k1k=knk=ki......由某个条件的取值来决定执行两个(多个)模块中的哪一个第16页,课件共49页,创作于2023年2月循环结构当型循环结构直到型循环结构PA假真当P为真AAP真假A直到P为真根据某个条件的取值(成立与否)重复执行特定的模块区别:当型先判断,再决定是否执行;直到型先执行,再判断是否继续循环,至少执行一次第17页,课件共49页,创作于2023年2月对于三种基本结构的说明:

三种结构均只有一个入口和一个出口结构中的A、B操作都是广义的,可以是一个操作,也可以是另一个基本结构或几种基本结构的组合结构内不存在死循环第18页,课件共49页,创作于2023年2月程序基本结构与结构化程序设计算法程序基本结构结构化程序设计的基本方法第19页,课件共49页,创作于2023年2月结构化程序设计方法自顶向下、逐步细化模块化设计结构化编码第20页,课件共49页,创作于2023年2月基本结构程序设计程序的基本结构顺序结构程序设计选择结构程序设计循环结构程序设计程序设计举例第21页,课件共49页,创作于2023年2月顺序结构程序设计顺序执行语句数据的输入输出顺序结构程序举例第22页,课件共49页,创作于2023年2月顺序执行语句C程序是由语句组成,每个语句以分号结束顺序结构的程序会按照语句书写的顺序执行C语句分类:控制语句表达式语句函数调用语句空语句复合语句第23页,课件共49页,创作于2023年2月如:if(x>y)

if(x>y)

意义不同

z=x;

{

x++;z=x;y--;x++;}y--;

表达式语句表达式后面加”;”构成a=2x=y+1i++a=2;x=y+1;i++;函数调用语句函数名(参数);

printf(“%d”,x);空语句;复合语句

用{}把一些语句括起来,相当于一个语句第24页,课件共49页,创作于2023年2月顺序结构程序设计顺序执行语句数据的输入输出顺序结构程序举例第25页,课件共49页,创作于2023年2月数据输入输出C语言无I/O语句,I/O操作由库函数实现使用库函数时,用预编译命令将有关“头文件”包含到源文件中标准输入输出库函数:“stdio.h”文件源文件开头应有以下预编译命令:

#include<stdio.h>#include"stdio.h"

(P219)第26页,课件共49页,创作于2023年2月1.putchar函数(字符输出函数)格式:putchar(c)参数:c为字符常量、变量或表达式功能:把单个字符c输出到显示器上运行结果:AB#include<stdio.h>voidmain(){intc;chara;c=65;a='B';putchar(c);putchar('\n');putchar(a);}例若无文件包含编译预处理,在编译连接时系统将指出:LinkingError:Undefinesymbol‘_putchar’inmoduelXXX.c第27页,课件共49页,创作于2023年2月另:putchar()函数还可以输出控制字符如:‘\n’或‘\012’

‘\a’或‘\007’

‘\r’或‘\015’

换行

响铃

回车#include"stdio.h"voidmain(){chara='A',b='B',c='\007';

putchar(a);putchar(b);putchar('\n');

putchar(c);putchar(65);putchar(66);putchar('\007');}运行结果:AB

响铃AB

响铃第28页,课件共49页,创作于2023年2月格式:getchar()功能:从键盘读一字符返值:正常,返回读取的代码值;出错,返回EOF(-1)2.getchar函数(字符输入函数)例

#include<stdio.h>voidmain(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x\n",c,c);}运行结果:Enteracharacter:A

A--->hex41第29页,课件共49页,创作于2023年2月输出表列:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:由双引号括起来的一串字符(格式字符串和普通字符)

◆普通字符或转义序列:原样输出

◆格式字符串:%[修饰符]格式字符,用于指定输出格式

格式字符

★d格式符:按十进制格式输出

★f格式符:按实数格式输出

★c格式符:以字符形式输出一个字符

格式:printf(“格式控制串”,输出表列)功能:按指定格式向显示器输出数据说明:标准库函数,函数原型在头文件“stdio.h”中

3.

printf函数(格式输出函数)

第30页,课件共49页,创作于2023年2月a第31页,课件共49页,创作于2023年2月dx,Xoucse,Efg%%格式字符:十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身inta=567,b=12;printf(“%d,%d”,a,b);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=567;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);567,12ff101567AABC5.677890e+02567.789000567.789%说明 格式字符要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换:格式字符与输出项类型不一致,自动按指定格式输出第32页,课件共49页,创作于2023年2月附加格式说明符(修饰符)m.n-.n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数修饰符功能m输出数据域宽,数据长度<m,左补空格;否则按实际输出输出数据在域内左对齐(缺省右对齐)-指定在有符号数的正数前显示正号(+)+输出数值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0x#在d,o,x,u前,指定输出精度为long型在e,f,g前,指定输出精度为double型l第33页,课件共49页,创作于2023年2月

inta=1234;floatf=123.456;charch=‘a’;printf(“%8d,%2d\n”,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);printf(“%3c\n”,ch);运行1234,1234结果:123.456000,123.456000,123.5,123.46,1.23e+02

a例m.n第34页,课件共49页,创作于2023年2月

inta=1234;floatf=123.456;

printf(“%-8d,%8d\n”,a,a);printf(“%10.2f,%-10.1f\n”,f,f);

运行结果:1234____,____1234

____

123.46,123.5_____

例-第35页,课件共49页,创作于2023年2月格式:scanf(“格式控制串”,地址表列)功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束返值:正常,返回输入数据个数说明:标准库函数,函数原型在头文件“stdio.h”中地址表列:变量的地址,用取地址运算符&格式字符:d,o,x,u,c,s,f,e4.scanf函数(格式输入函数)

例inta;scanf(“%d”,&a);

输入:10

则a=10例floata;scanf(“%f”,&a);

输入:3.14

则a=3.140000例chara;scanf(“%c”,&a);

输入:m

则a=‘m’第36页,课件共49页,创作于2023年2月附加格式说明符(修饰符)l修饰符功能hm*用于d,o,x前,指定输入为short型整数用于d,o,x前,指定输入为long型整数用于e,f前,指定输入为double型实数指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量例scanf(“%4d%2d%2d”,&yy,&mm,&dd);

输入19991015

则1999yy,10mm,15dd例scanf(“%3d%*4d%f”,&k,&f);

输入12345678765.43则123k,8765.43f例scanf(“%2d%*3d%2d”,&a,&b);

输入1234567

则12a,67b例scanf(“%3c%2c”,&c1,&c2);

输入abcde

则‘a’c1,‘d’c2第37页,课件共49页,创作于2023年2月输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);

输入123123123

输出a=123,b=83,c=291例scanf(“%d:%d:%d”,&h,&m,&s);

输入12:30:45

则12h,30m,45s例scanf(“%d,%d”,&a,&b)

输入3,4

则3a,4b例scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);

输入a=12,b=24,c=36第38页,课件共49页,创作于2023年2月说明:用“%c”格式符时,空格和转义字符作为有效字符输入如scanf(“%c%c%c”,&c1,&c2,&c3);

若输入abc

则ac1,

c2,bc3输入数据时,遇以下情况认为该数据结束:遇空格、TAB、或回车遇宽度结束遇非法输入如scanf(“%d%c%f”,&a,&b,&c);

若输入1234a123o.26

则1234a,‘a’b,123c输入函数留下的“垃圾”:例intx;charch;scanf(“%d”,&x);ch=getchar();printf(“x=%d,ch=%d\n”,x,ch);执行:123

输出:x=123,ch=10解决方法:(1)用getchar()清除(2)用格式串中空格或“%*c”来“吃掉”例intx;charch;scanf(“%d”,&x);scanf(“%c”,&ch);或scanf(“%*c%c”,&ch);

第39页,课件共49页,创作于2023年2月顺序结构程序设计顺序执行语句数据的输入输出顺序结构程序举例第40页,课件共49页,创作于2023年2月#include<math.h>#include<stdio.h>main(){floata,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);printf("area=%7.2f\n",area);}例1输入三角形边长,求面积输入:3,4,6

输出:a=3.00,b=4.00,c=6.00s=6.50area=5.33文件包含预处理命令变量定义输入数据输出数据第41页,课件共49页,创作于2023年2月例2从键盘输入大写字母,用小写字母输出/*ch3_13.c*/#include"stdio.h"main(){charc1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1+32;printf("%c,%d\n",c2,c2);}输入:A

输出:A,65a,97第42页,课件共49页,创作于2023年2月[例]输出两个整型变量交换前后的值。分析:所需的变量:整型变量ainta

整型变量bintb

中间变量tempinttemp//用来两个值交换时作临时保存用算法:1、先把a的值保存到:temp=a2、把b的值赋给a:a=b;3、把temp中保存的a值给b:b=temp;第43页,课件共49页,创作于2023年2月

main(){inta,b;scanf(“%d,%d",&a,&b);printf("origenalnumber:\na=%d,b=%d\n",a,b);

{inttemp;temp=a;a=

温馨提示

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

评论

0/150

提交评论