1. 什么是C语言
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言是一门面向过程的计算机编程语言,与C++、C#、Java、Python等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
2. C语言的特点
2.1 主要特点
(1)简洁的语言
(2)具有结构化的控制语句
(3)丰富的数据类型
(4)丰富的运算符
(5)可对物理地址进行直接操作
(6)代码具有较好的可移植性
(7)可生成高质量、目标代码执行效率高的程序
2.2 特有特点
(1)广泛性
C语言的运算范围的大小直接决定了其优劣性。C语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。此外,C语言包含了字符型、指针型等多种数据结构形式,因此,更为庞大的数据结构运算它也可以应付。
(2) 简洁性
9类控制语句和32个关键字是C语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的操作,提高其工作效率,同时还能够支持高级编程,避免了语言切换的繁琐。
(3)结构完善
C语言是一种结构化语言,它可以通过组建模块单位的形式实现模块化的应用程序,在系统描述方面具有显著优势,同时这一特性也使得它能够适应多种不同的编程要求,且执行效率高。
3. C语言的基本结构
C语言程序一般由一个或多个函数组成,函数是C语言的基本模块,每个函数由函数头和函数体组成。函数头包含函数名、传入该函数的信息类型和函数的返回类型。函数体被花括号括起来,由一系列语句组成。简而言之,一个可运行的基本的C语言程序结构如下:
#include<stdio.h>
int main()
{
语句;
return 0;
}
4. 第一个C语言程序
#include<stdio.h>
//这是C语言的头文件,包含了scanf()和printf()等C语言内置函数
//想要使用scanf()和printf()函数就必须包含这个头文件
int main()
{
printf("Hello World!\n"); //调用printf()函数进行屏幕输出并且用转义字符\n换行
return 0;
}
/*main函数又称为主函数,
它是C程序执行的起点,
任何C程序有且仅有一个main函数*/
/ ...... / 之间的内容为程序注释,C语言的标准注释方法以“/”开始,直到遇到“/”结束,适用于单行和多行注释,适用于单行和多行注释。
“//” 可用于单行注释。
注释主要用于增强程序的可读性,在编译时,编译器会忽略这些注释语句,但养成良好的注释习惯有助于程序使用者阅读和理解程序。
注意每条C语句都以分号“;”结束。
5. 数据类型
注意,计算机通常使用数字编码来处理字符,C语言使用了ASCII码,所以字符类型本质上是一种整数类型。
6. 变量与常量
生活中有些值是不变的(比如:身份证号码,血型等),有些值是可变的(比如:年龄,体重,薪资等)。C语言中将值不变的量用常量的来表示,将值可变的量用变量来表示
6.1 变量
6.1.1 变量的命名
(1)只能由字母(包括大写和小写)、数字和下划线( _ )组成。
(2)不能以数字开头。
(3)长度不能超过63个字符。
(4)变量名中区分大小写的。
(5)变量名不能使用关键字。
常见关键字:
6.1.2 变量的定义
int age = 32; //定义了一个整型变量age,值为32
double weight = 60.50; //定义了一个双精度浮点型变量weight,值为60.50
char ch = 'w'; //定义了一个字符型变量ch,值为'w'
6.1.3 变量的分类
变量分为局部变量和全局变量
#include <stdio.h>
int a = 2023;//全局变量
int main()
{
int b = 2024;//局部变量
int a = 2023;//局部变量
printf("a = %d\n", a); /*这里的%d是占位符,就是它在这个双引号字符串中先
为数字占据一个位置,%d是整型占位符*/
return 0;
}
上面的局部变量a变量的定义其实没有什么问题的。
当局部变量和全局变量同名的时候,局部变量优先使用!
6.1.4 变量的使用
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2); //用scanf()函数读取两个整数,接下来也会讲到
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
6.1.5 变量的作用域和生命周期
作用域,简单来说,就是某个变量名在某一段代码范围内是有效的,而在其它范围内无效,这个变量名在这段有效的范围就是这个变量的作用域
(1)局部变量的作用域是变量所在的局部范围。
(2)全局变量的作用域是整个工程。
生命周期,指的是变量的创建到变量的销毁之间的一个时间段
(1) 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
(2)全局变量的生命周期是:整个程序的生命周期。
#include<stdio.h>
int a = 10; //这里的a是全局变量,作用域是整个工程文件,生命周期是直到程序结束。
void f(int n)
{
int a = 20; //这里的a是局部变量,作用域是这个f函数,当f函数结束,这个a就会被销毁
printf("a = %d\n", a);
}
int main()
{
int b = a; //这里的b是局部变量,作用域是这个main函数,main函数结束,这个b就会被销毁
f(b);
printf("b = %d\n", b);
return 0;
}
6.2 常量
6.2.1 常量的分类
C语言中的常量分为以下以下几种:
(1)字面常量
(2)const 修饰的常变量
(3)#define 定义的标识符常量
(4)枚举常量
#include <stdio.h>
#define MAX 100 //#define 的标识符常量
enum color
{
red, //这里的red,blue,yellow 是枚举常量
blue,
yellow
};
int main()
{
//字面常量演示
//3.14; //字面常量
//1000; //字面常量
const double pi = 3.14; //const 修饰的常变量
printf("pi = %lf\n", pi); //const 修饰的常变量演示
printf("max = %d\n", MAX); //#define 的标识符常量演示
printf("red = %d\n", red); //枚举常量演示
printf("blue = %d\n", blue); //枚举常量演示
printf("yellow = %d\n", yellow); //枚举常量演示
//注:枚举常量的默认是从0开始,从上到下依次递增1
return 0;
}
上面代码中的define可以理解为查找替换,查找到MAX替换成100。上面代码中的red,blue,yellow属于枚举常量,red的值为0,从上到下依次加1。上面代码中的pi被称为const修饰的常变量,const修饰的常变量只是在C语言语法层面限制了变量pi不能直接被改变,但是 pi本质上还是一个变量,所以我们也把pi叫常变量。
7. C语言的占位符
8. 数据的输入与输出(scanf()函数和printf()函数用法)
8.1 scanf()函数
8.1.1 scanf()函数的作用
scanf()函数作用:简单来说,就是从键盘获得用户输入,按用户指定的格式从键盘上把数据输入到指定的变量之中。
8.1.2 scanf()函数的基本语法格式
scanf()函数的基本语法格式:scanf("占位符",&变量);
8.1.3 scanf()函数的的使用
#include<stdio.h>
int main()
{
int a = 0, b = 0; //将a,b变量初始化为0
scanf("%d %d", &a, &b); //输入两个整数并依次赋值给变量a,b
printf("a + b = %d", a + b); //计算a+b的值并且输出
return 0;
}
此时我们按下键盘的 Ctrl+F5
得到如下的黑框框(这里我使用的编译器是Visual Studio 2022,注意此时光标的位置):
我们输入3,再按空格键,再输入5得到下图(注意此时光标的位置):
此时我们按下回车键(Enter键),便可得到下图的结果
注意:scanf()函数一定不能忘记&,这个符号的意思是取地址!!!
8.2 printf()函数
8.2.1 printf()函数的作用
printf()函数作用,简单来说,就是将变量的内容输出到显示器(屏幕)上。
8.2.2 printf()函数的基本语法格式
printf()函数的基本语法格式:printf("占位符",变量);
也可用printf()函数直接输出一句话,语法格式:printf(“字符串” );
8.2.3 printf()函数的使用
#include<stdio.h>
int main()
{
int a = 666;
printf("Hello World!\n"); /*在屏幕中输出"Hello World!",
并用\n换行,\n是转义字符,接下来会讲到*/
printf("a = %d\n", a); //将a的值输出在屏幕中
return 0;
}
按Crtl+F5,得到下图结果:
9. 字符串
这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
注意:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
10. 转义字符
假如我们要在屏幕上打印一个目录: c:\code\test.c
我们该如何写代码?
初学者很容易想到下图的写法:
#include<stdio.h>
int main()
{
printf("c:\code\test.c\n");
return 0;
}
而实际上,通过运行代码,我们会发现程序的运行结果是这样的:
这里我们就得引入转义字符了,转义字符,顾名思义,就是转变意思。
以下是常见的转义字符:
我们回到上面的问题,通过学习了转义字符\,我们就能解决上面的问题了,代码如下:
#include<stdio.h>
int main()
{
printf("c:\\code\\test.c\n");
return 0;
}
运行结果如下:
那么我们想在在屏幕上打印一个单引号',该怎么做?想在屏幕上打印一个字符串,字符串的内容是一个双引号“,又该怎么做?
#include <stdio.h>
int main()
{
printf("%c\n", '\''); //在屏幕中打印出单引号
printf("%s\n", "\""); //在屏幕中打印出双引号
return 0;
}
运行结果如下:
11. 操作符
简单了解一下操作符: