当前位置:首页 >> 学科竞赛 >>

cn第3讲(1)


?

格式化输入/输出(scanf和printf)

?
?

字符输入/输出(getchar/putchar)
字符串输入/输出(gets/puts)

LOGO

? ? ? ?

简单语句 复合语句 空语句 流程控制语句
<

br />LOGO

语句种类

语句的大概格式 if( )?else? for( )? while( )? do?while( )

说明 条件语句 循环语句 结束本次循环

控制语句

continue

break
switch goto return 简单 语句 函数调用语句 函数名(参数列表);

终止switch语句或循环
多分支选择语句 转向语句 从函数中返回语句 如printf(“大家好!”);

表达式语句
空语句 复合语句

表达式;
; {?}

i++;

a=a+3;

引入: ? 输入一个成绩cj,若分数高于60分,则输出 “PASS”。 条件 if单分支 ? 输入一个整数a,若a是偶数,则输出“偶数”, 否则输出“奇数”。条件
if-else双分支

? 计算分段函数
选择结构

y=

x2+2x+1 x<-1 条件 2x+sin(x) -1≤x≤1 x3-1 x>1
if-else-if多分支

LOGO

? 要设计选择结构程序,要考虑两个方面的问题:
? 一是在C语言中如何来表示条件。 ? 二是在C语言中实现选择结构用什么语句。

LOGO

C语言程序设计----Programming in C

第3讲 选择结构程序设计(1)

本节主讲:

? 5.1 条件的表示
? 5.2 if语句

LOGO

一、条件的表示

? 在C语言中表示条件,一般用关系表达式或逻辑

表达式,实现选择结构用if语句或switch语句。

LOGO

1.关系运算符和表达式 ? 关系运算符 (左结合) > >= < <= == != 高 低 ? 优先级:算术运算符>关系运算符>赋值>逗号 ? 关系表达式,即用关系运算符将运算对象连接成的式子。
例如:

a==b>=c (等价于 a == ( b>=c ) )
12< ‘C’+1 (字符型数据用ASCII值进行比较)

LOGO

关系运算符

名称

案例

含 义

> >= < <=

大于

x>y 若x大于y,结果为真(1);否则结果为假(0)

大于等于 x>=y 若x大于等于y,结果为真(1);否则结果为假(0)

小于

x<y 若x小于y,结果为真(1);否则结果为假(0)

小于等于 x<=y 若x小于等于y,结果为真(1);否则结果为假(0)

==
!=

等于 不等于

X==y 若x等于y,结果为真(1);否则结果为假(0) x!=y 若x不等于y,结果为真(1);否则结果为假(0)

说明:
? 关系运算的结果应该是逻辑值。 ? C语言用数值用 1 表示逻辑真, 0 表示逻辑假。

? 关系表达式的值:0 或1
int a=3,b=2,c=1,d,f;

关系表达式: a>b (a>b)==c b+c<a d=a>b f=a>b>c
LOGO

说明:
? 实型数可进行大于或小于比较,但通常不进行 == 或 != 的关系运算
#include <stdio.h> #include <math.h> void main() { float d=123.45; if(fabs(123.45-d)<1e-5) printf("1\n"); else printf("0\n"); }

例:#include <stdio.h>
void main() { float d=123.45; if(123.45==d) printf("1\n"); else printf("0\n"); }

LOGO

思考: ? 数学式x≥0如何用C语言表达式表示? ? 数学式0 ≤x ≤ 10如何用C语言表达式表示?

LOGO

2.逻辑运算符和表达式
? 逻辑运算符 : && || ! ? 逻辑运算符的优先级和结合性: ? !是单目运算符,右结合,高于算术运算符 ? && 和 || 是双目运算符,左结合,高于赋值运算符, 低于关系运算符 ? 算术>关系>逻辑>赋值>逗号 (!高于算术运算符) ? 逻辑表达式:用逻辑运算符将运算对象连接成的式子 例如: int a=3,b=5,c=7; 0&&'b' a || b-5 || c/4 !a+b >= c

LOGO

逻辑运算规则

? 从左到右依次进行逻辑计算 运算对象
? 运算对象为非0表示逻辑真 ? 运算对象为 0 表示逻辑假

逻辑运算结果 a&&b a || b 1 0 1 1 !a 0 0

a 非0 非0

b 非0 0

? 逻辑运算的结果为 0 或 1
例: int a=15,b=0,c=-2; a && b && c 结果为: a || b || c 结果为: (a+c) || b && c 结果为:

0
0

非0
0

0
0

1
0

1
1

逻辑与(&&):同真则真,有假则假 逻辑或(||): 同假则假,有真则真 逻辑非(!): 非此即彼
LOGO

? 运算按照从左至右的顺序进行,一旦能够确定逻 辑表达式的值,就立即结束运算 ——逻辑运算的短路性质
例如设:a=1,b=0,c=-2 a && b && c 为 0,运算终止,表达式值为 0

(a++) || ++ b
为非0,运算终止,表达式值为 1 且a为2,b为0

LOGO

3. 控制条件的描述与表示
常见的控制条件有如下几种形式: (1)关系表达式: (2)逻辑表达式: 例,a>b a==0 a!=0 等

例, a>b&&c>d 等

例如: ? 表示“学生的语文成绩在90分以上” ? 一个数为奇数 ? 表示“学生的语文成绩在90分以上并且数学成绩在95分以下” ? 判断变量ch是否是大写字母
LOGO

? 表示数学公式a>b>c

b>c&&b<a
? 判断a, b, c三条线段能否组成一个三角形

a+b>c && a+c>b && b+c>a
? 判断一个字符变量ch是否是数字字符?

ch>= '0'&&ch<= '9'

LOGO

练习:
/*判断x值是否介于1和100之间*/ /*判断x值是否小于1或大于等于100*/ /*判断x和y值是否都大于等于0*/ /*判断变量ch是否为大写字母*/。
x>=1&&x<=100 x<1||x>=100 x>=0&&y>=0 ch>= 'A '&&ch<=’Z’
LOGO

例: 设整型变量year表示年份,构造一个条件表达式,当year值为

闰年时该条件表达式为“真”,否则为“假”。
分析: 根据数学知识,闰年年份满足的条件为: 1.所以,判断闰年的条件表达式为下列二者之一: 如果年份能被4整除但不能被100整除,是闰年; year%4==0&&year%100!=0 2.① 年份能被 400整除,也是闰年。 ② year%400==0 表达式① ②的或运算完整地表示判断闰年的条件:

(year%4==0&&year%100!=0)|| year%400==0
等价表示: year%4==0&&year%100|| year%400==0

LOGO

【编程练习】:判断a, b, c三条线段能否组成一个三角形

#include <stdio.h> void main() { int a,b,c; printf("请输入三角形的三条边长(整数):\n"); scanf("%d%d%d",&a,&b,&c); if( ) printf("能构成三角形。"); else printf("不能构成三角形。"); }

a+b>c && a+c>b && b+c>a
LOGO

二、选择结构程序设计——if语句
? C语言利用关系表达式和逻辑表达式来构筑一些复杂的控 制条件。这种根据控制条件选择程序中某一部分语句执行 的结构叫选择结构。 ? 选择结构体现了程序的判断能力。

选 择 结 构 分 为 单 分 支 、 双 分 支 和 多 分 支 。 有 if 和 switch两种分支选择结构语句。

LOGO

思考: ? 输入一个成绩cj,若分数高于60分,则输出 “PASS”。 条件 if单分支 ? 输入一个整数a,若a是偶数,则输出“偶数”, 否则输出“奇数”。条件
if-else双分支

? 计算分段函数
选择结构

y=

x2+2x+1 x<-1 条件 2x+sin(x) -1≤x≤1 x3-1 x>1
if-else-if多分支

LOGO

1、if语句——单分支和双分支 if语句有“if单分支”和“if-else双分支”两种基本 语句形式。 ? 单分支语句格式: if(表达式) 语句 双分支语句格式: if(表达式) 语句1 else 语句2 ? 说明:
? condition是控制条件表达式,圆括号“( )”必不可少;

例,if b==a area=a*a;
LOGO

