




已阅读5页,还剩103页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第3章C语言的语句及和程序流程控制,3.1C语言语句概述3.2顺序结构程序设计3.3选择结构程序设计3.4循环结构程序设计3.5程序举例,3.1.1表达式语句3.1.2函数调语句3.1.3控制语句3.1.4复合语句3.1.5空语句,3.1C语言语句概述,3-1介绍基本语句,语句,表达式语句,空语句,复合语句,函数调用语句,程序流程控制语句,语句以;结尾,控制语句,完成一定的控制功能C语言的9种控制语句if-elsewhilecontinueswitchreturn,fordo-whilebreakgoto,表达式语句,形式expression;表达式最后加一个分号举例a=5;/*赋值语句*/z=x*y,x+;/*一条语句*/a-b+y;/*语句,但无实际意义*/b+;/*语句*/b+/*表达式,不是语句*/,函数调用语句,形式function(arguments);函数调用后加一个分号函数调用语句可以看作一种表达式语句举例printf(%d,i);getchar();myfun(a,b);,空语句,形式;只有一个分号用法作为转向点作为循环语句中的循环体举例for(i=1;i0)t=a;错例,if(a=b;)0)t=a;举例,if(xy)x-;y+;错例,if(xy)x-;y+,基本语句的实例,实例:以下都是什么语句?#includemain()inta,b,sum;/*变量定义*/a=1;b=2;sum=a+b;printf(sum=%d,sum);if(ab)a=1;b=2;elsea+;printf(“a=%d,b=%dn,a,b);,3.2.1顺序结构程序设计的基本结构3.2.2基本的输入输出3.2.3顺序结构程序设计的实例,3.2顺序结构程序设计,C语言里,输入输出功能是通过调用标准库函数实现的,程序划分为三部分:数据输入,数据处理,数据输出,3.2.1顺序结构程序设计的基本结构,#includemain()inta,b,c,x,y;scanf(“%d,%d,%d”,输入,数据处理,输出,函数调用语句,printf()scanf(),输入输出语句,字符输入输出语句,格式输入输出语句,getchar()putchar(),3.2.2基本的输入输出,格式输出语句,printf(”输出格式”,输出表列);,例:inta=2,b=5;printf(“%dn%d”,a,b);printf(“%dt%d”,a,b);注:基本数据类型的数据(int,float,double,char),输出表列列出了所有要输出的数据项,输出项之间用逗号分隔.输出项可以是常量、变量和表达式,可用:转义字符,格式说明,普通字符(原样输出),格式说明和输出数据项应一对一,举例:printf(”a=%db=%da*b=%dn”,4,b,a*b),转义字符:以开始的字符,表示控制含义,例:n回车换行格式说明:%格式字符,按照格式字符的要求,依次将后面的各数据项的值按相应类型输出,例:%d十进制整型%f十进制实型,格式字符(格式字符限制输出的数据类型和形式),格式字符说明(对于整数输出)d以十进制带符号形式输出整数(正数不输出符号)o以八进制无符号形式输出整数(不输出前缀符0)x以十六进制无符号形式输出整数(不输出前缀符0 x)u以十进制无符号形式输出整数,举例:main()inta=100,b=-1;printf(a=%d,%x,%o,%un,a,a,a,a);printf(b=%d,%x,%o,%un,b,b,b,b);,a=100,64,144,100,b=-1,ffff,177777,65535,100000000000000111111111111111101111111111111111,-1原,-1补,0000000001100100,整数输出,实数输出,格式字符(格式字符限制输出的数据类型和形式),格式字符说明f以小数形式输出单、双精度数。整数部分全部输出,小数部分输出6位e以指数形式输出单、双精度数。整数部分全部输出,小数部分输出5位,指数4位,其中e占一位,符号一位,指数占两位,并且以规范化指数形式输出。规范化:小数点前有且仅有1位非0数字。g选%f或%e格式中输出宽度较短的一种格式,不输出无意义的0,举例:main()floatpi=3.14159;printf(pi=%f,%e,%g,pi,pi,pi);,pi=3.141590,3.14159e+00,3.14159,例如:317.7,字符数输出,格式字符,格式字符说明c以字符形式输出,仅输出一个字符s输出字符串,举例:main()charch=a;printf(“ch=%cn,ch);printf(“str=%s,”abc”);,字符输入输出语句,字符输入输出语句(输入输出一个字符),字符输入语句getchar();,例:c=getchar();,功能:从输入设备(键盘)上取一个字符的ASCII码作为函数值返回值,赋予变量c。,字符输出语句putchar();,例:putchar(c);,功能:将变量c中存放的字符,显示在输出设备上(显示器),举例:#includestdio.hmain()charc;c=getchar();putchar(c);,运行程序,如果从键盘输入:k回车则输出为:k,注:输入以回车结束,注意:使用这两个函数,包含头文件中,例:将大写字母转换为小写字母。#includestdio.hmain()charc;c=getchar()+32;putchar(c);,运行程序,如果从键盘输入:A回车则输出为:a如果从键盘输入:B回车则输出为:b,注意:1)格式字符要和输出的类型匹配main()floatf=3.1;intd=3;printf(“%d”,f);/*出错*/printf(“%f”,d);/*出错*/printf(“%s”,a);/*出错*/2)char和int可以通用charc=a;inta=97;printf(“%d,%c”,c,a);97,a,注:根据要数据的数据类型,来选择格式字符,整数格式中修饰符,修饰符格式字符,注:修饰符可省略,修饰符说明m(整数)输出数据占的总列数,不足补空格例:%6d+,-对齐方式,-表示结果向左对齐,否则右对齐例:%-d0m以宽度m输出整型数,不足m时,补0-0m以宽度m输出整型数,不足m时,补空格,举例:inta=123;printf(“%4d,%-4d”,a,a);printf(“%04d,%-04d”,a,a);printf(“%2d”,a);,对于整数部分,如果m比实际长度短,按实际长度输出,123,0123,123_,floatb=4.567;c=3.1415926printf(“%0.2f,%8.4f”,b,b);printf(“%f,%.7f”,c,c);,修饰符格式字符,修饰符说明m.n对实数,占的总列数是m(小数点占一位),n表示小数位数长度不足时,整数部分原样输出,小数部分按n截取,四舍五入对字符串,m表示字符串宽度,n表示截取的字符个数m长度不足时,按原样输出,4.57,_4.5670,printf(%s,%10s,%-12s,%-8s,%6.4sn,Good-bye!,Good-bye!,Good-bye!,Good-bye!,Good-bye!);,Good-bye!.,_Good-bye!,Good-bye!_,Good-bye!,_Good,3.141593,3.1514926,实数与字符格式中修饰符,scanf(”输入格式”,变量地址表列);,指定的输入数据的输入格式,并存放于各定义的变量中。注:格式说明和变量地址一一对应,基本数据类型的数据(int,float,double,char),输入语句scanf(),由若干变量的地址组成,用逗号分隔。变量的地址就是在变量名前加scanf(“%d”,3.1415,修饰符格式字符,修饰符说明l用于输入长整型数据(%ld)及double型数据(%lf)m用于指定输入数据占据的宽度%2d*表示本输入项在读入后舍弃,即跳过。,输入格式中修饰符,#includemain()inta,b,c;scanf(“%d,%d,%d”,实例:阅读下列程序,运行时输入2,4,5分析输出结果。,3-3分支结构程序设计,3.3.1关系运算符与关系运算表达式3.3.2逻辑运算符与逻辑表达式3.3.3if语句3.3.4条件运算符3.3.5switch开关诗句3.3.6程序举例,3.3.1关系运算符与关系运算表达式,关系表达式,用关系运算符将两个表达式连接起来a+bc+d,(a=3)x注意区分等于(=)和赋值运算符(=)a=b,a=b关系表达式的值是逻辑值“真”或“假”C语言用整型表示逻辑值,“真”1、“假”0例,a=3,b=2,c=1;d=ab;/*d=1*/f=abc;/*f=(ab)c=0*/,3.3.2逻辑运算符与逻辑运算表达式,逻辑运算规则,!a若a为“真”,!a为“假”若a为“假”,!a为“真”acharch=A;floatx=0.0;逻辑运算i=0;!i;/*“假”*/i!=0;i;/*“真”*/ch/*“假”*/,逻辑表达式求值特点,逻辑表达式中的运算符,只有会影响表达式求值时,才会执行aelseif(表达式2)语句2;elseif(表达式3)语句3;else语句n;语句n+1;,if语句的说明,无论哪种形式,一条if语句,包括else或elseif子句,只算作一条语句if语句中的表达式,可以是任何可计算类型式子if语句中的语句,可以是一条任何类型的语句(表达式语句、空语句、复合语句、控制语句)子句末尾的分号,只表示子句的结束,不表示if语句结束若在if或else中有多条语句被执行,应用括起且末尾不用分号else子句可以没有的,if语句举例,if(xy)/*max为x和y的较大值*/max=x;if(xy)/*a为x和y之差的绝对值*/a=x-y;elsea=y-x;if(xy);/*合法,执行空语句*/,if语句的嵌套,if语句的各子句都可以又是if语句或elseif语句应注意if-else的配对关系else总是与其上面最近的if配对可以用明确if-else的配对关系if(表达式1)if(表达式1)if(表达式2)elseif(表达式2)语句1语句1elseelse语句2语句2,例:输入三个整数,按从小到大的顺序输出它们。,#includemain()inta,b,c,t;scanf(%d,%d,%d,t=a;a=b;b=t;,t=a;a=c;c=t;,t=b;b=c;c=t;,#includemain()intx,y;scanf(%d,条件语句举例,#includemain()intx,y;scanf(%d,例:对学生成绩分档;main()intg;printf(”Enterscore:”);scanf(”%d”,80100分A档7079分B档6069分C档059分D档,3.3.4条件运算符,条件运算符?:条件表达式exp1?exp2:exp3计算顺序先判断exp1若exp1为“真”,表达式的值为exp2的值若exp1为“假”,表达式的值为exp3的值例,min=(xy)?x:y;等同:if(xy)min=x;elsemin=y;,4.3.5switch语句,switch语句的一般语法格式为:switch(整型表达式)case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n+1;,执行过程:先计算表达式的值,并逐个与case后面的常量表达式的值相比较,当表达式的值与某个常量表达式i的值一致时,则从语句i开始执行;直到遇到break语句或switch语句的”;若表达式与任何常量表达式的值均不一致时,则执行default后面的语句或执行后续语句。,独立结构(case后有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!,独立分支开关语句举例,#includemain()intxscanf(%d,x/10,读程序结果,例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,return,#includeintmain()charc;printf(输入一个字符:);c=getchar();if(c=0,例:输入一个字符,判断其是字母、数字、控制符或其它符号?,分支程序设计举例,求一元二次方程的根当a=0时,不是一元二次方程当a0时,方程的根为当b2-4ac0,方程有两个实根当b2-4ac=0)n+;sum+=x;scanf(“%f”,用goto语句构成循环,3.4.2while语句,while(表达式)循环体while型循环:先判断表达式,成立执行循环体;不成立什么都不做,即无循环。通常循环中应含有能使循环语句结束的操作。,while语句举例,#includemain()inti,sum;i=1;sum=0;while(i=100)sum+=i;/*循环体缩进书写*/i+;/*使循环趋向结束*/printf(“sum=%dn”,sum);,思考?若没有i+语句,程序会出现什么情况?,3.4.3do-while语句,do循环体while(表达式);类似于Until型循环先执行一次循环体语句,后判断表达式。,do-while语句举例,#includemain()inti,sum;i=1;sum=0;dosum+=i;i+;while(i=100);printf(“sum=%dn”,sum);,思考?若没有i=1和sum=0语句,程序会出现什么情况?,3.4.4for语句,格式:for(表达式1;表达式2;表达式3)循环体语句;执行过程如下:计算表达式1的值;判断表达式2,如果其值为非0(真),则执行循环体语句,然后执行第步;如果其值为0(假),则结束循环,执行第步;计算表达式3;返回继续执行第步;循环结束,执行for语句的后续语句。,for语句的说明,三个表达式的说明expr1:初始化expr2:循环条件expr3:一般是循环变量的改变三个表达式都可以省略,分隔表达式的分号不能省略expr1省略,不进行初始化expr2省略,认为循环条件永为“真”expr3省略,不改变循环变量的变量值,for语句举例,inti,sum;for(i=1,sum=0;i=100;i+)sum+=i;for(i=1,sum=0;i=100;)sum+=i+;for(i=0,sum=0;i+100;)sum+=i;,永远不会退出的循环为死循环for(;)while(1)dowhile(1)一般情况下,要极力避免死循环绝大多数程序不需要死循环。如果出现,往往都是bug时间过长的循环会造成“假死”效果,也要考虑解决,死循环,课堂举例,*公式计算,水仙花数,程序举例,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数字本身。例如:153=13+53+33,水仙花数程序实例,#includemain()intl1,l2,l3,l4;for(l4=100;l4=999;l4+)l1=l4%10;/*个位*/l2=(l4%100)/10;/*十位*/l3=l4/100;/*百位*/if(l4=l1*l1*l1+l2*l2*l2+l3*l3*l3)printf(Daffodilsnumberis%dn,l4);,巩固练习:,打印出所有的“玖瑰花数”,所谓“玖瑰花数”是指一个四位数,其各位数字4方和等于该数字本身。例如:1634=14+64+34+44,#includemain()intl1,l2,l3,l4,l5;for(l5=1000;l5=9999;l5+)l1=l5%10;/*个位*/l2=(l5%100)/10;/*十位*/l3=(l5%1000)/100;/*百位*/l4=l5/1000;/*千位*/if(l5=l1*l1*l1*l1+l2*l2*l2*l2+l3*l3*l3*l3+l4*l4*l4*l4)printf(“Rosesnumberis%dn,l5);,程序举例,pi=pi+t;n=n+2;Sign=-Sign;t=Sign/n;,一个循环体内又包含一个完整的循环结构,称为循环的嵌套;嵌套的层次可是双重的或多重的。C四种形式的循环可以互相嵌套,但绝不能出现交叉现象。正确的循环嵌套形式:,外循环,内循环,外循环,内循环1,内循环2,三重循环,3.4.5循环的嵌套,三种循环之间可以互相嵌套。比如:,1.while嵌套whilewhile()while(),2.do-while嵌套do-whiledodowhile();while();,3.for嵌套forfor(;)for(;),4.while嵌套do-whilewhile()dowhile();,5.for嵌套whilefor(;)while(),嵌套循环及其应用举例,*九九表,百钱买百鸡,*杨辉三角形,等腰三角形图,九九表,九九表框图和程序,#includemain()inti,j;for(i=1;i=9;i+)printf(%4d,i);printf(n);for(i=1;i=9;i+)printf(-);printf(n);for(i=1;i=9;i+)for(j=1;j=9;j+)printf(%4d,i*j);printf(n);,九九表,水仙花数解法-框图,杨辉三角形-框图,111121133114641151010511615201561,杨辉三角形-程序,#includemain()intn,i,j,k,i1,j1,k1;printf(输入输出的行数:);scanf(%d,百钱买百鸡,鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?,百钱买百鸡-1,#includemain()intx,y,z,m,n;for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+)m=x+y+z;n=5*x+3*y+z/3;if(m=100,百钱买百鸡-2,#includemain()x,y,z,m,n;for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+)m=x+y+z;n=5*x+3*y+z/3;if(m=100,float,百钱买百鸡-3,#includemain()floatx,y,z,m,n;for(x=0;x=20;x+)for(y=0;y=33;y+)for(z=0;z=99;z+)m=x+y+z;n=5*x+3*y+z/3;if(m=100,02575418788118112484,编程显示以下图形(共N行,N由键盘输入)。*,此类题目分析的要点是:通过分析,找出每行空格、*与行号i、列号j及总行数N的关系。其循环结构可用右图表示。,分析:(设N=5)第1行4个空格=5-11个“*”=2*行号-1第2行3个空格=5-23个“*”=2*行号-1第3行2个空格=5-35个“*”=2*行号-1第4行1个空格=5-47个“*”=2*行号-1第5行0个空格=5-59个“*”=2*行号-1,由此归纳出:第i行的空格数N-i个;第i行的“*”数是2i-1个。,#includemain()inti,j,k;for(i=1;i=5;i+)for(k=1;k65535)break;sum=sum+i;printf(i=%d,sum=%un,i,sum);,例:输入两个正整数m和n,求其最大公约数和最小公倍数。算法1:(穷举法)找出m、n中的较小者t;最大公约数肯定在t、t-1、t-2、1之间;2)测试m%i和n%i是否同时为0;除数i依次取t、t-1、t-21;测试条件成立时的i值即为最大公约数;3)最小公倍数:mn/最大公约数;,main()intm,n,t,i;printf(“Enterm,n:”);scanf(“%d,%d”,18,1217,3最大公约数=6,最小公倍数=36最大公约数=1,最小公倍数=51,算法2:(辗转相除法)main()inta,b,m,n,r,t;printf(“Entera,b:”);scanf(“%d,%d”,2.continue语句形式:continue;功能:用于由while、do-while、for构成的循环中,跳过本次循环后面尚未执行的语句,提前结束本次循环,并继续循环流程的下一步。例:for中用continue例:while中用continuedofor(e1;e2;e3)while(e1):if(e)continue;if(e)continue;if(e)continue;:while(e1),例:把1100之间不能被5整除的数输出;并控制一行输出10个数据。main()intn,c=0;printf(“n”);for(n=1;n=100;n+)if(n%5=0)continue;printf(“%d”,n);c+;printf(“%s”,c%10=0?”n”:”);,例:求Fibonacci数列的前40个数,并按一行4个数排列输出。1,1,2,3,5,8,13,21考虑问题:1)属递推问题:从前一项或几项推出下一项结果;2)定义几个变量?一个:无法实现;多个:各求其值,开销大;三个:f3=f1+f2;f1=f2;f2=f3;两个:f1=f2=1;f1=f1+f2;f2=f2+f1;由前两项相加求得下一项后第一项可覆盖,即变量的值是不断更迭的(迭代法)。,3-7程序举例,main()longf1,f2,i;f1=f2=1;for(i=1;i=20;i+)printf(%12ld%12ld,f1,f2);if(i%2=0)printf(n);f1=f1+f2;f2=f2+f1;,例:判断m是否素数素数:除1和它本身之外再无别的约数;算法:判断m%i=0成立否?i取值:2(m-1)或:2,#includemath.hmain()intm,i,k;printf(tEnterm:);scanf(%d,例:求100200之间的全部素数,并控制换行。算法:外循环控制m取100200之间的奇数;,#includemath.hmain()intm,i,k,c=0;printf(n);for(m=101;mk)printf(%-6d,m);c+;if(c%10=0)printf(n);,例:用幂级数求解指数函数,项数可变。算法:对数列求和问题,关键是找出前后项之间的递推关系:即:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 普通扬声器项目投资可行性研究分析报告(2024-2030版)
- 2022-2027年中国互联网医保支付行业发展监测及发展战略规划报告
- 2024年中国精炼石油行业市场调查报告
- 2025年中国沙滩家具行业市场全景评估及发展前景预测报告
- 降低剖宫产率的产妇营养管理制度和措施
- 2025至2030中国溶剂型金属清洁剂行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国消炎防晒隔离霜行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国活性凹土行业市场发展现状及发展趋势与投资报告
- 2025至2030中国汽车融资租赁业市场运营格局及融资模式分析报告
- 2025至2030中国汽车整车制造业未来创新策略及发展趋势洞悉报告
- 中班科学课件《神奇的磁铁》
- 山西省太原市万柏林区多校2023-2024学年二年级下学期期末语文试卷
- DLT 1053-2017 电能质量技术监督规程
- 四川省内江市2023-2024学年七年级下学期7月期末英语试题
- 新教科版三年级下册科学期末测试卷及完整答案(网校专用)
- 《天然气压缩机》
- 市政道路工程技术标正文样本
- 大脑后动脉动脉瘤破裂伴蛛网膜下腔出血个案护理
- 东方市生活垃圾焚烧炉渣综合利用项目 环评报告
- 不规格符石镶嵌工艺
- 长期货物物流运输合同书
评论
0/150
提交评论