C语言程序设计教程 第5版 课件全套 朱鸣华 第1-11章 程序设计与C语言简介-文件_第1页
C语言程序设计教程 第5版 课件全套 朱鸣华 第1-11章 程序设计与C语言简介-文件_第2页
C语言程序设计教程 第5版 课件全套 朱鸣华 第1-11章 程序设计与C语言简介-文件_第3页
C语言程序设计教程 第5版 课件全套 朱鸣华 第1-11章 程序设计与C语言简介-文件_第4页
C语言程序设计教程 第5版 课件全套 朱鸣华 第1-11章 程序设计与C语言简介-文件_第5页
已阅读5页,还剩545页未读 继续免费阅读

下载本文档

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

文档简介

第1章程序设计与C语言简介

大连理工大学1程序设计与C语言简介2本章主要内容计算机是如何解决问题的

程序设计语言

C语言概述C程序结构运行C程序的方法人是如何求解问题的?基本步骤:理解问题制定计划执行计划检查结果1.1计算机解决问题的方法42数学建模3算法设计4程序设计5测试运行1问题描述编程

自动化

建模设计检测结果

抽象计算机求解问题的过程

问题描述

数学建模

算法设计

程序设计

测试运行基于程序设计5计算机应用领域计算机能解决哪些问题?6计算机系统由硬件系统和软件系统两部分组成;计算机语言是人与计算机交流的工具;计算机只能完成其能力范围内的计算工作,超出计算机能力范围的计算计算机将无法完成;计算机能够完成可计算的问题;可计算问题的规模造成复杂度加大,理论上计算机可以完成的计算工作,实际计算机却不能完成。1.2程序设计语言7程序的概念程序(program)是指按照一定的顺序安排工作的操作序列,即完成某些工作的具体步骤。

计算机程序是计算机为完成某一任务所必须执行的一系列指令的有序集合,是用计算机语言对所要解决问题进行完整而准确的描述。

程序设计:把自然语言描述问题的方式转换为计算机语言的形式表达给计算机。8程序的特性目的性:程序应有明确的编写目的。分步性:程序由一系列计算机可执行的步骤组成。有序性:程序执行的步骤是有序的。有限性:程序是有限的指令序列。操作性:程序可对某些对象进行操作,使其改变状态。9计算机语言分类机器语言汇编语言高级语言由0和1二进制代码按一定规则组成的,能被计算机直接理解和执行指令集合。如:0011010110100111用缩写符号表示指令代码,需要翻译才能被计算机理解和执行的指令集合。MOVS,12ADDS,6HLT

用接近自然语言的符号,按照一定的语法规则编写程序,需要编译程序翻译成机器指令才能被计算机执行。S=12+6PRINTSEND10

语言处理程序编译方式解释方式程序的执行方式11高级语言源程序编译程序机器语言目标程序目标程序+运行子程序运行结果数据

编译阶段

执行阶段

编译方式的工作过程

编译方式12解释方式的工作过程解释方式高级语言源程序解释程序运行结果数据

13程序设计语言构成程序设计语言是规则和符号的集合,包含:语法、语义。程序设计语言的基本成分:①数据成分:描述程序所涉及的数据;②运算成分:描述程序中的所有运算;③控制成分:描述程序的控制流程;④传输成分:表达数据的传输和输入输出。1.3C语言概述14前10名编程语言长期走势图

为什么选择C?2019年1月发布的编程语言排行榜榜单TIOBE

编程社区索引15C语言的特点•C语言1972年由美国贝尔实验室推出,当时为了移植和开发UNIX操作系统。1978年推出经典著作,后广泛应用于各种机型;•具有高级语言的特点,以及汇编语言的特点;既可作为系统设计语言,也可作为应用程序设计语言;语言表达能力强,程序运行效率高,可移植性好;具有很强的数据处理和计算能力,常用于软件开发各类应用;很多流行语言、新生语言都借鉴了它的思想、语法;语法检查不够严格,给程序员充分自由空间。DennisM.Ritchie:1967年加入贝尔实验室。他和KenL.Thompson两人共同设计并实现了C语言,改变了程序设计语言发展的轨迹,是程序设计语言发展过程中的一个重要里程碑。与此同时,他们两人还设计并实现了UNIX操作系统。正是由于这两项巨大贡献,DennisM.Ritchie于1983年获得了计算机界的最高奖——图灵奖。此外,他还获得了ACM、IEEE、贝尔实验室等授予的多种奖项。2011年10月12日去世,享年70岁。原书名:

TheCProgrammingLanguage作者:(美)BrianW.Kernighan,DennisM.Ritchie

C语言的经典著作18•ANSIC——1989年由ANSI发布的第一个C标准;C89——1990年ISO接受了ANSI的标准,发布的C标准。ISOC与ANSIC内容基本相同,主要是格式组织不同;•C99——ISO/IEC9899:1999,作了多处改动或确认,所有广泛使用的编译器都支持C99;•C11——ISO/IEC9899:2011,ISO发布的最新C标准。新标准提高了对C++的兼容性,并增加了新的特性。C语言标准•编写系统软件,如操作系统;•编写嵌入式系统程序;•编写驱动程序;•编写底层驱动程序;•编写图形、图像处理程序等;交流、笔试、面试时最常见的语言。C语⾔适合用在哪⾥?1920如何学习程序设计?数据表达:变量定义、正确书写表达式数据输入、输出流程控制:

