版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
存款输入与利息输出能力目标知识目标
能合理使用C语言中的运算符对基本类型的数据进行运算,并能编写简单的输入/输出语句,对数据进行输入和输出控制。了解C语言的特点掌握C标识符的命名规则掌握C基本的数据类型及其表示形式掌握C运算符的运算规则及其优先级关系掌握C基本数据类型间的转换规则掌握C数据的输入与输出
任务1存款的原样输出任务2利息的计算任务3存款的输入与利息的输出
项目分解任务1存款的原样输出1.1.1问题情景及其实现#include<stdio.h>intmain(){printf("张三存款5000元!\n");return0;}
有一位用户张三到XXX银行,存储5000元人民币,请输出该用户的存款金额。张三存款5000元!程序运行结果:C语言发展历史C语言的特点C语言运行环境与开发工具1.1.2相关知识一、C语言发展历史B语言:Bell实验室,1970年在PDP机器上用其编写UNIX系统CPL语言:剑桥大学,1963年BCPL语言:剑桥大学,1967年C语言:Bell实验室,1972~1973年用其改写UNIX系统经简化进一步简化保持精练、接近硬件的优点,克服数据类型过少的不足C语言的里程碑:1972年Dennis·M·Ritchie开发设计1978年Dennis·M·Ritchie和BrianW·Kernighan合著
《CProgrammingLanguage》(K&R版本)1987年ANSI1990年ISO9899-1990Dennis·M·Ritchie二、C语言的特点语言简洁,表达能力强,易于理解只有32个关键字,9种控制语句有大量的标准库函数数据类型丰富运算符种类多,功能强程序书写格式自由可直接访问物理地址,实现对硬件和低层系统软件的访问语言生成的代码质量高可移植性好应用面广,适于教学增加学习难度三、C语言运行环境与开发工具C语言作为高级语言,要想得到可以执行的C程序,必须对C源程序进行编译和连接,而该过程需要在开发工具特定的运行环境下进行。1、C语言的运行环境
VisualC++6.0(后面称VC6.0)是当今Windows操作系统下最流行的C类集成开发环境之一。这类编译程序也兼容了对C语言的编译和运行。它具有方便、直观、快捷的编辑器,功能强大的调试器,功能更完善的编译器,还具有丰富的库函数。它向用户提供了一个集成环境,把程序的编辑、编译、连接和运行等操作全部集中在一个界面上进行,使用十分方便。本教程采用VC6.0编译程序作为C语言程序的运行环境,下面我们先对VC6.0的使用进行基本的介绍。2、C语言的开发工具的使用(1)启动VC6.0编译程序。(2)创建项目(3)C源文件的创建(4)编辑源代码(5)编译连接源程序(6)执行程序1.1.3知识扩展:字符原样输出程序/*----------------Aprogramtoprintwelcome----------------*/#include<stdio.h>intmain(){printf("welcome!");return0;}注释预处理命令函数定义语句程序运行结果:welcome!函数体任务2利息的计算#include<stdio.h>#inclide<math.h>intmain(){double=0.03;double=5000,;int=3;DinterestDmoney
pow((1Irate),term)
Dmoney
;printf("存款金额为%.1lf的%d年存款利息是:%.2lf元\n",Dmoney,term,Dinterest)
;return0;}1.2.1问题情景及其实现
假设XXX银行1年定期存款的利率为3%,并已知存款期为3年,存款本金为5000元,请计算3年后可以得到的利息是多少。
存款金额为5000.0的3年存款利息是:463.64元程序运行结果:IrateDmoneyDinterestterm-+=*分析:计算机操作处理时,要完成以下工作:在内存中给存款金额Dmoney、存款利率Irate、存款期限term和存款利息Dinterest开辟存储空间,存放它们的值。应该留多大的地方来存放它们的值?数据3和0.03与
term、Irate不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理?对整数3和小数0.03,计算机存放时是否有区别?+、-、*、=等这些符号计算机的识别与执行是怎样的?C的字符集及词法约定常量与变量基本数据类型运算符与表达式运算符的优先级和结合性数据的类型转换1.2.2相关知识一、C的字符集及词法约定1、基本字符集字符集是C语言的基本字符集,C语言使用基本字符集如下:①大写字母:ABC…XYZ②小写字母:abc…xyz③数字:0123456789④特殊符号:+-*/><()[]{}_=!#%.,;:‘“|&?$^\~⑤空白符:空格符、换行符、制表符一、C的字符集及词法约定2、标识符
标识符是用来标识某种对象的名字,这些对象可以是程序中的变量、符号常量、数组、函数和数据类型等。
标识符的构成成份是:字母、数字和下划线;构成规则是:以字母或下划线开头的序列。C语言中标识符分为系统定义标识符和用户定义标识符两种。
:是C语言系统使用的具有特定含义的标识符,它们都是一些英文单词或缩写,也称为特定字或保留字,不能作为预定义标识符和用户定义标识符使用。(1)系统定义标识符①关键字②预定义标识符
系统定义标识符是指具有固定名字和特定含义的标识符,如前面程序中看到的int、float、double、printf等。系统定义标识符又可以进一步分为关键字和预定义标识符两种类型。
:是具有特定含义的标识符,包括系统标准库函数名和编译预处理命令等。例如:printf、scanf、define和include等都是预定义标识符。(2)用户定义标识符
用户定义标识符用于对用户使用的变量、数组和函数等操作对象进行命名。例如:将两个变量命名为a和b,将一个数组命名为student,将一个函数命名为max等。二、常量与变量
在计算机处理的程序中,我们不免经常与数据打交道,根据数据的值是固定的,还是可变的,我们将数据分为两大类:常量和变量。1、常量→定义:程序运行时其值不能改变的量(即常数)例如:5000,3,0.03→
分类:符号常量和直接常量
(1)符号常量:用标识符代表常量定义格式:#define
符号常量常量一般用大写字母是宏定义预处理命令,不是C语句(2)直接常量:整型常量实型常量字符型常量字符串常量【例1-1】
符号常量使用#definePRICE30intmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);return0;}程序运行结果:total=300注意:⑴符号常量使常量数据意义明确。⑵符号常量使程序易于阅读和修改。#define符号常量的原理使用#define定义的符号常量,相当于为一个常量数据取了一个名字,当编译器开始编译包含符号常量的C程序时,它将#define定义的实际常量数据替换这个符号常量,再编译。常量的内存表示常量是不占据任何内存单元的,它是程序可执行指令的一部分,处在代码区中,运行时不可能改变。P12页2、变量
在程序运行过程中其值可以改变的量称为变量。变量有整型变量、实型变量、字符变量等。程序中的变量由用户标识符来表示,在C语言中,所有变量必须遵循“先定义,后使用”的原则。变量的定义一般放在函数体的开头,即声明部分。1、编译系统会根据定义为变量分配内存空间,分配空间的大小与数据类型有关。2、编译系统可以根据变量的类型检查对该变量的运算是否合法。2、变量变量定义语句的形式为:类型说明符变量名表;即:类型说明符变量名1,变量名2,…;其中:类型说明符由关键字表示,不同的关键字表示不同的数据类型,变量名是用户标识符,由用户命名。
通常,定义了一个变量而未赋初值时,一般变量中存放的是随机值。因此,为使定义的变量有一确切的数值,需给定义的变量赋一初值。注意:一个变量代表着内存中一个具体的存储单元,用变量名来标识。存储单元中存放的数据称为变量的值,变量的值可以通过赋值的方法获得和改变。一定要区分开变量名和变量值这两个不同的概念。三、基本数据类型数组类型结构体类型联合体类型枚举类型整型字符型实型(浮点型)空类型单精度型双精度型基本类型构造类型C数据类型本任务讨论基本类型:整型、字符型、实型指针类型1、整型(1)整型常量在整常量后加字母u或U,认为它是无符号整型常量在整常量后加字母l或L,认为它是longint型常量(可以加lu,表示unsignedlong常量整型常量的类型根据其值所在范围确定其数据类型→表示形式:十进制整数:由数字0~9和正负号表示.如123、-456,0
八进制整数:由数字0开头,后跟数字0~7表示.如0123、011
十六进制整数:由0x开头,后跟0~9,a~f或A~F表示.如0x123、0xff例如:0123=()100x123=()100xff=()108329125500x0x(2)整型变量整型变量的数据类型根据存储空间的大小分为:⑴短整型shortint或short⑵基本型int
⑶长整型longint或
long
另外,整型变量还有指示的修饰符signed或unsigned,也即整型数据有正数/负数、无符号数之分.整型变量定义的语法:类型说明符变量名标识符1,变量名标识符2,……;1、整型例如:inta,b,c;longx,y;unsigned
p,q【例1-2】整型变量的定义与使用#include<stdio.h>voidmain(){shorta=-10;unsignedshortu=-10;longL=180;printf("a=%d,u=%u,L=%ld\n",a,u,L);return0;}shortunsignedlongduld带符号的十进制格式输出不带符号的十进制格式输出带符号的长整型十进制格式输出短整型,分配2字节无符号短整型,分配2字节长整型,分配4字节程序运行结果:a=-10,u=65526,L=180P17页short【例1-3】整型数据的溢出#include<stdio.h>intmain(){shortinta;a=32767;printf("%d",a);a=a+2;printf("%d\n",a);return0;}程序运行结果:32767,-32767shortint短整型,分配2字节12345678910111213141516011111111111111132767:10+1000000000000001-32767P17页例如:E-51.2E-3.52、实型(1)实型常量
实型常量数据(浮点数)在写作时可以有两种表示方法:①十进制小数形式:由数字和小数点组成(必须有小数点)。例如:0.1234,1234.0,0.0②
指数形式:使用e或E代表10的指数,“E”前必须有数字(有效数据);“E”后为指数且必须为整数。0.1234×1001.23×1040.1234e0,1.23E4,,2、实型(2)实型变量float(单精度):占4字节,提供7位有效数字double(双精度):占8字节,提供15位有效数字实型变量的语法:类型说明符变量名例如:floatx,y;doublea,b,c;单精度实型,每个变量分配4字节双精度实型,每个变量分配8字节实型数据在内存以指数形式存储:+或-例如:floata=3.14159;内存形式:小数数符小数部分指数部分+或-指数数符.3141591【例1-4】实型数据的舍入误差#include<stdio.h>intmain(){
floata,b;a=123456.789e5;b=a+20;printf("%f\n",a);printf("%f\n",b);return0;}单精度实型,有效值位数为6~7位123456789001234567程序运行结果:12345678848.00000012345678848.0000008848.0000008848.000000有效值位数有效值位数??【例1-5】实型数据的有效值位数#include<stdio.h>intmain(){floata;doubleb;a=33333.33333;b=33333.33333333333333;printf("%f\n",a);printf("%lf\n",b);return0;}程序运行结果:33333.33203133333.3333332031有效值位数有效值位数??单精度实型,有效值位数为6~7位双精度实型,有效值位数为15~16位33333.3333333.333333333333、字符型(1)字符型常量转义字符含义\n\r\'\ddd\t\b\f\xhh转义字符含义换行回车单引号1~3位8进制数代表的字符水平制表退格换页1~2位16进制数代表的字符表1-4常用的转义字符及其含义:\"双引号反斜线\\转义字符:反斜线后面跟一个字符或一个代码值表示表示形式:用单引号括起来的单个普通字符或转义字符。字符常量的值:该字符的ASCII码值。【例1-6】转义字符的使用#include<stdio.h>intmain(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");return0;}ABCIsay:"Howareyou?"\CProgram\Turbo'C'程序运行结果:3、字符型(2)字符型变量
字符型变量的数据类型为char,占1字节。字符型变量的分类:字符型变量还有符号指示的修饰符signed或unsigned,也即字符型数据有正数/负数、无符号正数之分。
字符型变量的数值范围:
unsignedchar
的数值范围:0—255char的数值范围:-128—+127注意:字符变量存放的是字符ASCII码【例1-7】向字符变量赋以整数#include<stdio.h>intmain(){chara,b;a=115;b=116;printf("字符型变量字符型输出:%c,%c\n",a,b);printf("字符型变量的整型输出:%d,%d\n",a,b);return0;}字符型变量字符型输出:s,t字符型变量的整型输出:115,116程序运行结果:【例1-8】字符类型与整型间的转换#include<stdio.h>intmain(){chara,b;a='s';b='t';printf("初始小写字符:%c,%c\n",a,b);printf("初始字符的ASCII码值:%d,%d\n",a,b);a=a-32;b=b-32;printf("转换后的大写字符:%c,%c\n",a,b);printf("转换后字符的ASCII码值:%d,%d\n",a,b);return0;}初始小写字符:s,t初始字符的ASCII码值:115,116转换后的大写字符:S,T转换后字符的ASCII码值:83,84程序运行结果:例:charch;ch="A";(3)字符串常量→表示形式:用双引号("")括起来的字符序列→存储规则:每个字符串尾自动加一个'\0'作为字符串结束的标志→字符常量与字符串常量的不同:hello\0例字符串"hello"在内存中aa\0例'a'"a"例空串""\0注意:没有字符串变量,字符串用字符数组存放!例:charch;ch='A';四、运算符与表达式
变量用来存放数据,运算符则用来处理数据。所谓运算符就是指运算的符号,例如加运算符(+)、乘运算符(*)、取地址运算符(&)等。表达式与运算符密不可分,它由运算符与操作数组合而成,并由运算符指定对操作数要进行的运算,根据运算符需要参与的操作数的个数分为:单目运算符、双目运算符和三目运算符,一个表达式的运算结果是一个值。C语言提供的运算符有以下几种:算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符、sizeof运算符及其它运算符。1、算数运算符与算术表达式(1)基本的算术运算符及算数表达式①基本的算术运算符C语言中提供的基本的算数运算符包括:加(+)、减(-)、乘(*)、除(/)和求余(%)。如表1-5所示。
1、算数运算符与算术表达式(1)基本的算术运算符及算数表达式②算术表达式用算术运算符连接而成的式子称为算术表达式。【例1-9】基本算数运算。#include<stdio.h>intmain(){unsignedshortu=65500;u=u+50;printf("u=%u\n",u);return0;}u=14程序运行结果:程序说明:P24注意:当算数运算符两边的操作数是相同的数据类型的表达式时,运算的结果将保持原来的数据类型。因此,5/2的值是2,不是2.5。因为表达式5/2是整型表达式。%不能用于实型数据,2.5%2是非法表达式。算术表达式的结果应该不超过其所能表示的数的范围。1、算数运算符与算术表达式(2)取反运算符和自增自减运算符C语言中,减号(-)又是一个取反运算符,在此之外C语言还提供了另外两个用于算数运算的单目运算符:++(自增)和-
-(自减)。++的作用是使变量的值自己增1,而-
-的作用是使变量的值自己减1。假定变量value已预定义:intvalue=5;如表1-6所示1、算数运算符与算术表达式(2)取反运算符和自增自减运算符
由此可见,自增和自减运算符可在变量名前,也可在变量名后,即可以用于前缀和后缀的形式,但含义并不相同。对于前缀的形式,变量先作自增或自减运算,然后将运算结果用于表达式中;对于后缀的形式,变量的值先在表达式中参与运算,然后再作自增或自减运算。1、算数运算符与算术表达式(2)取反运算符和自增自减运算符【例1-10】自增自减运算。#include<stdio.h>intmain(){inti=3,a;a=20-i++;printf("a=%d,i=%d\n",a,i);b=++i+2;printf("b=%d,i=%d\n",b,i);return0;}a=17,i=4b=7,i=5程序运行结果:说明:++运算符只能用于变量,不能用于常量和表达式,因为++和--蕴含了赋值操作。两个+和-之间不能有空格作为前缀和后缀的区别2、赋值运算符与赋值表达式C语言中,“=”被称为赋值运算符,其含义是将运算符右边表达式的值送到左边变量名所代表的存储单元内。其简单形式是:变量=表达式
这种形式的整个表达式称为赋值表达式。执行赋值表达式时,一般首先计算右边表达式的值,然后赋给左边变量。在使用赋值表达式时应注意以下几点。2、赋值运算符与赋值表达式(1)“=”左边必须是变量名或者是对应某特定内存单元的表达式。(2)C语言允许在一个表达式中对多个变量连续赋值。(3)赋值运算符的优先级很低,仅高于逗号运算符。(4)赋值表达式的值就是“=”右边表达式的值。2、赋值运算符与赋值表达式【例1-11】赋值运算。#include<stdio.h>intmain(){inta=38,b=6,c;floatf=4;c=a/f-bprintf("c=%d",c);return0;}c=3程序运行结果:
在这个赋值语句中,右边的表达式的类型是double,而c是int型,所以赋值执行后结果的类型是int,即对double型的值截去小数部分之后的整数部分。
注意这里是截去,不是四舍五入。3、关系运算符与关系表达式
在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。
C提供6种关系运算符,用于数值之间的比较,表达式的值用整型量1(表示true),0(表示false),见表1-7。3、关系运算符与关系表达式说明:第一:<=和>=运算符不能写成=<和=>,=<和=>是无效的运算符。第二:字符串不应当用关系运算符比较,因为被比较的不是字符串的内容本身,而是字符串的地址。【例1-12】关系运算。#include<stdio.h>intmain(){intn;floata,b,c;a=7.2;b=6.5;c=8.9;n=a>b>c;printf("n=%d,a=%f,b=%f,c=%f\n",n,a,b,c);return0;}n=0,a=7.200000,b=6.500000,c=8.900000程序运行结果:/*对变量a,b,c分别赋值为7.2、6.5和8.9;*//*表达式n=a>b>c等价于n=((a>b)>c)。*/4、逻辑运算符与逻辑表达式逻辑运算符
&&||!逻辑表达式用逻辑运算符将运算对象连接成的式子例如:0&&'b'a&&b||c&&da||b-5||c/4!x+y>=z逻辑运算符的优先级和结合性:!是单目运算符,右结合,高于算术运算符&&和||是双目运算符,左结合,高于赋值运算符,低于关系运算符。4、逻辑运算符与逻辑表达式逻辑运算符的运算规则从左到右依次进行逻辑计算运算对象为非0表示逻辑真运算对象为0
表示逻辑假逻辑运算的结果为0
或1运算对象逻辑运算结果aba&&ba||b!a非0非0110非000100非0011000014、逻辑运算符与逻辑表达式运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算——逻辑运算的短路性质例如设:a=1,b=0,c=-2a&&b&&c(a++)||++b&&--c为0,运算终止,表达式值为0为非0,运算终止,表达式值为1且a为2,b为0,c为-2(b,c保持原值)4、逻辑运算符与逻辑表达式【例1-13】逻辑运算。#include<stdio.h>intmain(){inta=5,b=0,c=-2,m;m=a++&&b++&&c++;printf("a=%d,b=%d,c=%d,m=%d\n",a,b,c,m);m=a++||b++||c++;printf("a=%d,b=%d,c=%d,m=%d\n",a,b,c,m);m=(a-7)||b--&&c++;printf("a=%d,b=%d,c=%d,m=%d\n",a,b,c,m);return0;}a=6,b=1,c=-2,m=0a=7,b=1,c=-2,m=1a=7,b=0,c=-1,m=1程序运行结果:/*为0,运算终止,表达式值为0*//*为非0,运算终止,表达式值为1*//*为0,运算继续*//*为非0,运算终止*/~&^|<<>>5、位运算符与位表达式单目位运算符的运算对象只能是整型数据或字符型数据,不能是实型数据运算对象一律按二进制补码参加运算,并按位进行运算位运算的结果是一个整型数据位逻辑运算符移位运算符低于单目、算术运算符,高于其他运算符低于单目、算术和关系运算符,高于其他运算符
位运算符5、位运算符与位表达式位逻辑运算符运算规则
假设ai和bi均是一个二进制位(bit)运算对象逻辑运算结果aibiai&biai|biai^bi~ai0000010101111001101111000000000000001111&00000000000001000000000000000100即:a&b的值是45、位运算符与位表达式【例1-14】逻辑位运算#include<stdio.h>intmain(){inta=15,b=4,m;m=a&b;printf("a=%d,b=%d,,m=%d\n",a,b,m);m=a|b;printf("a=%d,b=%d,m=%d\n",a,b,m);m=a^b;printf("a=%d,b=%d,m=%d\n",a,b,m);return0;}0000000000001111
|00000000000001000000000000001111即:a|b的值是150000000000001111^00000000000001000000000000001011即:a^b的值是11a=15,b=4,m=4a=15,b=4,m=15a=15,b=4,m=11程序运行结果:5、位运算符与位表达式位移位运算符运算规则a<<b将a的值(二进制编码)左移b位,右补0a>>b将a的值(二进制编码)右移b位,左补0或1【例1-15】逻辑移位运算#include<stdio.h>intmain(){shorta=5,b=10,m;m=a<<2;printf("a=%d,b=%d,m=%d\n",a,b,m);m=b>>2;printf("a=%d,b=%d,m=%d\n",a,b,m);return0;}161514131211109876543210000000000000101a00a=5,b=10,m=20程序运行结果:5、位运算符与位表达式位移位运算符运算规则a<<b将a的值(二进制编码)左移b位,右补0a>>b将a的值(二进制编码)右移b位,左补0或1【例1-15】逻辑移位运算#include<stdio.h>intmain(){shorta=5,b=10,m;m=a<<2;printf("a=%d,b=%d,m=%d\n",a,b,m);m=b>>2;printf("a=%d,b=%d,m=%d\n",a,b,m);return0;}16151413121110987654321000000000000100b100a=5,b=10,m=20a=5,b=10,m=2程序运行结果:6、条件运算符与条件表达式条件运算符:?:条件表达式的一般形式表达式1?表达式2:表达式3例如:m<n?x:a+3a++>=10&&b-->20?a:bx=3+a>5?100:200C语言中唯一的三目运算符,要正确区分用?和:分隔的表达式涉及条件运算符的优先级与结合性6、条件运算符与条件表达式条件运算符优先级高于赋值、逗号运算符,低于其他运算符例如:⑴m<n?x:a+3⑵a++>=10&&b-->20?a:b⑶x=3+a>5?100:200等价于:(m<n)?(x):(a+3)等价于:(a++>=10&&b-->20)
?a:b等价于:x=((3+a>5)
?100:200)6、条件运算符与条件表达式条件运算符具有右结合性当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。例如:w<x?x+w:(x<y?x:y)(w<x?x+w:x<y)?x:yw<x?x+w:x<y?x:y6、条件运算符与条件表达式【例1-16】条件表达式#include<stdio.h>intmain(){charch='a';ch=ch>='a'&&ch<='z'?ch-'a'+'A':ch;printf("%c\n",ch);return0;}A程序运行结果:7、逗号运算符与逗号表达式逗号运算符形成逗号表达式的一般形式
表达式1,表达式2,……,表达式n
逗号表达式的值从左向右,依次对表达式求值,最后得到表达式n
的值就是逗号表达式的值例如:⑴a=5,a++,a*3⑵t=1,t+5,t++⑶x=(a=3*5,
a*4
)/*表达式值为18,且a=6*//*表达式值为1,且t=2*//*
赋值表达式的值为60,且x=60,a=15*/7、逗号运算符与逗号表达式【例1-17】逗号表达式#include<stdio.h>intmain(){inta=3,b=5,c=7,x,y;y=(x=a+b,++b);printf("x=%d,y=%d\n",x,y);return0;}x=8,y=6程序运行结果:8、其它运算符及其运算(1)sizeof运算符为单目运算符运算对象是变量名或数据类型标识符及数据常量等运算结果为该对象的长度#include<stdio.h>intmain(){inta=5;doublex;printf("%d%d",sizeof(int),sizeof(a));printf("%d%d",sizeof(double),sizeof(x));printf("%d%d\n",sizeof(float),sizeof(char));return0;}448841程序运行结果:8、其它运算符及其运算(2)复合的赋值运算符
复合的赋值运算符,又称为带有运算的赋值运算符,也叫赋值缩写。例如:i=i+j;可表示为i+=j;这里+=是复合赋值运算符。+=加赋值-=减赋值*=乘赋值/=除赋值%=求余赋值&=按位与赋值|=按位或赋值^=按位异或赋值<<=左移位赋值>>=右移位赋值注意:x*=y+8等价于x=x*(y+8),不等价于x=x*y+8。z&=y-x等价于z=z&(y-x),而不等价于z=z&y-x。五、运算符的优先级和结合性
运用C语言运算符进行运算时,需要掌握运算符的优先级和结合性。
优先级:运算符运算的先后顺序。
结合性:运算符运算的方向。六、数据的类型转换C语言表达式中可以将不同类型的数据,按一定的运算规则进行计算,运算中这些数据将会作某种转换,把它们转换成同一类型的数据,然后再进行运算。这种转换的方法包含两种:自动转换和强制转换。1、自动转换
就是系统根据规则自动将两个不同数据类型的运算对象转换成同一数据类型的过程。转换原则:自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象类型转换short,chardoublelongfloatunsignedint高精度低精度
自动转换分为横向转换和纵向转换;横向转换无需任何条件,只要参与运算即会发生转换;如:char→int
纵向转换需要在不同类型之间进行运算时才会发生转换。如:int→double1、自动转换下面我们用前面的例子来说明一下这种转换。unsignedu=1000;doubled=6.55;floatf=4.5;15+u-d+'9'*2/tunsignedunsigneddoubledoubleintintdoubledoubledoubledouble2、强制转换强制转换的一般形式
(类型名)表达式例如:
(int)('b'+3*x)%31/(float)a+6(float)
22/5与(float)
(22/5)
不同错误的类型转换:(int)b=a+5b=int(3*a)注意:强制转换只是中间代换量的提取转换,而不能真正改变某变量的类型.2、强制转换【例1-18】数据的强制类型转换#include<stdio.h>intmain(){floatx=14.5;inti;i=(int)x%4printf("i=%d,x=%f\n",i,x)
;return0;}i=2,x=14.500000程序运行结果:#include<stdio.h>intmain(){floatC,F;F=75;C=5*(F-32)/9;printf("华氏温度F=%f,对应的摄氏温度C=%f\n",F,C);return0;}1.2.3知识扩展:华氏温度与摄氏温度的转换华氏温度F=75.000000,对应的摄氏温度C=23.888889程序运行结果:
你要去国外旅游,当地气温是用华氏计量温度。如果天气预报告知当日气温是75华氏度,请通过程序进行温度的转换,计算并输出对应的摄氏温度。转换关系为:其中C代表摄氏温度,F代表华氏温度。任务3存款的输入与利息的输出存款的输入与利息的输出1.3.1问题情景及其实现#include<stdio.h>#include<math.h>intmain(){doubleIrate=0.03;doubleDmoney=5000,Dinterest;intterm;printf("存款金额为:");scanf("",&Dmoney);printf("存款期限为:");scanf("",&term);Dinterest=Dmoney*pow((1+Irate),term)-Dmoney;printf(“存款金额为的年存款利息是:元\n",Dmoney,term,Dinterest);return0;}
假设XXX银行1年定期存款的利率为3%,,并已知存款期为n年,存款本金为x元,请计算n年后可以得到的本利总和是多少。存款金额为:存款期限为:存款金额为6000.0的4年存款利息是:753.05元程序运行结果:%lf%d%.1lf%d%.2lf60004↙↙C程序数据的输出C程序数据的输入1.3.2相关知识(1)printf函数调用的一般形式为:
printf("格式控制字符串",表达式1,表达式2,……,表达式n);一、C程序数据的输出1、printf()函数
其中“格式控制字符串”用于指定对应表达式值的输出格式。格式控制串可由格式字符串和非格式字符串两种组成。
格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:
非格式字符串在输出时原样显示,在显示中起提示作用。
表达式1,表达式2,……,表达式n中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。一、C程序数据的输出1、printf()函数(2)printf函数中的格式字符串的一般形式为:
%[标志][输出最小宽度][.精度][长度]类型其中方括号[]中的项为可选项类型:类型字符用以表示输出数据的类型,其格式符和意义如表1-12所示。一、C程序数据的输出1、printf()函数(2)printf函数中的格式字符串的一般形式为:
%[标志][输出最小宽度][.精度][长度]类型其中方括号[]中的项为可选项标志:标志字符为-、+、#、空格四种,其意义下表1-13所示:一、C程序数据的输出1、printf()函数(2)printf函数中的格式字符串的一般形式为:
%[标志][输出最小宽度][.精度][长度]类型输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格精度:精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则按规定截去超过的部分。长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。一、C程序数据的输出1、printf()函数【例1-20】实型数据的输出。#include<stdio.h>intmain(){inta=15;floatb=123.1234567;doublec=12345678.1234567;chard='p';printf("a=%d,%5d,%o,%x\n",a,a,a,a);printf("b=%f,%lf,%5.4f,%e\n",b,b,b,b);printf("c=%lf,%f,%8.4lf\n",c,c,c);printf("d=%c,%8c\n",d,d);return0;}a=15,15,17,fb=123.123459,123.123459,123.1235,1.231235e+002c=12345678.123457,12345678.123457,12345678.1235d=p,p程序运行结果:__________5858一、C程序数据的输出1、printf()函数【例1-21】输出函数的运算方向。#include<stdio.h>intmain(){inti=8;printf("%d,%d,%d,%d\n",++i,--i,i++,i--);return0;}#include<stdio.h>intmain(){inti=8;printf("%d,",++i);printf("%d,",--i);printf("%d,",i++);printf("%d,",i--);return0;}8,7,8,89,8,8,9一、C程序数据的输出2、putchar()函数putchar函数调用的一般形式为:
putchar(ch);/*ch是字符型变量或整型变量*/putchar函数的作用是向终端输出一个字符。它只带一个参数,这个参数就是要输出的字符。【例1-22】putchar函数。#include<stdio.h>intmain(){chara,b,c;
a='B';b='O';c='Y';
putchar(a);putchar(b);putchar(c);return0;}BOY程序运行结果:一、C程序数据的输出3、puts()函数puts函数调用的一般形式为:
puts(s);/*其中s为字符串常量、字符数组名或字符串指针*/puts()函数的作用是向标准输出设备(屏幕)写字符串并换行。【例1-23】puts函数。#include<stdio.h>intmain(){puts("Hello,World!");return0;}Hello,World!程序运行结果:二、C程序数据的输入(1)scanf函数调用的一般形式为:
scanf("格式控制字符串",变量1地址,变量2地址,……,变量n地址);1、scanf()函数
其中控制字符串规定数据的输入格式,必须用双引号括起,其内容是由格式说明和非格式字符两部分组成。
格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输入数据的类型、形式、长度等。
非格式字符在输入数据时原样键入,在输入中起提示作用。变量1地址,变量2地址,……,变量n地址由一个或多个变量地址组成,当变量地址有多个时,各变量地址之间用逗号分隔。二、C程序数据的输入1、scanf()函数(2)scanf函数中的格式字符串的一般形式为:%[标志][宽度][长度]类型类型:类型字符用以表示输出数据的类型,其格式符和意义如下表1-14所示:二、C程序数据的输入1、scanf()函数(2)scanf函数中的格式字符串的一般形式为:%[标志][宽度][长度]类型
标志:标志字符为*,其意义下表1-15所示:二、C程序数据的输入1、scanf()函数(2)scanf函数中的格式字符串的一般形式为:%[标志][宽度][长度]类型宽度:用一个整型常量表示,宽度用来限制输入整数或字符串长度,表示输入数据所占的域宽度。长度:长度格式符l,用来输入长整型数据和double型数据。二、C程序数据的输入1、scanf()函数【例1-25】整型数据的输入。#include<stdio.h>intmain(){inta,b;doublec;scanf("%d%*d%2d%lf",&a,&b,&c);printf("a=%d,b=%d,c=%lf\n",a,b,c);return0;}88899007.5a=88,b=90,c=7.500000程序运行结果:↙二、C程序数据的输入2、getchar()函数getchar函数调用的一般形式为:
getchar();getchar函数的作用是从键盘输入的字符中获取单个字符。它没有参数。【例1-26】getchar函数。#include<stdio.h>intmain(){chara;
a=getchar();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防踩踏安全教育(教学设计)-2023-2024学年初三下学期生涯规划主题班会
- 2026吉林晨鸣纸业有限责任公司招聘备考题库带答案详解(突破训练)
- 2026福建三明尤溪县事业单位招聘工作人员61人备考题库含答案详解(培优b卷)
- 2026广西东盟经济技术开发区(南宁华侨投资区)里建社区卫生服务中心招聘9人备考题库及参考答案详解(黄金题型)
- 2026中国邮政集团有限公司江西省分公司社会招聘备考题库附参考答案详解(突破训练)
- 2026春季广西百色市西林县国控林业投资有限公司招聘编外人员4人备考题库附答案详解(夺分金卷)
- 2026江苏南京林业大学教学科研岗招聘211人备考题库带答案详解(满分必刷)
- 2026天津市肿瘤医院秦皇岛医院选聘31人备考题库(河北)含答案详解(培优b卷)
- 本章复习与测试教学设计高中物理鲁科版2019选择性必修 第一册-鲁科版2019
- 人教版九年级全册第3节 能量的转化和守恒教案及反思
- 军人二次召回通知书
- 曲臂车安全施工方案
- 《制氢现场氢安全管理规范》
- 防溺水事故应急预案
- 室分业务发展操作指导手册(试行)
- 水泥厂安全事故培训内容课件
- 上市公司再融资困境深度剖析与突围路径探寻
- 乌兹别克斯坦国家介绍
- 第3课 中华文明的起源-2025-2026学年七年级历史上册(统编版2024)
- 2025高考历史全国I卷真题试卷(含答案)
- DBJT15-213-2021 城市桥梁隧道结构安全保护技术规范
评论
0/150
提交评论