第1讲:C语言常见概念
2026/9/14 23:17:32 网站建设 项目流程

C语言第1讲:常见概念

-----主讲人:老王爱玩车

本文所有 C 代码块都是完整程序,可以单独保存为.c文件编译运行。
在 VS2022 中运行快捷键:Ctrl + F5
如果代码中使用了scanf,文件开头已加#define _CRT_SECURE_NO_WARNINGS 1,用于关闭 VS 的安全警告。该宏在其他编译器中可忽略。


目录

  1. C 语言是什么
  2. C 语言的历史与标准
  3. 编译、链接与 VS2022
  4. 项目、源文件、头文件
  5. 第一个 C 语言程序
  6. main函数
  7. printf与库函数
  8. 关键字
  9. 字符与 ASCII 编码
  10. 字符串与\0
  11. 转义字符
  12. 语句分类
  13. 注释
  14. 新手常见错误
  15. 练习
  16. 本讲小结人和人交流用自然语言,人和计算机交流用计算机语言。C 语言就是计算机语言中的一种。

它偏底层、运行效率高,很多操作系统、嵌入式系统、编译器和基础软件都和 C 语言有关。学习 C 语言,不只是学语法,更是在理解程序怎么被计算机执行、数据怎么存储、函数怎么组织。

第一课的目标不是“精通”,而是先认识 C 语言世界的基本地图。


2. C 语言的历史与标准

C 语言最初和 Unix 操作系统关系密切。早期 Unix 用汇编语言编写,可移植性差。后来出现了 B 语言,再在 B 语言基础上发展出 C 语言。

C 语言被用来重写 Unix,之后逐渐流行。1988 年左右,ANSI 对 C 语言进行标准化,C 语言开始稳定和规范。

重点理解:

C 语言是为了解决实际问题而诞生的,它和操作系统、系统软件的发展密切相关。


3. 编译、链接与 VS2022

C 语言是编译型语言。源代码是文本文件,以.c结尾,不能直接运行,需要经过:

  1. 编译:把.c源文件翻译成目标文件.obj
  2. 链接:把多个目标文件和库文件连接起来,生成可执行文件.exe

常见编译器:MSVC、clang、gcc。

常见 IDE:VS2022、Xcode、CodeBlocks、DevC++、Clion。

初学者推荐VS2022 社区版:免费、中文界面友好、编辑器、编译器、调试器一体化。缺点是安装包大、占用空间多。


.c、.h文件展示:

4. 项目、源文件、头文件

在 VS 中写代码,先创建“项目”,项目放在“解决方案”里。

  • .c文件叫源文件,主要写代码实现;
  • .h文件叫头文件,通常放声明、宏定义、函数原型等。

一个项目可以有多个源文件。每个.c文件单独编译,生成对应的.obj文件,最后链接成一个可执行程序。

记住:源文件不是程序,编译链接之后的可执行文件才是程序。


创建文件方法:


5. 第一个 C 语言程序

文件名:hello.c

#include<stdio.h>intmain(void){printf("hello C\n");return0;}

运行结果:

hello C

说明:

  • #include <stdio.h>:包含标准输入输出头文件;
  • int main(void):主函数,程序入口;
  • { ... }:函数体;
  • printf:库函数,用于打印;
  • return 0;:程序正常结束。
    以上程序仅作简单介绍,后续会详细讲解。

如果程序一闪而过,并没有出现上图所示的控制台,则按以下步骤设置:

6.main函数

文件名:main_demo.c

#include<stdio.h>intmain(void){printf("main 是程序入口\n");return0;}

运行结果:

main 是程序入口

要点:

  • 一个 C 程序有且仅有一个main函数;
  • 程序从main开始执行;
  • int main(void)表示不接收参数,返回整数;
  • return 0;通常表示程序正常结束。

7.printf与库函数

文件名:printf_demo.c

#include<stdio.h>intmain(void){intn=100;printf("hello C\n");printf("%d\n",n);printf("%c\n",'q');printf("%lf\n",3.14);return0;}