if(a>b)

x=a;

else

x=b;for(i=1,sum=0;i<=5;i++)sum=sum+i;设计函数学习C语言的语法21学习解决问题的方法

求级数12+22+32+……前100项之和矩阵转置打印乘法表?

将数据按从小到大的顺序排序如何学好程序设计?了解熟悉语法规则

认真听讲,仔细阅读教材,对语法点进行测试多上机练习编程

模仿例题,读别人的程序,做习题,多写程序不要死背概念

要理解,要熟练,要灵活运用学习关键

兴趣、信心、功夫、方法

逐步掌握算法设计思想和方法

熟练掌握调试程序方法学习技巧

问老师,问同学,问网络,试一试

22程序框架:•本课程中所有的程序都需要这一段。•直到学函数之前,我们的代码都只是在这个框架中间。1.4C程序结构24#include<stdio.h>intmain(){

printf(″HelloWorld!\n″);

return0;}程序运行结果是在屏幕上输出:HelloWorld!例1:第一个C程序。/*计算两数之和*/

#include<stdio.h>/*编译预处理*/

intmain()/*主函数*/

{

inta,b,sum;/*定义变量为整型*/

a=123;/*变量赋值*/

b=456;

sum=a+b;/*求和*/

printf(″sumis%d\n″,sum);/*输出和*/

return0;

}程序进行运算,并在屏幕上输出一行信息:sumis579。例2:计算两数之和,并在屏幕上显示结果。26例3:用另一种方式编写计算两个数之和程序。#include<stdio.h>intADDxy(inta,intb){intc;c=a+b;return(c);}intmain(){intx,y,z;

scanf(“%d%d”,&x,&y);

z=ADDxy(x,y);printf(“sum=%d\n”,z);return0;}程序运行情况:85↙sum=13子函数主函数271)一个C程序可以由多个源程序文件组成,每个源程序文件由一个或多个函数构成。

C程序源程序文件1源程序文件i源程序文件n预编译命令函数1函数n函数体函数首部………C程序的结构第28

页2)C程序总是从main函数开始执行的,与main函数的位置无关。3)C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上,C程序没有行号。4)每个语句和数据声明的最后必须有一个分号“;”5)C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的6)在C语言中,区分大小写字母。(C语言习惯用小写字母)7)书写程序时,最好使用规范的缩进格式的形式。8)C程序注释/*……*/可以写在程序的任何位置上。1.5运行C程序的方法1.运行C程序的步骤上机输入、编辑源程序对源程序进行编译与库函数连接运行目标程序2.C程序的开发环境VisualC++2010

-Windows平台上最流行的C/C++可视化集成开发环境

-是VisualStudio2010的一个模块

-包含了文本编辑器、资源编辑器、工程编译器、源代码浏览器、集成调试等工具以及一套联机文档。VisualC++6.0Windows平台上C/C++集成开发环境之一DevC++

-免费、小巧、安装简单,支持C/C++标准;-适于Windows环境,集成开发平台(IDE);

-提供高亮度语法显示,调试功能完善。Code::Blocks-简称CB()第二章

数据类型、运算符与表达式

32本章要点

数据的描述规则数据的操作规则

33

2.1

2.2

2.32.42.5基本符号数据类型运算符和表达式数据类型转换自增运算和自减运算主要内容34

程序设计语言的基本规则包括

常数变量运算符表达式函数什么是语言规则?为什么要有这些规则?

把自然语言描述问题的方式转换为C语言的形式表达给计算机规则表达式常数变量函数运算符问题

35

常数3、5和3.6的存放空间是否相同?变量a如何表示?如何存放?计算机如何知道3.6和a之间的关系?和sinx

如何输入?如何存放?计算机如何识别“=”?运算结果放在哪里?计算机完成上述计算,首先要解决数据的输入和存放问题

2.1C语言的基本符号36数字:0123456789字母:abc……zABC……Z运算符:表达程序基本操作使用的符号特殊符号:_(下划线)回车(\r)换行(\n)制表符(\t)基本字符集ASCII字符集C语言的基本符号构成37auto breakcasecharconstcontinuedefaultdo

doubleelse

enum

externfloatforgoto

if

int

longregister

returnshortsignedsizeof staticstructswitchtypedefunionunsignedvoidvolatilewhile保留给语言本身使用,也称为保留字。关键字C语言预先规定的,具有特定意义的字母组合。标识符定义

-为程序的构成成份命名。

-如:变量名、函数名、文件名、类型名等。命名规则

-只能由字母、数字和下划线组成;

-首字符必须为字母或下划线;

-见名知意,区分大小写;

-不能使用系统的保留字;

-各编译系统允许的标识符长度不同,建议不超过8个字符。C语言的基本符号构成38如:area、sum、Sum_stu1、lesson_1变量

变量是在程序执行期间其值可以改变的量,必须先定义后使用变量定义的格式