/*错,缺少条件括号*/

? if内嵌的statement在语法上是一条语句。

if条件结构 if(表达式) 语句

if-else条件结构 if(表达式) else F T 语句1 语句1 语句2

条件 T 语句

条件 语句2

F

LOGO

内嵌语句语法上为一条语句: ? 赋值语句 ? 函数调用语句 ? 控制语句 ? 复合语句 ? 空语句

? 例,某学生在“成绩管理系统”中查询成绩,软件系统显 示学生成绩,且只对成绩高于(包括)90分的学生表示 庆贺。该程序段用单分支语句实现如下:

?? if(grade>=90) /*检测条件为成绩高于(包括)90分*/ printf(“congratulations!\n”); /*条件满足表示庆贺,不满
足就跳过该语句*/

printf(“Your grade is

%d.\n”,grade); }

LOGO

【例1】把大写字母转换为对应小写字母 。

分析:
(1)问题背景:使用QQ等软件时经常要输入用户名和密 码。如输入的用户名不区分大小写,这时需要把所有输入 的字母转换为相应的小写字母和系统存储的内容进行判断 比较。 (2)需求分析:从键盘输入一个字符,若是大写字母, 输出其对应的小写字母。否则直接输出。 (3)数学建模:小写字母的ASCII码值=大写字母的ASCII 码值+32。

LOGO

算法NS流程图描述 char ch; 输入字符ch;
ch>=’A’&&ch<=’Z’ T ch=ch+32; 输出ch;

F
单分支

#include <stdio.h> void main() { char ch; printf("请输入一个字符:\n"); ch=getchar(); printf("输入的原始字符为%c:\n",ch); if(ch>='A'&&ch<='Z') ch=ch+32; printf("转换后的字符为%c:\n",ch); LOGO }

【例2】编程实现,求任意两数中较大的数。 #include<stdio.h> void main(void) { int x,y,max; printf("请输入两个整数:"); scanf("%d%d",&x,&y); if(x>y) max=x; else max=y; printf("两数中较大的数为:%d\n", max); }
思考:求三个数中最大 /最小的数。P79 LOGO

双分支

【例3】用“假设思想”法求任意两数中的较大数。 (必记算法)

?

“假设思想”算法是指在程序中先假设某事 物成立,然后判断事实是否如此,如果事实和 假设的条件不符,则进行修正。

先假设,后验证
LOGO

“假设思想”(if单分支实现)
#include<stdio.h> void main(void) 如何来求 两个数中较小的数呢? { int x,y,max; printf("请输入两个整数:"); scanf("%d%d",&x,&y); max=x; /*假设思想。假设x的值较大*/ if(max<y) max=y; /*验证假设若不成立则max的值为y */ printf("输入的两个数为:x=%d, y=%d \n",x,y); printf("两数中较大的数为%d\n", max); }

先假设,后验证
LOGO

#include<stdio.h> void main(void) { int x,y,z,max; /* 定义实型数据 */ printf("请输入三个实数:"); scanf("%d%d%d",&x,&y,&z); max=x; /*假设x的值较大*/

if(y>max) max=y;
if(z>max) max=z;

/*第一次验证*/
/*第二次验证*/

printf("三数中较大的数为%d\n", max); /*输出结果*/

}
求三个数或更多数中的最大数或最小数都可以使用该算法。 LOGO

比较单分支和双分支

算法1 float x,y,max; if(x>y) max=x; else max=y; 输出max;
if-else双分支

算法2
float x,y,max; max=x; if(max<y) max=y; 输出max;
假设思想

LOGO

if-else双分支:

例:计算分段函数y=
分析:问题的算法如下(自然语言描述) (1)输入x; (2)如果 x<=0 否则 (3)输出y的值。 y=3-x; y=2/x;

3-x x≤0 2/x x>0 定义变量y,x 用户输入x X<=0 T F y=3-x y=2/x 输出y

LOGO