运行结果示例:

hello C 100 q 3.140000

说明:

  • printf是标准库函数;
  • 使用printf需要包含<stdio.h>
  • %d%c%lf是占位符,会被后面的值替换。

8. 关键字

关键字是 C 语言保留的特殊单词,有特殊含义,不能拿来当变量名或函数名。

经典 C 语言有 32 个关键字:

auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

C99 还增加了:

inline restrict _Bool _Complex _Imaginary

记住:

  • 关键字不能自己创建;
  • 标识符不能和关键字重名;
  • 初学先认识intreturnifwhilefor等即可。

C语言关键字全部介绍:c关键字介绍

9. 字符与 ASCII 编码

文件名:ascii_demo.c

#include<stdio.h>intmain(void){printf("%c\n",'Q');printf("%c\n",81);// 81 是字符 Q 的 ASCII 码值return0;}

运行结果:

Q Q

需要记住的 ASCII 区间:

字符范围ASCII 值
A~Z65 ~ 90
a~z97 ~ 122
0~948 ~ 57
大小写字母差值32
换行\n10

10. 字符串与\0

文件名:string_demo.c

#include<stdio.h>intmain(void){chararr1[]={'a','b','c','\0'};//数组,后续会讲解chararr2[]="abc";printf("%s\n",arr1);printf("%s\n",arr2);printf("%s\n","abc\0def");return0;}

运行结果:

abc abc abc

说明:

  • C 语言字符串末尾隐藏一个\0
  • \0是字符串结束标志,ASCII 码值是 0;
  • printf("%s", ...)打印字符串时,遇到\0就停止;
  • 用字符串常量初始化字符数组时,会自动带上\0
  • {'a', 'b', 'c'}这种列表初始化时,不会自动加\0,手动加上才安全。

11. 转义字符

文件名:escape_demo.c

#include<stdio.h>intmain(void){printf("abc\ndef\n");printf("%c\n",'\\');printf("%s\n","\\");printf("c:\\test\\code\\test.c\n");printf("%c\n",'\130');// 八进制 130,十进制 88,字符 Xprintf("%c\n",'\x30');// 十六进制 30,十进制 48,字符 0printf("\a");return0;}

运行结果示例:

abc def \ \ c:\test\code\test.c X 0

说明:

  • \n表示换行;
  • \\表示一个反斜杠;
  • \130是八进制转义;
  • \x30是十六进制转义;
  • \a通常会触发系统提示音或闪烁。

常见转义字符:

转义字符含义
\n换行
\t制表符
\\反斜杠
\'单引号
\"双引号
\0空字符,字符串结束标志
\a警报
\b退格
\r回车
\ddd1~3 位八进制表示的字符
\xdd2 位十六进制表示的字符

12. 语句分类

文件名:statement_demo.c

#include<stdio.h>intAdd(intx,inty){returnx+y;}intmain(void){inta=20;intb=0;intret=0;inti=0;intarr[5]={1,2,3,4,5};;// 空语句b=a+5;// 表达式语句printf("b = %d\n",b);printf("hehe\n");// 函数调用语句ret=Add(2,3);printf("ret = %d\n",ret);for(i=0;i<5;i++)// 复合语句 + 控制语句{printf("%d ",arr[i]);}printf("\n");if(ret>0){printf("ret > 0\n");}return0;}

运行结果:

b = 25 hehe ret = 5 1 2 3 4 5 ret > 0

C 语言常见语句分类:

  • 空语句:一个分号;
  • 表达式语句:表达式加分号;
  • 函数调用语句:函数调用加分号;
  • 复合语句:成对花括号中的代码块;
  • 控制语句:ifswitchwhilefordo whilebreakcontinuegotoreturn等。

13. 注释

文件名:comment_demo.c

#include<stdio.h>/* 多行注释:程序入口 */intmain(void){intx=1;// 单行注释:打印字符串printf("// hello /* world */\n");printf("x = %d\n",x);// 行尾注释return0;}

