目录
数据类型是数据在程序中的一种组织形式,任何一个程序都离不开数据,可以认为程序的本质就是在操作数据。
1.常量与变量
在C语言中数据的表现形式分为两种:常量和变量。然而无论常量还是变量都具有数据类型,因此可以对常量和变量再次进行划分:
常量:整形常量、浮点型常量、字符型常量
变量:整型变量、浮点型变量、字符型变量
1.1常量
常量指的是在程序运行过程中,值不能被改变的量,在程序中常量只能被引用,不能被改变。常量有以下几种类型:
第一种,整型常量,例如100、314、0、-200等
//例1 输出整型常量
#include<stdio.h>
int main() {
printf("%d\n", -99);
printf("%d\n", 1024);
return 0;
}
运行结果:
分析:%d表示按10进制整数格式输出数据;在执行printf函数时,整形常量将取代双引号中的%d;“\n”是换行符,输出-99后下一个内容1024将出现在第二行。
第二种,浮点型常量浮点型常量就是数学中的小数,由数字和小数点组成,如3.14,1.0等。
//例1 输出浮点型常量
#include<stdio.h>
int main() {
printf("%f\n", 3.14);
printf("%f\n", 1.0);
return 0;
}
运行结果:
分析:%f表示按十进制小数格式输出数据;同理,执行printf函数时,浮点型常量将替换双引号中的%f;默认情况下,在VS中输出浮点型常量保留小数点后6位。
第三种,字符型常量,在程序中,使用英文单引号括起来的字符被称为字符型常量。例如:‘d’,‘s’ ,‘@’等。
//输出字符型常量
#include<stdio.h>
int main() {
printf("%c\n", 'd');
printf("%c\n", 's');
printf("%c\n", '@');
return 0;
}
运行结果:
分析:%c表示按照字符型格式输出数据;同理,执行printf函数时,字符型常量将替换双引号中的%c;
第四种,字符串常量,用双引号括起来的内容,例如“qwe”,"computer",不能写成‘qwe’。
//输出字符串常量
#include<stdio.h>
int main() {
printf("%s\n", "qwe");
printf("%s\n", "computer");
return 0;
}
运行结果:
分析:%s表示按照字符串格式输出数据;同理,执行printf函数时,字符串常量将替换双引号中的%s;
1.2变量
下面来介绍变量,顾名思义就是可以改变的量。变量本质上是一块有名字的内存空间,用来存放数据。类似于生活中的杯子,杯子的空间大小是固定的但是杯中的内容是可以改变的,可以装水、装可乐、雪碧等。
总之,杯子是可以重复利用的,变量也是如此。内存空间大小是固定的,但是程序运行期间变量中的内容是可以变化的,因此称为变量。
在C语言中,一个合法的变量由三部分组成:变量类型、变量名、变量值。
变量类型:即整型、浮点型、字符型等。
变量名:变量的名字。
变量值:变量值是变量名标记的内存空间中的数据,如同杯中装的可乐、雪碧等。
2.标识符与关键字
关键字又称保留字,C语言共有32个关键字,一般用于对语句、数据类型、变量属性进行说明、约束,不能用做其他用途。在编写程序时,用户自定义的变量名、函数名被称为标识符,标识符不能是关键字。
2.1标识符
在C语言中,用来对变量、函数、数组等命名的字符序列被称为标识符,C语言(c++)对标识符有以下规定:
(1)只能有数字、字母(26个英文字符)、下划线组成
(2)第一个字符只能是字母或者下划线
(3)不能是关键字、区分大小写
列举一些合法标识符:Abc、abc1、_ds,可以作为变量名或者函数名
列举一些不合法标识符:1abc、int、@abc
区分大小写意思是a与A是两个不同的标识符。
2.2关键字
auto | break | case | char | const | continue | default | do |
double | else | enum | extern | float | for | goto | if |
int | long | register | return | short | signed | sizeof | static |
struct | switch | typedef | union | unsigned | void | volatile | while |
3.基本数据类型
C语言中数据分为两种类型:变量、常量,但无论变量还是常量都是有数据类型的,常量的数据类型在使用时由系统自动给出,变量的数据类型在定义变量时由用户指定。
定义变量的一般形式:变量类型 变量名=变量值;
例如:定义一个整型变量a,他的名字就是a,此时处于未赋值状态,可在任何地地方通过“=”为其赋值。
int a;
a=5;
//可以先定义,再赋值;也可以定义时同时赋值如下:
//int a=5;
3.1整数类型
常用的整型有:int(基本整形),long long(双长整型),最常用的是int(数据范围大约到10^9),而long long最大到10^18,其对应的格式说明符分别为%d和%lld。
//整型变量的定义与输出
#include<stdio.h>
int main() {
int a = 10;
long long b = 100;
printf("%d\n", a);
printf("%lld\n", b);
return 0;
}
运行结果:
分析:程序再执行第四、五行时,会先在内存中开辟两个内存空间,分别标记为a和b,然后将数字10和100分别放入对应的内存空间;程序在执行第六、七行时,先读取变量a、b对应内存空间总的数据10、100,然后替换%d和%lld。
3.2浮点型
浮点型有float、double两种。
float数据有效数字6~7位,范围到10^38,对应的格式说明符为%f,十进制小数。
//单精度浮点型变量(float)的定义与输出
#include<stdio.h>
int main() {
float a = 3.14;
printf("%f\n", a);
return 0;
}
运行结果:
分析:程序在第四行,先开辟一片内存空间,并标记为a,然后把3.14放到对应的内存空间中;执行第五行时,先读取变量a对应内存空间中的数据,然后替换%f输出。
double有15~16位有效数字,范围到10^308,格式说明符为%lf,十进制小数。
//双精度浮点型变量(double)的定义与输出
#include<stdio.h>
int main() {
double a = 3.14;
printf("%lf\n", a);
return 0;
}
运行结果:
分析:分析:程序在第四行,先开辟一片内存空间,并标记为a,然后把3.14放到对应的内存空间中;执行第五行时,先读取变量a对应内存空间中的数据,然后替换%lf输出。
3.3字符型
字符类型只有一种:char。格式说明符为%c。
//字符型变量(char)的定义与输出
#include<stdio.h>
int main() {
char c = 'A';
printf("%c\n", c);
printf("%d\n", c);
return 0;
}
运行结果:
分析:在执行第四行程序时,先开辟内存空间,并标记为c,然后把'A'对应的ASCII码65放到内存空间中;执行第五行程序时,先读取变量c对应内存空间中的数据65,然后替换%c,由于%c表示字符格式,因此输出ASCII码65对应的字符'A';第六行,%d则直接把65输出来。
字符在内存中是按照其对应的ASCII码进行存储,而ASCII码本质上也是整数,因此可以用%d,换句话说字符既可以当做%c也可以%d。
实际编程中,需要记住的字符对应的ASCII码:
'A' ASCII 65,'C'可以写成‘A’+2
'a' ASCII 97, ‘b’可以写成‘a’+1
'0' ASCII 48,‘9’可以写成‘0’+9
把一个字母大小写转换,如‘a’->'A',可写为'a'-32,同理大写转小写就是+32,如果忘了是32,还可以用‘a’-'A',因为‘a’-'A'=32。
3.4printf、scanf中的格式说明符
%d | int |
%lld | long long |
%f | float |
%lf | double |
%c | char |
%s | 字符串 |
4.注释
行注释“//”后面的内容不会被执行;
块注释“/*” "*/",两个中间的多行内容不会被执行;
主食可以用来写一写注解。
5.变量定义
定义变量的两种形式:
(1)定义多个同一类型的变量:变量类型 变量名1,变量名2.......;
(2)定义一个变量:变量类型 变量名;
#include<stdio.h>
int main() {
int a = 100, b = 200;
double df;
df = 3.14;
printf("a=%d\n", a);
printf("b=%d\n", b);
printf("df=%lf\n", df);
return 0;
}
运行结果:
分析:printf双引号里的内容除了%d等格式说明符会被后边的东西替代,其他内容都会原样输出。
变量需要注意的是:先定义,后使用;同一作用域内变量不可以重名;现阶段可认为每一个{}是一个作用域。
在一个{}内定义的变量,在{}外不可以引用;在{}外的变量,可以在其内部的{}中引用。
6.语句与语句块
在C语言中,程序执行的最小单位为语句,一条合法的语句必须在末尾有一个分号。单独的一个分号也构成语句,即空语句,其什么也不做。
语句块:用{}括起来的多行内容,不会影响程序的正常执行。
#include<stdio.h>
int main() {
int a = 100, b = 200;
double df;
df = 3.14;
{
printf("a=%d\n", a);
printf("b=%d\n", b);
printf("df=%lf\n", df);
}
return 0;
}
可以看到{}不会影响程序的正常执行。
7.实例
要求:交换两个整型变量的值。在int范围内。
输入:依次输入两个整数a、b,用空格分开
输出:交换后的两个变量a、b,用空格分开
#include<stdio.h>
int main() {
int a, b;
scanf("%d%d", &a, &b);
int tmp = a;
a = b;
b = tmp;
printf("%d %d", a, b);
return 0;
}
分析:scanf用于从键盘输入两个整数a,b,格式基本与printf相同,区别在于在变量名前要加&。