版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、7/24/20211 武汉理工大学计算机学院武汉理工大学计算机学院 :王红霞王红霞 C语言程序设计 7/24/20212 选用教材与参考书 顾治华、陈天煌等顾治华、陈天煌等 2007.22007.2 谭浩强谭浩强 7/24/20213 课程内容 第一章 C语言程序设计概述 第二章 算法及算法设计简介 第三章 数据描述与基本操作 第四章 选择结构程序设计 第五章 循环结构程序设计 第六章 数组与指针 第七章 函数与模块化程序设计方法 7/24/20214 第一章第一章 C C语言程序设计基础语言程序设计基础 1.1 1.1 程序与程序设计程序与程序设计 1.2 C.2 C语言简介语言简介 1.3
2、 1.3 简单的简单的C语言程序语言程序 1.4 C1.4 C语言程序的上机步骤语言程序的上机步骤 1.5 C1.5 C语言的基本词法语言的基本词法 1.6 C1.6 C语言程序的基本结构语言程序的基本结构 7/24/20215 程序与计算机语言程序与计算机语言 程序是存放在计算机中的操作指令的集合。 用程序设计语言安排好的处理问题的步骤称为计算机程序 用程序设计语言编制一个能完成某项任务的计算机程序 的过程叫做计算机程序设计。 程序设计=数据结构+算法+程序设计方法+编程语言 程序设计的关键:必须掌握一种程序设计语言。掌握 程序设计的逻辑思维。 7/24/20216 程序设计过程程序设计过程
3、 (1)问题的提出,要达到的要求; (2)确定数据结构和所采用的算法; (3)编制程序; (4)调试程序; (5)整理并写出文档; 7/24/20217 C语言的特点 (1)语言简洁、紧凑,使用方便、灵活。C语言一共只有 32个关键字,主要用小写字母表示。 (2) 比其他高级语言更接近硬件,比低级语言更接近算法。 程序易编、易读、易查错、易修改,兼有高级语言和 低级语言的优点。 (3) 数据类型和运算符十分丰富,程序设计和算法描述更为 简单和方便。 (4) 语法结构十分简单,语句数目少,简单易学。 7/24/20218 (6) 它是一种模块化的程序设计语言,适合大型软件的研制 和调试。 (5)
4、 它是一种结构化程序设计语言,提供了完整的程序控制 语句(选择语句和循环语句),很适合结构化的程序设计方 法。 (7) 生成目标代码质量高,程序执行效率高。 (8) 用c语言写的程序可移植性好。 (9) 它提供了大量的库函数以供调用,简化了程序设计工作。 7/24/20219 C语言程序的结构 C语言是结构化的程序设计语言。 C语言是模块化的程序设计语言,程序是由函数构成的。一 个C源程序至少包含一个main函数,也可以包含一个main函 数和若干个其他函数。因此,函数是C程序的基本单位。 一个函数由两部分组成: 函数的首部,函数的第一行。包括函数名、函数类型、函数属性、 函数参数(形参)名、
5、参数类型。 函数体,即函数首部下面的大括弧.内的部分。如果一个 函数内有多个括弧,则最外层的一对 为函数的范围。 函数体一般包括: 声明部分声明部分:在这部分中定义所用到的变量。 执行部分执行部分: 由若干个语句组成。 7/24/202110 (4) 一个C程序总是从main函数开始的,而不论main函数在整 个程序中的位置如何(main函数可以放在程序最前头,也可 以放在程序最后,或在一些函数之前,在另一些函数之后)。 (5) C程序书写格式自由,一行内可以写几个语句,一个语句 可以分写在多行上。 (6) 每个语句和数据定义的最后必须有一个分号。分号是C语 句的必要组成部分。分号不可少。 (
6、7) C语言本身没有输入输出语句。输入输出的操作是由库 函数scanf和printf等函数来完成的。 (8) 可以用/*/对C程序中的任何部分作注释。 7/24/202111 简单的C语言程序示例 例一 main( ) printf (“This is a C program.n”); 本程序的作用是输出以下一行信息: This is a C program. 7/24/202112 例二 main( ) int a,b,sum; /*这是定义变量*/ a=123;b=456; /*以下3行为C语句*/ sum=a+b; printf(“sum is %dn”,sum); 程序的运行结果: S
7、um is 579 7/24/202113 例三 /* example1.3 输入两个数,求其中较大的数*/ #include int max(int x,int y) /* 被调用函数*/ int z; if (xy) z=x; else z=y; return(z); /* 将z的值返回,通过max带回调用处*/ main() /* 主函数*/ int a,b,c; scanf(“%d,%d”, c=max(a,b); printf(“max=%dn”,c); 运行结果: 4,6 max=6 7/24/202114 C程序的上机步骤 开始 编辑 编译 有错? 执行 连接 结果 正确 结束
8、可执行 目标程序 f.exe 源程序 f.c 目标程序 f.obj 库函数 和其他目 标程序 Yes No Yes No源程序目标程序可执行程序 内容程序设计语言机器语言机器语言 可执行不可以不可以可以 文件名后缀.c.obj.exe 7/24/202115 C语言的基本词法标识符 定义:定义:在程序中使用的变量名、函数名、标号等统称为 标识符。除库函数的函数名由系统定义外,其余的都由 用户自己定义。 命名规则:命名规则:标识符只能是字母(AZ,az)、数字(09)、 下划线(_)组成的字符串,并且其第一个字符必须是字母 或下划线。 例如例如:以下标识符是合法的: a,x,x3,BOOK_1,
9、sum5,_x7。 以下标识符是非法的: 3s,s*T,-3x,bowy-1,M.D.John,ab。 7/24/202116 (1)标准C不限制标识符的长度,但它受各种版本的C语言编 译系统限制,同时也受到具体机器的限制。Turbo C规定标识 符的长度为32。一般情况下,标识符的长度不要超过8个字符。 (2)在标识符中,大小写是有区别的。例如SUM和sum是两个 不同的标识符。变量名应尽量使用小写字母,以增加程序的可 读性。 (3)标识符虽然可由程序员随意定义,但标识符是用于标识 某个量的符号。因此,命名应尽量有相应的意义,以便于阅读 理解,做到“顾名思义”。 在C语言中,所有的变量都是先
10、定义后应用,使用没有定义的 变量名被认为是“非法”的。 在使用标识符时还必须注意以下几点:在使用标识符时还必须注意以下几点: 7/24/202117 C语言的基本词法关键字关键字 定义定义:关键字是由语言规定的具有特定意义的字符 串,通常也称为保留字保留字。用户定义的标识符不应该 与关键字相同。 分类分类:语言的关键字分为以下3类: (1)类型说明符 用于定义和说明变量、函数或其它数据结构的 类型。如int,double,float,long,short, auto,signed,static,struct,unsigned,char, enum,extern,register和union等。
11、 7/24/202118 (2)语句定义符 用于表示一个语句的功能。如条件语句的语句定 义符if else,循环语句的语句定义符do,while, for等。 (3)预处理命令字 用于表示一个预处理命令,使用时前面要加 “”。如include,define,ifdef,endif等。 关键字后必须有空格、圆括号、尖括号、双引号 等分隔符,否则与其它字符一起组成新的标识符。 7/24/202119 C语言的基本词法其它其它 运算符运算符 语言中含有相当丰富的运算符。运算符与变量,函数 一起组成表达式,表示各种运算功能。运算符由一个 或多个字符组成。 分隔符分隔符 在语言中采用的分隔符有逗号和空格
12、两种。逗号主要 是用在类型说明和函数参数表中分隔各个变量。空格多用 于语句各单词之间作间隔符。 常量常量 C语言中使用的常量可分为数字常量、字符常量、字符 串常量、符号常量、转义字符等多种。 7/24/202120 语言的字符集语言的字符集 (1)字母 小写字母az共26个,大写字 母AZ共26个。 (2)数字09共10个。 (3)空格符、制表符、换行符等统称为空 白符。 (4)标点和特殊字符 7/24/202121 C语言程序设计的基本结构 (1)顺序结构 A B a b 7/24/202122 (2)选择结构,或称分支结构 此结构中必包含一个判断框。根据给定的条件 P是否成立而选择执行A框
13、或B框 a b BA p 不成立成立 7/24/202123 (3) 循环结构,它又称为重复结构,即反复执行某一部分 的操作。又两类循环结构: (a) 当型(while型)循环结构 它的功能是判断当前给定 的条件p1成立时,执行A 框操作,执行完A后,再 判断条件p1是否成立,如 果仍然成立,再执行A框, 如此反复执行A框,直到 某一次p1条件不成立为止, 此时不执行A框,而从b点 脱离循环结构。 a p1 T F A b 7/24/202124 (b)直到型(Until型)循环结构 它的功能是先执行A框, 然后判断给定的p2条 件是否成立,如果p2条件 不成立,则再执行A, 然后再对p2条件
14、作判断, 如果p2条件仍然不成立, 又执行A如此反复 执行A,直到给定 的p2条件成立为止,此时 不再执行A,从b点脱 离本循环结构。 a A F T b p2 7/24/202125 本章课堂练习 (1) 以下说法中正确的是( ). A) C语言程序总是从第一个函数开始执行 B) 在C语言程序中,要调用的函数必须在main()函数 中定义 C) C语言程序总是从main()函数开始执行 D) C语言程序中的main()函数必须放在程序的开始 部分 7/24/202126 解答:C 解释:C语言程序总是从main()函数开始执行,而 不论其在程序中的位置。当主函数执行完毕时,亦 即程序执行完毕
15、。除main函数外,其它函数都是在 执行main函数时被调用执行的。在C语言中,函数 不允许嵌套定义。习惯上,将主函数main()放在最 前头,但并不是必须的。 7/24/202127 (2)以下叙述不正确的是 A)一个C源程序可由一个或多个函数组成 B) 一个C源程序必须包含一个main函数 C) C程序的基本组成单位是函数 D) 在C程序中,注释说明只能位于一条语句的后面 7/24/202128 解答:D 解释: 凡是用“/*”和“*/”括起来的文字,都 是注释。其出现的位置可以任意。 7/24/202129 (3)下列标识符中,合法的变量名有: A)a.b B)$888 C)A1 D)
16、3x56 7/24/202130 解答:C 解释:变量名只能由字母、数字和下划线三种 字符所组成,且第一个字符必须为字母或下划 线。C语言的关键字不能用作变量名。另外, C语言对英文字母的大小写敏感,即同一字母 的大小写,被认为是两个不同的字符。习惯上, 变量名和函数名中的英文字母用小写,以增加 可读性。 7/24/202131 第二章 算法及算法设计简介 2.1 2.1 算法的概念算法的概念 2.2 2.2 算法的设计与表达算法的设计与表达 2.3 2.3 简单的算法实例简单的算法实例 2.4 2.4 结构化程序设计方法简介结构化程序设计方法简介 7/24/202132 算法的概念算法的概念
17、 任何一个程序应包含的如下两方面的内容: (1)对数据的描述。在程序中要指定数据的类型和数据的 组织形式,即数据结构(data structure). (2)对操作的描述。即操作步骤,也就是算法(algorithm)。 著名计算机科学家沃思(Nikiklaus Wirth)提出公式 数据结构算法程序 算法:算法:是对解决某个问题的方法步骤的描述。 程序:程序:从计算机角度来说,程序是用某种计算机能理解并执 行的计算机语言描述解决问题的方法和步骤。 7/24/202133 实际上,一个程序除了以上两个主要要素之外,还应当采用 结构化程序设计方法进行程序设计,并且用某一种计算机语 言表示。因此,可
18、以这样表示: 程序算法数据结构程序设计方法语言工具和环境 在这4个方面中,算法是灵魂,数据结构是加工对象,语言 是工具,编程需要采用合适的算法。算法是解决“做什么” 和“怎么做”的问题。 7/24/202134 算法的表示算法的表示 1、用自然语言表示算法 采用汉语、英语或其它语言来描述解决问题的方法和步骤。 由于自然语言容易出现“歧义性”,且描述问题的文字冗长, 因此一般很少使用自然语言来描述算法。 7/24/202135 例例1: 有有50个学生个学生 ,要求将他们之中成绩在,要求将他们之中成绩在80分以上者打印出来。分以上者打印出来。 用用n表示学号,表示学号,n1代表第一个学生学号,代
19、表第一个学生学号,ni代表第代表第i个学生学号。个学生学号。 用用g代表学生成绩,代表学生成绩, gi 代表第代表第i个学生成绩,算法可表示如下:个学生成绩,算法可表示如下: S1:1i S2:读入学号读入学号ni和成绩和成绩gi S3: 如果如果gi 80 ,则打印,则打印 ni 和和gi ,否则不打印,否则不打印 S4: i+1 i S5: 如果如果 i 50, 返回返回S2, 继续执行;继续执行; 否则,算法结束。否则,算法结束。 7/24/202136 起止框 输入/输出框 判断框 处理框 流程线 2、用流程图表示算法 (1)常用的流程图符号 7/24/202137 上例用流程图表示:
20、 (1) 流程图表示算法的优点: 表示算法直观形象,比较清楚地显示出各个框之间 的逻辑关系。 简单,易于掌握。 7/24/202138 3、用NS图表示算法 1973年美国学者I.Nassi和B.Shneiderman提出了 一种新的流程图形式。在这种流程图中,完全去掉 了带箭头的流程线。全部算法写在一个矩形框内, 在该框内还可以包含其他的从属于它的框。 这种流程图又称NS结构化流程图。 NS流程图用以下的流程图符号: (1)顺序结构: A B 7/24/202139 (2)选择结构: P 成立不成立 AB (3)循环结构: 当p1成立 A 当型循环结构 直到p1成立 A 直到型循环结构 用以
21、上3种NS流程图中的基本框,可以组成复杂的NS流程图,以表示算法 7/24/202140 上例用NS图表示: 用NS表示算法如图 1=i 输入ni,gi gi80 是否 输出ni,gi i+1=i 直到i50 7/24/202141 4、用伪码表示算法 伪代码是用介于自然语言和计算机语言之间的文字和符号来 描述算法。它不用图形符号,因此书写方便,格式紧凑,也 比较好懂,便于向计算机语言算法(即程序)过渡。 例 有50个学生,要求将他们之中成绩在80分以上者打印出来。 用n表示学生学号,n1表示第一个学生学号,ni表示第i个学生 学号。用g表示学生成绩,gi表示第i个学生成绩。 7/24/202
22、142 BEGIN(算法开始算法开始) 1=i While ii END(算法结束)(算法结束) 用伪代码表示算法如下: 7/24/202143 5、用计算机语言表示算法 设计算法的目的是为了实现算法。因此,不仅要考 虑如何设计一个算法,也要考虑如何实现一个算法。 我们的任务是用计算机解题,也就是要用计算机实 现算法。计算机是无法识别流程图和伪代码的。只 有用计算机语言编写的程序才能被计算机执行(当 然还要经过编译成目标程序才能被计算机识别和执 行)。因此,在用流程图或伪代码描述出一个算法 后,还要将它转换成计算机语言程序。 7/24/202144 例: 有50个学生,要求将他们之中成绩在80
23、分以上者打印出来。 用n表示学生学号,n1表示第一个学生学号,ni表示第i个学生 学号。用g表示学生成绩,gi表示第i个学生成绩。 C语言程序如下: main( ) int g50,n50,i; for(i=0;i50;i+) scanf(“%d,%d”, for(i=0;i=80) printf(“%6d,%3dn”,ni,gi); 7/24/202145 例例2:对一个大于或等于:对一个大于或等于3的正整数,判断它是不是一个素数。的正整数,判断它是不是一个素数。 方法:将方法:将 n (其中其中n 3) 作为被除数,作为被除数, 将将2 到(到(n-1) 各个整数各个整数 轮流作为除数,如
24、果都不能被整除,则轮流作为除数,如果都不能被整除,则n为素数。为素数。 简单的算法实例简单的算法实例 7/24/202146 算法表示如下:算法表示如下: S1:输入:输入n的值的值 S2:2 i ( i 作为除数)作为除数) S3: n 被被 i 除,得余数除,得余数 r S4: 如果如果 r 等于等于 0 , 表示表示 n 能能 被被 i 整除,则打印整除,则打印 n “不不 是素数是素数”,算法结束;否则执行,算法结束;否则执行S5 S5:i+1 i S6: 如果如果 i n-1, 返回返回S3;否则,打印;否则,打印 n “是素数是素数”,算,算 法结束。法结束。 7/24/20214
25、7 S1: 1 sign S2: 1 sum S3: 2 deno S4: (-1)*sign sign S5: sign*(1/deno) term S6: sum+term sum S7: deno+1 deno S8: 若若deno 100 返回返回S4;否则算法结束。;否则算法结束。 例3:求 1-1/2 + 1/3 1/4 + 1/99 1/100。 7/24/202148 结构化程序设计方法简介 1、三种基本结构回顾 (1)顺序结构 A B a b 7/24/202149 (2)选择结构,或称分支结构 a b BA p 不成立成立 7/24/202150 (3) 循环结构,它又称为
26、重复结构,即反复执行某一部分 的操作。又两类循环结构: (a) 当型(while型)循环结构 a p1 T F A b 7/24/202151 (b)直到型(Until型)循环结构 a A F T b p2 7/24/202152 2、结构化程序 所谓结构化程序,就是仅仅使用顺序、选择、循环等三 种基本结构所构造的程序。 3、结构化程序设计方法 结构化程序设计方法的基本思想是,把一个复杂 问题的求解过程分阶段进行。每个阶段的问题都控制 在人们容易理解和处理的范围内。 7/24/202153 1 = i i+1 =i gi80 i50 结束 开始 打印ni,gi Y N N Y 读入ni和gi
27、7/24/202154 解答: ()用自然语言表示 ()用传统的流程图表示 ()NS流程图 ()用伪代码表示等。 1、算法的表示形式主要有哪些? 课堂练习课堂练习 7/24/202155 2、设计算法:A、B两人各有一桶油,现两人要将各自桶 内的油互换。 解答:必须借助另外一个空桶,并按如下算法进行: (用Si表示第i步操作,A的桶叫A,B的桶叫B,空桶叫M) 开始: S0:将A桶中的油倒入M桶中; S1:将B桶中的油倒入A桶中; S2:将M桶中的油倒入B桶中; 7/24/202156 3、设计算法写出求n!的算法 解答: S0:给出n的值; S1: 1=p; S2: 2=i; S3: p*i
28、=p; S4: i+1=i; S5: 若i=n,返回S3;否则,结束 第三章第三章 数据描述与基本操作数据描述与基本操作 3.1 基本数据类型基本数据类型 3.2 3.2 常用的运算符和表达式常用的运算符和表达式 3.3 3.3 表达式及赋值语句表达式及赋值语句 3.4 3.4 基本输入输出操作的实现基本输入输出操作的实现 3.5 3.5 顺序结构程序设计实例顺序结构程序设计实例 概 述 使用高级语言编写程序,必须在程序中做好两件事: 一是描述数据,二是描述数据的加工方法。前者是通过 数据定义语句实现的,后者是通过若干执行语句,包括 用各种运算符构成的表达式来实现的。本单元主要介绍 C语言的基
29、本数据类型,为后续单元的学习奠定一个基 础。关于复杂的数据类型(如数组、指针、结构型、共 用型等)将在以后单元中介绍。 3.1 C语言的数据类型 C语言具有十分丰富的数据类型。所谓数据类型是指数 据的内在表现形式。具体的数据类型有以下若干种: 1.基本数据类型:整型、实型和字符型。 2.构造类型: 由若干个相关的基本数据类型数据组合在一起形 成的一种复杂的数据类型,如数组型、结构型和共用型。 3.指针型:一种简单的数据类型,它是用来表示内存地址的。 指针类型的数据可以表示基本类型数据的地址,它可以表 示结构类型数据的首地址和其中某个具体数据的地址。 4.枚举型:某数据在程序运行中,只取固定的几
30、个值。我们可 以把这几个值列出来,以后这个数据只能取这几个值中的 某一个。 5. 空类型:没有任何具体值的数据类型。 C语言中的数据类型如下图所示: 数据类型 基本类型 整型 字符型 实型(浮点型) 单精度型 双精度型 枚举类型 构造类型 数组类型 结构体类型 共用体类型 指针类型 空类型 7/24/202162 常量和变量常量和变量 2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量 (4)字符串常量 (5)符号常量 常量的类型,可通过书写形式来判别。 常量常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常 量。 7/24/202163 变量变量 1.变量的概念 在
31、程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字变量名, 变量命名遵循标识符命名规则。 (2)变量值。在程序运行过程中,变量值存储在内存中。 在程序中,通过变量名来引用变量的值。 7/24/202164 变量有以下几个特征: 变量名、变量值、变量的数据类型、变量的地址、 变量的存储类别、变量的作用域及变量的生存期等。 变量必须先定义后使用。定义变量格式如下: 数据类型关键字 ; 如int x,y,z; 变量的初始化:变量赋初值的过程就是变量初始化 过程。 整型数据整型数据 整型常量:整型常量就是整常数,包括正整数和负整 数及 0。其书写形
32、式如下: (1) 十进制整数。如十进制整数。如 123,456,0。 (2) 八进制整数。以八进制整数。以0开头的是八进制数。如开头的是八进制数。如0123表示八进制表示八进制 数数123,即,即(123)8 。 (3) 十六进制整数。以十六进制整数。以0 x开头的数是十六进制数。如开头的数是十六进制数。如0 x123, 代表十六进制数,代表十六进制数, (123)16116216316256323291。 整型常量在一般微型机中占用2个字节,不管是 十进制、八进制或十六进制整数,它们的数值范 围都是十进制的3276832767。 注意:注意: C语言还提供一种“长整型常量”。它们的数值范围
33、是十进制的21474836482147483647,在计算 机中占用四个字节,它们的书写方法是在数据的末 尾加一个大写字母“L”或小写字母“l”,如0L,038L, 0 x15L。 7/24/202167 整型变量整型变量 1.分类 根据占用内存字节数的不同,整型变量又分为类: (1)基本整型(类型关键字为int)。 (2)短整型(类型关键字为short int)。 (3)长整型(类型关键字为long int)。 (4)无符号整型。无符号型又分为无符号基本整型 (unsigned int)、无符号短整型(unsigned short) 和无符号长整型(unsigned long)三种,只能用来
34、存 储无符号整数。 2.占用内存字节数与值域 上述各类型整型变量占用的内存字节数,随系统而异。在 16位操作系统中,一般用字节表示一个int型变量,且long 型(字节)int型(字节)short型(字节)。 7/24/202169 实型数据实型数据 实型常量实型常量 .表示形式 实型常量即实数,在语言中又称浮点数,其值有两种表 达形式: (1)一般形式的实数,它是由整数、小数点、小数三部分组 成。 其中整数部分或小数部分可以省略。数的正负用前 面的“”(可以省略)号或“”号来区分。例如, 12.345, 1.2345,47.0,.234,47.等都是实型常量。 (2)指数形式的实数,它是由尾
35、数、小写字母e或大写字母E、 指数三部分组成,尾数部分可以是十进制整型常量或一般 形式的实数,指数部分是十进制的短整型常量(可以带E负 号)例如, 12.3e2,1.2e-3,47.0e2,.234e-3 等都是实 型常量。 C语言规定,字母e(或者E)之前必须要有数字,且e(或者E) 后面的指数必须为整数。 如:e3,5e3.5,.e3都是不合法的指数形式。 注意: 实型常量在一般的微机中是占用4个字节的,不管是一般 形式还是指数形式,它们的数值范围都是10 10 有效数 字7位。例如,1.23456789和1.234567是相同的,因为实型常 量的有效数字是7位,所以1.23456789中
36、的后两位是无效的。 3838 7/24/202172 实型变量实型变量 语言的实型变量,分为两种: (1)单精度型。类型关键字为float,一般占字节 (位)、提供位有效数字。 (2)双精度型。类型关键字为double,一般占个字 节、提供1516位有效数字。 字符型数据字符型数据 A、把单个字符用一对单引号括起来表示字符常量。 如a,d,w,?等都是字符常量。 B、用该字符的ASCII码值表示字符常量。如65表示A C、转义字符:反斜杠开头后跟规定的单个字符或数字, 并用一对单引号括起来表示字符常量。如下: 一一 字符常量字符常量 1.字符常量是ASCII码字符集里的一个字符,包括字母 (大
37、、小写有区别)、数字和标点符号以及特殊字符等, 均为半角字符。 2.字符常量表示形式: 字符形式 含 义 ASC n换行,将当前位置移到下一行开头 10 t水平制表(跳到下一个tab位置) 9 b 退格,将当前位置移到前一列 8 r回车,将当前位置移到本行开头 13 f换页, 将当前位置移到下页开头 12 反斜杠字符“” 92 单引号(撇号)字符 39 “双引号字符 34 ddd1到3位8进制数所代表的字符 xhh1到2位16进制数所代表的字符 7/24/202175 例1:字符与整数的转化 #include stdio.h void main() int i; char n; n=97; i
38、=b; printf(n=%cn,n); printf(i=%dn,i); printf(i=%cn,i); 程序的输出为: n=a i=98 i=b 7/24/202176 例2 字符参与整数运算 #include stdio.h void main() char n; n=a; n=n-65; printf(n=%dn,n); 程序的输出结果为: n=32 7/24/202177 例例3 3 字母的大小写转换 #include stdio.h void main() char n,i; n=a; i=B; n=n-32; i=i+32; printf(n=%cn,n); printf(i=
39、%cn,i); 程序的输出为 n=A i=b 二 字符串常量 字符串就是用两个双引号(“)号后括住的若干个字符, 例如,“abc”,“123 456”,“aBbB”都是字符串。 转义符可以出现在字符串中,例如,“ABC”, “101102x43x44”等都是字符串,分别表示“ABCD”、 “ABCD”两个字符串。 一个字符串中所有的字符的个数称为该字符串的长度, 其中每个转义字符只当做一个字符。例如,“ABC”的长 度为5。 注意注意!a与“a”的区别。 C语言规定:每个字符串在内存中占用的字符数等于字符 串的长度1。其中最后一个字符存放的字符称为“空字符” 其值为0,书写时常用转义字符“0”
40、来表示。在C语言中称 为字符串结束标志。 关于变量的补充内容 1. 变量: 变量是指在程序运行过程中其值可以发生变化的量。 2. 变量的取名规则为:以字母、下划线“_”开头,后跟若干 个字母、下划线、数字。一般约定,用户使用的变量名采用 以字母开头,C语言内部使用的变量名以下划线开头。例如, abc,a_1,age_1等都是合法的变量名,而3a,age则是非 法的变量名。 当程序运行时,每个变量都要占用若干个连续的字节, 所占用的字节数由变量的数据类型确定。其中第1个字节的 地址称为变量的地址。C语言规定,程序中变量的地址是用 “ float f=5.0,g=10.0; double d=5.
41、0,e=10.0; 则 n的结果是10 nm,nm,n*m,n/m,n%m的结果 分别为13、7、30、3、1 de,de,d*e,d/e的结果 分别为15.0,5.0,50.0,0.5 nmf*g/d的运算顺序相当于 (nm(f*g)/d),结果是3.0 nm*f*d的运算顺序相当于 (nm)*f)*d,结果是25.0 l如果参加运算的两个数中有一个为浮点型,则结果是double型 7/24/2021 2 增1减1运算符 (1)增1减1运算符的运算对象、运算规则与结果、 结合性如下表所示: 对象数 单 目 名称运算符 运算规则 运算对象运算结果 结合性 增1(前缀) 先加1 后使用 增1(后
42、缀) 减1(前缀) 减1(后缀) 先使用 后加1 先减1 后使用 先使用 后减1 整型、字 符型、指 针型变量 或数组 元素 同运算 对象的 类型 自 右 向 左 7/24/2021 (2)增1减1运算符的优先级: 增1减1运算符 优先于 双目基本算术运算符 增1减1运算符和单目运算符、同级别,结合性 是自右向左 注意:注意: 若出现难以区分的若干个或组成运算符串时,若出现难以区分的若干个或组成运算符串时, C语言规定,自左向右取尽可能多的符号组成运算符。语言规定,自左向右取尽可能多的符号组成运算符。 例1: ab 应理解为(a)b ab应理解为 (a)b 7/24/2021 例2:增1减1运
43、算符的使用 设变量定义如下:char c1b,c2B; (c1,c2可看成整型,其值分别为98,66) 则: c1 的值是99,运算后c1的值是c c1 的值是98,运算后c1的值是a c1c2的值是164,运算后c1的值是c,c2的值是B c1c2的值是32,运算后c1的值是a,c2的值是B 7/24/2021 三三.赋值运算符赋值运算符 1.赋值运算符 赋值运算符是双目运算符,赋值运算符的左边必须是变量, 右边是表达式。 (1) 赋值运算符的运算对象及有关规则如下表: 对象数 名称 运算符 运算规则 运算结果 结合性 双目赋值 将表达式的 值赋予变量 表达式的 类型 自右向左 7/24/2
44、021 (2) 赋值运算符的优先级 算术运算符 优先于 关系运算符 优先于 双目逻辑运算符 优先于 赋值运算符 赋值运算符的结合性是自右向左 (3) 赋值运算符的使用 设变量定义如下: char c1a,c2; int n165,n2,n3,n4,n5,n6; float f13.0,f2; 则: c2n1运算后,c2的值是65,n1的值不变。 n2!c1运算后,n2的值是0,c1的值不变。 f2f10.001运算后,f2的值是3.001,f1的值不变。 n3c1n1|c1!n1运算后,n3的值是1,c1和n1 的值不变。 注:运算顺序相当于 n3(c1n1)|(c1!n1) n4n5n6(n
45、1)运算后,n4,n5,n6的值 均是64,n1的值是64。 注意注意:上述表达式的值就等于赋值表达式中的最左边的变量值。 2 .算术自反赋值运算符 (1) 运算规则 对象数 名称 运算符运算规则运算对象 运算结果结合性 双目 加赋值 减赋值 乘赋值 除赋值 模赋值 * / = %= a+=b相当于 a=a+(b) a=b相当于 a=a(b) a*=b相当于 a=a*(b) a/=b相当于 a=a/(b) a%=b相当于 a=a%(b) 数值型数值型 自 右 向 左 整型整型 (2)算术自反赋值运算符的优先级 算术运算符 优先于 关系运算符 优先于 双目逻辑运算符 优先于 算术自反赋值运算符
46、算术自反赋值运算符和赋值运算符是同级别的,结合性是 自右向左 (3)算术自反赋值运算符的使用 设变量定义如下 int n1=10, n2=10, m1=10, m2=10, m3=10, m4=10; 则: n1n2,n1的值为20,n2的值不变 n1n2,n1的值为0,n2的值不变 n1*n2,n1的值为100,n2的值不变 n1/n2, n1的值为1,n2的值不变 m1m2m3*m4/2 运算后, m1,m2,m3,m4的值依次是30,40,50,5。 运算顺序相当于m1(m2(m3*(m4/2) 四四.逗号运算符逗号运算符 逗号运算符是双目运算符,其运算对象是表达式。逗号运算符是双目运算
47、符,其运算对象是表达式。 1.逗号运算符 对象数 名称 运算符 运算规则运算对象 结合性 双目逗号 , 依次计算前、 后表达式 表达式 自左向右 注意:由逗号运算符组成的式子也是表达式,其值等于最右边 的表达式的值 2.逗号运算符的优先级 任何运算符 优先于 逗号运算符 逗号运算符的结合性是自左向右 3. 例题。设整型变量a,b为2, 则: ba3,cb4 运算结果:a不变,b为5,c为9,表达式的值为9 da,ed,fe 运算结果:a为1,d为1,e为1,f为1,表达式的值为1 五五.条件运算符条件运算符 1.条件运算符 对象数 名称 运算符 运算规则 运算对象 运算结果 结合性 三目条件
48、?: 对e1?e2:e3 e1为真,获得e2 e1为假,获得e3 表达式 e2(e3) 的类型 自右 向左 2.条件运算符的优先级 其它运算符 优先于 条件运算符 优先于 赋值、算术自反赋值运算符 条件运算符的结合性是自右向左 3.例子 (1) 设整型变量a,b,c,d均为2 则ab?(c1):(d0); 结果a,b,d不变,c为1,表达式的值为1 (2) a13?(ba2):(ca3); 结果a,c不变,b为4,表达式值为4 (3) ab?(c0):(ab?(c1):(c1)); 结果a,b不变,c为0,表达式的值为0 1.长度运算符 六六.长度运算符长度运算符 对象数 名称 运算符 运算规
49、则 运算对象 运算结果 结合性 单目长度 sizeof 测试数据类型所 占用的字节数 类型说明 符或变量 整型 无 2.长度运算符优先级 和单目算术运算符、单目逻辑运算符、增1减1运算符同级别 3.例子 设变量定义如下: int n; short s; unsigned long u3; float f; char c; 则 sizeof(n)的值是2 sizeof(s)的值是2 sizeof(long)的值是4 sizeof(unsigned int)的值是2 sizeof(u3)的值是4 sizeof(f)的值是4 sizeof(double)的值是8 sizeof(c)的值是1 注意注意
50、:上述结果是:上述结果是Turbo C 2.0在微机上运行的结果。在微机上运行的结果。 7/24/2021107 七七 位运算位运算 C语言中提供的位运算符: 、 、 (这是赋值语句) a+ + (这是表达式) a+ +; (这是赋值语句,等价 与 a=a+1;) 7/24/2021117 3.5 输入输出在输入输出在C语言中的实现语言中的实现 1.输入输出的概念 从计算机向外部输出设备(如显示屏、打印机、磁盘 等)输出数据称为“输出输出”,从外部向输入设备(如键盘、 磁盘、光盘、扫描仪等)输入数据称为“输入”。 2.C语言本身不提供输入输出语句,输入和输出操作是由 函数来实现的。在C标准函数
51、库中提供了一些输入输出函 数,例如,printf函数和scanf函数。 7/24/2021118 3.在使用C语言库函数时,要用预编译命令“include” 将有关的“头文件头文件”包括到用户源文件中。在调用标准 输入输出库函数时,文件开头应有以下预编译命令: # include 或# include “stdio.h” 4.允许在使用printf和scanf两个函数时可不加#include 命令。 7/24/2021119 一、字符数据的输入输出 1.putchar函数(字符输出函数) 函数格式:putchar( C ) ; C可以是字符型变量或整型变量或常量 函数的功能:向终端输出一个字符
52、 7/24/2021120 2.程序实例 #include main( ) char a, b, c ; a=B; b=O; c=Y; putchar(a); putchar(b); putchar(c); 注意:该程序可以输出控制字符,如putchar(n) 输出一个换行符,也可以输出其他转义字符 如 putchar(101) (输出字符A) putchar() (输出单引号字符) 运行结果: BOY 7/24/2021121 3.getchar 函数(字符输入函数) 函数格式,getchar ( ) 函数的功能:从终端输入一个字符,函数的值就是 从输入设备得到的字符。 4.程序实例 #in
53、clude main ( ) char c; c=getchar( ); putchar(c); 在运行时,如果从键盘输入字符a并按回车键,就会在 屏幕上看到输出的字符a。 a (输入a后,按“回车”键,字符才送到内存) a (输出变量 c 的值a) 7/24/2021122 注意: (1)getchar( )只能接收一个字符,getchar函数收到 的字符可以赋给一个字符变量或整型变量。 (2)若在程序中调用getchar、putchar函数,则必须 在程序的开头部分加上“包含命令” #include 或或 #include “stdio.h” 7/24/2021123 二、格式输入与输出二
54、、格式输入与输出 (一)、printf 函数(格式输出函数) 1.printf函数的一般格式为 printf(“格式控制字符串”,输出表列) 括弧内包括两部分: (1) “格式控制字符串”是用双引号括起来的字符串,也称 “转换控制字符串”,它包括两种信息: 格式说明,由“”和格式字符组成,如%d, %f等。 它的作用是将输出的数据转换为指定的格式输出。格式 说明总是由“”字符开始的。 普通字符,即需要原样输出的字符。 (2)“输出表列”是需要输出的一些数据,可以是表达 式。 7/24/2021124 下面是一个例子: printf(“%d %d ”, a,b ); 格式说明 输出表列 prin
55、tf(“a%d b=%d”,a,b); 格式说明 输出表列 7/24/2021125 2.格式字符 常用的有以下几种格式字符: (1)d 格式字符。用来输出十进制整数。有以下 几种格式字符: d,按整型数据的实际长度输出。 md,m为指定的输出字段的宽度。如果数据 的位数小于m,则左端补以空格,若大于m,则按实 际位数输出。如 printf(“%4d,%4d”,a,b); 若a123,b12345,则输出结果为 |_| 123,12345 ld,输出长整型数据。如 long a=135790; printf(“%ld”,a); 7/24/2021126 对long型数据应当用ld格式输出。对长
56、整型数据也可以 指定字段宽度,如将上面printf函数中的“ld”改为“8ld” 则输出为: |_| |_| 135790 (8列) 一个int型数据可以用d或ld格式输出。 (2)O格式符,以八进制数形式输出整数。由于是将内存 单元中的各位的值(0或1)按八进制形式输出,因此输出 的数值不带符号,即将符号位也一起作为八进制数的一部 分输出。例如: int a= -1; printf(“%d,%o”,a,a); 7/24/2021127 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 输出为 1,177777 对长整型数(long型)可以用“lo”格式输出。 同样可以指定字段宽
57、度,如printf(“8o ” ,a) 输出为|_| |_| 177777 1在内存单元中的存放形式(以补码形式存放)如下: 7/24/2021128 (3)x格式符,以十六进制数形式输出整数。同样 不会出现负的十六进制数。 例如 int a=1; Printf(“%x,%o,%d”,a,a,a); 输出结果为: ffff,177777,1 7/24/2021129 (4)u格式符,用来输出unsigned型数据,即无符号数, 以十进制形式输出。 (5)C格式符,用来输出一个字符。 如: char c=a; printf(“%c”,c); 输出字符a,请注意:“c”中的 c是格式符,引号右边
58、的c是变量名,不要搞混。一个整数,只要它的值在0255 范围内,也可以用字符形式输出,在输出前,系统会将该 整数作为ASCII码转换成相应的字符;反之,一个字符数据 也可以用整数形式输出。 7/24/2021130 (6)S格式符,用来输出一个字符串。有几种用法: s,例如: printf(“%s”, “CHINA” ); 输出“CHINA”字符串(不包括双引号)。 ms,输出的字符率占m列,如字符串本身长度大 于m,则突破m的限制,将字符串全部输出。若串 长小于m,则左补空格。 7/24/2021131 ms,如果串长小于m,则在m列范围内, 字符率向左靠,右补空格。 mns,输出占m列,但
59、只取字符串中左端n个字 符。这n个字符输出在m列的右侧,左补空格。 mns,其中m、n含义同上,n个字符输出在m 列范围的左侧,右补空格。如果nm,则m自动取 n值,即保证n个字符正常输出。 7/24/2021132 (7)f格式符,用来输出实数(包括单、双精度),以 小数形式输出。有以下几种用法: m.nf指定输出的数据共占m列,其中有n位小数。 如果数值长度小于m,则左端补空格。 -mnf与m.nf基本相同,只是使输出的数值 向左端靠,右端补空格。 f,不指定字段宽度,由系统自动指定,使整数 部分全部如数输出。并输出6位小数。应当注意,并非全 部数字都是有效数字。单精度实数的有效位数一般为
60、7位。 7/24/2021133 (1)字符数据的输出: main ( ) char c=a; int i=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i); 运行结果为: a,97 a,97 3.例子 7/24/2021134 (2) 字符串的输出 main( ) printf(“%5s,%7.2s,%.4s,%-5.3sn”,”CHINA”, ”CHINA”,“CHINA”,”CHINA”); 输出如下: CHINA,|_| |_| |_| |_| |_| CH,CHIN,CHI |_| |_| 其中第3个输出项,格式说明为“%.4s”,即只指定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗机构文化建设方案
- 智能乡村工程承包合同
- 中心站员工福利计划
- 城市广场休闲区廊架施工合同
- 专利许可合同评审管理办法
- 化工行业高压电工聘用协议
- 冷藏租赁协议:冷冻食品生产专用
- 交流酒会酒店场地租赁协议
- 物流仓库操作工聘用协议
- 信息技术异常处理办法
- 软件项目管理案例教程(第四版)课后习题答案
- 我的家乡东营
- 如何开展好班前班后会(赵正勇)
- QC七大手法与新QC七大手法
- 内蒙古呼和浩特市回民区2023-2024学年七年级上学期期中地理试题
- 照明路灯工程 投标文件(技术方案)
- 2024年斯坦福Agent+AI+论文(英)
- 2024年教师普通话培训心得体会范文3篇
- 统编版五年级上册语文第六单元《口语交际父母之爱》公开课一等奖创新教学设计
- 《经济学基础》课件:项目一 揭开经济学的面纱
- 2024年T8联考高三第二次学业质量语文试题答案讲评课件
评论
0/150
提交评论