资源描述
C语言笔记
C语言概诉
C语言是国际上广泛流行的高级语言。
1963年,剑桥,CPL语言,更近硬件,但规模大,难以实现.
1967年,剑桥,Martin Richards,简化,BCPL语言.
1970年,美国贝尔实验室,Ken Thompson,简化,B语言,写第一个UNIX系统.
1972~1973年,贝尔实验室,D.M.Ritchie,B语言基础上,设计出C语言,克服B语言的过于简单、功能有限的不足.
1973年,K.Thompson和D.M.Ritchie合作将UNIX的90%以上用C改写.
1978年以后,C语言已先后移植到大、中、小、微型机上已独立于UNIX和PDP,得以广泛应用。
1.1C语言
1.诞生 : 1972年美国贝尔实验室研制
2.发展 : 78年标准C(旧标准) 80年代初开发产生C++ 83年ANSI C(新标准)
1.2 C语言的特点
1.高级语言和汇编语言之间的高级语言;既能直接访问硬件,又面向用户
2.结构化程序设计语言,易读、易维护;顺序、选择和循环三种结构
3.便于模块化程序设计的语言; 函数结构
4.具有丰富的数据类型和丰富灵活的运算符;数据类型:基本类型和复合类型 ;运算符:32种
5.具有预编译功能,开发效率高;
6.具有较高的移植性;不依赖于硬件的输入/输出机制
C语言程序的书写规则:习惯用小写字母,大小写敏感不使用行号,无程序行概念;通常一个语句占一行可使用空行和空格常用锯齿形书写格式;同一层次结构的语句上下对齐。
算法与程序设计基础
计算机语言:是规则和符号的集合,是与计算机交流的工具。必须具有数据表达和数据处理(流程控制)的能力。
程序:求解问题的指令序列
软件:程序的集合
学软件:学思想、学功能、学操作。熟练工种
学语言:学规则、学方法、学设计、学应用。规范学习,灵活应用
一个程序应包括两个方面的内容:对数据的描述:数据结构 , 对操作的描述:算法
完整的程序设计应该包括四部分:程序设计=数据结构+算法+方法+工具
数据元素:数据的最小单位 数据结构:数据元素的组织形式
一个正确的程序通常包含两方面的含义:一是书写正确,二是结果正确。书写正确是指程序语法正确,符合程序语言的规则;结果正确是指对应于正确的输入,程序能够得到所期望的输出。
1.顺序结构 程序按照语句的书写次序顺序执行。
2.选择结构 通过判断特定条件,选择一个分支执行。
3.循环结构 在给定条件下,反复执行循环体,直到条件不满足为止.
算法的概念:算法:完成一项任务的具体步骤 计算机语言的别名:算法语言
一个算法,就是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型的问题的运算序列。” 任何解决问题的过程都是由一定的步骤组成的,把解决问题确定的方法和有限的步骤称作为算法。
算法的常用表示方法:自然语言 传统流程图 结构化流程图
自然语言特点:描述算法通俗易懂,容易产生歧义。对复杂问题,语句繁琐、冗长,并且很难清楚地表达算法的逻辑流程,往往需要根据上下文判别其含义,尤其对描述含有选择、循环结构的算法,不太方便和直观,一般不常使用。
传统流程图缺点:使用者可以毫不受限制地使流程随意地转向,使流程图变得毫无规律,难以阅读、修改,使算法的可靠性和可维护性难以保证。
解决办法:必须限制箭头的滥用,即不允许无规律地使流程随意转向,只能顺序的进行下去。
N—S流程图
由美国学者I.Nassi和B.Shneiderman提出表示算法的图形工具。基本单元是矩形框,用不同的形状线分割,表示三种结构。只有一个入口,一个出口,没有流程线。
N--S图的优点
比文字描述直观、形象、 易于理解;比传统流程图紧凑易画。尤其是它废除了流程线,整个算法结构是由各个基本结构按顺序组成的,N--S流程图中的上下顺序就是执行时的顺序。
三种基本程序结构的N–S流程图 1.顺序结构 2.选择结构 3.循环结构
几种常用算法介绍
1.枚举法(穷举法)特点:算法简单,容易理解,运算量大。
2.递推法(迭代法)
3.求最大值、最小值问题
结构化程序设计方法
结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则。结构化程序设计方法主要包括:
①只采用三种基本的程序控制结构来编制程序,从而使程序具有良好的结构;
②程序设计自顶而下;
③用结构化程序设计流程图表示算法。
数据类型、运算符与表达式
C语言的基本符号
C语言的基本字符集
数 字:0 1 2 3 4 5 6 7 8 9
字 母:a b c …… z A B C …… Z
运 算 符:+ - * / % = < > <= >= !=
== << >> & | && || ^ ~ ( )
[ ] { } -> . ! ? : , ; “ ‘
特殊符号:_(下划线) 回车(\r) 换行(\n) 制表符(\t)
基本标识符:变量名、函数名、文件名、数组名、类型名
规则:字母或下划线开头,后面是字母、下划线或数字
C语言的关键字:保留字(32个)auto break case char const
continue default do double else enum extern float for goto if int long register return short signed sizeo static struct switch typedef union unsigned void volatile while
在程序运行中,其值保持不变的量称为常量。
常量的表示方法:
数值常量 例如:10,3 , 2.68等
符号常量 用一个符号代表一个常量
变量:变量通过变量名标识,变量名和内存中的存储单元相对应。编写程序时通过变量名来存、取存储单元。 变量必须先定义,后使用。
命名规则: 变量名由标识符表示,只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。
说明:
*变量要“先定义,后使用”
定义格式:类型说明符 标识符1, … ,标识符n
例如:int x, y, z;
float a, b, c, d;
*选变量名时,要做到“见名知义”
例如:name , st_age , xm , nl , class , sum
许多程序设计语言都把它们能处理的数据分成若干类,这些类就是数据类型。
为什么要划分数据类型?
①不同类型的数据在计算机内表示不同;
②不同类型的数据能执行的运算不同;
③计算机能处理的问题中的数据是广义的。
变量名代表内存中的存储单元,变量的类型决定存储单元的大小。
C语言数据类型:
整型
字符型 精度型
算术类型 实型(浮点型)
基本类型 枚举类型 双精度型
指针类型
数据类型
数组
构造类型 结构体类型
共用体类型
整型:
基本整型int 短整型short int 长整型long int
无符号整型unsigned int 无符号短整型unsigned short 无符号长整型unsigned long
实型:
实型变量分类:单精度、双精度和长双精度型。
实型数据在内存中的存放形式:
实型数据也称为浮点数,是指小数点位置可以任意浮动的数 。
科学记数法表示:十进制数 -12345678 可表示为:
-12345678 = -1.2345678 Í 107
计算机中采用以2为底的科学记数法存储:
N= 数符Í尾数Í2阶码
(其中:数符0为正,1为负,尾数和阶码都用二进数表示)
二进制数可表示为: 110.011(B)=1.10011×2+10
尾数的位数决定数的精度,阶码的位数决定数的范围
由于机器存储位数的限制,浮点数都是近似值,多个浮点数运算会产生误差。双精度型用于扩大存储位数,目的是增加实数的长度,减少累积误差,改善计算精度。
将实数分成两类:
浮点数(Float)和双精度数(Double)。
浮点数用32位表示: 数符1位,阶码8位,尾数23位
双精度数用64位表示:数符1位, 阶码11位,尾数52位为了处理负指数的情况
单精度浮点数机内存储格式(占4个字节,32位)
单精度实数的精度取决于小数部分的23位二进制数位所能表达的数值位数,将其转换为十进制, 最多可表示7位十进制数字,所以单精度实数的有效位是7位。
实型常量 (实型常数不区分单精度和双精度)
两种表示形式:十进制数形式:由数字和小数点及正负号组成。
(注意:必须有小数点) 例如:23.678 .678 23.
指数形式:由数字、小数点、字母e或E及正负号组成。
(注:e或E之前必须有数字,且后指数必须为整数) 例如:3.5E-5 2e3
1. 字符常量
用单引号括起来的一个字符( 只能包含一个字符)
例如: ‘a’ ‘A’ ‘$’ ‘!’ ‘abc’、“a” 注: ‘a’与‘A’是 不同的字符常量。
转义字符: 转义字符的概念:是一种特殊的字符常量,用于表示常用的、但却难以用一般形式表示的不可显示字符。
转义字符的表示: 用一个转义标识符“\”开头,后面是需要的转义字符。常用的转义字符序列的字符常量见下表:转义字符 功 能
\n 换行
\v 垂直制表
\b 退格
\r 回车
\f 走纸换页
\t 跳到下一个制表位(8列)
\\ 反斜线字符
\' 单引号字符
\“ 双引号字符
\ddd 1至3位八进制数表示的字符
\xdd 1至2位十六进制数表示的字符
2. 字符变量
定义形式: char 占存储空间 :一个变量一个字节
3. 字符串常量
字符串常量是用双引号括起来的一个或多个字符。例:"a" 串长 1
"This is C string" 串长16 " " (空格) 长1 "" (不含空格) 串长0
字符串常量中的字符依次存储在内存中的一块连续区域,末尾自动添加\0作为字符串的结束标志。n个字符组成的字符串常量, 占内存空间为 n+1 个字节。
字符常量和字符串常量的区别:
在程序中,可以用字符常量或字符串常量表示单个字符,例如 ‘a’,或“a”,两者的区别如下:
(1) 字符串"a"在内存中占2个字节,而字符'a' 在内存中占1个字节。
字符串"a" 字符'a'
(2) 不能将字符串赋给一个字符变量。
例: char ch1,ch2;
ch1='a'; /*正确*/ h2="a"; /*错误*/
3.3 运算符和表达式
运算符: 描述各种操作的符号。
3.3.1算术运算符和算术表达式
1.算术运算符
+ - * / %
2.算术表达式:
由算术运算符、常数、变量、函数和圆括号组成。
应注意:左右括号必须配对,多层括号都用圆括号表示。
例如:‘ a’ + ‘b’ + a*b/c +2.8
3. 优先级:* / % 高于 + -
4. 结合性:“左结合性”或称为“自左至右的结合方向”即运算对象先与左边的运算符结合。
例如:a - b + c
注意: / 是除法运算符。当两个整数相除时为整除。
9/2=4; -9/2=-4; (若有一个是负数,采取向零取整)
%是取余数运算符,只能作用于两个整数。运算结果的符号与被除数的符号一致。
9%2=1 ; -9%2=-1 ; 9%-2=1;
平方根函数:sqrt(x),计算sqrt(4.0)的值为2.0
绝对值函数:fabs(x)
幂函数: pow(x.n),计算xn
指数函数: exp(x),计算ex
以e为底的对数函数log(x),计算ln x
调用数学函数时,要求在源文件中包含头文件math.h.
3.3.2 赋值运算符和赋值表达式
1.一般赋值运算符:=
赋值表达式:由赋值运算符将一个变量和一个表达式
连接起来的式子。
形式:变量名=常量或表达式
功能:将右边常量或表达式的值赋给左边的变量。
例:a=3; b=c+d ;
说明:
① 赋值后,原来左边的值被右边表达式的值替换;
② 如果右边表达式的值的类型与左边变量的类型不一 致,以左边变量的类型为准,将表达式值的类型转换为左边变量的类型。
③ 结合方向“从右向左”。
例: x=y=a+b;
2. 变量的初始化
3. 复合赋值运算符
复合赋值运算符:
在赋值符“=”之前加上其它运算符
共有10种复合赋值运算符:
+= ,-=,*=,/=,%= (算术运算有关)
<<=,>>=, &=,^ =, |= (与位运算有关)
3.3.3 逗号运算符和逗号表达式
1.逗号运算符:即“,”优先级:所有运算符中级别最低的运算符。
2.逗号表达式:形式:表达式1,表达式2,……,表达式n
求解过程:顺次求解表达式1,表达式2……最后求解表达式n。表达式值:逗号表达式的值为表达式n的值。结合性:左结合
例如:a=3*5,a*4 a=3*5,a*4,a+5 x=(a=4%3 , a+1, a*10)
(1) 优先级
当若干个运算符同时出现在表达式中时,优先级规定了运算的先后次序。优先级有15级。
C语言把圆括号作为运算符,规定它的优先级最高(15级),从而保证优先运算圆括号内的式子,逗号运算符的级别最低,规定为1级。
(2) 结合性
当若干个具有相同优先级的运算符相邻出现在表达式中时,结合性规定了运算的先后次序。分为“从左到右”和“从右到左”两个结合方向。
大多数运算符的结合方向为 “从左到右”;
单目运算符、赋值运算符和条件运算符的结合方向 “从右到左”(单目运算符是指作用于一个操作对象的运算符)。
(3) 双目运算符两边运算对象的类型必须一致。
3.4 数据类型转换
转换原则 整型、实型和字符型可以混合运算,一般类型数据先转换为标准型,不同类型的要先转换为相同类型
形式 自动进行-------隐式转换 强制进行-------显式转换
3.4.1 不同数据类型的数据间的混合运算
(1) float 型数据一律转换成double 型数据。
(2) char 和short int 型数据一律转换成 int 型数据
以上两条转换原则说明:即使两个操作数类型相同,但只要它们同属 char , short int 或 float 类型,则转换一定发生。
3.4.2 强制类型转换
将指定表达式的值转换为指定类型.
形式:(类型名)(表达式)
例如:( double) (a+b)
说明:
(1) 表达式应用括号括起
例如: (int)(x+y) ; (int)x+y;
(2) 在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。
例如:float x=8.6 ; int y; y=(int)x ;
3.5 自增、自减运算符 (++、--)
作用:使变量的值增加1或减1,如:
++i , --i (使用之前,先使i的值加(减)1)
i++, i-- (使用之后,使i的值加(减)1)
++i 先执行i=i+1,再使用i的值
i++ 先使用i的值,再执行i=i+1
例如:int a=1 , b; b=++a ; b=a++ ;
说明:
(1)++、- -为单目运算符
(2)++ 、- -只能用于变量,而不能用于常量或表达式。
(3)自增、自减运算符为右结合性(即自右至左)。
(4)单独作一个语句使用时,两种形式的结果一样。
(5)当出现在其它表达式中时,两种形式结果不同。
3.6 位运算
位运算是针对二进制数的运算,通常只适用于整数数据。
C语言中提供的位运算符有:
~、 << 、>> 、 & 、 ^ 、︱
1.按位取反运算符~
形式: ~A
功能:把A的各位都取反,(即0变1,1变0)
2. 按位与运算符 &
形式:A&B
功能:对A的各位与B的对应位进行比较,如果两者都为1,
A&B对应位上的值为1,否则为0。
例如:int A=179(二进制10110011)
int B=169(二进制10101001)
3. 按位或运算符|
形式:A | B
功能:对A的各位与B的对应位进行比较,如果两者中有一个
为1,A|B对应位上的值为1,否则为0。
例如:int A=179(二进制10110011)
int B=169(二进制10101001)
4. 按位异或运算符 ^
形式:A^B
功能:对A的各位与B的对应位进行比较,如果两者不同,
A^B对应位上的值为1,否则为0。
例如:int A=179(二进制10110011)
int B=169(二进制10101001)
5. 左移运算符 <<
形式:A<<n ( 其中 n为一个大于0的整型表达式)
功能:把A的值向左移动n位,右边空出的n位用0填补。
当左移时移走的高位中全都是0时,相当于对A作n 次乘
以2的运算。
例如:int A=27(二进制00011011)
6.右移运算符>>
形式:A>>n ( 其中 n为一个大于0的整型表达式)
功能:把A的值向右移动n位,左边空出的n位用0填补。
相当于对A作n 次除以2的运算。
例如:int A=179(二进制10110011)
数据的输入和输出
数据输入输出的概念
输出:从计算机向显示器、打印机等外部设备输出数据。
输入:从标准输入设备键盘、鼠标等向计算机输入数据。
C语言不提供输入输出语句,输入输出操作是由C函数库中的函数实现。
调用输入输出函数时,要求在源文件中包含"stdio.h"头文件。
如: #include <stdio.h>
或 #include "stdio.h"
4.1.1 格式输出函数
1.函数的基本功能
格式:printf(格式控制串,输出表列)
功能:从标准输出设备上,按指定的格式输出对应的变量。
2. 函数说明:
(1) 格式控制串由双引号括起来,由“%”和格式符以及普通字符(即需要原样输出的字符组成)。
(2)输出表列是需要输出的一些数据,可以是常量、变量或表达式。
(3) 输出的参数必须与格式控制符中的格式说明在类型、个数和位置上一一对应。
3.格式说明符
一般格式:%[-][m][.][n][l]格式符
说明如下:
- 当数据的宽度小于显示宽度时,数据左对齐,右方补空格.
m 输出数据占m个字符位,不够右对齐,左边填空格。
n 输出数据有n位小数
m.n 输出数据占m列,n位小数
基本格式控制符:d: 以十进制带符号形式输出整型数
o:以八进制无符号形式输出整型数
x:以十六进制无符号形式输出整型
u:以十进制无符号形式输出整型数
f:以小数形式输出单、双精度实型数
e: 以指数形式输出单、双精度实型数
c: 以字符形式输出一个字符
s: 以字符形式输出一个字符串
ld:以十进制带符号形式输出长整型数
(1) d格式符: 输出十进制整数。
%d --按整型数据的实际长度输出。
%md --m为指定的输出字段的宽度.若数据的位数小于m,则左端补以空格;若大于m,则按实际位数输出。
%ld --输出长整型数据.
(2)o格式符 以八进制数形式输出整数。
将内存单元中的各位的值(0或1)按八进制形式输出,输出的数值不带符号,将符号也作为八进制数的一部分输出。
(3) x格式符,以十六进制数形式输出整数。
(4) u格式符,以十进制形式输出无符号型数据。
(5) c 格式符 输出一个字符。
(6) s格式符 输出一个字符串。
(7) f格式符
以小数形式输出实数(包括单、双精度)。
1) %f , 不指定字段宽度,由系统自动指定,使整数部分全部输出,并输出6位小数(输出双精度数据,也是6位,但误差降低)。
2) %m.nf , 指定输出的数据共占m列,其中有n位小数.若数据长度小于m,则左端补空格。
(8) e格式 以指数形式输出实数。
1) %e 不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定给出6位小数,指数部分占5位,其中“e”占一位,指数符号占一位,指数占3位.数值按标准化指数形式输出(小数点前有1位非零数字)。
(9) g格式符:根据数值的大小输出实数,自动选 f 格式或 e 格式(选择输出时占宽度较小的一种),且不输出无意义的零。
特殊说明:1. 格式控制串的控制符号与变量表要一一对应,即:类型相同,个数相等
2. 格式控制符号用小写字母
3. 格式控制符号之外的符号均照原样显示
4. 若需显示百分号,格式为:%%
5. 如果实际数据所占字符位大于指定的域宽,按实际输出
4.1.2 字符输出函数
格式: putchar(字符变量) 功能 :在标准输出设备上,输出指定的字符。
说明: 一次调用只能输出一个字符。
4.2.1 格式输入函数
一般形式: scanf(格式控制字符串, 地址表列)
“格式控制字符串”的含义同printf函数,
“地址表列”:要求是变量的地址,或字符串的首地址.
例如:
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
说明:
* scanf 函数中的“格式控制”后面应当是变量地址而不是变量名。
* 输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车键、跳格键tab分隔。
提示注意:输入double型数据,必须用格式说明符%lf或%le,
输入long型数据,必须用%ld。
标准C在scanf中不使用%u说明符,对unsigned型数据,以%d或%o、%x格式输入。
%后的“*”为附加说明符,用来表示跳过它相应的数据。
输入时格式控制符中不能加“\n”。
在scanf函数的格式控制字符串中尽量不要出现普通字符,尤其不能将输入提示放在其中。需要显示输入提示应该调用printf函数实现。
4.2. 2 getchar函数(字符输入函数)
一般形式:getchar( ) ------没有参数
功能:从键盘输入一个字符。
说明:1)只能输入一个字符
2)可以将获得的字符赋给int 型或char型的变量
选择结构
5.1.1 关系运算符
1.关系运算符
关系运算是进行比较大小的运算,并产生运算结果1(真)或 0(假)。
C语言中的关系运算符有6种:
<、<=、>、>=、==、!=
优先次序:前4种同级,高于后2种(后2种同级)
关系运算符的结合性为从左到右;
5.1.2 关系表达式
定义:用关系运算符将两个表达式连接起来的式子。
形式:表达式1 关系运算符 表达式2
如:(a>b)>(b<c) 、‘a’<‘b’ 、x>y 、s+f>d
关系表达式的值为逻辑值“真”或“假”.
注意: C语言没有逻辑型数据,关系表达式的真、假 是以数值“1”代表“真”,以“0”代表“假”。
5.2.1 逻辑运算符
C语言提供三种逻辑运算符:
&& (逻辑与) 、 || (逻辑或) 、! (逻辑非)
说明:
(1)“&&”和“|| ”是“双目(元)运算符”,
它要求有两个操作数。
(2)“! ”是“单目(元)运算符”,只要求有一个运算量。
(3)优先级次序:! && ||
a&&b a、b均为真, 则a&&b为1(真)。
a||b a、b之一为真,则a||b为1(真)。
!a 若a为真,则!a为假。
5.2.2 逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来的式子.
规定:判断一个逻辑量为“真、假”的方法:
“非0”代表“真”,“0”代表“假”
5.3.1 if 语句
1. 单选择if语句:语句格式:if (表达式) {语句组;}例: if (a>b) x=a;
执行过程:计算表达式的值,判断表达式值为真时执行语句组,否则跳过语句继续执行后续语句。
2. 双选择if语句:语句格式:if (表达式) {语句组1;} else {语句组2;}
功能:计算表达式的值,当表达式值为非零时执行语句组1,否则执行语句组2。
5.3.2 if语句的嵌套
功能:判断表达式的值,若为非0,再判断表达式1的值,非0执行语句11,否则执行语句12,若表达式的值为0,再判断表达式2的值,非0执行语句21,否则执行语句22
5.3.3 switch 语句
switch语句
该语句为开关语句,适合解决多分支的情况。
格式:switch(表达式)
{ case 常量表达式1:语句序列1;
case 常量表达式2:语句序列2;
……
case 常量表达式n: 语句序列n;
[ default :语句序列n+1;]
a. 计算表达式的值;
b. 找到与表达式的值相同的case常量表达式,执行该case后边的语句序列,之后依次往下执行语句块。
5.4 条件运算符
条件运算符:
唯一的三目操作符,要求有三个操作对象。
格式:表达式1 ?表达式2:表达式3
功能:判断表达式1的值,该值为“非0”,则取表达式2的值,为“ 0 ”时,取表达式3的值。
如:max=a>b ? a : b 若 a=3, b=2, 则 max=?
说明: (1) 条件运算符优于赋值运算符。
(2) 条件运算符的结合方向为“自右向左”。
如:当a=1,b=2,c=3, d=4 时,
表达式 a>b ? a : c>d ? c : d , 值为:?
如: 若 x=1,y=0,a=3,b=-3
表达式 (y>x?a:b)&&a+b 值为:?
(3) 条件表达式中的表达式1的类型可以与表达式2和表达式3的类型不同。条件表达式值的类型为二者中较高的类型。
如: x>y ? 1.2 : 6 , 当x>y成立时条件表达式的值为1.2 ,否则为实型数据6.0。
c=x>y ? 1 : ‘s’ , 当x>y成立时c=1, 否则c= ‘s’。
循环结构
循环是有规律的重复操作。将复杂问题分解为简单的操作过程,程序只对简单过程描述,这些过程的多次重复就可完成对问题的求解。重复的频繁性决定了循环在程序设计中必不可少!
6.1 if-goto 语句循环
一般形式: goto 标号;标号:语句
其中:标号用标识符表示,即由字母、数字和下划线组成,且首字符必须为字母或下划线。不能用整数作标号。
用途:
1. 与if语句一起构成循环结构。
2. 从循环体中跳到循环体外(一般指最深层)。
3. 改变程序自上而下的执行顺序。
缺点:滥用goto语句,可使程序无规律、可读性差。
6.2 while循环语句
1. while循环语句的形式 while(表达式)语句
2. 执行过程
注意:1.循环体若包含一个以上语句,应该用花括号括起来(使用复合语句)。
2.循环体内应注意设置修改循环条件的语句。否则循环无法终止。
3.表达式的值为0、循环体内遇break、return、goto语句可结束循环执行
6.3 do—while循环语句
1. do—while循环语句的形式 do 语句 while(表达式);
说明:
(1)do—while循环语句首先执行循环体,然后计算表达式并检查循环条件,所以循环体至少执行一次。
(2)退出do—while循环的条件与退出while循环的条件相同。
6.4 for循环语句
1.for循环语句的形式
for([表达式1];[表达式2];[表达式3])语句
2. 执行过程
说明:
(1)计算表达式1;
(2)计算表达式2,值非零执行循环体,计算表达式3,重复
(3)表达式1仅被执行一次;表达式2决定了是否继续执行循环;表达式3则不断修改循环控制变量的值。
(4)三个表达式均可省略,分号不能省略。for 循环体可以是复合语句。
3.说明:
(1)基本的应用形式:
for(循环变量赋初值;循环条件;循环变量增值)
(2) 三个表达式均可缺省,但起分割作用的两个分号不可省略。
(3) 表达式1和表达式3可为逗号表达式。
6.5 三种循环语句的比较
for语句和while语句先判断条件,后执行语句,故循环体有可能一次也不执行,而do—while语句的循环体至少执行一次。
必须在while 语句和do—while语句之前对循环体变量赋初值,循环体中必须包含能最终改变循环条件真假的操作;而for语句可在表达式1中对循环变量赋初值,表达式3中修改循环变量的值。
在循环次数已经确定的情况下,一般用for语句;而对于循环次数不确定,只给出循环结束条件的问题,习惯用while或do while 语句解决。
6.6 循环语句的嵌套
1. 定义:在循环体内又包含一个循环结构,称为循环嵌套。三种循环都可以嵌套。下面几种都是合法的嵌套形式:
1. for循环体嵌套while循环体 2.for循环体嵌套for循环
6.7 break和continue语句
1. break 语句
语法: break ;
功能:终止包含该语句的最内层循环。
2. continue 语句
语法:continue ;
功能:结束循环体的本次执行
循环结束的条件:
发生下列情况之一时,循环结束执行:
表达式的值为0;
循环体内遇到break语句;
循环体内遇到goto 语句,且与该goto语句配合 使用的标号所指定的语句在本循环体外;
3. 空语句
形式: ;(只由一个分号构成)
功能: 什么也不做。(可出现在程序中任何语句可以出现的地方)
数组
7.1 数组的概念
一组具有相同数据类型的数据的有序集合
数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。
7.2.1 一维数组的定义和引用
1.一维数组的定义
类型说明符 数组名[正整型常量表达式] ;
说明:类型说明符:数组的类型。数组名同变量名命名规则相同。常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量,不能是变量。
说明:
(1)数组名后是用方括号而不是圆括号。
(2) 数组定义中的常量表达式表示数组元素个数。必须是大于零的常量。
(3) C语言中不允许对数组的大小作动态定义。数组的说明语句必须在可执行语句之前。
2. 一维数组的引用
C 语言规定,只能引用单个数组元素,不能一次引用整个数组。
数组元素的引用形式: 数组名[ 下标] 如a[3]
下标可以是整型常量、整型变量或整型表达式。
如: a[3]= a[0] + a[i+1];
下标的值是数组元素的序号,且从0开始,直到n-1.
int a[10], 说明数组a一共有10个元素,起始值是0。
数组a的10个元素分别是:a[0]、a[1]、…、a[9]。
注意区分数组的定义和数组元素的引用。
数组的输入输出应采用循环的方法.
展开阅读全文