C04-选择程序设计_第1页
C04-选择程序设计_第2页
C04-选择程序设计_第3页
C04-选择程序设计_第4页
C04-选择程序设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

第四章选择结构程序设计4.1选择结构和选择判断4.2if语句4.3关系运算符和关系表达式4.4逻辑运算符和逻辑表达式4.5条件运算符和条件表达式4.6选择结构的嵌套4.7switch语句4.8选择结构举例第四章选择结构程序设计根据所指定的条件是否满足,决定从给定的条件中执行相应的操作。选择结构是用if语句实现的。

If(关系表达式)

语句1else

语句2PAB真假PBA真假选择结构kA1A2AiAnk=k2k=k1k=knk=ki......二分支选择结构多分支选择结构4.3关系运算符和关系表达式 关系运算符为“二目运算”符,即将两个数做比较,根据比较结果的“真”、“假”决定程序执行的顺序。1.关系运算符: <、>、<=、>=、==、!=

关系运算符的优先级:

<、>、<=、>=、(高)==、!=(低)关系运算符与其它运算符的优先级:

算术运算符关系运算符赋值运算符 如有括号,应先做括号。 用关系运算符连接的表达式称为关系表达式。关系表达式的结果都是逻辑值。例:c>a+b; a>b==c;(a=3)>(b=5);4.1.2.关系表达式例: main {inta,b;

scanf(“%d,%d”,&a,&b); if(a<b)a=b;

printf(“max=%d”,a\n);}4.2、逻辑运算符和逻辑表达式:

逻辑运算符中的操作数是逻辑值,结果也是逻辑值。逻辑运算符包括:

&&(逻辑与)

||(逻辑或)!(逻辑非)

其中“&&”和“||”为双目运算,“!”为单目运算,仅对其右边的对性进行逻辑反运算。 运算规则:

a&&b若a、b的值为真,则结果为真。

a||b若a、b之一为真,则结果为真。

!a若a为真,则结果为假。

C语言规定:以“0”为假,非“0”为真。运算规则

运算优先级为:

非 算术运算符 关系运算符 与、或 赋值运算符 例:5>3&&2||8<4-!0逻辑运算真值表

a b !a !b a&&b a||b T T F F T T T F F T F T F T T F F T F F T T F F

4.2.2、条件运算符:

在选择结构中,也可以使用条件运算符。条件运算符为三目运算符“?”。 格式:表达式1?表达式2:表达式3 执行条件表达式的过程是:

先计算表达式1的值,如果该值为真(非0),则计算表达式2的值,其该值就是条件表达式的值,若表达式1的值为假真(0),则计算表达式3的值,并将该值作为条件表达式的值。例:max=(a>b)?a:b;

功能:如果a>b条件为真,

max=a,

否则

max=b。有:a=5,b=6;则max=a>b?a+5:b-5;if语句(条件选择语句)if语句的三种形式形式一:格式:if(expression)statement执行过程:4.3

选择型程序设计exprstatement非0=0例:if(x>y)

printf(“%d”,x);/*专业上判定交会角*/If(a<30)

printf(“交会角过小”);If(a>150)

printf(“交会角过大”);形式二:格式:if(expression)statement1elsestatement2执行过程:exprstatement1statement2非0=0例:if(x>y)max=x;elsemax=y;例:if(r>360)r-=360;elser=r;形式三:格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0执行过程:例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;例:(三角测量测角中误差)if(p=2.5)grade=“四等”

elseif(p=1.8)grade=“三等”

elseif(p=1.0)grade=“二等)如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);说明:if后面的表达式类型任意语句可以是复合语句

if(x)if(x!=0)if(!x)if(x==0)例考虑下面程序的输出结果:#include<stdio.h>main(){intx,y;

scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;

printf(“%d,%d\n”,x,y);}CompileError!#include<stdio.h>main(){intx,y;

printf("Enteraninteger:");

scanf("%d",&x);y=x;if(y<0)y=-y;

printf("\ninteger:%d--->absolutevalue:%d\n",x,y);}例求一个数的绝对值运行:Enteraninteger:-12integer:-12--->absolutevalue:12#include<stdio.h>main(){inta,b;

printf("Enterintegera:");

scanf("%d",&a);

printf("Enterintegerb:");

scanf("%d",&b);if(a==b)

printf("a==b\n");else

printf("a!=b\n");}例输入两个数并判断两数相等否运行:Enterintegera:12

Enterintegerb:12a==b运行:Enterintegera:12

Enterintegerb:9a!=b注意:

实数比较

if(fabs(a-b)<1e-3)

printf(“aisequalb”);#include<stdio.h>main(){charc;

