C语言程序设计-基于计算思维的培养 课件 第2章 数据类型与表达式_第1页
C语言程序设计-基于计算思维的培养 课件 第2章 数据类型与表达式_第2页
C语言程序设计-基于计算思维的培养 课件 第2章 数据类型与表达式_第3页
C语言程序设计-基于计算思维的培养 课件 第2章 数据类型与表达式_第4页
C语言程序设计-基于计算思维的培养 课件 第2章 数据类型与表达式_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第二章数据类型与表达式目录/Contents标识符命名,数据类型常量和变量,整型和实型变量的定义和赋值计算数据类型占用内存空间的大小算术运算符增1和减1运算符表达式与赋值中的自动类型转换强制类型转换运算符常用的标准数学函数标识符标识符(identifier):组成程序元素的名字。组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线长度:取决于语言系统不能使用关键字或特定字区分大小写良好习惯简洁、见名知意和匈牙利命名法例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123C程序组成元素关键字(Keyword)又称保留字(CReservedWord)在C语言中有特殊含义的词标识符(Identifier)系统预定义标识符(C标准标识符)有特殊含义但可能被重新定义的词(但不推荐这样做!!)用户自定义标识符变量,函数名,……C程序常见元素举例C程序常见元素举例运算符(Operator)详见附录C

分隔符(Separator)空格、回车/换行、逗号等其他符号{和}标识函数体或语句块/*和*/是程序注释的定界符常量(Constant)数据类型问题的提出:数据为什么区分类型?★数据的存储形式★合法的取值范围★占用内存空间的大小★可参与的运算种类数据类型基本数据类型◆int整数,在目前绝大多数机器上占4个字节TC2.0,2个字节◆float单精度浮点数,4个字节◆double双精度浮点数,8个字节◆char字符,1个字节表示256个ASCII字符,或0~255的整数数据类型的修饰符◆shortshort

int,简写为short,短整数,2个字节◆longlong

int,简写为long,长整数,4个字节long

double,长双精度(高精度)浮点数,10个字节◆unsigned用来修饰char、int、short和long无符号整数(正整数和0)数据类型的取值范围数据类型占据的内存大小☆同种数据类型在不同平台上其占字节数不尽相同如int在16位、32位和64位系统上分别占2、4和8个字节☆不要对变量所占的内存空间字节数想当然要用sizeof计算变量或者数据类型的长度☆不用sizeof的危害在平台间移植时会出现问题,导致数据丢失或者溢出☆C语言的关键字、运算符,并非函数名计算类型占用的字节数☆两种语法形式sizeof(类型)结果为类型占用的字节数sizeof(表达式)结果为表达式值所属类型占用的字节数一般都使用sizeof(变量名)

sizeof的使用程序设计语言的规则①常量②变量③运算符④表达式⑤函数⑥控制结构⑦数据结构实质:把自然语言描述问题的方式转化为某种计算机语言的方式表达给计算机。常量与变量【例题2.1】计算任意大小圆柱体的表面积和体积。计算公式:①S=2r2+2rh②V=r2h问题:①如何定义问题中参与运算的物理量?②参与运算的物理量如何输入及保存?③

输入的数据如何参与运算?④

计算结果存放在哪里?常量与变量★程序处理的数据形式常量(constant)在程序中不能改变其值的量变量(variable)其值在程序执行过程中是可以改变的常量☆在程序中不能改变其值的量☆包括:整型(如

0,20,-2,

123L,123u,

022,0x12)默认为int实型(如2.4,1.5e-5,2.75F,2.75L)默认为double字符型(char如‘a',‘8','$','\n')用\开头的字符为转义字符,代表1个字符字符串(string如"USA",“2",“6c")枚举型长整型无符号整型八进制十六进制单精度实型长双精度实型十进制小数指数形式十进制18编译程序根据变量定义为其分配指定字节的内存单元…...地址abc4字节4字节4字节地址地址…...内存(在VC++中)1-3

随机数变量定义:声明程序中要使用的变量名,设定每个变量将存储什么类型的数据。变量的使用:先定义,后使用数据类型变量1[,变量2,…,变量n];变量初始化:定义时赋初值

inta=1,b=-3,c;例:inta,b,c;决定分配字节数和数的表示范围合法标识符变量19变量的声明结果会是什么?使用变量的基本原则变量必须先声明,后使用所有变量必须在第一条可执行语句前声明声明的顺序无关紧要一条声明语句可声明若干个同类型的变量★声明变量是初始化变量的最好时机不被初始化的变量,其值为随机数

20定义:用单引号括起来的单个普通字符或转义字符.

字符常量的值:该字符的ASCII码值<转义字符及其含义:转义字符含义\n\v\r\a\’\ddd\t\b\f\\\”\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------(

)如‘A’——65,‘a’——97,

