简单C语言程序设计_第1页
简单C语言程序设计_第2页
简单C语言程序设计_第3页
简单C语言程序设计_第4页
简单C语言程序设计_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

简单C程序设计,回顾,程序是为执行一项任务而编写的有序指令集C程序的特点C语言的组成C程序的编译和运行过程编译器将源程序转换成机器能理解的程序连接器用于连接相关的目标文件以生成可执行程序,本章要点,C语言的数据类型、运算符C语言的常量和变量C语言的表达式常用数学函数,#includeintmain()intcelsius,fahr;fahr=100;celsius=5*(fahr-32)/9;printf(“fahr=%d,celsius=%dn“,fahr,celsius);,执行程序的输出结果为:fahr=100,celsius=37,2.1温度转换,例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变量,intcelsius,fahr;celsius=5*(fahr-32)/9;,变量是计算机里一块特定的内存,它由一个或多个连续的字节组成。每个变量都有一个名称,表示内存中的这个位置,以便通过变量名读取该位置的数据或存储一个新数值。变量的值不是固定的,随时都可以改变,且次数不限。,编写程序时,通常使用变量来存储数据,方便后面使用这个数据或者修改这个数据的值。,变量,程序,存储fahr,计算5*(fahr-32)/9,将值存储为celsius,100,32,输出fahr和celsius,内存变量用来存储数据,系统需要知道每个变量要存储什么类型的数据,然后为每个变量分配一块足够大的内存空间,用来该类型的数据,2.1.3数据类型,数据属于不同类别,Africa,Thequickbrownfox,TRUE,数据,非数值,数值,整型,非整型,9002.12,999,9/12/2003,2.175,123,JackieChan,char,数据类型,非数值,数值,整型,int,shortint,longint,double,float,非整型,整型变量类型,shortint,2个字节,-2-15至215-1,-32768至+32767,整数变量还分为几种不同的类型,以存储不同范围的整数,int,4个字节,-2-31至231-1,-2147438648至+2147438647,longint,4个字节,-2-31至231-1,-2147438648至+2147438647,_int64longlongint,8个字节,-2-63至263-1,1、数据类型所占字节数,取决于所使用的编译器2、shortint可以简写为short,longint可以简写为long3、不同编译器对64位的支持不同,在VC中只支持_int64,gcc/g+支持longlong,windows平台的gcc/g+也支持_int64,无符号的整数类型,unsignedshortint,2个字节,0至216-1,0至+65535,unsignedint,4个字节,0至232-1,0至+4294967295,unsignedlongint,4个字节,0至232-1,0至+4294967295,unsigned_int64unsignedlonglongint,8个字节,0至264-1,0至18445744073709551615,当处理不能为负的数据时,可以使用无符号类型,所占内存与有符号型相同,但对正数的表示范围比有符号型大一倍,2.1.4变量的声明和使用,声明变量:intcelsius,fahr;定义时初始化变量:intcelsius,fahr=100;定义后初始化变量:fahr=100;。给变量赋值,除了给一个直接的值以外,还可以通过计算获得如:celsius=5*(fahr-32)/9;,变量的命名规则,在C语言中,变量命名需要遵循一定的规则,有效名称,principal,cost_price,marks_3,lastname,city,无效名称,123rate,currency$,discount%,zipcode,变量的命名规则:变量名可以由字母、数字和_(下划线)组合而成变量名不能包含除_以外的任何特殊字符,如:%、#、逗号、空格等变量名必须以字母或_(下划线)开头变量名不能包含空白字符(换行符、空格和制表符称为空白字符)C语言中的某些词(例如int和float等)称为保留字,具有特殊意义,不能用作变量名C语言区分大小写,因此变量price与变量PRICE是两个不同的变量,2.1.5赋值运算,赋值运算符=赋值表达式:用=将一个变量和一个表达式连接起来的式子变量表达式例如:fahr=100;celsius=5*(fahr-32)/9;计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量,的左边必须是一个变量,分析错误程序,/求两个整数的和#includeintmain()inta,b,sum;sum=a+b;a=3;b=5;printf(%dn,sum);return0;,该程序为何得不到正确结果?错误原因是受数学思维的影响,吴以为sum=a+b;是建立sum和a+b之间的一个等量关系,赋值运算“=”表示的是一个动作:先计算表达式的值,再存入赋值号左边的变量中,既不表示数学中的等量代换,也不表示相等关系,执行sum=a+b;语句是,因为a和b中的值都不确定,是随机的,所以其和也是随机的,然后把这个数赋给了sum,该程序为何得不到正确结果?,2.1.6格式化输出函数printf,printf(%d,count);,格式:printf(“格式控制串”,输出参数表),输出格式,printf(“fahr=%d,celsius=%dn,fahr,celsius);,普通字符,原样输出,%开头的是转换说明,对应与后面一个输出参数,对应参数将被转换成指定格式后在该位置输出,输出结果:fahr=100,celsius=37,输出参数列表,n是转意字符,用来输出一个回车,转换字符串,printf(%d,count);,%d,转换字符串%d,intvisitor_count=150;printf(%d,visitor_count);,输出结果:150,转换字符串%md,intsalary=5500;printf(%10d,salary);,输出结果:5500,输出结果的左边显示了6个空格,%10d,数据以十进制整数格式输出,宽度占m列,数据不足m列左补空格,超过m列按实际位数输出。,转换字符串%-md,intsalary=5500;printf(%10d,salary);,输出结果:5500,输出结果的右边显示了6个空格,%-10d,数据以十进制整数格式输出,宽度占m列,数据不足m列右补空格,超过m列按实际位数输出。,课堂练习:输出整数幂,已知m=11,n=41,输出m和n的2次方、3次方和4次方,要求每个数据占8列,左对齐。效果如下:1211331146411681689212825761,2.2:使用浮点数进行温度转换,例2.2:例2.1中程序的运行结果并不令人满意,因为华氏温度100,对应的摄氏温度应该为37.7777,而不应该是37。,需要使用浮点型变量来存储带小数点的数,我们需要将celsius,fahr声明为双精度浮点型,#includeintmain()doublecelsius,fahr;/声明两个双精度浮点型变量fahr=100.0;/赋值运算celsius=5*(fahr-32)/9;/计算摄氏温度,并存入变量celsiusprintf(fahr=%f,celsius=%fn,fahr,celsius);,2.2.1浮点变量类型,浮点数在计算机中的表示,基于指数表示法,将分为指数和尾数来存储。浮点变量根据数据表示范围和精确度不同,有一下几种类型,float,4个字节,(+/-)3.4E38,6位有效数字,浮点变量用来存储浮点数,浮点数包含的值带小数点,也可以表示分数和整数。,double,8个字节,(+/-)1.7E308,15位有效数字,课外作业:查阅资料,了解浮点数是如何存储的,Longdouble,12个字节,(+/-)1.19E4932,18位有效数字,注意有效位数的不同,float,double,213.5671435568967,64位,取值范围:10-308至10308,16位有效数字,flaotf_level=213.5671435568967;doubled_level=213.5671435568967;,去VC下试试!,转换字符串%f,floatcircumference=78.53;printf(%f,circumference);,输出结果:78.530000,默认情况下精确到六位小数,9.4786789;,9.478679,2.2.2浮点数据的输出,doublemercury_level=168.2251074;printf(%7.2f,mercury_level);,输出结果:168.23,宽度,表示所有的数字和小数点所占的位数。不够7位右对齐。,%7.2f,精度(精确到小数点后多少位),转换字符串%m.nf,2.2.2浮点数据的输出,程序,指令,2.2.3常量,标识符关键字常量运算符分隔符等,常量是在程序中保持不变的量,分为:立即数符号常量(宏常量)const常量,立即数整型常量:如32、100实型常量:如1.23123.567e5字符常量:a、2、n字符串常量:“cprogram”,定义常量,为使程序易于阅读和便于修改,可以给程序中经常使用的常量定义一个有一定含义的名字。,常量用于定义具有如下特点的数据:在程序中保持不变在程序内部频繁使用需要用比较简单的方式替代某些值防止意外的修改,增强程序的健壮性,定义宏常量,#definePI3.1415926,编译预处理指令#define将PI定义成一个要被3.1415926取代的符号,此时PI不是一个变量,而是3.1415926的别名。,在编译开始之前,只要在程序的表达式中引用PI,预处理器就会用#define指令中的值(3.1415926)来取代它。,宏常量的缺点:宏常量被替换成立即数之后,内存中有同一个立即数的多份拷贝。,定义const常量,在定义变量时,加上const修饰,告诉编译器,它的值是固定的,不能被改变。编译器会帮你检查、监督。,constdoublePI=3.1415926;,const推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。,在编译的时候,由于const定义常量只是给出了对应的内存地址,而不是象#define给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。,例2.3求圆柱体的体积,/求圆面积,圆周率用立即数#include“stdio.h”intmain()doulbev,r,h;r=10.0;h=20.0;v=3.1415926r*r*h;printf(“v=%fn”,v);return0;,/求圆面积,圆周率用宏常量#include“stdio.h”#definePI3.1415926intmain()doublev,r,h;r=10.0;h=20.0;v=PIr*r*h;printf(“v=%fn”,v);return0;,/求圆面积,圆周率用const宏常量#include“stdio.h”constdoublePI=3.1415926;intmain()doublev,r,h;r=10.0;h=20.0;v=PIr*r*h;printf(“v=%fn”,v);return0;,模仿练习,(1)编程,已知圆的半径radius(实数),输出圆的面积,保留两位小数,2.3:对任意华氏温度进行温度转换,例2.3:例2.2中的程序运行后只能输出华氏温度100F对应的摄氏温度,为提高程序地通用性,要求程序运行后等待键盘输入一个华氏温度(实数),程序输出其对应的摄氏温度。,/读入一个华氏温度,输出其对应的摄氏温度#includeintmain()doublecelsius,fahr;/声明两个双精度浮点型变量scanf(%lf,scanf(“%d”,2.3.1scanf()函数,scanf函数从标准输入(键盘)读取信息,按照格式描述把读入的信息转换为指定数据类型的数据,并把这些数据赋给指定的内存区域中。,转换字符串,scanf(%d,num,在内存中分配一块32位存储空间存储空间使用名称“num”标识,等待用户输入一个值将输入的值按十进制整数来理解,然后内存中(因为scanf提供了num的内存地址),123,内存,用scanf()读入单精度浮点数据,floattax_rate;scanf(%f,tax_rate,在内存中分配一块32位存储空间存储空间使用名称“tax_rate”标识,等待用户输入一个值将输入的值按十进制单精度实数来理解,然后内存中(因为scanf提供了tax_rate的内存地址),12.234,内存,doubletax_rate;scanf(%lf,tax_rate,在内存中分配一块64位存储空间存储空间使用名称“tax_rate”标识,等待用户输入一个值将输入的值按十进制双精度实数来理解,然后内存中(因为scanf提供了tax_rate的内存地址),12.234,约定:以后凡说要定义实型变量,都使用double,用scanf()读入双精度浮点数据,3.1.3格式控制字符串中的普通字符,scanf(格式字符串,地址列表)在格式字符串中若有普通字符,则输入时在对应位置也必须输入该普通字符,否则会因读入格式错误而终止程序。如果有scanf(“%d,%d”,scanf(%d%d,2.4.1算术运算,算术运算,算术,一元,二元,操作数,操作数,运算符,二元运算符,+,-,*,/,%,算术运算注意,(1)整数除整数,得整数如:1/20,9/42思考:5*(fahr-32)/9和5/9*(fahr-32)等价吗(2)%模运算,针对整型数据如:565,-94-1,10040模运算的结果与第一个操作数相同。(3)“*”乘号不能省略5*a不能5a(4)双目运算符两侧操作数的类型要相同,课堂练习:求各位数字和,由键盘输入一个整数n(小于1000),计算n的各位数字和,#includeintmain()intn,d0,d1,d2;scanf(%d,课堂练习:两个整数的和差积商,输入两个整数,求两个数的和、差、积、商,要求商保留2位小数,/整数运算#includeintmain()inta,b,c;scanf(%d%d,常见错误1:,/两个整数的运算#includeintmain()inta,b,c;scanf(%d%d,输入:85商的结果是0.00,分析原因,原因是输出格式控制%0.2f与对应输出项类型不匹配。a/b的结果是整型数据,%.2f用来输出浮点型数据,整数除法的运算结果是整数商,直接扔掉余数,分析如下程序错误的原因,常见错误2:,/两个整数的运算#includeintmain()inta,b;doublec;c=a/b;scanf(%d%d,输入85运行结果是1.00,分析原因,依然是整数除法带来的问题:整数除法的运算结果是整数,5/3的结果是1,把1赋给实型变量c,c的值是1.0,而不是你期望的1.6,分析如下程序错误的原因,2.4.2类型转换,1、不同级别的操作数运算时,精度低的自动向精度高的转换如:doublea=1/2;a的值是0.0doublea=1.0/2;a的值是0.52、赋值时类型转换如:doublea=1;/会把1.0赋给ainti=1.5;/会把1.5转换为整型得1,赋给i,类型转换,3、强制类型转换(类型名)操作数如:doublea=2.5;intn;n=(int)a;/将a的值转换为整型2,赋给n又如:求两整数的商,商为实数inta=2,b=3;doublec;c=(double)a/b;/强制类型转换或c=1.0*a/b;/不同类型运算时向精度高的转换,先将a转换为实数,再除以b!强制转换优先级最高,2.5两个数的最大值,例2.5输入两个数,输出其中较大的数,#includeintmain()inta,b,max;scanf(%d%d,(1)读入a,b(2)把a赋给max;(3)如果bmax(或ba),把b存入max(4)输出max,2.5.1关系运算,关系运算符种类:=!=结合方向:自左向右优先级别:,关系预算的结果是整型:若关系成立,结果为1;若关系不成立,结果为0;,inta=3,b=5;ab结果为0;A*2b结果为123=37结果为1,关系运算注意:,例若inta=0,b=5,x=100;则a70结果为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,#includeintmain()inta,b,c,max;scanf(%d%d%d,“比武招亲”、擂台赛的思想,2.5.3条件表达式,本题可以用如下条件运算符来处理:max=(ab)?a:b,#includeintmain()inta,b,max;scanf(%d%d,其中,“(ab)?a:b”是一个条件表达式,若条件(ab)成立,则条件表达式取值a;否则,取值b。,相当于if(ab)max=a;elsemax=b;,条件表达式的一般形式:,表达式1?表达式2:表达式3,条件表达式的求解过程先求解表达式1的值若表达式1的值为真(非0);则求解表达式2的值,将其作为条件表达式的值。表达式3不计算。若表达式1的值为假(0);则求解表达式3的值,将其作为条件表达式的值。表达式2不计算。,模仿练习,用条件表达式实现:输入三个数,输出其中最大的数,(1)读入a,b,c(2)把a和b中较大者赋给max;(3)把c和max中较大者赋给max;(4)输出max,#includeintmain()inta,b,c,max;scanf(%d%d%d,课堂练习,时间间隔从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示。Input输入包括两行。第一行为时间点1,第二行为时间点2。都以“小时:分钟:秒”的格式输入。Output以“小时:分钟:秒”的格式输出时间间隔。格式参看样例。Hint注意:要输出01:08:31中的占位符0,SampleInput12:01:1213:09:43SampleOutput01:08:31,SampleInput12:40:1213:09:43SampleOutput00:28:31,思路分析,方法1:两个时间点都转换成秒,然后相减,再把结果转换为时分秒方法2:时分秒对应相减,不够减向上借位。,2.6计算两点间距离,例2.6编程:输入4个实数x1,y1,x2,y2,数据之间用空格隔开。表示两点坐标A(x1,y1),B(x2,y2),计算并输出两点间的距离。结果保留两位小数。,(1)定义x1、y1、x2、y2、dist为double类型(2)读入x1、y1、x2、y2(3)利用两点间距离公式求距离,存入dist(4)输出dist,如何求平方根呢?用C语言的标准库函数sqrt(),例2.6的源程序,/求两点之间的距离#include#includeintmain()doublex1,y1,x2,y2,dist;scanf(%lf%lf%lf%lf,也可以写成两个语句:dist=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);dist=sqrt(dist);,2.6.1常用数学函数,要包含头文件:#include1、求绝对值求整数的绝对值,用abs:inti=-3,j;j=abs(i);求实数的绝对值,用fabs:doublea=-12.3,b;b=fabs(a);,数学函数,2、求开方,用sqrtdoublea=2.3,b;b=sqrt(a);3、求幂xy,用powdoublex=2,y=3,z;z=pow(x,y)4、求e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论