C语言程序设计教程(一)219_第1页
C语言程序设计教程(一)219_第2页
C语言程序设计教程(一)219_第3页
C语言程序设计教程(一)219_第4页
C语言程序设计教程(一)219_第5页
已阅读5页,还剩214页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计教程(一)第1章C程序设计概述第2章数据类型,运算符和表达式第3章顺序结构第4章选择结构第1章C语言程序设计概述C语言是目前最流行的程序设计语言之一,既具有一般高级语言特性,又具有低级语言特性。通过本章学习,了解C语言开展的历史背景,C语言的特点,重点掌握C语言程序的结构和在VisualC++集成环境下运行C程序的步骤与方法。1.1C语言的开展及其特点C语言是国际上流行的、很有开展前途的计算机高级语言。既可以用来编写系统软件,也可以用来编写应用程序。以前操作系统等系统软件主要采用汇编语言编写。汇编语言依赖于计算机硬件,程序的可读性、可移植性都比较差。为了提高可读性和可移植性,人们希望采用高级语言编写这些软件,但是一般的高级语言难以实现汇编语言的某些操作,特别是针对硬件的一些操作〔如:内存地址的读写-直接硬件、二进制位的操作〕。人们设法寻找一种既具有一般高级语言特性,又具有低级语言特性的语言,C语言就在这种情况下应运而生。C语言的开展简史:ALGOL60->CPL->BCPC->B->C->标准C->ANSIC->ISOC。1.1C语言的开展及其特点(续)ALGOL60:是1960年出现的一种面向问题的高级语言。ALGOL60离硬件较远,不适合用来编写系统程序。CPL〔CombinedProgramminglanguage,组合编程语言):1963年英国的剑桥大学推出了CPL,CPL是在ALGOL60根底上更接近于硬件的一种语言。但CPL规模大,实现困难。BCPL〔BasicCombinedProgramminglanguage,根本的组合编程语言〕:1967年英国剑桥大学的MatinRichards对CPL语言做了简化,推出了BCPL语言。B语言:1970年美国贝尔实验室KenThompson对BCPL进一步简化所得到的一种简单而且接近硬件的B语言〔取BCPL语言的第一个字母〕。B语言精练、接近硬件,但过于简单,数据无类型。B语言诞生后,Unix开始用B语言改写〔原来的UNIX操作系统是1969年由美国的贝尔实验室的K.Thompson和开发成功的,是用汇编语言写的〕。1.1C语言的开展及其特点(续)C语言:1972年至1973年间,贝尔实验室的在B语言的根底上设计出了C语言(取BCPL的第二个字母)。C语言既保持了BCPL和B语言的优点(精练,接近硬件),又克服了它们的缺点(过于简单,数据无类型等)。C语言诞生后,Unix很快用C语言改写,并被移植到其它计算机系统。为了推广UNIX操作系统,1977年发表了不依赖于具体机器系统的C语言编译文本?可移植的C语言编译程序?。1978年以后,C语言已先后移植到大、中、小、微型机上,成为世界上应用最广泛的计算机语言。标准C:以1978年发表的UNIX第7版中的C编译程序为根底,BrianW.Kernighan和DennisM.Ritchie(合称K&R)合著了影响深远的名著?TheCProgrammingLanguage?,这本书中介绍的C语言成为后来广泛使用的C语言版本的根底,它被称为标准C。1.1C语言的开展及其特点(续)ANSIC:1983年,美国国家标准化协会(ANSI)根据C语言问世以来各种版本对C的开展和扩充,制定了新的标准,称为ANSIC。ANSIC比原来的标准C有了很大的开展。K&R在1988年修改了他们的经典著作?TheCProgrammingLanguage?,按照ANSIC标准重新写了该书。1987年,ANSI又公布了新标准——87ANSIC。ISOC:1990年,国际标准化组织ISO(InternationalStandardOrganization)接受87ANSIC为ISOC的标准(ISO9899—1990)。目前流行的C编译系统都是以它为根底的。1.1C语言的开展及其特点(续)1999年推出的C99在保存C语言特征的根底上,增加了面向对象的新特征,使C语言从面向过程的语言开展成为面向对象的语言。C语言是C++的根底,掌握了C语言,再学习C++面向对象的语言,将起到事半功倍的效果。目前在微型机上常用的有MicrosoftC、TurboC、QuickC、BORLANDC等多种版本。这些不同版本的C编译系统所实现的语言功能和语法规那么是根本相同的,但在某些方面又略有差异,因此读者应了解所用的C语言编译系统的特点(可以参阅有关手册)。本书的表达根本上以ANSIC为根底来讲授,上机环境使用在Windows操作系统上方便使用的VisualC++6.0可视化集成开发工具。1.1C语言的开展及其特点(续)C语言开展迅速,且成为最受欢送的程序设计语言,主要因为它功能强大,有其显著的特点,这些特点只有通过后续的学习,方可很好的理解和体会它们,在此先作归纳如下:1.C语言简洁、紧凑,使用方便、灵活C语言只有32个关键字,9种控制语句,程序书写自由,主要用小写字母。2.运算符丰富除了最根本的+、-、×、÷、%等运算外,C把括号、赋值、强制类型转换等都作为运算符处理,共有34种运算符。从而使C的运算类型极其丰富,表达式类型多样化。1.1C语言的开展及其特点(续)3.数据类型丰富C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。尤其是指针类型数据,使程序效率更高。4.C语言是结构化语言具有结构化的流程控制语句(如if…else语句、while语句、do…while语句、switch语句、for语句)。用函数作为程序的模块单位,便于实现程序的模块化。5.语法限制不太严格,程序设计自由度大一般的高级语言语法检查比较严,能检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度,因此,放宽了语法检查。程序员应当仔细检查程序,保证其正确,而不要过分依赖C编译程序去查错。一个不熟练的编程人员,编一个正确的C程序可能会比编一个其他高级语言程序难一些。也就是说,对用C语言的人,要求对程序设计更熟练一些。1.1C语言的开展及其特点(续)6.可直接与机器硬件打交道,直接访问内存地址C语言允许直接访问内存地址,能进行位操作,能实现汇编语言的大局部功能,兼有高级和低级语言的特点。C语言的这种双重性,使它既是成功的系统描述语言〔如编写UNIX操作系统〕,又是通用的程序设计语言。7.生成的目标代码质量高,程序执行效率高用C语言编写的程序经编译生成的目标代码效率接近于汇编语言程序,只比汇编程序生成的目标代码效率低10%-20%。因此C语言也可用于编写过程控制程序。8.C语言适用范围广,可移植性好C语言程序一个突出的优点是根本上不做修改就能用于各种型号的计算机和各种操作系统。1.2C语言程序的根本结构几个简单的C语言程序例1-1输出一行信息的C程序。#include<stdio.h>