‘0’——48,‘\n’——10如‘a’‘A’‘?’‘\n’‘\101’转义字符:反斜线后面跟一个字符或一个代码值表示【例2.2】转义字符举例#include"stdio.h"main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’字符常量21字符型变量char字符变量存放字符ASCII码字符变量例:charch;charsex=‘M’;

通过调用标准库函数来实现#include<stdio.h>

字符输出函数putchar(ch)输出一个字符ch,ch为字符变量名

字符输入函数getchar()无参数函数值为从输入设备接收的字符字符的输入输出字符的输入输出PressakeyandthenpressEnter:B↙b24字符常量与字符串常量不同定义:用双引号(”

”)括起来的字符序列存储:每个字符串尾自动加一个’\0’作为字符串结束标志hello\0例字符串“hello”在内存中aa\0例’a’”a”例:空串””空字符’’\0例:charch;ch=“A”;字符串常量常量小结26【例2.3】/*charoperation*/#definePRICE12.5#include"stdio.h"main(){intnum=3;floattotal;charch1,ch2=‘D’;total=num*PRICE;ch1=ch2-‘A’+‘a’;printf(“total=%f,ch1=%c\n”,total,ch1);}宏定义变量定义输出结果运行结果:total=37.500000,ch1=d例题变量小结◆变量必须先定义,再赋值,后使用;◆正确理解变量的内涵①变量名:代表内存中的存储单元,变量通过变量名来标识,变量名与内存中的存储单元相对应,程序通过变量名来存、取存储单元中的内容。②变量的地址:系统分配给变量的存储单元的起始地址。③变量的类型:决定存储单元的大小和数据的存储方式。④变量的值:变量对应的存储单元存放的具体的值。28表达式由运算符和相应的操作数及用于描述运算先后次序的括号构成。注意:常量、变量、函数调用也是表达式。表达式是有值的。赋值表达式也有值的:赋值运算后变量的值。运算符与操作数操作数:运算符的运算对象叫操作数。a+b*c运算符分为单目运算符、双目运算符、三目运算符。单目运算符:正、负数双目运算符:算术运算符、关系运算符、逻辑运算符等表达式及其值算术运算符与表达式【例2.4】W+Z操作数(Operand)运算符(Operator)操作数(Operand)何谓运算符和操作数?何谓表达式?☆基本算术运算符:+、-

、*、/、%%运算☆执行两个操作数的相除运算后返回余数☆规则:操作数必须是整数【例2.5】-11%5=-1一个整数一个整数-115-2-10-1余数商结果是-11/5的余数%运算%运算【例2.5】-11%5=-1一个整数一个整数-115-2-10-1余数商结果是-11/5的余数%运算【例2.6】11%-5=1一个整数一个整数11-5-2101余数商结果是11/-5的余数【例2.7】11.0%5=?一个实数一个整数无效!

注意!%运算35任意两个整数相除结果为整数。后面的小数被舍弃掉了。87654/10=(8765)87654/100=(876)如果/两边有一个或两个操作数为浮点数,则结果为浮点数。设问:x/10=?87654/10.0=(38765.4)87654.0/100=(876.54)/的运算36计算下列算式的结果。12345/10=(1234)12345/100=(123)12345/1000=(12)12345/10000=(1)规律:一个数除以任意位上的权重,该位上的数变为个位数。复习:x%10=(得到这个数的个位数)12345/10%10=()12345/100%10=()12345/1000%10=()12345/10000%10=()实战与提高37问题:如何利用/、%运算符,计算任意数x的个位、十位、百位、千位、万位数?个位数:x%10十位数:x/10%10百位数:x/100%10千位数:x/1000%10万位数:x/10000%10实战与提高38应用:判断数学中的特别数水仙花数:是指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身。153=13+53+33回文数:一个任意自然数x,若将x的各位数字反向排列所得自然数x1与x相等,则称x为回文数。x=1234321实战与提高39C标准数学函数的使用:在程序前端加入数学函数库头文件#include<math.h>C标准数学函数功能cos(x)计算cos(x)的值sin(x)计算cos(x)的值fabs(x)计算x的绝对值exp(x)计算ex的值log(x)计算ln(x)的值log10(x)计算lg(x)的值sqrt(x)计算x的平方根的值sqr(x)计算x的平方的值C标准数学函数40练习:写出下列数学式子的C语言表达式。①(x+sinx)e2x②③(1+log(x))2实战与提高算术表达式☆当算术表达式包含两个或两个以上的算术运算符时

◘首先要确定运算顺序

◘所有的运算符都有一个优先级

