第三讲 顺序结构程序设计

29
1 第第第 第第第第第第第第 第第第 2008-2009 第 第第 第第第第第第第第第第第

Upload: nola-finch

Post on 03-Jan-2016

133 views

Category:

Documents


9 download

DESCRIPTION

第三讲 顺序结构程序设计. 纪良浩 2008-2009 第一学期 重庆邮电大学计算机学院. 上讲回顾. 几个基本术语(标识符、关键字、常量、变量) 三种基本数据类型(整型 、浮点型、字符型) --- 数据类型不同,所能表示的数的范围不同,在内存中占用的存储空间不同; 运算符、优先级和结合性表达式 “ =” a=3 , a=b+c “+ , - ,*, / , %” a=b+c*3-d/4+e%2 “ ,” 3+3,5+6. C 语言程序三种基本结构. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第三讲 顺序结构程序设计

1

第三讲 顺序结构程序设计

纪良浩2008-2009 第一学期

重庆邮电大学计算机学院

Page 2: 第三讲 顺序结构程序设计

2

上讲回顾 几个基本术语(标识符、关键字、常量、变

量) 三种基本数据类型(整型 、浮点型、字符

型) --- 数据类型不同,所能表示的数的范围不同,在内存中占用的存储空间不同;

运算符、优先级和结合性表达式 “=” a=3 , a=b+c

“+ , - , * , / , %” a=b+c*3-d/4+e%2

“ ,” 3+3,5+6

Page 3: 第三讲 顺序结构程序设计

3

C 语言程序三种基本结构

顺序结构(课本第 4 章,本讲内容)

选择结构(分支结构)(课本第 5 章)

循环结构(课本第 6 章)

…main(){……}

…main(){……}

…main(){……}

Page 4: 第三讲 顺序结构程序设计

4

顺序结构

在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行,且每个语句都会被执行到。

Page 5: 第三讲 顺序结构程序设计

5

例 1 :设计一个顺序结构程序,求三个整数的和及平均值

问题分析 用户:请给我计算三个整数的和以及平均数; 计算机:这三个数各位多少? 用户: 3 , 5 , 5 计算机: 三个整数的和 =3+5+5=13; 三个整数的平均值 =(3+5+5)/3=4.33

Page 6: 第三讲 顺序结构程序设计

6

例 1 算法

步骤(1) 给出三个整数的值;(2) 计算它们的和以及平均值;(3) 输出计算结果;

开始

给出整数的值

计算

输出结果

结束

算法流程图

Page 7: 第三讲 顺序结构程序设计

7

例 1 分析 ---(1) 如何给出三个整数的值?

1. 这三个整数存放在哪里?他们都是什么类型?

2. 本例需要申请几个什么类型的变量?

3. 如何申请?

内存, int 变量

•三个整数,他们的和,他们的平均值;•4个 int型变量,一个 float型变量

•int a,b,c,sum; /*int a=3,b=5,c=5,sum;*/ •float aver;•a=3;•b=5;•c=5

Page 8: 第三讲 顺序结构程序设计

8

( 2 )如何求和和平均值? 按照数学关系,利用数学方法

sum=a+b+c;ever=(a+b+c)/3.0 or ever=sum/3.0

or (float)sum/3 or 1.0*sum/3…

这样写行不行?请同学们上机验证ever=a+b+c/3 ?

ever=(a+b+c)/3 ?

Page 9: 第三讲 顺序结构程序设计

9

(3) 如何输出结果 格式输出 printf 函数 一般格式: printf( 格式控制,输出表列 ) 格式控制:用’’括起来的字符串,包括

两种信息格式说明:将输出的数据转换为制定的格式。

由“ %” 和格式字符组成,如 %d,%f 等;普通字符:即需要原样输出的字符;

输出表列:需要输出的一些数据。

Page 10: 第三讲 顺序结构程序设计

10

printf 函数举例 printf(“This is a C programme!\n”); printf(“%d%f\n”,a,b); printf(“a=%d,b=%f\n”,a,b); printf(“The result is a=%d,b=%f\n”,a.b);

蓝色 --- 格式说明 ;

绿色 --- 普通字符,要原样输出的字符 ;

红色 --- 输出的变量表列 ;

注意:输出的变量类型要与格式说明一致,且相互对应;

