下载好VScode并配置好环境,可以开始进行第一个c程序的编写。
#include
int main(int argc,char *argv[])
{
printf("Hello World!\n");
return 0 ;
}
需要注意的几点:
1.#include
2.每一个c语言程序有且只有一个main函数这是整个程序的开始位置
3.c语言中的括号和冒号都是成对出现的且都是英文符号
4.c语言中的语句必须要以分号结尾
5.//为注释
可以看到程序已经成功在终端运行,成功迈出了第一步。
关键字是c语言已经定义好的名字,直接可以拿过来使用,不需要再次定义。数据类型相关的关键字用于定义变量或者类型。
定义变量的语法结构: 类型 变量名;
变量名属于标识符(变量名,函数名,重命名和取别名),命名规则:
(1)只能以数字,下划线和字母命名
(2)首字母不能是数字
(3)不能与关键字相同
包含char,short,int,long,double,float,struct,union,enum,signed,unsigned,void等关键字
1,char 字符型 用char定义的变量属于字符型变量 占一个字节(8位)
有符号:-2^7~+2^7-1
无符号:0~2^8-1
char ch1 = 'a'; ; =为赋值号
char ch1 = ’1‘; 正确
char ch2 = ’1234‘; 错误 ’1234‘为字符串
2,short 短整型 使用short定义的变量是短整型变量 占两个字节(16位)
有符号:-2^15~+2^15-1
无符号:0~2^16-1
short int a = 11;
3,int 整型 用int定义的变量是整型变量 占四个字节
有符号:-2^31~+2^31-1
无符号:0~2^32-1
int a=44;
4,long 长整型 用long定义的变量是长整型 在32位的系统下占四个字节 在64位的系统下占八个字节
有符号:-2^31~+2^31-1
无符号:0~2^32-1
long int a=66;
5,float 单浮点型(实数)用float定义的变量是单浮点型的实数 占四个字节
有符号:-2^31~+2^31-1
无符号:0~2^32-1
float b =3.8f;
6,double 双浮点型(实数) 用double定义的变量是双浮点型实数 占八个字节
double b = 0.8;
7,struct 结构体类型关键字
8,union 共用体(联合体)相关关键字
9,enum 与枚举类型相关的关键字
10,signed 有符号(正负)的意思 在定义char 整型(short,int,long)数据的时候用signed修饰,代表定义的数据是有符号的,可以保存正数,也可以保存负数
signed int a = 100;
signed int b = -100;
注意:默认情况下signed可以省略 默认有符号类型数据
11,unsigned 无符号的意思 只能保存正数和0 在定义char 整型(short,int,long)数据的时候用unsigned修饰,代表定义的数据是无符号的
12,void 空类型的关键字
char,int,float都可以定义变量
void不能定义变量,没有void类型的变量
void用来修饰函数的参数或者返回值,代表函数没有参数或者没有返回值
sizeof():是一个运算符,可以用来获取数据类型所占内存的大小
register static const auto extern
1.register是寄存器的意思 用register修饰的变量是寄存器变量
即:在编译的时候告诉编译器这个是寄存器变量,要尽量将其存储在寄存器当中。
注意:
(1)定义的变量不一定真的存放在寄存器当中
(2)cpu取数据的时候从寄存器中取数据比内存中快
(3)因为寄存器比较宝贵,所以不能定义寄存器数组
(4)register只能修饰字符型和整型不能修饰浮点型的
(5)因为register修饰的变量可能存放在寄存器中也可能存放在内存中,所以不能对寄存器取变量地址,只有在内存中存放的数据才有地址
2,static 是静态的意思
static可以修饰全局变量 局部变量 函数
使用static修饰的变量,此变量存放在内存的静态区空间中
3,const 是常量的意思 用const修饰的变量是只读的不可以修改它的值
const int a = 101;//在定义的时候用const修饰,并赋初值为101,从此以后就不能给a赋值了,const也可以修饰指针
4,auto
auto int a; 和 int a;是等价的,现在基本不用auto
5,extern 是外部的意思,一般用于函数和全局变量的声明
条件控制语句:
if语句:if else
switch语句:switch case default
循环控制语句:
do while for goto
辅助控制语句:
break continue
sizeof typedef volatile
1,sizeof 用来测量变量 数组的储存空间大小(字节数)
例:int a;
int num;
num = sizeof(a);
print(“num = %d”,num);
2,typedef 重命名相关的关键字 作用是给一个已有的类型,重新起一个类型名,并没有创造一个新的类型。
1.用想起名的类型定义一个变量
short int a;
2.用新的类型名代替变量名
short int INT16;
3.在最前面加上typedef
typedef short int INT16;
4.然后就可以用新的类型名定义变量了
INT16 b;和short int b;是一个效果
3,volatile 易改变的意思
用volatile定义的变量是易改变的,即告诉cpu每次用volatile变量的时候重新去内存中取 保证用的是最新的值而不是寄存器中的备份 现在极少使用
char,int,short,long,float,double
#include
int main(int argc,char *argv[])
{ //定义一个char类型的变量并赋值 输出用%c
char a = 'w';
printf("a = %c\n",a);
//定义一个short类型的变量并赋值
short b = 100;
printf("b = %d\n",b);
//定义一个int类型的变量并赋值 输出用%d
int c = 100;
printf("c = %d\n",c);
//定义一个long类型的变量并赋值 输出用%ld
long d = 151514;
printf("d = %ld\n",d);
//定义一个float类型的变量并赋值 输出用%f
float e = 3.048454465;
printf("e = %f\n",e);
//定义一个double类型的变量并赋值 输出用%lf
double f = 4561.481564156;
printf("f = %lf\n",f);
return 0 ;
}
代码运行结果正常,需要注意的是float和double类型的变量最多到小数点后六位。
概念:由多个相同或不同类型的数据构成的集合,这种数据类型被称为构造类型。
数组,结构体,共用体,枚举
常量:在程序运行过程中,值不可以改变的量
例:100,“a”,“hello”
常量的分类:
整型:100,125,-100,-125
实型:3.12,0.125f,-3.7985
字符型:“a”“b”“2”
字符串:“abcd”“1234”
ASCII码表:对于计算机而言只能识别二进制的数字,对于非数字的数据,如果要使用,就需要将其用一个数字型数据进行标识,就称之为ASCII码表。
#include
int main(int argc,char *argv[])
{
//注意在使用字符类型的数据时 %c输出字符%d输出ascii值
char ch1='w';
printf("%c %d",ch1,ch1);
char ch2 = 115;
printf("%c %d",ch2,ch2);
return 0 ;
}
执行代码结果如图所示
变量:其值可以改变的量叫做变量
定义变量的方式:
存储类型 数据类型 变量名;
存储类型 数据类型 变量名 = 变量或者常量;
变量在定义的时候要满足标识符的命名规则
(1)只能由字母数字下划线组成
(2)首字母不能是数字
(3)不能关键字相同
整型数据
整型常量:(按进制分)
十进制:以正常数字1~9开头 如457 45120
八进制:以数字0开头 如0123
十六进制:以0x开头 如0xle
整型变量:
有/无符号短整型(un/signed)short (int) 两个字节
有/无符号基本整型(un/signed)int 四个字节
有/无符号长整型 (un/signed)long int 四个字节(32位处理器中)
实型数据
实型常量:实型常量也称之为实数或者浮点数
十进制数形式:0.0 0.12 5.0
指数形式:123e3表示123乘以10的三次方
123e-3表示123乘以10的负三次方
不以f为结尾的是double类型
以f为结尾的是float类型
实型变量
单精度(float)和多精度(double)
float型:占四个字节,7位有效数字,指数-37~38
double型:占八个字节,16位有效数字,指数-307~308
字符数据
字符常量:
直接常量:用单引号括起来,如’a‘,’b‘
转义字符:以反斜杠'\'开头,后面跟一个或几个字符,如'\n''\t'等,分别代表换行,换向跳格
字符变量:
用char定义,每个字符变量被分配一个字节的内存空间
字符值以ascii码的形式存放在变量的内存单元中
字符串常量:由双引号括起来的字符序列,如“哈哈哈”“abcd”
字符串常量与字符常量的不同:
’a‘为字符常量 “a”为字符串常量
每个字符串的结尾,编译器都会自动添加一个结束标志位’\0‘
即“a”包含了两个字符’a‘和’\0‘
%d 十进制有符号整数
%ld 十进制long有符号整数
%u 十进制无符号整数
%o 八进制表示的整数
%x 十六进制表示的整数
%f float型浮点数
%lf double型浮点数
%e指数形式的浮点数
%c 单个字符
%s 字符串
%p 指针
使用%#o可以输出八进制数的前导符。
使用%#x可以输出十六进制数的前导符。
%3d %03d %-3d %5.2f
%3d:要求宽度为3位,如果不足三位,前面空格补齐,若足够三位则无效
%03d:要求宽度为3位,如果不足三位,前面用0补齐
%-3d:要求宽度为3位,如果不足三位,后面补齐
%5.2f 宽度为5位,小数点保留后两位
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及类型转换问题。
转换的方式有两种:自动转换:遵循一定的规则,由编译器系统自动完成。
强制类型转换:把表达式的运算结果强制转换成所需要的数据类型
自动转换的原则
1.占用内存字节较少的类型转换成占用内存字节较多的类型,以保证精度不降低。
2.转换方向:
强制转换
通过类型转换运算来实现
(类型说明符)(表达式)
在不同的情况中使用不同的关键字即可,一切需求来源于实际,由于之前没有一条完整的线将这一章穿起来,所以才有了这一篇幅的笔记,与君共勉。