/*文件包含,标准输入输出头文件*/voidmain()/*主函数*/{/*函数体开始*/

printf("Hello,world!\n");

/*输出语句*/}运行结果:Hello,world!说明:1.main是主函数的函数名,每一个C程序都必须有且仅有一个main函数。2.void是函数的返回值类型,该例无反回值,用void表示。3.{}是函数开始和结束的标志,不可省略,{}之间为函数体部份,该例只有一行。4.printf()是C语言中的输出函数,双引号内的字符串原样输出,"\n"是换行符。5.每个C语句以分号结束。6.使用标准库函数时应在程序开头一行写:#include<stdio.h>7./*……*/表示注释。注释内容只是给别人容易看懂,对编译和运行不起作用。所以可以用汉字或英文字符,可以出现在一行中的最右侧,也可以单独成为一行。1.2C语言程序的根本结构(续)例1-2三个整型数4、8、10,按公式s=〔a+b〕*c计算,并输出S的值。#include<stdio.h> /*标准输入输出头文件*/voidmain(){ inta,b,c,s; /*声明四个整型变量*/a=4;b=8;c=10;/*变量赋初值*/s=(a+b)*c;/*算术运算并赋值*/printf("s=%d\n",s);/*输出结果S的值*/}运行结果:s=1201.2C语言程序的根本结构(续)例1-3包含自定义函数的C程序,输入两个实数,求其中的较大者。#include<stdio.h>voidmain()/*主函数*/{ floatmax(floatx,floaty);/*对被调用函数max的声明*/ floata,b,c;/*声明实型变量a、b、c*/ printf("a,b=");/*输出提示信息a,b=*/ scanf("%f%f",&a,&b);/*输入变量a和b的值*/ c=max(a,b);/*调用max函数,将得到的返回值赋给c*/ printf("max=%f\n",c);/*输出c的值*/}floatmax(floatx,floaty)/*定义max函数,函数值为实型,形式参数x,y为实型*/{ floatz;/*max函数中的声明局部,声明本函数中用到的变量z为实型*/1.2C语言程序的根本结构(续) if(x>y) z=x;/*如果x>y,那么将x值赋给z*/ else z=y;/*否那么将y值赋给z*/ return(z);/*将z的值返回给主调用函数*/}运行结果:a,b=5.5,10↙c=10.000000说明:本程序包括main和被调用函数max两个函数。max函数的作用是将x和y中较大者的值赋给变量z。return语句将z的值返回给主调用函数main。Max函数是用户自定义的函数,在主函数中对被调用函数max进行声明〔称为函数原型声明〕。程序中scanf函数的作用是输入a和b的值。&a和&b中的"&"的含义是“取地址〞,此scanf函数的作用是将两个数值分别输入到变量a和b的地址所标志的单元中。1.2C语言程序的根本结构(续)通过分析以上3个例子,概括出C语言程序的结构特点如下:1.C程序是由函数构成的一个C源程序可由一个main函数和假设干个其他函数组成,其中必须有且仅有一个main函数〔主函数〕。C程序总是从main函数开始执行的,与main函数的位置无关。其它函数可被主函数调用或相互调用。其它函数可为C函数库中的函数〔要用时用#include文件包含〕,也可为用户自己定义的函数。2.函数由函数首部和函数体组成函数的一般结构如下:[函数返回值类型]函数名(函数参数表)/*函数首部*/ { 说明语句局部;/*函数体局部*/ 执行语句局部; }1.2C语言程序的根本结构(续)函数首部包括函数返回值类型〔可缺省〕、函数名、函数的形式参数〔形参〕名、形式参数类型。函数体即函数说明局部下面的用一对大括号括起来的局部{……}。函数体包括两局部:声明局部:inta,b,c;可缺省。执行局部:由假设干个语句组成。可缺省,例如:voiddump(){}这是一个空函数,什么也不做,但是合法的函数1.2C语言程序的根本结构(续)3.每个语句和数据声明的最后必须有一个分号C语言中,分号是程序语句的结束标志,也是C语句的必要组成局部。但预处理命令、函数首部和最后一个花括号"}"之后不能有分号。4.C语言数据输入和输出是由库函数实现的C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化〞。1.2C语言程序的根本结构(续)5.C语言严格区分大小写字母6.C语言用/*注释内容*/形式进行程序注释在"/*"和"*/"之间的所有字符都为注释符,C系统不对注释符进行编译。适当加上必要的注释,以增加程序的可读性,使用注释是编程人员的良好习惯。7.C程序书写格式自由一行内可以写几个语句,一个语句可以分写在多行上,C程序没有行号。但需要注意,分行时不能将一个单词分开,也不能将双引号引起来的字符串分开。但从便于阅读和维护的角度出发,应提倡一行一条语句的风格,并根据语句的附属关系,程序书写时采用缩进格式,使程序语句的层次结构清晰,提高程序的可读性。同一层次语句要左对齐,不同层次的语句要缩进假设干个字符,这样程序层次清楚,便于阅读和理解。1.3C程序的上机步骤与方法VisualC++不仅仅是一个C++编译器,而是一个基于Windows操作系统的可视化集成开发环境IDE〔IntegratedDevelopmentEnvironment〕,1993年Microsoft公司推出VisualC++1.0,新版本不断问世,2001年推出VisualC++.NET〔即VisualC++7.0〕,它只适用于Windows2000/XP/NT4.0开发环境。VisualC++由许多组件组成,包括编辑器、编译器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。这些组件通过一个名为DeveloperStudio的组件集成为一个和谐的开发环境。本节介绍利用VisualC++6.0集成环境开发C程序的方法和步骤,主要是因为目前大多用户比较熟悉Windows操作系统。1.3.1C程序的相关概念有关概念程序:程序是由一组计算机可以识别和执行的指令构成的,每一条指令使计算机执行特定的操作。源程序:用高级语言或汇编语言编写的程序称为源程序。C语言源程序文件的扩展名为".c",在VC++环境下的C源程序文件的扩展名为".cpp"。源程序不能直接在计算机上执行,需要用“编译程序〞或“解析程序〞将源程序翻译为二进制形式的机器代码。1.3.1C程序的相关概念(续)目标程序:源程序经过“编译程序〞翻译所得到的二进制代码称为目标程序。目标程序文件的扩展名为".obj"。目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问题,需要将各个目标程序与库函数连接,才能形成完整的可执行的程序。可执行程序:目标程序与库函数连接,形成的完整的可在操作系统下独立执行的程序称为可执行程序。可执行程序文件的扩展名为".exe"。1.3.2运行C程序的一般步骤上机输入与编辑源程序→对源程序进行编译→与库函数连接→运行目标程序。1.编辑源程序〔1〕编辑指编辑创立源程序是将编写好的C语言源程序代码录入到计算机中,形成源程序文件。〔2〕本书用VisualC++6.0环境提供的全屏幕编辑器。在附录3中介绍TurboC2.0的环境情况。〔3〕在VC6.0环境中的源程序文件,其扩展名为.cpp,而在TurboC2.0环境中的源程序文件的扩展名为.c。2.编译〔1〕编译源程序就是由C系统提供的编译器将源程序文件的源代码转换成目标代码的过程。1.3.2运行C程序的一般步骤(续)〔2〕编译过程主要进行词法分析和语法分析,在分析过程中如果发现错误,将错误信息显示在屏幕上通知用户。经过编译后的目标文件的扩展名为.obj。3.连接〔1〕连接过程是将编译过程中生成的目标代码进行连接处理,生成可执行程序文件的过程。〔2〕在连接过程中,时常还要参加一些系统提供的库文件代码。经过连接后生成的可执行文件的扩展名为.exe。4.运行运行可执行文件的方法很多,可在C系统下执行“运行〞命令。也可以在操作系统下直接执行可执行文件。1.3.2运行C程序的一般步骤(续)1.3.3上机运行C程序的方法要运行C程序,就必须选用某一种C语言编译系统,目前使用的大多数C编译系统都是集成环境(IDE)的,把程序的编辑、编译、连接和运行等操作集成于一体,使用方便、快捷。常用的有TurboC2.0、TurboC++3.0、VisualC++等。TurboC2.0:是一个基于DOS操作系统的集成环境的,它不支持鼠标操作操作,并且在Windows的命令状态下使用极不方便。TurboC++3.0:是一个集成环境,它具有方便、直观和易用的界面,虽然它也是DOS环境下的集成环境,但支持鼠标操作。VisualC++:它是微软公司推出的开发Win32应用程序〔Windows95/98/2000/XP/NT〕的、面向对象的可视化集成工具,用VisualC++对C程序进行编译是十分方便的,但占用的资源比较大。本节主要对利用VisualC++6.0集成环境开发C程序的步骤作介绍,也有有利于今后学习C++语言打根底。1.3.4VisualC++6.0环境运行C程序的步骤1.启动VisualC++6.0环境单击“开始〞-“程序〞-“MicrosoftVisualstudio6.0〞-“MicrosoftVisualC++6.0〞命令,启动VisualC++,VC6主窗口如下:1.3.4VisualC++6.0环境运行C程序的步骤(续)2.新建工程和编辑C源程序文件〔1〕“文件〞-“新建〞-“工程〞-“Win32ConsoleApplication〞,选择存盘的位置,输入工程名,单击确定。1.3.4VisualC++6.0环境运行C程序的步骤(续)〔2〕选择“Anemptyproject〞,单击完成并确定。完成了创立空工程的工作。1.3.4VisualC++6.0环境运行C程序的步骤(续)〔3〕选择“文件〞-“新建〞-选“文件〞选项卡-选定“C++SoueceFile〞,并输入源程序文件名:hello,并单击确定,便进入源程序编辑,输入源程序。1.3.4VisualC++6.0环境运行C程序的步骤(续)〔4〕可在ClassViewd页面中展开Globals,双击main〔〕,或在FileView页面中展开hellofiles|SourceFiles,双击hello.cpp,都可翻开源程序文件hello.cpp,进行编辑和修改。1.3.4VisualC++6.0环境运行C程序的步骤(续)3.编译、连接和运行选择“编译|执行TEST.exe或CTRL+F5〞命令可一次进行完成编译、连接和运行工作,会在输出区显示有关的信息,假设有错误,那么进行修改。程序的运行结果如下1.3.4VisualC++6.0环境运行C程序的步骤(续)编译、连接和运行也可以分别执行:编译:编译|编译TEST.cpp或CTRL+F7连接:编译|构建TEST.exe或 F7执行:编译|执行TEST.exe或 CTRL+F5或者在工具栏上按相应的按钮:1.3.4VisualC++6.0环境运行C程序的步骤(续)经过以上操作,VC++在E:\sample\hello为该工程生成了许多文件。下面对主要的文件作简要的说明,对工程背后的文件及其作用有所了解是有必要的。以以下图示说明hello工程的主要文件:E:\sample\hello文件夹hello.dsp项目文件Debug文件夹hello.dsw工作区文件hello.cpp源程序文件hello.obj目标文件hello.exe可执行文件1.3.4VisualC++6.0环境运行C程序的步骤(续)实际上最重要的是hello.cpp源程序文件,其他文件一般是VisualC++自动生成的。但是在VisualC++中仅有.cpp文件是不能直接编译、连接的,系统必须创立一个工程并将.cpp的文件参加到工程中,才能执行各种操作。习题