类型说明符变量名1,变量名2,变量名3,…,变量名n;

如:inta,b,c;

floatx;功能:指定变量的名字和数据类型,一次可以定义一个或

多个相同类型的变量。变量定义的位置变量必须在第一条可执行语句前定义(C99取消了这一规定)。变量的命名

变量的命名与标识符命名规定相同。39变量voidmain(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义可执行语句i内存….…...000000000012FF300012FF34….…...变量的属性40程序中:

inti;

floatk;

ki的地址k的地址i3.1410变量名:代表内存中的存储单元;通过变量名来存、取存储单元的内容。变量的地址:系统分配给变量的存储单元的起始地址。变量的类型:定义时指定,决定存储单元的大小和数据的存储方式。变量的值:对应变量名存储单元存放的具体数值。变量可以在定义时对其赋值,称为初始化。变量没有赋值,其单元内容不可以使用,是内存中的随机数。变量在程序中可以被多次赋值。初始化不是在编译时进行,而是在程序运行时完成的。41变量的初始化=

赋值号表示将右边的表达式内容赋给左边的变量inta,b=5,c=5;inta,b,c;b=5;c=5;

inta=b=c=5;常量:在程序运行中,其值保持不变的量称为常量。常量的表示方法:数值常量

例如:10,3,2.68等符号常量

用一个符号代表一个常量,必须在函数开始用宏定义声明后使用。

42符号常量定义:#define宏名符号串功能:在程序编译时,首先使用符号串替换程序中的所有宏名,再进行编译。符号串可以是常量、表达式、格式串等。

常量计算圆的面积43#include<stdio.h>#definePI

3.1415926intmain(){

floats,r=10;

s=PI*r*r;

printf("s=PI*r2=%d",s);

return0;}

优点:方便程序书写调试,提高程序的可读性;习惯用大写字母表示;宏名不是c语句,后边不能加分号这个PI替换吗?编译之前,使用3.1415926替换PI;2.2C语言数据类型问题1:什么是数据类型?高级语言把它们能处理的数据分成若干类,这些类就是数据类型。44问题2:为什么要划分数据类型?确定不同类型数据在计算机中所占用的存储单元;确定不同类型数据的存储方法和表示范围:确定不同类型数据能执行的运算;可以更有效地组织数据,规范数据的使用,提高效率。

数据类型的概念45数据类型的概念问题3:变量定义与数据类型的关系?所有的变量在使⽤之前必须进行定义(声明);所有的变量必须具有确定的数据类型;数据类型表示在变量中可以存放什么样的数据;变量中只能存放指定类型的数据,程序运行过程中也不能改变变量的类型。46

基本整型整型短整型长整型

无符号整型算术类型字符型单精度型实型(浮点型)双精度型基本类型长双精度型

枚举类型指针类型数据类型数组构造类型结构体类型共用体类型

C语言的数据类型规定:在程序中用到的数据,必须指定数据类型。47

整型变量的形式(VC++2010)共六种基本整型短整型长整型无符号整型无符号短整型无符号长整型intshortintlongintunsignedintunsignedshortunsignedlong占内存字节数4244242.2.1整型数据在内存中占字节数与所选系统有关。1.整型变量

ANSIC并没有规定int型所占用的字节数,只是规定,不短于short,不长于long型。

类型名称类型说明符字节数位数取值范围基本整型int432-2147483648~2147483647-231~231-1短整型shortint216-32768~32767-215~215-1长整型longint432-2147483648~2147483647-231~231-1无符号基本整型unsignedint

4320~42949672950~232-1无符号短整型unsignedshortint2160~655350~216-1无符号长整型unsignedlongint

4320~42949672950~232-1

48

整型数据占用的存储空间和取值范围

提示:定义变量时注意考虑变量所占存储容量和取值范围。

49例:定义整型变量

inti,j;

longintk,m;unsignedintx,y;变量有值吗?既不指定signed,也不指定unsigned,则隐含为有符号(signed)占多少字节?

50

如:int型数的表示范围:假定存储长度为16位

000000000000000100000000000000111

111111111111111a=3无符号整数=65535数据位符号位符号位a=151

0

111111111111111最大的正数?=215-1=32767符号位最大的负数?=-215=-327681000000000000000

定点二进制补码表示数的表示范围:-32768~32767

注意数据的溢出问题符号位基本整型:-231

~

231-152

例:intmain(){

shortinta,b,c;

a=32767;

b=3;

c=a+b;

printf("c=%d\n",c);

return0;

}1

000000000000010C-32766的补码形式,程序运行结果溢出对负数的补码再求一次补,就可得到该数的原码。53

整型常量的不同数值表示方法 十进制数:0~9

八进制数:0~7,以0开头 十六进制数:0~9,A~F/a~f,以0x或0X开头2.整型常量

例如:100、-8、0;010、024;0x18、0X1F整型常量的类型根据值大小默认类型例:32767的类型是shortint(int)在常量后面加l(小写l)或L,表示longint型

例:123L,0L,432l都是longint型常量2.2.2实型数据(用来表示实数)类型名称类型说明符长度取值范围有效数字单精度型float4字节10-38~10386-7位双精度型double8字节10-308~1030815-16位长双精度型longdouble8字节10-308~1030815-16位第54

页1.实型变量实型变量分类:按数值的取值范围不同分为三种:

单精度、双精度和长双精度型。

实型变量的有关规则:例:floata,b;doublec,d;

longdoublee,f;

计算机中采用以2为底的科学计数法存储:

N=数符

RE

M(其中:数符0为正,1为负,M为尾数,E为阶码,R为基数)

例如:-12345678可以表示为-1.2345678

107

55

浮点数的表示指数形式——科学计数法指数部分小数部分浮点数的表示56阶码数符尾数1位8位23位阶码(指数部分)尾数(小数部分)

float单精度:(23位尾数,6~7位有效数字)double双精度:

阶码数符尾数1位11位52位(52位尾数,16位有效数字)

尾数的位数决定数的精度阶码的位数决定数的范围

浮点数的标准格式(IEEE754标准):由于机器存储位数的限制,浮点数都是近似值,多个浮点数运算会产生误差。2.实型常量(实型常数不区分单精度和双精度)两种表示形式:十进制数形式:由数字和小数点及正负号组成。(注意:必须有小数点)

例如:23.678.67823.指数形式:由数字、小数点、字母e或E及正负号组成。(注:e或E之前必须有数字,且后指数必须为整数)

例如:3.5E-52e3E23.6e3.5.e6e

57

实型常量后加f(或F)表示按单精度存储和运算例如1.23456f

2.2.3字符型数据

字符型数据用来表示一个字符值。在计算机内部存储字符的ASCII码值。1.字符常量

用单引号括起来的一个字符(只能包含一个字符)

例如:

'a'、'A'、'$'、'

1'

注:'a'与'A'是不同的字符常量。58

'abc'、"a

"

59

转义字符:

转义字符的概念:是一种特殊的字符常量,用于表示常用的、但却难以用一般形式表示的不可显示字符。

转义字符的表示:

用一个转义标识符“\”开头,后面是需要的转义字符。常用的转义字符序列的字符常量见下表:字符常量60

转义字符表:转义字符功能

\n换行

\v垂直制表

\b退格

\r回车

\f走纸换页

\t从当前位置跳到下一个制表位(1个制

表位8列)\\反斜线字符

\'单引号字符

\“

双引号字符

\ddd1至3位八进制数表示的字符

\xdd1至2位十六进制数表示的字符转义符“\”表示将其后的字符原来的含义进行转换,变成某种另外特殊约定的含义。

61例:#include<stdio.h>main(){

printf(“123456781234567812345678\n”);

printf(“c\tlanguags\be\rC\n”);printf(“is\tusef\165\x6c”);}屏幕输出:Clanguageisuseful165转换为十进制为117,是ASCII的u6c转换为十进制为108,是ASCII的l62

