C3(选择结构)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else 语句4;
• C语言规定,else 总是和它上面离它最近的未曾 匹配的 if 匹配。
2012-12-14 程序设计基础 作者 鲍志斌 31
选择结构 程序设计举例
2012-12-14
程序设计基础
作者 鲍志斌
32
写程序,判断某一年是否闰年
分析:
做什么?判断某一年号是否为闰年; 什么是闰年?年号能被4整除,但不能被100整除或年号 能被400整除时,该年为闰年。
29
例: 有一函数
-1 (x<0); (x = 0);
y=
0
1
(x>0);
编写程序,输入一个x值,输出对应的y值。 程序段: if (x<0) y = - 1;
else if(x == 0)
else
y=0;
y =1;
2012-12-14
程序设计基础
作者 鲍志斌
30
if 语句的嵌套
• 在一个 if 语句中又包含了另一个 if 语句,称为 if 语句的嵌套。 • 一般形式为: if( 条件1) if (条件11 )语句11; else 语句12; else if ( 条件2) 语句3;
}
}
if(a > b) max = a; if(a <= b)max = b;
printf("max = %d", max);
条件运算符和条件表达式:
#include <stdio.h> main() { 表达式1 ? 表达式2 : 表达式3 int a, b, max;
printf("Input a, b:"); scanf("%d,%d", &a, &b);
2012-12-14 程序设计基础 作者 鲍志斌 34
求方程 ax2+bx+c=0 的解
• 分析:方程 ax2+bx+c=0 的解的情况: • a==0: • b!=0: 唯一根,-c/b; • b==0: • c==0: 无穷多个根; • c!=0:无解; • a!=0: • b2-4ac==0: 两个相同的实根,-b/(2*a) • b2-4ac>: 两个不同的实根, (-b+sqrt(b2-4ac)) /(2*a)、 (-b-sqrt(b2-4ac)) /(2*a) • b2-4ac<0: 两个不同的虚根,-b/(2*a)+i sqrt(b2-4ac) /(2*a)、-b/(2*a) - i sqrt(b2-4ac) /(2*a)
2012-12-14
程序设计基础
作者 鲍志斌
21
#include <stdio.h> int main(void) { double x, y; printf("Enter x (x>=0):\n"); /* 输入提示 */ scanf("%lf", &x); /* 调用scanf函数输入数据 */
如果不用复合语句,会怎样?
a = 3;b = 5; a = 5;b = 3;
{ tt = a;a = b;b = t;} = a;a b;b = t;
printf(“a = %5.2f,b = %5.2\n”,a,b);}
必须用复合语句
2012-12-14 程序设计基础 作者 鲍志斌 24
练习3:
2012-12-14
程序设计基础
作者 鲍志斌
27
用于多分支控制的条件语句: (Multiple Selection)
Step a if (expression1) { … } … }
else if (expression2) { else Step z { … }
例:如果成绩 ≥ 90,输出:优秀 如果成绩〈 90 并且成绩 ≥ 80 ,输出:良好 如果成绩〈 80 并且成绩 ≥ 60,输出:通过 如果成绩〈 60,输出:不及格
语句1; else 语句2; switch(算数表达式)
{ case 1: 语句1;break; case 2: 语句2; break; …… }
2012-
7
实现选择结构的语句:
• if 语句: if语句、 if - else语句、 if嵌套语句。 • switch语句(多分支语句)
}
输出成绩高于 90 分的学生成绩和学号。
语句格式:
if( score >90 ) printf(“ %ld, %d\n”,No,score);
或: if( score >90 ) { printf(“ 学号:%ld\n”,No); printf(“ 成绩: %d\n”,score); }
2012-12-14 程序设计基础 作者 鲍志斌 11
设计解题步骤: 定义相关变量:年号——year
输入原始数据:输入年号(scanf) 判断该年是否为闰年: if ((year%4==0&&year%100!=0) ||year%400==0)) printf(“%d is a leap year\n”,year); else printf(“%d is not a leap year\n”,year);
Symbol
【引例】计算两整数的最大值
Input
• num1 • num2
Process
Output
max
????
选择结构(分支结构) (Selection Structure)
Single Selection
Double Selection
Multiple Selection
if
if - else - if if - else
【例5.1】计算两整数的最大值
Input
•a •b
Process
Output
max
????
max = a; if (b > max ) max = b;
2012-12-14 程序设计基础 作者 鲍志斌 12
【例5.1】计算两整数的最大值
#include <stdio.h> void main(){ int a, b, max;
printf("Input a,b:");
scanf("%d,%d", &a, &b); max = a; if (b > max ) max = b; max);
printf("max = %d\n",
}
执行过程
Input a,b: _ 0 15_ 2 max = 20_
2012-12-14
程序设计基础
if (x >= 90) printf(“优秀”) ; X<90 X<80 X<60
2012-12-14
else if (x >= 80) printf(“良好”) ;
else if (x>= 60) printf(“通过”) ;
else printf(“不及格”) ; 其它语句;
程序设计基础
作者 鲍志斌
2012-12-14
程序设计基础
作者 鲍志斌
8
if 语句
if 形式:
if (表达式) 语句;
if–else 形式:
if (表达式) 语句1; else 语句2; if (表达式1) 语句1; else if (表达式2) 语句2;
程序设计基础 作者 鲍志斌 9
else – if 形式
2012-12-14
写出完整程序;
程序设计基础 作者 鲍志斌 33
2012-12-14
程序
#include<stdio.h>
void main(){
int year;
scanf(“%d”, &year);
if ((year%4==0&&year%100!=0) ||year%400==0)) printf(“%d is a leap year\n”,year); else printf(“%d is not a leap year\n”,year); }
max a
a > b?
max b
Output max
End
printf("max = %d\n", max);
计算两整数的最大值
#include <stdio.h> main() { int a, b, max; printf("Input a, b:"); scanf("%d,%d", &a, &b); if (a > b) max = a; else max = b;
statement4;
}
如果成绩高于 90 分则输出“优秀”;否则输 出“通过”。
格式:
if ( score>= 90) printf(“优秀”); else printf(“通过”);
2012-12-14
程序设计基础
作者 鲍志斌
16
计算两整数的最大值
Start Input a and b max a
Yes
a > b? Output max End
No
max b
Flowchart: Calculate the Maximum
Turn Flowchart to C Program
Start
Input a and b
Yes No
scanf("%d,%d", &a, &b); if (a > b) max = a; else max = b;
if
(a > b) max = a; else max = b;
}
}
max = a > b ? a : b;
printf("max = %d", max);
练习:
1. 分段计算水费:
4x 3 y = f(x) = 2.5x -10.5
x 15 x > 15
编写程序,输入一个x值,输出对应的y值。
输入三个数,将他们之中最大的输出
2012-12-14
程序设计基础
作者 鲍志斌
25
练习4:
输入三个数,将他们按从小到大
的顺序输出
2012-12-14
程序设计基础
作者 鲍志斌
26
核心语句段:
if (a>b) { a与b交换} if (c>b) printf ( “%d<%d<%d\n”, a, b ,c); else if (c>a) printf (“%d<%d<%d\n ”,a ,c ,b); else printf ( “%d<%d<%d\n”, c, a, b);
if(x <= 15)
else return 0; }
2012-12-14
y = 4 * x / 3;
y = 2.5 * x - 10.5;
/* if – else语句 */
printf("y = f(%f) = %.2f\n", x, y);
程序设计基础
作者 鲍志斌
22
2. 输入两个数,按从大到小的顺序将他们输出;
2012-12-14
必须用复合语句
t = a;a = b;b = t;}
程序设计基础 作者 鲍志斌 23
printf(“a = %5.2f,b = %5.2\n”,a,b);}
关于复合语句:
#include <stdio.h> void main( ) { float a,b,t; scanf(“%f , %f”, &a , &b); if (a<b)
1. 定义三个变量a、b、t; 2. 输入两个数到a、b中; 3. 如果a的值小于b的值,则将 a的值与b的值交换; 4. 按a,b的顺序输出。
怎么做?
#include <stdio.h> main( ) { float a,b,t;
scanf(“%f , %f”, &a , &b);
if (a<b) {
作者 鲍志斌
14
用于双分支控制的条件语句 ( Double Selection)
Syntax:
if (expression) Or: if (expression)
{
statement1;
statement2; }
statement1;
else
statement2;
else { statement3;
选择结构
入口
yes
no
P A B
出口
2012-12-14 程序设计基础 作者 鲍志斌 6
选择结构适用于:
根据具体条件来决定如何操作的情况。例如:
1.
2. 3.
如果„, 则„
如果„, 则„;否则„; 多项选择:
if (表达式) 语句;
if (表达式) 设month表示月份;
可以根据month的 不同值判断出那个 月的天数。
if Statement
The structure is similar to single selection
语法: if ( or
if ( {
表达式非0为真
expression statement; expression statement1; statement2;
)
)
复合语句
compound statement 被当作一条语句看待
选择结构程序设计
2012-12-14
程序设计基础
作者 鲍志斌
1
流程图(Flowchart)
Flowchart represents algorithm graphically.
Semantic Start/End Process Input/Output Test Connector Flow of activities