您的位置:首页 > 其它

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

代码如下:



结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: