C语言程序设计第3章基本控制结构.ppt
0)0)t=a;t=a;n注意:赋值语句与赋值表达式的区别n二、顺序程序举例3.2 顺序结构程序设计C语言程序设计n例3-1:输入一大写字母,改为小写后输出。#include main()char c1,c2;scanf(%c,&c1);printf(%c,%dn,c1,c1);c2=c1+32;printf(%c,%dn,c2,c2);getch();3.2 顺序结构程序设计测试数据及运行结果测试数据及运行结果输入:输入:A 输出:输出:A,65 a,97C语言程序设计3.2 顺序结构程序设计例:输入三角形的三边长,求三角形面积。n分析:设三角形的三边分别为a,b,c 则:面积area2=s(s-a)(s-b)(s-c)其中s=(a+b+c)/2C语言程序设计3.2 顺序结构程序设计n源程序:#include main()float a,b,c,s,area;scanf(“%f,%f,%f”,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn”,a,b,c,s);printf(“area=%7.2fn”,area);发散:三角形面积的计算 返回返回C语言程序设计3.3 选择结构程序设计3.3.1 关系运算符与关系表达式n一、关系运算符:、!n关系表达式:i=(c=d)、x+ya-bn求值结果:int型,0或1。1为真,0为假n 如:设a=3,b=2,c=1 则:d=a b 的值为1 f=abc的值为0;C语言程序设计3.3.1 关系运算符与关系表达式n6种关系运算符的优先级别不同:、!=、n程序设计中最好不要对两个浮点数直接进行相等性比较;方法之一如:fabs(a-b)=0&xb)&(n=cd)后,m、n分别是多少?答案是:m=0,n=1u利用逻辑表达式还能表示更为复杂的条件 (year%4=0&year%100!=0)|(year%400=0)#3.3.2 逻辑运算符与逻辑表达式C语言程序设计一、if语句的2种基本形式n语法1:if(表达式)语句;n语义:判断表达式的值,为真时执行语句,否则不执行;如:#include main()char ch;ch=getchar();if(ch=a&ch=z)ch-=a-A;putchar(ch);3.3.3 选择结构的实现C语言程序设计n语法语法2 2:if(if(表达式)表达式)语句语句1 1;else else 语句语句2 2;n语义:语义:判断表达式的值,为真时执行判断表达式的值,为真时执行语句语句1 1,否则执行语句,否则执行语句2 2;3.3.3 选择结构的实现C语言程序设计如:如:#include#include main()main()int a,b;int a,b;scanf(“%d%d”,&a,&b);scanf(“%d%d”,&a,&b);if(ab)if(ab)printf(“max=%dn”,a);printf(“max=%dn”,a);else else printf(“max=%dn”,b);printf(“max=%dn”,b);3.3.3 选择结构的实现C语言程序设计二、if语句嵌套的2种形式n1.if语句嵌套在else子句中 if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;else 语句n+1;3.3.3 选择结构的实现C语言程序设计n2.if语句嵌套在if子句中 if(表达式1)if(表达式2)if(表达式3)语句1;else 语句2;else 语句3;else 语句n+1;3.3.3 选择结构的实现C语言程序设计例3-6:从键盘上输入字符,判别其分类:控制符、数字、大写字母、小写字母、其他字符。3.3.3 选择结构的实现C语言程序设计#include“stdio.h”main()char c;c=getchar();if(c=0&c=A&c=a&cc&b+ca&a+cb)s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“area=%6.2fn”,area);else printf(“It is not a trilateral.”);C语言程序设计3.3.3 选择结构的实现n(4)if 语句嵌套时,else 与if的匹配问题;例3-7:有一函数:y=-1 x0请编程,输入x的值,输出相应的y值。C语言程序设计3.3.3 选择结构的实现main()float x,y;scanf(“%f”,&x);if(x=0)if(x0)y=1;else y=0;else y=-1;y=0;if(x=0)if(x0)y=1;else y=-1;?y=0;if(x=0)if(x0)y=1;else;else y=-1;y=0;if(x=0)if(x0)y=1;else y=-1;C语言程序设计n(5)可利用条件表达来简化程序设计。如对于:if(exp!=0)可用 if(exp)来代替;3.3.3 选择结构的实现if(!exp)语句;等价于:if(exp=0)语句;C语言程序设计三、switch语句3.3.3 选择结构的实现语法1:switch(表达式)case C1:S1;case C2:S2;case Cn:Sn;default:Sn+1;4其中:表达式必须放在括号中;C1至Cn 是情况常量;default可缺省。C语言程序设计计算表达式e的值S1S2SnSn+1C1C2Cndefault语义:3.3.3 选择结构的实现C语言程序设计例:switch(grade)case A:printf(“85100n”);case B:printf(“7084n”);case C:printf(“6069n”);case D:printf(“60n”);default:printf(“errorn”);3.3.3 选择结构的实现 返回返回C语言程序设计4语法2:switch(表达式)case C1:S1;break;case C2:S2;break;case Cn:Sn;break;default:Sn+1;break;3.3.3 选择结构的实现C语言程序设计S1计算表达式e的值S2SnSn+1C1C2Cndefault3.3.3 选择结构的实现语义:C语言程序设计例:switch(grade)case A:printf(“85100n”);break;case B:printf(“7084n”);break;case C:printf(“6069n”);break;case D:printf(“60n”);break;default:printf(“errorn”);break;3.3.3 选择结构的实现C语言程序设计说明:(1)default可省略;(2)C1Cn必须互不相同;(3)语法2中,C1Cn无次序影响;(4)允许多个case共用一个执行语句;如:3.3.3 选择结构的实现C语言程序设计switch(ch)case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:digit+;break;case :case t:case n:white+;break;default:character+;3.3.3 选择结构的实现C语言程序设计(5)break只能跳出一层,内外层情况常量可相同;如:#include main()int x=1,y=0;switch(x)case 1:switch(y)case 0:printf(*1*n);break;case 1:printf(*2*n);break;case 2:printf(*3*n);getch();运行结果为:*1*3*3.3.3 选择结构的实现C语言程序设计四、三目条件运算符四、三目条件运算符n1.条件运算符?:?:n2.格式 e1?e2:e3n3.语义:判判e1的值,为的值,为1时计算时计算e2,否则计,否则计 算算e3;如:max=(ab)?a:b 等价于 if(ab)max=a;else max=b;3.3.3 选择结构的实现C语言程序设计n4.说明:n条件运算符的优先级仅高于“,”与“=”;n只有当if语句的真假均只执行一个赋值语句且是给同一变量赋值时,才能用条件表达式取代;如:if(ab)max=a;else max=b;n条件表达式可使程序简洁;#3.3.3 选择结构的实现 返回返回C语言程序设计*问题1:假如全班41人,欲从键盘上输入每人的数学成绩,然后计算出平均成绩;*问题2:编程计算n!。*重复执行一组语句是程序设计要求的基本功能之一。在C语言中可以用以下语句来实现循环:*(1)if 和 goto*(2)while*(3)do-while*(4)for3.4 循环结构程序设计C语言程序设计n语法:while(exp)循环体语句;n语义:当exp为真时,执行循环体;为假时,执行循环语句的后续语句;n如:用while语句构成循环,求:sum=1+2+100 3.4.1 while语句C语言程序设计3.4.1 while语句i1,sum=0当i小于等于100sum=sum+ii=i+1输出sumC语言程序设计3.4.1 while语句n源程序:main()int i=1,sum=0;while(i=100)sum+=i;i+;printf(“%d”,sum);C语言程序设计3.4.1 while语句l说明:循环体可以用复合语句;循环控制变量在while前应赋初值,以确保循环的正常开始;C语言程序设计3.4.1 while语句 循环体内应改变循环控制变量的值,以确保循环正常结束;如:i=1;while(i=100)sum=sum+1;(死循环)C语言程序设计3.4.1 while语句 while 的特点:n先判断后执行先判断后执行n循环体最少执行次数为0;如:i=3;while(i3)printf(“i=%dn”,i);C语言程序设计n语法:do 循环体语句;while(exp);n语义:当exp为真时,执行循环体;为假时,执行循环语句的后续语句;n如:用do-while语句构成循环,求 sum=1+2+100 3.4.2 do-while语句C语言程序设计3.4.2 do-while语句 i1,sum=0sum=sum+i输出sum当i小于等于100i=i+1N-SN-S图:图:C语言程序设计3.4.2 do-while语句n源程序:main()main()int i=1,sum=0;int i=1,sum=0;dodo sum+=i;sum+=i;i+;i+;while(i=100);while(i10);#3.4.2 do-while语句C语言程序设计n语法:for(exp1;exp2;exp3)循环体语句;n语义:(1)计算exp1;(2)求exp2,为真时,执行(3),否则结束循环;(3)执行循环体中的语句;(4)执行exp3;(5)返回(2)。3.4.3 for语句C语言程序设计3.4.3 for语句n程序:main()main()int i,sum=0;int i,sum=0;for(i=1;i=100;i+)for(i=1;i=100;i+)sum+=i;sum+=i;printf(“%d”,sum);printf(“%d”,sum);C语言程序设计3.4.3 for语句n说明:(1)显然for循环更简洁,更灵活;(2)循环体可以是复合语句;(3)可同时对多个变量赋初值及修改。如:for(i=0,j=1;jn∈i+,j+)(4)for语句可理解为:for(循环变量赋初值;判断条件;循环变量改变)循环体;C语言程序设计(5)for语句中三个表达式可省:8 省exp1;如:i=1;for(;i5;i+)printf(“%dn”,i);等价于 for(i=1;i5;i+)printf(“%dn”,i);3.4.3 for语句C语言程序设计8 省exp3;如:for(i=1;i5;)printf(“%dn”,i);i+;等价于for(i=1;i5)break;3.4.3 for语句C语言程序设计8 三个表达式全省时,如:for(;)语句;等价于while(1)语句;n(5)for语句中的循环体可以是空语句;如:int n=0;while(n+=2);printf(“%d”,n);结果为:43.4.3 for语句C语言程序设计1.三种循环可互相代替。2.while、do-while和 forn循环控制变量之初值;n循环控制之条件;n循环控制变量之修正。3.除goto循环外,都能用break跳出循环,用continue结束本次循环。3.4.4 三种循环语句的选用C语言程序设计n三种循环可以互相嵌套例:打印九九乘法表:3.4.5 循环结构的嵌套1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=92*1=2 2*2=4 2*3=6 2*4=8 2*9=18 9*1=9 9*2=18 9*3=27 9*9=81 C语言程序设计 main()int i,j;for(i=1;i10;i+)for(j=1;j10;j+)printf(%d*%d=%2d ,i,j,i*j);printf(n);getch();3.4.5 循环结构的嵌套C语言程序设计3.4.6 break语句和continue语句一、break语句nbreak只能用在循环语句、只能用在循环语句、switch语句中语句中n功能:强行退出循环或功能:强行退出循环或switch语句。语句。n例:例:for(r=1;r100)break;printf(“%f”,area);C语言程序设计二、continue语句n只能用在循环语句中n功能:结束本次循环n例:main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(“%d”,n);3.4.6 break语句和continue语句 返回返回C语言程序设计*3.5.1 输入输出的概念*3.5.2 输入输出函数3.5 使用库和函数C语言程序设计一、字符输入函数getcharn语法:getchar();n语义:(从stdio上)输入一个字符;ngetchar是一个无参函数;ngetchar 包含在 stdio.h中n如:#include#include main()main()putchar(getchar();putchar(getchar();3.5.3 字符输入输出函数C语言程序设计3.5.3 字符输入输出函数二、字符输出函数 putcharn语法:putchar(c);n语义:(在stdout上)输出一个字符;n如:#include#include main()main()putchar(141);putchar(141);putchar(a);putchar(a);putchar(97);putchar(97);C语言程序设计n如:#include#include main()main()char c char c;while(c=getchar()!=#)while(c=getchar()!=#)if(c=a&c=a&c=z)putchar(c-a+A);a+A);else putchar(c);else putchar(c);3.5.3 字符输入输出函数C语言程序设计一、格式输入函数 scanfn语法:scanf(格式控制,地址表列);n格式控制:含三类符号n空白字符:(空格、Tab或、),输入时不必一一对应;n普通字符:(非格式说明符、非空白符、非%),输入时必须一一对应;n格式转换说明符:由%开始后跟:一约定的字母转换指示符;一任选的用于指定输入字段宽度的整数w。3.5.4 格式输入输出函数C语言程序设计3.5.4 格式输入输出函数格式控制字符格式控制字符输出形式说明输出形式说明%d,%i带符号的十进制数%o,%u,%x无号符的八、十、十六进制数无号符的八、十、十六进制数%c,%s字符、字符串%f,%e小数、科学计数法形式的实数小数、科学计数法形式的实数地址表列:由若干个地址组成,可以是变量的地址,也可以是字符串中的首地址等。C语言程序设计n输入项表的输入对象须是地址量;如:scanf(“%d,%d,%d”,&a,&b,&c);scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);3.5.4 格式输入输出函数123123,456456,789789,则处理的结果为:,则处理的结果为:123a 456 b 789 c123a 456 b 789 c如下的输入是错误的:如下的输入是错误的:123 456 789 123 456 789 123#456#789 123#456#789a=123,b=456,c=789C语言程序设计3.5.4 格式输入输出函数一、格式输出函数printf语法:printf(格式控制,输出表列);语义:按格式控制将输出表列中的数据依次 输出至屏幕上。n 格式控制普通字符和转义字符(原样输出)格式说明:由%和格式控制符组成如:%d,%f,%c等;C语言程序设计3.5.4 格式输入输出函数l如:printf(“a=%d,b=%d”,a,b);若a、b的值分别为2和3,则输出结果为:a=2,b=3C语言程序设计3.5.4 格式输入输出函数格式控制字符格式控制字符输出形式说明输出形式说明%d,%i带符号的十进制数%o,%u,%x无号符的八、十、十六进制数无号符的八、十、十六进制数%c,%s字符、字符串%f,%e小数、科学计数法形式的实数小数、科学计数法形式的实数格式修饰符 -输出的字符或数值在输出域内左靠齐格式修饰符格式修饰符 m 规定数据输出的最小宽度规定数据输出的最小宽度格式修饰符 .n对浮点数小数点后保留n位,对字符串,输出前n个字符格式修饰符格式修饰符 l输出长整型数,或双精度型数输出长整型数,或双精度型数如果要输出单一的字符%,则需用%C语言程序设计n例1:#include main()int a=4096;long int b=123456;printf(“%5dn%3dn%ldn%9ldn”,a,a,b,b);该程序运行的结果为:40964096123456 1234563.5.4 格式输入输出函数C语言程序设计n例2:#include main()int a=-8;printf(“dec a=%dn oct a=%on hex a=%xn”,a,a,a);该程序运行的结果为:dec a=-8oct a=177770hex a=fff811111111111110003.5.4 格式输入输出函数 返回返回C语言程序设计3.6 典型例题n例3-26 设计程序,判断整数m是否为素数分析:m可以分解为m=m1*m2,m1和m2中必有一个小于或者等于m的算术平方根,可以用2 之间的整数一个个去除m,若都不能被m整除,则m为素数,否则不是素数。main()int m,i,k;scanf(“%d”,&m);k=sqrt(m);for(i=2;ik)printf(“%d is a prime numbern”,m);else printf(“%d is not a prime numbern”,m);C语言程序设计n例3-27求100200之间的所有素数main()int m,i,k,n=0;for(m=101;m=200;m=m+2)k=sqrt(m);for(i=2;ik)printf(“%d”,m);n=n+1;if(n%5=0)printf(“n”);C语言程序设计例3-28用公式:/4=1-1/3+1/5-1/7+.求的近似值,直到最后一项的绝对值小于10-6为止。分析:t表示项,n表示项中t的分母,s表示符号 t=s/nmain()int s;float n,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(“pi=%10.6fn”,pi);