C语言课件完整版(课本全部内容)_第1页
C语言课件完整版(课本全部内容)_第2页
C语言课件完整版(课本全部内容)_第3页
C语言课件完整版(课本全部内容)_第4页
C语言课件完整版(课本全部内容)_第5页
已阅读5页,还剩609页未读 继续免费阅读

下载本文档

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

文档简介

程序设计根底(C)根底篇第1章程序设计及C概述第2章C语言根底第3章顺序结构第4章选择结构第5章循环结构第6章编译预处理提高篇第7章数组第8章指针第9章函数第10章结构体与共用体第11章位运算第12章数据文件主讲教师:邵明Tel:1课程安排和要求2231.不迟到2.铃不响3.协作学习约法三章3总体安排 学习目标 学习方法 根本要求课程安排、要求总学时:48上课/上机=32/16积极调整思维方式理解概念多做练习理解计算机解题的思想和过程学会使用C语言进行简单程序设计逐步形成良好的程序设计风格上课积极听讲,记录重点、难点按时、独立完成作业上机实习充分准备,实习后认真总结4201228001李晓红1-1.c1-2.c…8-1.c将文件夹压缩=>邮箱(主题:学号+姓名)上机作业作业要求课后习题、题库每章结束之后,按照指定作业格式上交纸质作业各班班长将作业按学号排列有序再提交作业格式从指定地址下载5

地址上机作业上交邮箱下载软件资料地址邮箱密码:jsj99996课程考核形式

期末(70%):笔试+上机

平时(30%):作业+出勤提示:程序设计语言是国家对计算机能力检测的重要内容78第1章

程序设计及C概述程序设计的根本概念算法结构化程序设计方法C语言知识初步8程序设计的根本概念9910程序和程序设计语言#include“stdio.h”main(){floatr,s;r=3;s=3.14159*r*r;printf(“s=%f”,s);}求圆的面积源程序目标程序0000111111111111110001111111101111101010000000011111111111010110001110编译解释r=?s=3.14159*r*r程序计算机能够识别并可以执行的指令序列,是用程序设计语言来描述10

机器语言计算机直接识别的语言,不需要翻译汇编语言效率高可移植性差

高级语言采用数学语言、自然语言表达,可读性

好可移植性高C语言是一种具有低级语言特征的高级语言程序设计语言是计算机能够理解和识别的语言语法程序设计语言的使用规那么1112分析问题确定处理方案确定操作步骤编写程序上机运行程序整理结果程序设计利用计算机解决问题的全过程,程序设计的一般步骤为:分析、理解问题解决方案(大致的思路),建立数学模型求解步骤和流程(算法)〔文字、符号等的描述〕使用程序设计语言编写源程序运行调试程序整理输出结果,写出相关文档1213例如求圆的面积和周长的程序设计一般步骤:

①分析问题求圆的面积和周长需要知道圆的半径r,根据圆的半径求出圆的面积S和周长L并输出结果。②确定处理方案求圆的面积数学公式是:S=лr2求圆的周长公式是:L=2лr③确定操作步骤〔算法〕

确定半径的初值计算面积S

计算周长L

输出结果S,L

1314④根据算法编写源程序〔编码〕将上面求圆的面积和周长算法编写C源程序如下:⑤运行调试程序⑥整理输出结果,写出相关文档#definePI3.14159main(){

floatr=3,s,c;s=PI*r*r;c=2*PI*r;

printf(“s=%f,c=%f\n”,s,c);

}14算法151516

有穷性:必须在有限的步骤内完成确定性:不会产生二义性可行性:算法中描述的操作在计算机上都是可

实现的输入:有0个或多个输入输出:有1个或多个输出算法是对具体问题求解步骤的描述算法及算法的特性算法的特性16用自然语言表示算法用流程图表示算法

用伪代码表示算法用程序设计语言表示算法的描述工具【例】求两个整数m与n的和步骤1:输入整数n和m;步骤2:求和sum=m+n;步骤3:输出两数之和sum。传统流程图N-S流程图传统流程图N-S流程图17结构化程序设计方法181819自顶向下、逐步求精程序结构模块化〔每个模块只有一个入口和一个出口〕程序流程使用3种根本控制结构描述模块:每个子功能设计原那么1920顺序结构

N-S流程图传统流程图选择结构

N-S流程图传统流程图循环结构

N-S流程图传统流程图根本控制结构20C语言的初步知识212122C语言的起源与开展起源ANSI标准ALGOL60CPLBCPLB语言C语言(1960)(1963)(1967)(1970)(1972)流行C语言编译系统MicrosoftC或称MSCBorlandCTurboCQuickCVisualC++〔简称:VC〕2223语言简洁(32个关键字,9种控制语句)运算符丰富〔34种〕,能直接访问物理地址数据类型丰富,能用来实现各种复杂的数据结构生成的目标代码质量高,可移植性好有较强的预编译处理能力即具备高级语言的优点又有低级语言的特点语法限制不太严格,程序设计自由度较大C语言的特点2324一个C程序对应一个文件(.c)C程序的根本单位是函数,包括:一个主函数main()〔必需〕假设干个用户定义的函数〔可无〕每个函数的结构如下:函数返回值函数名(函数参数)

{局部变量定义;执行语句;

}C语言程序的构成和书写标准C程序构成2425main()的作用每个程序至少有一个主函数main()main()函数的位置随意

