1.1第一个C语言程序
main函数是一个主函数,一个工程只有一个主函数
printf-库函数,在屏幕上打印信息的意思。printf使用需要打招呼-(#include<stdio.h>)
#include<stdio,h>
int main()
{
printf("hehe\n");
return 0;
}
1.2数据类型
sizeof的单位是字节-byte
char //字符数据类型 一个字节
eg:char ch ='a'
short //短整型 两个字节
~short num=10
int //整型 四个字节
~int age=20
long //长整型 四个字节
long long //更长的整型 八个字节
float //单精度浮点数 四个字节
~float weight =55.5
double //双精度浮点数 八个字节
%d -整型
%f-float
%lf-double
1.3变量、常量
1.3.1定义变量的方法:
语法形式为:type + name 如上eg
定义变量基本规则如下:
1)只能由字母(包括大写和小写),数字,下划线组成;
2)不能以数字开头;
3)长度不能超过63个字符(这纯纯抬杠,纯路人,没必要);
4)区分大写,小写;
5)变量名不能使用关键字;
6)变量的名字尽量有意义(提醒我们要了解部分英语单词)
1.3.2变量的分类
全局变量-外部定义的
局部变量-内部定义的
#include<stdio.h>
int global=2023;//全局变量
int main()
{
int local=2022;局部变量
int global=2022;
printf("global=%d\n",global)
return 0
}
经试验得知-当局部变量和全局变量名字冲突的情况下局部变量优先
1.3.3变量的使用
#define_CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a=0;
int b=0;
int sum=0;
scanf("%d %d",&a,&b);
sum=a+b
printf("sum=%d\n",sum)
return 0
}
scanf函数是输入函数
printf函数是输出函数
若没有第一行代码则会出现警告。
为什么会出现这个警告呢?是因为在vs中输入函数,人家自己有定义是scanf_s,而用scanf函数不安全
当然,我们还有其他方法来进行解决这个警告。
第一种方法很简单,就是直接把scanf改成scanf_s,这样vs就不会报错了,这种方式简单快捷,但直接复制粘贴后在别的编译软件上无法直接使用。因为scanf_s函数是vs编译提供的,不是C语言标准规定的。
第二种方法就是用图示第一行代码的方法来进行的
第三种方法是一劳永逸的,首先,你需要在你的vs文件夹中找到这么一个叫newc++file.cpp的文件,在文件中写入#define _CRT_SECURE_NO_WARNINGS,保存关闭即可,以后每当你打开vs,新建项目的时候,第一行就会自动出现这行代码。
1.3.4 变量的作用域和生命周期
作用域相当于数学上的定义域,即限定一段代码中所用到的名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域是变量所在的局部范围
全局变量的作用域是整个工程
生命周期是变量的创建到变量的销毁之间的一个时间段
局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束
全局变量的生命周期是:整个程序的生命周期
1.3.5常量
c语言中常量分为四种
1.字面常量
2.const修饰的常变量
const 修饰的常变量在C语言中只是在语法层面限制了变量不能直接被改变,但是他本质上还是一个变量,所以叫常变量。
int main()
{
const int num=10;//num就是常变量-具有常属性(不能被改变的属性)
num=20;//因此这样写是不行的
print("num=%d\n",num);
int arr[10]={0};//10个元素
const int n=10;
int arr2[n]={0};//n是变量,这里是不行的
return 0;
}
3.#define定义的标识符常量
#defineMAX 10000
int main()
{
int n=MAX;
printf("n=%d\n",n);
return 0
}
4.枚举常量--可以一一列举的常量
enum Sex
{
//这种枚举类型的变量的未来可能取值
MALE,
FEMALE,
SECRET
};
int main()
{
enum Sex s=MALE;
return 0;
}
1.4字符串+转义字符+注释
1.4.1字符串
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串 内容。
下面让我们来看一下\0的作用
如上代码所示arr2的数组没有\0,因此后面会出现一些乱码。
我们可以在后面自己加上\0就不会出现乱码了。
1.4.2转义字符
转义字符顾名思义就是转变原来的意思,是为了防止一些符号写在一起时,编译器误解他们的意思。下面,我们来进行介绍几个常用的转义字符。
再比如我们要在屏幕上打印一个目录 c:\code\text.c
它的实际运行结果如下:
这时候我们就要用到转义字符了
下面介绍几个转义字符
转义字符 | 释义 |
\? | 在书写中连续多个问号时使用,防止他们被解析成三字母词 |
\" | 用于表示一个字符串内部的双引号 |
\' | 用于表示字符常量 |
\\ | 用于表示一个斜杠 |
\n | 换行 |
\b | 退格符 |
\f | 进纸符 |
\ddd | ddd表示1-3个八进制的数字。如:\130 |
\xdd | dd表示2个十六进制数字。如\x30 |
下面是一道经典的题
问共有几个字符
答案是14
1.4.3注释
代码中有不需要的代码可以删除也可以注释掉。
代码比较多、复杂的时候可以加注释。
C语言注释风格:/* */
缺陷:不能镶嵌注释
C++语言注释风格://
注释一行也可多行
1.5选择语句
if else语句在C语言中属于选择结构。
1.6循环语句
while语句-讲解
for语句
do ... while语句
他们有一些区别使得他们适用的场景不太相同,如果已知循环的次数用for循环,如果不知道循环的次数用while循环,如果想要先循环一次则用do while循环。
while循环示例
1.7函数
在数学中,函数是描述变量之间的关系,在C语言中,我们用函数其实也是定义一个关系。
函数的特点是简化代码,代码复用。
1.8数组
1.8.1数组定义
数组:一种相同类型元素的集合。
数组可以初始化也可以不完全初始化
//完全初始化
int arr[3]={1,2,3};
//不完全初始化
int arr[3]={0};
1.8.2数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。 数组可以通过下标来访问。
如上图红色标记即代表下标。
1.8.3数组的使用
#include<stdio.h>
int main()
{
int i=0;
int arr[10]={1,2,3,4,5,6,7,8,9,10};
for (i=0;i<10;i++)
{
printf("%d",arr[i])
}
printf("\n");
return 0;
}
1.9操作符
算术操作符
+ - * / %(取模是%是除得到的余数)
//除号的两端都是整数的时候,执行整数除法,如果两端只要有一个浮点数 就执行浮点数除法
取模操作符两端必须是整数
移位操作符
>> <<
位操作符
& ^ |
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
单目操作符
前置++:先++,后使用
后置++:先使用,后++
关系操作符
逻辑操作符
&& 逻辑与 全真为真
|| 逻辑或 全假为假
条件操作符
exp1 ? exp2 : exp3
逗号表达式(用逗号隔开的一串表达式)
逗号表达式的特点是:从左到右依次计算,整个表达式的结果是最后一个表达式的结果。
exp1 exp2 exp3…
下标引用、函数调用和结构成员
[] () . ->
1.10常用关键字
1.10.1关键字typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
1.10.2关键字static
在C语言中:
static是用来修饰变量和函数的
1. 修饰局部变量-称为静态局部变量(局部变量出了作用域不销毁;本质上,static修饰局部变量的时候,改变了变量的存储位置)
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数
1.10.3关键字register
1.11#define 定义常量和宏
1.12指针
1.12.1内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地 址。
指针又叫地址,而指针变量是存储地址的一个变量
1.12.2 指针变量的大小
1.13结构体
结构体是把一些单一类型组合在一起的做法。