简单C语言程序设计ppt课件.ppt

上传人:小飞机 文档编号:1877745 上传时间:2022-12-23 格式:PPT 页数:74 大小:1.29MB
返回 下载 相关 举报
简单C语言程序设计ppt课件.ppt_第1页
第1页 / 共74页
简单C语言程序设计ppt课件.ppt_第2页
第2页 / 共74页
简单C语言程序设计ppt课件.ppt_第3页
第3页 / 共74页
简单C语言程序设计ppt课件.ppt_第4页
第4页 / 共74页
简单C语言程序设计ppt课件.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《简单C语言程序设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《简单C语言程序设计ppt课件.ppt(74页珍藏版)》请在三一办公上搜索。

1、简单C程序设计,回顾,程序是为执行一项任务而编写的有序指令集C程序的特点C语言的组成C程序的编译和运行过程 编译器将源程序转换成机器能理解的程序 连接器用于连接相关的目标文件以生成可执行程序,本章要点,C语言的数据类型、运算符C语言的常量和变量C语言的表达式常用数学函数,#include int main( ) int celsius, fahr; fahr=100; celsius=5*(fahr-32)/9; printf(“fahr=%d, celsius=%dn“, fahr, celsius);,执行程序的输出结果为: fahr=100, celsius=37,2.1 温度转换,例2

2、.1 求华氏温度100F对应的摄氏温度,2.1.1 内存,内存可以理解为一排井然有序的小开关,每个开关有两个状态:开表示1,断表示0,所以每个开关表示一个二进制数,0或1,称为一个位(bit).为管理方便,8个位为一组,称为一个字节(byte)然后为所有字节从0开始编号,这个编号称为字节的地址2的10次方( 1024)个字节称为1k2的20次方( 1048576)个字节称为1M2的30次方( 1073741824)个字节称为1G,2.1.2 变量,int celsius, fahr; celsius = 5 * (fahr - 32) / 9;,变量是计算机里一块特定的内存,它由一个或多个连续

3、的字节组成。每个变量都有一个名称,表示内存中的这个位置,以便通过变量名读取该位置的数据或存储一个新数值。变量的值不是固定的,随时都可以改变,且次数不限。,编写程序时,通常使用变量来存储数据,方便后面使用这个数据或者修改这个数据的值。,变量,程序,存储 fahr,计算5 * (fahr - 32) / 9,将值存储为celsius,100,32,输出fahr和celsius,内存变量用来存储数据,系统需要知道每个变量要存储什么类型的数据,然后为每个变量分配一块足够大的内存空间,用来该类型的数据,2.1.3 数据类型,数据属于不同类别,Africa,The quick brown fox,TRUE

4、,数据,非数值,数值,整型,非整型,9002.12,999,9/12/2003,2.175,123,Jackie Chan,char,数据类型,非数值,数值,整型,int,short int,long int,double,float,非整型,整型变量类型,short int,2个字节,-2-15至215-1 , -32768 至 +32767,整数变量还分为几种不同的类型,以存储不同范围的整数,int,4个字节,-2-31至231-1,-2147438648 至 + 2147438647,long int,4个字节,-2-31至231-1,-2147438648至+2147438647,_i

5、nt64long long int,8个字节,-2-63 至 263-1,1、数据类型所占字节数,取决于所使用的编译器 2、short int 可以简写为short, long int可以简写为long3、不同编译器对64位的支持不同,在VC中只支持_int64,gcc/g+支持 long long, windows平台的gcc/g+也支持_int64,无符号的整数类型,unsigned short int,2个字节,0至216-1 , 0 至 +65535,unsigned int,4个字节,0至232-1, 0 至 + 4294967295,unsigned long int,4个字节,0

