c程序第二篇2
2017-01-11 02:00
232 查看
>>关于常量的定义
有两种方法来定义常量:
#define NAME “puxinagxin”
const 数据类型 变量名
用const定义常量,一开始必须初始化
用#defien定义常量更有全局观,方便程序员的阅读与修改
>>变量在内存里面的字节顺序
计算机的内存是以字节为单位的,c的数据类型就不多说了
可以用sizeof运算符查看变量或者数据类型的大小
C语言默认是有符号的,如果想无符号表示一段数据,在数据前面加unsigned,java默认是无符号的,php默认也是有符号的。
说说c语言里面打印数据类型几个小的注意点:
第一点:打印double类型的数据,要用%lf来打
第二点:默认情况下,整数常量表示int类型,可以通过在数字后面加上U或者L,指定无符号或者L整型
第三点:默认情况下,浮点数常量表示的是double类型的数据。如果定义为float或者long
double,必须在数字后面加上f或者l
第四点:int
是4字节还是两个字节字节,取决于机器,就目前而言,int在linux和Windows上都是4个字节
>>自定义类型的声明
格式:typedef type identifier;
其中type是一个已有的数据类型,而identifier是赋给该数据类型的新名字,
typedef int units;
typedef float marks;
其实就是给已经存在的数据类型去一个别名,目的是提高程序的可读性,我他妈的想说,刚他妈的狗屁
>>存储类的声明
C语言提供了一些存储类标识符,可以用来显示的声明变量的使用范围和生存周期,使用范围和生存周期只是在多函数和多文件中才重要。
auto int count;//count这个变量是局部的,只在声明的函数中有效,默认的是auto
static int x;//静态的局部变量,声明周期长一点
extern long total;//全局变量,对文件中所有函数有效
register char ch;//局部变量,保存在寄存器中,特点是快,但是,一般不用
代码练习:计算N个数的平均数
代码练习:温度转换关系
把华氏温度转成摄氏温度
声明标识符变量的时候,第一个字符可以是下划线,静态变量和全局变量自动初始化为0
全局变量又被称为外部变量
三元字符为某些键盘上没有的字符提供输入方法,每个三元字符由三个字符组成,最常见的三元字符一般用于判断?:
其实,判断一个常量,你就看他表达的的意思确不确定,到不到位,如果不确定,不到位,肯定是错的。还有常量可以是任意放入基本类型,当然了,字符串也是可以的。
Volatile的作用:和const一样,volatile是一个类型修饰符,他是被设计用来修饰多线程访问和修改的变量。如果不加入volatile
基本上会导致这样一种结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
下面自动类型转换的问题:
double类型的数据,精确到小数点后15位
float类型的数据,精确到小数点后6位
在32位的操作系统下,int与long是等价的,我现在发现64位的机器也是一样的。
注意啊,char,short会自动转换成int,int会自动转成浮点型数据
Int->float->double
char->int short->int
上面都可以直接进行转换,在一些老版本的操作系统中int会向long转换。有符号向符号转换
我来说一个小的知识点:字符来参与算术运算的时候,会当成ascii码的值来进行处理
下面来看一下代码:
>>下面再来说一下赋值类型之间的转换
字符保存的时候,默认保存的是ascii码的值,按照整数保存,4个字节
赋值号会自动把右边的表达式自动转换成左边的变量数据类型,大的会转换成小的,小的会变成大的。
下面举个例子来说吧
Char ch=’A’//大家来测一下,sizeof(‘A’)=4个字节,也就是A字符是保存的4个字节的大小,但是,你看用了赋值号之后,他是不是就是1个字节的大小了,也就是说,大的是不是变成了小的。
下面我们再来看一个例子:
Int num=100.0,sizeof(100.0)=8个字节。但是int是4个字节,是不是还是大的变小了
Double db=100;100肯定是int ,也就是说100是4个字节的大小。而double是不是8个字节的大小,是不是小的变大了。
这个时候,大家会想到一个问题?什么问题
小的放到大的可以,能理解,但是大的放到小的里面,怎么理解?
打个比方int a=214,现在把这个数据放到short里面可不可以?Short最大能够存多少?32767最大。那么这个short
a=214;这个时候大的放到小的里面就没有问题。那又比如int a=425789,这个时候你要放到short里面,有没有问题,short
a=425789
代码来测一下:
上面这个代码很明显是成功,那么我们看看下面的代码
当超出了范围就会得不到你想要的值,上面的b和a就是不一样的。
这个时候我来说一下,如果要进行赋值操作类型的一个转换,我们就需要严格的控制在数据范围之内,否则你不会得到想要的结果。
>>强制数据类型转换的问题
一般的形式:(类型名)(表达式)
不能自动转换的时候,就要强制类型转换,那么什么情况下,需药强制转换呢,比如int->short
int->char double->int float->int double->float
Printf按照%d,%f来解析数据的时候呀,如果数据不是相对应的数据格式。就会报错。下面我们来看一下代码:
结果:
上面是不是就没有得到你想要的结果。
Ok,那么我们来看一下下面的代码:
下面的代码转换之后就可以打印了。
这里会出现一个问题,就是较高的数距类型向较低的数据类型转换的时候,可能发生精度损失的问题。
比如一个超过了int类型的double类型数据要向int类型转换的时候,就会造成精度丢失的问题
数据类型在转换的时候,往往会造成数据的丢失,比如float->int ,看一下下面的代码:
结果:
还有就是两个不同的数据类型相加,结果取决于大的数据类型,所以int/int只会得到一个整型int ,不管能不能够除尽,都不会得到你想要的结果。
结果:
>>下面我们来说一下数据溢出的问题
abb2
这里说一个头文件#include <linits.h>这个叫限制头文件
下面看一下代码:
结果:
上面保存在ch里面的int类型的数据就溢出了,所以数据转换的时候,一定要在数据的极限范围之内转换。否则就会出现你不想要的数据。但是,编译,链接通过,也就是语法没有错误。
下面我们看一下下面的代码,输出所有类型数据的极大值,极小值。
#include <stdio.h>
#include <limits.h>
#include <float.h>
int main(){
unsigned char ch=255;
printf("%d\n",ch);//255
printf("%d\n",UCHAR_MAX);//255
printf("%d,%d\n",INT_MAX,INT_MIN);//有符号整型最大值,最小值
printf("%d,%d\n",SCHAR_MIN,SCHAR_MAX);//有符号char的最小值,有符号char的最大值
printf("%d\n",CHAR_BIT);//char的位数
printf("%g,%g\n",FLT_MIN,FLT_MAX);//浮点型的最小值与最大值
printf("%g,%g\n",DBL_MAX,DBL_MIN);//double数据类型的最大值与最小值
printf("%u,%u\n",UCHAR_MAX,0);//无符号char类型的极大值,与极小值
printf("%d,%d\n",SHRT_MAX,SHRT_MIN);//有符号short的极大值与极小值
printf("%u,%u\n",USHRT_MAX,0);//无符号short的极大值与极小值
printf("%d,%d\n",FLT_DIG,DBL_DIG);//浮点数的精度
system("pause");
return 0;
}
注意:当我们需要判断实数的最小值,最大值,以及他们的精度的时候,我们就还需要加入头文件<float.h>,否则会提示没有声明标识符。
下面就是在linux上面跑的程序:
下面我们进入到第二章的编程练习:/home/pxx/c/c_programming_design_2_programming_paractice
练习:
编写一个程序,使用scanf语句读取两个浮点数,把他们的和赋给一个整型变量,然后输出三个变量的值
下面是第三章的内容,全部放在/home/pxx/c/3_programmming_practice
代码:计算销售人员的工资水平
BASE_SALARY 15000.00float BONUS_RATE 200.00float COMMISSION 0.02float
gross_salary=BASE_SALARY+bonus(total)+commision(total)
上面显示的就是输出结果
看代码:二次方程的求解
ax^2+bx+c=0,这个方程有两个根
一个是x1=-b+根号下b^2-4ac/2a,另外一个是-b-根号下b^2-4ac/2a
代码如下:
结果:
有两种方法来定义常量:
#define NAME “puxinagxin”
const 数据类型 变量名
用const定义常量,一开始必须初始化
用#defien定义常量更有全局观,方便程序员的阅读与修改
>>变量在内存里面的字节顺序
计算机的内存是以字节为单位的,c的数据类型就不多说了
可以用sizeof运算符查看变量或者数据类型的大小
C语言默认是有符号的,如果想无符号表示一段数据,在数据前面加unsigned,java默认是无符号的,php默认也是有符号的。
说说c语言里面打印数据类型几个小的注意点:
第一点:打印double类型的数据,要用%lf来打
第二点:默认情况下,整数常量表示int类型,可以通过在数字后面加上U或者L,指定无符号或者L整型
第三点:默认情况下,浮点数常量表示的是double类型的数据。如果定义为float或者long
double,必须在数字后面加上f或者l
第四点:int
是4字节还是两个字节字节,取决于机器,就目前而言,int在linux和Windows上都是4个字节
>>自定义类型的声明
格式:typedef type identifier;
其中type是一个已有的数据类型,而identifier是赋给该数据类型的新名字,
typedef int units;
typedef float marks;
其实就是给已经存在的数据类型去一个别名,目的是提高程序的可读性,我他妈的想说,刚他妈的狗屁
>>存储类的声明
C语言提供了一些存储类标识符,可以用来显示的声明变量的使用范围和生存周期,使用范围和生存周期只是在多函数和多文件中才重要。
auto int count;//count这个变量是局部的,只在声明的函数中有效,默认的是auto
static int x;//静态的局部变量,声明周期长一点
extern long total;//全局变量,对文件中所有函数有效
register char ch;//局部变量,保存在寄存器中,特点是快,但是,一般不用
代码练习:计算N个数的平均数
代码练习:温度转换关系
把华氏温度转成摄氏温度
声明标识符变量的时候,第一个字符可以是下划线,静态变量和全局变量自动初始化为0
全局变量又被称为外部变量
三元字符为某些键盘上没有的字符提供输入方法,每个三元字符由三个字符组成,最常见的三元字符一般用于判断?:
其实,判断一个常量,你就看他表达的的意思确不确定,到不到位,如果不确定,不到位,肯定是错的。还有常量可以是任意放入基本类型,当然了,字符串也是可以的。
Volatile的作用:和const一样,volatile是一个类型修饰符,他是被设计用来修饰多线程访问和修改的变量。如果不加入volatile
基本上会导致这样一种结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
下面自动类型转换的问题:
double类型的数据,精确到小数点后15位
float类型的数据,精确到小数点后6位
在32位的操作系统下,int与long是等价的,我现在发现64位的机器也是一样的。
注意啊,char,short会自动转换成int,int会自动转成浮点型数据
Int->float->double
char->int short->int
上面都可以直接进行转换,在一些老版本的操作系统中int会向long转换。有符号向符号转换
我来说一个小的知识点:字符来参与算术运算的时候,会当成ascii码的值来进行处理
下面来看一下代码:
>>下面再来说一下赋值类型之间的转换
字符保存的时候,默认保存的是ascii码的值,按照整数保存,4个字节
赋值号会自动把右边的表达式自动转换成左边的变量数据类型,大的会转换成小的,小的会变成大的。
下面举个例子来说吧
Char ch=’A’//大家来测一下,sizeof(‘A’)=4个字节,也就是A字符是保存的4个字节的大小,但是,你看用了赋值号之后,他是不是就是1个字节的大小了,也就是说,大的是不是变成了小的。
下面我们再来看一个例子:
Int num=100.0,sizeof(100.0)=8个字节。但是int是4个字节,是不是还是大的变小了
Double db=100;100肯定是int ,也就是说100是4个字节的大小。而double是不是8个字节的大小,是不是小的变大了。
这个时候,大家会想到一个问题?什么问题
小的放到大的可以,能理解,但是大的放到小的里面,怎么理解?
打个比方int a=214,现在把这个数据放到short里面可不可以?Short最大能够存多少?32767最大。那么这个short
a=214;这个时候大的放到小的里面就没有问题。那又比如int a=425789,这个时候你要放到short里面,有没有问题,short
a=425789
代码来测一下:
上面这个代码很明显是成功,那么我们看看下面的代码
当超出了范围就会得不到你想要的值,上面的b和a就是不一样的。
这个时候我来说一下,如果要进行赋值操作类型的一个转换,我们就需要严格的控制在数据范围之内,否则你不会得到想要的结果。
>>强制数据类型转换的问题
一般的形式:(类型名)(表达式)
不能自动转换的时候,就要强制类型转换,那么什么情况下,需药强制转换呢,比如int->short
int->char double->int float->int double->float
Printf按照%d,%f来解析数据的时候呀,如果数据不是相对应的数据格式。就会报错。下面我们来看一下代码:
结果:
上面是不是就没有得到你想要的结果。
Ok,那么我们来看一下下面的代码:
下面的代码转换之后就可以打印了。
这里会出现一个问题,就是较高的数距类型向较低的数据类型转换的时候,可能发生精度损失的问题。
比如一个超过了int类型的double类型数据要向int类型转换的时候,就会造成精度丢失的问题
数据类型在转换的时候,往往会造成数据的丢失,比如float->int ,看一下下面的代码:
结果:
还有就是两个不同的数据类型相加,结果取决于大的数据类型,所以int/int只会得到一个整型int ,不管能不能够除尽,都不会得到你想要的结果。
结果:
>>下面我们来说一下数据溢出的问题
abb2
这里说一个头文件#include <linits.h>这个叫限制头文件
下面看一下代码:
结果:
上面保存在ch里面的int类型的数据就溢出了,所以数据转换的时候,一定要在数据的极限范围之内转换。否则就会出现你不想要的数据。但是,编译,链接通过,也就是语法没有错误。
下面我们看一下下面的代码,输出所有类型数据的极大值,极小值。
#include <stdio.h>
#include <limits.h>
#include <float.h>
int main(){
unsigned char ch=255;
printf("%d\n",ch);//255
printf("%d\n",UCHAR_MAX);//255
printf("%d,%d\n",INT_MAX,INT_MIN);//有符号整型最大值,最小值
printf("%d,%d\n",SCHAR_MIN,SCHAR_MAX);//有符号char的最小值,有符号char的最大值
printf("%d\n",CHAR_BIT);//char的位数
printf("%g,%g\n",FLT_MIN,FLT_MAX);//浮点型的最小值与最大值
printf("%g,%g\n",DBL_MAX,DBL_MIN);//double数据类型的最大值与最小值
printf("%u,%u\n",UCHAR_MAX,0);//无符号char类型的极大值,与极小值
printf("%d,%d\n",SHRT_MAX,SHRT_MIN);//有符号short的极大值与极小值
printf("%u,%u\n",USHRT_MAX,0);//无符号short的极大值与极小值
printf("%d,%d\n",FLT_DIG,DBL_DIG);//浮点数的精度
system("pause");
return 0;
}
注意:当我们需要判断实数的最小值,最大值,以及他们的精度的时候,我们就还需要加入头文件<float.h>,否则会提示没有声明标识符。
下面就是在linux上面跑的程序:
下面我们进入到第二章的编程练习:/home/pxx/c/c_programming_design_2_programming_paractice
练习:
编写一个程序,使用scanf语句读取两个浮点数,把他们的和赋给一个整型变量,然后输出三个变量的值
下面是第三章的内容,全部放在/home/pxx/c/3_programmming_practice
代码:计算销售人员的工资水平
BASE_SALARY 15000.00float BONUS_RATE 200.00float COMMISSION 0.02float
gross_salary=BASE_SALARY+bonus(total)+commision(total)
上面显示的就是输出结果
看代码:二次方程的求解
ax^2+bx+c=0,这个方程有两个根
一个是x1=-b+根号下b^2-4ac/2a,另外一个是-b-根号下b^2-4ac/2a
代码如下:
结果:
相关文章推荐
- 浅谈动感歌词-歌词生成篇
- jquery 调用 click 事件 的 三种 方式
- javaScript之DOM操作(一)
- 人脸识别常用库和API
- 关于Anaconda下载慢的解决方法
- 数学+精度 hpu 1207: 杨八方的问题
- c程序第一篇1
- codeforces 509E Pretty Song [递推]【杂类】
- Volley请求中,使用cookit进行服务器与客户端的会话保持
- C编程练习题(待解决)
- mysql补充(3)优化sql语句查询常用的30种方法
- 关于机器学习中的广义线性模型(GLM)
- Shiro-Session
- dfs——回溯法求最短路径
- 那些经常使用去容易忽视的小知识点
- 2.输入系统驱动(4)-内核输入子系统原理分析
- 【LeetCode】 377. Combination Sum IV
- (写公式,解方程)LightOJ - 1062
- 2.输入系统驱动(3)-input内核级驱动设计
- iCCP: known incorrect sRGB profile