定义形式:用char类型说明占存储空间:一个变量占一个字节,存储字符的ASCII码数值。2.字符变量一个字符变量只能包含一个字符chara,b,c;a=‘1’;b=‘B’;c=‘c’;

例:63

‘a’的ASCII值为97内存中存储形式01100001例:

ASCII码字符‘a’、’A’、‘1’

存储为:97、65、4901100001在ASCII范围以内,整型数据与字符型数据可以通用,整型变量和字符型变量可以相互赋值,字符型数据可以直接与整型数据进行算术运算。整型数97(假设2字节)

内存中存储形式00000000低字节高字节共

62页第64

页intmain(){chara;intb;a=’A’;b=a+25;printf(“%c,%d,%c,%d”,a,a,b,b);

return0;}例:

计算字符’A’与整型数据25的和。程序运行结果:A,65,Z,9065

3.字符串常量字符串常量是用双引号括起来的一个或多个字符。字符串常量中的字符依次存储在内存中的一块连续区域,末尾自动添加\0作为字符串的结束标志。n个字符组成的字符串常量,占内存空间为n+1个字节。china\0字符串结束标记“空”字符例:"a"

串长1

"ThisisCstring"

串长16

""

(空格)串长1

""

(不含空格)串长0字符常量和字符串常量的区别:在程序中,可以用字符常量或字符串常量表示单个字符,例如‘a’,或“a”,两者的区别如下:(1)字符串"a"在内存中占2个字节,而字符'a'在内存中占4个字节(C和C++不同)。

字符串"a"字符'a'(2)不能将字符串赋给一个字符变量。例:charch1,ch2;

ch1='a';ch2="a";66

a\0a1.以下不合法的变量名为:

(A)_123(B)IF(C)e4(D)float2.指出下列字符串的长度及输出内容:

\\\’\054”

“\x56\”\\\c\ta”

“\\\n\t\bab”

67

3输出\‘,输出V”\ca6输出\ab十进制为86对应”V”“ab\0efg”“ab\011efg”2ab6abefg十进制为9对应ASCII为”\t”练习2.3.1算术运算符68

