目录
不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位。如下代码:
- void main() {
- int a=1;// 定义了一个整型变量,取名为a, 并赋值为1 (强数据类型语言)
- int b=3;// 定义了一个整型变量,取名为b, 并赋值为3
- b=89;// 给变量赋值 为 89
- printf("a=%d \n",a);// 使用输出语句,把变量a 值输出 %d 表示输出的形式为整数
- printf("b=%d \n", b);//使用输出语句,把变量b 值输出 %d 表示输出的形式为整数
- getchar(); //将控制台停留,等待输入
- }
变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)
变量的使用步骤
int num
;num = 60
;printf("num=%d", num)
;int num2 = 99
;- //1.声明变量【告诉计算机要开一个房间】
- int num = 1 ; //整型
- double score = 2.3; //小数
- char gender = 'A'; //字符
- char name[] = "尚硅谷"; //字符串
每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(使用字节多少表示)。
C语言的整数类型就是用于存放整数值的,比如 12 , 30, 3456等等
类型 | 存储大小(单位为字节) | 值范围 |
---|---|---|
char | 1 | -128 即-(2^7) 到 127 (2^7-1) |
unsigned char | 1 | 0 到 255 (2^8 - 1) |
signed char | 1 | -128 即-(2^7) 到 127 (2^7-1) |
intsigned int (int) | 2/4 | -32,768 (- 2^15 ) 到 32,767 (2^15-1)或 -2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31 -1) |
unsigned int | 2/4 | 0 到 65,535 (2^16-1) 或 0 到 4,294,967,295 (2^32 -1) |
short (signed short) | 2 | -32,768 (- 2^15)到 32,767 (2^15 -1) |
unsigned short | 2 | 0 到 65,535 (2^16 - 1) |
long (signed long) | 4 | -2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31 - 1) |
unsigned long | 4 | 0 到 4,294,967,295 (2^32 - 1) |
short 3
在内存中占有 2字节int 3
在内存中占有 4个字节C语言的浮点类型可以表示一个小数,比如 123.4 , 7.8 , 0.12等等
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float 单精度 | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位小数 |
double 双精度 | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位小数 |
printf("d1=%f ", d1); // 在输出时,默认保留 小数点6位
字符类型可以表示单个字符,字符类型是char
, char
是1个字节(可以存字母或者数字),多个字符称为字符串, 在C语言中 使用 char
数组 表示,数组不是基本数据类型,而是构造类型。
字符常量是用单引号('')
括起来的单个字符。 例如: char c1 ='a'; char c3 = '9'
;
C中还允许使用转义字符‘\’
来将其后的字符转变为特殊字符型常量。例如: char c3 = ‘\n’; // '\n'表示换行符
在C中, char的本质是一个整数,在输出时,是ASCII码对应的字符。
可以直接给char赋一个整数,然后输出时,会按照对应的ASCII 字符输出 [97]
char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码.
- char c1 = 'a';
- char c2 = 'b';
使用while循环修改变量值,依次打印10以内(包含10)所有正整数的平方。程序执行的第一步需要定义合适的变量用于后续逻辑的实现,请选出正确的变量定义,填在以下代码的(1)处。
- #include
-
- int main(int argc, char** argv)
- {
- (_____1_____)
-
- while (num <= max_num)
- {
- result = num * num;
- printf("%d ^ 2 = %d\n", num, result);
- num = num + step;
- }
-
- return 0;
- }
小知识:C语言变量的生命周期和作用域
正确答案:
- int num = 1;
- int max_num = 10;
- int step = 1;
- int result = 0;
C编程中的常量是一些固定的值,它在整个程序运行过程中无法被改变。
字面常量是直接写出的固定值,它包含C语言中可用的数据类型,可分为整型常量,字符常量等。如:9.9,“hello”等就属于这一类常量。
##const修饰的常变量
有的时候我们希望定义这么一种变量:值不能被修改,在整个作用域中都维持原值。为了满足用户需求,C语言标准提供了const关键字。在定义变量的同时,在变量名之前加上const修饰。如下所示:
- int main()
- {
- const int a = 1; // const修饰的常变量
- }
const修饰的常变量,本质上是变量。
但具有常属性,不能被修改。
- int main()
- {
- const int a = 1;
- a = 2; // 错误
-
- const int n = 20;
- int arr[n] = { 0 }; //n本质上是变量
- }
关于上述n的使用,需要说明的是:在C99标准之前,数组的大小只能是常量修饰,不支持变长数组。
C语言提供了***#define***命令定义标识符常量,该标识符常量在程序中是个定值,通常用于代表数组容量或涉及数学的常量等。如:
- #define PI 3.14159
- #define SIZE 10 // 此处SIZE代表数组元素个数
- int main()
- {
- int arr[SIZE]={0};
- return 0;
- }
如需修改数组大小,只需将SIZE所代表的值修改即可,十分方便。
日常生活中有一些代表实际意义的常量,有这么一个特点:数值较小且为非负整数。如一周有7天等。C语言提供了一种枚举(Enum)类型,能够列出所有可能会用到的取值,并给它们取一个名字。
- int main()
- {
- enum Sex
- {
- //枚举常量 性别
- MALE,
- FEMALE,
- SECRET
- };
-
- enum Sex s = FEMALE; //利用枚举常量给变量赋值
- printf("%d\n", MALE);
- printf("%d\n", FEMALE);
- printf("%d\n",SECRET);
-
- return 0;
- }
-
在使用枚举常量的时候,需要注意以下几点:
&
取得它们的地址。以上就是C语言中常见的几种常量,合理使用常量可以使程序可读性更强,条理清晰,易于维护。
使用常量表示圆周率π,并计算半径为2的圆的面积。常量有多种定义方法,请判断哪一项填在(1)处无法使程序正常运行。
- #include
-
- (_____1_____)
-
- int main(int argc, char** argv)
- {
- float radius = 2.0;
- float area = PI * radius * radius;
-
- printf("半径为%.2f的圆,面积是%.2f", radius, area);
-
- return 0;
- }
C语言常量种类:
正确答案:
- const float PI;
- PI = 3.14;
(1)整数类型
(2)浮点数类型
(3)字符类型
(4)布尔类型
(5)枚举类型
sizeof 运算符用于获得数据类型或表达式的长度
如:-sizeof(object); //sizeof(对象)
-sizeof(type_name); //sizeof(类型)
-sizeof object; //sizeof 对象
代码举例:
- #include
-
- int main()
- {
- int i;
- char j;
- float k;
-
- i = 123;
- j = 'C';
- k = 3.14;
-
- printf("size of int is %d\n",sizeof(int));
- printf("size of i is %d\n",sizeof(i));
- printf("size of char is %d\n",sizeof(char));
- printf("size of j is %d\n",sizeof j);
- printf("size of float is %d\n",sizeof(float));
- printf("size of k is %d\n",sizeof k);
-
- return 0;
- }
代码运行结果:
分别打印各类型所占字节:
- #include
-
- int main()
- {
- printf("int = %d\n",sizeof(int));
- printf("short int = %d\n",sizeof(short));
- printf("long int = %d\n",sizeof(long));
- printf("long long int = %d\n",sizeof(long long));
- printf("char = %d\n",sizeof(char));
- printf("_Bool = %d\n",sizeof(_Bool));
- printf("float = %d\n",sizeof(float));
- printf("double = %d\n",sizeof(double));
- printf("long double = %d\n",sizeof(long double));
-
- return 0;
-
- }
运行结果(设备不同,结果可能也不同):
signed:代表有符号的,第一个位代表正负,剩余的代表大小,例如:signed int 大小区间为-128-127。(默认为signed)
unsigned:代表无符号的,所有的位都为大小,没有负数,例如:unsigned int 大小区间为:0-255。
代码举例:
- #include
-
- int main()
- {
- short i;
- unsigned short j;
-
- i = -1;
- j = -1;
-
- printf("%d\n",i);//d为打印带符号的
- printf("%u\n",j);//u为打印不带符号的
-
- return 0;
- }
运行结果:
可见,打印 j 时,结果并不是我们期望出现的-1,而是65535,这与数据类型的取值范围有关。
CPU能读懂的最小单位是:比特位,bit,b。每个比特位只能存放二进制数,即0和1.
内存机构最小寻址单位:字节,Byte,B
注:1Byte = 8 bit
一个字节能存放的最大的数()用二进制表示为:
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
该数转化为十进制为:2147483647
补充:进制
打印,代码如下:
- # include
- #include
-
- int main()
- {
- unsigned int result = pow(2,32) - 1;
- printf("result = %u\n",result);
-
- return 0;
- }
运行结果:
注意:若不加“unsigned”,则输出结果为2147483647.这是因为默认情况下int是signed类型的,也就是说左边第一位是符号位,所以必须加“unsigned”来使其变为一个无符号的整型变量,使得32位都用来存放数值。
(1)先取得该数的绝对值的二进制形式
(2)再将第1步的值按位取反(除符号位)
(3)最后将第2步的值加1
例如:
数据类型 | 字节数 | 取值范围 |
char | 1 | -128~127 |
unsigned char2 | 1 | 0~255 |
short | 2 | -32768~32767 |
unsigned short | 2 | 0~65535 |
int | 4 | -2147483648~2147483647 |
unsigned int | 4 | 0~4294967295 |
long | 4 | -2147483648~2147483647 |
unsigned long | 4 | 0~4294967295 |
long long | 8 | -9223372036854775808~9223372036854775807 |
unsigned long long | 8 | 0~18446744073709551615 |
数据类型 | 字节数 | 取值范围(绝对值) |
float | 4 | 1.17549*10^-38~3.40282*10^38 |
double | 8 | 2.22507*10^-308~1.79769*10^308 |
long double | 12 | 2.22507*10^-308~1.79769*10^308 |
用不同的基本数据类型保存一名学生的各项信息,并打印输出。请判断以下选项中哪一个能更好地存储学生的基本信息,选出正确答案填在(1)处。
- #include
- #include
-
- int main(int argc, char** argv)
- {
-
- (_____1_____)
-
- printf("学号:\t%d\n", student_id);
- printf("姓名:\t%s\n", name);
- printf("性别:\t%s\n", sex);
- printf("年龄:\t%d\n", age);
- printf("身高:\t%.2f\n", height);
- printf("体重:\t%.2f\n", weight);
- printf("是否独生子女:\t%s\n", only_child ? "是": "否");
-
- return 0;
- }
C语言数据类型分类:
正确答案:
- int student_id = 1001;
- char name[] = "张三";
- char sex[] = "男";
- int age = 18;
- bool only_child = true;
- float height = 170.50;
- float weight = 55.25;
判断一个字符是否是英文字母。请判断以下选项中哪个条件不能填在(1)处。
- #include
-
- int main(int argc, char** argv)
- {
- char ch;
- printf("请输入一个字符:");
- scanf("%c", &ch);
-
- if (_____(1)_____)
- printf("字符 \'%c\' 是一个英文字母", ch);
- else
- printf("字符 \'%c\' 不是一个英文字母", ch);
-
- return 0;
- }
下图是ASCII表,ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
正确答案:
('a' <= ch <= 'z') || ('A' <= ch <= 'Z')