黑马程序员——ios开发基础之C语言数据类型、运算符与输入输出
2015-09-10 21:07
507 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
单位: 1 B = 8 bit
1 KB = 1024 B
1 MB =1024 KB
1 GB =1024 MB
1 TB = 1024 GB
1)基本数据类型:整型、字符型、实型。
A 整型用于准确的表示整数,根据占用内存空间及表示范围不同可以分为以下三种:
short int< int <long int
短整型 < 整型 <长整型
2B < 4B < 8B(64位)
B 字符型用来描述单个字符
char 1B
C 实型(浮点型)用于表示实数(小数)根据范围和精度不同分为以下两种:
float < double
单精度浮点数<双精度浮点数
4B < 8B
注意:float只能保证7位数字是有效的
2)构造类型
数组、结构体(struct)、共用型(union)、枚举型(enum)
3)指针类型
*类型
4)空类型
void型
5)定义类型
typedef 类型
常量也分为整型常量、实型常量和字符型常量,并且还有字符串常量,注意字符串常量和字符常量是不一样的。
1)整型常量
二进制整数:逢二进一,以0b开头
八进制整数:逢八进一,以0开头,如0123,也就是十进制的83
十进制整数:逢十进一,平时生活中的数
十六进制整数:逢十六进一,以0x开头,如0x123,也就是十进制291
2)实型常量
单精度小数:以f结尾
双精度小数:十进制小数形式
3)字符型常量
字符常量都是用''(单引号)括起来的,其表现形式有两种:
A 一般形式。一个字符用''括起来,只能是一个字符
B 特殊形式。转义字符,都是以\开头,不会在屏幕上直接显示出来而是会根据其特定的功能来显示。如\n 换行
注意:字符常量在内存中存储时,保存的是其对应的ASCII值。如'A'——>65 'a'——>97
4)字符串常量
字符串常量与字符常量不同的地方是,字符串常量用" "括起来,所以'a'与"a"不是一回事,而且系统会在字符串常量的 末尾自动加上一个字符串结束标志'\0'。
变量由两部分构成:变量类型与变量名。定义(声明)变量的格式:
格式一: 变量类型 变量名; int a;
格式二: 变量类型 变量名称,变量名称; char a , b, c;
变量名的命名规范:1、严格遵守标识符命名原则 2、简洁、望文知意 3、驼峰命名法
变量的使用流程:定义——初始化——使用; 变量定义完成后有值:1)随机的 2)上一个程序在内总中驻留的 3)系统的
变量初始化的几种方式:
1、先定义后初始化
int a;
a=0;
2、定义的同时初始化
int a = 0;
int a = 0,b = 1;(全部初始化)
int a,b = 0;(部分初始化)
3、使用其他变量初始化
int a = 0;
int b = a;
4、连续初始化
int a,b,c;
a=b=c=0;
(注意:int a=b=c=0;是错误的,因为bc变量还没有被声明)
变量按作用域分为:全局变量和局部变量
1、全局变量 在函数外部定义的变量 作用域:从定义的地方开始,到当前程序结束
2、局部变量 在函数内部或者代码块中定义的变量 作用域:从定义的位置向下,遇到所在代码块“}”结束
注意:1)块的内部可以访问全局变量
2)块的外部不可以访问局部变量
3)块的内部可以定义和全局变量同名的局部变量,这时全局变量被屏蔽。
用运算符按照一定的规则连接的式子称为表达式
单目运算( ++、--、 sizeof 、!)
双目运算符(+、-、*、/、%)
三目运算符(? :)
2) 功能:
算术运算符、关系和逻辑运算符、位运算符
都为双目运算符
乘除的优先级要高于加减的
优先级相同左结合:从左到右结合计算
例如:int a=3,b=2;
a+b*3/1-5
--> a+6-5
--> 4
% 求余数
m%n求余数
m = 0 结果是 0
n = 0 结果无意义, n不能为0
m > n 结果正常取余数
m < n 结果是 m
注意:等号的左边一定要是变量
右结合性:从右至左。 例如int a,b,c,d;
a = b = c = d = 0;
复合赋值运算符:总共有5个
+= a+=2;--> a = a+2;
-= a-=2;--> a = a-2;
*= a*=2;--> a = a*2;
/= a/=2;--> a = a/2;
%= a%=2;--> a = a%2;
格式: 变量名++ ++ 变量名
变量名-- -- 变量名
让变量的值自动的+1或者-1
结合性:右结合
(a++)+(++b)
-a++ --> -(a++)
技巧:
如果a在++符号的前面,先取出a的值作为表达式的值,然后a自身值+1
口诀:先用后变
如果a在++符号的后面,先让a自身值+1,然后取出a的值作为表达式的值
口诀:先变后用
经典问题分析:
最后输出的结果:18,18,8,8
分析:a在++的前面,所以均为先用值,在+1,经历3次++,i,j肯定都增加3变为8。p(q)=5+6+7=18
2)用法
常量上 : sizeof(10) sizeof(2.3) sizeof('a')
---> sizeof 10 sizeof 2.3
sizeof("a") //2
变量上: int a; sizeof(a);
数据类型上: sizeof(int) sizeof(float) sizeof(char)
3)注意事项
sizeof不是第一个函数,是一个运算符
sizeof('a') 4个字节,字符型的常量在C标准的编译中用int型存储的
所有的数值都有真假性 非0 就真(1) 0就是假(0)
1)关系运算符,总计有6个,皆为双目运算符
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
2)结合性:左结合
例如:a = 1>2<3>0;
((1>2)<3)>0
1>0
判断多个条件是否同时成立(同时为1) 双目运算符
1)&& 逻辑与&&符号两边的表达式都必须为真 口诀:同真为真 一假则假
2)|| 逻辑或 ||符号两边的表达式有一个为真,结果就为真 口诀:同假为假 一真则真
3)! 逻辑取反 (单目运算,右结合) 口诀:真变假 假变真
4)注意事项 短路的问题:与短路 && 只要第一个条件表达式为假那么后面的条件表达就不参与条件运算了
或短路 || 只要第一个条件表达式为真那么后面的条件表达就不参与条件运算了
1)进行了一个简单的判断 三目运算符
a>b?a:b -->取出a、 b中的最大值
先判断a>b是否为真:
如果为真: a的值作为条件表达式的值返回
如果为假: b的值作为条件表达式的值返回
2)结合性:左结合
(num1>num2?num1:num2)>num3 ? (num1>num2?num1:num2) :num3
经典例题:用条件表达式求三个数的最大值
putchar 字符输出函数,作用是向终端输出一个字符。
注意:getchar与putchar只能接收和输出单个字符。
输出的原理 : printf把要输出的内容--->输出缓冲区-->输出到控制台
格式: printf("格式说明",变量列表);
printf的格式控制的完整格式:
% - 0 m.n l或h 格式字符
下面对组成格式说明的各项加以说明:
①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出(右侧补空格),如省略表示右对齐输出(左侧补空格)。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n: m指域宽,即对应的输出项在输出设备上所占的字符数。 N指精度。用于说明输出的实型
数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。
⑤l或h:l对整型指long型,对实型指double型。 h用于将整型的格式字符修正为short型。
格式字符
格式字符用以指定输出项的数据类型和输出格式。
①d格式:用来输出十进制整数。有以下几种用法:
%ld:输出长整型数据。
②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽
度用“ %mo”格式输出。
③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段
宽度用"%mx"格式输出。
④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽
度用“ %mu”格式输出。
⑤c格式:输出一个字符。
⑥s格式:用来输出一个串。
接收用户从键盘上输入的内容
格式: scanf("格式控制",地址列表); &-取地址符号
1)接收一个数字
A 用户从键盘输入的内容放到了输入缓冲区
B scanf从缓冲区中逐个取对应的内容,如果取得内容和设定的类型不一样,输入不进去,不做改变
注意:如果输入缓冲区内容不为空,scanf会一直从缓冲区获取,而不要求再次输入
第一讲 数据类型
一、概念
数据类型是指数据以何种方式储存在内存中,不同的数据类型存储方式不一样。单位: 1 B = 8 bit
1 KB = 1024 B
1 MB =1024 KB
1 GB =1024 MB
1 TB = 1024 GB
二、分类
C语言有5大数据类型:基本数据类型、构造类型、指针类型、空类型、定义类型。1)基本数据类型:整型、字符型、实型。
A 整型用于准确的表示整数,根据占用内存空间及表示范围不同可以分为以下三种:
short int< int <long int
短整型 < 整型 <长整型
2B < 4B < 8B(64位)
B 字符型用来描述单个字符
char 1B
C 实型(浮点型)用于表示实数(小数)根据范围和精度不同分为以下两种:
float < double
单精度浮点数<双精度浮点数
4B < 8B
注意:float只能保证7位数字是有效的
2)构造类型
数组、结构体(struct)、共用型(union)、枚举型(enum)
3)指针类型
*类型
4)空类型
void型
5)定义类型
typedef 类型
三、常量
常量表示一些固定的数据,也就是在程序运行过程中不能被改变的数据。常量也分为整型常量、实型常量和字符型常量,并且还有字符串常量,注意字符串常量和字符常量是不一样的。
1)整型常量
二进制整数:逢二进一,以0b开头
八进制整数:逢八进一,以0开头,如0123,也就是十进制的83
十进制整数:逢十进一,平时生活中的数
十六进制整数:逢十六进一,以0x开头,如0x123,也就是十进制291
2)实型常量
单精度小数:以f结尾
双精度小数:十进制小数形式
3)字符型常量
字符常量都是用''(单引号)括起来的,其表现形式有两种:
A 一般形式。一个字符用''括起来,只能是一个字符
B 特殊形式。转义字符,都是以\开头,不会在屏幕上直接显示出来而是会根据其特定的功能来显示。如\n 换行
注意:字符常量在内存中存储时,保存的是其对应的ASCII值。如'A'——>65 'a'——>97
4)字符串常量
字符串常量与字符常量不同的地方是,字符串常量用" "括起来,所以'a'与"a"不是一回事,而且系统会在字符串常量的 末尾自动加上一个字符串结束标志'\0'。
四、变量
变量代表内存中的某个空间,它是用来存放数据的,程序运行中它的值可以改变,是数据基本单元。变量由两部分构成:变量类型与变量名。定义(声明)变量的格式:
格式一: 变量类型 变量名; int a;
格式二: 变量类型 变量名称,变量名称; char a , b, c;
变量名的命名规范:1、严格遵守标识符命名原则 2、简洁、望文知意 3、驼峰命名法
变量的使用流程:定义——初始化——使用; 变量定义完成后有值:1)随机的 2)上一个程序在内总中驻留的 3)系统的
变量初始化的几种方式:
1、先定义后初始化
int a;
a=0;
2、定义的同时初始化
int a = 0;
int a = 0,b = 1;(全部初始化)
int a,b = 0;(部分初始化)
3、使用其他变量初始化
int a = 0;
int b = a;
4、连续初始化
int a,b,c;
a=b=c=0;
(注意:int a=b=c=0;是错误的,因为bc变量还没有被声明)
变量按作用域分为:全局变量和局部变量
1、全局变量 在函数外部定义的变量 作用域:从定义的地方开始,到当前程序结束
2、局部变量 在函数内部或者代码块中定义的变量 作用域:从定义的位置向下,遇到所在代码块“}”结束
注意:1)块的内部可以访问全局变量
2)块的外部不可以访问局部变量
3)块的内部可以定义和全局变量同名的局部变量,这时全局变量被屏蔽。
第二讲 运算符
一、运算符
连接两个操作数(常量、变量)的符号用运算符按照一定的规则连接的式子称为表达式
1、运算符的分类:
1)操作数的个数:单目运算( ++、--、 sizeof 、!)
双目运算符(+、-、*、/、%)
三目运算符(? :)
2) 功能:
算术运算符、关系和逻辑运算符、位运算符
2、算术运算符
进行算术的运算,总计5个(+ - * / %)都为双目运算符
乘除的优先级要高于加减的
优先级相同左结合:从左到右结合计算
例如:int a=3,b=2;
a+b*3/1-5
--> a+6-5
--> 4
% 求余数
m%n求余数
m = 0 结果是 0
n = 0 结果无意义, n不能为0
m > n 结果正常取余数
m < n 结果是 m
3、赋值运算符(=)
作用:把等号的右侧的值(常量、表达式)赋值给等号左边的变量注意:等号的左边一定要是变量
右结合性:从右至左。 例如int a,b,c,d;
a = b = c = d = 0;
复合赋值运算符:总共有5个
+= a+=2;--> a = a+2;
-= a-=2;--> a = a-2;
*= a*=2;--> a = a*2;
/= a/=2;--> a = a/2;
%= a%=2;--> a = a%2;
4、自增、自减运算符
++ -- 相当于让运算符连接的操作数自身的值+1或者-1格式: 变量名++ ++ 变量名
变量名-- -- 变量名
让变量的值自动的+1或者-1
结合性:右结合
(a++)+(++b)
-a++ --> -(a++)
技巧:
如果a在++符号的前面,先取出a的值作为表达式的值,然后a自身值+1
口诀:先用后变
如果a在++符号的后面,先让a自身值+1,然后取出a的值作为表达式的值
口诀:先变后用
经典问题分析:
int main(){ int i = 5,j = 5,p,q; p = i+++i+++i++; q = j+++j+++j++; printf("%d,%d,%d,%d",p,q,i,j); return 0; }
最后输出的结果:18,18,8,8
分析:a在++的前面,所以均为先用值,在+1,经历3次++,i,j肯定都增加3变为8。p(q)=5+6+7=18
5、 sizeof运算符
1)计算常量、变量、数据类型在我们内存中占用的字节数2)用法
常量上 : sizeof(10) sizeof(2.3) sizeof('a')
---> sizeof 10 sizeof 2.3
sizeof("a") //2
变量上: int a; sizeof(a);
数据类型上: sizeof(int) sizeof(float) sizeof(char)
3)注意事项
sizeof不是第一个函数,是一个运算符
sizeof('a') 4个字节,字符型的常量在C标准的编译中用int型存储的
6、关系运算符
所有的数值都有真假性 非0 就真(1) 0就是假(0)1)关系运算符,总计有6个,皆为双目运算符
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
2)结合性:左结合
例如:a = 1>2<3>0;
((1>2)<3)>0
1>0
7、逻辑运算符
判断多个条件是否同时成立(同时为1) 双目运算符1)&& 逻辑与&&符号两边的表达式都必须为真 口诀:同真为真 一假则假
2)|| 逻辑或 ||符号两边的表达式有一个为真,结果就为真 口诀:同假为假 一真则真
3)! 逻辑取反 (单目运算,右结合) 口诀:真变假 假变真
4)注意事项 短路的问题:与短路 && 只要第一个条件表达式为假那么后面的条件表达就不参与条件运算了
或短路 || 只要第一个条件表达式为真那么后面的条件表达就不参与条件运算了
//经典题目:判断某一年是否为闰年 #include<stdio.h> int main(){ int year; printf("请输入要判断的年份:\n"); scanf("%d",&year); if(!(year%4)&&year%100||!(year%400)){ printf("%d年是闰年\n",year); }else printf("%d年不是闰年\n",year); return 0; }
8、条件运算符(? :)
1)进行了一个简单的判断 三目运算符a>b?a:b -->取出a、 b中的最大值
先判断a>b是否为真:
如果为真: a的值作为条件表达式的值返回
如果为假: b的值作为条件表达式的值返回
2)结合性:左结合
(num1>num2?num1:num2)>num3 ? (num1>num2?num1:num2) :num3
经典例题:用条件表达式求三个数的最大值
//用条件表达式求三个数的最大值 #include<stdio.h> int main(){ int a,b,c; printf("请输入三个数:\n"); scanf("%d%d%d",&a,&b,&c); int max; max = a>b?a:b; max = max>c?max:c; printf("输出最大值:max = %d\n",max); return 0; }
第三讲 输入与输出
一、getchar函数与putchar函数
getchar 字符输入函数,作用是从键盘接收一个字符。putchar 字符输出函数,作用是向终端输出一个字符。
注意:getchar与putchar只能接收和输出单个字符。
//从键盘输入单个字符并输出 #include<stdio.h> int main(){ char c; c = getchar(); putchar(c); putchar('\n');//换行 return 0; }
二、printf函数与scanf函数
1、printf函数
printf函数 标准的输出函数输出的原理 : printf把要输出的内容--->输出缓冲区-->输出到控制台
格式: printf("格式说明",变量列表);
printf的格式控制的完整格式:
% - 0 m.n l或h 格式字符
下面对组成格式说明的各项加以说明:
①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出(右侧补空格),如省略表示右对齐输出(左侧补空格)。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n: m指域宽,即对应的输出项在输出设备上所占的字符数。 N指精度。用于说明输出的实型
数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。
⑤l或h:l对整型指long型,对实型指double型。 h用于将整型的格式字符修正为short型。
格式字符
格式字符用以指定输出项的数据类型和输出格式。
①d格式:用来输出十进制整数。有以下几种用法:
%ld:输出长整型数据。
②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽
度用“ %mo”格式输出。
③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段
宽度用"%mx"格式输出。
④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽
度用“ %mu”格式输出。
⑤c格式:输出一个字符。
⑥s格式:用来输出一个串。
2、 scanf函数(阻塞式函数-等待用户的输入,如果不输入会一直等待)
C语言中标准的输入函数接收用户从键盘上输入的内容
格式: scanf("格式控制",地址列表); &-取地址符号
1)接收一个数字
int a; scanf("%d",&a);2)接收多个数字
int a,b,c; scanf("%d%d%d",&a,&b,&c);3)接收的是数字和字符混合
int a,b; char c; scanf("%d,%d,%c",&a,&b,&c);4) scanf的运行原理
A 用户从键盘输入的内容放到了输入缓冲区
B scanf从缓冲区中逐个取对应的内容,如果取得内容和设定的类型不一样,输入不进去,不做改变
注意:如果输入缓冲区内容不为空,scanf会一直从缓冲区获取,而不要求再次输入
相关文章推荐
- C++ Primer Plus 第6版 中文版 第6章编程练习
- C++Primer第五版 1.4.4节练习
- C++实现顺序表
- Effective C++ 条款37 绝不重定义继承而来的缺省参数值
- 浅谈C++多态性
- C++Primer第五版 1.4.3节练习
- C++实现单向循环链表
- C++_递归排列产生器
- 【C++学习笔记】-static的用法
- C语言学习之基本类型在内存中的大小
- C++数据类型总结
- 项目1-c/c++语言中函数参数传递的三种方式
- C++ string使用详解
- 【leetcode】Binary Tree Right Side View --C++
- Mysql: Connect/C++ 使用过程中发现返回 std::string 造成的内存泄露
- 【面试】完美世界-C++研发工程师
- C++_递归实现汉诺塔
- C++之单例模式
- Effective C++ 条款36 绝不重新定义继承而来的non-virtual函数
- C++继承与构造函数一点说明