【例4】判断一个三位的整数是否为水仙花数。
若一个三位数各位数字的立方和恰等于这个数,则这个数为 水仙花数。如 153=13+53+33,所以153是一个水仙花数。 #include<stdio.h> void main(void) { int x,g,s,b; printf("请输入两个整数:"); scanf("%d",&x); b=x/100; s=x/10%10; g=x%10; if(b*b*b+s*s*s+g*g*g==x) printf(“%d是水仙花数。\n",x); else printf(“%d不是水仙花数。\n", x); }
LOGO

先拆分,后判断

二、选择结构程序设计
2.选择结构的嵌套
一个基本的if语句可以用作另一个if语句的分支语句,构 成嵌套选择结构。 如果 当前输入的用户名==系统保存的用户名 如果 当前输入的密码==系统保存的密码 登录成功 否则 重新登录 否则 重新登录

LOGO

程序如下:
#include <stdio.h> void main() { int mima,yhm; printf("请输入用户名(三位数字):\n"); scanf("%d",&yhm);

选择结构的 嵌套

if(yhm==246)
{ printf("请输入密码(三位数字):\n"); scanf("%d",&mima); if(mima==135) printf("欢迎进入C语言学习园地!\n"); else printf("密码错误,请重新登录!\n"); }

else
}
LOGO

printf("用户名错误,请重新登录!\n");

语句形式:
单分支if语句嵌套 if (表达式1) if (表达式2) 语句1; 双分支语句嵌套 if (表达式1) {if (表达式2) 语句1;} else 语句2;

if (表达式1) if (表达式2) 语句1; else 语句2;
LOGO

if (表达式1) if (表达式2) 语句1; else 语句2; else 语句3;

语句形式:
双分支语句嵌套

if (表达式1) if (表达式2) 语句1; else 语句2; else if (表达式2) 语句1; else 语句2;
LOGO

练习:

已知a=3,b=4,c=5,d=0,程序执行后,d=?
if (a>b) d=a; else if (c>b) d=c; else d=b; d=5 d=3 if (a>b) if (c>b) d=c; else d=b; else d=a; if (a>b) {if (c>b) d=c;} else d=b ; d=4

if (a>b) if (c>b) d=c; else d=b ; d=0
LOGO

【例5】编程实现,判断某数是否能被k整除。 #include "stdio.h" void main ( ) { int a,k; scanf ("%d%d",&a,&k); if (a%k==0) printf("%d能被%d整除\n",a,k); else printf("%d不能被%d整除\n",a,k); }

算法分析:

(1)定义并输入 数据a,k; (2) 判断a%k的 结果。

LOGO

if (k!=0) 或if(k) if(a%k==0) 注意: printf(“ %d能被 %d 整除。\n",a,k); #include "stdio.h" else 任何数除以 void main ( ) printf(“%d不能%d整除。\n",a,k); 零的值是无穷大 { int a,k; else printf("error !! "); ,计算机无法存 scanf ("%d%d",&a,&k); 储,就会产生一 if (k==0) printf("error!!"); 个数据溢出错误 并终止程序的执 else if(a%k==0) 行。因此,程序 printf("%d能被%d 整除。\n",a,k); 中必须避免被零 else 除的错误。 printf("%d不能%d整除。\n",a,k); }
LOGO

3.多分支if-else-if语句
考试成绩等级分段划分法

E
无效 数据

D

C

B

A

多分支
无效 100数据

0

60

70

80

90

if ( score<60) printf("不及格" ); else if ( score <70) printf("差"); else if (score <80) printf("中"); else if (score <90) printf("良"); else printf("优");
LOGO

多分支if-else-if语句的一般格式:
if(条件1) 语句1; else if(条件2) 语句2; else if(条件3) 语句3; ... else if(条件n) 语句n; else 语句n+1;

语句功能:
? 首先计算条件表达式1的值,如为真,执行子句1;否则,若 条件表达式2为真,执行子句2;?;以此类推,若条件表达 式n真,执行子句n;若有语句n+1,则执行语句n+1。 ? 所有条件均不成立,则结束if-else-if语句,执行其下一条 语句。
LOGO

【例6】编程实现,判断输入的字符类型。
必记程序