一个C程序的执行是从

A.从main()函数开始,直到main()函数结束

B.第一个函数开始,直到最后一个函数结束

C.第一个语句开始,直到最后一个语句结束

D.main()函数开始,直到最后一个函数结束在C程序中,main()的位置

A.必须作为第一个函数B.必须作为最后一个函数

C.可以任意D.必须放在它所调用的函数之后习题

C语言源程序的根本单位是。

A.过程B.函数C.子程序D.标识符一个C源程序有且仅有一个函数和________个其他函数。C语言源程序的语句分隔符是________。C语言开发的四个步骤是________。习题

C语言有那些主要特点?简述C编译和运行的根本方法。常用的集成开发工具有哪些?各有什么特点?编写一个程序,在屏幕上输出以下内容:****************************Youarewelcome!****************************编写一个C程序,输入a、b、c3个值,输出其中最大者第2章数据类型,运算符和

表达式C语言的数据类型十分丰富,分为根本类型:整型、字符型、实型〔单精度型,双精度型〕、枚举类型;构造类型:数组、结构体、共用体;指针类型;空类型。C语言中的数据必须指定其类型,数据分为常量与变量。C语言有34种运算符,从而构成形式多样的表达式,如算术表达式、关系表达式、逻辑表达式、赋值表达式等。本章通过C程序实例分析着手,使读者理解C语言的根本数据类型的表示形式、存储格式及相关的运算,掌握变量声明的方法,能够灵活运用各种表达式。重点掌握:根本的数据类型、常量和变量的使用、C语言各种运算符和表达式的应用。2.1C语言字符集、标识符与关键字C语言字符集:字符是C语言的最根本的元素,C语言字符集由字母、数字、空白字符、下划线、标点和特殊字符组成〔在字符串常量和注释中还可以使用汉字等其它图形符号〕。由字符集中的字符可以构成C语言的根本的语法单位〔如,标识符,关键词,运算符等〕。2.1.1C语言字符集1.字母:A-Z,a-z2.数字:0-93.空白符:空格,制表符〔跳格〕,换行符〔空行〕的总称。空白符除了在字符,字符串中有意义外,编译系统忽略其它位置的空白。空白符在程序中只是起到间隔作用。在程序的恰当位置使用空白将使程序更加清晰,增强程序的可读性。4.下划线:_5.标点符号、特殊字符:+-*/%++--<>=>=<===!=!||&&^~|&<<>>()[]{}\“‘?:.,;2.1.2标识符在C程序中,用于标识名字的有效字符序列称为标识符。标识符可用来标识变量名、符号常量名、函数名、数组名、类型名等。标识符的命名应当有一定的意义,做到见名知义。如student_name,student_number。保存标识符:是C系统预先声明的标识符,通常用于系统声明和标准库函数的名字,如平方根函数名sqrt,正弦函数名sin,用户声明的标识符不能与系统的保存标识符相同。2.1.2标识符C语言标识符声明规那么:(1)标识符由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例如:合法的标识符:Average,_total,name,x1不合法的标识符:3ab,yes/no,$123,a>b,x-y,2.1.2标识符(2)大小写敏感。标识符中的字母大小写是有区别的,如Name与name是不同的标识符。在C程序中,一般变量名用小写字母,常量名用大写字母,但也不是绝对的,如windows编程中,程序员使用的匈牙利表示法(大小写混用,每个单词第一个大写,其余小写,单词与单词之间没有空格,如WinMain,GetCurrentTime)。2.1.2标识符(3)ANSIC没有限制标识符长度,但各个编译系统都有自己的规定和限制(如TubrboC规定为32个字符,MicrosoftC规定为8个字符)。(4)标识符不能与“关键字〞同名,也不与系统预先声明的“保存标识符〞同名。2.1.3关键字