C程序从main()函数开始执行并终止于main()函数25采用阶梯式书写格式

不同层次的语句,从不同的起始位置开始,这样可以使程序结构清晰程序习惯使用英文小写字母书写

大写字母习惯上常作为常量或另有其它用途一般每一条语句占用一行

允许1行内写几条语句,或1条语句分写在几行

26a=1;b=2;a=1;b=2;C程序书写规那么2627使用注释,可以单占1行,也可以跟在语句的后面/*注释文本*/

书写风格较好

书写风格差27C程序开发过程28编译编译错是连接否连接错是运行错是运行否否编辑编辑编译连接执行程序生成目标文件(.obj)生成可执行文件(.exe)file.objfile.cfile.exe生成源文件(.c)用编辑软件编写C源程序。检查源程序是否有语法错误。将源程序中引用的标准函数和目标文件装配成一个可执行程序使用文本编辑程序使用C语言编译系统提供的编辑器28C程序中的错误29包括:编译错误、连接错误、逻辑错误和运行错误编译错误是指在程序编译过程中出现的错误。通常是由于不正确书写代码而产生的。如:关键字写错、遗漏标点符号、括号不匹配等。错误类型main(){

floatr,c,s;scanf(“%f”,r);c=2*3.14*rprintf("c=%f,",c);}编译错误;运行错误是指应用程序在运行期间执行了非法操作所发生的错误。5&2930连接错误是指在程序连接过程中出现的错误。通常是由于函数名不正确书写而产生的。main(){

floatr,c,s;

c=2*3.14*r;print("c=%f,",c);}连接错误逻辑错误f

使程序运行时得不到预期的结果。这种程序没有语法错误,也能运行,但却得不到正确的结果。例如,在一个算术表达式中,把乘号“*”写成了加号“+”,条件语句的条件写错,循环次数计算错误等r=5.7;通常,调试程序过程中所花的大局部时间和精力都在逻辑错误上3031C程序错误提示Error

编译时期:通常是语法不正确而导致的。连接时期:通常是函数名不正确而导致的。运行结果错误

由于程序的逻辑设计不正确而导致的。Warning

当获得来自编译器的警告时,应予以重视。多数情况下在程序运行时可能出现不可预见的错误。

31MicrosoftVisualC++6.0

调试C语言程序323233为更好管理C语言程序,在指定盘下建立好文件夹。每个C文件保存在不同文件夹下。C作业程序1程序2例如建立如下结构的文件夹准备工作3334开始->所有程序->MicrosoftVisualStudio6.0->

MicrosoftVisualC++6.0启动VC++3435启动VC++演示3536翻开VC++集成环境目的:下次启动VC++,就不会再出现“TipoftheDay”对话框单击,取消√单击,关闭对话框3637步骤1新建一个文本文件〔.txt〕步骤2将文本文件另存为C文件〔.c〕步骤3编辑C文件,并保存新建C语言源文件步骤3738步骤1:单击该按钮,新建一个文本文件(.txt)步骤2:将文本文件另保存为.c文件选择File菜单->SaveAs…1.选择文件存放路径2.将文件名改为后缀为.C的文件3.单击“保存”按钮proc.c步骤3:在编辑窗口输入编辑C语言程序表示文件进行了修改,可单击工具栏中的“保存”进行保存3839

步骤1:编译当前C程序单击按钮“是”,为当前的应用建立一个新工作区

新建工作空间窗口,主要负责组织源文件编译结果。如果有错误需要修改源程序。找到第一个error处,并双击在箭头所指处前一两行找到错误并修改。修改后再编译,直到没有error为止。;步骤2:连接程序。连接操作后的结果。如果有error,需要修改程序后再连接,直到没有error为止。步骤3:运行程序。2输入2再输入回车调试C语言源文件步骤3940选择File菜单下CloseWorkspace命令,关闭当前工作区在出现的对话框中单击“是”按钮关闭工作区〔调试后必须的步骤〕4041单击“打开”按钮选取C源文件所在文件夹选取文件后,单击“翻开”按钮翻开C源文件4142C源文件备份只需将后缀为.C的源文件复制到U盘4243第2章C语言根底数据类型标识符、常量和变量根本数据类型运算符及表达式43数据类型4444输入设备输出设备存储器运算器控制器知识准备计算机的工作过程45位〔二进制位〕内存中的最小存储单位。每一个位中或者存放0,或者存放1。字节1字节=8个二进制位在内存中,每个字节分配一个地址。存储单元假设干个字节组成,通常是字节的倍数。用来存放一条机器指令或一个数据。几个根本概念46二进制位字节存储单元,可以是1个字节,可以是连续2个字节,可以是连续4个字节FF00FF01FF02地址喂!赵刚是住在2031房间吗?内存结构4700000111最低位最高位01000100FF00FF01FF02FF03FF04存储单元高字节低字节…001000100000011148【例】根据计算机的工作原理描述求解圆面积的过程控制输入设备,将数据=〉内存计算,并将结果

=〉内存控制输出设备,将存储在内存的结果输出到屏幕……ff00ff01ff02ff03short

a,b;a=1;b=a+1;a=a+1;ab变量122提示:在程序中通过定义变量〔对应内存假设干字节〕来访问内存空间。49

通过输入语句,将数据=>

变量计算,并将结果=>

变量通过输出语句,将变量的值输出到屏幕上1rs3.14【例】利用C语言描述求解圆面积的过程main(){}floatr,s;scanf(“%f”,&r);s=3.14*r*r;printf

