计算机语言:人和计算机交流的语言:C、Java、Python、C++(C plus plus)等。
计算机语言的发展:低级--->高级。
二进制指令--->汇编指令(助记符)--->B语言--->C语言
C语言的国际标准:ANSI-C:C89、C90、C99等。
编辑器只有编辑功能,编译器才有编译功能。
主要的编译器有:GCC,MSVC等。
Q:编译是什么?
A:C/C++是编译型的语言,是txt.c--->编译--->链接--->txt.exe
Q:为什么写代码?
A:为了解决生活中的问题。
第一个C语言程序
创建源文件:.c后缀的为源文件;.h为后缀的为头文件;。cpp后缀的为C++文件。
.cpp 编译器按照c++的语法编译代码
.c 编译器按照c的语法编译代码
#include<stdio.h>
//C语言中一定要有main函数
//主函数
//标准的主函数的写法
int main()
{
printf("123");//头文件中包含的函数
return 0;//返回的是int类型
}
//古老的写法-不推荐
//void main()
//{
//}
std--标准
i - input
o - output
return 0;表示返回的是正常值,约定的习惯。
main函数是程序的入口,有且仅有一个。
数据类型
char // 字符数据类型
short // 短整型
int // 整型
long // 长整型
long long // 更长的整型
float // 单精度浮点型
double // 双精度浮点型
计算机中的单位:bit、Byte、KB\MB\GB\TB\PB.
创建变量的本质:向内存申请空间。
int age = 20 ;
变量和常量
常量:不变的值
变量的定义
short age=20;
int high=180;
float weight=50.0;
局部变量与全局变量
int a=10;//全局变量
int main()
{
int b=20;//局部变量
int a=100;//当局部变量和全局变量名字相同的情况下,局部优先.
return 0;
}
VS编译是scanf报错的两个解决方案:
1. scanf 改为 scanf_s.是VS自己的函数,只有VS自己的编译器认识.(尽可能避免哈!!)
2.在源文件的第一行加上 #define _CRT_SECURE_NO_WARINGS (其他编译器不会理会)
(记得给自己电脑装everything,方便查找自己电脑的文件路径)
变量的作用域
变量在哪里可以使用,哪里就是变量的作用域。
1.局部变量的作用域就是局部变量的局部范围
int main()
{
{
int a=10;
printf("%d\n",a);
}
}
2.全局变量作用域是整个工程
int a=10;
void test()
{
printf("test-->%d\n", a);
}
int main()
{
test();
{
printf("%d\n", a);
}
printf("%d\n", a);
return 0;
}
3. 声明来自其他文件的全局变量
4.变量的生命周期
- 局部变量的生命周期:进入作用域开始--->出作用域结束
- 全局变量的生命周期:整个程序的生命周期
常量(学完数组再看一遍)
C语言的常量:
1. 字面常量
'w';//字符常量
"abc";//字符串常量
30;
2. const修饰的常变量
const int a = 10;
a = 20;//编译器不允许修改
printf("%d\n", a);
在C语言中,const修饰的a,本质是变量,但是不能被修改,有常量的属性。
const int n = 10;
int arr[n] = { 0 };//编译器在此处报错,表达式必须含有常量.说明n是一个变量
3. #define定义的标识符常量
4. 枚举常量
字符串
'' '' 双引号引起的是字符串.
C语言中没有字符串类型,没有字符串变量,可以用数组存储.
字符串的末尾自动添加了一个转义字符 \0 ,表示字符串到这里截止.
当用strlen求字符串长度,不计算 \0 的长度,只是在遇到时停止.
找不到 \0 时,strlen继续向下寻找,遇到其他空间的 \0 停止.产生越界
不完全初始化
字符数组中有未被初始化的元素,默认为初始化为 \0 ,
否则,strlen遇到 \0 停止
转移字符
\ 表示转义
转义:改变字符的意义.C语言规定的转义字符:
转义字符 释义
\? 在书写连续多个问号时使用,防止他们被解析成三字母词
\’ 用于表示字符常量’
\" 用于表示一个字符串内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。 如: \130 X
\xdd dd表示2个十六进制数
/*
\ddd :表示八进制数
\xdd :表示十六进制数
*/
int main()
{
printf("%c\n", '\130');
printf("%d\n", '\130');
printf("%c\n", '\x60');
printf("%d\n", '\x60');// \130,\x60代表的都是一个字符
return 0;
}
空格也是一个特殊的字符
转义字符算一个字符
\t \n 虽然效果是 有四个空格或者换行,但本质上算一个字符
注释
养成给自己的代码写注释的习惯
1.注释可以梳理思路
2.注释可以解释复杂的代码
3.写代码时写注释,能够帮助自己,帮助别人(doge).
//两种注释方法
// C++的注释分割
/*C的注释分割*/
int main()
{
int arr[10];/*解释这段代码*/
return 0;
}
//C注释的缺陷:/**/不支持嵌套注释
选择语句
1. if else 语句
2. switch 语句
循环语句
1. while循环
2.for循环
3.do while循环
函数
C语言是结构化的程序设计语言---->顺序结构\选择结构\循环结构.
参数(原材料)--->函数(工厂)----->结果(产品)
数组
数组存放一组相同类型的值.
数组的下标:每个元素都有下标,下标从0开始,数组通过下标访问元素.
int arr[]={0,1,2,3,4,5,6,7,8,9};
C99标准之前,数组的大小都是用常量或者常量表达式指定.
C99标准之后,支持变长数组,这时候允许数组的大小是变量,但这种指定的方式的数组是不能初始化的.
0的区分
1---> 0 数字0
2---> '0' 字符0 ASCII值是48
3----> '\0' 字符 ASCII值是0 和数字 0 没有区别
4----> EOF end of file 文件结束的标志是 -1