计算机C++ C语言编程结构化程序的开发_第1页
计算机C++ C语言编程结构化程序的开发_第2页
计算机C++ C语言编程结构化程序的开发_第3页
计算机C++ C语言编程结构化程序的开发_第4页
计算机C++ C语言编程结构化程序的开发_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第三章结构化程序的开发1提纲3.1一些常用的转义序列3.2再论C语言中的数据类型3.3混合运算时各种数据类型之间的转换3.4格式化输出3.5赋值运算符3.6自增和自减运算符3.7条件运算符和逗号运算符3.8算术运算符的优先级和结合性√√√2转义序列含义描述\n\t\r\a\b\\\"换行。将光标定位到下一行的开始位置。水平制表符。把光标跳到tab键的下一个输出区。回车。把光标定位在当前行(而不是下一行)的开始位置。响铃。使系统铃发声。光标回退一个字符。反斜扛。打印一个反斜扛字符。双引号。打印一个双引号字符。3.1一些常用的转义序列转义字符:反斜杠‘\’;转义序列:反斜杠后面加上特定的一个字符;%%:打印一个百分号printf("比例是%%%f",percentage);更多转义序列见《C程序设计教程》299页3main(){printf("123456781234567812345678\n");printf("1\t12\t123\tHello!\n");/*\t的使用*/printf("\tHello!\n");printf("1234567890");printf("\b\bHello!\n");/*\b的使用*/printf("1234\r\"\\%%\n");/*打印''、\和%*/printf(“\a”);/*使系统发出一声*/system("pause");return0;}转义字符举例1234567812345678123456781

12

123

Hello!

Hello!12345678Hello!"\%4请按任意键继续...4提纲3.1一些常用的转移序列3.2再论C语言中的数据类型掌握:数据类型的种类、取值范围和格式说明符3.3混合运算时各种数据类型之间的转换3.4格式化输出3.5赋值运算符3.6自增和自减运算符3.7条件运算符和逗号运算符3.8算术运算符的优先级和结合性√√√5C语言中只有以下几种基本数据类型:char:字符型,可以存放字符集中的一个字符int:整型float:单精度浮点型double:双精度浮点型此外,还有用于限定这些基本类型的类型限定符:short(限定int)、long(限定int和double)signed和unsigned(限定char和任何整数类型)3.2C语言中的数据类型63.2C语言中的数据类型一、short、long限定整数类型示例:shortintage;

longintcounter;longlongintpopulation;shortint、longint、longlongint可分别简写为short,long和

longlong。如:shortage;int数据一般为16位或32位,long数据一般为32位,longlong为64位。各个编译程序可以根据硬件情况自由选择int、short、long的长度,唯一限制是short和int数据至少要有16位,而long数据至少要有32位;short数据长度≦int数据长度≦

long数据长度≦

longlong数据长度。73.2C语言中的数据类型三、signed、unsigned限定char类型和任何整数类型

signedchar、unsignedchar

signedshort、unsignedshort

signedint、unsignedint

signedlong、unsignedlong

signedlonglong、unsignedlonglong

经unsigned限定的类型取值范围必须是正的或者为0。一般省略signed,如signedchar通常写成char。二、long可限定double类型

longdouble8所以,C语言支持2种不同的字符类型: signedchar、unsignedchar转换说明符:signedchar:%c unsignedchar:%u取值范围: signedchar:-128~127(1字节) unsignedchar:0~255(1字节)

3.2C语言中的两种字符类型9所以,C语言支持8种不同的整形: short、 unsignedshort int、 unsignedint long、 unsignedlonglonglong、unsignedlonglong转换说明符:

short:%hd, unsignedshort:%hu int:%d, unsignedint:%u long:%ld, unsignedlong:%lulonglong:%lld

unsignedlonglong:%llu

3.2C语言中的八种整形类型10取值范围和具体硬件有关。在short是16位、int和long是32位、longlong是64位的机器上数值范围如下:signedshort:-32768~32767(16位)unsignedshort:0~65535(16位)signedint:-2147483648~2147483647(32位)unsignedint:0~4294967295(32位)signedlong:-2147483648~2147483647(32位)unsignedlong:0~4294967295(32位)signedlonglong:

(64位)-92233728~92233727unsignedlonglong:(64位)0~184467445

3.2C语言中的八种整形类型11所以,C语言支持支持三种不同长度的浮点数据类型:float、double和longdouble。其中float一般占4字节(32位)、提供7位有效数字;double一般占8字节(64位)、提供15~16位有效数字;longdouble占12字节(96位)。转换说明符:float:%fdouble:%lflongdouble:%lf

3.2C语言中的三种浮点类型12

3.2C语言中的三种浮点类型取值范围: float:-3.4*1038~3.4*1038

double:-1.7*10308~1.7*10308

longdouble:-1.2*104932~1.2*10493213提纲3.1一些常用的转移序列3.2再论C语言中的数据类型3.3混合运算时各种数据类型之间的转换3.4格式化输出3.5赋值运算符3.6自增和自减运算符3.7条件运算符和逗号运算符3.8算术运算符的优先级和结合性√√√143.3.1隐式转换C编译器只知道计算操作数的数据类型相同的表达式。如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。类型转换分成两种:隐式转换和显式转换。隐式转换的基本原则是将低类型数据转换成高类型数据(数据类型提升)。各种类型的高低顺序如下:15高低数据类型scanf函数的转换说明符printf函数的转换说明符longdoubledoublefloatunsignedlonglongunsignedintintunsignedshortshortunsignedcharchar%lf%lf%f%lu%ld%u%d%hu或%u%hd%u%c%lf%lf%f%lu%ld%u%d%hu或%u%hd%u%c数据类型提升的顺序16 longdouble floatdouble unsignedlong

long unsignedintunsignedchar、unsignedshort

intchar、short转换原则:1)所有char及shortint型变量转为int型,所有float转换为double。2)操作数中较低类型数据转换成较高类型数据后再进行运算。注意:箭头方向只表示数据类型由低向高转换,int型数据和double型数据混合运算时,int型直接转换为double型,而不是转换成unsignedint型,再转换成long型、再转换成unsignedlongint型,最后转换成double型。17类型转换实例charch=‘Q’;inti=2;floatf=12.34;doubled=15.4;result=(ch/i)+(f*d)–(f+i);18赋值中的类型转换在一个赋值语句中,如果赋值运算符左侧变量的类型和右侧表达式的类型不一致,则赋值时将进行自动类型转换,将右侧表达式的值转换成左侧变量的类型。intn;charch;floatf;doubled;则执行语句“ch=n;”后,整型变量的高位字节将被切掉;执行语句“n=f;”后,n只接收f的整数部分,相当于取整运算。193.3.2显式转换total/counter的运算结果是整型数;为了得到浮点值,使用类型转换运算符,形式为:

(类型说明符)表达式或者(类型说明符)(表达式),用于将表达式的运算结果类型转换为类型说明符指定的数据类型;类型转换运算(float)建立了操作数total的浮点值拷贝;存储在total值的值仍然是一个整型值;思考:下面语句的效果average=(float)(total/counter);使用类型转换运算符将高类型数据强制转换为低类型数据时,会引起精度损失(例如浮点转换成整型)或改变数据的值(例如long转换成short)。inttotal=1230,counter=35;floataverage;average=(float)total/counter;显式转换20提纲3.1一些常用的转移序列3.2再论C语言中的数据类型3.3混合运算时各种数据类型之间的转换3.4格式化输出3.5赋值运算符3.6自增和自减运算符3.7条件运算符和逗号运算符3.8算术运算符的优先级和结合性√√√详见《C程序设计教程》第9章,自学211.类型转换字符d──以带符号的十进制整数形式输出。可以指定输出场宽(总位数)和对齐方式(左对齐还是右对齐)。%5d:场宽为5,右对齐,左补空格。%-5d:场宽为5,左对齐,右补空格。若实际位数超出指定位数,则按实际位数输出假设有变量定义如下: intnum1=123; longnum2=123456需要程序运行结果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456