6、至232-1, 0 至 + 4294967295,unsigned _int64unsigned long long int,8个字节,0至264-1,0至18445744073709551615,当处理不能为负的数据时,可以使用无符号类型,所占内存与有符号型相同,但对正数的表示范围比有符号型大一倍,2.1.4 变量的声明和使用,声明变量: int celsius, fahr;定义时初始化变量: int celsius, fahr=100;定义后初始化变量: fahr=100; 。给变量赋值,除了给一个直接的值以外,还可以通过计算获得如: celsius=5*(fahr-32)/9;,变量的命

7、名规则,在 C 语言中,变量命名需要遵循一定的规则,有效名称,principal,cost_price,marks_3,lastname,city,无效名称,123rate,currency$,discount%,zip code,变量的命名规则:变量名可以由字母、数字和 _(下划线)组合而成变量名不能包含除 _ 以外的任何特殊字符,如:%、# 、逗号、空格等变量名必须以字母或 _(下划线)开头变量名不能包含空白字符(换行符、空格和制表符称为空白字符)C 语言中的某些词(例如 int 和 float 等)称为保留字,具有特殊意义,不能用作变量名C 语言区分大小写,因此变量 price 与变量

8、PRICE 是两个不同的变量,2.1.5 赋值运算,赋值运算符 =赋值表达式:用 = 将一个变量和一个表达式连接起来的式子 变量 表达式例如:fahr = 100; celsius = 5 * (fahr - 32) / 9; 计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量, 的左边必须是一个变量,分析错误程序,/求两个整数的和#includeint main() int a, b, sum; sum=a+b; a=3; b=5; printf(%dn,sum); return 0;,该程序为何得不到正确结果?错误原因是受数学思维的影响,吴以为sum=a+b;是建立sum

9、和a+b之间的一个等量关系,赋值运算“=”表示的是一个动作:先计算表达式的值,再存入赋值号左边的变量中,既不表示数学中的等量代换,也不表示相等关系,执行sum=a+b;语句是,因为a和b中的值都不确定,是随机的,所以其和也是随机的,然后把这个数赋给了sum,该程序为何得不到正确结果?,2.1.6 格式化输出函数printf,printf( %d , count);,格式:printf(“格式控制串”,输出参数表),输出格式,printf(“fahr=%d , celsius=%dn, fahr, celsius);,普通字符,原样输出,%开头的是转换说明,对应与后面一个输出参数,对应参数将被转

10、换成指定格式后在该位置输出,输出结果:fahr=100, celsius=37,输出参数列表,n是转意字符,用来输出一个回车,转换字符串,printf( %d , count);,%d,转换字符串%d,int visitor_count = 150;printf ( %d , visitor_count);,输出结果:150,转换字符串%md,int salary = 5500;printf ( %10d , salary);,输出结果: 5500,输出结果的左边显示了 6 个空格, %10d,数据以十进制整数格式输出,宽度占m列,数据不足m列左补空格,超过m列按实际位数输出。,转换字符串%-

11、md,int salary = 5500;printf ( %10d , salary);,输出结果:5500,输出结果的右边显示了 6 个空格, %-10d,数据以十进制整数格式输出,宽度占m列,数据不足m列右补空格,超过m列按实际位数输出。,课堂练习:输出整数幂,已知m=11,n=41,输出m和n的2次方、3次方和4次方,要求每个数据占8列,左对齐。效果如下:121 1331 14641 1681 68921 2825761,2.2:使用浮点数进行温度转换,例2.2:例2.1中程序的运行结果并不令人满意,因为华氏温度100,对应的摄氏温度应该为37.7777,而不应该是37。,需要使用浮点

12、型变量来存储带小数点的数,我们需要将 celsius, fahr声明为双精度浮点型,#include int main( ) double celsius, fahr; /声明两个双精度浮点型变量 fahr=100.0; /赋值运算 celsius=5*(fahr-32)/9; /计算摄氏温度,并存入变量celsius printf(fahr=%f, celsius=%fn, fahr, celsius);,2.2.1 浮点变量类型,浮点数在计算机中的表示,基于指数表示法,将分为指数和尾数来存储。浮点变量根据数据表示范围和精确度不同,有一下几种类型,float,4个字节,(+/-)3.4E38