运算符:运算符是描述各种操作的符号。运算符分类:-算术运算符-关系运算符-逻辑运算符-位运算符-赋值运算符表达式:由运算符连接起来的,符合C语言语法的式子。算术表达式:由算术运算符、常数、变量、函数和圆括号组成。应注意:左右括号必须配对,多层括号都用圆括号表示。符号说明优先级结合性算术表达式+-单目取正单目取负1414从右到左a=+8b=-a*/%乘除取余131313从左到右a=12*5.5b=14/6.5c=12%5+-加减1212从左到右a=15+8.5b=18-8.569

基本算术运算符任何运算符都具有两个属性:优先级:当有若干运算符同时出现在表达式中时,优先级规定了运算的先后次序。

*/%高于+-结合性:当若干具有相同优先级的运算符相邻出现在表达式中时,结合方向规定了运算的先后次序。

分为“从左到右”和“从右到左”。

例如:a-b+c

例如:‘a’+‘b’+(a*b)/c+2.870运算符的结合性和优先级单目运算符

只有一个运算对象的运算符:+、-inta=10;intb=-20;

b=-b;7172“/”是除法运算符,当两个整数相除时结果取整(整除)。若有一个是负数,采取向零取整;注意在表达式中的使用。如:

9/2=4

-9/2=-4

1/2=0

1.0/2=0.5

整除问题“%”是取余数运算符;该运算只能作用于两个整数的运算,运算结果是两个整数的余数,结果为整数;

运算结果的符号与被除数的符号一致;

如果被除数小于除数,结果即为被除数。例:9%2=1;-9%2=-1;9%-2=1;2%9=2

求余运算有哪些用途?

73求余运算常用数学库函数常用数学库函数平方根函数:sqrt(x),计算的值调用数学函数时,要求在源文件中包含头文件math.h.#include<math.h>绝对值函数:fabs(x),求x的绝对值幂函数:pow(x.n),计算xn指数函数:exp(x),计算ex以e为底的对数函数log(x),计算lnx三角函数:sin(x),计算sin(x)的值

75表达式书写规则

(a+b+c)/(sqrt(a)+b*(sin(x)+sin(y)+sin(z)))使用合法的C语言运算符;表达式必须书写在一行;使用圆括号改变表达式的运算顺序。例如:强调:对C语言表达式的理解和掌握,除了要严格遵循表达式构成的规则,还要加强对表达式含义的理解,掌握运算符的优先级和结合规则。在此基础上才能灵活地运用表达式,有效地对实际问题进行描述。2.3.2赋值运算符和赋值表达式赋值运算符:=形式:变量名=常量或表达式功能:将右边常量或表达式的值赋给左边的变量。a=b;b=a;优先级:2级(较低)结合性:从右向左。例:a=3;b=c+d

;i=j=1;赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。赋值运算中的自动类型转换注意:赋值后,原来左边的值被右边表达式的值替换;如果右边表达式的值的类型与左边变量的类型不一致,以左边变量的类型为准,将表达式值的类型转换为左边变量的类型。

int←float

丢失小数部分(非四舍五入)float←double数值溢出或损失精度(位数超过7位时)float←long整数的位数超过7位时,损失精度例:inta=12,b=8;

floatx,y;

b=x=y=a+b;

表达式的值?x的值?b的值?复合赋值运算78复合赋值运算符:在赋值符“=”之前加上其它运算符。共有10种复合赋值运算符:+=,-=,*=,/=,%=(算术运算有关)

<<=,>>=,&=,^=,|=(与位运算有关)

特点:简化程序书写。结合性:从右至左。注意两个运算符中间不要有空格。符号复合赋值运算说明等价于结合性+=-=a+=ba-=ba=a+ba=a-b从右到左*=/=%=a*=ba/=ba%=ba=a*ba=a/ba=a%b从右到左算术复合赋值运算z-=x+y;

z=z-(x+y)2.0-(1.5+2.0)=-1.5double型例:doublex=1.5,y=2,z=2;设有如下变量定义,求出i的值:inti=3,j=5;floatx=2.5,y=5.0;i-=j*=x+y;80复合赋值运算练习:计算过程:i=i-(j=j*(x+y))

=i-(j=j*7.5)

=i-(j=5*7.5)

=i-37=-34结果:i=-342.3.3逗号运算符和逗号表达式1.逗号运算符:即“,”优先级:所有运算符中级别最低的运算符。2.逗号表达式

形式:表达式1,表达式2,……,表达式n

求解过程:顺次求解表达式1,表达式2……

最后求解表达式n。表达式值:逗号表达式的值为表达式n的值。

结合性:左结合例如:a=3*5,a*4a=3*5,a*4,a+5x=(a=4%3,a+1,a*10)

81

表达式的值60表达式的值20表达式的值10运算符属性小结(1)优先级当若干个运算符同时出现在表达式中时,优先级规定了运算的先后次序。优先级有15级。

C语言把圆括号作为运算符,规定它的优先级最高(15级),从而保证优先运算圆括号内的式子,逗号运算符的级别最低,规定为1级。(2)结合性当若干个具有相同优先级的运算符相邻出现在表达式中时,结合性规定了运算的先后次序。分为“从左到右”和“从右到左”两个结合方向。大多数运算符的结合方向为“从左到右”;单目运算符、赋值运算符的结合方向“从右到左”;(3)双目运算符两边运算对象的类型必须一致。82

