已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计 -程序设计初步,C 语句可以分为5类: 1、控制语句-9种 2、函数调用语句 3、表达式语句 4、空语句-什么也不做 5、复合语句-用括起来,if ( )else 条件语句 for( ) 循环语句 do while ( ) 循环语句 while ( ) 循环语句 continue 结束本次循环 break 中止执行switch或循环语句 switch 多分支选择语句 goto 转向语句 return 从函数返回语句,九种控制语句,表示算法的三种基本结构,1966年,Bohra和Jacopini提出了程序中需要的三种控制结构 顺序结构 选择结构 循环结构, 顺序结构程序举例,/*ch3_12.c*/ #include #include main() float a,b,c,s,area; scanf(“%f,%f,%f“, ,例1、 输入三角形边长,求面积,输入:3,4,6 输出:a= 3.00, b= 4.00, c= 6.00 s= 6.50 area= 5.33,例2、 从键盘输入大写字母,用小写字母输出,/*ch3_13.c*/ #include “stdio.h“ main() char c1,c2; c1=getchar(); printf(“%c,%dn“,c1,c1); c2=c1+32; printf(“%c,%dn“,c2,c2); ,输入:A 输出:A,65 a,97,/*ch3_14.c*/ #include #include main() float a,b,c,disc,x1,x2,p,q; scanf(“a=%f,b=%f,c=%f“, ,输入:a=1,b=3,c=2 输出:x1=-1.00 x2=-2.00,if语句有三种形式: 1) if(表达式)语句,if语句,例:if(xy)printf( “ %d”,x);,选择结构,2) if(表达式)语句1 else 语句2,例: if(xy)printf(“ %d”,x); else printf( “ %d”,y);,选择结构,if语句,3) if(表达式1)语句1 else if(表达式2)语句2 else if(表达式3)语句3 else 语句n,选择结构,if语句,说明: 1. if后的表达式必须用( )括住,表达式一般为逻辑表达式或关系表达式。 2. 在每个else前面有一分号,整个语句结束处有一分号。 3. 在if和else后面只含一个内嵌的语句,如果有多个语句,应用花括号 将几个语句合成为一个复合语句。在 外面不需要再加分号。,选择结构,由小到大输出两个数,main( ) float a,b,t; scanf(“%f,%f”, ,问题:(1)语句中,取消复合语句会出现什么结果?,选择结构,例 1 、由小到大输出三个数,main( ) float a,b,c,t; scanf(“%f,%f,%f”, , 选择结构程序举例,main( ) float x; int y; scanf(“%f”, 它可改写为:,main( ) float x; int y; scanf(“%f”, ,一般形式: if( ) if( ) 语句1 else 语句2 else if( )语句3 else 语句4 从最内层开始,else总是与它上面最近的未曾配对的if配对。如:上例改为:,if语句的嵌套,main( ) float x; int y; scanf(“ %f”, ,main( ) float x; int y; scanf(“ %f”, , if(x0) y=1; /*可加花括号来避免逻辑错,引例 if(ab)max=a;else max=b; /*给同一变量赋值的情况可用条件表达式: max=(ab)?a:b; 条件运算符:? : 条件表达式的一般形式: 条件?表达式1:表达式2,条件运算符,执行过程 判断条件 若为非0,求解表达式1并以它作为整个表达式的值; 若为0,求解表达式2并以它作为整个表达式的值,条件运算符的级别先于赋值号,低于算术和关系。 如:x=ab?a:b+1相当于: x=(ab)?a:(b+1),条件运算符的结合方向为自右向左。 如:ab?a:cd?c:d相当于:ab?a:(cd?c:d); 若a=1,b=2,c=3,d=4,表达式的值为:4,条件表达式不能取代一般的if语句 if(ab)printf(“ %d”,a);else printf(” %d”,b);它不能用条件表达式,但可写成: printf(“ %d”,ab?a:b);,条件表达式中三个表达式的类型可以不同 如: a ?1:1.5,main( ) char ch; scanf(“ %c”, ,将大写字母转换成小写,其他不转换,条件运算符使用举例:,一般形式: switch(表达式) case 常表1:语句1;break; case 常表2:语句2 ;break; case 常表n:语句n ;break; default: 语句n+1; ,switch语句/多分支选择语句,switch后表达式可以任何类型 case后是常量表达式,且须互不相同 case的次序可任意 执行完一个case后的语句后转向下一个case后的语句执行 break语句可中止 switch语句的执行 多个 case可共用一组执行语句。如: case A:case B:case C: printf(“ 60n”);break;,说明:,执行下列程序后,变量k的正确结果是 。 int k=10; switch(k) case 9:k+=1; case 10:k+=1; case 11:k+=1; default:k+=1; A.10 B.11 C.12 D.13 E.14,Switch语句应用,一、将下列条件写成C逻辑表达式: 1x1010和x-yb ab)=c a-b=c,练习题,三变量说明:int a=3,b=1,x=2,y=0;则: (ab)&(xy) ay (y|b)&(y|a) y|b&y|a !a|ab,练习题,1.C语言中相等关系用运算符“= =“表示,试问对于下列if语句 int a=1,b=2; if(a=b)printf(“A is equal to B.n“); 在编译时,C编译程序 指出该语句有语法错误。 A能 B.不能 2下列选项中从语法上讲合法的if语句是 (设 int x,a,b,c;)。 Aif(a=b) x+; B. if(a=b) x+; E. if(a=b=c) x+; F. if(1) x+;,练习题,3.下列关于switch语句和break语句的结论中,只有 是正确的。 Abreak语句是switch语句中的一部分 B在switch语句中可以根据需要使用或不使用break语句 C在switch语句中必须使用break语句 D以上三个结论中有两个是正确 7如下三个条件语句中(其中s1和s2表示是C语言的语句),它们描述的功能是否等价 。 A.if(a) s1; else s2; B. if(a=0) s2; else s1; C. if(a!=0) s1; else s2; D.等价,3.阅读程序写出执行结果 main() int a,b,c; a=2;b=3;c=1; if(ab) if(ac) printf(“%dn“,a); else printf(“%dn“,b); printf(“endn“); ,用 goto语句和 if语句实现循环 goto语句的一般形式:, 循环结构程序设计,goto 语句标号(标识符),main( ) int n,sum=0; n=1; loop: if(n=100) sum=sum+n; n+; goto loop; printf(“ sum= %d”,sum); ,例 求1+2+3+100,1循环结构 满足某一条件P时循环即反复执行A操作。直到P条件为假时停止循环。,当型循环,2C语言表达式 while语句,注:循环体中若有多个语句,则需用复合语句。,例1:从键盘输入十个整数,求这十个整数的和。 #include main() int count=0,num,total=0; while(count10) count+; /* 计数器 */ printf(“Enter the No. %d=“,count); scanf(“%d“, ,1循环结构 先执行A操作,再判断条件P是否为真,若为真,再执行A,如此反复,直到P为假为止。,直到型循环,一般形式:do 语句 while(表达式),2.C语言表达式 dowhile 语句,注:循环体中若有多个语句,则需用复合语句。,main( ) unsigned int number; printf(“Input the number:“); scanf(“%d“, ,例2:输入一个正整数,要求以相反的顺序输出该数。,1.循环结构:,计数型循环,2.C语言表达式,注:循环体中若有多个语句,则需用复合语句。,1) 先求表达式1 2)求表达式2,若为非0, 执行循环体;否则出循环 3)执行循环体后求解表达式3 4)转2),3. 执行过程,main( ) int t=1,n,j=2; scanf(“%d”, ,例 求n!,#include main( ) char c; for(;(c=getchar()!=n;) printf(“%c”,c); 输入:Computer 输出:Computer,例、输出键盘输入的字符,例3:求解2的n(09)次幂。其中,for循环体又套了一个for语句。,多重循环,#include main() int m,k,c,i; for(m=2,k=0;k=9;k+) c=1; for(i=1;i=k;i+) c*=m; printf(“%d%d=%dn“,m,k,c); ,执行结果:,问题: 语句的作用是什么?能否放在第一个循环外? 当第一次执行外层for循环语句时k值为零,此时是否进入内循环?注意语句的作用。,break和continue概念,1.break语句的作用是什么? 在switch语句中结束case子句,使控制转到switch语句之外。 在循环以及的循环体中使用,结束循环过程,使控制转移到整个循环语句之外的下一条语句处。 在多层嵌套的循环中,break语句仅能退出一层循环,即只能退出所在的循环体。如果要从最内层的循环跳到最外层,就必须多次使用break语句,或者用goto语句。 在循环体中break语句通常是与if 语句共同使用,当某个条件成立(或不成立),则执行break语句退出循环。 如果在循环语句中包含了switch语句,那么switch语句中的break语句仅仅能使控制退出switch语句,而不会使控制退出包含switch语句的循环语句。,break和continue概念,2continue语句的作用是什么? continue语句仅能在循环语句中使用,功能与break语句类似。但它的作用不是结束循环,而是开始一次新的循环。 对于for语句而言是将控制转到实行增量处理和条件测试部分、对于while和 do-while语句是将控制转到条件测试部分。,#include “math.h” main( ) int n=100,j,k; for(;nk)printf(“%d is a prime numbern”,n); ,例 求100200中的素数,注意: break和continue不同用法,例题阅读程序,写出程序的输出结果,#include main() int x=1,j=1; for(;x10) break; if(x2!=0) x+=3; continue; x-=1; printf(“x=%d,j=%dn“,x,j); ,X=12,j=10,算法概念 做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,称为算法(Algorithm),第二部分 程序设计应用的常用算法,一、递推法,利用前项和后项的相互关系求新项的过程称为“递推”。,分析: 初始条件: F1=1 n=1 F2=1 n=2 递推条件: Fn=Fn-1+Fn-2 n3,例 求Fibonacci数列, 0,1,1,2,3,5,8,13的前40个数。,流程图:,利用前项和后项的相互关系求新项的过程称为“递推”。,main( ) long int f1,f2; int k; f1=1;f2=1; for(k=1;k=20;k+) printf(“12ld 12ld “,f1,f2); if(k2=0)printf(“n“); f1=f1+f2; f2=f2+f1; ,程序:,问题:,2)语句中,if(k2=0)printf(“n“);起什么作用?,1) f1,f2为什么采用长整型变量?,3)语句能否调换?,4)语句等号右边的f1值与语句等号右边的f1值是 否相同?,级数展开式计算,例:级数ex的前m+1项之和的展开式为:,ex=,采用递推法:从前一项推出后一项结果 第k项tk= 可由前一项求得,即: tk=tk-1,ex=,因此,可采用如下算法: 令 t0=1, 则:t1= t0*(x/1),t2t1*(x/2),t3= t2*, tk=tk-1*(x/k),ex=,main() int k,m; float x,s,t; printf(“input m ,ex=,问题: for循环体中(1)和(2)语句顺序能否调换?调换后会产生什么样的结果?,利用前项和后项的相互关系求新项的过程称为“递推”,二、穷举法,将所有可能的方案都一一测试,找出其中符合要求的。,用途: 求数学上的整数方程、不定方程、或其它方法无法解决时的一种方法。,分析: 设 : 公鸡x只 、母鸡y只 、小鸡z只 根据条件列出方程:,例百鸡问题。公鸡每只5元,母鸡每只3元,小鸡每3只1元,用100元买100只鸡,问公鸡、母鸡、小鸡各多少?,流程图:,main() int x,y,z; for (x=1;x=19;x+) for (y=1;y=33;y+) z=100-x-y; if(z%3=0) ,程序baiji.c,三、求两个正整数的最大公约数,采用欧几里得的辗转相除的方法,用途: 求数学上的整数方程、不定方程、或其它方法无法解决时的一种方法。,三、求两个正整数的最大公约数,main( ) int m,n,t,r; scanf(“ %d,%d”, ,程序,四、求最大(小)值,求一批数的最大(小)值。可采用“擂台赛”中的淘汰法。设立一个变量作为“擂台” ,然后两两数据比较大小,大的留下(暂时占据擂台),小的淘汰。最后一个占据擂台的就是最大值。,例:某市物理竞赛决赛有56名选手参加,求第一名获得者的编号和成绩。,四、求最大(小)值,算法描述: 变量number存放编号,score存放分数 max存放最高分,maxnum存放最高分者的编号。,main() int max=0,maxnum=0,k,score,number; for(k=1;kmax) max=sco
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部编本二年级上册语文第二至七单元(内容含课文口语交际及语文园地)全部教案
- 城市规划学徒指导手册
- 油气勘探钻探施工合同
- 劳务派遣员工健康检查
- 汽车制造锅炉房施工合同
- 环保项目严禁参与虚假环保承诺
- 硫酸厂宿舍楼施工协议
- 科技园区研发创新车库改造协议
- 石油公司出纳人员聘用合同
- 室内运动场地坪施工协议
- 轨道检测技术-钢轨探伤
- 视觉训练与康复方法
- 血液透析室对血透过程中患者低血压原因分析品管圈鱼骨图柏拉图
- 公务员考试行测模拟试题及答案解析2
- 工程造价管理期末试卷及答案
- 实验五脊髓反射的基本特征和反射弧的分析
- 翻译策略完整
- 材料类专业虚拟仿真实验项目建设与应用
- 关于铸牢中华民族共同体意识发言材料【六篇】
- 产品报价流程
- 考勤表(A4打印-通用-简洁)
评论
0/150
提交评论