13、 ,6位有效数字,浮点变量用来存储浮点数,浮点数包含的值带小数点,也可以表示分数和整数。,double,8个字节,(+/-)1.7E308 ,15位有效数字,课外作业:查阅资料,了解浮点数是如何存储的,Long double,12个字节,(+/-)1.19E4932 ,18位有效数字,注意有效位数的不同,float,double,213.5671435568967,64位,取值范围:10-308 至 10308,16 位有效数字,flaot f_level = 213.5671435568967;double d_level = 213.5671435568967;,去VC下试试!,转换字符串

14、%f,float circumference = 78.53;printf (%f , circumference);,输出结果:78.530000,默认情况下精确到六位小数,9.4786789;,9.478679,2.2.2 浮点数据的输出,double mercury_level = 168.2251074;printf( %7.2f , mercury_level);,输出结果: 168.23,宽度,表示所有的数字和小数点所占的位数。不够7位右对齐。, %7.2f,精度(精确到小数点后多少位),转换字符串%m.nf,2.2.2 浮点数据的输出,程序,指令,2.2.3 常量,标识符关键字常

15、量运算符分隔符等,常量是在程序中保持不变的量,分为:立即数符号常量(宏常量)const 常量,立即数整型常量:如32、100实型常量: 如1.23 123.567e5字符常量: a 、 2 、 n字符串常量:“c program”,定义常量,为使程序易于阅读和便于修改,可以给程序中经常使用的常量定义一个有一定含义的名字。,常量用于定义具有如下特点的数据:在程序中保持不变在程序内部频繁使用需要用比较简单的方式替代某些值防止意外的修改,增强程序的健壮性,定义宏常量,#define PI 3.1415926,编译预处理指令#define将PI定义成一个要被3.1415926取代的符号,此时PI不是一

16、个变量,而是3.1415926的别名。,在编译开始之前,只要在程序的表达式中引用PI,预处理器就会用#define 指令中的值(3.1415926)来取代它。,宏常量的缺点:宏常量被替换成立即数之后,内存中有同一个立即数的多份拷贝。,定义const常量,在定义变量时,加上const修饰,告诉编译器,它的值是固定的,不能被改变。编译器会帮你检查、监督。,const double PI=3.1415926;,const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。,在编译的时候,由于const定义常量只是给出了对应的内存地址,而不是象#define给出的是立即数,所以,

17、const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有 若干个拷贝。,例2.3 求圆柱体的体积,/求圆面积,圆周率用立即数#include “stdio.h”int main() doulbe v, r,h; r=10.0; h=20.0; v=3.1415926 r*r*h; printf (“v=%fn”,v); return 0;,/求圆面积,圆周率用宏常量#include “stdio.h”#define PI 3.1415926int main() double v, r, h; r=10.0; h=20.0; v=PIr*r*h; printf(“v

18、=%fn”,v); return 0;,/求圆面积,圆周率用const宏常量#include “stdio.h”const double PI=3.1415926;int main() double v, r, h; r=10.0; h=20.0; v=PIr*r*h; printf(“v=%fn”,v); return 0;,模仿练习,(1)编程,已知圆的半径radius(实数),输出圆的面积,保留两位小数,2.3:对任意华氏温度进行温度转换,例2.3:例2.2中的程序运行后只能输出华氏温度100F对应的摄氏温度,为提高程序地通用性,要求程序运行后等待键盘输入一个华氏温度(实数),程序输出其

19、对应的摄氏温度。,/读入一个华氏温度,输出其对应的摄氏温度#include int main( ) double celsius, fahr; /声明两个双精度浮点型变量 scanf(%lf, ,scanf(“%d”,2.3.1 scanf() 函数,scanf 函数从标准输入(键盘)读取信息,按照格式描述把读入的信息转换为指定数据类型的数据,并把这些数据赋给指定的内存区域中。,转换字符串,&符号(附在读取的每个变量上)用于指明变量在内存中的位置,变量的名称,scanf() 函数的格式,scanf(格式控制字符串,内存地址1,内存地址2,内存地址n),取地址符,&,scanf(“%d”,(1)