关键字〔又称保存字〕是C语言中规定的具有特定含义的标识符。C语言中的关键字都有是用小写字母构成的,下面是标准C语言中使用的32个关键字:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile2.2C的根本数据类型数据是程序处理的对象。数据以某种特定的形式存在〔如整数、实数、字符〕。2.2.1根本数据类型概述C语言提供了十分丰富的数据类型,归纳如以下图所示:单精度实型(float)双精度实型(double)整型(int)字符型(char)数组类型结构体类型(struct)共用体类型(union)枚举类型(enum)实型(浮点数)基本类型构造类型指针类型空类型(void)数据类型2.2.1根本数据类型概述根本数据类型由系统定义,用户可直接使用,而构造类型是在根本类型的根底上,由用户或系统定义,在本章主要介绍根本数据类型。有关说明:〔1〕C语言中的数据是有类型的。数据有变量与常量之分,它们分别属于上述这些类型之一。2.2.1根本数据类型概述〔2〕不同的数据类型有不同的取值范围,占用不同的存储空间。如有符号整数取值范围-32768~32767,占2个字节,浮点数(float)的取值范围-3.4×10-38~3.4×10-38。占4个字节。〔3〕不同的数据类型又进行不同的操作〔运算〕。如整型数可以取余〔%〕操作;整型、实型数据可以进行加、减、乘、除等;不同的数据类型即使有相同的操作有时含义也不同,如指针数据自增1与整数自增1含义是不同的。2.2.1根本数据类型概述〔4〕C语言的数据类型可以构造复杂的数据结构。如使用结构体数组可以构造线性表。使用指针类型、结构体类型可以构造线性链表〔栈、队列〕、树、图等。〔5〕根本类型前面还可以加各种修饰符,用来修改根本类型的含义,以便更准确地适应各种情况的需求。修饰符signed〔带符号〕、unsigned〔无符号〕、short〔短型〕和long〔长型〕,适用于字符型和整数两种根本类型,而long还可用于double类型。2.2.1根本数据类型概述关键字VisualC++6.0环境TurboC2.0环境所占字节取值范围所占字节取值范围Char1-127~1271-127~127signedchar1-127~1271-127~127unsignedchar10~25510~255Int4-2147483648~21474836472-32768~32767unsigned[int]40~429496729520~65535short[int]2-32768~327672-32768~327672.2.1根本数据类型概述signed[int]4-2147483648~21474836472-32768~32767unsignedshort[int]20~6553520~65535signedshort[int]2-32768~327672-32768~32767long[int]4-2147483648~21474836474-2147483648~2147483647unsignedlong[int]40~429496729540~4294967295float4-3.4×10-38~+3.4×10384-3.4×10-38~+3.4×1038double8-1.7×10-308~+3.4×103088-1.7×10-308~+3.4×10308longdouble16-1.2×10-4932~+3.4×10493216-1.2×10-4932~+1.2×1049322.2.1根本数据类型概述不同的编译系统为同类型的数据分配的字节数不一定相同的,比方对于int型数据VC++6.0那么分配4个字节而TurboC2.0只分配2个字节的存储单元。要理解取值范围,必须弄清计算机中数据的表示形式和存储形式。例如TurboC2.0环境下对int型数据在计算机内存中存储分配占2个字节16位二进制位,其中用第1位为符号位〔1-表示负号,0-表示正号〕,数值部份用其余15位二进制补码形式表示有效数据,故其最小值为-215,在内存中16位二进制补码表示为:,其最大值为215-1,16位二进制补码表示为:。2.2.2常量和符号常量在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同的类型。例如:整型常量100,125,-100,0;实型常量3.14,0.125,-3.789;字符型常量‘a’,‘b’,‘2’;字符串常量“a〞,“ab〞,“1232〞等。常量有两种表示形式:1.字面常量:直接以值的形式表示的常量称字面常量〔或直接常量〕。如上述举例。2.2.2常量和符号常量(续)2.符号常量:用标识符命名的常量〔通常用大写字母〕,称为符号常量。使用符号常量一是便于理解〔含义清楚、见名知意〕,二是方便修改方便〔只改声明处〕。在C语言中使用符号常量,要事先进行声明,有两种声明符号常量的方法:(1)用const声明一般形式:const类型符号常量名=常量值;