2.4数据类型转换83

形式:自动进行-------隐式转换整型、实型和字符型可以混合运算,系统自动转换成占内存字节数最大的操作数类型。强制进行------显式转换根据需要将某一个表达式的值的类型强制转换为用户指定的类型。提示:取值范围小的类型转换为取值类型大的类型是安全的;反之则不安全。会丢失信息或损失精度。应恰当选取数据类型以保证数值运算的正确性,如果确实需要进行不同数据类型之间运算时,采用强制类型转换,显示的表达程序员的意图。转换规则:

intunsignedintlongintunsignedlongintdoubleshort,charfloat84

(1)float型数据一律转换成double型数据。(2)char和shortint型数据一律转换成int型数据

即使两个操作数类型相同,但只要它们同属char,shortint或float类型,则转换一定发生。(类型提升)。其他类型将根据参与运算的操作数类型由低向高的方向转换。竖直方向的转换表示那些一定要发生的转换;横向表示操作数的类型转换的方向。2.4.1不同数据类型的数据间的混合运算优先级低的向优先级高的转换85

f的类型?

int

double

doubledouble已知:inti;longe;floatf;doubled;f=10+‘a’+i*f-d/edouble注意:运算过程中的类型转换不是变量本身数据类型的转换。例1:86

2.4.2强制类型转换将表达式的值转换为指定类型。形式:(类型名)表达式例如:(double)(a+b)

说明:

(1)表达式应用括号括起例如:(int)(x+y);

将x+y的值转换为整型

(int)x+y;

将x的值转换为整型

(2)在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。例如:floatx=8.6;

inty;y=(int)x;87例:分析下列表达式。inta=12,b=3;floatx=18.5,y=4.6;

(int)x%(int)y

(float)(a*b)/2

18.0000002强制类型转换示例:注意:运算过程中的类型转换不是变量本身数据类型的转换。2.4.3自增自减运算88自增、自减运算符:++、--++、--为单目运算符++、--只能用于变量,而不能用于常量或表达式。使用格式-前缀形式:++变量

或--变量-后缀形式:变量++

或变量--作用:使变量的值增加1或减1。如:++a完成a=a+1,表达式的值为a+1后的值;a++完成a=a+1,表达式的值为a原来的值;右结合性(即自右至左)。89作为前缀运算符:

++i

,--i

先对i的值加1或减1,然后再使用i的值

例如:k=++i;i=i+1;k=i;

前缀及后缀运算作为后缀运算符:

i++

,i--

先使用i的值,然后再对i的值加1或减1

例如:k=i++;k=i;i=i+1;

与其他运算组合使用:

k=-a++;k=-(a++);

当i=2时,执行完该语句,i和k的值都是3。当i=2时,执行完该语句,k的值是2,i的值为3。当a=1时,执行完该语句,k的值是-1,a的值为2。90自增自减运算生成的代码效率会高些;可以单独使用,常作为循环变量的修改;单独作一个语句使用时,两种形式的结果一样,都完成了加1或减1的运算;当出现在其它表达式中时,前缀和后缀形式结果不同;不建议过多组合进表达式使用,不同的编译系统也会产生不同的运算结果。

如:k=++i+++i+++i;?

自增自减运算小结

91

sizeof运算符sizeof运算符

功能:获取变量和数据类型所占内存大小(字节数)格式:sizeof表达式sizeof(数据类型名或表达式)例:

sizeof(int)其值为4(在VC++6.0下)

sizeof(long)其值是4

sizeof10L其值也是4

unsignedlonga=2;sizeof(a)其值也是4

推荐的编程习惯(1)变量的声明集中放在程序的开头。(2)不同类别、不同意义的变量分开声明。(3)变量名使用有意义的标识符,如与所表达的意义相关的英文单词、单词组合、单词缩写、汉语拼音等。(4)运行中不变的量定义成常量。使用符号常量。(5)使用圆括号清楚地标明运算的优先级。(6)不使用过长的语句,过长时可以分成多个语句。(7)对程序中的主要运算、变量进行注释。

92

小结

本章概念较多,是今后编程的理论基础。

下列内容需要我们特别留意和深刻领会:各种类型数据的定义、在内存中的表示、取值范围;变量的定义转义字符有符号数与无符号数的区别浮点数的表示方式及误差问题数据类型的自动转换与强制类型转换运算符和表达式的正确书写、优先级、结合性等。

93

数据的输入和输出程序设计基础第三章

第95

页本章要点掌握C语言中输入输出数据的方法掌握各种格式的使用

第96

数据输入输出的概念输出:从计算机向显示器、打印机等外部设备输出数据。输入:从标准输入设备键盘、鼠标等向计算机输入数据。C语言不提供输入输出语句,输入输出操作是由C函数库中的函数实现。调用输入输出函数时,要求在源文件中包含"stdio.h"头文件。如:#include<stdio.h>

或#include"stdio.h"

第97