20、%d为格式转换符,每个格式转换符对应后面一个内存地址。(2)scanf将读入数据,按指定格式理解该输入,然后存入对应内存地址,3.1.2 格式转换符,格式控制字符串:(1)由一对双引号括起来(2)可以包含格式转换符和普通字符,格式转换符以%开头,不同类型的数据,采用不同的格式转换符,目前常用的转换符见下表:,内存,用scanf()读入整形数据,int num;scanf(%d, ,num,在内存中分配一块 32 位存储空间存储空间使用名称“num”标识,等待用户输入一个值将输入的值按十进制整数来理解,然后内存中(因为 scanf 提供了num的内存地址),123,内存,用scanf()读入单精

21、度浮点数据,float tax_rate;scanf (%f , ,tax_rate,在内存中分配一块 32 位存储空间存储空间使用名称“tax_rate”标识,等待用户输入一个值将输入的值按十进制单精度实数来理解,然后内存中(因为 scanf 提供了tax_rate的内存地址),12.234,内存,double tax_rate;scanf (%lf , ,tax_rate,在内存中分配一块 64 位存储空间存储空间使用名称“tax_rate”标识,等待用户输入一个值将输入的值按十进制双精度实数来理解,然后内存中(因为 scanf 提供了tax_rate的内存地址),12.234,约定:以后

22、凡说要定义实型变量,都使用double,用scanf()读入双精度浮点数据,3.1.3格式控制字符串中的普通字符,scanf(格式字符串,地址列表)在格式字符串中若有普通字符,则输入时在对应位置也必须输入该普通字符,否则会因读入格式错误而终止程序。如果有scanf(“%d,%d”, &a, &b)输入的两个数直接必须有一个逗号3,5 正确3 5 错误如果有scanf(“a=%d,b=%d”, &a, &b)输入应该是:a=3,b=5,否则就会失败,scanf的格式字符串中最好不加任何普通字符,只写%开头的格式转换符。如scanf(“%d%d”, &a, &b),不要给自己制造输入格式限制!,课

23、堂练习,1、读入两个整数,输出它们的和2、读入两个实数,输出它们的平均值,结果保留两位小数。,常见错误分析1,/两个整数的运算#includeint main() int m, n; scanf(%d,%d, ,输入8 5 输出结果是错误的,若输入8,5,则运行结果正确,scanf中的格式字符串中若有普通字符,则输入时在对应位置也必须输入该普通字符,分析如下程序错误的原因,常见错误分析2,/输入半径,输出面积#include#define PI 3.1415926int main() double a, b; scanf( %d%d , ,输入:3 5 输出结果错误,错误原因: 因a,b是do

24、uble类型的变量,故scanf的格式转换符应该是%lf,分析如下程序错误的原因,%lf%lf,2.4 整数的运算,例2.4 分糖果,老师有n个糖果,要分给m个小朋友分糖果,n和m由键盘输入,输出每个小朋友分几个,老师还剩余几个。,/程序2.4:整数运算#includeint main() int candies , kids; scanf(%d%d, ,2.4.1 算术运算,算术运算,算术,一元,二元,操作数,操作数,运算符,二元运算符,+,-,*,/,%,算术运算注意,(1)整数除整数,得整数如:1/2 0,9/4 2 思考: 5 * (fahr - 32) / 9 和 5 / 9 * (

25、fahr - 32) 等价吗(2)% 模运算,针对整型数据如: 565,-94-1,10040模运算的结果与第一个操作数相同。(3)“*”乘号不能省略 5*a不能5a(4)双目运算符两侧操作数的类型要相同,课堂练习:求各位数字和,由键盘输入一个整数n(小于1000),计算n的各位数字和,#includeint main() int n,d0,d1,d2; scanf(%d,课堂练习:两个整数的和差积商,输入两个整数,求两个数的和、差、积、商,要求商保留2位小数,/整数运算#includeint main() int a,b,c; scanf(%d%d,常见错误1:,/两个整数的运算#inclu

26、deint main() int a,b,c; scanf(%d%d, ,输入:8 5商的结果是0.00,分析原因,原因是输出格式控制%0.2f与对应输出项类型不匹配。a/b的结果是整型数据,%.2f用来输出浮点型数据,整数除法的运算结果是整数商,直接扔掉余数,分析如下程序错误的原因,常见错误2:,/两个整数的运算#includeint main() int a, b; double c; c=a/b; scanf(%d%d,输入8 5运行结果是1.00,分析原因,依然是整数除法带来的问题:整数除法的运算结果是整数,5/3的结果是1,把1赋给实型变量c,c的值是1.0,而不是你期望的1.6,分

27、析如下程序错误的原因,2.4.2类型转换,1、不同级别的操作数运算时,精度低的自动向精度高的转换如: double a=1/2; a的值是0.0 double a=1.0/2; a的值是0.5 2、赋值时类型转换如: double a=1;/会把1.0赋给a int i=1.5;/会把1.5转换为整型得1,赋给i,类型转换,3、 强制类型转换 (类型名)操作数如: double a=2.5; int n; n=(int)a; /将a的值转换为整型2,赋给n又如:求两整数的商,商为实数 int a=2,b=3; double c; c=(double)a/b; /强制类型转换或 c=1.0*a/

28、b; /不同类型运算时向精度高的转换,先将a转换为实数,再除以b!强制转换优先级最高,2.5 两个数的最大值,例2.5 输入两个数,输出其中较大的数,#includeint main() int a,b,max; scanf(%d%d,(1)读入a, b(2)把a赋给max;(3)如果bmax(或ba), 把b存入max(4)输出max,2.5.1 关系运算,关系运算符种类:= !=结合方向:自左向右优先级别:,关系预算的结果是整型:若关系成立,结果为1;若关系不成立,结果为0;,int a=3,b=5;ab 结果为0;A*2b 结果为123 = 37结果为1,关系运算注意:,例 若int a

29、=0, b=5, x=100; 则 a=x=b的值为,1,例 5273符合C的语法, 值为,1,例 int i=1, j=7,a; a=i+(j%4!=0); 则a=,2,例 a0 结果为 A100 结果为,1,0,2.5.2 基本if 语句,if (表达式) 语句,如果括号内表达式的值为真,则执行if后的语句,否则什么也不做,语句1可以是单个语句,也可以是用括起来的复合语句。,模仿练习,改写上例,实现:输入三个数,输出其中最大的数,(1)读入a, b,c(2)把a赋给max;(3)如果bmax, 把b存入max(4)如果cmax, 把c存入max(5)输出max,#includeint ma

30、in() int a, b, c, max; scanf(%d%d%d,“比武招亲”、擂台赛的思想,2.5.3 条件表达式,本题可以用如下条件运算符来处理: max = (ab) ? a : b,#includeint main() int a,b,max; scanf(%d%d,其中,“(ab) ? a : b”是一个条件表达式,若条件(ab)成立,则条件表达式取值a;否则,取值b。,相当于if (ab) max=a;else max=b;,条件表达式的一般形式:,表达式1?表达式2:表达式3,条件表达式的求解过程先求解表达式1的值若表达式1的值为真(非0);则求解表达式2的值,将其作为条件

31、表达式的值。表达式3不计算。 若表达式1的值为假(0);则求解表达式3的值,将其作为条件表达式的值。表达式2不计算。,模仿练习,用条件表达式实现:输入三个数,输出其中最大的数,(1)读入a, b,c(2)把a和b中较大者赋给max;(3)把c和max中较大者赋给max;(4)输出max,#includeint main() int a, b, c, max; scanf(%d%d%d,课堂练习,时间间隔从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示。 Input 输入包括两行。 第一行为时间点1,第二行为时间点2。都以“小时:分钟:秒”的格式

32、输入。 Output 以“小时:分钟:秒”的格式输出时间间隔。格式参看样例。Hint 注意:要输出01:08:31中的占位符0,Sample Input 12:01:12 13:09:43 Sample Output 01:08:31,Sample Input 12:40:12 13:09:43 Sample Output 00:28:31,思路分析,方法1:两个时间点都转换成秒,然后相减,再把结果转换为时分秒方法2:时分秒对应相减,不够减向上借位。,2.6 计算两点间距离,例2.6 编程: 输入4个实数x1,y1,x2,y2,数据之间用空格隔开。表示两点坐标A(x1,y1), B(x2,y2

33、),计算并输出两点间的距离。结果保留两位小数。,(1)定义x1、y1、x2、y2、dist为double类型(2)读入x1、y1、x2、y2(3)利用两点间距离公式求距离,存入dist(4)输出dist,如何求平方根呢?用C语言的标准库函数sqrt(),例2.6的源程序,/求两点之间的距离#include #include int main() double x1,y1,x2,y2,dist; scanf(%lf%lf%lf%lf, ,也可以写成两个语句:dist=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);dist=sqrt(dist);,2.6.1 常用数学函数,要包含

34、头文件: #include1、求绝对值求整数的绝对值,用abs:int i=-3,j;j=abs(i);求实数的绝对值,用fabs:double a=-12.3,b;b=fabs(a);,数学函数,2、求开方,用sqrtdouble a=2.3,b;b=sqrt(a);3、求幂xy,用powdouble x=2,y=3,z;z=pow(x,y) 4、求ex,用expdouble x=2.3,b;y=exp(x);,数学函数,5、求自然对数,用logdouble x=13,y;y=log(x);6、求以10为底的对数,用log10double x=13,y;y=log10(x);,数学函数的使用

35、,7、三角函数double x=1.5, y;y=sin(x);y=cos(x);y=tan(x);,例2.7 求整数的位数,输入一个整数,输出该整数的位数。提示:(1)求n的对数函数为:log10(n);(2)考虑一个整数的对数和位数的关系:对数取整加1即该数的位数(3)可用强制类型转换扔掉小数部分由以上3点可知,整数n的位数是:(int )log10(n)+1;,例2.7的程序,#include#includeint main()int n,len;scanf(%d,上机作业(1),1、输入两个整数,输出他们的和。2、输入两个实数,输出它们的平均值,结果保留2位小数。3、输入圆的半径,求圆

36、的周长和面积。要求定义如下宏常量 #define PI 3.141594、和差积商:从键盘读入两个整数数求他们的和差积商,要求商保留2位小数。5、输入三个整数,请你设计一个程序,求出这三个数的和、乘积和平均数,平均数保留2位小数。6、温度转换:从键盘读入华氏温度,输出摄氏温度7、输入一个小于1000的整数n,逆序输出该整数的各位数字。要求能默写或熟练输入以上程序,上机作业(2),1、输入三个整数,输出最大值2、实数的绝对值:输入一个实数,输出它的绝对值,结果保留两位小数。3、两点间距离:输入4个实数x1,y1,x2,y2,数据之间用空格隔开。表示两点坐标(x1,y1),(x2,y2),计算并输出两点间的距离。结果保留两位小数。4、编程,输入三角形的三边长(实数),输出三角形的面积,结果保留两位小数。(提示:用海伦公式)。5、编程,输入一元二次方程ax2+bx+c=0的系数a,b,c,假定满足b2-4ac0,输出方程的两个根。结果保留两位小数。,6、 输入存款金额 money、存期 year 和年利率 rate,根据公式计算存款到期时的本息合计sum(税前),输出时保留2位小数。 sum = money ( 1 + rate)year 提示:sum = money * pow(1 + rate), year),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号