printf("Enteracharacter:");c=getchar();if(c<0x20)printf("controlcharacter\n");elseif(c>='0'&&c<='9')printf("digit\n");elseif(c>='A'&&c<='Z')printf("capitalletter\n");elseif(c>='a'&&c<='z')printf("lowerletter\n");elseprintf("othercharacter\n");}例判断输入字符种类运行:Enteracharacter:

Thecharacterisacontrolcharacter运行:Enteracharacter:8Thecharacterisadigit运行:Enteracharacter:DThecharacterisacapitalletter运行:Enteracharacter:hThecharacterisalowerletter运行:Enteracharacter:F1Thecharacterisothercharacterif语句嵌套:一般形式:if(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1)if(expr2)statement1elsestatement3

内嵌ifif(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4内嵌if内嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4内嵌if例输入两数并判断其大小关系#include<stdio.h>main(){intx,y;

printf("Enterintegerx,y:");

scanf("%d,%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");elseprintf("X<Y\n");

else

printf("X==Y\n");}运行:Enterintegerx,y:12,23X<Y

Enterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Yif~else配对原则:缺省{}时,else总是和它上面离它最近的未配对的if配对if(……)if(……)if(……)else…...else…...else…...例: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正确配对方法:加{}例考虑下面程序输出结果:main(){intx=100,a=10,b=20;

intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;

printf(“%d”,x);}结果:-1switch语句(开关分支语句)一般形式:switch(表达式){caseE1:

语句组

1;

break;

…….caseEn:

语句组

n;

break;[default:

语句组;break;]}执行过程:switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase说明:E1,E2,…En是常量表达式,且值必须互不相同语句标号作用,必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句如:……case‘A’:case‘B’:case‘C’:

printf(“score>60\n”);break;……..例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}运行结果:score为5时,输出:

Verygood!Good!Pass!Fail!dataerror!例voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}

printf(“\na=%d,b=%d”,a,b);}运行结果:a=2,b=1#include<stdio.h>main(){intc;

printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}}例根据输入字母输出字符串儒略日的计算方法floatjde(int

Y,int

M,int

D,int

hour,int

min,intsec)

{

longintf,g,mid1,mid2;

doubleJ,JDE,A;

if(M>=3)

{

f=Y;

g=M;

}

if(M==1||M==2)

{

f=Y-1;

g=M=12;

};

mid1=floor(365.25*f);

mid2=floor(30.6001*(g+1));

A=2-floor(f/100)+floor(f/400);

J=mid1+mid2+D+A+1720994.5;

JDE=J+hour/24.0+min/1440.0+sec/86400.0;

returnJDE;

};作业1.菜单设计

(将上堂课的程序加在一起,利用菜单实现2.完善上次程序内容

(加入相关的专业判断,如限差)3.角度观测程序GPS测量中两相邻点间的距离要求

等级相邻点最小距离相邻点最大距离相邻点平均距离A1002000300B1525070C54015-10D21510-5E1105-2各等级水准测量精度

水准测量等级MΔ的限值MW的限值一等≤±0.45≤±1.0二等≤±1.0≤±2.0三等≤±3.0≤±6.0四等≤±5.0≤±10.01:5千~1:50万地形图图号的构成每幅1﹕100万地形图划分为:a)1﹕50万:2行、2列b)1﹕25万:4行、4列c)1﹕10万:12行、12列d)1﹕5万:24行、24列e)1﹕2.5万48行、48列f)1﹕1万:96行、96列g)1﹕5千:192行、192列%C2GConvertionofcartesiancoordinates(X,Y,Z)togeographical%coordinates(phi,lambda,h)onaselectedreferenceellipsoiddisp('ReferenceEllipsoidforGeographicalCoordinates');disp('1.InternationalEllipsoid1924');disp('2.InternationalEllipsoid1967');disp('3.WorldGeodeticSystem1972');disp('4.GeodeticReferenceSystem1980');disp('5.WorldGeodeticSystem1984');i=input('SelectNumberofReferenceEllipsoid(1-5):');if((i<=0)|(i>5)),break,endx=input('X=');y=input('Y=');z=input('Z=');a=[63783886378160637813563781376378137];f=[1/2971/298.2471/298.261/298.2572221011/298.257223563];Cart2GeoCart2Geolambda=atan2(y,x);ex2=(2-f(i))*f(i)/((1-f(i))^2);c=a(i)*sqrt(1+ex2);phi=atan(z/((sqrt(x^2+y^2)*(1-(2-f(i)))*f(i))));h=0.1;oldh=0;whileabs(h-oldh)>1.e-12

oldh=h;N=c/sqrt(1+ex2*cos(phi)^2);phi=atan(z/((sqrt(x^2+y^2)*(1-(2-f(i))*f(i)*N/(N+h)))));h=sqrt(x^2+y^2)/cos(phi)-N;endphi=phi*180/pi;b=zeros(1,3);b(

温馨提示

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

评论

0/150

提交评论