注:初识C语言是关于C语言的概念,未做详细介绍
如何学习C语言
- 软件使用VS2019
- 必须实践--敲代码
- 必须画图理解,内存布局
- 调试很重要
- 模仿写代码,按照别人的思路和自己的语法写代码
- 可以在牛客网刷题
安装C语言学习环境
- https://visualstudio.microsoft.com/zh-hans/vs/ ---VS官网,选择安装社区版安装VS时,在工作负荷栏目下选择【使用C++的桌面应用开发】,可选项组件选择默认即可安装好后,如果不登录可以免费使用30天。
- 启动VS--创建新项目--空项目--【设置项目名称和保存位置】下一步--完成新项目的创建
- 右键点击源文件---添加---新建项目--C++文件--填写文件名称--创建文件
tips:
- 在VS中使用scnaf函数会报错不安全,在C文件的开头,添加如下定义可以解决这个报错:【#define _CRT_SECURE_NO_WARNINGS 1】
- 将上面的定义语句添加到VS的系统文件【newc++file.cpp】中,就可以在创建C文件时自动加上此定义语句:
- 【newc++file.cpp】文件的路劲(不同的安装路径会有差别):D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCProjectItems\newc++file.cpp
什么是C语言
- C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言
- C语言是一门面向过程的计算机编程语言
- 其编译器主要有:Clang、GCC、WIN-TC、SUBLIME
第一个C语言程序
1.打开VS
2.创建项目
3.创建源文件(.c)(如果后缀是C++就是按C++的语法编译)
4.写代码
#include <stdio.h>
int main() //C语言一定要有main函数
{
printf("hehe\n"); //printf是一个库函数
return 0; //通常C语言正常运行返回0,异常返回1
}
数据类型
char //字符数据类型 1bit
short //短整型 2bit
int //整型 4bit
long //长整型 4bit
long long //更长的整型 8bit
float //单精度浮点型 4bit
double //双精度浮点数 8bit
数据类型的多种形式是为了丰富的表达生活中的各种值
tips:
如何知道数据类型所占空间大小?
- #include <stdio.h> int main() { printf("%d\n",sizeof(char)); printf("%d\n", sizeof(short)); printf("%d\n", sizeof(int)); printf("%d\n", sizeof(long)); printf("%d\n", sizeof(long long)); printf("%d\n", sizeof(float)); printf("%d\n", sizeof(double)); return 0; }
变量和常量
变量分为局部变量和全局变量
int a = 100; //全局变量
int main()
{
int a = 10; //局部变量
printf("a=%d\n",a);
return 0;
}
当全局变量和局部变量重复定义的时候,局部优先
例:
- 求两个整数的和
- #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int num1; //定义变量 int num2; //输入数据 scanf("%d %d", &num1, &num2); //求和
- int sum = num1 + num2; printf("%d", sum); //打印输出 return 0; }
变量的作用域和生命周期
作用域:限定这个名字的可用性的代码范围就是这个名字的作用域
局部变量的作用域是变量所在的局部范围
全局变量的作用域是整个工程
生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
全局变量的生命周期是整个程序的生命周期
tips:
例:extern int a;
可以用来申明来自外部的整型变量 int a;
常量
常量分为以下几种:
字面常量
const 修饰的常量
#define 定义的标识符常量
枚举常量
字面常量:直接编辑的数字或字符、字符串就是字面常量。例如:3、6、a。
const常量:在变量前加const修饰,该变量即具有常量的属性,不能被修改。例:const int a = 10; a的值不能再被修改,已经具有了常量的属性。
例:
const int n = 10;
int arr[n] = {0};
数组中的n需要为常量,但是添加了const修饰的变量n虽然具有常量的属性,但本质仍是变量,所以不可用于数组中的n。这个例子说明了const修饰的变量本质仍然变量而不是常量。
#define 用来定义标识符常量
例:#define max 100; //定义标识符max为100
#define STR "abcd"; //定义标识符为字符串”abcd“
枚举常量:
enum color //枚举常量类型
{
//枚举常量的值
RED,
GREEN,
BLUE
};
例:
//color类型的常量c的值为RED
enum color c = RED;
- 个人理解:枚举类型就是将一些比较固定的值一一列举出来,比如一年有十二个月,一个礼拜有七天,这是毫无疑问的,就可以将这些月份天数用常量来代替。枚举类型和宏定义是差不多的,只有细微区别,宏运行是在预处理阶段完成的,枚举类型是在与编译阶段完成的。
- 以下代码定义了这种新的数据类型 - 枚举型 enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; (1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。 (2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。 (3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。 (4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。 (5) 枚举型是预处理指令#define的替代。 (6) 类型定义以分号;结束。
- 例子
- 我们也可以给每个名字都指定一个值: enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 }; 因为枚举值是默认从第一个的值开始递增的,所以以上代码还有一种更简洁的代码写法2: enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
使用枚举类型对变量声明的几种方式:
- 1.枚举类型的定义和变量的声明分开: enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; int main() { enum DAY yesterday; enum DAY today; enum DAY tomorrow; //变量tomorrow的类型为枚举型enum DAY enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum DAY
- 2. 类型定义与变量声明同时进行: int main() { enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量days的类型为枚举型enum week enum BOOLEAN { false, true } end_flag, match_flag; //定义枚举类型并声明了两个枚举型变量
} 3. 用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明;
字符串
C语言中有没有字符串类型?---没有
字符串如何表示?
1."abcdef"
2.char arr[] = {'a','b','c','d','e','f','\0'};
重点: 字符串是以\0结束的;
如果 arr[] 未填写字符的长度,则会根据初始化的内容来确认其元素个数
strlen(); //求字符串长度的一个函数,string length
int len = strlen("abc"); //求字符串长度,头文件string.h
转义字符
\? 书写多个问号时,防止解析成三字母
\' 用于表示字符常量'
\“ 用于表示一个字符串内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\a 警告字符,蜂鸣
\b 退格符
\n 换行
\r 回车
\v 垂直制表符
\t 水平制表符
\ddd ddd表示1-3个八进制的数字
\xdd dd表示2个十六进制的数字
注释
两种注释方式:
/*
*/
或
//
使用多行注释时,要主要防止嵌套使用引起的错误。
数组:
数组定义:
int arr[10] = {1,2,3,4,5,6,7,8,9,10}; //整型数组
数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的
数组可以通过下标来访问