(“%f”,s);……ff00…ff12…50程序设计步骤

确定数据结构

确定算法

编码调试数据结构主要通过数据类型描述输入数据计算处理输出数据程序=数据结构+算法/*确定数据结构*//*处理数据*//*输出数据*//*输入数据*/51数据类型数据类型数据有型和值之分,型是数据的分类,值是数据的具体表示,是程序处理的对象。数据类型表达数据的特点,确定了数据的取值范围、所能进行的操作以及存储单元的大小52数据类型基本类型构造类型指针类型空类型整型字符型实型枚举类型数组类型结构体类型共同体类型单精度型双精度型说明:C语言的数据结构以数据类型的形式出现,不同的数据类型代表了不同的数据结构。C数据类型53标识符、常量和变量5454

是一个由有限个有效字符组成的序列,在C语言中只起标识作用。主要用作符号常量名、变量名、函数名、数组名、文件名等。

由字母、数字、下划线组成必须以字母、下划线开头最多不能超过31个字符,多余不被识别不能与系统保存字同名区别大小写标识符的构成规那么标识符55关键字

在系统中具有特殊用途,不能再作它用。

例如:main,int,if等预定义标识符

C语言提供的库函数名和预编译处理命令。

例如:printf,scanf,include等用户自定义标识符

用户自己起的变量、函数和文件名等标识符的分类56【例】判断合法的用户标识符

标识符正确否标识符正确否areaa&bPIprintfp_c1

w.w_x1

1xX1x1ifIf合法的用户标识符不能是关键字。但最好防止使用预定义标识符,一般采用小写表示。√×√√√√√××√√×不同的标识符57C语言的数据有常量和变量。在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。常量和变量main(){

shortx;x=1;x=2+x;printf(“%d”,x);}x1

常量:程序中直接表示的值。如:1和2。

变量:用数据类型描述的标识符,代表存储单元。如:标识符x321

变量的三要素:变量名、变量类型和变量的值。变量必须先定义后使用。58#definePI3.14159main(){

floatr,c,s;r=56.7;c=2*3.14*r;s=3.14*r*r;printf("c=%f,s=%f",c,s);}#define符号常量名常量

符号常量与变量不同,其值不能被改变符号常量一般采用大写字母表示PI=3.14PIPI符号常量59根本类型数据6060整型数据:整型常量和整型变量十进制数八进制数十六进制数+123、-234、0、17023、017

0x23、0X17、0xFF0xfa【例】判断018和18整型数据整型常量三种表示形式61短整型常量根本整型常量长整型常量123L、0x17l无符号整型常量023U、0X23u、17u【例】判断-200u整型常量的分类62注意:整型数据在内存所占字节数,不同的C编译环境是不同的。例:在16位编译环境下int类型的变量占2个字节类型标识符字节数数值范围基本整型int4-2147483648~2147483647短整型short2-32768~32767长整型long4同int无符号整数unsignedint40~4294967295unsignedshort20~65535unsignedlong4同unsignedint整型变量数据类型标识符(VC++6.0编译环境)63main(){

shorta,b;

intx;}

类型标识符变量名1,变量名2,…;axb提示:变量必须先定义后使用整型变量的定义64main(){

inta=4,b=4,c;

longx=27;

a=a+1;c=c+1;}

在定义变量的同时,给变量赋上一个确定的值。abcx4427存储了一个不确定的数5提示:出现在赋值号右侧的变量一定要有确定的值注意:引用一个未确定的值造成程序的错误变量初始化65main(){

inta=4,b=a,c;

intx=y=27;}【分析】x=27,

y=27;66〔用2种表示形式〕十进制指数形式10.0、-3.78、0.78数值E±指数或数值e±指数十进制整数或小数整数实型数据:实型常量和实型变量实型数据实型常量<=>10.<=>.78数学表示C的指数表示3.57×1053.0×10-53.57E+5或3.57E5或3.57e53.0E-5或3.E-5或3e-567【例】以下选项中表示一个合法的常量是〔说明:符号□表示空格〕A〕.1e0B〕C〕E9D〕9.12EA〕9□9□9B〕0XabC〕123E0.2D〕2.7e【例】以下选项中可用作C程序合法实数的是√√68类型标识符字节数取值范围有效位数单精度float43.4×10-38~3.4×1038

7位双精度double81.7×10-308~1.7×10308

12~16位main(){

floatx=23.0,y;doublez;printf(“%f”,x);}x

y23.0z注意:实型变量有一定的误差实型变量实型类型标识符实型变量定义69

是字符编码标准,采用高位为0的一个字节编码。取值范围:0~127。

【例】字符A在内存的存储形式0100000141字符型数据字符型数据:字符型常量和字符型变量ASCII表注意:字符在内存中存储的是其ASCII码值。70‘A’、‘a’、‘1’一般表示法转义字符十六进制或八进制(用反斜线后跟一个特定的字符)(用单引号括起来的一个字符)‘\n’、‘\t’‘\x41’‘\101’‘\0’空字符空字符:ASCII码值为0的字符,不同于空格字符字符型常量〔用3种表示形式〕71【例】以下选项中非法的字符常量是A〕’\018’B〕’\“’C〕’\\’D〕’\xcc’A〕'\101'B〕'\65'C〕'\xff'D〕'\019'【例】以下不合法的字符常量是√√72分析同一个字符的多种表示数值1与字符’1’的区别字符A的表示内存的形式(二进制)对应的十进制值‘A’‘\x41’‘\101’0100000165表示内存形式(二进制)对应的十进制数值1字符11‘1’000000010011000114973空字符、数值0和字符0‘a’与a的区别表示内存形式(二进制)对应的十进制空字符数值0字符0‘\0’0‘0’0000000000000000010010010049提示:在运算中空字符和数值0是等价的a:C语言的标识符,可作为变量名或函数名等的标识‘a’:是程序处理的字符数据74类型标识符字节数数值范围char1-128~127main(){charc1,c2;c1=‘A’;c2=c1;}

