欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C 数据类型和语句(各种细节和基础知识 + 持续更新-1.2 数据类型)

最编程 2024-04-15 14:35:05
...

1.2.1基本类型

char、short、int、long、float、double

常量

在程序运行过程中,其值不可以改变的量.

变量

其值可以改变的量被称为变量.

字符变量

用 char 定义,每个字符变量被分配一个字节的内存空间 字符值以 ASCII 码的形式存放在变量的内存单元中.

字符串常量

是由双引号括起来的字符序列,如“CHINA”、”哈哈哈” “C program”,“$12.5”等都是合法的字符串常量.

字符串常量与字符常量的不同

‘a’为字符常量,”a”为字符串常量 每个字符串的结尾,编译器会自动的添加一个结束标志位'\0', 即“a”包含两个字符‘a’和’\0’

格式化输出字符:

%d 十进制有符号整数 %u 十进制无符号整数

%x 以十六进制表示的整数 %o 以八进制表示的整数

%f float 型浮点数 %lf double 型浮点数

%e 指数形式的浮点数 %s 字符串

%c 单个字符 %p 指针的值

特殊应用:

%3d %03d %-3d %5.2f

%3d:要求宽度为 3 位,如果不足 3 位,前面空格补齐;如果足够 3 位,此语句无效

%03d:要求宽度为 3 位,如果不足 3 位,前面 0 补齐;如果足够 3 位,此语句无效

%-3d: 要求宽度为 3 位,如果不足 3 位,后面空格补齐;如果足够 3 位,此语句无效

%.2f:小数点后只保留 2 位

1.2.2构造类型

概念:由若干个相同或不同类型数据构成的集合,这种数据类型被称为构造类型

例:int a[10];

数组、结构体、共用体、枚举

1.2.3类型转换

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题.

转换的方法有两种:

自动转换: 遵循一定的规则,由编译系统自动完成.

强制类型转换: 把表达式的运算结果强制转换成所需的数据类型

自动转换的原则: 1、 占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低.

2、 转换方向:

网络异常,图片无法展示
|

五种转换的情况:

(1) 当表达式中出现了 char 、short int 、int 类型中的一种或者多种,没有其他类型了 参加运算的成员全部变成 int 类型的参加运算,结果也是 int 类型的

例 8: #include<stdio.h>  
int main(int argc, char *argv[]) { 
printf("%d\n",5/2); 
return 0; }

(2) 当表达式中出现了带小数点的实数,参加运算的成员全部变成 double 类型的参加运算,结果也是 double 型。

 例 9: #include<stdio.h>  
 int main(int argc, char *argv[]) { 
 printf("%lf\n",5.0/2); 
 return 0; }

(3) 当表达式中有有符号数 也有无符号数,参加运算的成员变成无符号数参加运算结果也是无符号数.(表达式中无实数) .

例 10: #include<stdio.h>  
int main(int argc, char *argv[]) { 
int a=-8; 
unsigned int b=7; 
if(a+b>0) { 
printf("a+b>0\n"); } 
else { 
printf("a+b<=0\n"); } 
printf("%x\n",(a+b)); 
printf("%d\n",(a+b)); 
    return 0; }

(4) 在赋值语句中等号右边的类型自动转换为等号左边的类型

例 11: #include <stdio.h>  
int main(int argc, char *argv[]) { 
int a; 
float b=5.8f;         //5.8 后面加 f 代表 5.8 是 float 类型,不加的话,认为是 double 类型 a=b; 
printf("a=%d\n",a)
return 0;
}

5) 注意自动类型转换都是在运算的过程中进行临时性的转换,并不会影响自动类型转换的变量的 值和其类型

例 12: #include<stdio.h>  
int main(int argc, char *argv[]) { 
int a; 
float b=5.8f;         //5.8 后面加 f 代表 5.8 是 float 类型,不加的话,认为是 double 类型 a=b; 
printf("a=%d\n",a); 
printf("b=%f\n",b);    //b 的类型依然是 float 类型的,它的值依然是 5.8 
return 0; }

强制转换:

通过类型转换运算来实现 (类型说明符) (表达式) 功能: 把表达式的运算结果强制转换成类型说明符所表示的类型. 例如: (float)a; // 把 a 的值转换为实型 (int)(x+y); // 把 x+y 的结果值转换为整型 注意: 类型说明符必须加括号.

例 13: #include<stdio.h>  
int main(int argc, char *argv[]) { 
float x=0; 
int i=0; 
x=3.6f; 
i = x; 
i = (int)x; 
printf("x=%f,i=%d\n",x,i); 
return 0; }

说明: 无论是强制转换或是自动转换,都只是为了本次运算的需要,而对变量的数据长度进行的临时性 转换,而不改变数据定义的类型以及它的值.