太原理工大学测绘C语言程序设计课件(下)_第1页
太原理工大学测绘C语言程序设计课件(下)_第2页
太原理工大学测绘C语言程序设计课件(下)_第3页
太原理工大学测绘C语言程序设计课件(下)_第4页
太原理工大学测绘C语言程序设计课件(下)_第5页
已阅读5页,还剩218页未读 继续免费阅读

下载本文档

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

文档简介

测绘C语言程序设计

第五章2第五章选择结构程序设计一、关系运算符和关系表达式二、逻辑运算符和逻辑表达式三、if语句四、switch语句五、程序举例3第五章选择结构程序设计一、关系运算符和关系表达式在现实生活中如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票处理这些问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断4第五章选择结构程序设计一、关系运算符和关系表达式例求ax2+bx+c=0方程的根。

分析:由键盘输入a,b,c。假设a,b,c的值任意,并不保证b2-4ac>0。需要在程序中进行判别,如果b2-4ac>0,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。输入a,b,c计算discdisc>0计算x1,x2输出无实根输出x1,x2真假5第五章选择结构程序设计一、关系运算符和关系表达式1、关系运算符及其优先级优先级相同(高):<(小于)<=(小于或等于)>(大于)>=(大于或等于)优先级相同(低):==(等于)!=(不等于)说明:关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符

c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)6第五章选择结构程序设计一、关系运算符和关系表达式2、关系表达式用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符表达式)连接起来的式子关系表达式的值是一个逻辑值,即“真”或“假”在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”C语言中没有专用的逻辑值

a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)关系表达式"a>b"的值为“真”,表达式的值为1对字符比较:比较其ASCII不可比较字符串7第五章选择结构程序设计二、逻辑运算符和逻辑表达式1、逻辑运算符及其优先级3种逻辑运算符:&&(逻辑与)相当于其他语言中的AND||(逻辑或)相当于其他语言中的OR!(逻辑非)相当于其他语言中的NOTa&&b若a,b为真,则a&&b为真。a||b若a,b之一为真,则a||b为真。!a若a为真,则!a为假。双目(元)运算符一目(元)运算符8第五章选择结构程序设计二、逻辑运算符和逻辑表达式1、逻辑运算符及其优先级3种逻辑运算符:9第五章选择结构程序设计二、逻辑运算符和逻辑表达式1、逻辑运算符及其优先级逻辑运算符优先级:!(非)>&&(与)>||(或)逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符(a>b)&&(x>y)可写成a>b&&x>y(a==b)||(x==y)可写成a==b||x==y(!a)||(a>b)可写成!a||a>b10第五章选择结构程序设计二、逻辑运算符和逻辑表达式2、逻辑表达式逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的式子逻辑表达式的值应该是一个逻辑量“真”(1)或“假”(0)设a=4,b=5:!a的值为a&&b的值为a||b的值为!a||b的值为4&&0||2的值为在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。0111111第五章选择结构程序设计二、逻辑运算符和逻辑表达式2、逻辑表达式在一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运算的对象,哪些作为逻辑运算的对象。5>3&&8<4-!01&&0逻辑值为08<3逻辑值为04-1值为3!0逻辑值为15>3逻辑值为1表达式值为012第五章选择结构程序设计二、逻辑运算符和逻辑表达式2、逻辑表达式13第五章选择结构程序设计二、逻辑运算符和逻辑表达式2、逻辑表达式在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行a&&b&&c只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。a||b||c只要a为真,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c设:a=1,b=2,c=3,d=4,m=1,n=1(m=a>b)&&(n=c>d)说明:由于a>b的值为0,因此m=0,而n=c>d不被执行,因此n的值不是0而仍保持原值1。14第五章选择结构程序设计二、逻辑运算符和逻辑表达式2、逻辑表达式例用逻辑表达式来表示闰年的条件。

分析:闰年条件能被4整除,但不能被100整除。能被4整除,又能被400整除。(year%4==0&&year%100!=0)||year%400==0

!((year%4==0&&year%100!=0)||year%400==0))

如果表达式值为1,则闰年;否则为非闰年

如果表达式值为1,则非闰年;否则为闰年

(year%4!=0)||(year%100==0&&year%400!=0)

如果表达式值为1,则非闰年;否则为闰年

15第五章选择结构程序设计三、if语句1、if语句的三种形式if(表达式)语句if(表达式)

语句1else

语句2if(表达式1)

语句1

elseif(表达式2)

语句2

elseif(表达式3)语句3…

elseif(表达式m)语句m

else语句n关系表达式逻辑表达式数值表达式if(a==b&&x==y)printf(“a=b,x=y”)if(3)printf("OK");if('a')

printf("%d",'a')整个if语句可写在多行上,也可写在一行上,但都是一个整体,属于同一个语句16第五章选择结构程序设计三、if语句1、if语句的三种形式if(表达式)语句if(表达式)语句1else语句2if(x>y)printf(“%d”,x);if(x>y)printf("%d",x);elseprintf("%d",y);17第五章选择结构程序设计三、if语句1、if语句的三种形式if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3…elseif(表达式m)语句melse语句n“语句1”…“语句m”是if中的内嵌语句,内嵌语句也可以是一个if语句18第五章选择结构程序设计三、if语句1、if语句的三种形式;;;;elsecost=0;;else;else;else;elsecost=0;19第五章选择结构程序设计三、if语句1、if语句的三种形式在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句if

(a+b>c&&b+c>a&&c+a>b){s=0.5*(a+b+c);

area=sqrt(S*(S-a)*(S-b)*(S-c));printf("area=%6.2f",area);}elseprintf("Itisnotatrilateral");20第五章选择结构程序设计三、if语句例5.1输入两个实数,按代数值由小到大的次序输出这两个数。

★●AB互换前●★AB互换后分析:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换21第五章选择结构程序设计三、if语句例5.1输入两个实数,按代数值由小到大的次序输出这两个数。

分析:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换★●ABC★22第五章选择结构程序设计三、if语句例5.1输入两个实数,按代数值由小到大的次序输出这两个数。

分析:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换★●ABC★●23第五章选择结构程序设计三、if语句例5.1输入两个实数,按代数值由小到大的次序输出这两个数。

分析:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换ABC★●★●24第五章选择结构程序设计三、if语句例5.1输入两个实数,按代数值由小到大的次序输出这两个数。#include<>voidmain(){

floata,b,t;

scanf(“%f,%f",&a,&b);

if(a>b){t=a;a=b;b=t;}printf(“%5.2f,%5.2f“,a,b);}

说明:if(a>b):判断两数大小,选择结构,用if语句实现的{t=a;a=b;b=t;}:将a和b的值互换25第五章选择结构程序设计三、if语句例输入3个数a,b,c,要求按由小到大的顺序输出。#include<>intmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);

if(a>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}

分析:ifa>b,a和b对换(a是a、b中的小者)ifa>c,a和c对换(a是三者中最小者)ifb>c,b和c对换(b是三者中次小者)顺序输出a,b,c26第五章选择结构程序设计三、if语句2、if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套if()if()语句1else语句2elseif()语句3else语句4

注意if与else的配对关系else总是与它上面的最近的未配对if配对if()if()语句1elseif()语句2else语句3内嵌if内嵌if内嵌if分析:第一个else是与第二个if配对最好使内嵌if语句也包含else部分,这样if的数目和else的数目相同,从内层到外层一一对应,不致出错。如果if与else的数目不一样,加花括弧来确定配对关系27第五章选择结构程序设计三、if语句2、例有一函数:编一程序,输入一个x值,输出y值。#include<>voidmain(){intx,y;scanf("%d",&x);

if(x<0)y=-1;if(x==0)y=0;

if(x>0)y=1;printf("x=%d,y=%d\n",x,y);}

分析:输入x若x<0y=-1;若x=0y=0;若x>0y=1;输出y

28第五章选择结构程序设计三、if语句2、例有一函数:编一程序,输入一个x值,输出y值。#include<>voidmain(){intx,y;scanf("%d",&x);

if(x<0)y=-1;elseif(x==0)y=0;

elsey=1;printf("x=%d,y=%d\n",x,y);}

分析:输入x若x<0y=-1否则:若x=0y=0;若x>0y=1;输出y

29第五章选择结构程序设计三、if语句2、例有一函数:编一程序,输入一个x值,输出y值。#include<>voidmain(){intx,y;scanf("%d",&x);

if(x>=0)if(x>0)y=1;elsey=0elsey=-1;printf("x=%d,y=%d\n",x,y);}

30第五章选择结构程序设计三、if语句2、例有一函数:编一程序,输入一个x值,输出y值。#include<>voidmain(){intx,y;scanf("%d",&x);y=-1;if(x!=0)

if(x>0)

y=1;elsey=0;printf("x=%d,y=%d\n",x,y);}

{if(x>0)

y=1;}31第五章选择结构程序设计三、if语句3、

条件运算符若if语句中,在表达式为“真”和“假”时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理三目(元)运算符,C语言中唯一的一个三目运算符if(a>b)

max=a;else

max=b;max=(a>b)?a:b;表达式1?

表达式2:表达式3数值表达式

赋值表达式

函数表达式32第五章选择结构程序设计三、if语句3、

条件运算符优先级和结合性:条件运算符优先于赋值运算符条件运算符的优先级别比关系运算符和算术运算符都低条件运算符的结合方向为“自右至左”max=(a>b)?a:bmax=a>b?a:ba>b?a:b+1a>b?a:(b+1)(a>b?a:b)+133第五章选择结构程序设计三、if语句3、

条件运算符条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同例5.4用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换。#include<>voidmain(){charch;scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("%c\n",ch);}

34第五章选择结构程序设计四、switch语句学生成绩分类85分以上为’A’等70~84分为’B’等60~69分为’C’等……人口统计分类:按年龄分为老、中、青、少、儿童35第五章选择结构程序设计四、switch语句Switch语句:多分支选择语句switch语句的作用是根据表达式的值,使流程跳转到不同的语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行switch(表达式){case常量表达式1:语句1case常量表达式2:语句2…case常量表达式n:语句n

default:语句n+1}整型

字符型

枚举型不能相同36第五章选择结构程序设计四、switch语句Switch语句:多分支选择语句break语句:在执行一个case分支后,使流程跳出switch结构,终止switch语句的执行多个case可以共用一组执行语句…case

'a':case

'b':case

'c':

printf(">60\n");break;…37第五章选择结构程序设计四、switch语句switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:printf("Enterdataerror!\n");}值为A38第五章选择结构程序设计四、switch语句switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:printf("Enterdataerror!\n");}值为C39第五章选择结构程序设计四、switch语句switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:printf("Enterdataerror!\n");}值为F40第五章选择结构程序设计四、switch语句switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:printf("Enterdataerror!\n");}值为A85~10070~8460~6960Enterdataerror!41第五章选择结构程序设计五、程序举例例5.5判断某一年是否闰年。#include<>voidmain() {intyear,leap;printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear.\n");}标志变量与if(leap!=0)含义相同采取锯齿形式if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;else

leap=1;if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;42第五章选择结构程序设计五、程序举例例5.6求ax2+bx+c=0方程的解。#include<>#include<>voidmain(){floata,b,c,disc,x1,x2,realpart,imagpart;

scanf(“%f,%f,%f",&a,&b,&c);printf("Theequation");if(fabs(a)<=1e-6)printf("isnotaquadratic\n");分析:共4种情况:a=0,不是二次方程;b2-4ac=0,有两个相等实根;b2-4ac>0,有两个不等实根;b2-4ac<0,有两个共轭复根;应当以p+qi和p-qi的形式输出复根:其中,

p=-b/2a,q=()/2a实型不能用if(a==0)43第五章选择结构程序设计五、程序举例else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6)printf("hastwoequalroots:%8.4f\n",-b/(2*a));elseif(disc>1e-6) {x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2); }else{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("hascomplexroots:\n");printfi\n",realpart,imagpart);printfi\n",realpart,imagpart); }}}先算disc,以减少重复计算不能用if(disc==0)44第五章选择结构程序设计五、程序举例例5.7运输公司对用户计算运输费用。分析:标准如下:s<250没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣解题思路:(1)设每吨每千米货物的基本运费为p,货物重为w,距离为s,折扣为d(2)总运费f的计算公式为f=p×w×s×(1-d)45第五章选择结构程序设计五、程序举例例5.7运输公司对用户计算运输费用。分析:折扣的变化规律(参见教材图):折扣的“变化点”都是250的倍数在横轴上加一种坐标c,c的值为s/250,c代表250的倍数当c<1时,表示s<250,无折扣当1≤c<2时,表示250≤s<500,折扣d=2%当2≤c<4时,d=5%当4≤c<8时,d=8%当8≤c<12时,d=10%当c≥12时,d=15%46第五章选择结构程序设计五、程序举例#include<>voidmain(){

