




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第3章 基本结构程序设计 主要内容:C语言的基本语句、程序的基本结构。 3.1 基本程序结构和结构化程序设计 科学家沃思(Nikiklaus Wirth)提出一个公式: 数据结构+算法=程序 数据结构:指对数据(操作对象)的描述。 算法:指对操作步骤的描述。 编写程序的本质: 对哪些数据进行什么样的一系列加工就可以达到目标。,2,3.1.1 算法 1算法:是解决问题的一系列操作步骤的集合。,例3.1 求解一元二次方程ax2+bx+c=0(a0)的两个根。 s1:输入数据 a,b,c s2:求根x1,x2 s3:输出结果 可以将求解算法(s2)进行细化设计如下: s2_1:输入数据 a,b,
2、c s2_2:求判别式d的值,d=b*b-4*a*c s2_3:判断:如果d=0,则按实根求法计算: x1=(-b+sqrt(d)/(2*a) x2=(-b-sqrt(d)/(2*a) 否则,按复根求法计算: 实部 r=-b/(2*a) 虚部 p=sqrt(-d)/(2*a),3,例3.2 依次读入30个学生成绩,输出平均成绩及最高成绩,具体算法描述: s1:0=i s2:0=sum,0=max s3:读入一个学生成绩存入score s4:i+1=i s5;sum+score=sum s6:如果score大于max,则score= max s7:如果i小于30,转移至s3 s8: sum/30
3、=average s9:打印average,max,s3,s4,s5,s6,s7这些步骤会被重复执行30次, 变量i用于统计已处理的学生人数 当i值小于30时,流程转至s3读下一个学生成绩 当i值等于30时,所有学生成绩处理完毕,到s8,s9输出结果。,4,3. 算法的特性 算法是解决问题逻辑思路的表述。 同一个问题有不同的解题方法和步骤,设计出不同的算法。 正确的算法应该具备以下特性。 有穷性:包含有限的操作步骤,不能无限制地执行下去; 确定性:算法中所描述的每个步骤都应该是明确的; 有若干个输入数据(0 n) 输入是指在算法执行过程中需要用户输入的信息; 有若干个输出数据(1 n) 一般地
4、,算法都有一个或多个输出数据,因为设计算法的目的就是进行数值运算或进行某种数据处理,给用户输出处理结果是必然的要求。 有效性 在一个算法中,要求每个步骤都能被有效地执行,5,3.1.2 算法的表示 流程图 起止框 处理框 判断框 输入输出框 流程线,6,3.1.3 程序的三种基本结构 结构化程序设计 基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto) 结构化程序:由三种基本结构反复嵌套构成的程序叫 优点:结构清晰,易读,提高程序设计质量和效率 三种基本结构 顺序结构,7,选择结构,二分支选择结构,多分支选择结构,8,循环结构,当型循环结构,直到型循环结构,注:A,B
5、,A1.An可以是一个简单语句,也可以是一个基本结构,9,3.2 顺序结构程序设计 3.2.1 顺序执行语句概述 C程序是由语句组成,每个语句以分号结束。顺序结构的程序会按照语句书写的顺序执行; 语句分类: 控制语句: 控制程序执行流程 表达式语句 a=b+c+d; 函数调用语句:调用函数 空语句: 执行空操作 (只有一个分号) 复合语句: 执行一组语句 用把一些语句括起来,相当于一个语句 如: x1=-(-b+sqrt(d)/(2*a); x2=-(-b-sqrt(d)/(2*a); ,10,3.2.2 数据的输入输出 输入:指将数据送入计算机 输出:指将计算机处理的结果数据送出保存或显示出
6、来。 语言中,数据输入输出是由库函数完成。 使用库函数时,用预编译命令将有关“头文件”包括到源文件中。 标准输入输出库函数: “stdio.h”文件 源文件开头应有以下预编译命令: #include #include stdio.h (p219),11,1. putchar 函数(字符输出函数),格式: putchar( c ) 参数: c为字符常量、变量或表达式 功能:把单个字符c输出到显示器上,#include main() int c; char a; c=65; a=B; putchar(c); putchar(n); putchar(a); ,运行结果:A B,例,12,输出表:要输
7、出的数据(可以没有,多个时以“,”分隔) 格式控制串:包含两种信息 格式说明:%修饰符格式字符,用于指定输出格式 普通字符或转义序列:原样输出 格式字符 d格式符:按十进制格式输出 f格式符:按实数格式输出 c格式符:以字符形式输出一个字符,格式:printf(“格式控制串”,输出表) 功能:按指定格式向显示器输出数据 返值:正常,返回输出字节数;出错,返回EOF(-1) 说明:标准库函数,函数原型在头文件“stdio.h”中,2. printf函数(格式输出函数),13,1.d格式符 %d: 按整形数据的实际长度输出; %md:m为指定的输出字段的宽度,如数据的位数小于m,则左端补以空格,如
8、大于 m,则按实际位数输出; %ld:对长整形数据进行输出; 2.s格式符 %ms:输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出,如串长小于m,则左补空格; %m.ns:输出占m列,但仅取字符串中左端n个字符,这n个字符输出在m列的右侧,左补空格; %-ms %-m.ns 3 f格式符 %f:整数部分全部输出,并输出6位小数;%m.nf: 指定占m列,其中有n位小数,如数值长度小于m,则左补空格。,14,格式:getchar( ) 功能:从键盘读一字符 返值:正常,返回读取的代码值;出错,返回EOF(-1),3. getchar函数(字符输入函数),例,/*ch
9、3_4.c*/ #include main() int c; printf(Enter a character:); c=getchar(); printf(%c-hex%xn,c,c); ,运行结果: Enter a character:A A-hex41,15,格式: scanf(“格式控制串”,地址表) 功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中,并按回车键结束 返值:正常,返回输入数据个数 说明:标准库函数,函数原型在头文件“stdio.h”中,地址表:变量的地址,用取地址运算符 scanf(“%c”, 输入:m 则 a=m,例 float a scanf(“%f”,
10、 输入:3.14 则 a=3.140000,4.scanf函数 (格式输入函数),16,输入分隔符的指定 格式串中两个格式符间有分隔符; 格式串两个格式符无间隔字符,以空格、TAB或回车键作为分隔,例 scanf(“%d:%d:%d”, 输入 12:30:45 则12 h, 30 m, 45 s,例 scanf(“%d,%d”, printf(input a, b, c: ); scanf(%f, %f, %f, ,例3.9输入三角形边长,求面积,input a, b, c: 3,4,6 area= 5.33,18,例3.10 从键盘上输入一个字符,求出它的前导与后继字符,然后按由小到大的顺序
11、输出这些字符及ASCII字符。 注意: 字符的输入/输出函数,在程序包含头文件stdio.h. C语言中字符型和整型数据可以互通,#include void main() char c; int c1,c2; c=getchar(); c1=c-1;c2=c+1; printf(%c,%c,%cn,c1,c,c2); printf(%d,%d,%dn,c1,c,c2); ,19,3.3 选择结构 选择结构:根据条件决定执行两组或多组操作中的一组。 二路分支 if else 语句 多路分支 switch语句 3.3.1 关系运算和逻辑运算 条件:是一个关系表达式或者逻辑表达式 结果是逻辑值:真或
12、假, 用整数1表示“真”,用整数0表示“假”。 1.关系运算 关系运算是一种比较运算,有六个用于进行比较的运算符, 大于 = 大于等于 小于 = 小于等于 = = 等于 ! = 不等于,20,说明: 六个关系运算符都是双目运算符, 如: int a=2,b=3; a100 结果为假。 关系运算运算对象为字符数据,比较按其ASCII码进行 如: 表达式:ab 值为假,21,与数学表达式的区别,(3) 运算符的优先级问题,z=i*i+j*j100 结果为0 z变量的值为0,如: 3x100 数学解释 判断x是否在区间(3,100)之内 C语言解释 按从左向右的次序进行计算 如 x=0 关系运算(3
13、x)的结果取得值0 0100的运算结果为1 整个表达式结果为1,22,2.逻辑运算符与逻辑表达式 由逻辑运算符连接两个(可为一个)运算对象而形成的式子称为逻辑表达式。 在C语言中有三个逻辑运算符 b=0.5; x=0.3; 则 a=x=b的值为,0,例 int i=1, j=7,a; a=i+(j%4!=0); 则a=,2,例 a0 结果为 A100 结果为,1,0,A 65 a 97 附录一,25,3.3.2 if/else 语句形式: if (表达式) 语句1 else 语句2 执行流程: 表达式值真(非0)时,执行语句1; 否则,执行语句2, 无论执行了哪一路分支之后,都执行if的下一条
14、语句;,例 if(xy) max=x; else max=y;,26,1不带else的if语句 形式: if (表达式) 语句 执行过程: 表达式为真(非0)时,执行其后的语句,然后执行if的下一个语句, 否则直接执行if的下一个语句。,例: if(xy) printf(“%d”,x);,27,if语句嵌套: 一般形式:,28,例 输入两数并判断其大小关系,/*ch4_4.c*/ #include void main() int x,y; printf(Enter integer x,y:); scanf(%d,%d, ,运行:Enter integer x,y:12,23 XY Enter
15、integer x,y:12,12 X=Y,29,if else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对,30,3.3.4 条件运算符与条件表达式 条件表达式:实现简单的二路分支结构。 格式: 表达式1?表达式2:表达式3 是C语言中唯一的三目运算符,它要求三个运算对象。 表达式1:一般为逻辑表达式 意义:如果表达式1为真(非0),条件表达式取表达式2的值 如果表达式1为假(0), 条件表达式取表达式3的值。 如:max=(ab)?a:b,例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a break; case E2: 语句组 2; b
16、reak; . case En: 语句组 n; break; default: 语句组 ; break; ,执行过程:,32,说明: E1,E2,En是常量表达式,且值必须互不相同 语句标号作用,必须用break跳出 case后可包含多个可执行语句,且不必加 switch可嵌套 多个case可共用一组执行语句,如: case A: case B: case C: printf(“score60n”); break; .,33,/*ch4_5.c*/ #include void main() int c; printf(Enter m or n or h or other:); c=getcha
17、r(); switch(c) case m: printf(nGood morning!n);break; case n: printf(nGood night!n); break; case h: printf(nHello!n); break; default : printf(n?n); break; ,例 根据输入字母输出字符串,34,例 switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); defaul
18、t : printf(“data error!”); ,运行结果:score为5时,输出: Very good! Good! Pass! Fail! data error!,35,例 #include void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(na=%d,b=%dn,a,b); ,运行结果:a=2,b=1,36,3.4 循环结构程序设计 循环结构是重要的
19、程序结构,它是指对某段程序的重复执行。C语言中提供了三种循环控制语句 while语句 do-while语句 for 语句,37,3.4.1 while语句 while语句用来实现当某个条件满足时,对一段程序进行重复执行的操作(当型循环)。 while语句的一般格式: while (表达式) 语句 当表达式的值为真(非零)时,重复执行语句,直到表达式的值为假,跳出循环。 说明:如果需要重复执行的部分(循环体)为多条语句,则需要构成一个复合语句。,38,例用while循环求1100的和,#include void main() int i,sum=0; i=1; while(i=100) sum+
20、=i; i+; printf(%dn,sum); ,sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050,39,例3.15 计算并输出 , lnx,其中x=1,2,10。,40,例3.16 输入若干个学生成绩,输入-1表示结束,求平均成绩。,用while语句书写的程序如下 #include void main() int i,score,sum=0; i=0; printf(please input score:n); scanf(%d, ,41,在while循环中特别需要注意: 1、防止“死循环”的发生 在循环体中一定要有使得循环逐渐趋向
21、于结束的语句。 例如,在上面的例3.15中,x+; 2、正确使用复合语句 当循环体中包含两个以上的语句时,需要用花括号将这些语句括起来,如例3.15中所示,构成一个复合语句。如果丢掉了这个花括号,编译系统也不会检查出语法错误,因为它可以认为:y=exp(x);这一个语句是需要重复执行的,这样,就客观上造成了“死循环”。,42,例 显示110的平方,/* #include void main() int i=1 ; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; ,运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*
22、7=49 8*8=64 9*9=81 10*10=100,43,3.4.2 do-while语句 一般形式是: do 语句 while (表达式) 执行语句,当表达式为真时(直到型循环)。具体的执行过程是:先执行do之后的语句,然后判断while中的表达式是否为真,若为真,则继续循环,否则,跳出循环(while下面的语句)。,44,例 用dowhile循环求 1100 的和,#include void main() int i,sum=0; i=1; do sum+=i; i+; while(i=100); printf(%dn,sum); ,45,特点:先执行循环体,后判断表达式 说明: 至
23、少执行一次循环体 dowhile可转化成while结构,46,例 while和dowhile比较,#include void main() int i,sum=0; scanf(%d, ,#include void main() int i,sum=0; scanf(%d, ,47,3.4.3 for 语句 for语句是应用最为广泛的循环语句,for 语句的一般形式为: for(表达式1;表达式2;表达式3) 语句 表达式1:循环进行初始化,即给循环的控制变量赋初值。 表达式2:一个逻辑表达式,其作用是给出是否继续循环的条件,如果该表达式为真,则循环继续进行;否则跳出循环。 表达式3:对于循环
24、控制变量进行增量或减量运算的表达式,它使得在有限次数内,循环可以正常结束。 语句:需要重复执行的部分,称为循环体。,48,for语句 一般形式:,for(expr1 ; expr2 ; expr3) 循环体语句;,执行流程:,49,说明: for中expr1, expr2 ,expr3 类型任意可省略,分号;不可省 无限循环: for( ; ; ) for语句可以转换成while结构,expr1; while(expr2) 循环体语句; expr3; ,for(expr1; expr2 ; expr3) 循环体语句; ,50,例 循环嵌套,输出九九表,#include void main()
25、int i,j; for(i=1;i10;i+) printf(%4d,i); printf(n-n); for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j); ,3.4.4 循环嵌套 循环嵌套是在一个循环的循环体中又包含另一个循环语句。,51,for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j);,52,循环的嵌套 三种循环可互相嵌套,层数不限 外层循环可包含两个以上内循环,但不能相互交叉 嵌套循环的执行流程,(1) while() while() . ,(2) do
26、do while( ); . while( );,(3) while() do while( ); . ,(4) for( ; ;) do while(); while() . ,嵌套循环的跳转从外层跳入内层 跳入同层的另一循环 向上跳转,53,3.4.5 break语句和continue语句 1.break语句 break语句在C程序中只能出现在两种场合 其一:用于switch语句中,其作用是跳出switch语句; 其二:是用于循环语句,作用是提前结束循环的执行,54,例3.21 打印出3100之间的所有素数。 #include #include void main() int m,i,k,
27、n=0,flag; for (m=3;m=100;m=m+2) k=sqrt(m); flag=1; for(i=2;i=k;i+) if (m%i=0) flag=0; break; if (flag=1) printf(%5d,m); n=n+1; if (n%10=0) printf(n); printf(n); ,55,2. continue语句 形式: continue ; 只能用于循环语句的循环体中 作用是使执行流程跳过循环体中continue下面的语句,即提前结束本次循环,开始下一次循环。 在while 和do-while语句中,执行continue语句就立即测试是否继续循环的条件。 在for语句中,执行continue语句后,先执行递增表达式3,然后测试继续循环的条件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业互联网网络运维 课件 任务4.4-3 网络安全防护-漏洞扫描
- 田口方法及田口质量工程
- 陕西省安康市汉滨区七校联考2024-2025学年高一下学期期末地理试卷(图片版含部分解析)
- 数学入职试题及答案解析
- 四川中职统招试题及答案
- 台球问题题目及答案
- 瘫痪病人护理试题及答案
- 提醒幸福题目及答案
- 养殖产品管理办法
- 兼职培训管理办法
- 基孔肯雅热防控培训课件
- 火龙罐综合灸疗法
- 国外电网规划设计的经验与启示对标研究
- GB/T 2918-2018塑料试样状态调节和试验的标准环境
- 项目收发文登记表模板
- GB 15196-2015食品安全国家标准食用油脂制品
- GA/T 744-2013汽车车窗玻璃遮阳膜
- GA 898-2010大型焰火燃放作业人员资格条件及管理
- 铁路基本建设项目投资管理办法
- 无敌英语语法(初中)
- 人教版高中英语必修1词汇表(附音标)
评论
0/150
提交评论