#include <stdio.h> 分析: void main() 设字符类型分为 : { char ch; ? 数字字符 printf(" 请输入一个字符"); ? ch=getchar(); 大写字母 ? 小写字母 if(ch>= '0'&&ch<='9') printf("这是一个数字字符。\n"); ? 其它字符 else if(ch>='A'&&ch<='Z') printf("这是一个大写字母。\n"); else if(ch>='a'&&ch<='z') printf("这是一个小写字母。\n"); else printf("是其它字符。\n"); 题目要求输入一 } 个字符,输出该 字符的类型。

LOGO

多分支语句if-else-if

课后思考:
多分支语句的应用:编程计算分段函数的值。
y= x2+2x+1 x<-1 2x+sin(x) -1≤x≤1 x3-1 x>1

分析: ? 分段函数的自变量取值范围一般是整个数轴或数轴某部 分。 ? 分段函数将数轴分成几段,在各段应用不同的公式计算 函数的值。

LOGO

小结
? 条件的表示(关系表达式或逻辑表达式) ? 选择结构程序设计——if语句 ? 单分支if if (x>y) print("%d",x); ? 双分支 if-else printf( if ( score<60) "不及格 " ); if (score>= 60) printf("Pass\n"); else if ( score <70) "); else printf("差printf("Fail\n"); else if (score <80) printf("中"); else if (score <90) printf("良"); ? 多分支if-else-if else printf("优");
LOGO

课后作业:

? 本章课后题

LOGO

下节主讲:

? 条件运算符 ? 5.3 switch语句

LOGO

LOGO


相关文章:
第3讲 二项式定理1
第3讲 二项式定理1_高三数学_数学_高中教育_教育专区。第3讲【2013 年高考会...0 1 (4)二项式的系数从 Cn,Cn,一直到 Cn-1,Cn. n n 3.二项式系数的...
第1章 第3讲 高考
第3讲 1.(多选)(2015 年六校模拟)物体甲的速度与时间图象和物体乙的位移与时间图象分别 如图 1-3-12 所示,则这两个物体的运动情况是( )1-3...
专题1 第3讲
专题1 第3讲_数学_高中教育_教育专区。多年积累非常棒的数学题专题一一、选择题 第三讲 ? 2x,x≥0 ?a· ? 1.(2014· 江西文,4)已知函数 f(x)=-x ...
第1部分 第1章 第3讲
高考地理轮复习第1部分第1第3讲高考地理一轮复习第1部分第1第3讲隐藏>> 第一部分 第一章 第3讲 、单项选择题 第 30 届奥运会于 2012 年 7 月...
1.1第3讲 认识图形(三)
1.1第3讲 认识图形(三)_数学_小学教育_教育专区。第三讲 认识图形(三) 1.这叫“长方体”。 长方体有六个面,十二条棱,八个顶点。长方体的面一般是长...
第1章第3讲(8.5)
第1第3讲(8.5)_工学_高等教育_教育专区。高 2016 届第四学期暑期作业答案 物理复习练习 第 1 章第 3 讲 1. B 2. B 11. (1)会 追及、相遇问题和...
第一单元 第3讲
单元 第3讲_理化生_高中教育_教育专区。第3讲 生命活动的主要承担者——蛋白质 [考纲要求] 蛋白质的结构和功能(Ⅱ)。 一、氨基酸及其种类 [判一判] 1...
3第3讲1.2
模电第2讲 1.3 32页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能...* ? n n CN , 其中 m ? max(0, M ? ( N ? n)) , max(0, M...
第3讲 速算(1)
第3讲 速算(1)_四年级数学_数学_小学教育_教育专区。小学数学分层学习教程(四年级) 第3讲解题训练:【除法】 一、填空。 解题训练 @ 速算 1、口算240÷60时...
第3讲圆(1)
第​3​讲​圆​(​1​) 暂无评价|0人阅读|0次下载|举报文档第三讲一. 解题方法技巧: 圆(1) (基础班) 1. 分类讨论解“圆题” ,防止漏解 一...
更多相关标签:
春节后的讲话 gov.cn | .cn百家讲坛之武则天6 | .cn诗篇十九篇家讲道 | www.cnr.cn养生大讲堂 |