C语言 (基础)
一、学习前的引入
1.1、C 常用的转义字符
- \t 一个制表位,实现对齐的功能
- \n 换行符
- \ 一个\
- " 一个"
- **\’**一个‘
- \r 一个回车printf(“张无忌赵敏周芷若小昭”)
1.2、常见的问题解决办法
- fatal error LNK1104: 无法打开文件"c:??.exe
解决方法:修改源文件后,需要关闭控制台,才能正确运行
2) 缺少分号:
解决方法:编译失败,注意错误出现的行数,再到代码中指定位置改错。
3)错误总结
学习编程最容易犯的错是语法错误。C 语言要求必须按照语法规则编写代码。如果你的程序违反了语法规则,例如:忘记了分号、大括号、引号,或者拼错了单词,中文:和英文:C 编译器都会报语法错误。尝试着去看懂编译器会报告的错误信息。
1.3、注释(comment)
1)单行注释:
基本格式
格式: // 注释文字
2) (多行注释)块注释:
基本格式
格式: / 注释文字/**
1.4、规范的代码风格
1.5、C语言的运行过程
- 编辑:比如编写我们的 hello.c 文件, 就是 源代码.
2) 编译:将 hello.c 程序 翻译成 目标文件(hello.obj) // 在计算机底层执行
3) 链接:将目标文件 hello.obj + 库文件 生成可执行文件 (MyProject01.exe) //在计算机底层执行
4) 运行:执行 .exe 文件, 得到运行结果
1.6、C 程序开发注意事项
- C 程序的主体结构说明
#include ...
void main() { // {} 包括内容, 称为函数体语句 1;
语句 2;
}
- C 程序源文件以“c”为扩展名。
3) C 程序的执行入口是 main()函数。
4) C 语言严格区分大小写。
5) C 程序由一条条语句构成,每个语句以“;”结束
6) 大括号都是成对出现的,缺一不可
二、变量
2.1、变量的基本介绍及使用
int num = 1 ; //整型double score = 2.3; //小数char gender = ‘A’; //字符
char name[] = “尚硅谷”; //字符串
//说明
//1. 如果输出的整数 %d
//2. 如果输出的是小数 %f , 如果希望保留小数点 %.2f
//3. 如果输出的是字符 %c
//4. 如果输出的是字符串 %s
//5. 在输出不同数据时,对应的格式化的 形式要对应起来printf(“num=%d sorce=%.2f gender=%c name=%s”, num, score, gender, name); getchar();
2.2、变量使用注意事项
- 变量表示内存中的一个存储区域(不同的数据类型,占用的空间大小不一样)
2) 该区域有自己的名称 和类型
3) 变量必须先声明,后使用
4) 该区域的数据可以在同一类型范围内不断变化
5) 变量在同一个作用域内不能重名
6) 变量三要素 (变量名+值+数据类型) ,这一点请大家注意。
2.3、C语言数据类型
类型 | 存储大小 | 值范围 |
---|---|---|
char | 1字节 | -128即-(2^7)到 127 (2^7-1) |
unsignedchar | 1字节 | 0到 255 (2^8 - 1) |
signedchar | 1字节 | -128即-(2^7)到 127 (2^7-1) |
int signedint | 2或 4字节 | -32,768 (- 2^15 ) 到 32,767 (2^15-1) 或 -2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31-1) |
unsignedint | 2或 4字节 | 0到 65,535 (2^16-1)或 0到 4,294,967,295 (2^32-1) |
short signedshort | 2字节 | -32,768 (- 2^15)到 32,767 (2^15-1) |
unsignedshort | 2字节 | 0到 65,535 (2^16 - 1) |
long signedlong | 4字节 | -2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31 - 1) |
unsignedlong | 4字节 | 0到 4,294,967,295 (2^32 - 1) |
2.3.1、整型的使用细节
- 各种类型的存储大小与操作系统、系统位数和编译器有关 ,目前通用的以 64位系统为主。
2) 在实际工作中,c程序通常运行在 linux/unix操作系统下.二级考试,使用 windows
3) C语言的整型类型,分为有符号 signed和无符号 unsigned两种,默认是 signed
4) C程序中整型常声明为 int型,除非不足以表示大数,才使用 longlong
5) bit(位): 计算机中的最小存储单位。byte(字节):计算机中基本存储单元。
1byte = 8bit [二进制再详细说,简单举例一个 short3和 int3 ]
示意图:
**short3 **在内存中占有 2 字节
**int3 **在内存中占有 4 个字节
2.4、浮点型的分类
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float单精度 | 4字节 | 1.2E-38到 3.4E+38 | 6位小数 |
double双精度 | 8字节 | 2.3E-308到1.7E+308 | 15位小数 |
- 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位 , 浮点数是近视值
2) 尾数部分可能丢失,造成精度损失。
2.4.1、浮点型使用细节
- 浮点型常量默认为 double型 ,声明 float型常量时,须后加‘f’或‘F’。
2) 浮点型常量有两种表示形式
十进制数形式:如:5.12 512.0f .512 (必须有小数点)
科学计数法形式:如:5.12e2、5.12E-2
3) 通常情况下,应该使用 double型,因为它比 float 型更精确。
4) printf("d1=%f ", d1); // 在输出时,默认保留 小数点 6位
2.5、字符类型(char)
字符类型可以表示单个字符,字符类型是 char,char是 1个字节(可以存字母或者数字),多个字符称为字符串,在C语言中 使用 char数组 表示,数组不是基本数据类型,而是构造类型[关于数组我们后面详细讲解.]
2.5.1字符类型使用细节
- 字符常量是用单引号(‘’)括起来的单个字符。例如:charc1=‘a’; charc3= ‘9’;
2) C中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3=‘\n’; //'\n’表示换行符
3) 在 C中,char 的本质是一个整数,在输出时,是 ASCII码对应的字符。
4) 可以直接给 char赋一个整数,然后输出时,会按照对应的 ASCII字符输出 [97]
5) char类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode码.
2.5.2、字符类型本质探讨
- 字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来存储:字符’a’——> 码值 (97)——>二进制 (1100001)——>存储()
读取:二进制(1100001)——>码值(97)——> 字符’a’——>读取(显示)
2) 字符和码值的对应关系是通过字符编码表决定的(是规定好)
2.6、布尔类型:boolean
2.6.1、基本介绍
1)C语言标准(C89)没有定义布尔类型,所以 C语言判断真假时以 0 为假,非 0 为真 [案例]
2) 但这种做法不直观,所以我们可以借助 C语言的宏定义。
3)C语言标准(C99)提供了_Bool型,_Bool仍是整数类型,但与一般整型不同的是,_Bool变量只能赋值为0或1,非0的值都会被存储为1,C99还提供了一个头文件 <stdbool.h>定义了bool 代表_Bool,true代表1,false代表0。只要导入 stdbool.h,就能方便的操作布尔类型了 ,比如 boolflag =false;[了解]
Ø 条件控制语句; if
Ø 循环控制语句; while …
2.7、基本数据类型转换
2.7.1、自动类型转换
介绍:当 C程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。
2.7.2 、数据类型按精度(容量)大小排序为
以上图片中的变量可以自动转换成
2.7.3、自动类型转换细节说明
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度最大的那种数据类型,然后再进行计算(如int型和 short 型运算时,先把 short 转成 int 型后再进行运算)。
2) 若两种类型的字节数不同,转换成字节数大的类型,若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
3在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边的类型将转换为左边的类型,如果右边变量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入
2.8、强制类型转换 格式[(类型)表达式]
将精度高的数据类型转换为精度小的数据类型。使用时要加上强制转换符 ( ),但可能造成精度降低或溢出;格外要注意。
Ø 强制类型转换一般格式如下:
(类型名) 表达式
什么是表达式:任何有值都可以称为表达式,比如1+2, intnum=2
这种强制类型转换操作并不改变操作数本身
三、指针
指针表示一个地址(存放的是地址)
#include <stdio.h>
void main() {int num = 1;//定义一个指针变量,指针//说明//1. int * 表示类型为 指针类型//2. 名称 ptr , ptr 就是一个 int * 类型//3. ptr 指向了一个 int 类型的变量的地址int *ptr = #//num 的地址是多少//说明 1:如果要输出一个变量的地址,使用格式是 %p//说明 2: &num 表示取出 num 这个变量对应地址printf("\nnum 的值=%d num 地址=%p", num, &num);//1.指针变量,本身也有地址 &ptr//2.指针变量, 存放的地址 ptr//3.获取指针指向的值 *ptrprintf("\nptr 的地址是 %p ptr 存放的值是一个地址为 %p ptr 指向的值=%d", &ptr, ptr, *ptr);getchar();
}
3.1、 指针细节说明
1)基本类型,都有对应的指针类型, 形式为 数据类型 *,比如 int的对应的指针就是 int ,float对应的指针类型就是 float ,依次类推。
2)此外还有指向数组的指针、指向结构体的指针,指向共用体的指针,(二级指针,多级指针)后面我们再讲到数组、结构体和共用体时,还会详细讲解。
#include <stdio.h>void main() {int num = 88;int *p = #int *p2 = #printf("num的地址:%d;p的地址:%d;p2的地址:%d;",num,p,p2)
}
//假如说一个指针指向另一个指针,那么例如上面案例中p2中存放的还将是num地址。
3.2、值传递和地址传递
C 语言传递参数(或者赋值)可以是值传递(pass by value),也可以传递指针(a pointer passed by value), 传递指针也叫地址传递。
1) 默认传递值的类型:基本数据类型 **(整型类型、小数类型,字符类型), 结构体, **共用体。
2) 默认传递地址的类似:指针、数组
3.2.1、值传递和地址传递使用特点:
- 值传递:将变量指向的存储内容,在传递/赋值时,拷贝一份给接收变量.
2) 地址传递 也叫 指针传递:如果是指针,就将指针变量存储的地址,传递给接收变量,如果是数组,就将数组的首地址传递给接收变量。
四、常量
4.1、基本介绍
1)常量是固定值,在程序执行期间不能改变。这些固定的值,又叫做字面量。
2)常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
3)常量的值在定义后不能进行修改.
4.1.1整数常量
1)整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x或 0X表示十六进制,0表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 U和 L的组合,U表示无符号整数(unsigned),L表示长整数(long)。后缀可以是大写,也可以是小写,U和 L的顺序任意
4.1.2浮点常量
- 浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。
4.1.3字符常量
- 字符常量是括在单引号中,例如,‘x’ 可以存储在 char类型的变量中。字符常量可以是一个普通的字符(例如’x’)、一个转义序列(例如 ‘\t’。
4.1.4字符串常量
- 字符串字面值或常量是括在双引号 “” 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。可以使用空格做分隔符,把一个很长的字符串常量进行分行
4.2、常量的定义
4.2.1定义常量的两种方式
- 使用 #define预处理器。
2) 使用 const 关键字
4.3、#define预处理器
- #define预处理器定义常量的形式 #define常量名 常量值
#include <stdio.h>
#define PI 3.14 //定义常量 PI 常量值 3.14
int main() {PI = 3.1415 可以吗?=》 不可以修改,因为 PI 是常量//可以修改 PI 值?//PI = 3.1415; //提示 = 左值 必须是可修改的值double area;double r = 1.2;//半径area = PI * r * r;printf("面积 : %.2f", area); getchar();return 0;
}
4.4、 const关键字
- 可以使用 const声明指定类型的常量 **const数据类型 常量名 = 常量值; **
#include <stdio.h>
//1. const 是一个关键字,规定好,表示后面定义了一个常量
//2. PI 是常量名,即是一个常量,常量值就是 3.14
//3. PI 因为是常量,因此不可以修改
//4. const 定义常量时,需要加 分号
const double PI = 3.14;
int main() {
//PI = 3.1415 可以吗? => 不可以
double area; double r = 1.2; area = PI * r * r;
printf("面积 : %.2f", area);
getchar(); return 0;
}
4.5 、const和 #define的区别
- const定义的常量时,带类型,define 不带类型
2) const是在 编译、运行的时候起作用,而 define是在编译的预处理阶段起作用
3) define只是简单的替换,没有类型检查。简单的字符串替换会导致边界效应[案例演示].
4) const常量可以进行调试的,define是不能进行调试的,主要是预编译阶段就已经替换掉了,调试的时候就没它了
5) const不能重定义,不可以定义两个一样的,而 define通过 undef取消某个符号的定义,再重新定义 [案例]
6) define可以配合#ifdef、 #ifndef、 #endif来使用, 可以让代码更加灵活,比如我们可以通过#define来 启动或者关闭 调试信息。[案例]
五、算术运算符
5.1、算术运算符一览表:
细节:1) 案例演示算术运算符的使用(operator.c)。
+, - , * , / , %, ++, – , 重点讲解 /、%、++
2) 自增:++ 作为独立的语句使用:前++和后++都完全等价于 i=i+1;
作为表达式使用
前++:++i先自增后赋值后++:i++先赋值后自增
– ,+、-、* 是一个道理,完全可以类推
5.1.2细节说明
- 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
如:int x= 10/3 ,结果是 3
2) 当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到 取模的一个本质运算。
3) 当 自增 当做一个独立语言使用时,不管是 ++i; 还是 i++; 都是一样的,等价
4) 当 自增 当做一个 表达式使用时 j = ++i 等价 i = i + 1; j = i;
5) 当 自增 当做一个 表达式使用时 j = i++ 等价 j = i; i = i + 1;
5.2、关系运算符(比较运算符)一览表
5.2.1、细节说明
- 关系运算符的结果要么是真(非 0 表示, 默认使用 1),要么是 假(0 表示)
2) 关系运算符组成的表达式,我们称为关系表达式。 a > b
3) 比较运算符 “==”(关系运算符) 不能误写成 “=” (赋值)
5.3、逻辑运算符一览表
void main() {
double score = 70;//成绩if(score>=60 && score<=80){
printf("ok1");
} else {
printf("ok2");
}int a = 10, b = 99;
//说明:
//1. 在进行 && 操作时, 如果第一个条件为 false ,则后面的条件不在判断
//2. 该现象称为 短路现象,所以 逻辑与 也称为 短路逻辑与
if(a < 2 && ++b>99) { // printf("ok100");
}
printf("b=%d\n", b); //b=99 getchar();
}
5.3.1、逻辑运算符的短路现象
void main() {
int a = 10, b = 99;
//说明
//1. 在进行逻辑与时,如果第一个条件为真,则不再执行后面的条件,整个结果为真
//2. 该现象称为 逻辑或短路现象,因此 逻辑或也称为 短路逻辑或
if(a > 5 || b++>100) { // printf("ok100");
}
printf("b=%d\n", b); // b= 99 getchar();
}
5.4、赋值运算符一览表
5.4.1、赋值运算符特点
- 运算顺序从右往左
2) 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
3) 复合赋值运算符等价于下面的效果比如:a+=3;等价于 a=a+3;
4) 注意在运算时,可能截断小数点后面的部分
5.5、位运算符一览表(需要用到二进制)
5.6、三元运算符
5.6.1、基本语法 条件表达式 **? **表达式 **1:**表达式 2;
-
如果条件表达式为非 0 (真),运算后的结果是表达式 1;<br />2) 如果条件表达式为 0 (假),运算后的结果是表达式 2;<br />3) 口诀: 一灯大师 =》 一真大师
5.6.2、使用细节
-
表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换), 否则会有精度损失<br />2) 三元运算符可以转成 if--else语句<br />intres=a>b ? a++: --b; //if... else..
5.7 运算符优先级一览表
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | – |
2 | () | 圆括号 | (表达式)/函数名(形参表) | 右到左 | – |
3 | . | 成员选择(对象) | 对象.成员名 | 左到右 | – |
4 | -> | 成员选择(指针) | 对象指针->成员名 | 左到右 | – |
5 | - | 负号运算符 | -表达式 | 左到右 | 单目运算符 |
6 | ~ | 按位取反运算符 | ~表达式 | 左到右 | – |
7 | ++ | 自增运算符 | ++变量名/变量名++ | 左到右 | – |
8 | – | 自减运算符 | –变量名/变量名– | 左到右 | 双目运算符 |
9 | * | 取值运算符 | *指针变量 | 左到右 | 双目运算符 |
10 | & | 取地址运算符 | &变量名 | 左到右 | 双目运算符 |
11 | ! | 逻辑非运算符 | !表达式 | 左到右 | 双目运算符 |
12 | (类型) | 强制类型转换 | (数据类型)表达式 | 左到右 | 双目运算符 |
13 | sizeof | 长度运算符 | sizeof(表达式) | 右到左 | 双目运算符 |
14 | / | 除 | 表达式/表达式 | 右到左 | 双目运算符 |
15 | * | 乘 | 表达式*表达式 | 左到右 | 双目运算符 |
5.7.1、运算符优先级小结:
-
结合的方向只有三个是从右向左,其余都是从左向右<br />2) 所有的双目运算符中只有赋值运算符的结合方向是从右向左<br />3) 另外两个从右向左的结合运算符,一个是单目运算,还有一个是三目运算()<br />4) 逗号的运算符优先级最低<br />5) 说一下优先级的大概的顺序 算术运算符 > 关系运算符 > 逻辑运算符(逻辑非! 除外) > 赋值运算符 > 逗号运算符<br />6) 注意不需要刻意的记, 常用就慢慢有印象.
5.7.2、运算符优先级注意事项和细节:
上表中,优先级同为1 的几种运算符如果同时出现,那怎么确定表达式的优先级呢?这里我们专门说明一把
5.8、标识符的命名规则
- 由 26 个英文字母大小写,0-9 ,_或 $ 组成
2) 数字不可以开头。
3) 不可以使用关键字和保留字,但能包含关键字和保留字。
4) C 语言中严格区分大小写,长度无限制。
5) 标识符不能包含空格。
5.8.1、标识符命名规范
- 程序中不得出现仅靠大小写区分的相似的标识符
i nt x, X; 变量 x 与 X 容易混淆
2) 所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分隔单词比如: const double TAX_RATE = 0.08; //TAX_RATE 只读变量
#define FILE_PATH “/usr/tmp”
3) 定义变量别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据, 运行程序, 会异常退出.
4) 变量名、函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [驼峰法,小驼峰, 比如 short stuAge = 20;]
比如: tankShotGame 大驼峰 [TankShotGame]
5.9、关键字
5.1.1、关键字的定义和特点

5.10、键盘输入语句
-
include<stdio.h><br />2) 使用 scanf函数<br />3) 使用适当的格式参数接收输入
第六章、二进制和位运算
6.1、进制介绍:
- 二进制:0,1,满 2进 1,C语言中没有二进制常数的表示方法。
- 十进制:0-9,满 10 进 1。
- 八进制:0-7,满 8 进 1.以数字 0开头表示。
- 十六进制:0-9及 A-F,满 16进 1.以 0x或 0X开头表示。此处的 A-F不区分大小写。[A->10B->11 C->12D->13E->14F->15 ]
6.2.1、进制的图示:
6.2、进制之间的相互转换:
- **第一组:(其它进制转十进制) **
- 二进制转十进制
- **八进制转十进制 **
- 十六进制转十进制
- 第二组: (十进制转其它进制)
- **十进制转二进制 **
- **十进制转八进制 **
- 十进制转十六进制
- 第三组(二进制转其它进制)
- 二进制转八进制
- 二进制转十六进制
- **第四组(其它进制转二进制) **
- 八进制转二进制
- 十六进制转二进制
6.3、位运算
6.3.1、位运算符
6.3.2、位运算说明(1)
它们的运算规则是:
-
- 按位与& : 两位全为1,结果为 1,否则为 0
-
- 按位或| : 两位有一个为 1,结果为 1,否则为 0
-
- 按位异或 ^ : 两位一个为 0,一个为 1,结果为 1,否则为 0 4)
- 4) 按位取反 : 0->1 ,1->0
- 比如:~2=? ~-5=? 2&-3=? 2|3=? 2^3=?
6.3.3、位运算说明(2):
、<< 算术右移和算术左移,运算规则:
1) 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
2) 算术左移 <<: 符号位不变,低位补 0
第七章、程序流程控制
7.1、分支控制if-else介绍
让程序有选择的的执行,分支控制有三种:
- 单分支
- 双分支
- 多分支
7.1.1、单分支
基本语法
if(条件表达式){
执行代码块;
}
7.1.2、双分支
基本语法
if(条件表达式){
执行代码块 1;
}else{
执行代码块 2;
}
7.1.3、多分支
基本语法
if(条件表达式 1){
执行代码块 1;
}elseif (条件表达式 2){
执行代码块 2;
}……else{
行代码块 n;
}
7.2 switch分支结构
7.2.1基本语法和流程图:
void main() {/*
案例:
请编写一个程序,该程序可以接收一个字符,比如: a,b,c,d,e,f,g a 表示星期一,b 表示星期
二 … 根据用户的输入显示相依的信息.要求使用switch 语句完成*/char c1 = ' '; char c2 = 'a';
printf("请输入一个字符(a,b,c,d)");
scanf("%c", &c1);//switch
//表达式: 任何有值都可以看成是一个表达式
switch(c1) {
case 'a' : //'a' => 97printf("今天星期一, 猴子穿新衣");break; //退出 switch
case 'b' :printf("今天星期二, 猴子当小二"); break;
case 'c' :printf("今天星期三, 猴子爬雪山"); break;
case 'd' :printf("今天星期四, 猴子有急事"); break;
default : //default 是可选择,不是必须的printf("没有匹配到任何值~");}
printf("switch 结束~");
getchar();
getchar();
}
7.2.2 switch 细节讨论
- switch 语句中的 expression 是一个常量表达式,必须是一个整型(char、short, int, long 等)或枚举类型
2) case 子句中的值必须是常量,而不能是变量
3) default 子句是可选的,当没有匹配的 case 时,执行 default
4) break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;
5) 如果没有写 break,会执行下一个 case 语句块,直到遇到 break 或者执行到 switch 结尾, 这个现象称为穿透.
7.2.3 switch 和 if 的比较
- 如果判断的具体数值不多,而且符合整型 、枚举类型。虽然两个语句都可以使用,建议使用 swtich 语句。
2) 其他情况:对区间判断,对结果为 真假 的判断,使用 if,if 的使用范围更广
7.3 for循环
7.3.1基本语法
循环变量定义
for(①循环变量初始化;②循环条件;④循环变量迭代){
③循环操作(多条语句);
7.3.2流程图
7.3.37.1.1注意事项和细节说明
-
循环条件是 返回一个表示真(非0)假(0) 的表达式<br />2) for(;循环判断条件;) 中的初始化和变量迭代可以不写(写到其它地方),但是两边的分号不能省略。<br />3) 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。<br />for(i= 0, j=0;**j <count**; i++,j += 2)//背影部分返回的值为一个布尔型要么为真要么为假