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