3.4格式指示符22

3.4格式指示符则对应的程序为:#include<stdio.h>#include<stdlib.h>main(){ intnum1=123; longnum2=123456;

printf("num1=%d,num1=%5d,num1=%-5d,num1=%d\n",num1,num1,num1,num1);

printf("num2=%ld,num2=%8ld,num2=%ld\n",num2,num2, num2);system(“pause”);return0;}

23

2.类型转换字符f──以小数形式、按系统默认的宽度,输出单精度和双精度实数。%f:默认方式下输出小数点后6位;如:123.556000。%12f:总共占据12位(包括小数点),其中保留小数点后面6位。不足位左补零。若实际长度超出指定场宽,按实际输出。%12.2f:总共占据12位(包括小数点),其中保留小数点后面2位。不足位左补零,若超出则按实际输出。%e:总共占据13位。如:1.235560e+002,分尾数(1.235560)和指数(+002)两部分。其中尾数占据8位(包括小数点),最高位不为0,小数点后面保留6位;指数占据4位,1位是符号位。

%12.2e:共占12位(包括小数点和e),其中尾数保留小数点后2位。指定输出场宽、对齐方式、小数点后位数24main(){floatf=123.556;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("%e,%12e,%12.2e,%-12.2e,%.2e\n",f,f,f,f,f);printf("d1=%lf\n",d1);//输出为d1=1111111111111.111100printf("d2=%lf\n",d2);//输出为d2=2222222222222.222200printf("d1+d2=%f\n",d1+d2);printf("d1+d2=%e\n",d1+d2);system("pause");}

2.类型转换字符f──以小数形式、按系统默认的宽度,输出单精度和双精度实数。25程序运行结果如下:123.556000,□□123.556000,□□□□□□123.56,123.56□□□□□□,123.561.235560e+002,1.235560e+002,□□□1.24e+002,1.24e+002□□□,1.24e+002d1=1111111111111.111100d2=2222222222222.222200d1+d2=3333333333333.333000 d1+d2=3.333333e+01226main(){charc='A';inti=65;printf("c=%c,%5c,%d\n",c,c,c);printf("i=%d,%c",i,i);}程序运行结果如下:

c=A,□□□□A,65i=65,A

3.类型转换字符c──输出一个字符在C语言中,整数可以用字符形式输出,字符数据也可以用整数形式输出。将整数用字符形式输出时,系统首先求该数与256的余数,然后将余数作为ASCII码,转换成相应的字符输出。假设i的值为65+256,则用%c输出的是‘A’27提纲3.1一些常用的转移序列3.2再论C语言中的数据类型3.3混合运算时各种数据类型之间的转换3.4格式化输出3.5赋值运算符3.6自增和自减运算符3.7条件运算符和逗号运算符3.8算术运算符的优先级和结合性√√√283.5赋值运算符=+=、-=、*=、/=和%=c+=3等价于c=c+3;i/=(j-1)等价于i=i/(j-1);变量=变量运算符表达式可写成:

变量运算符=表达式29提纲3.1一些常用的转移序列3.2再论C语言中的数据类型3.3混合运算时各种数据类型之间的转换3.4格式化输出3.5赋值运算符3.6自增和自减运算符3.7条件运算符和逗号运算符3.8算术运算符的优先级和结合性√√√303.6自加和自减运算符运算符表达式范例功能描述++++----++aa++--bb--先将a加1,然后把a的新值用在出现变量a的表达式中在出现变量a的表达式中使用a的当前值,然后将a加1先将b减1,然后把b的新值用在出现变量b的表达式中在出现变量b的表达式中使用b的当前值,然后将b减1++a:前置自增运算符--a:前置自减运算符a++:后置自增运算符a--:后置自减运算符编译带有自加(自减)运算符的表达式(如i++)比编译等价的展开的表达式(i=i+1)快,因为第一个表达式中的i只分析了一次,而第二个表达式中的i被分析了两次。313.6自加和自减运算符

如:以下两条语句效果相同 i++;++i;

设i当前值为5,则他以下两条语句效果不同 if(i++>5)…//先判断i>5,然后i值加1if(++i>5)…//先将i值加1,然后判断i>5

当自增或自减变量值的运算本身就构成了一条语句时,把自增或自减运算符放在变量前和放在变量后的效果是一样的。只有当变量出现在大型表达式的上下文中时,前置和后置自增或自减运算符才有区别。323.6自加和自减运算符main(){inti; i=5; if(i++>5) printf("i=%d,i++>5istrue\n",i); printf("i=%d\n",i);

i=5; if(++i>5) printf("i=%d,++i>5istrue\n",i); printf("i=%d\n",i);

system("pause"); }i=6i=6,++i>5istruei=6请按任意键继续...判断i>5,然后i值加1i值先加1,然后判断i>5333.6自加和自减运算符main(){inti; i=5; if(i++>4) printf("i=%d,i++>4istrue\n",i); printf("i=%d\n",i);

i=5; if(++i>5) printf("i=%d,++i>5istrue\n",i); printf("i=%d\n",i);

system("pause"); }

i=6,i++>4istruei=6i=6,++i>5istruei=6请按任意键继续...将5改成4343.6自加和自减运算符测试:y=2;n=3;nextnum=(++y+n++)*6;num=y+n;求nextnum和num的值?nextnum值为36,num值为735

自增和自减运算符的操作数只能是一个简单的变量名,而不能是常量或者表达式。5++,++(i+1)都是错误的写法!

ANSI没有规定运算符操作数的计算顺序,因此如果在一条语句中将特定变量自增或自减不止一次时,程序员应该尽量避免使用自增或自减运算符。如:(i++)+(i++)+(i++)。3.6自加和自减运算符36提纲3.1一些常用的转移序列3.2再论C语言中的数据类型3.3混合运算时各种数据类型之间的转换3.4格式化输出3.5赋值运算符3.6自增和自减运算符3.7条件运算符和逗号运算符3.8算术运算符的优先级和结合性√√√37条件运算符?:(C语言唯一的三目运算符)条件表达式含有条件运算符的表达式

执行过程

先求表达式1的值,若值为非0(为真),则计算表达式2的值作为条件表达式的值;若值为0(为假),则计算表达式3的值作为条件表达式的值。

ch=((ch>=‘A’&&ch<=‘Z’)?(ch+32):ch);if(ch>='A'&&ch<='Z')?ch=ch+32;表达式1?表达式2:表达式33.7条件运算符383.7逗号运算符逗号运算符,用于把几个表达式串在一起。逗号表达式含有逗号运算符的表达式执行过程逗号表达式中最右边那个表达式的值作为逗号表达式的值。表达式1,表达式2,…,表达式ny=10;x=(y=y-5,30/y);//运算后y的值为5,x的值为6。//逗号表达式优先级比赋值表达式低,所以必须加括号39提纲3.1一些常用的转移序列3.2再论C语言中的数据类型3.3混合运算时各种数据类型之间的转换3.4格式化输出3.5赋值运算符3.6自增和自减运算符3.7条件运算符和逗号运算符3.8运算符的优先级和结合性√√√40main(){inta=1,b,c;printf(“-a++=%d\n”,-a++);

a=b=c=3;printf(“a=%d,b=%d,c=%d\n”,a,b,c);a+=b+=3;printf("a=%d,b=%d\n",a,b);system(“pause”);return0;}请考虑以下程序的输出:要想正确理解表达式,就需要知道运算符优先级和结合性3.8目前学过的运算符优先级和结合性是先对b赋值还是先对a赋值?这么写可以么?413.8目前学过的运算符优先级和结合性运算符优先级:

taxRate=income>4000&&residency<5?3.5:2.0高优先级的运算符先运算。关系运算符高于逻辑运算符高于条件运算符高于赋值运算符先计算出income>4000和residency<5各自的值,然后求出income>4000&&residency<5的值,接着求出条件表达式的值,最后进行赋值运算。42高低单目运算符高于

算术运算符高于关系运算符高于逻辑运算符 高于条件运算符

温馨提示

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

评论

0/150

提交评论