版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计知识结构单元1 基本语法1.1 字符集、标识符和关键字1.2 常量和变量直接常量的表示方法符号常量的定义方法变量的定义方法变量的存储空间大小及变量的值变量的作用域与存储类型1.3 基本数据类型整型数据实型数据字符型数据字符串常量枚举型数据 字符型(char) 整型(short,int,long,unsigned) 单精度型(float) 实型 双精度型(double) 枚举类型(enum) 数组类型( ) 构造类型 结构体类型(struct) 共用体类型(union) 指针类型(*) 空类型(void)基本类型数据类型1.4 运算符与表达式算术运算符与算术表达式关系运算符与关系表
2、达式逻辑运算符与逻辑表达式赋值运算符与赋值表达式逗号运算符与逗号表达式条件运算符与条件表达式求字节运算符位运算符1.5 运算符的优先级、结合性和表达式的求值1.6 数据类型转换自动转换强制转换1.7 基本输入输出函数scanf( )与printf( )getchar( )与putchar( )gets( )与puts( )1.8 编译预处理宏定义 文件包含条件编译1.9 类型定义 typedef2 控制结构2.1 结构化程序的三种基本结构2.2 语句种类表达式语句说明语句函数调用语句空语句复合语句控制语句2.3 分支结构与分支语句if语句的形式和执行流程嵌套的if语句的形式和执行流程switc
3、hcase语句的形式和执行流程2.4 循环结构与循环语句while语句的形式和执行流程dowhile语句的形式和执行流程for语句的形式和执行流程循环语句的嵌套2.5 非结构化控制语句break语句continue语句goto语句2.6 基本算法的实现递推法迭代法穷举法递归法辗转相除法求最大公约数求素数(质数)求水仙花数输出九九乘法表输出特殊图形(如等腰三角形、平行四边形等)3 函数3.1 标准函数与用户自定义函数3.2 函数的定义与调用函数的定义形式函数的调用形式函数调用前的声明实参、形参及参数传递函数的返回值及其类型3.3 函数的嵌套调用与递归调用3.4 常用库函数的调用格式及其头文件4
4、数组4.1 数组的概念数组及数组元素(下标变量)数组的用途数组元素的存储结构(便于寻址)4.2 一维数组一维数组的定义和初始化方法一维数组的逻辑结构和存储结构一维数组元素的引用一维数组的输入与输出4.3 二维数组二维数组的定义和初始化方法二维数组的逻辑结构和存储结构二维数组元素的引用二维数组的输入与输出4.4 字符数组和字符串一维字符数组的定义和初始化方法一维字符数组的输入与输出用字符数组实现字符串字符串的输入输出方法4.5 常用算法的实现冒泡法排序、选择法排序顺序查找、折半查找删除法插入法在一组数中求最大值和最小值将数组元素逆置输出杨辉三角形求转置矩阵5 指针5.1 指针的概念和指针的定义变
5、量的地址和变量的值指针和指针变量指针的定义形式多级指针指针运算符和地址运算符5.2 指针的赋值和运算指针的初始化和赋值指针运算5.3 指针和函数指针作函数的参数及参数的传递形式指针函数的定义形式指向函数的指针5.4 指针和数组数组名是常量指针一维数组元素的指针表示二维数组元素的指针表示指向数组元素的指针指向一维数组的指针指向含M个元素的一维数组的指针5.5 指针数组指针数组的定义用字符型指针数组实现字符串数组6 结构体和共用体6.1 结构体类型与结构体变量结构体类型的用途结构体类型的定义结构体变量的定义结构体变量的引用(成员运算符)6.2 结构体数组结构体数组的定义结构体数组的初始化和赋值6.
6、3 结构体类型数据的指针结构体变量的指针结构体数组的指针6.4 结构体与函数结构体指针和结构体变量作函数的参数返回结构体类型数据的函数6.5 结构体位段6.6 共用体类型和共用体变量共用体类型和共用体变量的定义共用体变量的引用6.7 枚举类型和枚举型变量枚举类型的定义枚举型变量与枚举元素7 文件操作7.1 文件的基本概念文件、文件名、扩展名流式文件文件的分类缓冲文件系统和非缓冲文件系统FILE结构和FILE指针变量7.2 文件的打开与关闭文件的打开与打开函数 fopen( )文件的关闭与关闭函数 fclose( )7.3 文件的读写操作读写一个字符的函数 fgetc( )和fputc( )读写
7、一个字符串的函数 fgets( )和fputs( )读写一个数据字块的函数 fread( )和fwrite( )文件的格式化读写函数 fscanf( )和fprintf( )7.4 文件定位与随机读写文件位置指针随机定位函数 fseek( )检测当前位置指针的位置函数 ftell( )文件位置指针复位函数 rewind( )检测文件是否结束的函数 feof( )链表 引用自身的结构和链表的概念 结构中的某个成员项,为指向该结构类型自身的指针,则称为引用自身的结构。 struct node int num ; struct node *next ; ;指向自身的结构。链表的概念链表是一种动态存储
8、分配结构,通过指针相连,数据可以不连续存放。如用数组存放数据时,必须事先定义固定的长度(即元素的个数)。如果事先难以确定元素的个数,则必须把数组定义的足够大,显然这会造成内存的浪费。链表则没有这种缺点,它根据需要开辟内存单元。A1249head13561249B1475C1021DNULL135614751021链表(单向链表)链表有一个“头指针”变量,它存放一个地址,该地址指向一个元素。链表中每个元素称为“结点”,每个结点都应包含两个部分:用户需要用的实际数据和下一个结点的地址。最后一个结点不指向其他元素,它称为“表尾”,它的地址部分放一个“NULL”,链表到此结束。链表中各元素不是连续存放
9、的。要找某一元素,必须要找到上一个元素,根据它所提供的下一元素的地址才能找到下一个元素。如果不提供头指针,则整个链表都无法访问。这种链表的数据结构,必须利用指针变量才能实现,即一个结点中应包含一个指针变量,用它存放下一结点的地址。2、简单链表例:建立一个简单的链表,由3个学生数据的结点组成。#include /*a7.c*/struct student int num ; float score ; struct student *next ; ;main() struct student a,b,c,*head,*p; a.num=101; a.score=89.5; b.num=102;
10、b.score=90; c.num=103; c.score=56; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; while (p!=NULL) printf(%d,%5.1fn,p-num,p-score); p=p-next; 实例运行上例是比较简单的,所有结点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为“静态链表”。前面讲过,链表结构是动态生地分配存储的,即在需要时才开辟一个结点的存储单元 以便插入或追加节点,删除节点后需要释放节点占用的内存单元。C 语言提供了相应的函数。3.处理动态链表所需的函数 voi
11、d *malloc(unsigned int size) :在内存的动态存储区中分配一个长度为size的连续空间。成功,则返回一个void型的空指针,否则,返回NULL. 使用方法: ptr=malloc(size);分配内存的字节数。返回空类型的指针。成功:返回内存的地址。失败:返回NULL。ptrvoid free(ptr) 作用: 释放ptr指向的内存空间。(3)void *calloc(unsigned n,unsigned size) 在内存的动态区存储中分配个长度为size的连续空间。函数返回分配域的起始地址;如果分配不成功,返回。4.建立动态链表例:写一函数建立一个有多名学生数据
12、的单向动态链表。(当学号输入为0时,表示链表建立结束)算法:设3个指针变量:head,p1,p2,都是指向结构体类型数据head:存放第1个结点的地址,即头指针p1:指向当前新开辟的结点p2:指向前一个结点(即已建成的链表中的最后一个结点)所谓建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。结构体的定义:#include #define LEN sizeof(struct student)struct nodeint num;struct node *next;建立链表的函数:struct node *creat() st
13、ruct node *head,*last,*p; int num; head=last=NULL; scanf(%d,&num); while (num0) p=(struct node *)malloc(sizeof(struct node); p-num=num; p-next=NULL; if (head=NULL) head=p; else last-next=p; last=p; scanf(%d,&num); return head; 5.输出链表将链表中各结点的数据依次输出。首先要知道链表第一个结点的地址,也就是要知道head的值。然后设一个指针变量p,先指向第一个结点,输出p
14、所指的结点,然后使p后移一个结点,再输出,直到链表的尾结点。void output(struct node *head) struct node *p; p=head; while (p!=NULL) printf(%3d,p-num); p=p-next; main() struct node *head; head=creat(); output(head); getch(); 6.对链表的删除操作已有一个链表,希望删除其中某个结点。ABCDEABCDE原来链表将C从链表中删除例:写一函数以删除动态链表中指定的结点。思路:从P指向的第一个结点开始,检查该结点中的num的值是否等于要删除的那
15、个学号。如果是,就将该结点删除,不是,就将指针p后移一个结点,直到遇到表尾为止。设两个指针p1,p2,p1为当前结点,p2指向刚才检查过的结点。找到要删除的结点,又有两种情况:A.要删除的是第一个结点B.要删除的不是第一个结点head=p1-nextp2-next=p1-next删除结点的函数:struct student *del (struct student *head,int num)struct student *p1,*p2;if (head=NULL) printf (nlist is nulln);p1=head;while (p1-num!=num & p1-next!=NU
16、LL) p2=p1;p1=p1-next;if (p1-num=num)if (p1=head) head=p1-next;else p2-next=p1-next;printf (delete:%dn,num);elseprintf (%ld not been found!,num);return(head);7.对链表的插入操作(在尾部追加节点)步骤:为新节点分配内存。建立新节点的成员项。建立链接关系。在链表最后插入一个结点:struct student *Add(struct node *head)struct student *p1, *p2,*p3;p1=head;if(head!=
17、NULL) while(p1-next!=NULL) p1=p1-next;p2=(struct node*)malloc(sizeof(struct node);scanf(%d,&p2-num);if(head=NULL) head=p2;else p1-next=p2;p2-next=NULL;printf(Add Succee.n);return (head);C 语 言 程 序 设 计主 讲:叶 斌E-mail: 2022/7/1037课程安排总学时:56学时(理论32学时 实验24学时)教材:C语言程序设计 (第一版). 叶斌,陈世强主编,北京:科学出版社,2012年6月参考教材:
18、C语言程序设计(C99版) .陈良银, 游洪跃, 李旭伟主编. 北京: 清华大学出版社, 2006 C语言程序设计(第四版)谭浩强著.北京:清华大学出版社,2010C语言程序设计教程(第2版).李丽娟主编.北京: 人民邮电出版社, 2009 2022/7/1038第1章 C语言及程序设计概述【学习目标】 掌握程序、程序设计语言及程序设计方法等基本概念;了解计算机求解问题的基本过程;了解C语言的发展及特点;掌握C语言程序的基本结构以及C语言的基本语法单位;掌握C语言程序的开发过程与开发环境。【重 难 点】 重点:程序设计语言与程序设计方法的基本概念,C语言基本语法单位以及C语言程序的基本结构。
19、难点:计算机求解问题的基本过程,C语言源程序生成可执行程序的过程。【教学安排】 学时:2学时2022/7/10391.1 程序与程序设计语言1.1.1 程序的概念 什么是计算机程序?计算机程序是指可以被计算机或其他信息处理装置连续执行的一条条指令的集合。程序是一组有序的指令(是能够完成特定任务的指令序列)。使用程序设计语言编写的用来使计算机完成一定任务的一系列命令的集合便构成程序。编写程序的工作则称为程序设计。2022/7/10401.1 程序设计语言与程序设计什么是程序设计语言?为人和计算机之间都能识别和交流而制定的一种特定语言,这种特定的语言就是程序设计语言。可以从不同的角度对程序设计语言
20、进行分类:通用语言专用语言结构化语言模块化语言面向对象语言机器语言汇编语言高级语言低级语言高级语言从应用范围分从程序设计方法分从与机器的联系程度分2022/7/1041只有用机器语言编写的程序才能在计算机上直接执行,用其他语言编写的源程序都需要翻译后才能被计算机所理解并执行。用于语言翻译的工具称为语言处理程序或翻译程序,用不同的程序设计语言编写出来的源程序,需要使用不同的语言处理程序来翻译。通过语言处理程序翻译后的目标代码称为目标程序。1.1 程序设计语言与程序设计2022/7/1042高级语言源程序的翻译方式: 解释方式解释程序高级语言源程序执行结果解释程序数据 编译方式编译程序高级语言源程
21、序目标程序编译程序数据可执行程序连接程序执行结果执行1.1 程序设计语言与程序设计2022/7/10431.1 程序与程序设计语言 1.1.2 程序设计语言的发展 人们常把编写程序的过程称为程序设计。在进行程序设计时离不开程序设计语言。程序设计语言的种类很多,从其发展历史以及功能情况来划分可以大致划分成五个阶段:1、机器语言:计算机可以直接识别和执行的二进制语言。如: 加法指令: 1 0 0 0 0 0 0 0 减法指令: 1 0 0 1 0 0 0 0特点:计算机可以直接识别和执行,效率高,节省内存;但难以阅读和记忆。2022/7/10441.1 程序与程序设计语言2、汇编语言: 用“助记符
22、”来表示机器指令。如: ADD A, B SUB A, B计算机不能直接识别和执行用汇编语言编写的源程序,它必须经过一个叫汇编程序的系统软件翻译成机器语言程序(即目标程序)后才能执行。3、算法语言: 即高级语言,不依赖于机器,降低了编程的难度。 如:C、PASCAL、FORTRAN等,用+和-来 表示加减运算。计算机也不能直接执行算法语言描述的源程序,必须先经过编译程序或解释程序翻译成目标程序后,才能由计算机执行。2022/7/10451.1 程序与程序设计语言4、面向任务的程序设计语言: 是非过程化的语言,不需要知道问题是如何求解的。例如:要从某学生表SS用数据库(SQL)查询语言获取表中记
23、录的信息,采用SELECT语句,描述如下: SELECT SSNO,SSNAME,SSAGE,SSSEX FROM SS5、面向对象的程序设计语言: 认为系统是由许多对象组成的,对象通过消息相互 联系和相互作用,从而完成系统的功能。如C+, 设计的程序更易懂, 更适合更大规模的程序开发。2022/7/10461.1 程序与程序设计语言1、C语言的发展概况 起源于1968年发表的CPL语言 。 语言是美国电话电报公司(AT&T)贝尔实验室于70年代初研制出来的。发明者是Dennis . M . Ritchie。1978年,由B . W. Kernighan和D . M . Ritchie合著的T
24、he C Programming Language一书,称之为“K&R”标准。后来又被多次改进,并出现了多种版本。1983年开始,美国国家标准化协会(ANSI),根据语言问世以来各种版本对语言的发展和扩充,制定了ANSI C标准,于1989年颁布,称为C89标准。1994、1995年又两次做了修订,即C89的95修正案。1999年产生了C99新标准。 目前在微型计算机上使用的有Microsoft C,Quick C,Turbo C,Borland C 等多种版本。1.1.3 C语言的发展及特点47C语言的发明者Dennis M. Ritchie/who/dmr/1.1 程序与程序设计语言48R
25、itchie和Thompson在开发UNIX49Ritchie接受美国国家技术勋章(1)C语言仍然是编写操作系统的首选C语言为操作系统而生,它能直接与计算机底层打交道,精巧、灵活、高效。很多重量级软件都是用C写的。(2)对程序运行效率有苛求的地方可选择C语言C语言是目前执行效率最高的高级语言。(3)用C语言开发的系统,还需要C语言的支持应用C语言写出来的软件,需要C语言继承或维护。(4)C语言已成为编程思想交流的首选媒介因为学习过C语言和熟悉C语言语法风格的人最多。(5)很多流行语言、新生语言都借鉴了C语言的思想和语法从C+,到Java,再到C#,还有php等。2022/7/10501.1 程
26、序与程序设计语言2、为什么要学C语言51C语言是最受欢迎的程序设计语言 如下图所示,是TIOBE在2014年公布的程序设计语言受欢迎程度的趋势图。可以看出: 在历年的统计中,C语言始终处于最受欢迎的前两位。 在列举的当今最受欢迎的10种语言中,除C语言以外的其他9种里面,其中6种都直接使用、或者引用、或者部分借鉴了C语言的语法(如它们语句的结尾都要有一个分号“;”)。只有Visual Basic、Python和Ruby的语法里找不到C语言的影子。1.1 程序与程序设计语言TIOBE世界编程语言排行榜2022/7/10522022/7/10531.1 程序与程序设计语言1)语言简洁、紧凑,使用方
27、便、灵活 2)具有结构化的控制语句,以函数作为程序模块以实现程序的模块化。3)数据类型丰富 4)允许直接对位、字节和地址进行操作 5)可直接操纵硬件 6)生成的目标代码质量高,程序执行效率高 7)可移植性好 3、C语言的特点2022/7/10541.2 程序设计方法程序设计:使用某种程序设计语言编写一些代码来驱动计算机完成特定功能的过程。算法:用计算机解题的方法和步骤。程序设计的基本过程:分析所求解的问题,抽象数学模型,设计合适的算法,编写程序(编写代码),调试运行直至得到正确结果、编写程序文档等阶段。2022/7/10551.2 程序设计方法程序设计的基本过程2022/7/10561.2 程
28、序设计方法 1.2.1 结构化程序设计方法 1. 结构化程序设计特征结构化程序设计的特征主要有以下几点:(1)以三种基本结构(顺序、分支、循环,详细内容参考第3章)的组合来描述程序;(2)整个程序采用模块化结构;(3)有限制地使用goto转移语句,在非用不可的情况下,也要十分谨慎,并且只限于在一个结构内部跳转,不允许从一个结构跳到另一个结构,这样可缩小程序的静态结构与动态执行过程之间的差异,使人们能正确理解程序的功能;2022/7/10571.2 程序设计方法(4)以控制结构为单位,每个结构只有一个入口,一个出口,各单位之间接口简单,逻辑清晰;(5)采用结构化程序设计语言书写程序,并采用一定的
29、书写格式使程序结构清晰,易于阅读;(6)注意程序设计风格。2. 自顶而下的设计方法 结构化程序设计的总体思想是采用模块化结构,自上而下,逐步求精。 2022/7/10581.2 程序设计方法面向对象程序设计方法(Orient Object Programming,缩写为OOP)认为客观世界是由各种各样的实体组成的,这些实体就是面向对象方法中的对象。对象之间的交互通过发送消息来实现,从而驱动程序执行来完成系统的功能。 面向对象程序设计把数据看作程序开发中的基本元素,并且不允许它们在系统中自由流动。它将数据和操作这些数据的函数紧密的连结在一起,并保护数据不会被外界的函数意外的改变。1.2.2 面向
30、对象程序设计方法 2022/7/10591.3 C语言程序的基本结构 一个完整的语言程序,是由一个main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个main()函数构成/*功能:仅由main()函数构成的语言程序示例*/*源程序名:CH0105.C*/ /*01*/ #include/*02*/main()/*03*/ /*04*/printf(“Hello World!n”);/*05*/程序运行时,在屏幕上显示一行英文:Hello World! 。 说明:(1)main是主函数的函数名,表示这是一个主函数。(2)函数调用语句,printf函数的功能是把要输出的内容送到显示
31、器去显示。(3)printf函数是一个由系统定义的标准函数,可在程序中直接调用。(4) #include是编译预处理命令,其作用是将某个已经存在的文件包含到程序中。 2022/7/10601.3 C语言程序的基本结构1.3.1 C程序的结构特点 ()一个语言源程序可以由一个或多个源文件组成。()每个源文件可由一个或多个函数组成,关于函数的内容将在以后第四章介绍。()函数是语言程序的基本单位。一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。main()函数的作用,相当于其它高级语言中的主程序;其它函数的作用,相当于子程序。()C语言程序总是从main()函数开始执行。
32、一个语言程序,总是从main()函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。2022/7/10611.3 C语言程序的基本结构1.3.1 C程序的结构特点 ()源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。()每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“”之后不能加分号。()标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。2022/7/10621.3 C语言程序的基本结构()所有语句都必须以分号“;”结束,函数的最后一个语句也不例外。(
33、)程序行的书写格式自由,既允许一行内写几条语句,也允许一条语句分写在几行上。如果某条语句很长,一般需要将其分写在几行上。()允许使用注释。C语言的注释格式为: /* */1.3.2 源程序书写格式 2022/7/10631.4 C语言的基本语法单位 1.4.1 语言的字符集 1.4.2 关键字1.4.3 标识符 1.4.4 分隔符 1.4.5 注释2022/7/10641.4.1 语言的字符集字符是组成语言的最基本的元素。语言字符集由字母,数字,空格,标点和特殊字符组成。在字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号。()字母:小写字母az共26个,大写字母AZ共26个;(
34、)数字:09共10个;()空白符:空格符、制表符、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序对它们忽略。因此在程序中使用空白符与否,对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性;()标点和特殊字符。2022/7/10651.4.2 关键字 关键字是由语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。标准C定义的32个关键字如下表:2022/7/10661.4.3 标识符在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义
35、。C 规定,标识符只能是字母(AZ,az)、数字(09)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。以下标识符是合法的: ax_3xBOOK_1sum5以下标识符是非法的: 3s 以数字开头 s*T 出现非法字符* -3x 以减号开头 bowy-1 出现非法字符减号2022/7/10671.4.4 分隔符 语言中采用的分隔符包括逗号和空格。(1)逗号主要用在类型说明和函数参数表中,分隔各个变量,逗号也可以做运算符,具体参照本教程第二章。(2)空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的空格符作间隔,否则将会出现语法错误。例如,int a;不能写
36、成 inta; C编译器会把inta当成一个标识符处理,其结果必然出错。 2022/7/10681.4.5 注释 C 语言的注释符是以“/*”开头并以“*/”结尾的串。程序编译时,不对注释作任何处理。(1) “/*”和“*/” 必须成对使用,且“/”和“*”、以及“*”和“/”之间不能有空格,否则出错。为避免遗漏必须配对使用的符号,例如注释符号、函数体的起止标识符(花括号)、圆括号等等,在输入时,可连续输入这些起止标识符,然后再在其中进行插入来完成内容的编辑。在起止标识符嵌套时,以及相距较远时,这样做更有必要。(2)注释的位置,可以单占1行,也可以跟在语句的后面。(3)如果1行写不下,可另起1
37、行继续写。(4)注释中允许使用汉字。在非中文操作系统下,汉字将以乱码呈现,但不影响程序运行。2022/7/1069C语言是一种编译型程序语言。调试一个C程序需要经历4个基本步骤:编辑、编译、连接和执行。1.5 C语言程序的开发过程与环境正确正确正确有错误有错误编译 连接 运行编辑有错误2022/7/10701.5.1 源程序的编辑、编译、连接与执行1. 编辑(Edit)编程人员把程序代码输入计算机的过程或修改已经存在的代码的过程就是编辑。 2. 编译(Compile/Make)对源程序的语法和逻辑结构等进行检查以生成目标文件(Object)的过程就是编译。3. 连接(Link)连接的作用是使用
38、系统提供的连接程序(或称连接器Linker)把目标文件、其他目标程序模块与系统提供的标准库函数有机结合起来,生成可以运行的可执行文件。4. 运行(Run)在MS-DOS下通过直接键入可执行文件主文件名后按回车键来运行,Windows下可通过双击可执行文件图标运行。 2022/7/10711.5.2 Visual C+ 6.0集成开发环境Microsoft Visual C+ (下简称MSVC,VC)是美国微软公司生产的基于其Windows系统的软件开发工具。第2章 基本数据类型和表达式第2章 基本数据类型和表达式2.1基本数据类型2.2常量与变量2.3运算符与表达式2.4数据类型转换2.1基本
39、数据类型什么是数据类型?所谓数据类型就是一组性质相同的值的集合,以及定义于这个值集合上的一组操作的总称。数据类型决定:数据占内存的字节数、数据的取值范围和其上可进行的操作。数据类型是按被定义数据的性质、表示形式、占据存储空间的多少及构造特点来划分的。 数据类型总表C数据类型基本类型构造类型指针类型空类型 void字符类型 char枚举类型 enum整型实型单精度型 float双精度型 double数组结构体 struct共用体 union短整型 short长整型 long基本整型 int2.1基本数据类型2.1基本数据类型 1、整型数据的分类: 根据数据所占的二进制位数分为: (1)短整型:以
40、short表示 占2字节 (2)基本型:以int表示 占2或4字节 (3)长整型:以long表示 占4字节 同样存储长度的数据又分 无符号型(unsigned)和有符号型(signed) 故可组合出六种类型: 有符号短整型: signed short int 无符号短整型: unsigned short int 有符号基本类型:signed int 无符号基本类型:unsigned int 有符号长整型: signed long int 无符号长整型: unsigned long int2.1.1整型数据2.1基本数据类型数据类型类型说明关键字所占字节取值范围有符号短整型signed shor
41、t int2-3276832767 即-215 (215-1)无符号短整型unsigned short int2065535 即0 (216-1)有符号基本整型signed int2或4-3276832767 即-215 (215-1)无符号基本整型unsigned int2或4065535 即0 (216-1)有符号长整型signedlong int4-21474836482147483647 即-231 (231-1)无符号长整型unsigned long int404294967295 即0 (232-1)3、整型数据的取值范围2.1基本数据类型2、整型数据的三种表达形式: (1) 十进
42、制形式:与数学上的整数表示相同; 例如: 12, -100, 0 (2) 八进制形式:在数码前加数字0; 例如: 012=1*81+2*80=10(十进制) (3) 十六进制形式:在数码前加0X(数字0和字母X)。 例如: 0 x12=1*161+2*160=18(十进制)注意: * 八进制的数码范围为07; 018 * 十六进制的数码除了数字09外,还使用英文字母a f (或A F)表示1015。 如:0 x1e *整型数据后加L或l,则认为是长整型。如128L *整型数据后加U或u,则认为是无符号型。如2998u数据类型类型说明关键字占用字节取值范围精度(位)单精度浮点型float4-3.
43、410-38 3.410387双精度浮点型double8-1.710-308 1.710308152.1基本数据类型1、实型数据的分类及取值范围2.1.2实型数据(浮点型数据)2.1基本数据类型2、实型数据的两种表示形式:(1) 十进制小数形式:由数字和小数点组成; 例如: 3.4, 4., .3。(2) 指数形式:正负号尾数e(E)阶码 例如: 12.5e-6 表示12.510-6 。注意: 小数点不能单独出现; 0. .0 . e或E的两边必须有数,且其后面阶码必须为整数; 如: 6E0.2 e5 规范化的指数形式2.1基本数据类型2.1.3字符型数据1、字符(1) 用单撇号括起来的一个字
44、符;如:A、 1、?等。(2) 用单撇号括起来的由反斜杠()引导的转义字符。例如:字符A的ASCII码为: 65D(十进制)=41H(十六进制)=101Q(八进制) 字符A可以表示为A、x41、101。字符型数据与整型数据可以进行算术运算2、字符型数据的分类: char 和 unsigned char;3、字符型数据的值域: 每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。4、字符串: 是用一对双撇号括起来的字符序列。 如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。 2.1基本数据类型(2)直接常量:整型常量 请
45、点击:实型常量 请点击:字符常量 请点击:字符串常量 请点击:如 #define PRICE 30定义:程序运行时其值不能改变的量(即常数)分类:(1)符号常量:用标识符代表常量定义格式: #define 符号常量 常量例 符号常量举例#define PRICE 30main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:total=3002.2常量与变量2.2.1常量注意:定义符号常量时,一般用大写字母是宏定义预处理命令,不是C语句三种形式:十进制整数:由数字09和正负号表示.如 123,-456,
46、0八进制整数:由数字0开头,后跟数字07表示.如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示. 如0 x123,0Xff例 12 与 12L例 30000 为int型 65536 为long int 型说明:整型常量的类型是根据其值所在范围确定其数据类型若在整常量后加字母l或L,认为它是long int 型常量问题:0123 = ( )100 x123 = ( )100Xff = ( )1083291255问题:0123 = ( )100 x123 = ( )100Xff = ( )101、整型常量(整常数)2.2常量与变量表示形式:十进制数形式:(必须有小数点) 如0
47、.123, .123, 123.0, 0.0, 123.指数形式:(e或E之前必须有数字;阶码必须为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 实型常量的类型默认double型在实型常量后加字母f或F,认为它是float 型2、实型常量(实数或浮点数)2.2常量与变量例 转义字符举例(ch2_001.c,ch2_004.c) main() printf(101 x42 Cn); printf(I say:How are you?n);运行结果:(屏幕显示)A B CI say:”How are you?”3、字符常量2.2常量与变量用单撇号括起来的一个
48、字符或以一个“”开头的字符序列4、字符串常量(用双撇号括起来的字符序列)2.2常量与变量注意字符常量与字符串常量的区别:(1)字符型常量用单撇号括起来,而字符串常量用双撇号括起来(2)字符常量只能是单个字符,而字符串常量可以含一个或多个字符。(3)字符常量在内存中占一个字节存储空间。字符串常量所占内存空间的字节数等于字符串中所包含的字符个数加1。添加的这一个字节用于在字符串的尾部存放字符0,表示字符串的结束,以便于对字符串的运算处理。 (4)可把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量,而字符串常量是用字符型数组存储的。 h e l l o 0例 字符串“hello
49、”在内存中a a 0 a“a”例: char ch; ch=A; 例: char ch; ch=“A”; 变量定义的一般格式: 数据类型 变量1,变量2,变量n;变量定义位置:一般放在函数开头例1 int student; stadent=19; /Undefined symbol stadent in function main 变量的使用:先定义,后使用编译程序根据变量定义为其分配指定字节的内存单元.地址int a=1, b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数决定分配字节数和数的表示范围定义:程序运行时其值可以改变的量。为引用变量方便,需给变量一个名字,即变量名。
50、2.2常量与变量2.2.2变量合法标识符例: int a,b,c; float data;变量初始化:定义时赋初值 例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1;main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);变量定义可执行语句 #define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE;
51、 ch1=ch2-A+a; printf(“total=%f,ch1=%cn”,total,ch1); 宏定义变量定义输出结果运行结果:total=37.500000, ch1=d例2.12.2常量与变量运算符功能与运算量关系要求运算量个数:单目、双目、三目要求运算量类型运算符优先级别:决定计算的优先次序结合方向: 一运算量两侧运算符优先级相同时,按结合型处理。结果的类型学习运算符应注意:2.3运算符与表达式C运算符算术运算符:(+ - * / % + -)关系运算符:( = !=)逻辑运算符:(! & |)位运算符 :( | &)赋值运算符:(= 及其扩展)条件运算符:(?:)逗号运算符:(
52、,)指针运算符:(* &)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(. -)下标运算符:()其它 :(( ) -)2.3运算符与表达式基本算术运算符: + - * / %结合方向:从左向右优先级: - -* / % - + - (2) (3) (4)说明:“-”可为单目运算符时,右结合性/除数不能为0两整数相除,结果为整数%要求两侧均为整型数据,结果符合与左侧运算量一致两运算量类型相同时,运算结果类型与运算量相同两运算量有一个是实型时,结果类型为双精度实型例 5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%22-2.51-110
53、()2.3运算符与表达式2.3.1算术运算符和表达式作用:使变量值加1或减1种类:前置 +i, - -i (先执行i+1或i-1,再使用i值)后置 i+,i- - (先使用i值,再执行i+1或i-1)例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=42.3运算符与表达式例 -i+ i=3; printf(“%d”,-i+); 例 -i+ -(i+) i=3; pr
54、intf(“%d”,-i+); /-3 例 j+k; (j+)+k;说明:+ - 不能用于常量和表达式,如5+,(a+b)+ -结合方向: 自右向左优先级:+ - -* / % -+ - (2) (3) (4)2.3.2自增、自减运算符关系运算符种类: = !=结合方向:自左向右优先级别:=!=优先级6(高)优先级7(低)例 ca+b /c(a+b) a=bc /a=(bb (ab)=c f=abc/表达式值1/表达式值1/f=02.3运算符与表达式 关系表达式的值:是逻辑值“真”或“假”,用1和0表示2.3.3关系运算符和表达式(1)不要将“=”错写成“=”(3)用“=”比较两个浮点数时,由
55、于存储误差的原因,有时会出错误结果。如 1.0/7.0*7.0=1.0 结果为可改写为:fabs(1.0/3.0*3.0-1.0)0 结果为 A100 结果为10关系运算注意(1)2.3运算符与表达式0ab!a!ba&ba|b真假真假假假真真逻辑运算符:种类: ! & |逻辑运算真值表真假假假假假真真假假真真真假真真C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,2.3运算符与表达式2.3.4逻辑运算符和表达式(1)! (2)& (11)| (12)高低例 a=x & xb优先级:结合方向:! :从右向左& :从左向右| :从左向右/ (a=x)
56、 & (xb)2.3运算符与表达式2.3.4逻辑运算符和表达式(2)例 a=4;b=5; !a a&b a|b !a|b 4&0|2值为1值为0值为1值为1值为12.3运算符与表达式2.3.4逻辑运算符和表达式(3)例 a&b例 a|b例 a=1;b=2;c=3;d=4;m=1;n=1; (m=ab)&(n=cd)短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符2.3运算符与表达式/只在a为真时,才判别b的值;/只在a为假时,才判别b的值;/结果m=0,n=12.3.4逻辑运算符和表达式(4)基本赋值运算符符号: =格
57、式: 变量标识符 = 表达式作用:将一个数据(常量或表达式)赋给一个变量例 a=3; c=d+2;2.3运算符与表达式结合方向:自右向左优先级: 14左侧必须是变量,不能是常量或表达式例 3=x-2*y; a+b=3;赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例 float f; int i; int i; i=2.56; /结果i=2; i=10; f=i;则 f=10.0 赋值表达式的值与变量值相等,且可嵌套例: a=b=c=5 a=(b=10)/(c=2)/表达式值为5,a,b,c值为5/表达式值5,a=5,b=10,c=22.3.5赋值运算符和表达式2.3运算符与表达
58、式例:a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3复合赋值运算符+= -= *= /= %= = = &= = |=2.3运算符与表达式一般形式: 表达式1 ? 表达式2 : 表达式3执行过程expr1取expr2值取expr3值非0=0例 求 a+|b| b0?a+b:a-b例 (a=b)?Y:N (x%2=1)?1:0条件运算符可嵌套 如 x0?1:(xb?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型例 xy?1:1.5 /xy ,值为1.0; xy ,值为1.52.3.6条件运算符和表达式2.3运算符
59、与表达式 一般形式:sizeof(变量名)sizeof(类型名) 功能:计算并返回括号中变量或类型说明符的字节数。 例:int i , j;float x;i = sizeof(x);/结果为4j = sizeof(int);/结果为42.3.7求字节运算符2.3运算符与表达式形式:表达式1,表达式2,表达式n结合性:从左向右优先级: 15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例 a=3*5,a*4 a=3*5,a*4,a+5/a=15,表达式值60/a=15,表达式值20例:/*ch2_6.c*/#include main() int x,y=7; float z=4;
60、 x=(y=y+6,y/z); printf(x=%dn,x);运行结果:x=32.3.8逗号运算符和表达式自动类型转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时强制类型转换2.4数据类型转换1.自动类型转换转换规则:不同类型数据运算时先自动转换成同一类型2.4数据类型转换doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换 例1 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中通服供应链股份有限公司江西分公司业务经理岗位招聘2人笔试备考试题及答案详解
- 2026江西新余市综合检验检测中心招聘见习生8人笔试参考题库及答案详解
- 关于《森林草原防火无人机航空巡护技术规范》的解读
- 2026江西鹰潭市中心城区总医院妇幼保健院院区招聘非在编人员3人笔试模拟试题及答案详解
- 2026江苏省苏州实验室财务管理与服务部管理人员招聘笔试参考题库及答案详解
- 2026江西省人力资源有限公司外包人员招聘18人笔试备考题库及答案详解
- 2026广西河池市环江毛南族自治县洛阳镇人民政府招聘专职禁毒社工1人笔试备考题库及答案详解
- 2026贵州六盘水市水城区人民医院面向社会招聘编制外卫生专业技术人员17人笔试备考试题及答案详解
- 2026年广发银行(泉州分行)校园招聘考试参考试题及答案详解
- 2026福建福州市劳务派遣制行政会务员岗位招聘1人笔试参考题库及答案详解
- 2026-2030中国丙烷脱氢(PDH)市场专项调研与营销创新发展趋势分析研究报告
- 2026年甘肃省兰州市重点中学小升初英语考试真题和答案
- 凝心聚力、共赴高考-2026届高三高考动员主题班会
- 某机械厂安全生产管理准则
- 2026年湖南省长沙市初二地理生物会考真题试卷(+答案)
- 中佳19井、中佳152井、中佳142井等13口井地面建设工程环境影响报告书
- 2026年演出经纪人考试模拟试卷含完整答案详解【夺冠系列】
- Unit7ADaytoRememberSectionB(1a-2b)课件人教版七年级英语下册
- 超星尔雅运筹学答案
- 设备调试进度汇报说明4篇
- 煤矿八条硬措施培训课件
评论
0/150
提交评论