c1c26565字符型变量字符型类型标识符字符型变量定义75main(){

charc1,c2;c1=97;c2=‘a’;

printf(“%c,%c\n”,c1,c2);}c197c297注意:不要超过一个字节表示的数值范围a,a运行结果:字符型量的运算特点可对字符型变量赋整数值提示:字符型量可作为一个字节的整数值使用76main(){

charc1,c2,ch;

intx;c1=‘B’;c2=’A’;

x=c1–c2

;ch=‘a’+1;

printf(“%d,%c\n”,x,ch);}提示:字符型量参加数学运算时是其ASCII值c1c2chx6665

198可参与任何整数运算1,b运行结果:7797-65=32

97–32=65

65+32=97运算运算结果对应的字符‘a’-’A’‘a’-32‘A’+32’A’’a’main(){

charc1,c2;

c1=‘B’;c1=c1+32;c2=c1+2-32;printf(“%c,%c\n”,c1,c2);}c1c2669868b,D运行结果:大小写转换方法7848-48=049-48=10+48=48运算运算结果对应的数据‘0’-’0’‘1’–‘0’0+‘0’1+‘0’1+48=49main(){

charc=‘3’;intx;x=c–‘0’;c=x+2+’0’;printf(“%d,%c”,x,c);

}

cx513533,5运行结果:数字

数字字符转换‘0’‘1’0179提示:字符的大小取决于ASCII值main(){

charc1=‘a’;

if(c1>=‘a’&&c1<=‘z’)printf(“是小写!”);printf(“%d”,‘a’>’b’

);}

比较大小80用双引号括起的假设干字符“Hello”721011081081110‘H’‘e’‘l’‘l’‘o’‘\0’字符串的结尾符号空串“”‘\0’字符串长度:所包含的字符个数(不包括空字符)

“aa\n\bb012\012”字符个数:9字符串常量81‘a’

区别“a”

97970charch;ch=‘a’;ch=“a”;提示:C中没有字符串变量,通过字符数组来存储字符串,实现对字符串中每一个字符的处理。“”

‘’

082【例】以下选项中不能用作C程序合法常量的是【例】以下选项中不能作为C语言合法常量的是A〕1,234B〕‘\123’C〕123D〕"\x7G"A〕'cd'B〕0.1e+6C〕"\a"D〕'\011'【例】以下正确的字符串常量是A〕“\\\”B〕’abc’C〕OlympicGamesD〕""√√√83【例】以下合法的字符型常量是

【例】以下选项中不属于字符常量的是A〕’\x13’B〕’\018’C〕’65’D〕”\n”A〕'C' B〕"C"C〕'\xCC'D〕'\072'√√84运算符及表达式8585类别运算符算术运算符+、-、*、/、%赋值运算符=自增、自减运算符++、--关系运算符>、<、>=、<=、!=、==逻辑运算符!、&&、||逗号运算符,求字节运算符sizeof运算符C运算符与表达式概念运算符分类86优先级在一个表达式中如果有多个运算符时,那么计算是有先后次序的,这种计算的先后次序称为相应运算符的优先级。结合性当一个运算对象两侧运算符的优先级别相同时进行运算的结合方向称为运算符的结合性。右结合性按“从右向左”的顺序运算左结合性按“从左向右”的顺序运算运算符使用本卷须知872+3*43+4-31214优先级左结合74右结合3+4-31488指用运算符和圆括号将常量、变量和函数调用连接起来的有意义的式子。main(){floata,b=7;a=7*sqrt(b)+b;b=a>b;

}表达式单个常量、变量和函数调用也可看成一个表达式。表达式要按照规定的运算规那么进行运算,并会得到一个结果,即表达式的值。C语言可分为算术表达式、赋值表达式、关系表达式、逗号表达式和逻辑表达式等。89

库函数函数由C语言预定义的函数,例如:scanf()和printf()函数,用户只要学会正确调用即可。函数名(参数表)完成一定功能的语句块。C函数包括:库函数和用户自定义函数。常量、变量、表达式数学式子C库函数的使用X2.5sqrt(7)

pow(x,2.5)

90#include<math.h>main(){

floata,b=4.5;a=2*sqrt(b);b=pow(a,b);printf(“a=%f”,a);}

注意:使用数学库函数时,在所有自定义函数前加此预编译命令

用户自定义函数由用户自己根据实际任务来编写。例:主函数main()。91括号取正取负乘除取余加减()+-*/%+-单目双目同级,右结合同级同级高低算术运算符和算术表达式算术运算符92注意单目取正或负

5*-2

5*(-2)

-10除运算符〔/〕02/32.0/30.666667取余〔%〕3%22%321两个整数相除,结果是相除后的值取整取余的运算数必须为整数93参加算术运算的运算对象可以是整型数据、实型数据和字符型数据。