运行结果:

// hello /* world */ x = 1

说明:

  • //是单行注释,C99 标准新增;
  • /* ... */是多行注释;
  • /* ... */不能嵌套;
  • 忘记写*/会导致后面的代码被当成注释;
  • 双引号里面的///* */只是普通字符,不再是注释。

14. 新手常见错误

  1. main拼错,例如写成mian
  2. main后面的()漏写;
  3. 代码中使用中文符号;
  4. 语句末尾漏分号;
  5. 一个项目中出现多个main
  6. 使用printf忘记包含<stdio.h>
  7. 字符数组没有\0,却用%s打印;
  8. 注释/* */忘记闭合;
  9. 路径中的\忘记写成\\
  10. 把关键字当成变量名使用。

15. 练习

课堂练习以选择题和程序分析题为主。
下面出现的每个 C 代码块都是完整程序,可以直接运行验证。


练习 1:main函数与程序结构

题目:以下关于main函数的说法,正确的是( )。

A. 一个 C 程序中可以有多个main函数
B.main函数是程序的入口,程序从main开始执行
C.main函数必须写在所有函数的最前面
D.main函数后面的()可以省略

答案:B

解析:一个 C 程序有且仅有一个main函数,程序从main开始执行。main函数的位置不固定,但必须有且仅有一个。main后面的()不能省略。


练习 2:printf与占位符

题目:以下程序的输出结果是( )。

#include<stdio.h>intmain(void){intn=100;printf("%d\n",n);printf("%c\n",'q');return0;}

A.100换行q
B.%d换行%c
C.100 q
D. 编译错误

答案:A

解析%d打印整型,%c打印字符。printf会把占位符替换为后面提供的值。


练习 3:转义字符

题目:以下程序的输出结果是( )。

#include<stdio.h>intmain(void){printf("c:\\test\\code\\test.c\n");return0;}

A.c:\test\code\test.c
B.c:\\test\\code\\test.c
C.c:testcodetest.c
D. 编译错误

答案:A

解析\\是转义字符,表示一个反斜杠。所以c:\\test\\code\\test.c输出为c:\test\code\test.c


练习 4:字符串与\0

题目:以下程序的输出结果是( )。

#include<stdio.h>intmain(void){printf("%s\n","abc\0def");return0;}

A.abcdef
B.abc
C.abc\0def
D. 编译错误

答案:B

解析printf打印字符串时,遇到\0就停止。"abc\0def"\0后面的def不会被打印。


练习 5:ASCII 编码

题目:已知字符'A'的 ASCII 码值是 65,则字符'a'的 ASCII 码值是( )。

A. 66
B. 90
C. 97
D. 122

答案:C

解析:大小写字母的 ASCII 码值差值为 32,'A'是 65,所以'a'是 65 + 32 = 97。


练习 6:综合程序分析

题目:以下程序的输出结果是( )。

#include<stdio.h>intmain(void){printf("%c\n",'\130');printf("%c\n",'\x30');return0;}

A.X换行0
B.130换行30
C.X换行30
D.130换行0

答案:A

解析\130是八进制转义,八进制 130 = 十进制 88,对应字符X\x30是十六进制转义,十六进制 30 = 十进制 48,对应字符0


16. 本讲小结

  • C 语言是计算机语言,偏底层,适合打基础;
  • C 程序要经过编译和链接,最终生成可执行文件;
  • .c是源文件,.h是头文件;
  • main是程序唯一入口;
  • printf是库函数,使用时要包含头文件;
  • 关键字有特殊含义,不能随便用作标识符;
  • 字符遵循 ASCII 编码,字符串末尾隐藏\0
  • 转义字符以\开头;
  • 语句分为空语句、表达式语句、函数调用语句、复合语句、控制语句;
  • 注释是给程序员看的,编译器会忽略。

先让程序跑起来,再逐步理解它为什么能跑起来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询