2.2.2常量和符号常量(续)例如:程序中多处用到π的值,可以声明符号PI来表示。constfloatPI=3.1416;/*结尾处有分号*/(2)用预处理命令#define来说明一般形式:#define符号常量名常量值;例如:#definePI3.1416/*结尾处没有分号*/2.2.2常量和符号常量(续)例2-1符号常量的使用.#include<stdio.h>#definePI3.1416/*声明符号常量PI*/voidmain(){ floatr,area;/*声明变量r和area*/ printf("r="); scanf("%f",&r);/*用输入函数给变量r输入值*/ area=PI*r*r;/*计算PI*r*r并将结果赋值给变量area*/ printf("area=%f\n",area);}运行结果:r=10↙area=314.1600002.2.2常量和符号常量(续)下面对各种类型的常量作进一步的说明:1.整型常量在C语言中,整型常量有十进制、八进制、十六进制三种进制表示方法,有正〔+〕数和负〔-〕数之分,正数的“+〞可省略。〔1〕十进制整型常量:以数字1~9开头,其他位以数字0~9构成。例如:100,-26等。2.2.2常量和符号常量(续)〔2〕八进制整型常量:以数字0开头,其他位以数字0~7构成。例如0144,-032等。其值相当于十进制数100,-26。〔3〕十六进制整型常量:以0X或0x开头〔数字0和大写或小写字母x〕,其他位以数字0~9或字母a~f或A~F构成。例如:0x64,-0x1a等。其值相当于十进制数100,-26。如果在整型常量加上后缀L或l表示该常量为长整型常量,加上后缀U或u表示无符号整型常量。2.2.2常量和符号常量(续)2.实型常量实型常量又称浮点数。有两种表示方式:小数形式和指数形式。〔1〕小数形式:它是由数的符号〔+,-〕、数字和小数点组成〔注意:必须有小数点〕。如-1.25、3.0、3.3等都是合法的实型小数形式。〔2〕指数形式:它是由尾数〔整数或小数〕、阶码标示〔E或e〕和阶码组成。尾数不可缺省〔是一整数或小数〕,阶码必须为整数。如1.25E-3、1e-5、3E2-等都是合法的指数形式。2.2.2常量和符号常量(续)实型常量分为单精度、双精度和长双精度三种类型。实型常量如果没有任何说明,那么表示为双精度常量,实型常量后加上F或f那么表示单精度常量,实型常量后加上L或l那么表示长双精度常量。3.字符型常量字符型常量是由一对单引号括起来的单个字符。它分为一般字符常量和转义字符。一个字符常量在计算机的存储中占据一个字节。〔1〕一般字符常量:一般字符常量是用单引号括起来的一个普2.2.2常量和符号常量(续)通字符,其值为该字符的ASCII码值。如’a’、’A’、’0’、’?’等都是字符常量,’a’的值为97,’A’的值为65,‘0’的值为48,‘?’的值为63。由于字符数据在内存中是以ASCII码存储,它的存储形式与整数的存储形式类似。〔2〕转义字符:C语言允许用一种特殊形式的字符常量,它是以反斜杠〔\〕开头的特定字符序列,表示ASCII字符集中控制字符〔如\n表示换行〕、某些用于功能声明的字符和其他字符。2.2.2常量和符号常量(续)字符形式含义\n换行\t横向跳格(相当于tab键)\v竖向跳格\b退格\r回车(不换行,光标移到行首)\\反斜杠字符本身“\”\’单引号字符\”双引号字符\f走纸换页\0空值\ddd1-3位8进制数对应的ASCCII值代表的字符\xhh1-2位16进制数对应ASCCII值代表的字符2.2.2常量和符号常量(续)4.字符串常量用双引号括起来的字符序列称为字符串常量也称字符串。如“a〞、“〞〔不含任何字符的空串〕、“12345〞,“Astudent〞等都是合法的字符串常量。字符串常量在内存中按顺序逐个存储字符串中的字符的ASCII码,并在最后自动加上一个字符’\0’〔空字符,该字符的ASCII码值为0,也称NULL字符〕,作为字符串结束标志,所以字符串实际占用字节数要比字符串中字符的个数〔长度〕多1个。2.2.2常量和符号常量(续)字符或字符串在内存中存储的字符形式“Astudent”Astudent\0“a”a\0‘a’a“”\02.2.2常量和符号常量(续)例2-2有关常量的使用。#include<stdio.h>voidmain(){ inta=100,b=-1; floatf=1e-2; charc1='\\',c2='a',c3='0';printf("%d,%d,%o,%o,%x,%x\n",a,b,a,b,a,b);printf("f=%f\n",f); printf("%d,%d,%d\n",c1,c2,c3); printf("%c,\101,\x42\n",c2+3);}2.2.2常量和符号常量(续)运行结果:100,-1,144,37777777777,64,fffffffff=0.01000092,97,48d,A,B思考:请写出-1的二进制补码。2.2.3变量变量是以某标识符为名字(变量名),在程序运行过程中,其值是可以改变的量。1.变量声明C语言中,变量使用时遵循“先声明,后使用〞的原那么。变量声明一般形式:数据类型变量名表;例如:inta;2.2.3变量(续)floatsum_total;变量所占的字节数和取值范围由其数据类型决定,变量名必须符合标识符的命名规那么。变量名实际上是代表一个内存的存储地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。变量的存取操作,实际上是通过变量名找到相应的内存地址,从该存储单元中存取数据。2.2.3变量(续)有关说明:〔1〕数据类型:C语言的合法数据类型。如例中的int、short、char、float、double等。〔2〕变量名表:变量名是C语言合法的标识符。变量名表可以包含多个变量名,彼此之间使用逗号分开,表示同时声明假设干个具有相同数据类型的变量。〔3〕变量可以在程序的三种位置声明:函数内部、所有函数的外部和函数的参数表声明中。由此声明的变量对应地称为局部变量、全程变量和形式参数。〔4〕变量的溢出:对于整型变量超出其表示范围时就发生“溢出〞,得到不正确的结果,但运行时并不报错。2.2.3变量(续)例如:对于两个字节表示的int型变量其取值范围:-32768~32767,超出这个范围那么可考虑用其他类型,否那么得到不正确的结果。〔5〕变量的误差:对于实型变量也是用有限的存储单元存储的,因此提供的有效数字是有限的〔float有效数字是7位、double有效数字是16位、longdouble有效数字是19位)。在有效位以外的数字将被舍去,由此产生一些误差。因此使用时要注意,要根据需要选择单精度或双精度类型,实数的比较一般不进行精确的“相等〞比较,而是判断接近或近似,防止直接将一个很大的实数与一个很小的实数相加或相减,否那么会“丧失〞小的数。2.2.3变量(续)例2-3数据的溢出与误差。#include<stdio.h>voidmain(){ shortinti,j;floatf,g; i=32767;/*最大值赋给a*/ j=i+3;/*a+3并不等于32770,而是-32766*/ f=123456.789e5;/*只有7位有效数字,后面的被舍去*/g=f+888;/*很大的数与一个很小的实数相加,"丧失"了小的数*/ printf("i=%d,i+3=%d\n",i,j);printf("f=%e,f+888=%e\n",f,g);/*按浮点数输出f,g之值*/}2.2.3变量(续)运行结果:i=32767,i+3=-32766f=1.2345678e+010,f+888=1.2345678e+010思考:对于此题如执行赋值j=-32768-1;结果变量j取值是多少?2.2.3变量(续)2.变量的初始化及赋值变量的值可以通过初始化取得,也可以在声明后,通过给变量赋值的方法取得。在声明变量的同时给变量指定值称为变量的初始化。一般形式:数据类型变量名1=表达式1,变量名2=表达式2,……;在程序中通过赋值运算符“=〞给变量赋值。一般形式:变量名=表达式;2.2.3变量(续)例2-4关于各类型数据、变量初始化及赋值。#include<stdio.h>#include<math.h>/*数学函数包含文件math.h*/voidmain(){ charc1='a';/*声明字符变量c1并赋予字符常量值'a'*/ unsignedshortj=-1;/*声明短整型变量j并赋初值-1*/ inta=3,b=4,c; /*声明整型变量a,b,c并分别给a,b赋初值3,4*/ floatx=2.5;/*声明单精度实型变量x并赋初值2.5*/2.2.3变量(续) doubles;/*声明双精度实型变量s*/ c=a*b;/*计算a*b,值赋给c*/ s=sqrt(x);/*计算x的平方根,值赋给s*/ printf("char:%d,short:%d,int:%d,float:%d,double:%d\n", sizeof(c1),sizeof(j),sizeof(c),sizeof(x),sizeof(s));/*输出各变量占内存的字节数*/printf("c=%d,j=%d,c1-32=%c,s=sqrt(x)=%f\n",c,j,c1-32,s);}2.2.3变量(续)运行结果:char:1,short:2,int:4,float:4,double:8c=12,j=65535,c1-32=A,s=sqrt(x)=1.581139思考:为什么输出的j的值不是-1,c1-32变成了‘A’?2.3运算符及表达式

