1.第一个程序
#include <stdio.h>
int main()
{
printf("hello world");
return 0;
}
main函数叫主函数,主函数是程序的入口,C语言代码中必须有主函数,但是有且仅有一个主函数。
一个工程(项目)中可以有多个.c文件,但是多个.c文件中只能有一个main函数。
include 是包含的意思
下面的代码就是包含stdio.h这个头文件
#include <stdio.h>
stidio - standard input output 标准输入输出头文件
printf(""); - printf就是输出函数,用来把数据打印在屏幕上
未来涉及输入输出的函数都要包含这个头文件
VS2019 - 集成开发环境 - IDE 包含:编辑器、编译器、连接器、调试器。
2.数据类型:
1.整形类型
char //字符数据类型 short //短整型
int //整形 long //长整形
longlong //更长的整形
2.浮点数 ---> 小数
float //单精度浮点数 double //双精度浮点数
类型所占空间大小(字节):
sizeof 是一个操作符(关键字),是计算变量的大小的
printf("%d\n",sizeof(char));//所占字节 - 1
printf("%d\n",sizeof(short));//所占字节 - 2
printf("%d\n",sizeof(int));//所占字节 - 4
printf("%d\n",sizeof(long));//所占字节 - 4/8 - 32位机器占4个字节,64机器位占8个字节
printf("%d\n",sizeof(long long));//所占字节 - 8
printf("%d\n",sizeof(float));//所占字节 - 4
printf("%d\n",sizeof(double));//所占字节 - 8
%c打印字符
%d打印整形
%f打印浮点数 打小数
%lf打印双精度浮点数
%p以地址的形式打印
%x打印16进制数字
%s打印字符串型格式符
%o打印八进制数字
%e指数形式的浮点数
%g自动选择合适的表示法
1.对于%d:
(1)%md:m表示指定输出的宽带。数据位数小于m,左端补空格;大于m,按实际位数输出。比如说%3d表示输出3位整形数,不够三位右对齐。若想在输出值前加一些0, 就应在场宽项前加个0。例如%04d 表示在输出一个小于4位的数值时,将在前面补0使其总宽度为4位。
(2)%ld: 输出长整型数据。
(3)%-md:可以控制输出左对齐,没有则说明右对齐。
2、对于%f:
(1)%m.nf:表示最大场宽为m,小数位为n,整数为则为m-n-1,不够m为右对齐。 例如:%6.2f表示输出场宽为9的浮点数,小数点后保留2为小数,整数位为3位,小数点占一位。
(2)%-m.nf:表示可以控制输出左对齐。
(3)%lf:表示输出double型浮点数。
3、对于%s
(1)%-5s:表示输出5个字符左对齐,没有负号则右对齐。
(2)%6.9s:表示一个长度不小于6且不大于9的字符串,若大于9,则第9个后面的字符将被删除。
计算机常见的单位:
bit - 比特位 8it = 1byte
byte - 字节 1024 byte = 1KB
KB 1024KB = 1MB
MB 1024MB = 1GB
GB 1024GB = 1Tb
TB 1024TB = 1PB
PB .........
数据取值范围
unsigned(无符号)和signed(有符号)
signed int == int(以下省略signed)
unsigned char 取值范围(0 ~ 255)
char 取值范围(-128 ~ 127)
unsigned short 取值范围(0 ~ 65535)
short 取值范围(-32768 ~ 32767)
unsigned int 取值范围(0 ~ 4294967295)
int 取值范围(-2147483648 ~ 2147483647)
unsigned long(0 ~ 4,294,967,295)
long(-2,147,483,648 ~ 2,147,483,647)
unsigned long long ......
long long ......
unsigned float ......
float ......
unsigned double ......
double ......
(太长懒得弄)
注意:存在这么多的类型,是为了更加丰富的表达各种值
类型的使用:
char ch = 't'; - 用单引号引起来的是字符t不能直接写t,ch是变量名(名字)它的类型是char。
int n = 20;
float a = 3.14f;
注:类型是用来创建变量的。
3.变量、常量
常量:生活中的有些值是不变的(比如:圆周率,性别,身份证等)。
变量:有些值是可变的(比如:年龄,身高,体重等)。
不变的值,C语言中用常量的概念来表示,变的值C语言中用变量来表示。
定义变量的方法
int age = 120;
char ch = 't';
float weight = 45.5f;
int m = 0;//在创建变量的同时给一个初始值
int m;//不好的习惯,打印的时候打印的是随机值
注:建议不要乱命名
变量的命名
1.只能由字母(包括大写和小写)、数字和下划线(_)组成
2.不能以数字开头
3.长度不能超过63个字符。
4.变量名中区分大小写的。
5.变量名不能使用关键字。
变量的分类
*局部变量
*全局变量
int a = 10;//全局变量
int main()
{
int b = 20;//局部变量
return 0;
}
//变量名尽量不要冲突
变量的使用
scanf是C语言提供的,scanf_s是VS提供的
//scanf、strcpy、strcat、这些函数,VS都会提示不安全
为了能够正常使用,我们在.c文件的第一行,加上:#define _CRT_SECURE_NO_WARINGS 1 就可以了
为了一劳永逸的解决以后的问题
我们可以在newc++file.cpp 这个文件站加入#define _CRT_SECURE_NO_WARINGS 1
以后新建的的文件中都会自动加上:#define _CRT_SECURE_NO_WARINGS 1
变量的作用域和生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不是总是有效的而限定这个名字的可用性的代码范围就是这个名字的作用域。
1.局部变量的作用域是变量所在的局部范围。
2.全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
2.全局变量的生命周期是:整个程序的生命周期。
哪里可以使用他哪里就是他的作用域,如上面的int a是一个局部变量,"{}"大括号就是他的作用域,出了大括号(作用域)他的生命周期就结束。
一对{}是一个作用域专业术语叫一个代码块。
声明在{}外的变量就是全局变量如:
另一种用法:
如果想使用外部符号就要用到extern关键字
全局变量的作用域和他的生命周期就是整个工程(整个项目)
常量
C语言中的常量和变量的定义的形式有所差异,常量分为以下这几种:
1.字面常量
2.const修饰的常变量
3.#define定义的标识符常量
4.枚举常量
int arr[]是一个数组后面会解释。
#define定义宏
其定义的一般形式为:#define 标识符 (字符串、字符、表达式)
他的作用是指定标识符M(M又称为宏名)来代替100,在执行程序时会把M替换成100。
枚举常量
编译器默认的值
4.字符串+转义字符+注释
"hello world.\n"
这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。字符串的结束标志是一个\0的转义字符。
在计算字符串长度的时候\0是结束标志,不算作字符串内容。
为什么ch1打印的是35?因为strlen在求长度的时候没有遇到\0所以打印的是随机值。
加入\0之后打印的值。
单引号代表字符,比如'1'代表字符1而不是数字1(末尾不会加'\0')。双引号代表的是字符串,一个字符串是由多个字符组成的,比如“hello”6个字符组成的字符串。(是6个不是5个,因为字符串的末尾会自动加一个‘\0’字符)多个字符放到""(双引号)里面,单个字符放到''(单引号)里面
char [] 如果不指定大小会根据内容初始化来指定大小
''单引号可以自己加入\0。
转义字符
转义:转变原来的意义
\t - 水平制表符
\? - 在书写连续多个问号是使用,防止他们被解析成三字母符
\' - 用于表示字符常量'
\" - 用于表示一个字符串内部的双引号
\\ - 用于表示一个反斜杠,防止他被解释为一个转义序列符
\a - 警告字符,蜂鸣
\b - 退格符
\f - 进纸符
\n - 换行
\r - 回车
\v - 垂直制表符
\ddd - ddd表示1-3个八进制的数字。如:\130x : 斜杆后面直接是数字的话是八进制
\xdd - dd表示2个十六进制数字。如:\x30 0 : 斜杆后面跟着x后面两个数字是十六进制
在c语言中有九种三字母词,如下:
1.??= # 4.??) ] 7.??! |
2.??( [ 5.??' ^ 8.??> }
3.??/ \ 6.??< { 9.??- ~
注:有些编译器不支持。
加上\就能让他变成字符打印出来,不然就会报错。
\ddd 和 \xdd
为什么打印7和F?因为八进制和十六进制会转换成十进制,然后再打印对应的ASCII表的值。
ASCII码表
以下这题长度多少?
一个转义字符长度算1。
\0也是转义字符,ASCII码表的值是0。
注释
1.代码有有不需要的代码可以直接删除,也可以注释掉
2.代码中有些代码比较难,可以加一下注释文字
注释有两种风格
•c语言风格的注释/*xxxxxxx*/
缺陷:不能嵌套注释
•c++风格的注释//xxxxxx
可以注释一行也可以注释多行