intc,s;floatp,w,d,f;printf("Pleaseenterprice,weight,distance:");scanf("%f,%f,%d",&p,&w,&s);

if(s>=3000)c=12;elsec=s/250;说明:

intc,s:将c和s定义为整型,保证c的值为整数

if(s>=3000)c=12:保证c不随s的增大而增大47第五章选择结构程序设计五、程序举例switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}f=p*w*s*(1-d/);printf("freight=%f\n",f);}当c<1时,d=0%当1≤c<2时,d=2%当2≤c<4时,d=5%当4≤c<8时,d=8%当8≤c<12时,d=10%当c≥12时,d=15%48第五章选择结构程序设计补充:这不是Bug,而是语言特性

Bugsarebyfarthelargestandmostsuccessfulclassofentity,withnearlyamillionknownspecies.Inthisrespecttheyoutnumberalltheotherknowncreaturesaboutfourtoone.——ProfessorSnope’sEncyclopediaofAnimallifeBug是迄今为止地球上最庞大最成功的实体类型,有近百万种已知的品种。在这个方面,它比其他任何已知的生物种类的总和还要多,而且至少多出4倍。——摘自Snope教授的EncyclopediaofAnimallife49第五章选择结构程序设计补充:这不是Bug,而是语言特性50第五章选择结构程序设计习题#include<>main()main(){floatscore;chargrade;printf("请输入学生成绩:");scanf("%f",&score);while(score>100||score<0){printf("\n输入有误,请重新输入:");scanf("%f",&score);}

switch((int)(score/10)){case10:case9:grade=’A’;break;case8:grade=’B’;break;case7:grade=’C’;break;case6:grade=’D’;break;case5:case4:case3:case2:case1:case0:grade=’E’;}printf("成绩是,相应的等级是%c。\n",score,grade);}

习题#include<stdio.h>main(){longintnum;intindiv,ten,hundred,thousand,ten_thousand,place;/*分别代表个位、十位、百位、千位、万位和位数*/printf("请输入一个整数(0~99999):");scanf("%ld",&num);if(num>9999)place=5;elseif(num>999)place=4;elseif(num>99)place=3;elseif(num>9)place=2;elseplace=1;printf("place=%d\n",place);

ten_thousand=num/10000;thousand=num/1000%10;hundred=num/100%10;ten=num%100/10;indiv=num%10;switch(place){case5:printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);printf("\n反序数字为;");printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);break;case4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);printf("\n反序数字为:");printf("%d%d%d%d\n",indiv,ten,hundred,thousand);break;case3:printf("%d,%d,%d",hundred,ten,indiv);printf("\n反序数字为:");printf("%d%d%d\n",indiv,ten,hundred);break;case2:printf("%d,%d",ten,indiv);printf("\n反序数字为:");printf("%d%d\n",indiv,ten);break;case1:printf("%d",indiv);printf("\n反序数字为:");printf("%d\n",indiv);break;}}测绘C语言程序设计

第六章55第六章循环结构程序设计一、概述二、用while语句实现循环三、用do…while语句实现循环四、用for语句实现循环五、循环的嵌套六、几种循环的比较七、break语句和continue语句八、程序举例56第六章循环结构程序设计一、概述在现实生活中或是在程序所处理的问题中常常遇到需要重复处理的问题要向计算机输入测绘C程序设计课程61个学生的成绩分别统计测绘1301、1302、地信1301班的平均成绩教师检查84个学生的成绩是否及格大多数的应用程序都会包含循环结构循环结构和顺序结构、选择结构是结构化程序设计的三种基本结构,它们是各种复杂程序的基本构造单元57第六章循环结构程序设计一、概述用goto语句和if语句构成循环用while语句用do…while语句用for语句58第六章循环结构程序设计二、用while语句实现循环while语句的一般形式如下while循环的特点是:先判断条件表达式,后执行循环体语句while(表达式)语句“真”时执行循环体语句“假”时不执行59第六章循环结构程序设计二、用while语句实现循环例6.2求。

分析:这是累加问题,需要先后将100个数相加要重复99次加法运算,可用循环实现后一个数是前一个数加1而得加完上一个数i后,使i加1可得到下一个数60第六章循环结构程序设计二、用while语句实现循环例#include<>voidmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}printf("sum=%d\n",sum);}

