前言
大家好!我是EnigmaCoder。本文收录于我的专栏C,希望能帮助到您! 🚀🚀🚀
- 前文我们讲解了该如何搭建环境。
链接: C语言【基础篇】之搭建环境——从新手到实战的必备前奏- 本文我们介绍一下C语言最基础的一些知识,为构建程序大厦打好基石。
🤔第一个程序分析
- Hello World程序分析
#include<stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
1. #include<stdio.h>
- 这是代码的第一行,它的作用是告诉编译器:“我们需要用到标准输入输出库的功能。”而
#include
是一个预处理指令,意思是“把某个文件的内容包含进来”。<stdio.h>
是一个头文件,它包含了标准输入输出(Standard Input/Output)相关的功能。为什么需要它? 因为我们的程序要用到printf
函数来打印文字,而printf
函数的功能定义在stdio.h
文件里。如果不包含这个文件,编译器就不知道printf
是什么。
int main()
- 这是程序的入口点,也就是程序开始执行的地方。
int
是一个数据类型,表示“整数”。这里的意思是,main
函数执行完成后会返回一个整数。main
是一个特殊的函数名,表示这是程序的“主函数”。()
表示这是一个函数。函数就像一个“小机器”,可以完成特定的任务。为什么需要它? 因为每个C语言程序都必须有一个 main 函数,程序从这里开始运行。
{
和}
- 这两个符号是大括号,用来表示代码块的开始和结束。
{
表示代码块的开始。
}
表示代码块的结束。
为什么需要它? 因为main
函数是一个代码块,里面包含了一系列要执行的指令。
printf("Hello World!");
- 这是程序的主要功能部分,用来在屏幕上打印文字。
printf
是一个函数,用来输出格式化的文本。("Hello World!"
) 是 printf 函数的参数,告诉它要输出的内容。""
表示这是一个字符串。!
是字符串的一部分,表示感叹号。为什么需要它? 因为我们的目标是让程序在屏幕上显示“Hello World!
”。
return 0;
- 这是程序的结束语句。
return
是一个关键字,表示返回一个值。0
是返回的值,表示程序成功执行。为什么需要它? 在C语言中,程序执行完成后需要返回一个值。返回0
是一种约定,表示程序正常结束。
- 总结
一个代码的组成,必须要有预处理部分#include<stdio.h>
和函数的主入口int main()
。要注意的是,main函数后要加()
,而且要是英文字符。主函数的主体要用{}
括起来。函数的最后要写return 0
,表示程序正常结束。
✍️注释
#include<stdio.h> // 包含标准输入输出库的头文件,用于使用printf等函数。
int main() // 主函数,程序的入口。
{
printf("Hello World!"); // 使用printf函数输出字符串 "Hello World!"。
return 0; // 程序正常结束,返回0表示成功。
}
注释是程序中解释说明性的文字。例如·,//
后面的即为注释。注释是用来给人看的,计算机并不会执行。其作用主要在于增加代码的阅读性。
- 分类
//
单行注释。/* */
多行注释。
- 扩展
- 快捷键(选中后):Ctrl+K+C(注释) 、Ctrl+K+U(取消注释)。
- 注释不要嵌套。
🐧常量与变量
- 常量指的是在程序运行期间值不变,且不能被改变的量。其特点在于编译阶段就确定了其值。下面介绍几种常见常量类型。
- 分类
常量类型 | 定义 | 表示形式 | 示例 | 取值范围 | 存储大小 |
---|---|---|---|---|---|
整型常量 | 值固定的整数 | 十进制、八进制(0开头)、十六进制(0x开头) | 10、012、0xA | 依类型而定,如int 一般是-2147483648 到 2147483647 | int 通常4字节 |
实型常量 | 值固定的小数或指数值 | 小数形式、指数形式(e或E表示指数) | 3.14、2.5e2 | float 约±1.175494351×10⁻³⁸ 到 ±3.402823466×10³⁸ ;double 范围更大 | float 4字节,double 8字节 |
字符常量 | 值固定的单个字符 | 普通字符(单引号)、转义字符(\开头) | ‘a’、‘\n’ | ASCII码0 - 255 | 1字节 |
字符串常量 | 值固定的字符序列 | 双引号括起来 | “hello” | 无固定范围,受内存限制 | 字符数+1(含结束符’\0’) |
枚举常量 | enum 定义的成员,值固定 | 定义时指定成员名,默认从0赋值,可手动指定 | enum Weekday{Mon, Tue}; ,Mon为0 | 本质整型,依定义而定 | 通常4字节 |
符号常量 | 用#define 或const 定义的常量 | #define 标识符 值 ;const 类型 标识符=值 | #define PI 3.14 ;const int MAX=100; | 依定义的数据类型而定 | 依定义的数据类型而定 |
- 与常量相反,变量指的是在程序运行过程中,其值可以改变的量。需要先定义,确定数据类型和名称,占用一定内存空间,通过变量名访问和修改其值。
- 分类
变量类型 | 定义 | 示例 | 取值范围 | 存储大小 | 使用场景 |
---|---|---|---|---|---|
整型变量 | 用于存储整数 | int num = 10; short int a; long int b = 100000L; long long int c = 1234567890123456789LL; | int :通常-2147483648 到 2147483647 short int :较小范围整数 long int :更大范围整数,不同系统有差异 long long int :更大范围整数 | int :通常4字节 short int :2字节 long int :32位系统4字节,64位系统8字节 long long int :8字节 | 循环计数、数组下标、简单数学运算 |
实型变量 | 用于存储小数 | float f = 3.14f; double d = 2.5; | float :约±1.175494351×10⁻³⁸ 到 ±3.402823466×10³⁸ double :约±2.2250738585072014×10⁻³⁰⁸ 到 ±1.7976931348623157×10³⁰⁸ | float :4字节 double :8字节 | 科学计算、金融计算 |
字符变量 | 用于存储单个字符 | char ch = 'a'; | ASCII码0 - 255 | 1字节 | 字符串处理、文本输出格式化控制 |
指针变量 | 用于存储内存地址 | int *p; 若有 int num = 10; ,则p = # | 取决于操作系统寻址能力 | 32位系统4字节,64位系统8字节 | 动态内存分配、函数参数传递地址 |
数组变量 | 用于存储多个相同类型数据 | int arr[5] = {1, 2, 3, 4, 5}; char str[10] = "hello"; | 依数组元素类型而定 | 数组总大小为元素个数×单个元素大小 | 批量数据存储和处理、字符串存储 |
结构体变量 | 用于组合不同类型数据 | struct Student {int id; char name[20]; float score;}; struct Student stu = {1, "Tom", 85.5f}; | 依结构体成员类型而定 | 所有成员大小之和,可能含内存对齐填充 | 表示复杂数据结构,如学生信息、员工信息 |
共用体变量 | 所有成员共享内存空间 | union Data {int num; float f; char ch;}; union Data data; data.num = 10; | 依共用体最大成员类型而定 | 最大成员大小 | 节省内存,不同时刻使用不同类型数据 |
🐍强制类型转换
-
在操作符中有一种特殊的操作符是强制类型转换。
-
语法:(类型)。
-
整数与浮点数的转换
#include <stdio.h>
int main() {
float a = 5.8f;
int b = (int)a;
printf("浮点数%.2f 强制转换为整数后是 %d\n", a, b);
return 0;
}
- 字符与整数的转换
#include <stdio.h>
int main() {
char ch = 'A';
int num = (int)ch;
printf("字符%c 对应的ASCII码是 %d\n", ch, num);
return 0;
}
🖊️标识符与关键字
- 标识符
- 标识符就是用户为变量函数数组结构体等命名的符号用于在程序中标识和引用这些元素。
- 命名规则:由字母、数字和下划线组成且必须以字母或下划线,开头不能与C语言中的关键字相同,而且要区分大小写。
- 程序员为了代码的可阅读性,常常使用相关联的英文单词进行命名。
- 关键字
- 关键字是C语言中具有特定含义和用途,被编译器预定义的单词。
- 例如,
auto
、break
、case
、char
、const
等。 - 其不能作为变量名、函数名。
🌟scanf与printf介绍
在介绍scanf
与printf
函数之前,我们先了解一下占位符。
- 在C语言中,占位符是在格式化输入输出函数中用于指定数据输出或输入格式的特殊字符。
- 常见占位符及其作用:
%d
:用于输出或输入有符号十进制整数。如 printf(“%d”, 10); 会输出 10 。%u
:用于输出或输入无符号十进制整数。%f
:用于输出或输入单精度浮点数。默认保留6位小数,如 printf(“%f”, 3.14); 会输出 3.140000 。%lf
:用于输出或输入双精度浮点数。%c
:用于输出或输入单个字符。如 char ch = ‘A’; printf(“%c”, ch); 会输出 A 。%s
:用于输出或输入字符串。如 char str[] = “hello”; printf(“%s”, str); 会输出 hello 。%x
或%X
:用于以十六进制形式输出或输入整数, %x 输出小写字母形式的十六进制数, %X 输出大写字母形式。%o
:用于以八进制形式输出或输入整数。
此外,占位符还可以配合修饰符使用,如 %5d
表示输出的整数占5个字符宽度, %.2f
表示输出的浮点数保留2位小数等,以更精确地控制数据的输出格式。
- scanf函数
scanf
,是scanner format的缩写,是C语言提供的一个函数。- 作用:获取用户在键盘上输入的数据,并赋值给变量。
- 格式:
scanf("占位符",&变量名);
- 为了存储输入数据的变量的地址,通过在变量名前加 & 获取,如 int num; scanf(“%d”, &num); 。当读取多个数据时,需按格式控制字符串中格式说明符的顺序依次列出变量地址,用逗号分隔,如 scanf(“%d %f %c”, &a, &b, &c); 。
- printf函数
printf
函数用于数据的输出。- 格式:
printf("语句加占位符",变量名);
- 示例
#include<stdio.h.>
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d",a,b);
return 0;
}
此外修饰符也可以了解一二。
修饰符 | 含义 | 示例 | 效果 |
---|---|---|---|
h | 用于%d 、%i 、%o 、%u 、%x 、%X ,指定读取或输出短整型(short )数据 | short num; scanf("%hd", &num); | 从输入读取短整型数据存入num |
hh | 用于%d 、%i 、%o 、%u 、%x 、%X ,指定读取或输出字符型(char )数据,char 会被当作整型处理 | char ch; scanf("%hhd", &ch); | 从输入读取一个字符的整数值存入ch |
l | 用于%d 、%i 、%o 、%u 、%x 、%X ,指定读取或输出长整型(long )数据;用于%f 、%F 、%e 、%E 、%g 、%G ,指定读取或输出长双精度型(long double )数据 | long num; scanf("%ld", &num); <br> long double ld; scanf("%Lf", &ld); | 从输入读取长整型数据存入num ;读取长双精度数据存入ld |
ll | 用于%d 、%i 、%o 、%u 、%x 、%X ,指定读取或输出长长整型(long long )数据 | long long num; scanf("%lld", &num); | 从输入读取长长整型数据存入num |
j | 用于%d 、%i 、%o 、%u 、%x 、%X ,指定读取或输出intmax_t 或uintmax_t 类型的数据 | intmax_t num; scanf("%jd", &num); | 从输入读取intmax_t 类型数据存入num |
z | 用于%d 、%i 、%o 、%u 、%x 、%X ,指定读取或输出size_t 类型的数据 | size_t len; scanf("%zd", &len); | 从输入读取size_t 类型数据存入len |
t | 用于%d 、%i 、%o 、%u 、%x 、%X ,指定读取或输出ptrdiff_t 类型的数据 | ptrdiff_t diff; scanf("%td", &diff); | 从输入读取ptrdiff_t 类型数据存入diff |
* | 用于跳过当前输入项,不将其存储到任何变量中 | scanf("%d %*d %d", &a, &b); | 读取三个整数,跳过第二个整数,将第一个和第三个整数分别存入a 和b |
⚙️转义字符
转义字符是C语言等编程语言中一种特殊的字符表示形式,用于表示一些无法直接通过键盘输入或在字符常量、字符串中具有特殊意义的字符。它以反斜杠“\”开头,后面紧跟一个或几个特定字符来代表特定的字符或控制操作。
转义字符 | 含义 | ASCII值(十进制) |
---|---|---|
\n | 换行符(Newline) | 10 |
\t | 水平制表符(Horizontal Tab) | 9 |
\r | 回车符(Carriage Return) | 13 |
\b | 退格符(Backspace) | 8 |
\f | 换页符(Form Feed) | 12 |
\v | 垂直制表符(Vertical Tab) | 11 |
\a | 警报(Bell) | 7 |
\\ | 反斜杠(Backslash) | 92 |
\' | 单引号(Single Quote) | 39 |
\" | 双引号(Double Quote) | 34 |
\? | 问号(用于避免字符序列错误) | 63 |
\0 | 空字符(Null Character) | 0 |
总结
本文主要介绍了C语言中的一些基础语法,希望能帮到您!