吉林大学远程教育课件 C语言程序计 4
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 C语句及控制结构
4.1 C语句概述
C语句可分为四类: 1.空语句: ; 作用:循环体和转向点 2.表达式语句 表达式; 功能:表达式求值 如:1+3; a+b-c;
4.1 C语句概述
常用的表达式语句:
a=3; b++; I=1,j=2,k=3; a+=2; t=a,a=b,b=t; I=3*5+6;
out 0 1 2 3 4 the loop break out break语句通常是和if语句一起使用的。 例: 判别一 个整数n(n≥2)是否为素数.
4.5
循
环
isprime(n) int n; { int i=1; while(++i<n) if(n%i==0) { printf(“%d is not prime\n”,n); break; } if(i==n)/*是否被自己整除?*/ printf(“%d is prime\n”,n); }
函数调用语句也属于表达式语句的一个特例, 如:
printf(“%d\n”,5); ch=getchar(); putchar(ch);
4.1 C语句概述
3.块(复合语句) { 语句组 } 例: { t=a; a=b; b=t; } 4.控制语句: 条件、循环
4.2 关系运算符和关系表达式
一、 关系运算符(6种) <(小于) <=(小于或等于) >(大于) >=(大于或等于) ==(等于) !=(不等于)
x-1 0 x+1
(x<0) (x=0) (x>0)
4.4 条 件 分 支
五、条件运算符 ?: (也叫三元运算符.) 1.语法: <表达式1>?<表达式2>:<表达式3> 2.功能:如果表达式1的值是非0的,则其结果是表达 式2的值,否则为表达式3的值. 例1:printf(“max is%d\n”,(a>b)?a:b); 常常用条件表达式构成一个赋值语句 例: ch=(ch>=„a‟&&ch<=„z‟)?ch-‟a‟+‟A‟:ch; 3.注意 :?:的优先级仅比赋值运算符和逗号运算符 高,故在和其它运算符混合使用时应在其两边加 上括号。
4.3 逻辑运算符和逻辑表达式
一、逻辑运算符(3种): ! 逻辑非(一元运算符) && 逻辑与(二元运算符) || 逻辑或(二元运算符) 逻辑运算符的操作数为逻辑型量 优先顺序如下: !(非) &&(与) ||(或)
4.3 逻辑运算符和逻辑表达式
二、运算规则
!a: 若a为“真”,则!a的值为“假”,若a为“假”,则!a的值为 “真”。 a&&b: 若a和b皆为“真”,则a&&b的值为“真”,否则为 “假”。
4.5
循
环
我们可以将以上for循环用下面的while循环等价地表 示: e1; 求解表达式e1 while(e2) 0 { 语句 e2 e3; 非0 } 语句 例: i=1; 求解表达式e3 while(i<=10) { sum=sum+i; i++; }
4.5
循
环
2 3 5 7 11 13 17 19 23 ...
例:求2至32767之间的所有素数。 main() { int i,n; for(n=2;n<=32767;++n) { for(i=2;n%i;++i); if(i==n) printf(“%d\n”,n); } }
4.5
循
环
说明: (1)for语句中的表达式可以部分省略或全部省略,但分号 不能省略.如果e2省略,则认为测试结果恒为“真”。 故循环将永远执行下去。例: for( ; ; ); for( ; ; ) putchar(„a‟); 但下面循环不会永远执行下去 for( i=1;;i++)sum = sum+i; (2)for语句中e1,e2,e3可以是任何有效的C语言表达式.可 以是逗号表达式 .例: for(i=1,sum=0;i<5;i++,i++) sum+=i;
表达式1
非0
语句1
表达式2
非0
语句22
表达式3
非0
语句3
表达式n 0 语句n+1
非0
语句n
4.4 条 件 分 支
例:将百分制成绩s1换为5分制成绩s2。
if(s1<60) s2=1; else if(s1<70) s2=2; else if(s1<80) 等价 s2=3; else if(s1<90) s2=4; else s2=5; if(s1<60) s2=1; else if(s1<70) s2=2; else if(s1<80) s2=3; else if(s1<90) s2=4; else s2=5;
的值是1(真) 的值是0(假) 的值是0(假) 的值是1(真)
2.逻辑运算符的操作数,可以是任何类型的数据,系 统最终以0和非0来判定它们的逻辑值是“真”还是 “假”。如:
′c′ && ′d′ 的值是1 4 && !a|| 2 的值是1
4.3 逻辑运算符和逻辑表达式
例: 判别某年year是否为闰年,可用如下 逻辑表达式来进行判断:
9 10
4.5
循
环
例:猴子第一天摘下若干个桃子,当天吃了一半,还不过瘾, 又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了 一个。以后每天都吃前一天剩下的一半零一个。到第10天再 想吃时,只剩下一个桃子了。求第一天共摘下多少个桃子。 设桃子总数为N1,则有: n1=2(n2+1) main() n2=2(n3+1) { int i=1,s=1; n3=2(n4+1) for(;i<=9;++i) ┆ s=2*(s+1); n9=2(n10+1) printf(“%d\n”,s); n10=1 }
4.2 关系运算符和关系表达式
二、关系表达式 关系表达式的值是一个逻辑值,即“真”或 “假”。如:“5==3”的值为“假”,“6>3” 的 值为“真”. 三、说明 前4种关系运算符(<,<=,>,>=)的优先级相同, 后两种也相同。且前4种的优先级高于后两种。 C语言没有逻辑型数据,以整数1代表 “真”, 以0代表“假”。如:a=(5>3) 结果将a置为1
运行结果:
0 1 2 3 We′re out of the loop
4.5
循
环
3.注意 while循环是“先判断,后执行”。如果刚进入循 环时条件就不满足,则循环体一次也不执行。它 相当于一条空语句。 如:while(0)printf(“%d\n”,x); 循环条件一定要有不满足的时侯,否则将出现 “死循环”。 如:while(1)printf(“%d\n”,x); 循环体如果包含一个语句以上,应组成复合语句. 如:while(a<b){t=a;a=b;b=t;}
如果要让其和最外层if配对,必须用块来显式 地标界如下:
if(a>b) { if(b<c) c=a; } else c=b;
4.4 条 件 分 支
计算 y= 程序:
main() { int x,y; scanf(“%d”,&x); if(x<0) y=x-1; else if(x=0) y=0; else y=x+1; printf(“x=%d,y=%d”,x,y); }
a||b: 若a和b皆为“假”,则a||b的值为“假”,否则为“真”。
三、逻辑表达式
表达式的结果最终是由逻辑运算符运算的称为逻辑表达式. 如:a=3,b=2,c=4,d=5 则: (a>b)&&(c<d) 值为 1 !(a>b) (a>b)||(c<d) 值为 0 值为 1
4.3 逻辑运算符和逻辑表达式
4.4 条 件 分 支
C语言提供了三种形式的条件分支语句。 一、简单if if (表达式) 语句 表达式
if(ch>=„a‟&& ch<=„z‟) putchar(ch);
非0
这里语句也可以是块, 如:
0
语句
if(a>b) { t=a; a=b; b=t; } 如果写成 if(a>b) t=a;a=b;b=t;则完全不同。
4.5
4.break语句 作用:中断循环,例:
循
环
main( ) { int i=0; while (i<1000) { if(i==5) break; else printf(“%d\n”,i); i++ ; } printf(“the loop break out\n”); }
4.5
循
环
4.4 条 件 分 支
二、块if if(表达式) 语句1 else 语句2 例: if(a>b) printf(“%d”,a); else printf(“%d”,b);
0 非0
表达式 语句2 语句1
4.4 条 件 分 支
三、if-else-if语句 if(表达式1) 语句 1 else if(表达式2) 语句 2 ┆ else if(表达式n) 语句 n else 语句 n+1
(year%4==0&&year%100!=0)||year%400==0
非闰年的判断条件为:
!(year%4==0&&year%100!=0)||year%400==0)
(year%4!=0||year%100==0)&&year%400!=0 (year%4||!(year%100))&&year%400
四. 四种运算符的优先级: ! 高 算术运算符 关系运算符 && || 赋值运算符 低 例: a = 5>3 && 2 || 8<4-!0
结果为Biblioteka Baidu1
4.3 逻辑运算符和逻辑表达式
五、说明 1.将一个量作为逻辑量来判断其真假值时,将非0作为 “真” ,将0作为“假”。例如:
3||0 3&&0 !3 !0
4.5
二、do-while循环 1. do-while 循环的语法:
循
环
语句
非0
0 2. 注意: do-while循环是“先执行,后判断”。不管循环条件是否 满足,循环体至少执行一次。等价于: s; while(e) s; 循环体如果包含一个语句以上,应组成复合语句. 同while循环一样,break和continue在 do-while 语句中也起 相同的作用 .
4.5
循
环
一、while循环 1. while语句的语法是:
while(表达式)
0
语句
表达式
非0
2. 功能:条件满足时执行循环体, 条件不满足时结束循环转去执 行下一条语句.
语句
4.5
例:
循
环
main( ) { int i=0; while(i<4) printf(“%d\n”,i++); printf(“We\‟re out of the loop\n”); }
4.5
循
环
(3) for语句的循环体由多个语句组成,要形成复合语句 . (4) 在for语句的循环体中使用break和continue语句。例: main( ) { int i; for(i=1;i<=100;++i) 1 { if(i==5) continue; 2 3 printf(“%d\n”,i); 4 if(i==10) break; 6 } 7 8 }
循
环
isprime(n) int n; { int i=2; while(n%i)i++; if(i==n) printf(“%d is prime\n”,n); else printf(“%d is not prime\n”,n); }
4.5
循
环
5. continue语句 使用continue语句跳出本次循环体直接进入下一轮循 环。continue通常要和if语句一起使用。 main( ) 1 { int i=0; 2 while(++i<10) 3 { 4 6 if(i==5) continue; 7 printf(“%d\n”,i); 8 9 } }
4.4 条 件 分 支
在嵌套使用if语句时,应注意的一点是if和else的 配对关系. 原则:else只和其前面最靠近它的if配对. 例:
if(a>b) if(b<c) c=a; else c=b;
尽管我们在书写程序时,让else和最外层的if对 齐,但它实际上是和内层if配对的。
4.4 条 件 分 支
4.5
循
环
isprime(n) int n; { int i=1; while(++i<n) if(n%i==0) { printf(“%d is not prime\n”,n); i=n; } if(i==n)/*是否被自己整除?*/ printf(“%d is prime\n”,n); }
4.5
do 语句 while(表达式);
表达式
4.5
循
环
三、for 循环 用于定长循环(循环次数确定的循环)。还可以用于变 长循环。且完全可以取代while循环。 for语句的基本形式: for(e1;e2;e3) 语句 这里e1,e2,e3都是表达式,分别对应着循环控制中的 三个基本组成部分.即: ① 循环控制变量的初始化。 ② 循环条件测试。 ③ 循环控制变量的增量操作。 例: for(i=1;i<=10;i++) sum = sum + i;
4.1 C语句概述
C语句可分为四类: 1.空语句: ; 作用:循环体和转向点 2.表达式语句 表达式; 功能:表达式求值 如:1+3; a+b-c;
4.1 C语句概述
常用的表达式语句:
a=3; b++; I=1,j=2,k=3; a+=2; t=a,a=b,b=t; I=3*5+6;
out 0 1 2 3 4 the loop break out break语句通常是和if语句一起使用的。 例: 判别一 个整数n(n≥2)是否为素数.
4.5
循
环
isprime(n) int n; { int i=1; while(++i<n) if(n%i==0) { printf(“%d is not prime\n”,n); break; } if(i==n)/*是否被自己整除?*/ printf(“%d is prime\n”,n); }
函数调用语句也属于表达式语句的一个特例, 如:
printf(“%d\n”,5); ch=getchar(); putchar(ch);
4.1 C语句概述
3.块(复合语句) { 语句组 } 例: { t=a; a=b; b=t; } 4.控制语句: 条件、循环
4.2 关系运算符和关系表达式
一、 关系运算符(6种) <(小于) <=(小于或等于) >(大于) >=(大于或等于) ==(等于) !=(不等于)
x-1 0 x+1
(x<0) (x=0) (x>0)
4.4 条 件 分 支
五、条件运算符 ?: (也叫三元运算符.) 1.语法: <表达式1>?<表达式2>:<表达式3> 2.功能:如果表达式1的值是非0的,则其结果是表达 式2的值,否则为表达式3的值. 例1:printf(“max is%d\n”,(a>b)?a:b); 常常用条件表达式构成一个赋值语句 例: ch=(ch>=„a‟&&ch<=„z‟)?ch-‟a‟+‟A‟:ch; 3.注意 :?:的优先级仅比赋值运算符和逗号运算符 高,故在和其它运算符混合使用时应在其两边加 上括号。
4.3 逻辑运算符和逻辑表达式
一、逻辑运算符(3种): ! 逻辑非(一元运算符) && 逻辑与(二元运算符) || 逻辑或(二元运算符) 逻辑运算符的操作数为逻辑型量 优先顺序如下: !(非) &&(与) ||(或)
4.3 逻辑运算符和逻辑表达式
二、运算规则
!a: 若a为“真”,则!a的值为“假”,若a为“假”,则!a的值为 “真”。 a&&b: 若a和b皆为“真”,则a&&b的值为“真”,否则为 “假”。
4.5
循
环
我们可以将以上for循环用下面的while循环等价地表 示: e1; 求解表达式e1 while(e2) 0 { 语句 e2 e3; 非0 } 语句 例: i=1; 求解表达式e3 while(i<=10) { sum=sum+i; i++; }
4.5
循
环
2 3 5 7 11 13 17 19 23 ...
例:求2至32767之间的所有素数。 main() { int i,n; for(n=2;n<=32767;++n) { for(i=2;n%i;++i); if(i==n) printf(“%d\n”,n); } }
4.5
循
环
说明: (1)for语句中的表达式可以部分省略或全部省略,但分号 不能省略.如果e2省略,则认为测试结果恒为“真”。 故循环将永远执行下去。例: for( ; ; ); for( ; ; ) putchar(„a‟); 但下面循环不会永远执行下去 for( i=1;;i++)sum = sum+i; (2)for语句中e1,e2,e3可以是任何有效的C语言表达式.可 以是逗号表达式 .例: for(i=1,sum=0;i<5;i++,i++) sum+=i;
表达式1
非0
语句1
表达式2
非0
语句22
表达式3
非0
语句3
表达式n 0 语句n+1
非0
语句n
4.4 条 件 分 支
例:将百分制成绩s1换为5分制成绩s2。
if(s1<60) s2=1; else if(s1<70) s2=2; else if(s1<80) 等价 s2=3; else if(s1<90) s2=4; else s2=5; if(s1<60) s2=1; else if(s1<70) s2=2; else if(s1<80) s2=3; else if(s1<90) s2=4; else s2=5;
的值是1(真) 的值是0(假) 的值是0(假) 的值是1(真)
2.逻辑运算符的操作数,可以是任何类型的数据,系 统最终以0和非0来判定它们的逻辑值是“真”还是 “假”。如:
′c′ && ′d′ 的值是1 4 && !a|| 2 的值是1
4.3 逻辑运算符和逻辑表达式
例: 判别某年year是否为闰年,可用如下 逻辑表达式来进行判断:
9 10
4.5
循
环
例:猴子第一天摘下若干个桃子,当天吃了一半,还不过瘾, 又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了 一个。以后每天都吃前一天剩下的一半零一个。到第10天再 想吃时,只剩下一个桃子了。求第一天共摘下多少个桃子。 设桃子总数为N1,则有: n1=2(n2+1) main() n2=2(n3+1) { int i=1,s=1; n3=2(n4+1) for(;i<=9;++i) ┆ s=2*(s+1); n9=2(n10+1) printf(“%d\n”,s); n10=1 }
4.2 关系运算符和关系表达式
二、关系表达式 关系表达式的值是一个逻辑值,即“真”或 “假”。如:“5==3”的值为“假”,“6>3” 的 值为“真”. 三、说明 前4种关系运算符(<,<=,>,>=)的优先级相同, 后两种也相同。且前4种的优先级高于后两种。 C语言没有逻辑型数据,以整数1代表 “真”, 以0代表“假”。如:a=(5>3) 结果将a置为1
运行结果:
0 1 2 3 We′re out of the loop
4.5
循
环
3.注意 while循环是“先判断,后执行”。如果刚进入循 环时条件就不满足,则循环体一次也不执行。它 相当于一条空语句。 如:while(0)printf(“%d\n”,x); 循环条件一定要有不满足的时侯,否则将出现 “死循环”。 如:while(1)printf(“%d\n”,x); 循环体如果包含一个语句以上,应组成复合语句. 如:while(a<b){t=a;a=b;b=t;}
如果要让其和最外层if配对,必须用块来显式 地标界如下:
if(a>b) { if(b<c) c=a; } else c=b;
4.4 条 件 分 支
计算 y= 程序:
main() { int x,y; scanf(“%d”,&x); if(x<0) y=x-1; else if(x=0) y=0; else y=x+1; printf(“x=%d,y=%d”,x,y); }
a||b: 若a和b皆为“假”,则a||b的值为“假”,否则为“真”。
三、逻辑表达式
表达式的结果最终是由逻辑运算符运算的称为逻辑表达式. 如:a=3,b=2,c=4,d=5 则: (a>b)&&(c<d) 值为 1 !(a>b) (a>b)||(c<d) 值为 0 值为 1
4.3 逻辑运算符和逻辑表达式
4.4 条 件 分 支
C语言提供了三种形式的条件分支语句。 一、简单if if (表达式) 语句 表达式
if(ch>=„a‟&& ch<=„z‟) putchar(ch);
非0
这里语句也可以是块, 如:
0
语句
if(a>b) { t=a; a=b; b=t; } 如果写成 if(a>b) t=a;a=b;b=t;则完全不同。
4.5
4.break语句 作用:中断循环,例:
循
环
main( ) { int i=0; while (i<1000) { if(i==5) break; else printf(“%d\n”,i); i++ ; } printf(“the loop break out\n”); }
4.5
循
环
4.4 条 件 分 支
二、块if if(表达式) 语句1 else 语句2 例: if(a>b) printf(“%d”,a); else printf(“%d”,b);
0 非0
表达式 语句2 语句1
4.4 条 件 分 支
三、if-else-if语句 if(表达式1) 语句 1 else if(表达式2) 语句 2 ┆ else if(表达式n) 语句 n else 语句 n+1
(year%4==0&&year%100!=0)||year%400==0
非闰年的判断条件为:
!(year%4==0&&year%100!=0)||year%400==0)
(year%4!=0||year%100==0)&&year%400!=0 (year%4||!(year%100))&&year%400
四. 四种运算符的优先级: ! 高 算术运算符 关系运算符 && || 赋值运算符 低 例: a = 5>3 && 2 || 8<4-!0
结果为Biblioteka Baidu1
4.3 逻辑运算符和逻辑表达式
五、说明 1.将一个量作为逻辑量来判断其真假值时,将非0作为 “真” ,将0作为“假”。例如:
3||0 3&&0 !3 !0
4.5
二、do-while循环 1. do-while 循环的语法:
循
环
语句
非0
0 2. 注意: do-while循环是“先执行,后判断”。不管循环条件是否 满足,循环体至少执行一次。等价于: s; while(e) s; 循环体如果包含一个语句以上,应组成复合语句. 同while循环一样,break和continue在 do-while 语句中也起 相同的作用 .
4.5
循
环
一、while循环 1. while语句的语法是:
while(表达式)
0
语句
表达式
非0
2. 功能:条件满足时执行循环体, 条件不满足时结束循环转去执 行下一条语句.
语句
4.5
例:
循
环
main( ) { int i=0; while(i<4) printf(“%d\n”,i++); printf(“We\‟re out of the loop\n”); }
4.5
循
环
(3) for语句的循环体由多个语句组成,要形成复合语句 . (4) 在for语句的循环体中使用break和continue语句。例: main( ) { int i; for(i=1;i<=100;++i) 1 { if(i==5) continue; 2 3 printf(“%d\n”,i); 4 if(i==10) break; 6 } 7 8 }
循
环
isprime(n) int n; { int i=2; while(n%i)i++; if(i==n) printf(“%d is prime\n”,n); else printf(“%d is not prime\n”,n); }
4.5
循
环
5. continue语句 使用continue语句跳出本次循环体直接进入下一轮循 环。continue通常要和if语句一起使用。 main( ) 1 { int i=0; 2 while(++i<10) 3 { 4 6 if(i==5) continue; 7 printf(“%d\n”,i); 8 9 } }
4.4 条 件 分 支
在嵌套使用if语句时,应注意的一点是if和else的 配对关系. 原则:else只和其前面最靠近它的if配对. 例:
if(a>b) if(b<c) c=a; else c=b;
尽管我们在书写程序时,让else和最外层的if对 齐,但它实际上是和内层if配对的。
4.4 条 件 分 支
4.5
循
环
isprime(n) int n; { int i=1; while(++i<n) if(n%i==0) { printf(“%d is not prime\n”,n); i=n; } if(i==n)/*是否被自己整除?*/ printf(“%d is prime\n”,n); }
4.5
do 语句 while(表达式);
表达式
4.5
循
环
三、for 循环 用于定长循环(循环次数确定的循环)。还可以用于变 长循环。且完全可以取代while循环。 for语句的基本形式: for(e1;e2;e3) 语句 这里e1,e2,e3都是表达式,分别对应着循环控制中的 三个基本组成部分.即: ① 循环控制变量的初始化。 ② 循环条件测试。 ③ 循环控制变量的增量操作。 例: for(i=1;i<=10;i++) sum = sum + i;