•问题求解•printf(“ 它们的和是 sum=%d\n”,sum); /* 输出和 */•printf(“ 它们的平均值是 ever=%f\n”,ever); /* 输出平均值 */

这种格式输出,可读性强,便于理解

Page 11: 第三讲 顺序结构程序设计

11

例 1 源程序#include<stdio.h>main(){

int a,b,c,sum; /*定义 4个整型变量, sum表示和*/

float aver; /*aver用来表示平均值 */ a=3;b=5;c=5;sum=a+b+c; /*求和 */

aver=sum/3.0; /*求平均值 */

printf("%d,%f",sum,aver);}

printf(“sum=%d,ever=%f",sum,aver);printf(“The result is sum=%d,ever=%f",sum,aver);

Page 12: 第三讲 顺序结构程序设计

12

思考? 上例中三个整数的值是直接赋值的,如果

要求这三个数的值在程序运行时给定,怎么办?

格式输入函数 scanf 函数一般形式 scanf( 格式控制,地址表列 )

格式控制同 printf 函数,地址列表:若干个地址的列表,如变量的地址等。“&” 地址运算符,如 &a ,表示 a 在内存中的地址。E.g. scanf(“%d,%d,%d”,%a,%b,%c);

Page 13: 第三讲 顺序结构程序设计

13

scanf 函数常用的几种格式以输入两个十进制整数为例: scanf(“%d%d”,&a,&b) ;

scanf(“%d,%d”,&a,&b) ;

scanf(“a=%d,b=%d”,&a,&b) ;

•数据之间以一个或多个空格间隔,也可以用 Enter、 Tab键。•E.g. 3(空格 ) 4; 3(回车 )4;…

•严格按照控制格式输入•E.g. 3,4;

•严格按照控制格式输入•E.g. a=3,b=4;

scanf 函数注意问题:•地址列表中应该是地址,而不是变量;•必须严格按照“格式控制”字符串的格式输入数据,且变量的类型要与格式控制中一致;

推荐使用后两种格式输入数据

Page 14: 第三讲 顺序结构程序设计

14

接例 1--- 要求从键盘输入三个整数的值,求它们的和以及平均值

#include<stdio.h>main(){

int a,b,c,sum;float aver;scanf("%d,%d,%d",&a,&b,&c);/* 用格式输入函数代替赋值语句 a=3;b=5;c=5;*/sum=a+b+c;aver=sum/3.0;printf("The resule is sum=%d,aver=%f\n",sum,aver);

}

Page 15: 第三讲 顺序结构程序设计

15

例 2 :输入三角形的三边长,求三角形面积

算法步骤:1. 给出三角形的三条边长;2. 利用海伦公式求面积;3. 输出三角形的面积;

开始

输入三角形三边长

海伦公式求面积

输出结果

结束

流程图

Page 16: 第三讲 顺序结构程序设计

16

分析 1. 需要几个变量,都是什么类型;

可以先确定必须要用的几个变量,如 3 个边长(可以是整型,也可以是浮点型,根据具体情况决定),面积(一般为浮点型);

2. 海伦公式如何表示?

s=(a+b+c)/2.0C 中开方用 sqrt 函数,此函数的说明信息在

“ math.h”头文件中。

Page 17: 第三讲 顺序结构程序设计

17

源程序#include<stdio.h>#include<math.h> main(){

int a,b,c; /*三个变量,用来表示三条边长 */float s,area; /*area变量用来表示面积 */scanf(“%d,%d,%d”,&a,&b,&c); /*输入三条边长的值*/s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c)); /*海伦公式求面积 */printf("The resule is area=%f\n",area);

}

•本例用到数学函数 sqrt()•以后程序中用到任何一个数学函数库中的函数,都要加入此条编译预处理语句;•常用的数学函数可参考教材附录

思考:如果要求 area 的值只保留小数点后指定的有效数字,如何处理?

printf("The resule is area=%.2f\n",area);

Page 18: 第三讲 顺序结构程序设计

18

例 3 编程将小写字母转换成对应的大写字母

分析小写字母从何而来?

两途径 赋初值 如: char c1;c1=‘a’; 键盘输入 如: char c1; scanf(“%c”,&c1);

如何转换?小写字母的 ASCII码比大写字母的大 32 ,参见书附录。

Page 19: 第三讲 顺序结构程序设计

19

源程序

#include<stdio.h>

main()

{

char c1,c2;

c1='a';

c2=c1-32;

printf("The upcase is %c\n",c2);

}

