C语言总结:变量、语句
1. 变量内存管理
1.1 整型数据在内存中的存放
不同编译系统为整数变量分配的字节数可能不同,谭浩强的C教材默认2字节。
数值以补码形式存放在内存中:
补码: 整数的补码和源码相同;负数的补码,将该数的绝对值的二进制形式取反再加1。对于一个占2字节的int型变量,其表达范围为
−
2
15
至
2
15
−
1
-2^{15} 至 2^{15}-1
−215至215−1。由于不存在
−
0
(
=
0
)
-0(=0)
−0(=0),故负数的范围比正数的范围多一个。
1111
  
1111
  
1111
  
1111
1111 \; 1111 \; 1111 \; 1111
1111111111111111 表示
−
1
-1
−1;
1000
  
0000
  
0000
  
0000
1000 \; 0000 \; 0000 \; 0000
1000000000000000 表示
−
2
15
-2^{15}
−215。
占用字节: int , long int , short int
在内存中占用字节数并没有固定的规定,只是要求int
不长于long int
, 不短于short int
。 通常是long int
32 位,short int
16位,int
16位或32位。
一般认为float
型占32位,可保证有效位数为6~7位;double
型占 64位,可保证有效位数为15~16位。
1.2 字符在内存中的存放
字符类型(char)一般占8位(一个字节),有以下注意点:
a. char 可以和 int 类型互相赋值转换;
b. 对字符类型可以与整数作加减运算; 'a' - 32 ;
c. 若在字符变量中存放一个ASCII码位128~255之间的字符,由于在字节中最高位1,用%d格式符输出时,会得到一个负整数。
1.3字符串在内存中的存放
字符串变量:C中没有专门的字符串变量,只能通过字符数组来保存字符串。
字符串常量:C规定对每个字符串常量自动以字符'\0'
作为字符串结束的标志, 例如"CHINA"
字符串在内存中是:C H I N A \0
, 即占用内存单元不是5个字符,而是6个字符,但在输出时不输出最后的'\0'
。
2. 语句
2.1 赋值语句
C语言中赋值号=
也是运算符,即既可写成赋值语句,也可以写成赋值表达式,下面是二者的区别:
// 赋值表达式
if((a = b)>0) t = a;
// if((a = b;)>0) t = a; 这样是错误的,因为判断语句不可以是赋值语句
// 赋值语句
a = b
2.2 输入/输出语句
putchar, getchar
字符输入输出函数, 且均只操作一个字符。
#include <stdio.h>
void main(){
char c ;
c = getchar();
putchar(c);
putchar('\n');
}
printf
//输出整型数
printf("%d\n", 14);
//输出浮点数
printf("%f\n", 12.455);
printf("%2.2f\n", 12.455); //整数、小数部分各占两位;
printf(".2f\n", 12.455); //两位小数;
//输出字符串
printf("%s\n", "China");
//输出指数形式
printf("%e\n", 123.3455);
//输出%
printf("%f%%\n", 1.0/3); //%%表示%
scanf
scanf("%d", &a);
scanf("%d%d", &a, &b);
scanf("%a, %d", &a, &b);
gets, puts
字符串输入输出函数。
2.3 if 语句
- if 语句
if (...) {}
else if (...) {}
else if (...) {}
else {}
- 条件运算符
max = (a > b)? a:b;
- switch 语句
// 若不加 break语句,会一致顺着case的顺序执行下去,一旦满足,就会执行相应的语句。
switch(表达式)
{
case 常量表达式 1: {...}
case 常量表达式 2: {...}
...
default: {...}
}
// default 后面无需加 break;
switch(表达式)
{
case 常量表达式 1: {... ; break;}
case 常量表达式 2: {... ; break;}
...
default: {...}
// 多个 case 可以共用一组执行语句。
...
case 'A':
case 'B':
case 'C': printf(">60\n"); break;
...