黑马程序员—(iOS开发)C语言语法解析---(三)
------- iOS培训、PHP培训、android培训、java培训、期待与您交流! ----------
了解:
1、关键字、标识符、注释;
2、常量、变量
3、进制
4、变量与内存
5、基本数据类型
6、基本运算
7、流程控制
一、关键字、标识符、注释
(一) 关键字:
1、关键字:C语言提供的有特殊含义的符号,叫“关键字”,也叫“保留字”;
2、一共有哪些关键字:(C语言提供了共32个关键字,这些都被C语言赋予了特殊含义)
auto |
double |
int |
struct |
break |
else |
long |
switch |
case |
enum |
register |
typedef |
char |
return |
union |
const |
float |
short |
unregister |
continue |
for |
signed |
void |
default |
goto |
sizeof |
volatile |
do |
if |
while |
static |
3、如何辨别关键字:
1> 全是小写;
2> 在开发工具或只能文本编辑工具(如:UITraEdit)中会显特殊颜色;
(二) 标识符:
1、标识符:在程序中自定义的符号和名称,要与关键字区分:关键字是C语言默认提供的符号,标识符是自定义的;
2、标识符作用:
1> 标识符:为了将一些东西区分开,如:人姓名;
2> 函数的名称就是标识符的一种,变量的名称也是标识符;
3、标识符命名规则:
1> 只能由26个英文字母的大小写、10个阿拉伯数字、下划线_组成;
2> 严格区分大小写;
3> 不能以数字开头;
4> 不能使用关键字作为标识符;
4、标识符命名规范:
1> 尽量起有意义的名称;
2> 使用驼峰标识(除第一个单词外,后面每个单词首字母大写)或使用下划线来链接多个单词;
(三) 注释:
1、注释:注解;
2、注释种类:
1> 单行注释:// 注释的内容
2> 多行注释:/* 注释的内容 */
3、注释嵌套:
1> 单行注释可嵌套多行注释或单行注释;
2> 多行注释可嵌套单行注释;
3> 多行注释不能嵌套多行注释;
4、注释细节:
1> 注释是写给别人看的,不是给计算机看的,因此,当编译程序时并不会将注释编译到目标文件中,所以被注释的语句是不会被执行的;
2> 要养成注释的习惯:可回顾代码的作用;
5、注释隐藏的功能:
1> 排错;
2> 检查代码:把注释前后的代码运行效果作对比,看有没有少效果;
二、常量、变量
(一) 数据的存储
1、数据类型:
1> 静态数据:
① 静态数据是一些永久性数据,一般存储在硬盘中;
② 存储时长:只要不删除,这些数据永远都在;
③ 静态数据一般以文件形式存储在硬盘上,如:视频、照片等;
2> 动态数据:
① 在程序运行过程中,动态产生的临时数据,一般存储在内存中;
② 存储时长:计算机关闭后或程序停止运行,就会被清除;
③ 当程序运行时,整个程序就会被加载到内存中,在程序运行过程中会产生各种临时数据,这些临时数据都存储在内存中,当程序停止运行或计算机强制关闭,这个程序产生的所有临时数据都会被清除;
说明:应用程序加载到内存:内存的访问速度> 硬盘的N倍;
3> 动态数据和静态数据的转换:
① 静态数据==>动态:首先打开暴风影音,计算机会将暴风影音加载到内存中,紧接着计算机会读取硬盘中的视频文件内容到内存中,暴风影音会解析读取到的文件内容以视频的形式呈现给用户看;
② 动态数据==>静态:首先打开迅雷软件,计算机会将迅雷加载到内存中,紧接着迅雷就会从互联网下载视频文件,下载过程需消耗时间,每个时间段下载获取的数据都先放到内存中,然后在写入到硬盘中,待所有数据下载完毕后,硬盘中就会有一个完整的视频文件;
2、存储格式:
1> 二进制存储:计算机只能识别0和1,因此静态数据和动态数据都是以0和1的形式存储的,若有n位数字,就表示有2的n次方种数据,可发现,只要位数足够,0和1所能表示的数据是非常庞大的;
2> 比特位和字节:
① 为方便计算文件大小,对计量单位做了规定:1个二进制位=1bit,也就是1个0或1=1bit,bit用中文翻译为“比特位”;
② 常用计量单位:
8bit =1byte(byte中文翻译为“字节”,简写为“B”)、1KB=1024B、1MB=1024KB、1GB=1024MB、1TB=1024GB |
(二) 数据类型:
1、基本数据类型:int、float、double、char;
2、指针类型:void *;
3、空类型:void;
4、构造类型:数组、结构体struct、共用体union、枚举enum;
(三) 常量
1、常量:固定不可改变的数据;
2、常量类型:
1> 整型常量:int;
2> 浮点型常量:
① double双精度浮点型:小数,0.0也算小数;
② float单精度浮点型:小数,比double精确程度低,所能表示的小数位数少,以“f”结尾,只允许小数以“f”结尾;
3> 字符型常量:char
① 将一个数字、英文字母、其它符号用单引号括起来;
② 单引号只能括住1个字符,且不能为中文;
4> 字符串常量:将1个或多个字符用双引号(“”)括起来;
(四) 变量
1、变量:可改变的量;
2、变量的定义:
说明:① 任何变量在使用之前,必须先进行定义;
② 定义变量的目的:在内存中分配一块存储空间给变量,方便以后存储数据,若定义了多个变量,就会为多个变量分配不同的存储空间;
1> 变量类型:
① 定义变量时,需指明变量类型,系统会根据变量类型来分配相应的存储空间,不同的变量类型所占用的存储空间是不一样的;
② 变量类型可用来约束变量所存放数据的类型,一旦指明了变量的类型,则这个变量就只能存储这种类型的数据;
2> 变量名:为区分变量,定义变量时应为每个变量置顶一个变量名,变量名也是标识符的一种,当需修改变量的数据时,系统会根据变量名找到变量对应的存储空间,将存储空间里的数据改掉;
3> 定义:
① 定义变量的格式:变量类型 变量名;(如:int age;)
② 同一类型变量,可连续定义,变量名以逗号隔开:变量类型 变量名1,变量名2,...;(如:int age,num;)
3、变量的作用:
1> 先定义再使用:
① 给变量第一次赋值,叫“初始化”;
② 变量赋值格式:变量名=值;(如:age = 10;)
③ 格式中的“=”是赋值运算符,将右边的值赋值给左边变量,也就是将右边的值存储到左边变量的存储空间中;
2> 定义的同时初始化:变量类型 变量名=值;(如:int age = 10;)
3> 可不断修改(如:int age=10;age = 20;)
4> const关键字:变量的值只初始化一次,以后都不能再改变,使用格式:const变量类型 变量名=值;(如:const int age=10;)
4、变量的使用注意:
1> 不能重复定义同一个变量(但在不同作用域中允许有同名的变量,系统会为它们分配不同的存储空间);
2> 可将一个变量的值赋给另一个变量;
3> 变量的作用域是从定义变量的那一行代码开始;
三、进制
说明:①“进制”是一种计数方式;
②常见进制:十进制、二进制、八进制、十六进制;
(一) 十进制:
1、概念:由0-9组成;
2、运算:“逢十进一”;
(二) 二进制:
1、概念:由0和1组成,当最高位为0表示正数,当最高位为1表示负数;;
2、运算:“逢二进一”;
3、细节:以0b或0B开头;
4、二进制转十进制:
说明: 进制中有“基数”概念,基数是用来计算数值的;
1> 十进制基数为10:
1230 = 0 * 100 + 3 * 101 + 2 * 102 + 1 * 103 = 0 * 1 + 3 * 10 + 2 * 100 + 1 * 1000 |
二进制的基数为2:(二进制 转 十进制)
0b1011 = 1 * 20 + 1 * 21 + 0 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 0 * 4 + 1 * 8 = 1 + 2 + 0 + 8 = 11 |
(三) 八进制:
1、概念:由0-7组成;
2、运算:“逢八进一”;
3、细节:以0开头;
4、八进制转十进制:
1> 八进制基数为8:
027 = 7 * 80 + 2 * 81 = 7 * 1 + 2 * 8 = 23 |
5、二进制转八进制:(从右到左,每3位分组,不够在左边添0)
0b11110011 = 0b 011 110 011 = 0363 |
八进制转二进制:(用3位二进制数表示1位八进制数)
025 = 0b 010 101 = 0b10101 |
(四) 十六进制:
1、概念:由0-9和A-F组成;
2、运算:“逢十六进一”;
3、细节:以0x或0X开头;
4、十六进制转十进制:
1> 十六进制基数为16:
0x2F = 15 * 160 + 2 * 161 = 15 * 1 + 2 * 16 = 47 |
5、二进制转十六进制:(从右到左,每4位分组,不够在左边添0)
0b11110011 = 0b 1111 0011 = 0xF3 |
十六进制转二进制:(用4位二进制数表示1位十六进制数)
0x25 = 0b 0010 0101=0b100101 |
(五) 变量与进制
1、定义变量,初始化,存储的为十进制数,这个变量a在内存中是以二进制数形式存储;
2、除了十进制整数,还可将其它进制的整数赋值给整型变量;
(六) printf的简单使用
1、使用printf输出整型变量:
1> 使用printf就需添加#include <stdio.h>;
2> 利用printf输出一个整型变量,就必须先说明输出格式;
3> 使用格式符%d输出整型变量值:表用右边变量a的值替代%d的位置进行输出,并以十进制格式输出;
printf("变量a的值是:%d\n",a);// 使用\n输出后回车换行
2、printf支持的格式符:(红色表示常用)
注意:① 保留2位小数:%.2f;
② 占用宽度:%3f;
3、printf可同时输出多个数值:
printf("age = %d,no =%d",age,no); |
4、printf也可输出常量:
printf("输出的常量为%d",11); |
四、变量与内存
说明:① 定义一个变量时,系统会为变量分配一块存储空间;
② 变量的数值在内存中以二进制形式存储;
(一) 字节和地址:
1、计算机中的内存以字节为单位存储空间的,每个字节都有个唯一的编号叫地址;
2、地址采用十六进制来显示,可随便写;
3、内存中相邻字节的地址时连续的;
(二) 变量的存储:
1、变量类型的作用:变量类型决定来变量占用的存储空间,因此定义变量类型,是为了给该变量分配适当的存储空间,以便存放数据;
2、变量占用多少存储空间:
1> 一个变量所占用的存储空间,不仅跟变量类型有关,且跟编译器环境有关。因此,同一种类型变量在不同编译器环境下所占用的存储空间是不一样的;
2> 不同环境下的存储空间占用情况:
3、变量事例:
char a = 'A'; int b = 10;
注意:“存储内容”列的一个小格子代表一个字节,“地址”列指每个字节的地址 ① 每个字节都有自己的地址,其实变量也有地址。变量存储单元的第一个字节的地址就是该变量的地址。变量a的地址是ffc5,变量b的地址是ffc1。 ② 内存寻址是从大到小的,也就是说做什么事都会先从内存地址较大的字节开始,因此系统会优先分配地址值较大的字节给变量。由于是先定义变量a、后定义变量b,因此你会看到变量a的地址ffc5比变量b的地址ffc1大。 ③ 由于内存寻址是从大到小的,所以是从内存地址最大的字节开始存储数据,存放顺序是ffc4 -> ffc3 -> ffc2 -> ffc1中。 |
4、查看变量的内存地址:(使用%p输出地址)
printf("变量a的内存地址是:%p",&a);
注意: ① 地址运算符&:&a表示取得变量a的地址; ② 格式符%p:专门用来输出地址; |
(三) 负数的二进制形式:
1、任何数值在内存中都以补码的形式存储的;
1> 正数的补码与原码相同;(如:9的原码和补码都是1001)
2> 负数的补码=它正数的原码取反再+1;(取反:0变1,1变0)
(四) 变量的作用域:
1、作用域简介:定义变量那行开始,一直到它所在{}结束,一旦离开此范围变量就失效了;
2、代码块:
1> 代码块:用大括号{}括住的一块代码;
2> C语言中不同作用域下有相同的变量,赋值则采用就近原则;
(五) 变量的初始化:变量未进行初始化前,里面存储的为垃圾数据;
五、基本数据类型
说明:C语言有丰富的数据类型,适合用来编写数据库,如DB2、Oracle等大型数据库,其中基本数据类型有:int、float、double、char;
(一) 取值范围
1、int类型取值范围:-231 ~ 231 - 1;
2、各种数据类型取值范围:
3、数值越界:
1> 例子演示:超出下标结果值为0;
2> 结果分析:内存寻址是从大到小,数值越界,数值地址为首地址,因此为0;
3> 结论:若超出变量取值范围,将损失精度得到“垃圾数据”(非想要的数据),若确实需存储很大的整数,就需用类型说明符。
(二) 字符型char
1、简单使用:存储字符,使用%c来表示以字符格式输出;
2、字符常量一定要用单引号括住:(如:char c = 'A';)
3、字符型变量还可当整型变量使用:(若整数不大(-10 ~120),可使用char代替int:char c = -10; )
4、字符型变量只能存储单字节字符:
1> 字符有2种类型:
① 单字节字符:在内存种占用1个字节的字符,包括26个英文字母大小写,10个阿拉伯数字等字符;
② 双字节字符:在内存中占用2个字节的字符。包括中国、日本和韩国等国家的文字,如汉字;
说明:1个字符型变量只占用1个字节,所以1个字符型变量只能存储1个单字节字符;
5、字符型变量不能存储汉字:(原则:单引号括住的必须是单字节字符);
6、ASCII
1> ASCLII是基于拉丁字母的一套电脑编码系统,是现今最通用的单字节编码系统,起始就是一个字符集-字符的集合;
2> ASCII字符集包括了:所有的大写和小写英文字母,数字0到9,标点符号,以及一些特殊控制字符:如退格、删除、制表、回车,一共128个字符,全部都是“单字节字符”;
3>在计算机中的任何数据都是以二进制形式存储的,因此每个ASCII字符在内存中是以二进制形式存储的,而且只占用1个字节,二进制数的值就称为这个ASCII字符的ASCII值。比如大写字母A在内存中的二进制形式是:0100 0001,那么它的ASCII值就是65;
4>下面是一张ASCII码字符表,ASCII码值的范围是0~127;
5>我们都知道1个char型变量只占用1个字节的存储空间,而所有的ASCII字符都是单字节字符,因此char变量能存储任何ASCII字符。而且在使用char型变量存储ASCII字符时,可以直接用ASCII字符,也可以用ASCII值;
(三)说明符
1、说明符:为解决数值越界问题,增大各类型变量长度的符号;
1> C语言提供4种说明符:(都属于关键字)
① 短型 short;
② 长型 long;
③ 有符号型 signed;
④ 无符号型 unsigned;
2、用法演示:
// 短型 int类型 short int s1 = 1; ===short s1 = 1; // 长型 int类型 long int l1 = 2; ==== long l1 = 2; // 长型 long类型 long long l1 = 10; // 有符号 int类型 signed int s1 = 3; ==== signed s1 = 3; // 无符号 int类型 unsigned int us1 = 4; ==== unsigned us2 = 4; // 可同时使用2种修饰符 signed short int ss = 5; unsigned long int u1 = 6; |
3、short 和long
1> short和long可改变整型数的取值范围,因此,若需整型数不大就是用short代替int,可节省开销内存;
2> 不同编译器下,int、short和long取值范围和占用长度不同,因此ANSI/ISO制定了规则:
① short和int至少为16位(2字节);
② long至少为32位(4字节);
③ short的长度<int,int的长度<long;
④ char一定为8位(1字节),是编程能用的最小数据类型;
3> 可连续使用2个long(如:long long),一般来说,long long的范围>long,如:(32位编译器下)long long占用8字节,long占4字节,(64位编译器下)long long=long=8字节;
4> shortint 等价于short,long int 等价于long,long long int 等价于long long;
4、long的使用注意:
1> 常量:long类型的在数值后面加上“l”字母结尾,若为long long类型就在数值后加“ll”字母结尾;
2> 输出:long类型数据使用格式符%ld输出,long long类型数据使用格式符%lld输出;
5、signed和unsigned
1> signedint 等价于 signed,unsigned int 等价于unsigned;
2> signed和int区别在于它们的最高位是否要当作符号位:
① signed:表有符号,最高位要当做符号位,包括正数、负数和0,其实int最高位本就是符号,已包括正负数和0了,因此signed和int是一样的,signed 等价于signed int,也等价于int; ② unsigend:表无符号,最高位不做符号位,因此无负数; |
6、signed、unsigned也可修饰char、long,还可以修饰double:
unsigned char c1 = 10; signed char c2 = -10; longdouble d1 = 12.0; |
7、不同数据类型所占用的存储空间:
(四) 自动类型提升
1、自动类型提升:系统会自动对占用内存较少的类型做“自动类型提升”,但只在运算过程中进行,并不改变原本变量的类型;
2、常见自动类型提升:
floata = 10 + 3.45f;// int 提升为float intb = 'A' + 32;// char 提升为 int doublec = 10.3f + 5.7;// float 提升为 double |
(五) 强制类型转换
1、强制类型转换:
1> 由于C语言语法限制不严格,系统会自动强制转换;(大类型转小类型)
int i = 10.7; printf("%d",i); |
2> 手动强制转换:
int i = (int) 10.7; printf("%d",i); |
2、常见强制类型转换:
int a = 1981;// long 转为 int char b = 65;// int 转为 char int c = 10.73;// float 转为 int |
3、其他语法:强制类型转换可以为大类型转为小类型,也可由小类型转为大类型;
六、基本运算
说明:① C语言无所不能:不仅有丰富的数据类型,还有强大的计算能力;
② C语言一共有34种运算符;
(一) 算术运算符:
1、 简单运算:
① 加法运算符:(+) int a =10; int b = a+ 5; ② 减法运算/负值运算符(-): int b = 10- 5; int a =-10; ③ 乘法运算符(*): int b = 10* 5; ④ 除法运算符(/):同数据类型的值才能运算,且结果依然为同一类型 double a =10.0 / 4; double b =10 / 4 ; ⑤ 取模/余运算(%):%两侧必须为整数 正数取余:int a =5 % 2; 负数取余:int a =-5 % 2; |
2、运算顺序:
1> 算术表达式:表达式运算顺序按运算符的结合方向与优先级进行;
① 结合方向:从左到右;
② 优先级:从高到低;
③ 优先级排序(小括号优先级最高):负值(-)>乘(*)除(/)> 模(%)> 加(+)> 减(-);
(二) 赋值运算符:
说明:赋值运算符分为:简单赋值运算符 和 复合赋值运算符;
1、简单赋值运算符(=):
1> 简单运算符(=):作用是将右边的值赋值给左边,优先级 < 算术运算符;
int a = 10 + 5; |
2> 连续赋值:
int a,b; a= b = 10; |
3> 使用注意:(常量不能进行赋值运算)等号(=)左边只能是变量,不能是常量;(如:10 = 10 + 5;//错误的)
2、符合赋值运算符:
①加赋值运算符(+=):(如:a += 3 + 2,等价于 a = a + (3 + 2)); ②减赋值运算符(-=):(如:a -= 3 + 2,等价于 a = a - (3 + 2)); ③乘赋值运算符(*=):(如:a *= 3 + 2,等价于 a = a * (3 + 2)); ④除赋值运算符(/=):(如:a /= 3 + 2,等价于 a = a / (3 + 2)); ⑤取余赋值运算符(%=):(如:a %= 3 + 2;等价于 a = a % (3 + 2)); |
(三) 自增/自减运算符:(常量不能进行自增/减运算)
1、自增运算符(++);(如:a++ 或 ++a)
2、自减运算符(--);(如:a-- 或 --a)
3、a++ 与++a区别:
1> 单独使用时,无区别;
2> 涉及运算自增:
①int a = 10; intb = ++a; // a= b=11 先自增再运算 ②int a = 10; intb = a++; // a=11,b=10 先运算再自增 3> 注意: inta = 10; a= a++; // a = 10 |
(四) sizeof
1、sizeof可用来计算一个变量或常量、一种数据类型所占内存字节数;
2、sizeof形式:
1> sizeof(变量/常量) sizeof(10);//常量 charc = 'a'; //变量 sizeof(c); 2> sizeof 变量/常量 sizeof10;// 常量 charc = 'a';// 变量 sizeofc; 3> sizeof(数据类型) sizeof(float);// 不能写成sizeof float |
(五) 逗号运算符
1、逗号运算符主要用于链接表达式:
①使用格式:表达式1,表达式2....表达式n;
例:int a = 2; int b = 0;int c; c= (++a,a*=2,b=a*5); |
②运算过程:从左到右顺序,计算表达式1-n;
③整个逗号表达式的值:最后一个表达式的值;(c = 30)
④注意:逗号运算符右边的表达式是用括号包住的
(六) 关系运算符
1、"真" 与 ”假“:
1> C语言中,条件成立为”真“,条件不成立为”假“;
2> C语言规定:任何非0值为”真“,只有0才为”假“;
2、关系运算符的简单使用:比较2个数值大小,返回0或1;
3、关系运算符的使用注意:
1> 结合方向:从左往右;
2> 优先级:
① == 与 != 优先级相等; ② < 、<= 、> 、>= 优先级相等; ③ 前者①优先级 > 后者②; |
3> 关系运算符的优先级< 算术运算符;
(七) 逻辑运算符
说明:① C语言提供了3种逻辑运算符(英文字符):逻辑与(&&)、逻辑或(||)、逻辑非(!);
② 逻辑运算结果只有2个:”真“为1,”假“为0;
1、逻辑与(&&):
1> 使用格式:条件A&& 条件B;
2> 运算结果:条件之一若不成立,就为0;
3> 运算过程:从左往右;
2、逻辑或(||):
1> 使用格式:条件A || 条件B;
2> 运算结果:条件之一成立,就为0;
3、逻辑非(!):
1> 使用格式:! 条件A
2> 运算结果:条件A成立,就为0;
3> 注意:!!表肯定,依次类推;
4、逻辑运算符优先级:小括号 > 负号 > ! > 算术运算符 > 关系运算符 > && > || ;
(八) 三目运算符
1、N目运算符:只连接一个数据符号,称单目运算符;
2、三目运算符(条件运算符):
1> 使用格式:表达式A ?表达式B :表达式C;
2> 运算结果:A成立就返回B,否则返回C;
3> 结合方向:从右往左;
4> 优先级顺序:算术运算符 > 关系运算符 > 条件运算符 > 赋值运算符;
(九) 位运算符:
说明:① 位运算是对每个二进制位进行运算;
② C语言共提供6种只能对整数操作的运算符:按位与&、按位或|、按位异或^、左移<<、右移>>、取反~;
1、按位与(&):
1> 使用格式:整数a& 整数b;
2> 功能:对应2个二进位都为1时,才为1,否则为0,参与运算的数以补码方式出现;
如:9 & 5,起始就是:1001 & 101 =1,因此 9 & 5 = 1;
3> 规律:
① 相同整数相&的结果为整数本身;(如:5&5=5)
② 多个整数相&的结果跟顺序无关;(如:4&6&7=5&7&6)
2、按位或(|):
1> 使用格式:整数a | 整数b;
2> 功能:对应2个二进位有一个1时,就为1,否则为0,参与运算的数以补码方式出现;
如:9 | 5,起始就是:1001 | 101 =1101,因此 9 | 5 = 13;
3> 规律:
① 相同整数相 | 的结果为整数本身;(如:5 | 5=5)
② 多个整数相 | 的结果跟顺序无关;(如:4 | 6 | 7=5 | 7 | 6)
3、按位异或(^):
1> 使用格式:整数a ^ 整数b;
2> 功能:对应的二进制位相异(不同)时,为1,否则为0。参与运算的数以补码方式出现;
3> 规律:
① 二进制中,与1相 ^ 就会取反,与0相^保持原位;
② 相同整数相^的结果为0;(如:5^5=0)
③ 多个整数相^的结果跟顺序无关;(如:4^6^7=5^7^6)
④ 因此得出:a ^ b ^a = b;
4、取反(~):
1> 取反~为单目运算,具有右结合性,使用形式:~整数a;
2> 功能:对整数a的各二进位取反(0变1,1变0);
如:~9,起始就是~(0000 0000 0000 0000 0000 0000 00001001)=(1111 1111 1111 1111 1111 1111 1111 0110); 因此~9 =10; |
5、左移(<<):
1> 左移<<是双目运算,使用形式:整数a << 正数b;
2> 功能:将整数a的各二进位全部左移n位,高位丢弃,低位补0.左移n位就是*2的n次方;
如:3 << 4,3 = 0000 0011,左移4位后为0011 0000,所以 3 << 4 = 48 = 3 * 24 |
3> 注意:左移是丢弃高位,0补低位,所以符号位也会被丢弃,左移出来结果值可能会改变正负性;
6、右移(>>):
1> 右移>>是双目运算,使用形式:整数a >>正数b;
2> 功能:将整数a的各二进位全部右移n位,符号位不变,右移n位就是/2的n次方;
如:32 >> 3,32 = 0010 0000,右移3位后为0000 0100,所以 32 >> 3 = 4 = 32 / 23 |
七、流程控制
1、顺序结构:默认流程结构,按书写顺序执行;
2、选择结构
。IF语句:if或者if...else或者if...else if(程序会挨个执行到条件成立)或者if(例:if(a>1)语句1;注:语句不能定义常变量,因为系统不知道作用域);
。Swich语句:switch...case:(使用break直接退出swich语句);
。if能完成的功能switch不一定能完成(判断大小)、在有些情况下,if与switch语句可互换、switch能完成的功能if一定能完成;
。总结:if(条件1){}else if(条件2){},同一时刻只有一个大括号里的内容会被执行;
。总结:switch(数值){case 数值1:break;},默认情况只有一个case后面的代码会被执行,若一个case后面没有break,且这个case成立,就会按顺序执行后面所有case语句,知道遇到break为止,若在case后定义一个新变量,必须使用{}包住case中内容;
3、循环结构:
。while循环:【while(条件)】:条件判断再执行(条件成立就重复执行,使用continue跳出当前循环体进入下一次循环体的执行),【注意:若一开始条件不成立就不会执行循环体,若条件成立就会执行一次循环体,执行完毕后再次判断条件成立。】;
。do..while循环:【do{}while(条件)】:先执行再判断,至少执行一次;
。for循环:【for(语句1;条件;语句2){}】:for一开始就会执行一次语句1(整个for循环只会执行一次),判断条件是否成立,若成立就会执行一次循环体,然后执行语句2,再次判断条件是否成立(例:for(int i=0;i<10;i++){})【注意:语句1,条件,语句2可省略,例:for(;i<10;)】;
。For循环嵌套使用:外层循环行,内层循环列;
。总结:while:若一开始条件不成立,则永远不会执行循环体;
。总结:do while:不管条件是否成立,至少执行一次;
。总结:for(语句1;条件;语句2):括号内的内容可省略提出来写;
。选择:一般优先选用for ,再考虑while,最后考虑do while;
4、Break与continue区别(就近有效):
。Break适用于直接退出语句;
。Continue适用于跳出本次循环进入下次循环(例:for(i<5){if(i%2){continue;}}注意:i%2表示i为奇数,输出数据为:0、2、4);
总结基本运算:
1、算术运算:
。加+、减-、乘*、除/、取余%;
。取余/模运算:整数%整数、取余后的结果正负性与%前的数值有关;
。自动类型转换(double-->int,例:int num = 10.3;)
。强制类型转换(double-->int,例:int num = (int)10.3);
。整数/整数=整数(例:double b = 3/2,b=1.00000),整or非整/非整or整 = double(例:3.0/2 = 1.50000);
2、赋值运算:
。简单赋值:=(例:int a = 10;);
。复合赋值:+=、-= (例:a = a + 10;---> a +=10; );
。常量不能进行赋值运算:例:a = 10++(错误的);
3、自增自减运算:
。自增:++(例:a=a+1---> a++或者++a);
。自减:--(例:a--或者--a);
。++或--放值前后的区别:a = 10 【 b = ++a;---->b=a=11】、【b = a ++;--->b = 10, a = 11】、【b = (a++)+(++a) ---> b = 10+12=22 ,a=12】、【b = (++a)+(a++) --->b=11+11=22,a=12】;
4、Sizeof:字节计算
。int size = sizeof(10); printf(“%d”, size); int = 4
。int size = sizeof(double); printf(“%d”, size); size = 8
。PS:int = 4,double = 8,float = 4,char = 1;
。int类型的可转换为:int size = sizeof a;
。char类型的不可转换为:int size = sizeof char;
5、关系/比较运算:
。条件判断:
。真假:0 为假、非0为真;
。关系比较:比较运算符:> 、<、>=、<=、==、!=;
。比较运算符优先级:同一优先级(> 、<、>=、<=)、同一优先级(==、!=),前者“同一优先级”优先于后(例:3=4>1,先运算4>1,再运算3=1),且同一优先级比较则从左往右运算;
。算术运算符优先级>比较运算符(例:2+1=4+3,先计算2+1和4+3再计算=);
。
6、逻辑运算符:
。逻辑与(条件1 && 条件2):同真为1,否则为0;
。逻辑或(条件1 || 条件2):同假为0,否则为1,
。逻辑非(!条件):条件成立为0,不成立为1(!!表示2次非);
7、三目运算:
。三目运算符: 条件 ?数值1:数值2;
PS:本节主要是对C语言基本语法知识点的整理!
黑马程序员—(iOS开发)C语言语法解析---(三)相关推荐
- 黑马程序员——iOS开发须知
------- android培训.java培训.iOS培训..Net培训.期待与您交流! ---------- 以下是学习iOS开发之前应了解的相关信息: 1.iOS系统是运行在苹果移动设备上的操作 ...
- 黑马程序员-iOS基础-Objective-C基础(六)内存管理
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序员-iOS基础-Objective-C基础(六)内存管理 一.内存管理的必要性 移动设备 ...
- 直击招聘程序员面试笔试C语言深度解析,直击招聘 程序员面试笔试C++语言深度解析(直击招聘) pdf epub mobi txt 下载...
直击招聘 程序员面试笔试C++语言深度解析(直击招聘) pdf epub mobi txt 下载 图书介绍 ☆☆☆☆☆ 李春葆,李筱驰 著 下载链接在页面底部 发表于2021-05-18 类似图书 点 ...
- 黑马程序员_IOS开发简介和C语言基础
(一)IOS开发简介: (1)IOS开发: IOS开发就是开发运行在IOS环境系统的软件.apple公司2009年推出开发包和环境,国内2010年iphone4问世,从而相 继出现开发者---> ...
- 黑马程序员——ios笔试题——黑马 IOS 技术博客
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 面试能力要求:精通iphone的UI开发,能熟练操作复杂表视图,熟练使用图层技术, 可以自定义U ...
- 黑马程序员___Java基础[02-Java基础语法](一)
Java语言基础组成 一.关键字 1)定义:被Java语言赋予了特殊含义的单词 2)特点:关键字中所有字母均为小写 3)作用及分类: 下面是Java语言保留专用的50个关键字: 用于定义数据类型的关键 ...
- 黑马程序员——IOS基础---Mac OS X
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 如果你刚开始从事IOS开发,并且对苹果系统环境,不熟悉,从这看起吧. 一.系统简介 1.苹果公司 ...
- 黑马程序员-web开发
---------------------- android培训.java培训.期待与您交流! ---------------------- <!--html是超文本编辑语言 语法不严谨很宽松 ...
- 黑马程序员——ios面试学习一:Mac系统使用教程——黑马 ios 技术博客
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 学习Mac从这里开始!!! 谢谢大家热烈支持, 感动! 你们的支持是我更新的动力!大家留言说 ...
- 黑马程序员_java开发前缀
基础常识 软件开发 ---------------------- android培训. java培训.期待与您交流! ---------------------- 软件:按照特定的顺序组织的计 ...
最新文章
- Win10 新版又悲剧了!老外神评论
- C 语言链表其他实现
- 数据结构教程网盘链接_数据结构101:链接列表
- 一至七-----小东西
- H5前端性能测试总结
- Ceilometer - Install the API behind mod_wsgi
- [转载] python字符串情感分析_python进行情感分析
- atitit.软件开发--socket框架选型--netty vs mina j
- 路侧停车系统有利有弊
- SEM数据分析之做好关键词报告
- 开发者模式(一) 各种姿势进入
- 实现数智内控,数据分析创造价值——辽宁烟草智能风险体检系统
- 华为:证实已开发出自主操作系统
- 车用永磁电机的各种弱磁策略
- 树链剖分——树链剖分模板
- Redis在多线程高并发下出现数据错乱问题
- Class Proxy
- C专家编程 第10章 再论指针 10.7 使用指针创建和使用动态数组
- mcrypt拓展_PHP mcrypt加密扩展使用总结
- cocos2dx入门篇(一)
热门文章
- 基于Echarts+HTML5可视化数据大屏展示——智慧物流服务中心
- python 滑窗法检测房颤分类
- linux重启nginx命令
- 沧州渤海中等专业学校计算机有平面设计吗,河北省沧州中等专业学校
- 北大C++课后题系列:022:魔兽世界之二:装备
- jsp注册里密码强弱怎么弄_vue.js+ElementUI实现进度条提示密码强度效果
- Mastercam2017车铣复合多轴编程加工视频教程
- 惊艳于红警开源代码?赏心悦目的代码注释,我们也可以 !
- 孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1
- Web安全 目录遍历漏洞(带你畅读 服务器中的机密文件.)