第一章 第一个C程序
经典的hello world。需要在调用库函数之前对库函数进行声明,标准C库用<>符号包含调用的头文件。main函数返回int整形,一个程序中有且只有一个main函数,是程序的入口。函数开始结尾要有大括号,每条语句用分号结尾。
写注释的方法://单行注释 注释双斜杠到行末;/* */多行注释
# include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
第二章 数据类型及语句
第一节 关键字
一、数据类型相关的关键字:用于定义变量或者类型
1、char:定义字符型变量,占1个字节(8bit),只能定义一个字符
//char ch1 = ‘b’;正确
//char ch2 = ‘1’;正确
//char ch3 = ‘1234’;错误
字符存放的是ASCII码的值,即用1的ASCII码给ch1赋值
2、short:短整型,2个字节
short int a = 11;一般short和int配合使用,范围是 -32768 — 32767
3、int:定义整型变量,32位系统下占4个字节,16位占2字节
int a =44;范围是 -20亿 — 20亿
4、long:长整型;在32位系统占4个字节
long int a = 144;
5、float:单浮点型实数,带小数点,占4个字节
float b = 3.8f; f修饰3.8是float类型的实数,不加默认为double类型
6、double:双浮点型实数,带小数点,占8个字节,精度更高
double b = 3.8;
7、struct:定义结构体类型
8、union:定义联合体(共用体)
9、enum:定义枚举类型
10、signed:有符号数(0、正数、负数)
在定义字符型char、整形short int long时用signed修饰,表示数据是有符号的,保存正负0,不写默认是有符号
signed int b = -6;
11、unsigned:无符号数(0、正数)
在定义字符型char、整形short int long时用signed修饰,表示数据是无符号的,只能保存正数和0.
unsigned int a = 100;
unsigned int a = -100; 错误
12、void:空类型,不能定义变量,修饰函数的参数和返回值,代表函数没有参数或没有返回值
int main()
{
char ch;
ch = 'a';
printf("ch = %c\n", ch);
return 0;
}
int main()
{
char a;
short int b;
int c;
long int d;
float e = 3.8f;
double f = 5.6;
printf("sizeof(a) = %d\n", sizeof(a));
printf("sizeof(b) = %d\n", sizeof(b));
printf("sizeof(c) = %d\n", sizeof(c));
printf("sizeof(d) = %d\n", sizeof(d));
printf("sizeof(e) = %d\n", sizeof(e));
printf("sizeof(f) = %d\n", sizeof(f));
return 0;
//sizeof(a) = 1
//sizeof(b) = 2
//sizeof(c) = 4 说明vs编译环境是32位
//sizeof(d) = 4
//sizeof(e) = 4
//sizeof(f) = 8
}
二、存储相关关键字
1、register:寄存器,用register修饰的变量是寄存器变量
一般定义的变量的存储空间会被分配在内存中,而用register修饰变量,编译时会告诉编译器尽量将其存储空间分配在寄存器中,有可能存放入也有可能没有存放入,只有内存中的变量才有地址,故不能用取地址的方式读取register修饰的变量。
(1)定义的变量不一定是存放在了寄存器中
(2)CPU取数据的时候在寄存器中读取比在内存中快,
(3)不能定义寄存器数组
(4)register只能修饰字符型char和整形short、int、long,不能修饰浮点型float、double
register char ch;
register short int b;
register int c;
register float d; (错误)
(5)只有内存中的变量才有地址,故不能用取地址的方式读取register修饰的变量
register int a;
int* p;
p = &a;(错误,可能a没有地址)
2、static:静态
static可以修饰全局变量、局部变量、函数
3、const:修饰只读变量
不能修改值,是只读的
const int a = 101;//定义了一个只读的变量a,a=101,在定义之后不能再修改了
a = 101;//错误,不能给只读变量赋值
4、auto:自动类型(不用了)
auto int a 与 int a 等价
5、extern:外部函数或外部变量声明
一般用于函数和全局变量的声明,常用在头文件中
三、控制语句相关的关键字
(1)if
(2)else
(3)break
(4)continue
(5)for
(6)while
(7)do
(8)switch…case…
(9)goto
(10)default
四、其他关键字
1、sizeof:用来测变量、数组、指针等占用存储空间的大小(占用内存的字节数)
int a = 10;
in num;
num = sizeof(a); 测量a在内存中占用的字节数,即int类型占用的字节数
2、typedef:给一个已有的类型名如int、float等重新起个名字,比如把long int叫成abcd,不能创造一个新的类型
//使用方法,以unsigned short int 命名成 U16为例
unsigned short int a;//1、用想起名的类型定义一个变量
unsigned short int U16;//2、用新的类型名替代变量名
typedef unsigned short int U16;//3、在最前面加上typedef
unsigned short int b;和 U16 b;是一个效果//4、即可用新的类型名定义变量
//定义方式::typedef + 需要替代的变量名 + 新变量名
3、volatile:易改变
即告诉CPU每次用volatile变量时候,重新去内存中读取,以保证是最新的值,而不是寄存器中的备份
CPU读取数据是先把数据从内存中放到寄存器中再去用,再次读取直接在寄存器中读取
较少使用
//使用 INT 代替 short int 作为类型名称定义变量
//short int a;
//short int INT16;
typedef short int INT16;
int main()
{
short int b = 100;
INT16 c = 111;
printf("b = %d\n", b);
printf("c = %d\n", c);
return 0;
}
五、命名要求:字母、数字、下划线,不能以数字开头,必须以字母或者下划线开头
1、Linux风格: stu num
2、驼峰风格: StuNum
3、大小写敏感:int Num; int num; 即大写和小写是两个变量名,Num 不等同于 num;
4、要求见名知意
六、C语言的程序结构
一个完整的C语言程序,有且仅有一个main()函数(又称主函数),和其他若干个函数组成
main()函数是程序的入口
main函数可以传参,也可以不带参
第二节 数据类型
一、基本类型
1、常量和变量
常量:程序运行过程中,其值不能改变的量称为常量
变量:其值可以改变的量称为变量
(1)字符常量和字符变量
字符常量:直接常量:用单引号括起来。如’a’,‘0’。转义字符:反斜杠\开头,后跟一个或几个字符:‘\n’制表符,’\t’制表符,'\'表示\。
字符变量:用char定义的字符,每个字符变量分配一个字节的内存空间,字符值用ASCII码的形式存放在变量的内存空间中
char a;
a = ‘x’;
a变量存放的是字符X的ASCII:120,即a = 120; 和 a = ‘x’;是一样的。
int main()
{
char a = 120;
char b = 'x';
printf("a = %c\n",a);
printf("b = %c\n", b);
return 0;
}
// a = x
// b = x
(2)字符串常量和字符串变量
字符串常量:用双引号括起来的一连串字符,如“CHINA”,“湖南大学”
字符串常量和字符常量有区别:
a、单引号和双引号,‘a’和“a”
b、每个字符串结尾编译器会自动补一个结束标志位 ‘\0’,即"a"包含两个字符’a’和’\0’;
(3)整形数据 short、int、long
整形常量(按进制分类):十进制:以数字1-9开头,如123、145
八进制:以数字0开头,如0123、0152
十六进制:以数字0x开头,如0x1e,0x25(a=10,b=11,c=12,d=13,e=14,f=15)
整形变量:(un/signed)short (int)、(un/signed)int、(un/signed)long (int)
(4)实型数据(浮点型),float,double
实型常量(实数或浮点数):十进制形式和指数形式,不以f结尾默认double类型,以f结尾是float类型
实型变量:单精度(float,占4个字节,7位有效数字),双精度(double,占8字节,16位有效数字)
2、格式化输出字符
%d 十进制有符号整数
%u 十进制无符号整数
%x 十六进制整数
%o 八进制整数
%f float型浮点数(7位有效数字)
%lf double型浮点数
%e 指数形式的浮点数
%s 字符串
%c 单个字符
%p 指针的值
%3d 要求宽度为3位,如果不足3位则前面用空格补齐,如果足够3位则该条语句无效
%03d 要求宽度为3位,如果不足3位则前面用0补齐,如果足够3位则该条语句无效
%-3d 要求宽度为3位,如果不足3位则后面用空格补齐,如果足够3位则该条语句无效
%.2f 小数点后只保留2位
int main()
{
char a = 'x';
int b = 101;
float c = 3.1415926f;
double d = 1.23;
int e = 0x3d;//61
printf("a = %c\n", a);
printf("b = %d\n", b);
printf("c = %f\n", c);
printf("d = %lf\n", d);
printf("e = %x\n", e);
printf("e = %d\n", e);
return 0;
}
int main()
{
printf("%03d\n", 1);
return 0;
}