页3.1.1格式输出函数函数的基本功能格式:printf(格式控制串,输出表列)功能:从标准输出设备上,按指定的格式输出对应的变量。printf(...)3.1数据输出2.函数说明:(1)格式控制串由双引号括起来,由“%”和格式符以及普通字符(即需要原样输出的字符)组成。

(2)输出表列是需要输出的一些数据,可以是常量、变量或表达式。(3)输出的参数必须与格式控制符中的格式说明在类型、个数和位置上一一对应。inta=3,b=4;printf("a=%db=%d",a,b);98输出表列格式字符普通字符输出结果:a=3b=4先看一个具体实例:

inta=3,b=4;printf("%d",a*b);结果:

第99

页3.格式说明符一般格式:%[-][m][.][n][l]格式符说明如下:-当数据的宽度小于显示宽度时,数据左对齐,右方补空格.m

输出数据占m个字符位,不够右对齐,左边填空格。n输出数据有n位小数m.n输出数据占m列,n位小数对不同类型的数据使用不同的格式字符。有以下几种格式符:

第100

页d:

以十进制带符号形式输出整型数o:以八进制无符号形式输出整型数x:以十六进制无符号形式输出整型u:以十进制无符号形式输出整型数f:以小数形式输出单、双精度实型数e:以指数形式输出单、双精度实型数c:以字符形式输出一个字符s:以字符形式输出一个字符串ld:以十进制带符号形式输出长整型数基本格式控制符:%格式控制符(1)d格式符:

输出十进制整数。

%d

--按整型数据的实际长度输出。

%md

--m为指定的输出字段的宽度。若数据的位数小于m,则左端补以空格;若大于m,则按实际位数输出。

%ld

--输出长整型数据.

第101

页例:inta=1234;

printf(“%3d”,a);

printf(“%5d”,a);printf(“%-5d”,a);12341234实际左补空1234左对齐,右补空

第102

页VC++(2)o格式符以八进制数形式输出整数。将内存单元中的各位的值(0或1)按八进制形式输出,输出的数值不带符号,将符号也作为八进制数的一部分输出。例如,-1在内存单元中(以补码形式存放)如下:inta=-1;-1:

printf("%d,%o\n",a,a);

输出:1111111111111111

第103

页(3)

x格式符,以十六进制数形式输出整数。(4)

u格式符,以十进制形式输出无符号型数据。

[例]#include<stdio.h>main(){unsignedinta=65535;intb=-2;printf("a=%d,%o,%x,%u\n",a,a,a,a);printf("b=%d,%o,%x,%u\n",b,b,b,b);}

输出:

VC++下

第104

页(5)c格式符输出一个字符。[例]charch=‘a’;printf("%c",ch);

注意:若整数的值在0~127范围内,也可以用字符形式输出。在输出前,将该整数转换成相应的ASCII字符;字符数据也可以用整数形式输出。[例]#include<stdio.h>main(){charc='a';inti=97;printf("%c,%d\n",c,c);printf("%c,%d\n",i,i);}

输出:a,97a,97第105

页s格式符输出一个字符串。说明:--若不指定字符宽度和对齐方式,则输出全部字符串(第一个\0之前).

例如:printf("%s","CHINA");

程序运行输出:CHINA--若指定宽度m,当实际字符个数大于m,按实际宽度输出;如果实际字符个数小于m,字符右对齐,左边填空格。--若指出.n从左边开始截取n位字符例如:printf("s1=%s,s2=%3s,s3=%-5.2s,s4=%.3s","abcd","abcd","abcd","abcd");

程序运行输出:

s1=abcd,s2=abcd,s3=ab,s4=abc

第106

页(7)f格式符以小数形式输出实数(包括单、双精度)。适合输出小数位数较少的实数,使输出的宽度较小。1)%f,不指定字段宽度,由系统自动指定,使整数部分全部输出,输出6位小数(输出双精度数据,也是6位,但误差降低)。2)%m.nf,指定输出的数据共占m列,其中有n位小数,并进行四舍五入。若数据长度小于m,则左端补空格。例:floatx=15.3,y=222.225111;printf("%f,%6.2f\n",x,y);第107

页3)仅指出小数位数,整数按实际输出。floatx=12.3456;printf("%.3f",x);输出:12.346

第108

页8.

e格式

以指数形式输出实数。

1)%e

不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定6位小数,指数占5位(“e”占一位,指数符号占一位,指数占3位)。数值按标准化指数形式输出(小数点前有1位非零数字)。

2)e格式适合输出小数位数较多的实数。

例如:printf("%e",123.456);

输出:1.234560e+002e格式输出的实数共占13列宽度.3位6位

第109

页g格式符:根据数值的大小输出实数,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。例如:f=123.468;

printf("%f%e%g",f,f,f);

输出如下:123.4680001.234680e+002123.46810列13列10列共

27页第110

页3.1.2字符输出函数格式:putchar(字符变量)功能:在标准输出设备上,输出指定的字符。说明:一次调用只能输出一个字符。例:#include<stdio.h>intmain(){chara,b,c;a=‘B’;b=‘O’;c=‘Y’;putchar(a);putchar(b);putchar(c);return0;}输出:BOY与C格式的区别?

第111