优先级(OrderofPrecedence)High: *、/、% Low: +、-不同优先级时的运算顺序:从高到低相同优先级时的运算顺序:算术运算符为左结合(从左到右)算术表达式【例2.8】?48.52.5+6–

–44.52.5+6–2*2=4.5算术表达式巧妙使用圆括号改变运算顺序从内往外运算【例2.9】(9–(3+2))*3=?算术表达式【例2.9】

(9–(3+2))*3=??

–5412

(9–(3+2))*3=12赋值运算符和表达式★三种赋值形式:★简单赋值★多重赋值★复合赋值赋值运算符和表达式47例a=3;d=func();c=d+2;x+1=2(?)赋值运算符和表达式★多重赋值:变量1=

变量2=

表达式;★简单赋值运算符:--符号:=

--格式:变量

=

表达式;

--作用:将一个数据(常量或表达式)赋给一个变量48例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//表达式值为5,a,b,c值为5//b=5;a=5//表达式值11,c=6,a=11//表达式值10,a=10,b=4,c=6//表达式值5,a=5,b=10,c=2结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型赋值表达式的值与变量值相等,且可嵌套赋值运算符和表达式49常用的赋值表达式:利用变量的原有值进行计算,并将结果重新赋值给该变量。i=i+1;i=i-1;j=j*2;k=k/10;n=n%10;复合赋值运算符:变量xop=表达式相当于变量原值与右操作数进行计算,结果更新变量的值:变量x=变量xop表达式+=-=*=/=%=例如:k/=10(相当于k=k/10);m%=5(相当于m=m%5);x*=z+3;i+=j-=2;相当于i+=(j-=2);i=j=k=1;上式i=?复合赋值运算符和表达式复合赋值运算符和表达式已知inta=3;执行a+=a-=a*a后,变量a的值?a+=a-=a*aa+=a-=9a+=-6

a=-123-6-12执行a+=a-=a*=a后,变量a的值?a+=a-=a*=aa+=a-=9a+=0

a=03900★自增运算符++

★练习:m=(++i)*5;n=(j++)*4;if(m++==5){}m=(?);★自减运算符--:

step1step2++ii=i+1表达式的值=ii++表达式的值=ii=i+1自增自减运算符step1step2--ii=i-1表达式的值=ii--表达式的值=ii=i-1【例2.10】j=++i-3i5similartoi=i+1;j=i–3;j??36前缀自增/自减运算符后缀自增/自减运算符【例2.11】j=i++-3i5similartoj=i–3;i=i+1;j??26【例2.12】inta=3;printf("%d",-a++);a3similartoprintf("%d",-a);a=a+1;4后缀自增/自减运算符良好的程序设计风格应提倡:◆在一行语句中,一个变量只能出现一次增1或者减1运算◆过多的增1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果自增自减运算符56隐式转换运算转换规则:不同类型数据运算时先自动转换成同一类型什么情况下发生运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换不同类型数据间的转换取值范围小的类型赋值给取值范围大的类型是安全的,反之是不安全的若大类型的值在小类型能容纳的范围之内,则平安无事。但是浮点数转为整数,会丢失小数部分,而非四舍五入反之转换后的结果必然是错误的,具体结果与机器和实现方式有关避免如此使用,好的编译器会发出警告不同类型数据间的转换58doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例inti;floatf;doubled;longl;不同类型数据间的转换不同类型数据间的转换【例2.13】下面程序演示不同数据类型之间的转换。#include<stdio.h>intmain(){inti=12;floatf=3.14;doubled=1.2;i=f;f=i;d=f;printf(“i=%d\n”,i);printf(“f=%f\n”,f);printf(“d=%f\n”,d);}i=3f=3.000000d=3.00000060有些场合不能实现自动转换,如

floatx=15.4;intd=4; x%d存在语法错误强制转换形式:(类型名)(表达式)强制转换得到所需类型的中间变量,原变量类型和值不变不同类型数据间的转换Example:

intx=10; floaty; y=(float)x;

(float)10

10.000000x10y??10.000000不改变x【例2.14】

inttotal,number; floataverage; … average=total/number;

15/2

7total15number2average??7.000000两个整数运算的结果还是整数,不是浮点数不同类型数据间的转换【例2.14】

inttotal,number; floataverage; … average=(float)total/number;

15.000000/2

7.500000total15number2average??7.500000不同类型数据间的转换【例2.15】

下面程序演示类型转换运算符的使用。1

#include<stdio.h>2

intmain()3

{4

inta=3;5

printf("a/2=%d\n",a/2);6

printf("(float)a/2=%f\n",(float)a/2);7

printf("(float)(a/2)=%f\n",(float)(a/2));8

printf("a=%d\n",a);9

温馨提示

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

评论

0/150

提交评论