在C语言中除了提供一般高级语言的算术运算符、关系运算符、逻辑运算符外,还提供赋值符运算符、位操作运算符、自增自减运算符等。甚至数组下标,函数调用都作为运算符。C语言提供了13类,共34种运算符。C语言丰富的运算符构成C语言丰富、灵活的表达式。2.3.1运算符和表达式概述运算符:运算符是表示实现某种运算的符号。表达式:是由运算符、常量、变量、函数、圆括号等按一定的规那么组成的式子。每一个表达式也都具有一定的值。2.3.1运算符和表达式概述(续)C语言的运算符分类归纳如下:(1)算术运算符:+-*/%++--(2)关系运算符:><==>=<=!=(3)逻辑运算符:!&&‖(4)位运算符:<<>>~|∧&(5)赋值运算符:=及其扩展赋值运算符(6)条件运算符:?:(7)逗号运算符:,2.3.1运算符和表达式概述(续)(8)指针运算符:*&(9)求字节数运算符:sizeof(10)强制类型转换运算符:(类型)(11)分量运算符:.和->(12)下标运算符:[](13)其他:函数运算符()2.3.1运算符和表达式概述(续)有关说明:〔1〕据运算符的运算对象的个数,C语言的运算符又分为单目运算符、双目运算符和三目运算符。例如单目运算符++,双目运算符〔+,-,*,/等〕,三目运算符?:。〔2〕运算符的优先级运算符的优先级是指不同的运算符在表达式中进行运算的先后次序。例如,算术运算符*、/的优先级高于+、-的优先级。〔3〕运算符的结合性当一个运算对象的两侧的运算符的优先级相同时,运算的结合方向称为结合性。运算符的结合性分为左结合和右结合两种。在C语言中,运算对象先与左面的运算符结合称左结合,如+、-、*、/的结合方向为自左向右;运算对象先与右面的运算符结合称右结合,如单目运算符++、--的结合方向是自右向左。2.3.1运算符和表达式概述(续)优先级运算符结合性1()、[]、->、.自左至右2!、~、++、--、-、(类型)、*、&、sizeof自右至左3*、/、%自左至右4+、-自左至右5<<、>>自左至右6<、<=、>、>=自左至右7==、!=自左至右8&自左至右9∧自左至右10|自左至右11&&自左至右12||自左至右13?:自右至左14=及其扩展赋值运算符自右至左15,自左至右2.3.2算术运算符及算术表达式1.根本算术运算符算术运算符分根本算术运算符和自增、自减运算符。根本算术运算符包括:+、-、*、/、%。+〔加法运算符或正值运算符。如10+3,a+b,+2〕-〔减法运算符或负值运算符。如10-3,a-b,-2〕*〔乘法运算符。如10*3,a*b〕/〔除法运算符。如10/3其值取整数3,10.0/3其值取浮点数3.333333〕%〔模运算符或求余运算符,%要求两侧均为整型数据。如10%3的值为1〕。2.3.2算术运算符及算术表达式(续)说明:〔1〕假设除法运算符的运算对象均为整型数据,那么结果为其商的整数局部,舍去小数局部。如13/7的结果为1。假设运算对象中有一个为负值,那么舍入的方向是不固定的。如,-13/7在有的机器上得到结果是-1,有的机器上得到结果是-2,但多数机器采取“向零取整〞方法,即13/7=1,-13/7=-1,取整后向零靠拢。〔2〕求余运算符〔%〕的运算对象必须是整型数据,运算结果的符号与被除数的符号相同,如:-13%7运算结果为-6,13%-7运算结果为6,-13%-7运算结果为-6。〔3〕如果参加+,-,*,/运算的两个数有一个为实数型,那么结果为double型,因为所有实数都按double型进行计算。2.3.2算术运算符及算术表达式(续)2.自增、自减运算符自增(++)和自减(--)运算符是单目运算符,其功能是使变量的值增1或减1。它们既可以作前缀运算符,如++i,--i;也可以作后缀运算符,如i++,i--。作为前缀和后缀运算符的处理方法是不同的:++i,--i在使用i之前,先使i的值加(减)1。假设i值为5,x=++i,那么x为6,i值为6。i++,i--在使用i之后,使i的值加(减)1。假设i值为5,x=i++,那么x值为5,i值为6。2.3.2算术运算符及算术表达式(续)自增或自减运算符在使用时,需要注意以下几点:〔1〕运算符的操作对象,只能是变量,而不能作用于常量或表达式。〔2〕运算符的优先级高于根本算术运算符,结合性是“自右向左〞右结合。如:-i++,它相当于-(i++)形式,a+++b相当于(a++)+b形式。3.算术表达式算术表达式:用算术运算符和括号将运算对象连接起来的、符合C语法规那么的式子,称为算术表达式。运算对象可以是常量、变量、函数等。2.3.2算术运算符及算术表达式(续)

数学表达式C语言算术表达式PI*r*r(-b+sqrt(b*b-4*a*c))/(2*a)(sin(a)-cos(b))/22.3.2算术运算符及算术表达式(续)说明:(1)C语言算术表达式的乘号〔*〕不能省略。例如:数学式,相应的C表达式应该写成:x*y。(2)C语言表达式中只能出现字符集允许的字符。例如:数学相应的C表达式应该写成:PI*r*r〔其中PI是已经声明的符号常量〕。(3)C语言算术表达式只使用圆括号改变运算的优先顺序〔不能用{}和[]〕。可以使用多层圆括号,此时左右括号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。2.3.3关系运算符及关系表达式

