Upload
nola-finch
View
133
Download
9
Embed Size (px)
DESCRIPTION
第三讲 顺序结构程序设计. 纪良浩 2008-2009 第一学期 重庆邮电大学计算机学院. 上讲回顾. 几个基本术语(标识符、关键字、常量、变量) 三种基本数据类型(整型 、浮点型、字符型) --- 数据类型不同,所能表示的数的范围不同,在内存中占用的存储空间不同; 运算符、优先级和结合性表达式 “ =” a=3 , a=b+c “+ , - ,*, / , %” a=b+c*3-d/4+e%2 “ ,” 3+3,5+6. C 语言程序三种基本结构. - PowerPoint PPT Presentation
Citation preview
1
第三讲 顺序结构程序设计
纪良浩2008-2009 第一学期
重庆邮电大学计算机学院
2
上讲回顾 几个基本术语(标识符、关键字、常量、变
量) 三种基本数据类型(整型 、浮点型、字符
型) --- 数据类型不同,所能表示的数的范围不同,在内存中占用的存储空间不同;
运算符、优先级和结合性表达式 “=” a=3 , a=b+c
“+ , - , * , / , %” a=b+c*3-d/4+e%2
“ ,” 3+3,5+6
3
C 语言程序三种基本结构
顺序结构(课本第 4 章,本讲内容)
选择结构(分支结构)(课本第 5 章)
循环结构(课本第 6 章)
…main(){……}
…main(){……}
…main(){……}
4
顺序结构
在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行,且每个语句都会被执行到。
5
例 1 :设计一个顺序结构程序,求三个整数的和及平均值
问题分析 用户:请给我计算三个整数的和以及平均数; 计算机:这三个数各位多少? 用户: 3 , 5 , 5 计算机: 三个整数的和 =3+5+5=13; 三个整数的平均值 =(3+5+5)/3=4.33
6
例 1 算法
步骤(1) 给出三个整数的值;(2) 计算它们的和以及平均值;(3) 输出计算结果;
开始
给出整数的值
计算
输出结果
结束
算法流程图
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
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 ?
9
(3) 如何输出结果 格式输出 printf 函数 一般格式: printf( 格式控制,输出表列 ) 格式控制:用’’括起来的字符串,包括
两种信息格式说明:将输出的数据转换为制定的格式。
由“ %” 和格式字符组成,如 %d,%f 等;普通字符:即需要原样输出的字符;
输出表列:需要输出的一些数据。
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); /* 输出平均值 */
这种格式输出,可读性强,便于理解
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);
12
思考? 上例中三个整数的值是直接赋值的,如果
要求这三个数的值在程序运行时给定,怎么办?
格式输入函数 scanf 函数一般形式 scanf( 格式控制,地址表列 )
格式控制同 printf 函数,地址列表:若干个地址的列表,如变量的地址等。“&” 地址运算符,如 &a ,表示 a 在内存中的地址。E.g. scanf(“%d,%d,%d”,%a,%b,%c);
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 函数注意问题:•地址列表中应该是地址,而不是变量;•必须严格按照“格式控制”字符串的格式输入数据,且变量的类型要与格式控制中一致;
推荐使用后两种格式输入数据
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);
}
15
例 2 :输入三角形的三边长,求三角形面积
算法步骤:1. 给出三角形的三条边长;2. 利用海伦公式求面积;3. 输出三角形的面积;
开始
输入三角形三边长
海伦公式求面积
输出结果
结束
流程图
16
分析 1. 需要几个变量,都是什么类型;
可以先确定必须要用的几个变量,如 3 个边长(可以是整型,也可以是浮点型,根据具体情况决定),面积(一般为浮点型);
2. 海伦公式如何表示?
s=(a+b+c)/2.0C 中开方用 sqrt 函数,此函数的说明信息在
“ math.h”头文件中。
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);
18
例 3 编程将小写字母转换成对应的大写字母
分析小写字母从何而来?
两途径 赋初值 如: char c1;c1=‘a’; 键盘输入 如: char c1; scanf(“%c”,&c1);
如何转换?小写字母的 ASCII码比大写字母的大 32 ,参见书附录。
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
20
字符数据的输入输出 字符数据的输入 getchar 函数
一般形式 getchar( )函数的作用就是从终端输入一个字符,函数的
值为从输入设备得到的字符;如 char c;c=getchar( ); 从终端输入一个字符,把它的值赋给字符变量 c ;
字符数据的输出 putchar 函数一般形式 putchar( )函数的作用是向终端输出一个字符;如 putchar(c), 它输出字符变量 c 的值, c 可
以使字符或整型变量;
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); }
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
23
流程图开始
temp=a;
a=b;
b=temp;
结束
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); }
25
思考 上例交换两个变量的值,借用了一个临时
变量,如不用临时变量,如何来做?
方法: a=a+b; /*a 中先存放两者的和 */ b=a-b; /*将 a 的值(和值)与 b初值的差(即 a 的初值)赋给 b*/ a=a-b; /*将 a 的值(和值)与 b (即 a 的初值)的差(即 b 的初值)赋给 a 变量 */
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); }
•为增加程序的可操作性,可在必要的地方输出一些提示信息•以后做程序尽量采用多种算法来写,锻炼思维,提高编程能力!
27
本讲涉及语法知识 字符数据的输入函数 getchar( ) ; 字符数据的输出函数 putchar( ) ; 格式输入函数 scanf( ) ; 格式输出函数 printf( ) ; 几种常见的格式说明:
•更多的用法参考教材 4.4和 4.5
•不要死记,多上机体会
只能处理字符
处理任意类型数据
%d 十进制整数(输入或输出)%f 浮点数(单、双精度)(输入或输出)%c 字符(输入或输出)%s 字符串(输入或输出)
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为弧度值
29
课后作业
P89 4.8 4.9 将程序上机调试后,再上交!