main()

{

inta=3;

floatb=3.4;

charc=‘A’;a=a*b/c-1.5+’a’;

}算术表达式94

自动转换

强制转换如果双目运算符两边的数据类型不一致,系统自动将两边的运算数转换成同一类型后,再运算。基本原则将表达式中char或short全部自动转换为int型;将float转换为double型。当运算符两端的运算量类型不一致时,按“向高看齐”的原则对“较低”的类型进行提升。(类型标识符)表达式数据类型转换95result=ch/i+f*d-(f+i);charch;inti,result;floatf;doubled;intdoubledoubleintdoubledoubledoubledouble只是改变了表达式值的类型,而没改变变量的原类型转换是具有方向性的,按转换方向的转换不会丢失数据,否则会造成数据的丢失提示表达式值的类型96(char)(x-3.14*x)(char)x-3.14*x

表达式值的类型是char表达式值的类型是doublefloatx=7.8;inty;y=x%3;(int)x%3;7197练习表达式的表示数学式子C表达式b*b-4*a*ca+b+c/4*a*b()()a+(b+c)/4/a/ba+sqrt(b*b-4*a*c)pow(x,2.5)+1.31+1/21+1.0/2√语法正确,运算结果错误98=变量名=表达式优先级仅比最低级的逗号运算符高,右结合性。说明:变量出现在赋值号左侧,是改变变量的值,出现在右侧表达式中是读取赋值运算符优先级和结合性赋值运算符和赋值表达式赋值表达式赋值运算符赋值表达式的值:是赋值号左边变量的值99赋值表达式变量的值表达式结果a=3a=3+2*aa=a+1b=aa+c=3393101091010提示:赋值运算符左侧只能是变量100a=b=c=3333a=5+(c=6)61111x=5=4+1101x=x+3x+=3a=a*3a*=3x*=y+8x=x*(y+8)复合赋值运算符102练习inta=2;a+=a-=a*a;4a-=4a=a-4-2a+=-2a=a+(-2)-4a2-2-4103赋值运算符两那么数据类型不一致时,将赋值右边表达式值自动转换为左边变量的类型。charch;inti,result;floatf;doubled;result=ch/i+f*d-(f+i);赋值运算中类型的转换double104inta;floatb=7.8;a=b;b=6;a7b6.0注意:高字节数据转换成低字节数据可能会造成数据丧失,要注意防止。shorta;longb=98304;a=b;printf(“%d”,a);a-32768b98304105运算符,表达式1,表达式2,表达式3是所有运算符中级别最低的运算符。逗号表达式的值:是最后一个表达式的值逗号表达式优先级逗号运算符和逗号表达式表达式变量值表达式值y=3,y+1x=(y=3,y+1)x=y=3,y+1y为34y为3,x为44x、y为34106表达式前缀运算后缀运算x=x+1

x+=1++xx++x=x-1

x-=1--xx--(x+y)++6++x+y++++、--运算符提示:右结合运算符。运算对象只能是变量而不能是表达式或常数107x=10;y=++x;

前缀运算:先增值再引用后缀运算:先引用再增值x=10;y=x++;++x;y=x;x为11,y为11++x;y=x;x为11,y为10注意在表达式中引用前缀运算和后缀运算是有区别的提示:++、--运算符无论是否加括号都不和其他运算符比较优先级,只是反映先于还是后于表达式计算的问题。108【例】假设i=3;,那么求表达式的值-i++根据右结合性,++所作用的运算对象是i-ii++表达式的值:-3i的值:4-i++-(i++)注意:包含++、--运算的表达式的值,是在表达式中去掉++和--后的表达式运算后的值109sizeof(类型标识符)sizeof(变量名)

单目运算符,返回变量或数据类型的字节长度

floatf;intx,y;x=sizeof(f);y=sizeof(int);VC6.0++编译环境下:x的值为4y的值为416位编译环境下:x的值为4y的值为2sizeof运算符110111第3章顺序结构

C程序的语句数据的输入与输出简单程序设计111C程序的语句112112说明语句执行语句控制语句

表达式语句赋值语句函数调用语句空语句复合语句

main(){inta,b,x,y,t;a=b=18;scanf(“%d%d”,&x,&y);

if(x>y){t=x;x=y;y=t;

}printf(“%d%d“,x,y);}区别:inta=b=c=2;提示:复合语句在语法上视为一条语句;113数据的输入与输出114114

C语言中没有提供输入输出语句,其输入输出操作,是通过调用C语言系统所提供的输入输出函数来实现的。格式化输入/输出函数scanf函数printf函数读写字符数据的函数getchar函数putchar函数输入输出函数115printf(“格式控制串”,表达式1,表达式2,…);

将表达式列表中的各个表达式按控制字符串给定的格式输出。格式控制串一般字符:原样输出转义字符:一般完成一定的动作格式说明符(%格式符):控制表达式的输出格式及位置。

格式化输出函数116inta=4,b=5;printf(“a=%d,b=%d\n”,a,b);printf(“a=%d\nb=%d\n”,a,b);a=4,b=5a=4b=5117格式说明字符%-0m.nl/h格式符m(域宽):输出项在输出设备上所占的字符数。n(精度):输出的实型数的小数位数。不指定n时,隐含为6。指定输出类型长度修正符指定输出域宽及精度指定空位填0指定左对齐输出关于输出宽度m假设m大于实际数据宽度那么左端填补空格;假设m小于实际数据宽度那么按实际位数输出。关于小数位数n假设n大于实际小数宽度那么右端填0;假设n小于实际数据宽度那么按四舍五入舍入。118格式符输出形式示例运行结果整型d有符号十进制inta=123;printf(“%d”,a);123x十六进制inta=123;printf(“%x”,a);