说明:循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。如果不加花括弧,则while语句的范围只到while后面第一个分号处。在循环体中应有使循环趋向于结束的语句。不能少复合语句不能丢,否则循环永不结束61第六章循环结构程序设计三、用do…while语句实现循环do---while语句的一般形式为:do…while语句的特点:先无条件地执行循环体,然后判断循环条件是否成立do语句while(表达式);表达式YN循环体语句62第六章循环结构程序设计三、用do…while语句实现循环例用do…while语句求。

i≤100YNsum=sum+ii=i+1sum=0i=1i=1;sum=0;

do{sum=sum+i;i++;}while(i<=100);

63第六章循环结构程序设计三、用do…while语句实现循环例用do…while语句求。#include<>voidmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("sum=%d\n",sum);}

说明:对同一个问题可以用while语句处理,也可以用do…while语句处理。do…while语句结构可以转换成while结构。64第六章循环结构程序设计例6.4while和do…while循环的比较。

#include<>voidmain(){inti,sum=0;printf(“i=?”);scanf(“%d”,&i);while(i<=10){sum=sum+i;i++;}printf(“sum=%d\n",sum);}#include<>voidmain()inti,sum=0;printf(“i=?”);scanf(“%d”,&i);do{sum=sum+i;i++;}while(i<=10);printf(“sum=%d\n",sum);}i=?1sum=55

i=?11sum=0

i=?1sum=55

i=?11sum=11

当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则不相同65第六章循环结构程序设计四、用for语句实现循环for语句不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况for语句完全可以代替while语句for语句的一般形式为:

for(表达式1;表达式2;表达式3)

语句设置初始条件,只执行一次。可以为零个、一个或多个变量设置初值执行循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环作为循环的调整器,例如使循环变量增值,它是在执行完循环体后才进行的66第六章循环结构程序设计四、用for语句实现循环for语句的执行过程:(1)求解表达式1(2)求解表达式2,若其值为真,执行循环体,然后执行第(3)步。若为假,则结束循环,转到第(5)步(3)求解表达式3(4)转回上面步骤(2)继续执行(5)循环结束,执行for语句下面的一个语句

for(表达式1;表达式2;表达式3)

语句67第六章循环结构程序设计四、用for语句实现循环表达式1省略:表达式1与循环变量无关

for(表达式1;表达式2;表达式3)

语句一个或两个或三个表达式均可以省略for(;i<=100;i++)sum=sum+i;for(sum=0;i<=100;i++)sum=sum+i;

68第六章循环结构程序设计四、用for语句实现循环表达式2省略:

for(表达式1;表达式2;表达式3)

语句一个或两个或三个表达式均可以省略for(i=1;;i++)sum=sum+i;

69第六章循环结构程序设计四、用for语句实现循环表达式3省略:

for(表达式1;表达式2;表达式3)

语句一个或两个或三个表达式均可以省略for(i=1;i<=100;){sum=sum+i;}

for(i=1;i<=100;){sum=sum+i;i++;}

当表达式3省略时,此时程序设计者应另外设法保证循环能正常结束for(i=1,sum=0;i<=100;i++)sum=sum+i;70第六章循环结构程序设计四、用for语句实现循环表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式表达式可以为关系表达式、逻辑表达式,也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体

for(i=0,j=100;i<=j;i++,j--)k=i+j;

for(;(c=getchar())!=′\n′;

)printf(″%c″,c);for(i=0;(c=getchar())!=′\n′;i+=c);

71第六章循环结构程序设计五、循环的嵌套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套内嵌的循环中还可以嵌套循环,这就是多层循环3种循环(while循环、do…while循环和for循环)可以互相嵌套while(){…while(){…}}do{…

do{…}while();}while();for(;;){

for(;;){…}}while(){…do{…}while();…}for(;;){…

while(){}…}do{…for(;;){}}while();72第六章循环结构程序设计六、几种循环的比较一般情况下,3种循环可以互相代替在while和do…while循环中,循环体应包含使循环趋于结束的语句。用while和do…while循环时,循环变量初始化的操作应在while和do…while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。while循型、do…while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环73第六章循环结构程序设计七、break语句和continue语句1、break语句break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句break语句不能用于循环语句和switch语句之外的任何其他语句中for(r=1;r<=10;r++){area=PI*r*r;if(area>100)break;printf("%f",area);}74第六章循环结构程序设计七、break语句和continue语句2、continue语句continue语句只提前结束本次循环,而接着执行下次循环continue语句和break语句的区别:continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立while(表达式1){…if(表达式2)break;…}while(表达式1){…if(表达式2)continue;…}75第六章循环结构程序设计七、break语句和continue语句N表达式1Y表达式2N……Y…………N表达式1Y表达式2NY…………break语句continue语句强行退出循环只结束本次循环76第六章循环结构程序设计七、break语句和continue语句例6.5输出100~200之间的不能被3整除的数。

