文章目录
一.C语言是什么?
- 语言大致可以分为自然语言和计算机语言,自然语言就是人与人日常交流的语言,如汉语、英语、日语等等,计算机语言又可以分为机器语言、汇编语言、高级语言,C语言就是一个高级语言
- 机器语言:就是由二进制01组合起来的计算机可以直接识别的程序语言是一种面向机器的语言,它属于低级语言。其优点是直接执行,资源占用少,速度快。缺点是编程复杂,可读性和可移植性差。
- 汇编语言:采用助记符来代替机器指令的操作码,用地址符号或者标号来代替指令或操作数的地址,也称为符号语言,也是面向机器的低级语言,效率较高,编程较复杂,可读性和可移植性较差
- 高级语言: 语法接近于人类的自然语言,比起低级语言易懂易学,可移植性好,编程效率高,但是执行效率没有低级语言高,需要经过编译或解释,C语言就是采用编译的一种高级语言
二.为什么选择C语言
C语言常年霸榜各类高级语言前三,属于基础必学的语言,其功能强大,而且许多语言都很相似,如果学好C语言,对学习其他语言也有很大帮助
三.编译器的选择
- C语言是一门编译型的语言,需要依赖编译器将计算机语言转换成机器能够执行的机器指令
- 常见的编译器有:msvc、clang、gcc,以及一些集成开发环境,如:VS2022、xcode、codeblock、devc++、clion
- 新手推荐使用VS2022,它的社区版完全免费,完全够用,它集成了MSVC,使用起来很方便,对新手十分友好,唯一需要额外考虑的是它功能丰富导致了安装包大,占用空间多,一般安装下来需要10个g左右的空间
四.VS项目和源文件、头文件介绍
- 新建项目:新建项目所要注意的有(1)最好保证项目名称有意义(2)把代码放在规划好了的位置(3)为了方便后期查看,路径中最好不要有中文或者空格
- 创建源文件:创建好项目后,右击源文件,选择添加—新建项,选择C++文件,这里没有C文件选项,因为C++和C基本不分家,将后缀名.cpp改为.c就可以了,创建好后就可以开始写我们的第一个C语言程序了
- 注意:其中.c的文件叫源文件,.h的文件叫头文件(head),后面会慢慢讲到
五.第一个C语言程序
注:只需要跟着操作,后面会一一解释它们代表着什么,以及它们的作用,这段代码的含义是在屏幕上打印hello,world,执行可以按调试—开始执行(不调试),用来执行代码,或者使用快捷键,执行代码的快捷键是CTRL+F5,如果电脑上有fn键,那么就是CTRL+fn+F5
#include <stdio.h>
int main()
{
printf("hello,world\n");//其中\n是转义字符,含义是换行,下面会讲到
return 0;
}
六.main函数
- main函数非常重要,每个程序不管有多少行代码都是从main函数开始执行的,main函数是程序的入口,main函数又称主函数。
- main函数前的int表示函数执行结束后返回一个整型的值(以后的博客还会详细讲到数据类型),在函数中最后一行写上return 0刚好首尾呼应。
- main函数特点有(1)main函数是程序的入口(2)main函数有且仅有一个,如果有多个,那么计算机就不知道从哪里进入程序了(3)即使一个项目有多个.c文件,但只能有一个main函数
- 第一次写代码时常见错误(1)误将main写成mian(2)main后面的小括号被忽略了(3)代码中使用了中文符号,如括号和分号,要用英文符号才行(4)一条语句结束后有分号,不要忘记了
七.printf和库函数
上文中使用了 一个函数printf,它是一个库函数,它可以将信息打印在屏幕上。上面使用的printf打印的是一窜字符,只需将要打印的内容放在双引号之内就可以了。它还可以打印整型、字符、浮点数,如:
#include <stdio.h>
int main()
{
int n=10;
printf("%d\n",n);//打印整型
printf("%c\n",'q');//打印字符
printf("%lf\n",3.14);//打印双精度浮点型
return0;
}
%d ,%c等是占位符,会被后边的值替换。(后面再介绍)
库函数是为了提高开发效率,不用总是重复一个动作,所以由厂商根据标准实现,如果程序员要使用这个库函数,只需要提出声明,如使用printf就要引用头文件stdio.h,具体引用方法如下:
#include <stdio.h>
八.关键字介绍
C语⾔中有⼀批保留的名字的符号,⽐如:int 、if、return ,这些符号被称为保留字或者关键字,现在只需要混个眼熟和概念,后面会一一讲到。
- 关键字都有特殊的意义,是保留给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 等关键字
九.字符和ASCLL编码
在键盘上我们可以输入许多字符,这些字符在C语言中用单引号(‘’)扩起来,如’a’,‘#’,‘@’,'+'等字符。
但我们都知道,计算机只能识别二进制,那怎么办呢?于是美国标准学会就出台了标准ASCLL编码,C语言就是采用的ASCLL码,完整ASCLL码表如下:
注意:我们没必要记住表中每个字符对应的数字,只需要记下一下几点:
- 字符0–9对应的ASCLL码值是48—57
- 字符A对应的ASCLL码值是65,字符a对应的ASCLL码值是97(小写字母码值等于大写字母码值+32)
- 字符\n对应的ASCLL码值是10
- 码值为0—31的字符不可打印出来,码值为32----127的字符可以打印在屏幕上
十.字符串和\0
C语言中的字符串用双引号(“”)括起,如"abcdef",字符串的打印使用%s来指定,如:
#include <stdio.h>
int main()
{
printf("%s\n","hello,world");
return 0;
}
其中,字符串末尾会隐藏一个\0,表示字符串在此处结束,在计算它的长度和打印时,遇到\0就结束,\0不会计入长度,也不会打印出来,那字符串和字符的区别在哪里呢,请看演示:
#include <stdio.h>
int main()
{
char arr1[] = { 'a','b','c' };//数组arr1中存放字符
char arr2[] = "abc";//字符arr2中存放字符串
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
这段代码运行结果为
为什么会出现这种情况呢?打印字符串就成功了,打印多个单一字符却失败了。这就不得不提到它们的区别,字符中不会自动存有\0,所以电脑打印完abc后没有遇到\0,也就不会自动终止,就会往后面打印随机值,直到随即值中出现\0打印才会结束。而字符串中最后本身带有\0作为结尾,所以计算机打印完abc碰到\0就结束打印了
如何解决这个问题呢?只需要在arr1中加入\0或者0(\0的值就是0),如图:
注意:\0也要用单引号括起
注意:0不用单引号括起
十一.转义字符
我们在上面一直提到\n,\0,它们是什么呢?没错,它们就是转义字符的一员,通过\将一些字符转换为另一层含义,常用转义字符如下:
• ?:在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证,因为现在基本不使用这个了,暂且不讲
• ‘:⽤于表⽰字符常量’,用在只是想让它是一个字符’,而不是括起字符的’时,比如打印字符‘需要以下操作:
#include <stdio.h>
int main()
{
printf("%c\n",'\'');
return 0;
}
如果不用\’,那么编译器就会报错,因为第一个单引号会和第二个单引号匹配,第一个单引号不会和第三个单引号自动匹配
• ":⽤于表⽰⼀个字符串内部的双引号,用在只是想让它是一个字符”,而不是括起字符串的“时,与转义字符\‘同理,此处不再赘述
• \ \:⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符,用在只是想让它是一个字符\,而不是转义字符的\时,与转义字符\‘同理,此处不再赘述
• \a:警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。验证方法可以使用如下代码(记得打开电脑声音)
#include <stdio.h>
int main()
{
printf("%c\n", '\a');
return 0;
}
• \b:退格键,光标回退⼀个字符,但不删除字符。
• \f:换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于\v
• \n:换⾏符。
• \r:回⻋符,光标移到同⼀⾏的开头。
• \t:制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。
• \v:垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。
下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式
• \ddd:ddd表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X(八进制130对应十进制为88,在ASCLL码表对应的字符为大写字母X)
• \xdd:dd表⽰2个⼗六进制数字。 如: \x30 表⽰字符0(十六进制30对应的十进制为48,在ASCLL码表对应的字符为0)
•\ 0 :null字符,代表没有内容,\0 就是\ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其ASCII码值是0
十二.语句和语句分类
C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:
-
空语句:只有一个分号,没有实际意义,一般用在这里需要一个语句,但是不需要它做任何事,如图:
-
表达式语句:由一个表达式后加上一个;,如图:
-
函数调用语句:相当于调用了一个函数的语句,比如上述的printf语句,此处不再展示。
-
复合语句:就是用大括号{}括起来的一段语句,叫做复合语句,后面会学习到。
-
控制语句:控制语句⽤于控制程序的执⾏流程,以实现程序的各种结构⽅式(C语⾔⽀持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语⾔有九种控制语句,后期再一一学习。
十三.注释是什么?为什么写注释?
注释是对代码的说明,编译器会对其进行忽视,换句话说,注释就是给自己或者其他程序员看的,有可能自己写的代码过了一年半载自己都看不懂了,更别说其他人,所以写注释是很有必要的,这是一种良好的习惯。
那么注释怎么写呢?有两种方法:
1.注释放在/…/ 之间,内部可以分⾏。比如:
可见,它可以注释一行也可以注释多行,但是它不能嵌套注释,比如说:
可以看见注释并没有成功,因为第一个/* 和第一个 */配对了,并不是第一个 /*和最后一个 */配对导致嵌套失败
2.把注释内容写在//后面,但是只能单行注释,如果需要多行一起注释,就选中代码,按快捷键ctrl+k,ctrl+c可以注释代码,按ctrl+k,ctrl+u可以取消注释
总结
以上就是今天所要讲的C语言常见的概念,下次讲C语言的数据类型和变量,如果今天的内容有不懂的还请在评论区留言,当然,还有许多不足的地方也请大家多多指正,谢谢!!!