#include<stdio.h>main(){ char c1,c2; scanf("%c",&c1); c2=c1-32; printf("The upcase is %c\n",c2); }

源程序 1 源程序 2

Page 20: 第三讲 顺序结构程序设计

20

字符数据的输入输出 字符数据的输入 getchar 函数

一般形式 getchar( )函数的作用就是从终端输入一个字符,函数的

值为从输入设备得到的字符;如 char c;c=getchar( ); 从终端输入一个字符,把它的值赋给字符变量 c ;

字符数据的输出 putchar 函数一般形式 putchar( )函数的作用是向终端输出一个字符;如 putchar(c), 它输出字符变量 c 的值, c 可

以使字符或整型变量;

Page 21: 第三讲 顺序结构程序设计

21

接上例

#include<stdio.h>main(){ char c1,c2; c1=getchar();/* 输入

字符 */ c2=c1-32; putchar(c2); ();/* 输

出字符 */ }

#include<stdio.h>main(){ char c1,c2; scanf("%c",&c1); c2=c1-32; printf("The upcase is %c\n",c2); }

Page 22: 第三讲 顺序结构程序设计

22

例 4 编程实现两个变量值的交换 算法分析

要交换两个变量的值可以借助第三个变量,过程如下:

准备第三个变量,如 temp ;将第一个变量 a 的值保存在 temp 中, temp=

a ;将第二个变量 b 的值赋给 a , a=b ;将 temp 的值 (a 的初值 ) 赋给 b , b=temp ;

5a

b 3

temp

1

5a

b 3

temp 5

2

3a

b 3

temp 5

3

3a

b 5

temp 5

4

Page 23: 第三讲 顺序结构程序设计

23

流程图开始

temp=a;

a=b;

b=temp;

结束

Page 24: 第三讲 顺序结构程序设计

24

源程序#include<stdio.h>main(){ int a,b,temp; scanf("%d,%d",&a,&b); printf("交换前 a=%d,b=%d\n",a,b); temp=a; a=b; b=temp; printf("交换后 a=%d,b=%d\n",a,b); }

Page 25: 第三讲 顺序结构程序设计

25

思考 上例交换两个变量的值,借用了一个临时

变量,如不用临时变量,如何来做?

方法: a=a+b; /*a 中先存放两者的和 */ b=a-b; /*将 a 的值(和值)与 b初值的差(即 a 的初值)赋给 b*/ a=a-b; /*将 a 的值(和值)与 b (即 a 的初值)的差(即 b 的初值)赋给 a 变量 */

Page 26: 第三讲 顺序结构程序设计

26

源程序#include<stdio.h>main(){ int a,b; printf(“ 请输入 a 、 b 的初值 \n”);/*加入提示信息 */ scanf("%d,%d",&a,&b); printf("交换前 a=%d,b=%d\n",a,b); a=a+b; b=a-b; a=a-b; printf("交换后 a=%d,b=%d\n",a,b); }

•为增加程序的可操作性,可在必要的地方输出一些提示信息•以后做程序尽量采用多种算法来写,锻炼思维,提高编程能力!

Page 27: 第三讲 顺序结构程序设计

27

本讲涉及语法知识 字符数据的输入函数 getchar( ) ; 字符数据的输出函数 putchar( ) ; 格式输入函数 scanf( ) ; 格式输出函数 printf( ) ; 几种常见的格式说明:

•更多的用法参考教材 4.4和 4.5

•不要死记,多上机体会

只能处理字符

处理任意类型数据

%d 十进制整数(输入或输出)%f 浮点数(单、双精度)(输入或输出)%c 字符(输入或输出)%s 字符串(输入或输出)

Page 28: 第三讲 顺序结构程序设计

28

常用数学函数 常用数学函数,在使用的时候加 #include<math.h> :函数名 功 能 函数名 功 能

sqrt(x) 计算 x的平方根, x应大于等于 0 exp(x) 计算 ex的值fabs(x) 计算 x的绝对值 pow(x,y) 计算 xy的值log(x) 计算 lnx的值 sin(x) 计算 sinx的值, x为弧度

值log10(x)

计算 lgx的值 cos(x) 计算 cosx的值, x为弧度值

Page 29: 第三讲 顺序结构程序设计

29

课后作业

P89 4.8 4.9 将程序上机调试后,再上交!