分析:对100到200之间的每一个整数进行检查如果不能被3整除,输出,否则不输出无论是否输出此数,都要接着检查下一个数(直到200为止)。Nn=100n≤200Yn能被3整除Nn=n+1输出nYfor(n=100;n<=200;n++){if(n%3==0)

continue;printf("%d",n);}分析:

每项的分子都是1

后一项的分母是前一项的分母加2第1项的符号为正,从第2项起,每一项的符号与前一项的符号相反77第六章循环结构程序设计八、程序举例例6.6用π计算公式求π的近似值,直到发现某一项的绝对值小于10-6

为止(该项不累计加)。

sign=1,pi=0,n=1,term=1当term≥10-6pi=pi+termn=n+2sing=-signterm=sign/npi=pi*4输出pi说明:fabs():求绝对值的函数78第六章循环结构程序设计八、程序举例#include<>#include<>voidmain(){intsign=1;doublepi=0,n=1,term=1;while(fabs(term)>=1e-6){pi=pi+term;n=n+2;sign=-sign;term=sign/n;}pi=pi*4;printf("pi=%f\n",pi);}改为1e-8输出只保证前5位小数是准确的输出分析:有趣的古典数学问题有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?

这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。79第六章循环结构程序设计八、程序举例例6.7求费波那西(Fibonacci)数列的前40个数。

80第六章循环结构程序设计八、程序举例#include<>voidmain(){

intf1=1,f2=1,f3;inti;printf("%12d\n%12d\n",f1,f2);for(i=1;i<=38;i++){f3=f1+f2; printf("%12d\n",f3); f1=f2; f2=f3;}}#include<>voidmain(){intf1=1,f2=1;inti;for(i=1;i<=20;i++){printf("%12d%12d",f1,f2);

if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}}分析:让n被i整除(i的值从2变到)如果n能被2~之中任何一个整数整除,则表示n肯定不是素数,不必再继续被后面的整数除,因此,可以提前结束循环注意:此时i的值必然小于n81第六章循环结构程序设计八、程序举例例6.8输入一个大于3的整数n,判定它是否素数(prime,又称质数)。#include<>#include<>voidmain(){intn,i,k;printf("n=?");scanf("%d",&n);

k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;

if(i<=k)printf("%disnot\n",n);elseprintf("%dis\n",n);}

说明:

sqrt(n):平方根函数分析:使用素数判断程序实现对一个数的判断只要增加一个外层循环,先后对100~200间的全部整数一一进行判定即可82第六章循环结构程序设计八、程序举例例6.9求100~200间的全部素数。#include<>#include<>voidmain(){intn,i,k,m=0;for(n=101;n<=200;n=n+2){

k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;

if(i>=k+1){printf("%d",n);

m=m+1;}

if(m%10==0)printf("\n");}printf("\n");}

说明:

sqrt(n):平方根函数m:用m个数控制每行输入个数控制每行输出10个数据只对奇数进行检查分析:非字母字符保持原状不变输入一行字符,要求输出其相应的密码83第六章循环结构程序设计八、程序举例例6.10译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。

ABCDEFG……WXYZ{if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){if(c>='W'&&c<='Z'||c>='w'&&c<='z')c=c-22;elsec=c+4;}}

84第六章循环结构程序设计八、程序举例#include<>voidmain(){charc;while(c=getchar()!='\n'){if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){c=c+4;if(c>='Z'&&c<='Z'+4||c>'z')c=c-26;}printf("%c",c);}}

说明:

sqrt(n):平方根函数

&&c<='Z'+4:因为当字母为小写时都满足c>'Z'条件,从而也执行c=c-26;语句,这就会出错85第六章循环结构程序设计习题#include<>voidmain(){inta,n,sn=0;//题目中a,n由用户输入

inti,b;//b为中间变量,用于存储各个数据项

printf("pleaseinputa:");scanf("%d",&a);printf("pleaseinputn:");scanf("%d",&n);

