你的体重和相同重量的白金(铂金)价格

  1. /*platinum.c --- 你的体重和相同重量的白金(铂金)价格*/
  2. #include "stdio.h"
  3. int main(void){
  4. float weight; /*你的体重*/
  5. float value; /*相同重量的白金价值*/
  6. printf("输入你的体重:");
  7. /*获取用户输入*/
  8. scanf("%f",&weight);
  9. /*假设白金价格每Pt $1720*/
  10. value = 1700 * weight;
  11. printf("相同重量的白金价值:%f",value);
  12. return 0;
  13. }

数据: 数据类型和关键字

最初K&R给出的关键字 C90标准添加的关键字 C99标准添加的关键字
int signed _Bool
long void _Complex
short _Imaginary
unsigned
char
float
double

在C语言中,用int关键字来表示基本数据类型,后3个关键字(long,short,unsigned)和C90新增的signed用于提供基本整数类型的变式,例如unsigned short intlong long intchar关键字用于指定字母和其他字符(#,$,%*)。另外,char类型可以表示较小的整数。float,doublelong double表示带小数点的数。_Bool类型表示布尔值(truefalse),_Complex_Imaginary分别表示复数和虚数。

通过这些关键字创建的类型,按计算机的存储方式分为俩大基本数据类型: 整数类型浮点数类型

转义字符

转义序列 含义
\a 报警(ANSI C)
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\\ 反斜杠(\)
\‘ 单引号
\“ 双引号
\? 问号
\0oo 八进制值(oo必须是有效的八进制数,即每个o可以表示0~7中的一个数)
\xhh 十六进制值(hh必须是有效的十六进制数,即每个h可表示0~f中的一个数)

可移植类型stdint.hinttypes.h

  1. /*altnames.c -- 可移植整数类型名*/
  2. #include "stdio.h"
  3. #include "stdint.h" //支持可移植性
  4. int main(void){
  5. int32_t me32;
  6. me32 = 45933945;
  7. printf("m32=%d",me32);
  8. }

复数和虚数类型

许多科学和工程都要用到复数和虚数。C99标准支持复数和虚数类型,但是有所保留。
C语言有3种复数类型: float_Complexdouble_Complexlong double_Complex。还有3种虚数类型是float_Imaginarydouble_Imaginarylong double_Imafinary
如果包含complex.h头文件,便可用complex替代_Complex;用imaginary可以替代_Imaginary
注意: C语言是没有字符串类型但是也可能很好的处理字符串类型。

总结:基本数据类型

关键字:

  • 基本数据类型由11个关键字组成:int,long,short,unsigned,char,float,double,signed,_Bool,_Complex_Imaginary
  • 有符号的整形
    • int —系统给定的基本数据类型。C语言规定int类型不小于16位。
    • shortshort int —最大的short类型整数小于或等于最大的int类型整数。C语言规定short类型至少占16位。
    • longlong int — 该类型可表示的整数大于或等于最大的int类型整数。C语言规定long类型至少占32位。
    • long longlong long int —该类型可表示的最大或等于最大的long类型整数。long long类型至少占64位。
      一般而言long类型占用的内存比short类型大,int类型的宽度要么和long类型相同,要么和short类型相同。

无符号整型

无符号整型只能用于表示0和正整数,因此无符号整型可表示的正整数比有符号的正整型的大,在整型类型前加上关键字unsigned表明该类型是无符号整型:unsigned int,unsigned short,unsigned long。单独的unsigned相当于unsigned int

字符类型

可打印出来的符号(如A,&和+)都是字符。根据定义,char类型表示一个字符要占据一个字节内存。出于历史原因1字节等于8位,但是表示基本字符集,也可以是16位或者更大。

  • char —字符类型关键字。有些编译器使用有符号的char,而有些使用无符号的char。在有需要时,可以在char前面加上关键字unsignedsigned来指明使用哪一种类型

布尔类型

布尔值表示true和false, c语言用1表示true;用0表示false

  • _Bool — 布尔类型的关键字。布尔类型是无符号int类型,所占用的空间只要能存储0或1即可

实浮点类型

  • float — 系统的基本浮点类型,可精确表示至少6位有效数字。
  • double — 存储浮点数的范围(可能)更大,能表示比float类型更多的有效数字(至少10位,通常会更多)和更大的指数
  • long double — 存储浮点类数的范围(可能)比double更大,能表示比double更多的有效数字和更大的指数

复数和虚数浮点数

虚数类型是可选的类型,复数的实部和虚数类型都基于实浮点类型来构成

  • float_Complex
  • double_Complex
  • long double_Complex
  • float_Imaginary
  • double_Imaginary
  • long double_Imaginary

类型的大小

  1. /*typesize.c -- 打印类型大小*/
  2. #include "stdio.h"
  3. int main(void){
  4. /*C99为类型大小提供%zd转换说明*/
  5. printf("int类型的大小:%zd\r\n",sizeof(int));
  6. printf("char类型的大小:%zd\r\n",sizeof(char));
  7. printf("long类型的大小:%zd\r\n",sizeof(long));
  8. printf("long long类型的大小:%zd\r\n",sizeof(long long));
  9. printf("long double类型的大小:%zd\r\n",sizeof(long double));
  10. }

结果为

  1. int类型的大小:4
  2. char类型的大小:1
  3. long类型的大小:4
  4. long long类型的大小:8
  5. long double类型的大小:16

使用数据类型

  1. int apples = 3; /*正确*/
  2. int oranges = 3.0; /*不好的形式*/

参数和陷阱

  1. /*badcount.c -- 参数错误的情况*/
  2. #include "stdio.h"
  3. int mian(void){
  4. int n = 4;
  5. int m = 5;
  6. float f = 7.0f;
  7. float g = 8.0f;
  8. printf("%d\n",n,m); /*参数太多*/
  9. printf("%d,%d,%d\n",m,n); /*参数太少*/
  10. printf("%d,%d\n",f,g);/*参数类型不匹配*/
  11. return 0;
  12. }

转义序列示例

  1. /*escape.c -- 使用转义序列*/
  2. #include "stdio.h"
  3. int main(void){
  4. float salary;
  5. printf("\a 'a'的转义字符");
  6. printf("b的转义字符\b\b\b\b\b\b");
  7. scanf("%f",&salary);
  8. printf("\n\t第一个f:%.2f;第二个+12的f:%.2f",salary,salary+12);
  9. return 0;
  10. }