你是否曾好奇,计算机是如何“听懂”人类的指令,并按照我们的想法执行任务的?你是否也想亲手写出第一个程序,让计算机开口“说话”?如果你对编程充满好奇,却不知从何开始,那么这篇文章就是为你准备的!
C语言作为一门经典且强大的编程语言,不仅是许多高级语言的基础,更是理解计算机底层运行机制的重要工具。从操作系统到嵌入式开发,C语言的身影无处不在。本篇文章将带你从零开始,一步步搭建开发环境,理解基本概念,最终写出你的第一个C语言程序——让计算机真正“开口说话”! 无论你是编程小白,还是希望系统回顾C语言基础的同学,这里都将是你编程之旅的美好起点。准备好了吗?让我们一起开启这段奇妙的C语言之旅吧!

各语言排行榜:https://www.tiobe.com/tiobe-index/

具体过程:

集成开发环境集成了编译器、编辑器、调试器等,比如VS2022集成了msvc






项目打开方式(另一种):

C语言历史原因:return 0表示正常返回
使用必须带头文件stdio.h( std-standard i-input o-output 标准输入输出函数) print-打印 f-format 指定的格式 printf-按照指定的格式打印
程序员命名不能与关键字重合 define不是关键字,是一个预处理命名 详细:https://en.cppreference.com/w/c/keyword.html
128个字符 A-Z:65-90 a-z:97-122 大小写差32 数字字符:‘0’-‘9’:48-57 ASCII值0-31为不可打印字符 C语言中的字符就遵循了ASCII编码的方式 详细:https://en.cppreference.com/w/cpp/language/ascii.html 打印出来:(在9的倍数换行)
#include<stdio.h>
int main()
{
int i = 0;
for (i = 32; i <= 127; i++)
{
printf("%c ", i);
if (i % 9 == 8)
{
printf("\n");
}
}
return 0;
}'\0’是字符串的结束标志


printf中%s打印字符串需要’\0’才能结束
转义字符——转变原来的意思 ‘?’——用于三字母词:??)–>];??(–>[;‘‘的作用是让’?‘不是三字母词,只是普通的’?’ 打印单引号需要用转义字符’‘(不是成对的单引号); 同理打印字符串双引号也是"“;”\n"打印\n’‘转义(在打印路径上面有用)


‘\a’:警报声 ‘\b’:光标退一格(调试验证)但是如果后面有字符,会覆盖一个 ‘\r’:光标来到这一行的开头(’\r’也占一个)

‘\t’:制表符Tab——4/8个字节(是对齐4/8倍数空格),要看具体的终端是几个字节 字符的8进制/16进制表示形式:\ddd、\xdd ‘\0’也是一种特殊的形式,NULL字符 补充:strlen统计的是’\0’之前的字符,需要包含头文件string.h


补充:布尔类型(C99引入) _Bool/bool:专门表示真假的,变量的取值:true/false(也可以是1/0) 必须包含头文件stdbool.h
sizeof算出数据类型的大小:sizeof后面接数据类型和变量(变量可以不接括号),后面如果是表达式可以省略括号,算出单位为字节 各单位换算:


sizeof后面的表达式不会被计算(不会开辟内存)

signed和unsigned(无符号整数不能存放负数 )

计算结果:

当知道系统对sizeof是什么返回类型的,可以不用%zd,可以用%llu、%u打印,不同的编译器size_t有不同的类型,%zd是VS提供打印sizeof的占位符。
unsigned所能表示的范围比signed大

对char的区别:

以后在写char要标注signed或unsigned,VS上默认是signed
了解数据类型的范围让我们选择更加从容(范围记不住,记符号就行)

类型是为了创建变量,变量要初始化(良好的习惯) 一个局部变量不初始化的,默认是随机值,(不初始化,会报错) 一个全局变量不初始化,默认是0 变量的储存

补充:C语言中赋值与数学中的不一样,向后赋值
除法两端是整数的时候,/算出的是整数(商),整数用%f打印会报错(结果错误),整数赋值给float(不报错)
两个运算数至少一个浮点数,算小数除法,可以用%f打印(默认打印6位),%lf打印double类型,小数除法也可以强行转换
float类型存放到int类型发生截断
%取模操作符计算的是整除的余数,所以两端只能是整数,不能是浮点数


连续赋值最好拆开(良好的习惯)
++或– 前置++后使用 后置++前使用

不要搞得过于复杂(编译器预算结果不同) +或-

printf可以指定占位符,占位符指的这个位置可以被其他值代入



printf可以限制占位符的最小宽度 对于整数:

对于小数限制所有数字的最小显示宽度:

总是显示正负号

限定小数点的位数(如果超出,要进行四舍五入)

%f、%lf也是一样,使用方法(%.nf或%.mlf)
当限制宽度与限定小数结合

最小宽度与小数位数两个限定值,可以用*代替,通过printf传入

输出部分字符串(%.ms)m为数字



scanf()的返回值,表示成功读取的变量个数。
如果没有读取任何数,或者匹配失败,返回0,如果在读取数字之前读取错误或者遇到文件末尾,返回常量EOF(-1)。
返回0时:

返回-1:

用途:多组输入
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
while (scanf("%d%d", &a, &b) == 2)
{
c = a + b;
printf("%d\n", c);
}
/*while (scanf("%d%d", &a, &b) != EOF)
{
c = a + b;
printf("%d\n", c);
}*/
return 0;
}结束方法:输入字符返回0或者三次Ctrl+Z返回-1

注:%c不会跳过空格

如果跳过空格在%c前加空格


%s
%s从第一个非空白字符开始读起,遇到空白字符(空格、换行符、制表符)为止
解决办法用gets()



但是仍然符合%s遇到空白字符结束
由于每个人输入的方式不一样(比如:1994/3/5,1994/3/5),为了避免这种情况,scanf()提供了赋值忽略符。只要把*放在任何占位符%的后面,该占位符就不会返回值,解析后被丢弃

恭喜你!通过本篇文章的学习,你已经成功迈出了C语言编程的第一步。从搭建环境、理解基础语法,到最终写出第一个程序,你已经初步掌握了如何与计算机“对话”。 编程之路,始于足下。C语言的世界远不止于此,数据类型、操作符、函数、指针、内存管理……还有更多精彩的内容等待你去探索。记住:每一个优秀的程序员,都曾是从“Hello, World!”开始的。 如果你在实践过程中遇到问题,不要气馁。编程的本质是不断尝试、调试与思考。欢迎在评论区留言交流,也欢迎关注我的专栏,后续我们将继续深入C语言的更多核心知识。
生活有理想,代码有温度。愿你在编程的世界里,找到属于自己的那份热爱与坚持!