b=a;for(i=1;i<=n;i++){sn=sn+b;

b=b*10+a;}printf("sn=%d",sn);}

习题#include<>#include<>voidmain(){intn,sn=0,i,a,b;printf("pleaseinputa:");scanf("%d",&a);printf("pleaseinputn:");scanf("%d",&n);b=a;for(i=1;i<=n;i++){ sn=sn+b;b=b+a*pow(10,i);}printf("sn=%d\n",sn);}

86第六章循环结构程序设计习题#include<>voidmain(){intn,i=1;

doublesum=0,s=1;printf("pleaseinputn:");scanf("%d",&n);while(i<=n){ s=s*i;//存放上一个数的阶乘 sum=sum+s; i++;}printf("sum=%f\n",sum);}0300

87第六章循环结构程序设计习题#include<>#include<>voidmain(){floatx0,x1,a;scanf("%f",&a);x0=a/2;do{x1=x0;x0=(x1+a/x1)/2;}while(fabs(x0-x1)>=0.00001);printf("%.3f\n",x0);}

分析:求a的平方根,先假设一猜测值x0

=a/2,然后根据以下公式求出x1,再将x1代入公式右边,继续求出x2…通过有效次迭代后即可求出a的平方根,xn+1测绘C语言程序设计

第七章89第七章数组一、一维数组的定义和引用二、二维数组的定义和引用三、字符数组90第七章数组数组和数组元素数组:将一组排列有序的、个数有限的变量作为一个整体,用统一的名字来表示,这些有序变量的全体称为数组。(1)数组中元素属于同一类型 (2)A[n]:A为数组的名称,n为下标变量,不同的下标表示不同的数据维数:下标变量中下标的个数。91第七章数组

一、一维数组的定义和引用1、一维数组的定义定义一维数组的一般形式为:数组名命名原则同简单变量,但一数组名不可以与某一变量名同名定义数组时,需指定数组元素个数常量表达式:常量、符号常量类型符数组名[常量表达式];inta[10];数组名数组长度inta[4+6];合法intn=10;inta[n];不合法92第七章数组

一、一维数组的定义和引用2、一维数组的引用数组必须先定义,然后使用。在定义数组并对其中各元素赋值后,就可以引用数组中的元素注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值93第七章数组

一、一维数组的定义和引用2、一维数组的引用引用数组元素的表示形式为:下标:整型常量或整型表达式数组名[下标]a[0]=a[5]+a[7]-a[2*3]

intn=5,a[10];a[n]=20;

94第七章数组

一、一维数组的定义和引用2、一维数组的引用例对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。#include<>voidmain(){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d",a[i]);printf("\n");}

分析:定义一个长度为10的数组,数组定义为整型要赋的值是从0到9,可以用循环来赋值用循环按下标从大到小输出这10个元素使a[0]~a[9]的值为0~9a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]先输出a[9],最后输出a[0]95第七章数组

一、一维数组的定义和引用3、一维数组的初始化在定义数组的同时,给各数组元素赋值定义数组的同时给一部分元素赋值inta[10]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4};相当于

inta[10]={0,1,2,3,4,0,0,0,0,0};inta[10]={0,0,0,0,0,0,0,0,0,0};可写为inta[10]={0};96第七章数组

一、一维数组的定义和引用3、一维数组的初始化在对全部数组元素赋初值时,可以不指定数组长度。inta[5]={1,2,3,4,5};可写为inta[]={1,2,3,4,5};97第七章数组

一、一维数组的定义和引用4、一维数组程序举例例7.2用数组处理求Fibonacci数列问题。#include<>voidmain(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf("\n");printf("%12d",f[i]);}printf("\n");}

分析:用简单变量处理的缺点:不能在内存中保存这些数。假如想直接输出数列中第25个数,是很困难的。用数组处理,每一个数组元素代表数列中的一个数,依次求出各数并存放在相应的数组元素中98第七章数组例7.3用起泡法对10个数排序(由小到大)。

起泡法:将相邻两个数比较,将小的调到前头985420895420859420854920854290854209a[0]a[1]a[2]a[3]a[4]a[5]大数沉淀,小数起泡for(i=0;i<5;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}99第七章数组854209584209548209542809542089a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<4;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}100第七章数组a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<3;i++)if(a[i]>a[i+1

温馨提示

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

评论

0/150

提交评论