精品-清华大学C语言课件 第3章02 描述算法
清华大学C语言教学课件(共16个PPT)第1个共26页文档
53、 伟 大 的 事 业,需 要决心 ,能力 ,组织 和责任 感。 ——易 卜 生 54、 唯 书 籍 不 朽。——乔 特
55、 为 中 华 之 崛起而 读书。 ——周 恩来
清华大学C语言教学课件(共16个PPT)
第1个
21、没有人陪你走一辈子,所以你要 适应孤 独,没 有人会 帮你一 辈子, 所以你 要奋斗 一生。 22、当眼泪流尽的时候,留下的应该 是坚强 。 23、要改变命运,首先改变自己。
24、勇气很有理由被当作人类德性之 首,因 为这种 德性保 证了所 有其余 的德性 。--温 斯顿. 丘吉尔 。 25、梯子的梯阶从来不是用来搁脚的 ,它只 是让人 们的脚 放上一 段时间 ,以便 让别一 只脚能 够再往 上登。
清华大学C语言程序教程
十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123.
指数形式:(e或E之前必须有数字;指数必须为整数) 如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5
❖实型常量的类型
默认double型 在实型常量后加字母f或F,认为它是float 型
例问36题例0505:031062 与为 为12ilnoLtn型g int 型
0123 = (
)10
0x123 = (
)10
2020/11/13 0Xff = (
)10
问题: 0123 = ( 0x123 = ( 0Xff = (
83 )10 291 )10 255 )10
C语言程序设计
实型常量(实数或浮点数)
实型变量
❖float:占4字节,提供7位有效数字 ❖double:占8字节,提供15~16位有效数字
字符例型fl变oat量a;
❖字ad=o符u11b变1le1量11b存.;11放1;字符A/*SCaI=I1码11111.1*/ ❖cbh=a1r1与11i1n1t.数111据; 间可/*进b=行1算111术11运.1算11*/
直接常量: ❖ 整型常量 ❖ 实型常量 ❖ 字符常量 ❖ 字符串常量
void main() {
int num,total; num=10; total=num*PRICE; printf("total=%d",total);
}
2020/11/13
运行结果:total=300
C语言程序设计
整型常量(整常数)
}
2020/11/13
结果:x=3.600000,i=3
C语言课件(清华大学出版社)
C程序设计(第三版)
第二章
C程序设计(第三版)
本章要点
算法的概念 算法的表示 结构化程序设计方法
C程序设计(第三版)
主要内容
2.1 算法的概念 2.2 简单算法举例 2.3 算法的特性 2.4 怎样表示一个算法 2.5 化程序设计方法
(8)程序可移植性好(与汇编语言比)。 基本上不做修改就能用于各种型号的计 算机和各种操作系统。
C程序设计(第三版)
1.2 C语言的特点
问题:既然有了面向对象的C++语言,为 什么还要学习C语言?
解释1:C++是由于开发大型应用软件的需 要而产生的,并不是所有的人都要去编 写大型软件。
解释2:面向对象的基础是面向过程。C++ 是面向对象的语言,C是面向过程的,学 起来比C语言困难得多,所以不太适合程 序设计的初学者。
C程序设计(第三版)
设y为被检测的年份,算法可表示如下 :
S1:2000 → y
S2:若y不能被4整除,则输出y “不是闰年”。然后转 到S6
S3:若y能被4整除,不能被100整除,则输出y “是闰 年”。然后转到S6
S4:若y能被100整除,又能被400整除,输出y“是闰年 ”,否则输出“不是闰年”。 然后转到S6。
C程序设计(第三版)
用这种方法表示的算法具有通用性、 灵活性。S3到S5组成一个循环,在实现 算法时 要反复多次执行S3,S4,S5等步 骤,直到某一时刻,执行S5步骤时经过 判断,乘数i已超过规定的数值而不返回 S3步骤为止。此时算法结束,变量p的值 就是所求结果。
清华大学殷仁昆教授数据结构C语言描述PPT课件
数据结构课程的地位
• 是介于数学、计算机硬件和计算机软件三 者之间的一门核心课程数据结构课程的地 位。
关系
数学
对象
对象
关系
软件
硬件
关系
操作
操作
第3页/共18页
• 数据结构是一门研究非数值计算的程序设 计问题中计算机的操作对象及其之间关系 与操作的学科。是介于数学、计算机硬件 和计算机软件三者之间的一门核心课程, 属于计算机学科中的一门综合性专业基础 课程。
第5页/共18页
选修课课程设置与数据结构的关系
数据结构基础
计算机科学基础
算法与数 据结构Ⅱ
文件处理 (数据库)
算法设计与分析
软件工程
系统模拟
图形学
第6页/共18页
数值计算解决问题的一般步骤:
• 数学模型→选择计算机语言→编出程序 →测试→最终解答。
• 数值计算的关键是:如何得出数学模型 (方程)?
第8页/共18页
求解非数值计算的问题的步骤:
• 主要考虑的是设计出合适的数据结构及相 应的算法。即首先要考虑对相关的各种信 息如何表示、组织和存储?
• 可以认为:数据结构是一门研究非数值计 算的程序设计问题中计算机的操作对象以 及它们之间的关系和操作的学科。
第9页/共18页
数据结构课程的特点
• 数据结构课程是计算机专业基础课,主 要训练学生在系统开发中的数据设计、 算法设计与分析及数据组织的能力,它 是后续多门课程,如数据库、操作系统、 编译原理、网络系统基础等的基础,对 于从事计算机系统开发的人员,是必修 课程之一。
• 自觉预习、遵守纪律、认真听课、及时复 习;
• 按时、独立、认真地完成每次作业; • 完成作业方式:
清华大学c++课件第3章
18
int main() {
double k, r, s;
cout << "r = ";
cin >> r;
cout << "s = ";
cin >> s;
if (r * r <= s * s)
k = sqrt(tsin(r) * tsin(r) + tsin(s) * tsin(s));
else k = tsin(r * s) / 2;
明
<typen> namen
与 函数的返回值
使
–由 return 语句给出,例如:
用
return 0
–无返回值的函数(void类型),不必写 return语句。
4
C++语言程序设计
清华大学 郑莉
函 函数的调用
数 的
调用前先声明函数:
–若函数定义在调用点之前,则无需另外声
声 明;
明
–若函数定义在调用点之后,则需要在调用 函数前按如下形式声明函数原型:
sum = rollDice(); //第一轮投骰子、计算和数
23
switch (sum) { case 7: //如果和数为7或11则为胜,状态为WIN case 11:
status = WIN; break; case 2: //和数为2、3或12则为负,状态为LOSE case 3: case 12: status = LOSE; break; default: //其它情况,游戏尚无结果,状态为PLAYING,记下点数,为下一轮做准备 status = PLAYING; myPoint = sum; cout << "point is " << myPoint << endl; break; }
清华大学C 课程PPT课件
• 引入了类的机制,最初的C++被称为“带类
语 的C” 言 • 1983年正式取名为C++ 概 • 从1989年开始C++语言的标准化工作 述 • 于1994年制定了ANSI C++标准草案
• 于1998年11月被国际标准化组织(ISO)批 准为国际标准。2003年发布了C++标准第二 版,成为目前的C++
j = 50000;
i = j;//将unsigned short赋值给signed short变量
cout <<" The short int is:"<< i <<endl; //整型数值溢出
cout <<" The short unsigned int is:"<< j<<endl;
return 0; }
15
第15页/共99页
基 数据类—型整型数据及取值范围
本
数 类型
说明符 位数 数值范围
据 短整
short 16 -32768~32767
类 基本
int
32 -231~(231-1)
型 长整
long
32 -231~(231-1)
和 无符号
表 unsigned short 16 0~65535
达 式
unsigned int unsigned long
赋值运算符和—赋值—表达赋式值表达式举例 基
本 数 据
a=5
表达式值为5
a=b=c=5 表达式值为5,a,b,c均为5
类
a=5+(c=6) 表达式值为11,a为11,c为6
算法及算法的描述方法ppt课件
k能被400整除? Y
输出k是闰年
N
N 输出k不是闰年
结束
a
C
b
输出k不是闰年
A
成立
p
不成立
B
C
精品课件
判断闰年的流程图
开始
A
输入一个年份值k
结构不好!
B
N
k能被4整除?
Y
k能被100整除?
Y
k能被400整除?
Y
输出k是闰年
N
N
输出k不是闰年
a A B b
无法划分基 本单元!
结束
精品课件
求最大公约数流程图
其他(处理、语句)
➢ 赋值: ← ,例如 i ← 1 ➢ 如果p成立则A否则B: if p then A else B ➢ 当p成立时,则A:
» while p do A » do A while p ➢ 输入和输出(打印) :input、print ➢ 基本块起、止符号: {、 } ➢ 算法开始和结束:BEGIN、END
n的因子,说明n不是素数;否则,n是素数。
精品课件
素性判别
K ← K+1
开始 输入n的值
K← 2
Y
K不能整除n?
N N
K等于n?
Y
输出n是素数
输出n不是素数
结束
精品课件
求最大公约数
设有两个正整数m和n,如何求其最大公约数? 有多种方法,例如 求解速度最快的方法是辗转相除法。
辗转相除法(欧几里得算法): 给定两个正整数m和n,求它们的最大公约数(公因子)。 步骤1:【求余数】以n除m并令r为所得余数(0≤r<n) 步骤2:【余数为0?】若r=0,算法结束;n即为答案 步骤3:【互换】置m←n, n←r,转向步骤1。
C语言程序设计(上)清华大学出版社PPT课件
字符串常量的长度 : – 所包含的字符个数
字符串常量的存储方式:
所占存储单元数:串长度+1
例如:
a \0
字符串 结束标记
\n l u c k \0
3. 变量
26
1) 变量的有关概念
在程序运行过程中,其值改变的数据,称
为变量,变量用标识符表示,称为变量名。
变量必须“先定义后使用”
占内存(位) 占内存(字节)
数值范围
有效位数
32
4
3.4E-38~3.4E+38
7
64
8
1.7E-308~1.7E+308
16
80
10
1.2E-493~1.2E+4932
19
35
(2)表示方式。实型常数的表示方式如下。 十进制数:例如6.2,.96,-387.29。 指数形式:例如-2.3E3,-7.5E-3。
007 008 012 010 013 009 011 092 063 039 034 000
40
③字符串常量。字符串常量是由一对双引号 括起来的字符序列。例如:"BOOK",
“$20.5”等都是合法的字符串常量。 ④字符变量。字符变量的取值是字符常量,
即单个字符。字符变量的类型说明符是char。 ⑤符号常量。在C语言中可以用一个标识符
表2.3 字符型数据所占位数
数据类型 类 型 符
有符号字 符型
无符号字 符型
char unsigne
d char
占内 存 ( 位)
8 8
占内存 (字 节)
1 1
数值范围 (ASCII码值)
-128~127(有 符号字符型)
清华大学C语言谭浩强第3章
• 这种if语句在执 行时,依次判 断表达式的值, 当出现某个值 为真时,则执 行其对应的语 句。然后跳到 整个if语句之外 继续执行程序。 如果所有的表 达式均为假, 则执行语句n+1。 然后继续执行 后续程序。多 向分支语句的 流程图如图3-5 所示。
表达式1
假
真
பைடு நூலகம்语句1
表达式2
假
真
语句2
表达式3
• 下面是输入一个字符后程序的运行结果: 5↙ c=5------> A H↙ c=H------> B &↙ c=&------> F • 上述程序中的前4个“if…else语句”结构中else后 面的语句又是一个“if …else语句”,这种结构在C 语言中称为多层嵌套的if …else语句。
例3.1输入一个三位整数,依次输出该数的正(负)号和 百位、十位、个位数字。 #include<math.h> main() { char c1,c2,c3,c4; int x; scanf("%d",&x); /* 输入一个三位的整数 */ c4=x>=0?'+':'-'; /* 将x的符号存入c4 */ x=abs(x); /* 求三位整数的绝对值 */ c3=x%10+48; /* x%10获得个位数字,加48后转换为对应的字符 */ x=x/10; /* 获得x的前两位 */ c2=x%10+48; /* x%10获得十位数字,加48后转换为对应的字符 */ c1=x/10+48; /* x/10获得百位数字,加48后转换为对应的字符 */ printf("%c\n%c\n%c\n%c\n",c4,c1,c2,c3); }
C语言第3章_
o,x
f
e g c
计算机基础教学部
17
二、printf格式符说明
■ 另外,还有其他格式符如:
■m
■l ■ 将在需要的时候用实例讲解。
计算机基础教学部
18
二、printf一般格式
■
%[标志][输出最小宽度][.精度][长度]格式字符
#include <stdio.h> #include <stdio.h> main() main() { { 输出结果:10,3.4 int a=10; 10 3.4 int a=10; 输出结果:103.4 float b=3.4; float b=3.4; printf(“%d%f\n”,a,b);/*a是int类型,用%d格 printf(“%d ,%f\n”,a,b); 式, b是float类型,用 %f格式*/ } printf(“%d%6.2f\n”,a,b) }
}
计算机基础教学部
23
四、格式输入函数scanf
输入数据赋给变量:
#include <stdio.h> #include <stdio.h> #include <stdio.h> #include <stdio.h> main() main() main() #include <stdio.h> main() { { { main() { int a,b; float h,w; int a;{ float b; scanf(“%d%d”,&a,&b); printf(“请输入身高(米):”); scanf(“%d”,&a); double c; scanf(“%f”,&b); scanf(“%f”,&h); } scanf(“%lf”,&c); } } printf(“请输入体重(千克):”); } scanf(“%f”,&w); printf(“肥胖指数为:%.2f\n”,w/h/h);
C语言程序设计_课件_第三章(适于清华谭浩强版)
初学者经常会混淆关系运算符“ 初学者经常会混淆关系运算符“==”和赋值 和赋值 运算符“ , 因此要注意区分这两个运算符。 运算符 “ =”, 因此要注意区分这两个运算符 。 例3.3 #include "stdio.h" void main() { int x,y,z1,z2; x=2 ;y=2 ; z1=(x=y); z2=(x==y); printf("%d,%d\n",z1,z2); }
逻辑运算的规则与二进制的位逻辑是相 似的。 似的。 逻辑运算的规则下表: 逻辑运算的规则下表:
A 逻辑真 逻辑真 逻辑假 逻辑假 B 逻辑真 逻辑假 逻辑真 逻辑假 !A 逻辑假 逻辑假 逻辑真 逻辑真 !B 逻辑假 逻辑真 逻辑假 逻辑真 A&&B 逻辑真 逻辑假 逻辑假 逻辑假 A||B 逻辑真 逻辑真 逻辑真 逻辑假
注意: 注意:
算术表达式应能正确的表达数学公式。 算术表达式应能正确的表达数学公式。 例如: 例如:数学表达式是 3+x 2a 相应的C语言表达式应该是什么呢? 相应的C语言表达式应该是什么呢? 算术表达式的结果应该不超过其所能表示的 数的范围。例如,最大的整型数是32767 32767, 数的范围。例如,最大的整型数是32767, 那么,32767+ 就不会是正确的结果。 那么,32767+3就不会是正确的结果。而 32767L+ 的结果是正确的,因为32767 L+3 32767L 32767L+3的结果是正确的,因为32767L是长 整型数。 整型数。
3.4不同数据类型数据间的混合运算 3.4不同数据类型数据间的混合运算
自动转换 强制转换 赋值表达式的类型转换
自动转换
c语言教程(课件)第3章
本文由youlangoo贡献 ppt文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
第三章 C程序的流程设计 一、算法 算法的性质与组成要素 算法是进行操作的方法和步骤。
算法的性质: 解题算法是一有穷动作序列。
序列中只有一个初始动作。
序列中每一个动作仅有一个后继动作。
序列终止,表示问题得到解答,或问题没有解答。
算法的要素: 操作:各种运算、I/O读写均称为操作。
计算机算法是由操作 操作:各种运算、I/O读写均称为操作。
计算机算法是由操作 组成的。
控制结构: 顺序结构 选择结构 循环结构 算法的描述 自然语言 流程图 伪代码 计算机语言 以求两个数的最大数为例说明几种算法。
自然语言: s1: 输入两个数a,b 输入两个数a,b s2:找出最大数赋给m s2:找出最大数赋给m s3:输出最大数m s3:输出最大数m N-S流程图: 输入a,b 输入a,b y 输出a 输出a a>b n S2.1:如果a大于b, 则将a赋给m,否则将 b赋给m。
输出b 输出b 伪代码: input a ,b if a>b then m=a else m=b end if print m C代码: main() { int a,b,m; scanf(“%d %d”,&a,&b); if (a>b) m=a; else m=b; printf(“a=%d”,a); } 上机问题: 逻辑运算的注意事项。
E2-15 二、用C 二、用C语句描述算法 表达式语句 C语言是一种表达式语言,所有操作都通过表达式来实 现。
由表达式组成的语句叫表达式语句,它由表达式后加 一分号组成。
表达式语句的三种基本类型: 赋值语句:x=sin(y); 赋值语句:x=sin(y); 函数语句:printf(“a=%d 函数语句:printf(“a=%d b=%d”,a,b); 空语句: 空语句: ; 复合表达式语句(逗号表达式) 复合表达式语句(逗号表达式):几个表达式语句用 “ ,”分隔组合而成,如i=1 , j=2; 。
C语言课件第三章C语言的基本控制结构
XUAN SHANLI
else stat2;
说明: ①书写采取缩进形式, 便于区分。 ②else与最近的if 相匹 配,从内到外。
if(e2#)include <stdio.h>
svtoatid3; main ( void)
else{
stiantt4x; ,y ;
合 称为isf结ca构nf的(“嵌%套d”。, 各&x种);if结构都
void main(void)
后置:先引用后运算。
{
int a=3,b;
XUAN SHANLI
b=a+++a++;
printf(“b=%d”,b);
合 b=++a+(++a);
printf(“b=%d”,b);
}
肥
工 ⒉在逻辑运算中,如果逻辑值能确定,则不需再进行运算。
int a=0,b=0 ++a || b++; /* b的值?*/
}
内层缩进。
举例:求一元二次方程ax2+bx+c=0的根。
XUAN SHANLI
#include <stdio.h>
#include <math.h>
void main(void)
{
float a,b,c,d,e,x1,x2;
scanf(“%f,%f,%f”,&a,&b,&c);
d=b*b-4.0*a*c;
XUAN SHANLI
第三章 C语言的基本控制结构合
肥 工 业 大 学
问题
b*b-4ac<0?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
描述算法
1.用自然语言描述 2. 用流程图描述 3.三种基本结构 4.绘制N-S流程图 5.用伪代码描述算法
实例3 任意输入三个数,求这三个数中的最大数 实例4 判断2000~2500年中的年份是否为闰年 实例5 用伪代码描述n!
用自然语言描述
所谓自然语言就是日常生活中的语言,它可以是汉语,英语,日语等,一般描述一些简单问题步 骤可以通俗简单易懂。下面通过具体实例来介绍自然语言。 【例3.1】 求正整数a和b的最大公约数。 第一步:输入a和b的值; 第二步:求a除以b的余数c; 第三步:若c等于0,则b为最大公约数,算法结束;否则执行第四步; 第四步:将b的值放在a中,将c的值放在b中; 第五步:重新执行第二步。
【例3.6】 从键盘中输入一个数n,求n!。 该程序流程图如图3.16所示。
图3.16 求n!
该程序的N-S流程图如图3.17所示。
输入一个数赋给变量n
Y s=1 n>0
Y i=1
i<=n
n>=0
N
N 输出 error
s=s*i i=i+1 输出s
图3.17 求n!的N用介于自然语言和计算机语言之间的文字和符号来描述算法。它采用某一程序设计语言 的基本语法,如操作指令可以结合自然语言来设计。而且,它不用符号,书写方便,没有固定的语法 和格式,具有很大的随意性,便于向程序过渡。 下面通过一个例子用伪代码描述算法。 【例3.7】 用伪代码描述两个正整数a和b最大公约数的算法。
图3.12 顺序结构 (2)选择结构的N-S流程图如图3.13所示。
图3.13 选择结构
(3)当型循环的N-S流程图如图3.14所示。 当P成立
图3.14 当型循环 (4)直到型循环的N-S流程图如图3.15所示。
当P成立
图3.15 直到型循环 说明:
这三种基本结构都只有一个入口一个出口,结构内的每一部分都有可能被执行,且不会出现无终止 循环的情况。
顺序结构是最简单的线性结构,在顺序结构的程序里,各操作是按照他们出现的先后顺序执行的。 如图3.3所示。
图3.3 顺序结构 说明: 在执行完A框指定的操作后,必须接着执行B框所指定的操作。
【例3.3】 输入两个数分别赋给变量i和j,再将这两个数分别输出。本实例流程图可以采用顺序 结构来实现,如图3.4所示:
图3.4 输入两变量的值
绘制N-S流程图
既然任何算法都是由前面介绍的三种结构组成,所以各基本结构之间的流程线就是多余的。这是由 美国人I.Nassi和B.Shneiderman共同提出的,故以他们的名字的首字母命名。N-S流程图去掉了原来的 所有的流程线,将全部的算法写在一个矩形框内。它也是算法的一种结构化描述方法,同样也有三种基 本结构。下面分别介绍: (1)顺序结构的N-S流程图如图3.12所示。
图3.2 用流程图描述算法
三种基本结构
经过研究发现,任何复杂的算法,都可以由顺序结构、选择结构和循环结构这三种基本结构组成, 这三种基本结构之间可以并列、可以相互包含,但不允许交叉,不允许从一个结构直接转到另一个结构 的内部去。
整个算法都是由三种基本结构组成的,所以只要规定好三种基本结构的流程图的画法,就可以画出 任何算法的流程图。 1.顺序结构
起止框
输入输出框
判断框
处理框
图3.1 流程图的图元表示方法
其中起止框是用来标识算法开始和结束的;判断框的作用是对一个给定的条件进行判断,根据给定 的条件是否成立来决定如何执行后面的操作;连接点是将画在不同地方的流程线连接起来;下面通过几 个例子来看下这些图框如何来使用。
【例3.2】 有如下函数,输入X值,求Y值。 当X>=0时,Y=X; 当X<0时,Y=-1; 分析这个函数,用流程图表示算法。如图3.2所示。
图3.19 判断闰年的N-S流程图
实例5 用伪代码描述n!
伪代码描述n!如下:
开始 如果n=0,输出s=1; 如果n>0, s=1,i=1; 循环直到i>n s=s*i; i=i+1; 输出s; 结束
自然语言最大的优有点就是容易理解,适用于比较简单的问题。对于比较复杂的问题或者在描述 包括分支或循环的算法时一般会很冗长,所以不用自然语言描述表示算法,避免出现二义性。
用流程图描述
流程图是一种传统的算法表示法,它用一些图框来代表各种不同性质的操作,用流程线来指示算法 的执行方向。由于它简单直观,易于理解,所以应用广泛。下面介绍下常见的流程图符号及流程图的例 子,如图3.1所示。
开始 c=a%b; 循环直到c=0 a=b; b=c; c=a%b; 输出b; 结束
说明: 伪代码虽然不是一种实际的编程语言,但表达能力上类似编程语言,同时避免了描述技术细节带来
的麻烦,所以伪代码更适合描述算法,故被称作“算法语言”或“第一语言”。
实例3 任意输入三个数,求这三个数中的 最大数
用自然语言描述算法: 第一步:定义四个变量分别为x、y、z以及max。 第二步:输入大小不同的三个数分别赋给x、y、z。 第三步:判断x是否大于y,如果大于,则将x的值赋给max,否则将y的值赋给max。 第四步:判断max是否大于z,如果大于,则执行步骤五,否则将z的值赋给max。 第五步:将max的值输出。
实例4 判断2000~2500年中的年份是否 为闰年
该程序流程图如图3.18所示。
图3.18 判断闰年
该程序的N-S流程图如图3.19所示。
m=2000
m/4的余数为0
是
否
m/100的余数不为0
是
否
输出m 是闰年
m/400的余数为0
是
否
输出m是闰年
输出m不 是闰年
输出m不是 闰年
m=m+1 直到m>2500