页几点说明:1.格式控制串的控制符号与变量表要一一对应,即:类型相同,个数相等2.格式控制符号用小写字母3.格式控制符号之外的符号均照原样显示4.若需显示百分号,格式为:%%5.如果实际数据所占字符位大于指定的域宽,按实际输出6.可以省略输出变量,只输出格式控制串中的内容。

printf("\n");printf("Hi,zhang");printf("\"arer=\"");3.2.1格式输入函数

一般形式:

scanf(格式控制字符串,地址表列)“格式控制字符串”的含义同printf函数,“地址表列”:要求是变量的地址,或字符串的首地址.

例如:

inta,b,c;scanf("%d%d%d",&a,&b,&c);

说明:

1)scanf函数中的“格式控制”后面应当是变量地址而不是变量名。

2)输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车键、跳格键tab分隔。

如上例:输入时:1

2

3<回车>

第112

页3.2数据的输入

第113

3)输入时不允许规定精度,可以指定域宽inta;scanf("%3d",&a);floatx;scanf("%8.2f",&x);

4)输入时,遇下列情况结束*回车,空格*宽度结束*非法输入intk,m;scanf("%d%d",&k,&m);输入:12456<回车>k为:12m为:456scanf(“%3d%3d”,&a,&b);输入123456系统自动将123赋给a,456赋给b5)格式控制字符串中若包含普通字符,则输入时必须照原样输入普通字符,否则将导致输入结束。如:inta,b,c;scanf("a=%d,b=%d,c=%d",&a,&b,&c);

输入:a=1,b=2,c=3<回车>6)数值型数据和字符型数据混合输入方法

main(){inta,b,c,d,e;scanf("%d%c%c%c%d",&a,&b,&c,&d,&e);printf("a=%d,b=%c,c=%c,d=%c,e=%d",a,b,c,d,e);}

输入:123abc789<回车>

输出:a=123,b=a,c=b,d=c,e=789

第114

页输入double型数据,必须用格式说明符%lf或%le,输入long型数据,必须用%ld。标准C在scanf中不使用%u说明符,对unsigned型数据,以%d或%o、%x格式输入。%后的“*”为附加说明符,用来表示跳过它相应的数据。输入时格式控制符中不能加“\n”。在scanf函数的格式控制字符串中尽量不要出现普通字符,不要将输入提示放在其中。需要显示输入提示应该调用printf函数实现。

第115

页说明

第116

页#include<stdio.h>intmain(){inta;floatb,c;printf("Pleaseinputabc:");scanf("%d%f%f",&a,&b,&c);printf("a=%d,b=%f,c=%6.2f\n",a,b,c);return0;}输入:12345678.945<回车>输出:a=12,b=345.000000,c=678.95例:提示输入信息放在输入语句之前

Pleaseinputabc:#include<stdio.h>intmain(){floata,b;scanf("%d%d",&a,&b);printf("a=%fb=%f\n",a,b);return0;}scanf()的格式使用错误分析1程序中数据输入格式用错,程序结果如何?scanf()将读入错误的数据。输入:12.315.6

输出:a=0.000000b=0.000000

第117

页#include<stdio.h>intmain(){inta,b;scanf("%f%f",&a,&b);printf("a=%db=%d\n",a,b);return0;}scanf()的格式使用错误分析2程序中数据输入格式用错,程序结果如何?scanf()将读入错误的数据。输入:1234

输出:a=1094713344b=1107820544

第118

页常见错误:floata;doubleu;scanf("%f",a);/*缺少地址符*/scanf("%7.2f",&a);/*格式符前指定了精度*/scanf("%f\n",&a);/*格式符中使用了换行符*/scanf("%f",&u);/*双精度型数据使用了单精度格式*/scanf()格式使用小结小结:采用正确的格式输入数据,是程序运行正确的基础。输入时不允许指定数据的精度。输入时不允许加“\n”。不能使用中文的标点符号。第119

第120

页3.2.2getchar函数(字符输入函数)一般形式:getchar()------没有参数功能:从键盘输入一个字符。说明:1)只能输入一个字符

2)可以将获得的字符赋给int型或char型的变量

[例]#include<stdio.h>intmain(){charc;c=getchar();putchar(c);return0;}运行时键入字符‘a’,则其输出为:a#include<stdio.h>intmain(){charc1,c2;c1=getchar();printf("c1=%c\n",c1);c2=getchar();printf("c2=%c\n",c2);

return0;}

第121

页使用getchar()输入时出现的问题输入:a

输出:c1=ac2=输入:ab

输出:c1=ac2=b

输入的数据放在输入行缓冲区,直到键入回车符或文件结束符EOF时,才认为输入结束,getchar()才开始从输入缓冲队列读取字符。前面函数没读走的数据仍在缓冲队列中,将被下一个函数读取。

一次输入,多次顺序读取。例1:#include<stdio.h>intmain(){charch1,ch2;ch1=getchar();printf("ch1=%c\n",ch1);ch2=getchar();printf("ch2=%c\n",ch2);}#include<stdio.h>intmain(){charc1,c2;

c

温馨提示

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

评论

0/150

提交评论