1.关系运算符关系运算符是对两个数据进行比较运算,判定两个数据是否符合给定的关系。假设符合给定的关系,那么关系成立,取真值〔1〕,否那么取假值〔0〕。C语言中的关系运算符有6种,按优先级分为两组:优先级6:>(大于),<(小于),>=(大于等于),<=(小于等于) 优先级7:==〔等于〕,!=〔不等于〕2.3.3关系运算符及关系表达式(续)2.关系表达式用关系运算符将两个表达式连接起来的符合C语法规那么的式子称为关系表达式。关系表达式的运算结果是一个逻辑值,即“真〞或“假〞。在C语言中关系运算结果为真,以整数1表示,结果为假,以整数0表示。例如:有inta=3,b=4;那么有:表达式表达式的值a==b0a+b>100a!=51关系运算符的优先级低于算术运算符的优先级,且等于〔==〕和不等于〔!=〕的优先级低于另外四种运算符的优先级。关系运算符的结合性是左结合性。2.3.4逻辑运算符及逻辑表达式

1.逻辑运算符C语言中提供三种逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)。它们的运算法那么见下表所示:运算符运算名称运算法则结合性&&逻辑与当两个操作对象都为“真”时,运算结果为“真”,其他情况运算结果都为“假”。左结合||逻辑或只有当两个操作对象都为“假”,运算结果才为“假”,其他情况运算结果都为“真”。左结合!逻辑非当操作对象为“真”时,运算结果为“假”;当操作对象为“假”时,运算结果为“真”。右结合2.3.4逻辑运算符及逻辑表达式(续)2.逻辑表达式用逻辑运算符将表达式连接起来的符合C语法规那么的式子称为逻辑表达式。逻辑表达式的运算结果只有两个值1和0〔1表示“真〞,0表示和“假〞〕。逻辑表达式常用于表示一些复杂的关系。例如:x>=0&&x<=100表示x的取值在0~100时表达式结果为1,否那么为0。2.3.4逻辑运算符及逻辑表达式(续)说明:〔1〕C语言没有逻辑类型数据,进行逻辑判断时,数据的值为非0,那么认作逻辑真,数据的值为0,那么认作逻辑假;而逻辑表达式的值为真,那么用整形数1表示,逻辑表达式的值为假,那么用整形数0表示。例如:当a=5.5,b=’a’时,!a,!b的值均为“假〞,即为0。a&&b的值为1,因为a和b均为非0值。〔2〕在进行逻辑运算时,逻辑表达式运算到其值完全确定时为止。例如:2.3.4逻辑运算符及逻辑表达式(续)运算表达式(a=1)&&(!a)&&(a=5)时,由于运算a=1之后运算!a的值为0,所以就不再进行a=5的运算了,因此a的值仍为1,而整个逻辑表达式的值为0。!(逻辑非)的优先级别较高为2,&&(逻辑与)的优先级为11,||(逻辑或)的优先级为12。例如:有inta=3,b=4,c=5;那么有:表达式表达式的值a&&b<00a==b||a>01!(a+b>10)1a>b&&b>c||b!=01,也相当于(a>b)&&(b>c)||(b!=0)表达式2.3.5条件运算符及条件表达式

1.条件运算符条件运算符是“?:〞,是C语言中唯一的三目运算符。可以代替if--else语句的完成简单的条件求值。2.条件表达式用条件运算符将两个表达式连接起来的符合C语法规那么的式子称为条件表达式。条件表达式的一般形式:表达式1?表达式2:表达式32.3.5条件运算符及条件表达式(续)运算过程:先计算表达式1的值,假设为“真〞,那么计算表达式2的值,整个条件表达式的值就是表达式2的值;假设表达式1的值为“假〞,那么计算表达式3的值,整个条件表达式的值就是表达式3的值。说明:(1)条件运算符优先级高于赋值运算符。如y=x>0?x:-x;相当于y=(x>0?x:-x);功能是将x的绝对值赋给y。(2)条件运算符结合性是右结合。如x>0?1:x<0?-1:0;相当于x>0?1:〔x<0?-1:0〕;。2.3.6赋值运算符及赋值表达式赋值运算符包括简单赋值运算符和复合赋值运算符。1.赋值运算符C语言的赋值运算符为“=〞,其作用是将赋值运算符右侧的表达式的值赋给其左侧的变量。例如:x=10; /*将10赋给变量x*/y=3*x*x+5*a; /*将表达式之值赋给变量y*/2.赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称作赋值表达式。它的一般形式为:变量=表达式2.3.6赋值运算符及赋值表达式(续)运算过程:先计算赋值运算符右侧的“表达式〞的值,将赋值运算符右侧“表达式〞的值赋值给左侧的变量,整个赋值表达式的值就是被赋值变量的值。赋值运算符优先级为14,是自右至左结合的。例如:a=b=c=8相当于a=(b=(c=8)),先计算c=8结果为8,将8赋值给b结果也是8,将8赋值给a结果也是8,最后整治赋值表达式之值为8,而变量a,b,c值均为8。说明:(1)赋值运算符左边必须是变量,右边C合法的表达式。(2)赋值符号“=〞不同于数学的等号,它没有相等的含义。〔“==〞相等〕(3)赋值运算时,当赋值运算符两边数据类型不同时,将由系统自动进行类型转换。2.3.6赋值运算符及赋值表达式(续)转换原那么是:先将赋值号右边表达式类型转换为左边变量的类型,然后赋值。进行类型转换时可能发生存储单元的扩展和载断,比方不同类型的整型数据间的赋值:按照存储单元的存储形式直接传送。由长型整数赋值给短型整数,截断直接传送,可能造成数据损失;由短型整数赋值给长型整数,低位直接传送,高位根据低位整数的符号进行符号扩展,如果是负数那么高位全部补1,如果是正数高位那么补0,以保证得到的值不变。2.3.6赋值运算符及赋值表达式(续)(4)C语言的赋值符号“=〞除了表示一个赋值操作外,还是一个运算符,也就是说赋值运算符完成赋值操作后,整个赋值表达式还会产生一个所赋的值,这个值还可以利用。例如:x=10+(y=5) (整个表达式值为15,x值为15,y值为5)a=(b=10)/(c=2) (整个表达式值为5,a值为5,b值为10,c值为2)3.复合赋值运算符及其表达式C语言允许在赋值运算符“=〞之前加上其他运算符,构成复合运算符。C语言可使用的复合赋值运算符有10种。它们是:+=、-=、*=、/=、%= 〔与算术运算符组合〕<<=、>>= 〔与位移运算符组合〕&=、∧=、|= 〔与位逻辑运算符组合〕2.3.6赋值运算符及赋值表达式(续)复合赋值表达式的一般形式为:<变量><双目运算符>=<表达式>它相当于:<变量>=<变量><双目运算符>〔表达式〕。例如:a+=b-c等价于a=a+(b-c),a*=b-c等价于a=a*(b-c),而不是a=a*b-c。假设a的初值为12,那么a+=a-=a*a的求解过程为:(a)先进行a-=a*a的运算,它相当于a=a-a*a=12-144=-132。(b)再进行a+=-132的运算,它相当于a=a+(-132)=-132-132=-264。2.3.7逗号运算符及逗号表达式

