版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章C语言基础1进位计数制
十进制
有十个不同的记数符号:0,1…9。逢十进一
二进制数制
只有两个记数符号,0和1。逢二进一。2
八进制
有8个不同的记数符号:0,1,2,3,4,5,6,7;逢8进1
十六进制
有16个不同的记数符号:0,1,2…9,A,B,C,D,E,F;逢16进1。
不同记数制之间的转换
可用计算器完成3数制间的相互转换1、十进制--------二进制整数部分:除2取余小数部分:乘2取整2、二进制--------八进制3位1位3、二进制--------十六进制4位1位(1011)2=1×23+0×22+1×21+1×20=11(125.3)8=1×82+2×81+5×80+3×8-1=85.3754十进二进八进16进1十进二进八进16进91000119100111200102210101012A300113311101113B401004412110014C501015513110115D601106614111016E701117715111117F81000108161000020105数值型数据的编码
机器数
在计算机中,约定第一位为符号位,0表示正,1表示负。这种在计算机中连同符号一起数码化的数称为机器数数值是以补码(complement)表示的
6
原码、反码和补码
转换规则原码反码补码+101011001010110010101100101011-1010111010101111010100110101017非数值型数据的编码
ASCII码(AmericanStandardCodeforInformationInterchange)
英文字符采用ASCII码进行编码。
ASCII码采用七位二进制位编码,共可表示128个字符。A:01000001(65)a:01100001(97)89C的数据类型整型int字符型char基本类型单精度实型float实型(浮点型)数组类型结构类型struct联合类型union枚举类型enum双精度实型double构造类型指针类型空类型(无值类型)void10常量
常量,程序运行过程中其值不变的量
类型
整型常量:10进制常量:如1238进制常量(数前加0):如012316进制常量(数前加0X):如0x123长整型(数后加l或L),如123456L无符号整型(数后加u或U):如123u11
实型常量:
小数记数法如:1999.35,-2001.98
指数记数法如:1.99935e3
错误如:3e2.5,e8
有float,double,longdouble三种类型
后面加f表浮点型:如12.3f
后面加l表长双精度:如12.345L
不加则默认为双精度:如123.4512例1main(){inta,b,c;a=10;b=010;c=0x10;printf("%d,%d,%d\n",a,b,c);}运行结果:10,8,16%d表示以十进制整型输出13例2运行结果:main()1999.35,1.99935e3{floatf1;f1=1999.35;printf("%f,%e\n",f1,f1);}实数只用十进制形式表示。%f表示以小数形式输出%e表示以指数形式输出14
字符常量:用单引号括起来的一个字符或转义字符。例:'A','o','1','a','\n','\0'等转义字符含义\n换行\t横向跳格(到下一个输出区)\\反斜杠\'输出单引号\ddd1--3位8进制所代表的字符\xhh1--2位16进制所代表的字符15例:main(){printf("%c,%c,%c\n",'A','\101','\x41');}运行结果:A,A,A字符数据与整型数据类似,但字符数据只占一个字节,只能存放0~255之间的整数。%c表示以单个字符输出。16
字符串常量:用双引号括起来的一串字符序列。例:"CHINA","BBI","Iamateacher."等。而"A"与'A'在C语言中是不同的,前者是字符串常量,后者是字符常量。'A'"A"0100000101000001\0'\0„是字符串结束标记,即空字符。输入时系统自动加上,输出时不输出17
每一个字符串常量的结尾都带一个字符’\0‟,系统据此判断字符串是否结束。C规定以字符’\0‟作为字符串结束标志。
字符串常量‛CHINA”,实际上在内存中是:CHINA\0它占内存单元不是5个字符,而是6个字符,最后一个字符为’\0‟。但在输出时不输出’\0‟。
可以输出一个字符串,如printf(“Howdoyoudo.”);18符号常量#definePI3.1415926main(){floatr,s;scanf("%f",&r);s=2*PI*r;printf("s=%f\n",s);}符号常量一般用大写,一旦定义后不可再赋其他值。若程序里多处出现,如需修改此值,仅需在预处理命令#define中作一次修改。19变量
程序执行过程中其值可以变化的量
变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值。
变量名实际上是以一个名字对应一个地址,程序编译时系统给每一个变量名分配相应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从中读取数据。20变量的起名规则大小写字母有区别如:a1与A1不同不可用关键字如:int,for,if等不可出现空格如:stu1,a1等见名识意如:sum,n1,c1,s1等长度不要超过8个字符21变量的定义与初始化
在C中使用变量前一定要先定义,编译系统对不同类型变量分配不同数量的内存单元以存放其值。如:intn1,n2;n1=n2=10;
在定义变量的同时可以初始化变量,即为变量赋初值,但不允许连续赋值。如:intn1=10,n2=10;22变量类型定义字节范围整型inta,b;2-32768---32767短整型shortx,y;2-32768--32767无符号整型unsignedinta;20--65535长整型longl;4-231~231-1单精度实型floatf;4-3.4e38~3.4e38双精度实型doubled;8-1.7e308~1.7e308字符型charc1,c2;10--25523
整型变量的定义与使用#include<stdio.h>voidmain(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}不同种类的整型数据可以进行算术运算24
整型数据的溢出#include<stdio.h>voidmain(){inta,b;a=32767;b=a+1;printf(“%d,%d\n”,a,b);}数值是以补码表示的。一个整型变量只能容纳-32768~32767范围内的数,如果超出这个范围就会发生‚溢出‛。25浮点型变量浮点型数据在内存中的存放形式一个浮点型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式(a*2b)存储的。系统把一个浮点型数据分成小数部分a和指数部分b,分别存放。26
浮点型数据的舍入误差#include<stdio.h>voidmain(){floata,b;a=123456.789e5;b=a+20;printf(“%f\n”,b);}
单精度浮点型变量只能保证7位有效数字,而双精度浮点型变量能保证15位有效数字。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会‚丢失‛较小的数27字符变量
字符型变量用来存放字符常量,只能放一个字符。一个字符变量在内存中占一个字节。
将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符对应的ASCII代码放到存储单元中。
字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。
不能把一个字符串常量赋给一个字符变量。28
向字符变量赋以整数。#include<stdio.h>voidmain(){charc1,c2;c1=97;c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);}
c1=97;c2=98;相当于以下两个赋值语句:因为’a‟和’b‟的ASCII码为97和98c1=„a‟;c2=„b‟;293、二进制--------十六进制A:01000001(65)不能把一个字符串常量赋给一个字符变量。a,b,c,d均是整型变量,a=2,b=-3,c=7,逗号运算符优先级最低,结合性是自用于取内容(*)和取地址(&)二种运算。10进制常量:如123地址,程序编译时系统给每一个变量ASCII码(AmericanStandardCodefori++,i--(在使用i之后,使i的值加a=1,b=2,c=3;个范围就会发生‚溢出‛。printf(“%d%d\n”,c1,c2);单精度浮点型变量只能保证7位有效数字,{inta,b,c;
大小写字母的转换#include<stdio.h>voidmain(){charc1,c2;c1=‟a‟;c2=‟b‟;c1=c1-32;c2=c2-32;printf(“%c%c”,c1,c2);}
小写字母的ASCII码比大写字母大32。30运算符及其表达式算术运算符及其表达式
算术运算符:+,-,*,/,%,++,--+,-,*,/:若两个操作数均为整型,其结果为整型;若有一个操作数为实型,则其结果为双精度实型%(求余,模运算):两个操作数必须为整型,其结果为余数31
算术表达式:用算术运算符将可操作对象连接起来的算式.例:a,100,a+100,a+3/2.0等均是算术表达式.
优先级高低*/%+-
结合性从左到右。即表达式中有相同优先级运算符时,要从左往右运算32a,b,c,d均是整型变量,a=2,b=-3,c=7,d=-19;试分别写出下列各表达式的值.算术表达式等价表达式表达式的值c/b/a(c/b)/a-1d/b%a(d/b)%a0-a*d(-a)*d38a%-b*c(a%(-b))*c14a/c+-20/-a(a/c)+((-20)/(-a))10-d%c-b/a*5+5((-d)%c)-((b/a)*5)+5157-a%(3+b)7-(a%(3+b))出错(分母为0)33例:main(){inta=1;charc1='A';floatf=100;doubled=200.0;longl=40000;printf("%f\n",a+c1+f+d);printf("%ld\n",a+l);printf("%d\n",a+c1);printf("%f\n",c1+d);}34main(){charc1,c2,c3;c1='A';c2='B';c3='C';printf("%c,%c,%c\n",c1,c2,c3);printf("%c,%c,%c\n",c1+1,c2+1,c3+1);printf("%d,%d,%d\n",c1,c2,c3);}运行结果:字符型与整型A,B,CB,C,D65,66,67可以作算术运算35main(){inta1,a2,a3;a1=97;a2=98;a3=99;printf("%c,%c,%c\n",a1,a2,a3);printf("%c,%c,%c\n",a1+1,a2+1,a3+1);}运行结果:a,b,c为‘a‟,„b‟,‟c‟的a1,a2,a3分别b,c,dASCII码整型值可按%c格式输出一个字符36自增、自减运算符使变量的值增1或减1。
++i,--i(在使用i之前,先使i的值加1或减1)
i++,i--(在使用i之后,使i的值加1或减1)
自增、自减运算符只能用于变量,而不能用于常量或表达式,
结合方向是‚自右至左‛。37i++与++i的区别:++i是先执行i=i+1后,再使用i的值;i++是先使用i的值后,再执行i=i+1。例如:①i=3;j=++i;i的值先变成4,再赋给j②i=3;j=i++;先将i的值3赋给j,然后i变为438自增(减)运算符常用于循环语句中使循环变量自动加1。C语言中有的运算符为一个字符,有的运算符由两个字符组成,为避免误解,最好采取大家都能理解的写法。:例如不要写成(i++)+j或i+(++j)的形式i+++j的形式,而应写成39例如:i的初值为3,则下面的函数调用:printf(”%d,%d”,i,i++);在有的系统中,从左至右求值,输出‛3,3”。在多数系统中对函数参数的求值顺序是自右而左,输出的是‛4,3”。最好改写成j=i++;printf("%d,%d“,j,i);40main(){intx=100;printf("%d,%d,%d,%d\n",x++,x,--x,x);printf("%d\n",x);}运行结果:99,99,99,10010041main(){inta,b,c;a=b=c=0;a=++b+++c;a=b+++c++;b,c先相加,后均增1a=++b+c++;a=b--+--c;printf("%d,%d,%d\n",a,b,c);}b,c均先增1,后相加b先增1和c相加,后c再增1c先减1和b相加,后b减1运行结果:5,2,242
不同类型数据混合运算不同类型数据混合运算时,系统自动按以下规律转换(即字节数少的类型转换成字节数多的类型)doublefloatlong必unsigned转intchar,short43
在不同类型数据的混合运算中,由系统自动实现转换,由少字节类型向多字节类型转换。
不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。44强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型。一般形式:(类型名)(表达式)例如:(double)a将a转换成double类型(int)(x+y)将x+y的值转换成整型(float)(5%3)将5%3的值转换成float型45main(){inta,b;floatc;scanf("%d,%d,%f",&a,&b,&c);printf("a+b=%d\n",a+b);printf("a-b=%d\n",a-b);printf("a/c=%f\n",a/c);printf("a%%c=%d\n",a%(int)c);}强制类型转换运算符要输出‚%”号,(类型名)(表达式)用于将一个表达式转换成所需类型应使用‚%%”46
下列程序执行后的输出结果是:voidmain(){intx=„f‟;printf(“%c\n”,(„A‟+(x-‟a‟+1)));}
inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)/4的值是多少?47关系运算符用于比较运算。包括:
大于(>)小于(<)等于(==)
大于等于(>=)小于等于(<=)
不等于(!=)关系表达式由关系运算符连接起来的表达式。如:x>5,x==1,x!=0等其值为0或1,0表示假,1表示真48
逻辑运算符用于逻辑运算。包括:
与(&&)或(||)非(!)
逻辑表达式由逻辑运算符连接起来的表达式。如:x>5&&x<10,x==1||x<0等其值为0或1,0表示假,1表示真注意:在C语言中任何非0值均表示真,只有0值表示假49
||与&&的特殊性质
a||b,如果a=true,则表达式b不运算
a&&b,如果a=false,则表达式b不运算
设intm(0),n(2);则执行(m=3+7)||(n=0+7)后m,n的值?
设整型变量m,n,a,b,c,d均为1,执行(m=a>b)&&(n=a>b)后m,n的值?50
位操作运算符参与运算的量,按二进制位进行运算。包括:
位与(&)
位或(|)
位非(~)
位异或(^)
左移(<<)
右移(>>)51赋值运算符
用于赋值运算,分为:
简单赋值(=)
复合算术赋值(+=,-=,*=,/=,%=)
复合位运算赋值(&=,|=,^=,>>=,<<=)结合性均是从右到左52在赋值符‚=‛之前加上其他运算符,可以构成复合的运算符。例如:
a+=3等价于a=a+3
x*=y+8等价于x=x*(y+8)
x%=3等价于x=x%3凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。53运算符表达式举例=+=,-=,*=,/=,%=等<变量名>=<表达式><变量名><复合赋值运算符><表达式>a=100x+=2如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换,右边表达式的值要适合左边变量。54赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为‚赋值表达式‛。一般形式为:<变量><赋值运算符><表达式>例如:“a=5”是一个赋值表达式注意:任何一个表达式都应该有一个值,赋值表达式的值就是赋值后左边变量的值。55左值(lvalue):赋值运算符左侧的标识符
变量可以作为左值
表达式不能作为左值(如a+b=10是错误的)
常变量也不能作为左值(如10=a是错误的)右值(rvalue):出现在赋值运算符右侧的表达式56赋值表达式中的‚表达式‛,又可以是一个赋值表达式。例如:a=(b=5)分析:括弧内的b=5是一个赋值表达式,它的值等于5。执行表达式a=(b=5)相当于执行b=5和a=b两个赋值表达式。赋值运算符按照‚自右而左‛的结合顺序,因此,(b=5)外面的括弧可以不要,即a=(b=5)和a=b=5等价.57将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。如:printf(“%d”,a=b);分析:如果b的值为3,则输出a的值(也就是表达式a=b的值)为3。在这一个语句中完成了赋值和输出双重功能。58main(){inta,b,c,d,e;a=b=c=d=30;e=32;printf("a+3=%d\n",a+=3);printf("b-3=%d\n",b-=3);printf("c*3=%d\n",c*=3);printf("d/3=%d\n",d/=3);printf("e%%3=%d\n",e%=3);}59main(){intx=2;x+=x-=x*x;printf("x=%d\n",x);}赋值和复合赋值的运行结果:结合性是自右至左x=-460
条件运算符(?:)这是一个三目运算符,用于条件求值。如:c=(a>b?a:b);61
逗号运算符
逗号运算符优先级最低,结合性是自左至右
逗号表达式
逗号表达式格式:<表达式1>,<表达式2>,…<表达式n>计算逗号表达式值是按自左至右的顺序,先计算<表达式1>的值,再计算<表达式2>的值,...最后计算<表达式n>的值,而整个逗号表达式的值是最后一个<表达式n>的值.62例:逗号表达式a=3*5,a*4先求解a=3*5。a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如:先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。(a=3*5,a*4),a+563逗号运算符优先级别最低例:x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年人教版七年级英语上册 Unit 3 My School 单元能力综合试题
- 莆田六年级区考试卷子及答案
- 兰州单招考试试题及答案
- 光伏板清洗安全培训课件
- 慢性非传染性疾病基本概念与其流行态势
- 光伏分布式培训
- 2024人教版八年级地理上册第五章《建设美丽中国》每课时同步高效导学案汇编(含两个导学案)
- 2024-2025学年人教版八年级物理上册同步讲义:第四章《光现象》单元练习(学生版+解析版)
- 《屈原列传》:概括文意-文言文简答题(讲义)原卷版
- 企财险基础培训课件
- 2025年及未来5年中国高功率连续光纤激光器行业发展监测及发展趋势预测报告
- 2025年常见非标机械设计师面试题及答案
- 员工冬季出行安全
- 单侧双通道脊柱内镜技术
- GB/T 14748-2025儿童呵护用品安全儿童推车
- 《粤港澳大湾区城际铁路建设工程资料管理规范》
- 期末复习知识清单 2024-2025学年统编版语文六年级上册
- 2025年中国碳氢清洗剂市场调查研究报告
- 2023年马原期末复习知识点总结超详细版
- 海水墙面防水施工方案设计
- 退化森林修复技术-洞察与解读
评论
0/150
提交评论