printf(“%#x”,a);7B0x7Bo八进制inta=123;printf(“%o”,a);printf(“%#o”,a);1730173u无符号十进制unsigneda=80;printf(“%u”,a);80hd短整型shorta=80;printf(“%hd”,a);80ld长整型longa=123;printf(“%ld”,a);123字符型ccharc=69;printf(“%c”,c);E字符串sprintf(“%s”,”China”);China实型ffloata=123.4;printf(“%f”,a);123.400000%百分号printf(“%%”);%格式字符119输出函数调用输出结果1printf(“%d”,42);422printf(“%5d”,42);423printf(“%3d”,1234);12344printf(“%-5d”,42);425printf(“%05d”,42);000426printf(“%d%d”,42,54);42547printf(“%5d%5d”,42,54);42548printf(“%f”,123.54);123.5400009printf(“%12f”,123.54);123.54000010printf(“%8.3f”,123.55);123.55011printf(“%8.1f”,123.55);123.612printf(“%8.0f”,123.55);124120inta=-1;printf(“%d,%u,%x,%o”,a,a,a,a);a11111111111111111111111111111111-1,4294967295,ffffffff,37777777777输出结果:提示:表达式的输出形式是根据格式符控制的注意:要正确输出表达式的值,一定要使用相匹配的格式符。121注意:输出格式要和表达式类型相匹配。格式控制符表达式类型%dintlong%hdshort%ldlong%ffloatdouble%cchar%uunsigned122字符数据的输出

字符数据可以以字符形式输出,也可以以整数形式输出。main(){

charc1,c2;c1=97;c2=‘b’;

printf(“%c,%c\n”,c1,c2);}c1c29798printf(“%d,%d\n”,c1,c2);a,b97,98123scanf(“格式控制串”,变量地址1,变量地址2,…);

等待用户从键盘上输入数据,然后按格式控制的要求对数据进行转换后送到相应变量中。提示:格式控制串根本同printf函数,但一般不包括转义字符。变量地址的表示inta;&a取变量对应内存地址运算符

格式化输入函数124inta,b;scanf(“%d%d”,&a,&b);提示:输入数据结束后,一定按回车,scanf函数才开始读数据。ab键盘输入形式27182718125格式说明字符%*ml或h格式符输入数据类型和格式长度修正符域宽说明符赋值抑制符126格式字符格式符输入形式整型d十进制x十六进制o八进制u无符号十进制ld长整型字符型c字符串s单精度f双精度lf双精度127运行程序时输入数据的方式

输入数据时,数据之间默认分隔符是

回车、空格、Tab键scanf(“%d%d%d”,&a,&b,&c);输入形式233412233412233412128

指定数据所占宽度scanf(“%2d%3d%2f”,&a,&b,&c);abc输入形式1234567891234567.0129

跳过输入数据scanf(“%d%*d%d%f”,&a,&b,&c);abc输入形式10203040103040130

在格式串中插入其它字符scanf(“%d,%d,%f”,&a,&b,&c);scanf(“a=%d,b=%d,c=%f”,&a,&b,&c);输入形式输入形式10,20,30a=10,b=20,c=30131scanf的停止与返回

格式参数中格式项用完---正常结束发生格式项与输入值不匹配---非正常结束该函数在执行中遇到下面两种情况后结束main(){inta,b,c;scanf(“%d%d”,&a,&b);scanf(“%d”,&c);}提示:输入数据个数需与格式符个数一致,多余数据忽略输入形式12243648scanf(“%d%d”,&a,&b);12a132abc输入形式字符数据的读入scanf(“%c%c%c”,&a,&b,&c);格式符是连续的,回车、空格和Tab键都作为字符读入ABC‘A’‘B’‘C’ABC‘A’空格‘B’ABC‘A’‘B’回车提示:连续输入字符数据时,不添加其他符号133scanf(“%c%c%c”,&a,&b,&c);格式符之间有空格时,可将回车、空格和Tab键作为输入数据之间的分隔符。a65b66c67输入形式ABCABCABC134scanf(“%4c%4c”,&a,&b);格式符前可加数字,用来指定输入数据所占的宽度

输入数据时,应严格按指定的宽度输入数据,且取指定宽度的第一个字符作为输入数据。输入形式A

B

a65b66135scanf(“%d%c%d%c”,&a,&b,&c,&d);10A20B输入形式

交叉输入数值数据和字符数据应注意空格136inta,b;scanf(“%d%o”,&a,&b);a12b10若输入:1212提示:读入数据时是按指定的格式符读入的理解格式符137scanf(“%c”,&b);scanf(“%d”,&a);a1b49输入形式11138scanf(“%d”,&a);a123b49scanf(“%c”,&b);输入形式123输入形式123139注意:读入数据时,格式符要与变量类型相匹配变量类型匹配的格式符intshortlong%dshort%hdlong%ldfloat%fdouble%lfchar%cunsigned%u140变量=getchar();从标准输入设备上输入一个可打印字符,并将该字符的ACSII码作为函数的值。putchar(字符表达式);将字符表达式的值输出到标准输出设备。

字符输入函数

字符输出函数标准输入设备:键盘标准输出设备:显示器字符输入/输出函数141#include

<stdio.h>

main(){

charch;ch=getchar();putchar(‘A’);putchar(‘A’+32);putchar(ch);putchar(ch+4);putchar(‘\n’);ch=getchar();putchar(ch)}注意:使用读写字符函数,需在所有函数前加上此预编译命令。ch输入形式123输出结果‘1’Aa15‘2’2142#include

<stdio.h>

main(){

charc1,c2,c3;c1=getchar();c2=getchar();c3=getchar();putchar(c1);}输入形式ABC注意:getchar()函数会读入回车符和空格c1c2c3‘A’‘B’‘C’ABC回车‘B’143理解putchar(getchar()

);ch=getchar();putchar(ch);将从键盘上读入的字符直接输出到显示器上,没有保存读入的字符。将从键盘上读入的字符到变量ch中,然后输出在显示器上。144简单程序设计145145顺序结构

即按着程序语句行的自然顺序,一条接一条语句地执行程序。

选择结构

按照给定的条件,判断是否满足,从而决定程序的执行方向。〔if语句、switch语句〕

循环结构

指按照某种条件重复执行程序中的某些命令序列。〔for语句、do-while语句、while语句〕程序的根本结构146【例】从键盘上输入一大写字母,要求改用小写字母输出数据结构定义一个字符型变量ch

键盘输入字母=>

ch

将ch中的ASCII码值变换为对应字母的小写

ASCII码值将ch中的值以字符形式输出到屏幕上算法

main(){}charch;scanf(“%c”,&ch);ch=ch+32;printf(“%c”,ch);ch=getchar();putchar(ch);#include

<stdio.h>chA6597aprintf(“pleaseenter:”);pleaseenter:Aa147【例】从键盘上输入2个整数,要求互换其值输出交换两个变量a、b的值的方法a=4;b=7;a=b;b=a;a=4;b=7;t=a;a=b;b=t;ab477t4474148ab数据结构定义3个整型变量a、b和t。算法从键盘读入两个整数

=>变量a、b

交换a、b变量的值。输出a、b变量的值。main(){

}inta,b,t;printf(“输入两个整数:”);scanf(“%d%d”,&a,&b);t=a;a=b;b=t;printf(“a=%d,b=%d”,a,b);输入两个整数:2718a=18,b=2727181827149【例】输入一个double数据,使该数保存小数点后两位,对第三位小数进行四舍五入后处理再输出。275.8674*10027586.74+0.527587.24取整27587除100275.87150数据结构

定义存放double型数据的变量x算法读入数据=>x将x变量中的值*100=>x将x变量中的值+0.5=>x将x变量中的值取整=>x将x变量中的值除以100

=>x

输出x变量中的值。main(){

}doublex;printf(“输入1个实数:”);scanf(“%lf”,&x);x=x*100;x=x+0.5;x=(int)x;x=x/100;printf(“x=%f”,x);x输入1个实数:275.8674275.867427586.7427587.2427587.00275.87x=275.870000x=x*100+0.5(int)/100.0()151第4章

选择结构

关系运算逻辑运算

if语句

switch语句152关系运算153153

选择结构是根据一定的条件选择程序的执行方向。要考虑两个方面的问题:①如何来表示条件 ②实现选择结构的语句

在C语言中表示条件,一般用关系表达式或逻辑表达式,实现选择结构用if语句或switch语句。

传统流程图154大于小于大于等于小于等于等于不等于><>=<===!=3>=5‘a’<‘c’关系表达式值:关系成立表达式结果为1〔表示逻辑真〕关系不成立表达式结果为0〔表示逻辑假〕关系运算符关系表达式intx=100;printf(“%d”,x>100);表达式结果:0表达式结果:1输出:0155a=3>b=5算术运算符优先于关系运算符(a=3)>(b=5)350关系运算符优先级156(a>b)==c1假设a=3,b=2,c=113(b+c)<a0d=a>b11f=a>b>c100157逻辑运算158158逻辑非逻辑与逻辑或!

&&||‘c’&&‘d’0&&5(a>b)&&(c<d)!(a>b)单目双目逻辑运算符逻辑运算对象可以是任意合法的表达式在进行逻辑运算时,运算对象被认为是逻辑值判断逻辑运算对象逻辑值规定如下:非0=>逻辑真0=>逻辑假逻辑表达式的值:或者为1〔真〕或者为0〔假〕注意逻辑表达式159左操作数a右操作数ba&&ba||b!a非0非0110非000100非001100001‘c’&&‘d’0&&50||5!5>3

//结果是1//结果是0//结果是1//结果是0逻辑运算规那么1605>3&&2&&8<4-!0

混合运算时,注意区别哪些是数学运算对象,哪些是关系运算对象及逻辑运算对象。111300逻辑运算符优先级!、算术运算符、关系运算符、&&、||161a&&ba||b假设a=1;b=2;c=3;d=4;m和n各为1,那么如下表达式的值及各变量的结果是什么(m=a>b)&&(n=c>d)结果:m为0,n为1a为逻辑真,才判断b的值a为逻辑真,不必判断b的值逻辑运算求解特点左值运算优先:即先算左边的表达式的值,根据其结果断定是否计算右边表达式的值。提示:用&&和||运算符将多个表达式连接成一个表达式162假设a=0;a++&&b++a为1表达式为0b不变提示:有后缀和前缀的表达式的值是取消后缀和前缀之后计算的结果。aa++163x=y=z=0;printf(“%d”,++x||++y&&++z);分析x=y=z=0;printf(“%d”,++x&&++y||++z);x=y=z=0;printf(“%d”,++x&&++y&&++z);()输出表达式结果为:1;

x、y和z分别为:1、0、0()输出表达式结果为:1;

x、y和z分别为:1、1、0()输出表达式结果为:1;

x、y和z分别为:1、1、1164作业x=y=z=-1;printf(“%d”,++x&&++y&&++z);x=y=z=-1;printf(“%d”,++x&&++y||++z);x=y=z=-1;printf(“%d”,++x||++y&&++z);表达式为:0;

x、y和z分别为:0、-1、-1表达式为:0;

x、y和z分别为:0、-1、0表达式为:0;

x、y和z分别为:0、0、-1165练习判断一个整数x是否为奇数判断一个数x是否在0到10之间0<=x<=1011假设x=11表达式的结果为1x%2==1或x%2!=0x>=0x<=10&&166判断一个数x是否在0到10之外判断一个字符型数据ch是否是小写字母x<0x>10||ch>=‘a’ch<=‘z’&&判断某年y是否为闰年,y需要满足如下要求之一:①能被4整除,但不能被100整除②能被4整除,又能被400整除y%4==0y%100!=0&&y%400==0

(

)||167if语句168168if语句的3种形式if(表达式)语句1;语句2;注意:默认是一条语句。如果是多条语句,必须表示为复合语句

N-S流程图根本if语句

传统流程图169【例】输入两个数,按由小到大输出。开始读入数据=>a,ba>b?输出a、b结束a

b非0main(){

}inta,b,t;printf(“输入2个数:”);scanf(“%d%d”,&a,&b);if(a>b){t=a;a=b;b=t;}printf(“%d,%d”,a,b);ba输入2个数:10121210101212101012170提示:该格式实现二选一的处理if(表达式)语句1;else语句2;语句3;

N-S流程图if-else语句

传统流程图171【例】输入3个数,求三个数中最大数。开始读入=>a,b,ca>b?a=>m非0b=>m0m<c?c=>m输出mmain(){

}inta,b,c,m;printf(“输入3个数:”);scanf(“%d%d%d”,&a,&b,&c);if(a>b)m=a;elsem=b;if(m<c)m=c;printf(“max=%d”,m);172【上机作业】输入3个数,按由小到大输出读入=>a,b,ca>b?a>c?a

ba

cb>c?b

c输出a、b、cmain(){

floata,b,c,t;scanf("%f%f%f",&a,&b,&c);

if(a>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(b>c){t=b;b=c;c=t;}printf(“%f,%f,%f",a,b,c);}

173if(表1)语句1;elseif(表2)语句2;elseif(表3)语句3;else语句n;语句m;

N-S流程图提示:该格式称为多分支条件语句,实现多项选择一的操作if-elseif-else语句

传统流程图174【例】根据输入的学生成绩,输出相应等级90~100A80~89B70~79C60~69D其余:E规定如下:

main(){

}数据结构定义用于存放成绩、等级的变量s、g算法读入成绩=>s测试s属于何分数段的,将相应等级=>g输出成绩s、等级gints;charg;printf(“输入成绩:”);scanf(“%d”,&s);if(s>=90)g=‘A’;elseif(s>=80)g=‘B’;elseif(s>=70)g=‘C’;elseif(s>=60)g=‘D’;elseg=‘E’;printf(“s=%d,g=%c”,s,g);175C语言中,条件表达式可以为任意合法的表达式,非0为真,0为假。

if(a=b)…

if(a==b)…

if(x)…

if(x!=0)…

if(!x)…

if(x==0)…注意的问题176if(表达式1)

if(表达式2)语句1;

else语句2;else

if(表达式3)语句3;语句n;if语句的嵌套177说明C语言规定,else是和最近的if相匹配

if(x)

if(y)printf(“1”);

elseprintf(“2”);

if(x)

{

if(y)printf(“1”);

}

elseprintf(“2”);178【例】输入3个数,求三个数中最大数a>b?a>c?m=ab>c?读入=>a,b,cm=cm=bm=c输出mmain(){

}inta,b,c,m;printf(“输入3个数:”);scanf(“%d%d%d”,&a,&b,&c);if(a>b)

if(a>c)m=a;

elsem=c;else

if(b>c)m=b;elsem=c;printf(“max=%d”,m);179表达式1?表达式2:表达式3?:x=100;y=x>100?100:90;y的值为90条件运算符及条件表达式条件运算符条件表达式〔三目运算〕提示:条件表达式一般应用在赋值语句中条件表达式的值或者为:表达式2;或者为:表达式3180优先于赋值,低于关系和算术运算符,且为右结合。x=a<b?

a:

c>d?c:d(

)(

)()表达式3表达式2表达式1优先级和结合性181【例】从键盘上输入一大写字母,要求改用小写字母输出。否那么原样输出

main(){charch;scanf(“%c”,&ch);ch=printf(“%c”,ch);}(ch>=‘A’&&ch<=‘Z’)

:ch;?ch+32182假设inta=10,c=9;分析

温馨提示

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

评论

0/150

提交评论