您好,欢迎访问三七文档
13、北工大C语言程序设计内部教学课件。(宋凯老师授课)cha2_0901-02x第2章C语言的基本控制结构2.1顺序结构2.2选择结构2.3循环结构2.1顺序结构顺序结构是指按照语句的书写顺序依次执行每条语句的语句结构顺序结构的语句格式:表达式;常见表达式包含:算术运算、关系运算、逻辑运算表达式,赋值表达式,函数调用表达式AB2.2选择结构应用问题根据不同条件,完成不同的计算处理语言支持条件判断的支持关系运算、逻辑运算选择结构选择结构的描述对选择条件的描述对处理分支的描述例1:分析整数绝对值的计算过程。#includeintx,y;printf(“请输入两个整数:”);scanf(“%d%d”,&x,&y);if(x==y)printf(“X等于Y\n”);else{if(xy)printf(“X大于Y\n”);elseprintf(“X小于Y\n”);}}说明x和y是整数条件:关系运算表达式条件分支(真、假)例2:要求:输入两个整数,进行比较;输出比较结果(“等于”,“大于”或“小于”)例3:设y和x有如下函数关系:编写程序,根据输入的x值,求出y的值。y=x(x0时)2(x=0时)3x(xmain(){intx,y;printf(“Enterx:”);scanf(“%d”,&x);if(x0)y=x;if(x==0)y=2;if(xprintf(“x=%dy=%d\n”,x,y);}算法:s1:输入一个整数s2:若x0,执行y←xs3:若x=0,执行y←2s4:若xy←3*xs5:输出x,y条件语句格式:if(条件表达式)语句/*真分支*/else语句/*假分支*/或者if(条件表达式)语句/*真分支*/关键字(保留字)系统已经使用的标识符,如:ifelseintfloat…常用关系运算符?等于==(双等号)?不等!=?大于?小于?大于等于=?小于等于b==c等价于(ab)==cab!=b判断整型变量value是否为偶数value%2==0判断整型变量a是否能被5整除a%5==0注意:字符型数据用它们的ASCII码进行比较关系表达式用关系运算符将两个表达式连接起来的式子关系表达式的值是0或1,0为假,1为真。单分支if语句的执行过程是:先求“表达式”的值,其值为真(非0)时,则执行“语句”,然后执行if语句后的下一条语句;其值为假(0)时,则直接执行if语句后的下一条语句。表达式语句0非0单分支执行过程双分支if语句的执行过程是:先求“表达式”的值;其值为真(非0)时,则执行“语句1”,然后执行if语句后的下一条语句;其值为假(0)时,则执行“语句2”,然后执行if语句后的下一条语句。非00表达式语句1语句2if-else语句的执行过程其他语言现象else子句和最近的if语句匹配分程序结构(复合语句)用{和}包装的一组语句常用于条件分支的描述程序书写格式(强烈推荐)每个语句占一行采用缩进格式描述条件分支和复合语句用制表符(TAB)进行缩进多重(多分支)选择的实现题目从键盘输入三个数,找出最大的一个数。问题的分析数据对象(a,b,c,max)算法流程abacFFTTmax←amax←cbcFTmax←bmax←c输入三个数输出max实现代码#include{inta,b,c,max;printf(\nEnter3integersseparatedbyspace:);scanf(%d%d%d,&a,&b,&c);if(ab)if(ac)max=a;elsemax=c;elseif(bc)max=b;elsemax=c;printf(\nThemaxis:%d,max);}if语句的嵌套使用if语句的嵌套问题:if语句的分支形式,可以嵌套,但容易产生问题。问题出在条件后直接又出现分支语句。例:if(x0)if(y1)z=1;elsez=2;/*这个部分属于哪个if?*/C规定:每个else部分总与它前面最近的(没有配对的)if配对。上例写法不好,易被误解。如果想else部分属于外层的if,可以采用下面加花括号的写法:if(x0){if(y1)z=1;}elsez=2;多情况选择的实现题目:输入一个格式为x+y的二元算术运算(+、-、*、/)表达式,输出这个表达式的计算结果。例如:输入为12.8+13.6输出结果为12.8+13.6=26.4数据结构:floatx,y;charop;switch的使用#includefloatx,y;charop;scanf(“%f%c%f”,&x,&op,&y);switch(op){case‘+’:printf(“%f%c%f=%f\n”,x,op,y,x+y);break;case‘-’:printf(“%f%c%f=%f\n”,x,op,y,x-y);break;case‘*’:printf(“%f%c%f=%f\n”,x,op,y,x*y);break;case‘/’:printf(“%f%c%f=%f\n”,x,op,y,x/y);break;default:printf(“Error:%c\n”,op);}}多路选择结束case分支程序读解新的语言现象switch语句:按照条件表达式求值结果,决定转向哪个case的执行case分支:当条件式的值等于开关值(必须是常量(整型、字符型或枚举))时,执行default分支:在所有case不匹配时,执行(可缺省)break语句:用于结束case分支的执行,转向switch后续语句的执行switch(e)/*条件式*/{casec1:/*常量*/stmt1…。。。casecn:stmtn…default:stmt0…/*语句组}/*语句组中常使用break*/注意:switch语句的每一个case判断,都只负责指明流程分支的入口点,而不负责指定分支的出口点,出口点由编程人员用相应的跳转语句来表明。break是流程跳转语句。e语句1…语句2语句ndefaultC1C2Cn流程图的另一种表示含break语句的情况2.3循环结构描述在指定条件下重复执行某些操作的情形。考虑计算任务从键盘读入5个整数,输出它们的和;设计思路设置一个整型变量,保存整数的和设置另一个变量,保存刚读入的整数每读入一个整数,将它累加到整数和实现需求为5个整数的处理提供循环控制程序例为实现循环,设置变量i,保存循环次数(计数器)。while语句检查条件i控制循环终止循环条件成立时执行循环体中语句循环条件不成立时执行后面的语句#includemain(){intsum,x;inti;/*循环变量*/sum=0;i=0;while(iscanf(“%d”,&x);sum=sum+x;i=i+1;}printf(“sum=%d\n”,sum);}循环结构--while语句格式while(条件表达式)语句/*循环体*/控制逻辑表示为流程图注释表示/*注释*/条件表达式循环体成立不成立上例的另一种实现方法(实现2)讨论内存空间的使用实现1:3个整型变量实现2:6个整型变量算法实现1:存储概念实现2:数学概念程序运行和数学计算区别:存储器和赋值的概念提倡用实现1方法#includemain(){intx1,x2,x3,x4,x5,sum;scanf(“%d%d%d%d%d”,&x1,&x2,&x3,&x4,&5);sum=x1+x2+x3+x4+x5;printf(“sum=%d\n”,sum);}例2-5:从键盘输入10个整数,计算它们的平均值。#includeintsum=0,i=1;intx;/*保存当前输入的数据*/printf(“\nEnter10integers:”);while(iscanf(“%d”,&x);/*读入整数x*/i++;/*累加已输入的数据个数*/sum=sum+x;/*累加输入的数据总和*/}printf(“Theaveragevalueis%lf\n”,sum*1.0/(i-1));}还可写成:(double)sum/(i-1)i为循环控制变量,同时作数据计数例2-5的另一种描述:#includeintsum=0,i;intx;/*保存当前输入的数据*/printf(“\nEnter10integers:”);for(i=1;iscanf(“%d”,&x);/*读入整数x*/sum=sum+x;/*累加输入的数据总和*/}printf(“Theaveragevalueis%lf\n”,sum*1.0/(i-1));}三个特征集于一体的循环语句循环结构--for语句格式:for(初值表达式;条件表达式;增量表达式)只在循环开始时计算一次在每次执行循环体之前先计算,再根据计算结果决定是否执行循环体在循环体执行完一次后计算,用于修改循环条件for语句三要素初值条件改变量执行过程NY条件表达式语句初值表达式增量表达式for语句的说明:for后面括号中的表达式可以部分或全部省略,但两个分号不能省省略表达式1或表达式3,则同while省略表达式2,则为死循环(条件永真)循环体语句可以是一条语句,也可以是一条复合语句例:求出21世纪的所有闰年#includemain()/*阅读该程序*/{inty;for(y=2021;ycontinue;/*不能整除4*/if(0==y%400)printf(“%d\n”,y);/*能整除400*/elseif(0!=y%100)printf(“%d\n”,y);/*能整除4不能整除100*/}}闰年的判定条件闰年是根据地球绕太阳一周的时间计算的。地球绕太阳一周的时间是365天5小时48分46秒。为了使一年里的天数为整数,把365天定为一年。每年余下来的时间积累起来,四年就是23小时15分4秒,已接近一天。把这一天加在二月份中,使其成为29天,并称这一年为闰年。但每个闰年又多了44分56秒,这个数积满400年恰好是三天,因此,每400年应该有97个闰年,所以规定将400年中的第1、2和3个100从中除去。满足下列两种情况之一的年份属于闰年:1、能被4整除,但不能被100整除2、能被400整除假设year为int型变量,表示年份,判是否为闰年?(year%4==0)&&(year%100!=0)||(year%400==0)逻辑运算符&&:逻辑与x=0&&x||:逻辑或x!:逻辑非!(x3)逻辑运算符的操作对象是逻辑值(1或0)C语言中0表示“假”,非0表示“真”运算符的优先级:!级别最高,&&次之,||最低。!是单目运算符,优先级与其他单目运算符相同。&&和||是双目运算符,低于各关系运算符。逻辑运算符与逻辑表达式逻辑运算规则:!表达式“表达式”看作逻辑值,以该值的否定为最后结果。表达式1&&表达式2只有两个表达式的值都非0时,结果为1,否则为0。表达式1||表达式2只有两个表达式的值都为0时,结果为0,否则为1。逻辑表达式的计算结果都是整型的0或1。运算符的先后顺序:!算术运算符关系运算符&&||赋值运算符先后153&&831例:举例x能被3或5整除(x%3==0)||(x%5==0)x能被3且5整除(x%3==0)&&(x%5==0)由a、b、c是否可以构成一个三角形(a+bc)&&(a+cb)&&(b+ca)判ch中的字符是否为大写字母(‘A’=ch&&ch=‘0’)num++;}while(ch!=‘\n’);printf(“num=%d\n”,num);}要点计数器num要赋初始值,且初始值为0只有符合条件的字符才计数判输入是否为回车符决定是否继续循环三种循环的比较共同点:都具备三要素不同点for、while的循环体有可能一次也不执行do-while循环体中的语句至少执行一次2.4循环控制语句break语句出现在循环体中,用于终止循环(最内层);出现在switch语句中,用于终止多路选择;continue语句出现在循环体中,用于终止循环体的本次执行(最内层)goto语句gotolabel;转向执行label指定的语句label:定义在某个语句前;破坏程序的结
本文标题:13、北工大C语言程序设计内部教学课件。(宋凯老师授课)cha2_0901-02x
链接地址:https://www.777doc.com/doc-7842904 .html