版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计
目
录目录CONTENTS
C程序组成元素2.1
运算符和表达式2.4
常量2.2
变量2.3
数据类型转换2.5下面我们首先来看一个简单的C程序:#include<stdio.h> /*编译预处理指令*/intmain() /*主函数的函数头*/{ /*函数体的开始标记*/ inta,b,c; /*定义3个整型变量*/ scanf("%d%d",&a,&b); /*运行程序时,分别为a,b输入整数值*/ c=a+b; /*计算a+b的值,将结果赋值给c*/ printf("a=%d,b=%d,c=%d\n",a,b,c); /*依次输出a,b,c的值*/ return0; /*程序返回值0*/} /*函数的结束标记*/由该程序可以看出,C程序中主要包括了关键字、变量、常量、运算符、标识符、分隔符、其他符号等。下面我们就来介绍一下这些元素及其特点。关键字变量常量运算符
2.1
C程序组成元素2.1.1C语言程序的格式特点标识符C语言中规定具有特别意义的字符串称为关键字,亦称保留字,关键字不能用作它用。C语言的关键字共有37个,如表所示。chardoubleenumfloatintlongshortsignedstructunionunsignedvoidfordowhilebreakcontinueifelsegotoswitchcasedefaultreturnautoexternregisterstaticconstsizeoftypedefvolatileinlinerestrict_Bool_Complex_Imaginary
2.1
C程序组成元素2.1.2关键字总体而言,C语言中的关键字大致可以分为以下几类:数据类型说明符,如整型int,字符型char等。语句定义符,如选择结构中的if、else,循环结构中的for、while、do等。存储类型关键字,如声明自动变量的auto,声明静态变量的static等。其他关键字,如声明常量的const等。
2.1
C程序组成元素12342.1.2关键字所谓变量,是指程序运行过程中其值可以改变的量,如上例中的a,b,c。所谓常量,是指程序运行过程中其值不变的量,如上例中的0。我们在本章稍后会对C语言中的常量和变量进行更为详细的解释。
2.1
C程序组成元素2.1.3变量与常量所谓标识符,指的是编程人员在编写程序时自己规定的具有特定含义的词,用来标明设定的变量名、数组名、函数名等。在C语言中,标识符应遵循以下一些命名规则。标识符只能由字母、下划线、数字组成,且第一个字符必须是字母或下划线,不能是数字。如abc,_abc1,str_2都是合法的标识符,但2abc,2_abc,&123,%lsso,M.Jack,-L2都是错误的标识符。标识符区分英文字母大小写,如score和Score是两个不同的标识符。标识符不能是C语言中的关键字。
2.1
C程序组成元素2.1.4标识符123
提示1.虽然从语言标准来说,C语言并未对标识符的长度作出限制,但在实际使用中,其长度会受到具体编译系统和机器环境的制约。比如,某些编译器规定标识符的前8个字符为有效区分部分,若两个标识符的前8个字符完全相同,会被视作同一个标识符。2.在命名标识符时,应尽量让其名称能够体现出所代表的含义,做到“见名知义”。这样可以显著提升程序的可读性,例如表示学生姓名的变量,可命名为StuName。3.在C程序的标识符中,只能使用英文字母(包括大写和小写)、数字以及下划线(_)。需要注意的是,像!、#、&等其他英文特殊符号是不允许用于标识符的。不过,在程序的注释以及字符串常量中,则可以使用包括汉字和中文标点在内的任意字符。
2.1
C程序组成元素2.1.4标识符在C语言中,为了指明每个变量、函数可存储什么类型的数据,以及可以进行哪些运算或操作,系统提供了多种数据类型。数据类型不同,其在内存中占用的存储空间大小也有所不同。在C语言中,数据类型可分为四类,它们分别是基本类型、构造类型、指针类型和空类型,如图所示。其中,基本类型又可细分为整型、实型、字符型和枚举型;构造类型包括数组类型、结构体类型和共用体类型。在本章中,我们将主要介绍C语言的基本类型,对于其他数据类型,将在后面各章陆续介绍。
2.1
C程序组成元素2.1.5数据类型
知识拓展
2.1
C程序组成元素整型常量即整常数,C语言中整型数据可以有以下三种表示形式:十进制整数,由数字0-9组成,不能以0开头(数字0本身除外)。示例:0、123、-456、10086。八进制整数。以数字0开头,后面跟由0-7组成的数字序列。示例:012(对应十进制的10)、077(对应十进制的63)、-010(对应十进制的-8)。十六进制整数。以0x或0X开头,后面跟由0-9、A-F(或a-f)组成的数字序列(A-F表示10-15)。示例:0x1A(对应十进制的26)、0Xff(对应十进制的255)、-0x20(对应十进制的-32)。
提示这三种形式在程序中可以根据需求灵活使用,编译器会自动将它们转换为二进制形式存储。例如,10(十进制)、012(八进制)、0xa(十六进制)在内存中都表示同一个整数(十进制值为10)。
2.2
常
量2.2.1整型常量123实型数据指带小数的数值(实数),又称浮点数(因小数点是“浮动的”而得名)。C语言中实型常量只用十进制形式表示,但其表示方式也有两种:小数形式。由整数部分、小数点和小数部分组成,必须包含小数点。可以只有整数部分和小数点(此时小数部分默认为0),如3.、-100.,可以只有小数点和小数部分(此时整数部分默认为0),如.5、-.89,也可以同时包含整数部分、小数点和小数部分,如3.14、-0.618。指数形式,由十进制数、指数符号e或E以及指数部分组成,格式为:aEn(表示a×10ⁿ)。其中a是小数形式的实数(可以带正负号),n是十进制整数(可正可负)。示例:1.23e5(表示1.23×10⁵,即123000)、3.14E-2(表示3.14×10⁻²,即0.0314)、-5e3(表示-5×10³,即-5000)。
注意:指数形式中,e或E前后必须有数字,且指数部分必须是整数。例如e3、5e、3.2e1.5都是不
合法的表示。
2.2
常
量2.2.2实型常量12字符型常量包括字符常量、字符串常量和转义字符。字符常量1C语言中字符常量必须用单撇号(单引号)括起来,且单撇号中只能是单个字符。如'A'、'a'、'3'、'*'是正确的,'cd'、’12’、’!@’是错误的。字符型数据在C语言中是以ASCII码形式存储的,字符常量的值就是其对应的ASCII码的值。如字符'a'的ASCII码值为97,'A'的ASCII码值为65。因为ASCII码值为整型,所以C语言中字符型数据与整型数据可以互用,例如,'a'-32相当于97-32,等于65,对应的字符为'A';同理,'A'+32为字符'a'。这也是字母大小写转换的一种方法。
提示字符'8'和整数8是不同的概念,字符'8'只是代表一个符号,在内存中以ASCII码形式存储,对应的ASCII码值为56,而整数8在内存中存储的就是数值8。
2.2
常
量2.2.3字符常量字符串常量2除单个字符外,C语言还可以处理多个字符组成的常量,称为字符串常量。字符串常量是一对双撇号(双引号)括起来的一个或多个字符,例如,"A","China","Howareyou!"等。C语言中存储字符串常量时,系统会在字符串的末尾自动加一个'\0'作为字符串的结束标志。例如,字符串常量"China"在内存中的存储形式如图所示。
提示字符串常量不能被修改(存放在常量区),例如不能直接给"hello"中的字符赋值。连续的字符串常量会被自动拼接,例如"ab""cd"等价于"abcd"。空字符串""仅包含结束符'\0',占1字节内存。
2.2
常
量2.2.3字符常量转义字符3C语言中还有一类特殊字符,无法直接输入或有特殊含义的字符,需用转义字符表示(以反斜杠开头)称为转义字符。转义字符通常用来表示一些控制代码和功能定义,例如,例1-1中的语句“printf("欢迎您学习C语言!\n");”中,“\n”表示换行。C语言中常用的转义字符如表所示。转义字符说明转义字符说明\n回车换行\'单引号符'\b退格\"双引号符"\r回车\a鸣铃\t水平制表\f走纸换页\v垂直制表\ddd1~3位八进制数所代表的字符\\反斜线符\\xhh1~2位十六进制数所代表的字符实际上,任何一个字符都可以用转义字符\ddd或\xhh来表示,ddd和hh分别为八进制和十六进制的ASCII码,例如,'\101'表示字母'A','\134'表示右斜杠,'\X0A'表示换行等。
2.2
常
量2.2.3字符常量符号常量,即以一个标识符来代表某一个字面常量,它通常利用C语言的宏定义命令#define来声明,格式为:#define标识符
常量值。其中:#define是预处理命令(不是语句,末尾不需要分号);标识符是符号常量的名称,通常使用大写字母(约定俗成,便于区分);常量值可以是整数、实数、字符、字符串等;示例:特点与作用:①替代作用,编译预处理阶段,编译器会将代码中所有出现的符号常量标识符替换为对应的常量值(宏替换);②提高可读性,用有意义的标识符(如PI、MAX_AGE)代替直接写数值,使代码更易理解;③便于修改,当需要修改常量值时,只需修改#define定义处,无需逐个修改代码中所有出现该值的地方。注意事项:①符号常量定义后不能被修改,也不能对其赋值(如PI=3.14;是错误的);②定义时标识符与常量值之间是空格,不是等号;③通常在程序开头定义符号常量,以便整个程序都能使用。
2.2
常
量2.2.3符号常量【例2-1】已知圆的半径,求圆的周长和面积。【问题分析】在本例中,可以使用符号常量来表示圆周率,在运行时先显示文字,提示用户输入圆的半径值。用户输入值后,经过计算就可以得到圆的周长和面积,最后将计算结果显示出来。
2.2
常
量2.2.3符号常量【参考代码】#include<stdio.h>#definePI3.14159 /*使用符号常量表示圆周率*/intmain(){ doubler,l,s; /*定义双精度型变量半径r,周长l和面积s*/ printf("请输入圆的半径:"); /*输出提示语*/ scanf("%lf",&r); /*输入半径r的值*/ l=2*PI*r; /*计算周长l*/ s=PI*r*r; /*计算面积s*/ printf("圆的周长为%f,圆的面积为%f\n",l,s); /*输出周长l和面积s*/ return0; /*程序返回值0*/}
2.2
常
量2.2.3符号常量【运行结果】程序运行结果如图所示。【程序说明】用格式输入函数scanf输入双精度型数据时,输入格式为%lf;用格式输出函数printf输出双精度型数据时,输出格式为%f,关于格式输入输出函数将在第后续章节中详细介绍。
2.2
常
量2.2.3符号常量变量的定义:变量在使用前必须先定义,变量定义的过程其实是为变量在内存中开辟储存单元的过程。变量定义的基本格式为:数据类型
变量名;数据类型决定变量存储的数据类型(如整数、浮点数、字符等),例如int、float、char等。变量名遵循标识符命名规则(由字母、数字、下划线组成,不能以数字开头,不能是关键字)。示例:intage;//定义一个整型变量agefloatscore;//定义一个单精度浮点型变量scorechargender;//定义一个字符型变量gender也可以在定义时同时初始化(赋值):intnum=10;//定义整型变量num并初始化为10floatpi=3.14f;//定义浮点型变量pi并初始化为3.14charch='A';//定义字符变量ch并初始化为'A'变量的本质:变量本质上是内存中的一块存储空间,用于存放数据:定义变量时,编译器会根据数据类型分配相应大小的内存(例如int通常占4字节,char占1字节)。变量名相当于这块内存空间的“别名”,通过变量名可以访问或修改内存中的数据。变量的使用规则:先定义后使用:C语言要求变量必须先定义,后使用,否则会报错。
错误示例:使用未定义的变量intmain(){x=5;//错误,x未定义return0;}
2.3
变量整型变量是用来存储整数的变量。整型可分为两大类:有符号型和无符号型。有符号整数指的是数值可以带正负号,所以需要一个符号位;无符号整数指的是数值只有正数,所以可以去掉符号位。默认情况下,C语言中的整型变量都是有符号的,若要告诉编译器变量是无符号整数,需要把它声明成无符号类型(用关键字unsigned表示)。
拓展阅读我们知道,数据是以二进制形式存储在计算机中的。整数在存储单元中的存储方式是以补码形式存放的。一个正数的补码是此数的二进制形式,一个负数的补码是由该数绝对数的二进制数按位取反后加1得到。
2.3
变量2.3.1整型变量为了适应不同的应用场合,C语言提供了多种整数类型,其长度各不相同。其中,常用的有符号整型(用关键字int表示)长度为32位(4个字节)。此外,考虑到有些程序所需的数很大,C语言为此提供了长整型(用关键字long表示);如果程序中整数的值都不大,为了节省空间,可使用C语言提供的短整型(用关键字short表示)。
提示不同的编译器,分配给整型变量的存储空间的大小是不一样的。如TurboC2.0为每个整型数据分配2个字节(16位),而VisualC++6.0为每个整型数据分配4个字节(32位)。在本书中,我们采用VisualC++6.0编译器中的规定。
2.3
变量2.3.1整型变量编写程序时,可以指明变量是长整型或短整型,有符号整型或无符号整型,还可以把说明符组合起来。因此,整型变量可以分为有符号基本整型、无符号基本整型、有符号短整型、无符号短整型、有符号长整型和无符号长整型这6种类型。具体的关键字表示和各类型的取值范围如表所示。类型名称关键字表示字节数最小值最大值有符号基本整型[signed]int4-2147483648(-231)2147483647(231-1)无符号基本整型unsigned[int]404294967295(232-1)有符号短整型[signed]short[int]2-32768(-215)32767(215-1)无符号短整型unsignedshort[int]2065535(216-1)有符号长整型[signed]long[int]4-2147483648(-231)2147483647(231-1)无符号长整型unsignedlong[int]404294967295(232-1)
2.3
变量2.3.1整型变量
知识库有符号整数将存储单元中最左侧的一位作为符号位,如果该位为0,表示数值为正;如果该位为1,表示数值为负。因此,最大的32位整数的二进制表示形式是01111111111111111111111111111111,对应的数值是2147483647(即231-1)。无符号整数,即不带符号位的整数(最左侧的位是数值的一部分)。所以最大的32位整数的二进制表示形式就是11111111111111111111111111111111,对应的数值是4294967295(即232-1)。
2.3
变量2.3.1整型变量例如,定义一个整型变量a,并为其赋值0的方法如下:inta; /*定义一个整型变量a*/a=5; /*为a赋值5*/用户也可定义变量的同时为变量赋初值,这种形式称为变量的初始化。例如:inta=10; /*定义一个整型变量a并初始化为10*/
提示表格中的[]为可选部分。例如[signed]int,在编写程序的时候可以用signedint表示有符号基本整型,也可以省略关键字signed,直接用int表示。
2.3
变量2.3.1整型变量
易错点拨编写程序时,定义变量的所有语句应放在程序的最前面,即在其他所有语句之前,否则会产生错误,例如:intc; /*定义一个整型变量c*/a=0; /*错误!!!因为赋值语句前没有定义变量a*/intb; /*定义变量b*/b=2; /*为变量b赋值*/
2.3
变量2.3.1整型变量【例2-2】#include<stdio.h>intmain(){ shorta,b; /*定义两个短整型变量a和b*/ a=32767; /*将值32767赋给变量a*/ b=a+1; /*将a的值加1后赋给变量b*/ printf("a=%d,b=%d\n",a,b); /*输出a和b的值*/ return0; /*函数返回值*/}有符号短整型数据的溢出。
2.3
变量2.3.1整型变量【运行结果】程序运行结果如图所示。
2.3
变量2.3.1整型变量【程序说明】我们定义的变量a和b都是有符号的短整型,其取值范围为-32768~32767,所以无法表示大于32767或者小于-32768的数,所以当a的值加1变成了32768后就发生了“溢出”。但运行时并不报错,它好像汽车里程表一样,达到最大值以后,又从最小值开始计数。所以32767加1后得到的结果不是32768,而是-32768。从这里可以看到:C语言的用法比较灵活,即使程序存在潜在问题,系统也不会给出“出错信息”,此时只能依靠程序员的经验来保证结果的正确。在这里,我们只需把变量b改成int型或者long型,就可以得到预期的结果了(32768)。
拓展阅读在使用整型常量时,可以在常量的后面加上字符L(l)或者U(u)进行修饰。L表示该常量为长整型,U表示该常量为无符号整型,例如:a=1256L; /*L表示长整型*/b=500U; /*U表示无符号整型*/
2.3
变量2.3.1整型变量整数类型并不适用于所有应用。有时需要变量能够存储带小数点的数,或者能够存储极大数或极小数。这类数可以用实型变量进行存储,实型变量也称为浮点型变量。实型变量根据精度可以分为单精度类型、双精度类型和长双精度类型等3种类型。具体的关键字表示和各类型的取值范围如表所示。类型名称关键字字节数精度取值范围(绝对值)单精度float46个数字0以及1.2×10-38~2.4×1038双精度double815个数字0以及2.3×10-308~1.7×10308长双精度longdouble815个数字0以及2.3×10-308~1.7×10308
2.3
变量2.3.2实型变量
拓展阅读C标准没有说明float、double和longdouble类型提供的数据精度到底是多少,因为不同的计算机可以用不同方法存储浮点数。大多数现代计算机都遵循IEEE754标准规范。数值以科学计数法的形式存储,每个数都由三部分组成:符号、指数和小数。其中,指数部分的位数决定了实数的大小,小数部分的位数决定了实数的精度。
2.3
变量2.3.2实型变量单精度类型1单精度类型使用关键字float来进行定义变量,它在内存中占4个字节,提供6位有效数字,取值范围为-2.4×1038~-1.2×10-38、0以及1.2×10-38~2.4×1038。例如,定义一个单精度型变量fx,并为其赋值为5.78的方法如下:floatfx; /*定义单精度变量fx*/fx=5.78F; /*为fx赋值5.78*/
2.3
变量2.3.2实型变量由于实型变量由有限的存储单元组成,能提供的有效数字总是有限的,在有效位以外的数字将无法正确处理,由此可能会产生一些误差,称为实型数据的舍入误差。上面提到了单精度有效数字为6位,超过6位将有可能无法正确显示。
提示默认状态下,实型常量为double双精度类型,如果要赋值给单精度类型的变量,可在常量后面加上符号F或者f。
2.3
变量2.3.2实型变量【例2-3】#include<stdio.h>intmain(){ floatf; /*定义单精度型变量f*/ f=1234567.90123; /*将值1234567.90123赋给变量f*/ printf("f=%f\n",f); /*输出变量f的值*/ return0; /*函数返回值0*/}单精度型数据的有效位。
2.3
变量2.3.2实型变量【运行结果】程序运行结果如图所示。【程序说明】由于float型只接受6-7位有效数字,因此显示的数据中只有前7位是保证正确的,后面的数据将无法正确处理,显示的是编译器随机给出的数。为了扩展有效数字范围,可使用double类型或longdouble类型。
2.3
变量2.3.2实型变量双精度类型2在C语言中,双精度型(double)是用于存储高精度浮点数的数据类型,相比float(单精度)具有更高的精度和更大的数值范围,其特点和使用规则如下:存储特性:通常占用8字节(64位)内存空间;遵循IEEE754标准,由1位符号位、11位指数位和52位尾数位组成;精度约为15-17位有效数字,数值范围约为
±1.7×10³⁰⁸。
2.3
变量2.3.2实型变量【例2-4】#include<stdio.h>intmain(){ doublef; /*定义双精度型变量f*/
f=1234567.90123; /*将值1234567.90123赋给变量f*/ printf("f=%f\n",f); /*输出变量f的值*/ return0; /*函数返回值0*/}将例2-3中的变量定义为double类型。
2.3
变量2.3.2实型变量【运行结果】运行结果如图所示。
2.3
变量2.3.2实型变量【程序说明】由于double型提供15-17位有效数字,所以输出的数据数值是正确的。
提示用格式输出函数printf输出实型时,输出格式采用%f,默认输出6位小数,不足6位补0,多于6位只保留6位,多余位数四舍五入,我们将在第4章中详细介绍。
2.3
变量2.3.2实型变量长双精度类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年浙江宇翔职业技术学院单招职业技能测试题库及答案1套
- 2026年武汉海事职业学院单招职业技能考试模拟测试卷及答案1套
- 2026年湖北城市建设职业技术学院单招职业技能测试题库附答案
- 2026年心理下载考试题库参考答案
- 2026年广西金融职业技术学院单招职业技能考试模拟测试卷及答案1套
- 2026年抑郁心理考试题库带答案
- 2026年山东华宇工学院单招职业适应性考试题库及答案1套
- 2026年常州工业职业技术学院单招职业倾向性测试模拟测试卷及答案1套
- 2026浙江宁波大学附属人民医院招聘编外人员2人(影像技师)笔试模拟试题及答案解析
- 2025年12月江苏扬州市宝应县教育系统事业单位招聘教师11人考试题库附答案
- 项目管理流程标准作业程序手册
- 自我介绍礼仪课件
- 卫生院孕优知识培训课件
- 2025-2030工业窑炉烟气多污染物协同控制技术
- 培训机构台账
- 电商预算表格财务模板全年计划表格-做账实操
- 泵车日常管理办法
- 骨科术后疼痛评估与护理查房
- 输液泵的使用培训课件
- 中医针灸治疗妇科疾病
- 25年自来水考试试题大题及答案
评论
0/150
提交评论