C语言笔记
第1章 为什么学编程
这里就省略很多字
第2章 C数据类型
2.1 常量与变量
C语言程序处理的数据类型有:常量(Constant)、变量(Variable)
2.1.1 常量
常量:程序中不能改变其值的量
整型常量:整型常量、实型常量、字符常量、字符串常量、枚举常量
整型常量:包括正整数、负整数、零
实型常量:实数、浮点数
字符常量:单引号刮起来的一个字符( 'x' , 'X' , '?' , '9' )
字符串常量:双引号刮起来的一个或多个字符("Hello!" , "K88" , "9")
枚举常量
1. 整型常量
表示形式:十进制、八进制、十六进制(进制表示形式) ------编译器转化成(二进制)即计算机数据
十进制:0-9 可正负(256、-127、0、+7)
八进制:0-7 可正负 0开头(021~17、-017~-15)
十六进制:0-9 a-f(A-F) 可正负 0x/0X开头</u>(0x12~18、-0x1F~-31)
整型常量分类:长整型 短整型、有符号 无符号之分
不同类型的整型常量表示形式:
有符号整型常量:默认 int 型 ,无需signed(10、-30、0)
无符号整型常量:常量值后跟U/u,不可小于0(30u、256U)
长整型常量:常量值后跟L/l(-256l、1024L)
无符号长整型常量:常量值后跟LU、Lu、lU、lu</u>(30lu)
2. 实型常量
表示形式:十进制小数、指数
十进制小数:和数学一样(必须有小数点)
指数:e/E--10(以e为底)3.14e-6~0.00000314
实型常量分类:单精度、双精度(没有有无符号之分)
单精度:常量值后跟F/f(1.25F、1.25e-2f)
双精度(double):实型常量 默认双精度(0.123、-12.35、.98)
长双精度(long double):常量值后跟L/l(1.25L)
2.1.2 变量
变量:值可改变
使用前必须定义
类型关键字 变量名;
关键字 C语言预先规定的、特殊意义的单词
void main() //main函数
{ //程序必须有并且只可以有一个main 只出现一次、与在程序中位置无关
int a; //定义整型变量
float b; //C语句以分号结尾
char c; //main函数/主函数主体部分中的语句用{}括起来
a = 1; //第4条C语句
b = 2.5; //第5条语句
c = 'A';
}
C语句以分号结尾
变量名是用户定义的标识符(Identifier)
标识内存中一个具体的存储单元 存储单元存放的数据是变量的值
变量命名规则(Naming Rules):
英文字母、数字、下划线组成
必须字母、下划线开头
不可以用C关键字作为标识符
可以包含任意多个字符、一般有最大长度限制、编译器不同、长度不同
标识符区分大小(即大小写敏感)
标准C(C89)已规定所有变量必须在第一条可执行语句之前定义
void main()
{
int a;
a = 1; //第一条可执行语句
float b; //Error!因为变量b一定要在第一条可执行语句前定义
b = 2.5;
char c; //Error!因为变量c一定要在第一条可执行语句前定义
c = 'A';
}
如果变量未初始化 则该变量值为一个随机数(静态变量和全局变量除外)
可以在定义变量的同时对变量初始化(为其赋初值)
void main()
{
int a = 1;
float b = 2.5;
char c = 'A';
}
在一条语句中,可以同时定义多个相同类型的变量,多个变量之间用逗号作分隔符(Separator),与顺序无关
int a, b, c;
可以在定义变量的同时对变量初始化
int a = 0, b = 0, c = 0;
2.2简单的屏幕输出
printf函数
C的标准输入/输出函数printf()的作用是输出一个字符串 ,或者按指定格式和数据类型输出若干变量的值
#include<stdio.h> //编译预处理命令#include
main() //需要向屏幕输出数据或者从键盘输入数据的程序都必须包含这
{ //一行
int a = 1; //C语言没有专门的输入/输出语句
float b = 2.5; //输入/输出操作是通过调用C的标准库函数来实现的
char c = 'A';
printf("a = %d\n", a);
printf("b = %f\n", b);
printf("c = %c\n", c);
printf("End of program\n");
}
尖括号内的文件<stdio.h>叫头文件(Header files)
头文件stdio.h中包含一些C语句 使C程序轻松实现数据的输入和输出
h--head
std--standard
i--input
o--output
编译预处理命令#include可使头文件在程序中生效
作用:将写在尖括号内的输入/输出函数的头文件stdio.h包含到用户源文件中
%d、%f、%c–格式字符
%d 按十进制整型格式输出变量的值
%f 按十进制小数格式输出变量的值(一般隐含输出6位小数)
%c 输出字符型变量的值(单个字符)
\n表示换行
2.3 数据类型
声明一个变量 其中该变量要和一个具体的数据类型联系起来
类型关键字 变量名;
引入数据类型的主要目的是便于在程序对它们按不同方式和要求进行处理
数据类型分类:基本类型、构造类型、指针类型、无类型
基本类型:整型(int、long、short、unsigned)、实型(浮点型)(float、double、long double)、字符型(char)、枚举类型(`enum`)
构造类型:数组、结构体(`struct`)、共用体(`union`)
指针类型
无类型:void
定义整型变量时,只要不指定为无符号型(Unsigned),即隐含类型是有符号性(Signed),而signed通常可以省略
2.4 如何计算变量或数据类型所占内存空间
计算机的所有指令和数据都保存在计算机的存储部件–内存里(RAM,保存数据速度快、数据可随机访问、掉电即失)
存储空间实际是一个线性地址表,按字节进行编址,即每个字节的存储空间都对应一个唯一的地址
一个字节–8 bit(二进制位、binary digit)
- bit(b)----------------(比特)位
- Byte(B)------------- 字节 1 B = 8 b
- Kilobyte(KB)------ 千 1 KB = 1024 B
- Megabyte(MB)-- 兆 1 MB = 1024 KB
- Gigabyte(GB)---- 吉 1 GB = 1024 MB
- Terabyte(TB)----- 太 1 TB = 1024 GB
char型数据在任何情况下在内存中都只占 1 个字节
int型看执行环境 在内存中占不同位数
为了准确计算某种类型数据所占内存空间的字节数,需要使用sizeof()运算符(不可对变量所占的字节数想当然)
sizeof是C关键字,不是函数名
#include<stdio.h>
int main()
{
printf("Data type Number of bytes\n");
printf("------------ -----------------\n");
printf("char %d\n", sizeof(char));
printf("int %d\n", sizeof(int));
printf("short int %d\n", sizeof(short));
printf("long int %d\n", sizeof(long));
printf("float %d\n", sizeof(float));
printf("double %d\n", sizeof(double));
return 0;
}
Data type Number of bytes
------------ -----------------
char 1
int 4
short int 2
long int 4
float 4
double 8
2.5 变量的赋值和赋值运算符
赋值运算符(Assignment Operator)用于给变量赋值
由赋值运算符及其两侧的操作数(Operand)组成的表达式(Expression)称为赋值表达式
赋值表达式:x = 1
C语言没有提供专门的赋值运算符 赋值操作是通过在赋值表达式后面加分号构成表达式语句来实现
x = 1;
可以多重赋值(连续赋值)
a = b = c = 0;/*等价*/
a =(b = (c = 0));
但不可以在定义变量是,对多个变量进行连续赋初值
int m = n = 0;//编译错误
在定义变量时,变量初始化的常量类型与定义的变量类型不一致
int n = 3.5;//编译错误
赋值表达式的值被规定为运算完成后左操作数的值,类型和左操作数相同
2.6 本章扩充内容
1. 有符号整数和无符号整数
主要区别在:整数的最高位
无符号整数:最高位 C编译器解释为数据位
有符号整数:最高位 C编译器解释为符号位 符号位 0--正 1--负
2字节
有符号整数:最小值(1000 0000 0000 0000)2,(补码表示)即-32768(-2e15)
最大值(0111 1111 1111 1111)2,(补码)即32767(2e15 - 1)
无符号整数:最小值(0000 0000 0000 0000)2,0
最大值(1111 1111 1111 1111)2,65535(2e16 - 1)
2. 实型数据在内存中的存储格式
对于实数,无论小数表示形式还是指数表示形式,在计算机内部都采用浮点形式来存储
浮点形式是相对于定点形式而言的
- 定点数:小数点位置固定
小数点位于符号位和第一个数值位之间(纯小数)
整型数据是定点表示的特例(小数点位于数值为之后)
- 浮点数:小数点的位置可以浮动
N = S × r^j
浮点数将实数分为阶码和尾数两部分
S为尾数(正负均可),一般规定用纯小数形式
j为阶码(正负均可、但必须是整数)
r是基数,对二进制数而言,r = 2,即N = S × 2^j 10.0111 = 0.100111 × 2^10
阶码决定实数取值范围;尾数决定实数精度,尾数符号决定正负
3.单精度实型和双精度实型的有效位数
将同一实型数分别赋值给单精度实型和双精度实型变量
#include<stdio.h>
int main()
{
float a;
double b;
a = 123456.789e4;
b = 123456.789e4;
printf("%f\n%f\n",a,b);
return 0;
}
1234567936.000000 //float仅可以接收实型变量的7位有效数字
1234567890.000000 //double可以接收实型变量的16位有效数字
苏小红《C语言程序设计》