目录
[1. 什么是C语言?](#1. 什么是C语言?)
[1.1 ANSI C](#1.1 ANSI C)
[2. 第一个C语言程序](#2. 第一个C语言程序)
[2.1 编写代码](#2.1 编写代码)
[3. 数据类型](#3. 数据类型)
[3.1 每个类型的大小?](#3.1 每个类型的大小?)
[3.2 计算机中的单位](#3.2 计算机中的单位)
[3.3 变量的简单使用](#3.3 变量的简单使用)
[4. 变量和常量](#4. 变量和常量)
[4.1 变量的分类](#4.1 变量的分类)
[4.2 变量的实践使用](#4.2 变量的实践使用)
[4.3 变量的作用域和生命周期](#4.3 变量的作用域和生命周期)
[4.3.1 作用域](#4.3.1 作用域)
[4.3.2 生命周期](#4.3.2 生命周期)
[4.4 常量](#4.4 常量)
1. 什么是C语言?
一门通用的`计算机编程语言`,底层开发。设计目标,提供一种能以简易的方式`编译`、处理低级`存储器`···
1.1 ANSI C
C语言的国际标准(美国国家标准局制定)。
计算机语言的发展:低级------------------------>高级
二进制的指令(1010)--->汇编指令(助记符)--->B语言--->C语言
第一代语言:机器语言
机器语言是计算机能直接识别的语言,由二进制代码组成,人类难以理解。这种语言本质上是计算机能识别的唯一语言,以后的语言都是在此基础上简化而来。
第二代语言:汇编语言
汇编语言用助记符代替了操作码,用地址符号或标号代替地址码,大大进步了。尽管还是复杂,用起来容易出错,但在计算机语言发展史上是机器语言向更高级的语言进化的桥梁。
第三代语言:高级语言
高级语言是一种接近于人们使用习惯的程序设计语言,允许用英文写计算程序,程序中的符号和算式也与日常用的数学式子差不多,因此更容易操控。高级语言发展于20世纪50年代中叶到70年代,流行的高级语言如BASIC、FORTRAN、COBOL、C等已经开始固化在计算机内存里。
C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC 、WIN-TC、MSVC、Turbo C等。
编辑器:编辑
编译器:编译
什么是编译?C/C++都是编译型语言。
test.c--->编译--->链接--->test.exe(windows编译成exe文件,linux编译成erp文件)
什么是解释?Python/JavaScript是解释型语言。
test.py--->解释器
2. 第一个C语言程序
打开VS---创建项目---创建源文件(.c源文件 .h头文件)---编写代码
创建源文件时一定要注意后缀。
.cpp 编译器会按照C++的语法来编译代码。
.c 编译器会按照C的语法来编译代码。
在VS code中编写C/C++代码------这篇文章也很好
2.1 编写代码
C语言代码中一定要有main函数(主函数)。printf是一个库函数,专门用来打印数据的。
vs2019环境如何运行代码:ctrl + F5 或 Fn+ctrl+F5 (原始键盘功能Fn)(现有娱乐功能)
多行注释快捷键:Ctrl + /
cpp
//std:标准
//i:input
//o:output
#include <stdio.h> //包含头文件,告诉要使用库函数printf
cpp
//标准的主函数写法
int main() //int:整型类型
{
return 0; //0:整数
}
//古老的写法:不推荐
// void main()
// {
// }
cpp
#include <stdio.h>
int main()
{
printf("hehe\n"); // \n表示换行
return 0;
}
//解释:main函数是程序的入口,一个工程中main函数有且仅有一个
3. 数据类型
cpp
1、内置的数据类型
整型、浮点型、字符型
char //字符数据类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点数
double //双精度浮点数
2、自定义的数据类型
如结构体(struct)、枚举···
为什么出现这么多类型?丰富表达生活中的各种值。
3.1 每个类型的大小?
cpp
#include <stdio.h>
int main()
{
printf("%d\n",100); //100
printf("%zu\n",sizeof(char)); //1字节
printf("%zu\n",sizeof(short)); //2字节
printf("%zu\n",sizeof(int)); //4字节
printf("%zu\n",sizeof(long)); //4字节
printf("%zu\n",sizeof(long long)); //8字节
printf("%zu\n",sizeof(float)); //4字节
printf("%zu\n",sizeof(double)); //8字节
return 0;
}
%d输出int型,%zu输出size_t型。size_t在库中定义为unsigned int。
一个是整型,一个是无符号整型。
补充:如果%zu不能使用,可以用%u取代。但%zu不能输出负数。
3.2 计算机中的单位
cpp
bit:比特位
Byte:字节
kb
mb
gb
tb
pb
1Byte=8bit
1kb=1024Byte
1mb=1024kb
1gb=1024mb
1tb=1024gb
1pb=1024tb
3.3 变量的简单使用
cpp
int main()
{
int age = 20; //向内存申请int类型的空间大小,并将数据20放进去。类型是用来创建变量的;创建变量的本质是向内存申请空间
double price = 66.6;
return 0;
}
4. 变量和常量
生活中有些值是不变的(比如:圆周率、性别、身份证号码、血型等等)
有些值是可变的(比如:年龄、体重、薪资等等)
不变的值,C语言中用常量 表示;可变的值C语言用变量表示。
4.1 变量的分类
变量分为局部变量和全局变量。
局部变量:{}内部定义的变量
全局变量:{}外部定义的变量
cpp
int b = 20; //全局变量
int main()
{
int a = 10; //局部变量
return 0;
}
cpp
#include <stdio.h>
int a = 100;
int main()
{
int a = 10;
printf("a=%d\n",a); //当全局变量和局部变量名字相同时,局部变量优先。建议全局变量和局部变量名字不要相同
return 0;
}
//输出a=10
4.2 变量的实践使用
cpp
//写一个代码,计算2个整数的和
//scanf()是一个输入函数,printf()是一个输出函数
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0; //初始化变量
//输入2个整数
scanf("%d %d",&num1,&num2);
//求和
int sum = num1 + num2;
//输出
printf("%d\n",sum);
return 0;
}
若运行报错如下:
C6031 返回值被忽略:"scanf"
C4996 'scanf':This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use CRT_SECURE_NO_WARNINGS. See online help for details.
提示使用scanf_s函数,scanf_s函数是VS编译器自己提供的函数,非标准C提供的函数,那也就是只有VS编译器认识,其它编译器不认识!我的建议是使用scanf函数,如果非要使用scanf_s函数,请研究后再使用!
解决方法:
1、在源文件的第一行放如下代码:#define _CRT_SECURE_NO_WARNINGS 1
2、一劳永逸的方法:(创建源文件时,自动生成#define ···)
在VS的安装路径下有一个文件:newc++file.cpp,在VS工程中创建新的.c或者.cpp文件的时候,都是拷贝newc++file.cpp这个文件的!
1)下载everything,寻找newc++file.cpp文件
2)直接用记事本打开,添加后保存无管理员权限(将newc++file.cpp文件复制一份到桌面,修改后保存,再替换原位置的文件)
4.3 变量的作用域和生命周期
4.3.1 作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的。而限定这个名字的可用性的代码范围就是这个名字的作用域。
cpp
//局部变量的作用域是变量所在的局部范围
#include <stdio.h>
int main()
{
{
int a = 10;
printf("%d\n",a); //10
}
printf("%d\n",a); //报错
return 0;
}
cpp
#include <stdio.h>
int main()
{
int a = 10;
{
printf("%d\n",a); //10
}
printf("%d\n",a); //10
return 0;
}
cpp
//全局变量的作用域是整个工程
//add.c
int a = 100;
//test.c
#include <stdio.h>
extern int a; //声明来自外部的符号
void test() //创建一个函数
{
printf("%d\n",a);
}
int main()
{
test(); //调用函数,执行后结果:100
{
printf("%d\n",a); //100
}
printf("%d\n",a); //100
return 0;
}
4.3.2 生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。
全局变量的生命周期:整个程序的生命周期。
4.4 常量
字面常量、const修饰的常变量、#define 定义的标识符常量、枚举常量
1、字面常量
cpp
int main()
{
30;
3.14;
'w'; //字符
"abc";//字符串
}
2、const修饰的常变量
cpp
#include <stdio.h>
int main()
{
const int a = 10; //在C语言中,const修饰的a,本质是变量,但是不能直接修改,有常量的属性
a = 20;
printf("%d\n",a); //20
return 0;
}
//添加const修饰后程序报错
cpp
//案列2:理解本质上是变量
int main()
{
const int n = 10;
int arr[n] = {0}; //error,arr[n]中的n必须是常量,而const修饰的n本质上是个变量
return 0;
}
3、#define 定义的标识符常量
cpp
#define MAX 100
#define STR "abcdef"
#include <stdio.h>
int main()
{
printf("%d\n",MAX); //100
int a = MAX;
printf("%d\n",a); //100
printf("%s\n",STR); //abcdef,%s:打印字符串
return 0;
}
4、枚举常量
cpp
enum Color
{
//枚举常量,三原色,红蓝绿
RED,
GREEN,
BLUE
};
int main()
{
int num = 10;
enum Color c = RED;
RED = 20; //error
return 0;
}
最近所学,运用代码来解释概念而非死记硬背,大家可以尝试多敲代码多体验结果。本周就暂且更新至此吧,期待下周再会。如有错误还请不吝赐教。