1.逗号运算符逗号运算符是“,〞,它的优先级低于赋值运算符,是左结合性。2.逗号表达式用逗号运算符将假设干个表达式连接成一个逗号表达式。一般形式如下:表达式1,表达式2,……表达式n逗号表达式的运算过程:先计算表达式1,再计算表达式2,……,最后再计算表达式n,而逗号表达式的值为最右边表达式n的值。2.3.7逗号运算符及逗号表达式(续)

例如:a=4.5,b=6.4,34.5-20.1,a-b该逗号运算表达式,它由四个表达式结合而成,从左向右依次计算,逗号表达式的值为a-b的值,即-1.9。值得注意的是,逗号运算符是C语言所有运算符中优先级最低。如:a=10,20;不同于a=(10,20);,前者a的值为10,表达式的值为20,后者a的值为20,表达式的值也为20。2.3.7逗号运算符及逗号表达式(续)例2-5关于运算符和表达式的程序实例。#include<stdio.h>voidmain(){ inta=6,b=7,c,d; /*声明变量并赋初值*/printf("a++=%d,++b=%d\n",a++,++b);/*输出a++,b++的值*/ printf(“a=%d,b=%d,a%%b=%d\n〞,a,b,a%b);printf("c=%d\n",c=a>b?a:b);/*输出表达式c=a>b?a:b的值*/ printf("d=%d\n",d=a>=0&&a+b>=10); d+=d*=(c,d=c,5*d); /*计算表达式d+=d*=(c,d=c,5*d)*/ printf("d=%d\n",d); /*输出d的值*/}2.3.7逗号运算符及逗号表达式(续)运行结果:a++=6,++b=8a=7,b=8,a%b=7c=8d=1d=640思考:分析表达式d+=d*=(c,d=c,5*d)的求值过程。2.3.8求字节运算符C求字节运算符是sizeof,它用于计算变量或某种类型的量在内存中所占的字节数。用法有两种:1.sizeof表达式功能是计算出表达式计算结果所占用内存的字节数。如在本章例2-4中的应用。2.sizeof〔类型名〕功能是计算出某种类型的量存储时所占用内存的字节数。如:sizeof(float)计算单精度实型数据在内存中所占的字节数,结果为4。2.3.9类型转换

整型、单精度、双精度及字符型数据可以进行混合运算。当表达式中的数据类型不一致时,首先转换为同一类型,然后再进行运算。C语言有两种方法实现类型转换:一是自动类型转换,另一是强制类型转换。1.自动类型转换在表达式进行运算时,不同类型的数据要转换为同一类型。2.3.9类型转换(续)自动转换的规那么见以下图所示:char,shortfloatintunsignedlongdoublelongdouble低

2.3.9类型转换(续)说明:(1)float型数据自动转换成double型;(2)char与short型数据自动转换成int型;(3)int型与double型数据运算,直接将int型转换成double型;(4)int型与unsigned型数据,直接将int型转换成unsigned型;(5)int型与long型数据,直接将int型转换成long型。主要原那么是:短字节的数据向长字节数据转换。2.3.9类型转换(续)2.强制类型转换强制类型转换是指通过强制类型转换运算符,将表达式的类型强制转换为所指定的类型。强制类型转换的一般形式为:〔数据类型〕〔表达式〕功能是将表达式的值强制转换成指定的数据类型。强制类型转换运算符优先级为2,是自右至左结合的。2.3.9类型转换(续)例如:〔int〕(10.5*10);是将10.5*10值转换成int型数据,表达式的值为105。而〔int〕10.5*10;表达式的取值为:100。数据类型转换是对操作数的值进行转换,并不改变操作数中变量本身的数据类型。例如:inti;floatx=10.5;i=int(x);/*临时将变量x的值转换为整型,x仍为实型*/2.3.9类型转换(续)类型转换过程中,当数据类型由低向高转换时,数据精度不会受到损失;而数据类型由高到低的转换,此时,数据精度会受到损失。习题

1.以下标识符中不属于C语言的根本数据类型的是。 A.char B.long C.bool D.float2.以下选项中属于C语言的数据类型是。A.复数型 B.逻辑型 C.双精度型 D.集合型3.以下标识符中,合法的标识符是。A.-abc1 B.1abc C._abc1 D.for4.在标准C语言中,不正确的int类型的常数是。A.32768 B.0 C.037 D.0xAF5.以下所列的C语言常量中,错误的选项是。A.0xFF B.1.2e0.5 C.2L D.'\72'6.在C语言中,合法的长整型常数是。A.0L B.4962710 C.324562& D.216D7.以下不正确的语句〔设有intp,q〕是。A.p*=3;

B.p/=q;

C.p+=3;

D.p&&=q;8.以下使i的运算结果为4的表达式是。

A.inti=0,j=0;(i=3,(j++)+i);

B.inti=1,j=0;j=i=((i=3)*2);

C.inti=0,j=1;

(j==1)?(i=1):(i=3);D.inti=1,j=1;

i+=j+=2;9.设n=10,i=4,那么赋值运算n%=i+1执行后,n的值是。A.0

B.3

C.2

D.110.逗号表达式(a=3*5,a*4),a+15的值为,a的值是。①A.15

B.60

C.30

D.不确定

②A.60

B.30

C.15

D.9011.如果a=1,b=2,c=3,d=4,那么条件表达式a>b?a:c>d?c:d的值为。A.1

B.2

C.3

D.412.在C语言中,不同类型数据混合运算时,要先转换成同一类型后进行运算。设一表达式中包含有int,long,unsigned和char类型的变量和数据,那么表达式最后的运算结果是类型的数据。这四种类型数据的转换规律是。①A.int

B.char

C.unsigned

D.long②A.int->unsigned->long->charB.char->int->long->unsignedC.char->int->unsigned->longD.char->unsigned->long->int13.写出经过以下运算后变量a的值,设a的初值为15:(1)a+=a; (2)a-=2;(3)a*=2+3; (4)a/=a+a;(5)a%=(5%=2) (6)a+=a-=a*=a14.假定x=10,y=20,z=30;试判断以下逻辑表达式的真(1)假(0)。(1)x<10||x>10 (2)(x<y+z)&&(x+10<=20)(3)x<10&&x>10 (4)x>y||y>x(5)!(x<y+z)||!(x+10<=20) (6)(!(x==y))&&(x!=y)&&(x<y||y<x)C有哪些根本数

温馨提示

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

评论

0/150

提交评论