版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章基本IO和基本运算哈尔滨工业大学2.1认识C语言程序从HelloWorld开始【例2.1】向屏幕输出"Helloworld!"分两行输出“Helloworld!”呢?#include<stdio.h>intmain(void){printf("Helloworld\n");
return0;}以#开头,编译预处理指令EveryCprogrammusthaveamainfunctionTheexecutionofCprogramstartsfrommain()function头文件2.2变量及其数据类型常量(Constant)在程序中不能改变其值的量变量(Variable)其值在程序执行过程中是可以改变的2.2.1变量的类型和变量的定义(1)声明变量的同时为变量赋值(Assignment)
——变量的初始化(Initialize)未被初始化的变量的值会是什么?其值为随机数(乱码)
变量的声明(VariableDeclaration)
类型关键字变量名;2.2.1变量的类型和变量的定义使用变量的基本原则变量必须先声明,后使用一条声明语句可声明若干个同类型的变量inta,b,c;声明的顺序无关紧要占用内存空间的大小数据的存储形式合法的表数范围可参与的运算种类2.2.2变量的类型决定了什么?(1)不同数据类型可参与的运算不同整型加、减、乘、除、求余实型加、减、乘、除字符型加、减(整数)对ASCII码值的运算指针类型加、减(整数)和比较运算(2)不同类型数据占用的内存大小不同如何计算变量或类型占内存的大小计算变量占内存空间的大小用sizeof运算符一元运算符用sizeof运算符计算变量占内存空间的大小的好处增加程序的可移植性编译时执行的运算符,不会导致额外的运行时间开销语法形式运算结果sizeof(类型)类型占用的内存字节数
sizeof(变量或表达式)变量或表达式所属类型占的内存字节数整型数一个多字节的数据是如何存放到存储单元中的呢?小端次序便于计算机从低位字节向高位字节运算大端次序与人们从左到右的书写顺序相同,便于处理字符串(3)不同类型数据的存储形式不同高位字节低位字节……低位字节高位字节小端次序(Little-endian)……高位字节低位字节大端次序(Big-endian)如何存储实型数呢?关键:确定小数点的位置问题:如何表示实型数?小数形式指数形式——科学计数法(3)不同类型数据的存储形式不同整数部分小数部分定点数(FixedPoint)小数点的位置固定定点整数定点小数定点数定点小数(纯小数)——小数点位于符号位和最高数值位之间定点整数——小数点位于数值位的最低位
(3)不同类型数据的存储形式不同...符号位固定小数点数值部分...符号位固定小数点数值部分问题:如何表示实型数?小数形式指数形式——科学计数法(3)不同类型数据的存储形式不同整数部分小数部分指数部分小数部分定点数(FixedPoint)小数点的位置固定浮点数(Floating-Point)小数点的位置不固定浮点数实现小数点位置可浮动的主要原因将实数拆分成了阶码(Exponent)和尾数(Mantissa)分别存储对于同样的尾数,阶码的值越大,则浮点数所表示的数值的绝对值就越大(3)不同类型数据的存储形式不同阶码E(指数部分)尾数M(小数部分)N=rE
M
r为基数通常取2决定实数的表数精度决定实数的表数范围同样是4个字节(32位)定点数表数范围受其二进制位数的限制——值域都是有限的在计算机中通常是用定点数来表示整数和纯小数用浮点数表示既有整数部分、又有小数部分的实数(3)不同类型数据的存储形式不同定点数-231~231-1单精度浮点数-3.402823466×1038~3.402823466×1038字符型数据(英文字母、数字、控制字符)以二进制编码方式存储,一个字节保存一个字符字符编码方式取决于计算机系统所使用的字符集ASCII(美国标准信息交换码)字符集每个字符有一个编码值(查ASCII码表)字符常数就是一个普通整数(3)不同类型数据的存储形式不同01001000‘H’72(4)不同数据类型的表数范围不同(2)不同数据类型的表数范围不同以2字节(16位)短整型为例有符号整数的最高位是符号位,使其数据位比无符号整数的数据位少了1位2.2.3标识符的命名规则(1)标识符由英文字母、数字和下画线组成,且必须以英文字母或下画线开头。(2)不允许使用关键字作为标识符,同时标识符也不应与系统预定义的库函数重名。(3)C语言的标识符可以是任意长度。一般也会有最大长度(与编译器相关)限制。(4)标识符应直观、易于拼读、易于记忆,即做到“见名知意”,最好使用英文单词及其组合,切忌使用汉语拼音。2.2.3标识符的命名规则(5)标识符应尽量与所采用的操作系统或开发工具的风格保持一致。例如,Windows应用程序的标识符通常采用“大小写混排”方式,如MaxValue,而UNIX应用程序的标识符通常采用“小写加下画线”方式,如max_value。不要将两类风格混在一起使用。(6)C语言的标识符是区分大小写(对大小写敏感)的。在程序中不能改变其值的量包括:整型(如0,67,2,
123L,123u,
022,0x12)默认为基本整型int实型(如2.3,1.2e-5,2.73F,2.73L)默认为双精度实型double字符型(如'z','3','$’)字符串(如"UKM","1","5a”)枚举型2.3常量长整型无符号整型八进制十六进制单精度实型长双精度实型十进制小数指数形式十进制2.2.1常量的表示2.2.1常量的表示24/532.3.2宏常量和const变量在程序中直接使用的常数,称为幻数(MagicNumber)
问题:使用幻数存在什么问题?程序的可读性变差容易发生书写错误,产生不一致性当常数需要改变时,要修改所有引用它的代码,繁琐,还可能有遗漏良好的程序设计风格建议把幻数定义为宏常量const常量优点减少重复书写常数的工作量提高程序的可读性和可维护性宏常量(MacroConstant)用一个标识符号来表示的常量宏定义
#define
标识符字符串
编译预处理命令:在源程序编译之前,先对程序中的编译预处理命令进行处理然后将处理的结果和源程序一起进行编译,以得到目标代码2.3.2宏常量和const变量宏常量(MacroConstant)宏定义
#define
标识符字符串
#definePI3.14159
符号常量(SymbolicConstant)宏名(MacroName),一般全大写不区分数据类型2.3.2宏常量和const变量宏常量存在的问题是什么?没有数据类型,编译器在宏替换时不进行类型检查只进行简单的字符串替换,极易产生意想不到的错误2.3.2宏常量和const变量constdoublepi=3.14159;const常量与宏常量相比的优点是什么?const常量有数据类型,编译器能对其进行类型检查某些集成化调试工具可以对const常量进行调试2.4键盘输入和屏幕输出2.4.1单个字符的输入输出函数2.4.2格式化输入输出函数2.4.1单个字符的输入输出字符输出函数putchar()putchar(ch)向屏幕输出一个字符,字符型变量ch的值字符输入函数getchar()ch=getchar()从键盘接收的字符作为getchar()的函数值无参数【例2.2】小写英文字母转换成大写英文字母B↙b#include<stdio.h>intmain(void){ charch; ch=getchar();//从键盘输入一个字符,按回车键结束输入
ch=ch–('a'-'A');//将大写字母转换为小写字母 putchar(ch);//在屏幕上显示变量ch中的字符 putchar('\n');//输出一个回车换行控制符
return0;}2.4.2数据的格式化屏幕输出按指定格式和类型输出变量的值,或者输出一行字符串printf(格式控制字符串,输出值参数表);printf("a=%db=%f",a,b);输出值参数类型应与格式转换说明符相匹配可输出多个任意类型的数据可变长度的输出参数表与格式说明符一一对应普通字符转换说明指定输出数据格式%ddecimal
输出十进制有符号int型%uunsigned
输出十进制无符号int型%ffloat
以小数形式(6位小数)输出float,double型%eexponent以标准指数形式输出float,double型inta=10;printf("%d",a);10doubleb=10.3;printf("%f",b);10.300000floatb=10.3;printf("%e",b);1.030000e+0012.4.2数据的格式化屏幕输出%ccharacter以字符形式输出单个字符charc=‘A’;printf("%c",c);Acharc=‘A’;printf("%d",c);652.4.2数据的格式化屏幕输出2.4.3数据的格式化键盘输入
转换说明可变长度输入地址参数表格式scanf(格式控制字符串,输入地址表);scanf("%d%f",&a,&b);
&是取地址运算符格式scanf(格式控制字符串,输入地址表);scanf("%d%f",&a,&b);如何分隔多个输入数据?1)空格、Tab或回车2)达到输入位宽3)遇非法字符遇以上情况都认为一个数据输入结束:2.4.3数据的格式化键盘输入%d 输入十进制int型%f,%e 输入float型(不能指定输入数据的精度)%c 输入一个字符(包括空白字符)常见错误scanf("%7.2f",&a);scanf("%f",
a);scanf("%f\n",
&a);2.4.3数据的格式化键盘输入scanf()的格式修饰符m 输入数据的位宽l 加d、u前输入long型 加f、e前输入double型L 加f、e前输入longdouble型h 加d前输入short型%ld 输入longint型%hd 输入shortint型%f 输入float型%lf
输入double型m 输入数据的位宽l 加d、u前输入long型 加f、e前输入double型L 加f、e前输入longdouble型h 加d前输入short型* 输入项在读入后不赋给相应的变量2.4.3数据的格式化键盘输入2.5算术运算算术表达式除法(Division)
a/b浮点数除法(FloatingDivision)aorborbotharefloats整数除法(IntegerDivision)aandbareintegers11/5=211.0/5=2.22.5算术运算操作数必须是整数,返回a与b相除之后的余数(Remainder)(1)提取数字的最低位。例如,123%10即可得到123的最低位3。(2)判断一个数能否被另一个数整除。例如,若m%n的结果为0,则m能被n整除。(3)判断一个数是否为偶数。例如,若m%2的结果为0,则m为偶数。(4)生成一个指定范围内的随机数。求余(Modulus)——也称a对b取模
a%b2.5算术运算问题:输出一个三位整数的个位、十位和百位数字关键:如何分离个位、十位、百位数字?153%10
=3153/100=1153-1*100=53
53/10=5153-1*100-5*10=3153%100
=53
53/10=5153/10
=
15
15%10=52.5算术运算对p求模取余:H(k)=k%p将一个大范围的自然数集合映射到一个只有p个元素的小集合上随机函数rand()生成一个在0~32767之间的随机数问题:如何生成一个指定范围(如1~100)内的随机数?magic=rand()%100;//0~99magic=rand()%100+1;//1~1002.5算术运算常用的标准数学函数#include<math.h>函数名功能exp(x)ex函数名功能exp(x)expow(x,y)xy函数名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)函数名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|函数名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|log(x)lnx,(x>0)函数名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|log(x)lnx,(x>0)log10(x)lgx,(x>0)函数名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|log(x)lnx,(x>0)log10(x)lgx,(x>0)sin(x)sinx,x为弧度值函数名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|log(x)lnx,(x>0)log10(x)lgx,(x>0)sin(x)sinx,x为弧度值cos(x)cosx,x为弧度值2.5算术运算2.6赋值运算赋值运算符和数学中的等号有何区别?有方向性左值和右值类型应一致
(1)赋值表达式语句(
ExpressionStatement
)
变量
=
表达式
;
(2)定义变量的同时为变量赋值——初始化(Initialize)
类型变量=表达式;
2.6赋值运算赋值运算符的结合性?
(2)多重赋值(MultipleAssignment)
变量1=变量2=
表达式
赋值运算符的优先级?
(1)简单赋值(SimpleAssignment)
变量=
表达式
一种简写的且执行效率更高的赋值
(3)复合的赋值(CombinedAssignment)
变量1运算符op=表达式
2.6赋值运算增1运算符(Increment)++使变量的值增加1个单位减1运算符(Decrement)--使变量的值减少1个单位操作数只能是变量,不能是表达式,自增自减运算一元运算符前缀(prefix)++n--n后缀(postfix)n++n--
n=n+1
n=n–1
n=n+1
n=n–1作为前缀(prefix)运算符时++n,--n先对n增1/减1,然后再使用n的值m=++n;n=n+1;
m=n;printf("%d",++n);n=n+1;
printf("%d",n);用增1和减1运算生成的代码运行速度更快2.6赋值运算作为后缀(postfix)运算符时n++,n--先使用n的值,然后再对n增1/减1m=
n++;m=n;n=n+1;
printf("%d",n++);n=n+1;
printf("%d",n);2.7增1和减1运算符i5j??46前缀与后缀对变量和表达式的影响mnm=++n-2;n=n+1;
m=n-2;m=
n++-2;m=n-2;n=n+1;
n5m??36操作数的值是相同的但表达式的值是不同的2.7增1和减1运算符优点增1和减1运算生成的代码效率更高一些问题:过多的增1和减1运算混合会产生什么结果?可读性差,例如(++n)+(++n),(n++)+(n++)不同编译器产生的运行结果不同良好的程序设计风格提倡在一行语句中,一个变量只出现一次增1或减1运算2.7增1和减1运算符2.8.1自动类型转换2.8.2强制类型转换2.8混合数据类型运算中的类型转换算术表达式中问题:相同类型数据的运算结果的类型是什么?还是该类型例如,整数除法2.8.1自动类型转换11/5=2根据参与运算的操作数类型从低级别向高级别自动转换算术表达式中问题:不同类型数据的运算结果的类型是什么?取值范围较大的那种类型例如,浮点数除法C编译器将所有操作数都转换成取值范围较大的操作数的类型——类型提升(TypePromotion)11.0/5=11.0/5.0=2.22.8.1自动类型转换Example:
inttotal,number; floataver; … aver=total/number;
15/2
7total15number2aver??7.000000整数除法2.8.2强制类型转换不同类型的数据的运算结果的类型?
intnumber;
floattotal,aver; … aver=total/number;
15.000000/2
7.500000total15number2aver??7.500000浮点数除法2.8.2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年旅游度假村品牌提升方案
- 2026年文登市小升初数学考试测试卷含答案详解(完整版)
- 2026年初中历史专项考试卷
- 配件销售合同(范本)
- 矛盾专题试题及其答案
- 六年级下册数学北师大含答案 计算与应用1
- 中医药膳学练习题及完整答案
- 2026年低碳建筑设计理念解析
- 保险科目试题及准确答案一览
- 混凝土下料分层均匀浇筑全流程
- 2026年统计调查服务中心招聘试题及答案解析
- 综合管理部安全培训手册
- 武警拓展训练方案
- 建筑工地安全员培训资料与手册
- 2025年安徽省直机关公开遴选公务员笔试题及答案解析(B类)
- 化工企业质量安全培训课件
- 2025年远传水表项目可行性研究报告模板
- 猪场粪污消纳协议书
- 温室气体培训课件
- 房屋市政工程生产安全重大事故隐患判定标准(2024版)宣传海报
- (高清版)DB42T 2179-2024 装配式建筑评价标准
评论
0/150
提交评论