一、初识C语言

一、初识C语言

前言:

人和人之间的交流使用的是自然语言,如:汉语、英语、日语等等。

那么人和计算机又是如何交流的呢?

人们通过计算机语言写的程序,给计算机下达指令,让计算机工作。

C语言就是人们和计算机交流的程序设计语言

程序设计语言是用于书写计算机程序的语言,语言的基础为一组记号和一组规则。

根据规则由记号构成的记号串的总体就是语言。这些记号串就是程序。

语法:表示程序的结构或形式,即表示构成语言的各个记号之间的组合规律,但不涉及记号的特殊含义。

语义:表示程序的含义。

语用:表示各个符号和语句在程序段中的用法或作用。

目前已知的计算机语言已有上千种,C语言是众多计算机语言中的一种,常见的计算机语言还有C++/Java/Go/Python。

1.C语言的概述

C语言是一门面向过程的结构化的高级计算机语言。

面向过程的思想:强调函数的独立性和数据的显式流动,通过将复杂问题分解为简单函数(过程),实现程序的模块化和复用。

结构化:通过函数抽象和控制结构规范化,将复杂问题分解为简单模块,使程序具有良好的可读性和可维护性。

一句话总结:C语言就是由许多的子函数构成。

2.C语言的起源

​ C语言最初是作为Unix系统的开发工具而发明的。

1969年:B语言的诞生

​ 1969年,贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了Unix操作系统。Unix系统是使用汇编语言编写的,汤普森为了方便移植到其他计算机就在BCPL语言的基础上发明了B语言。

1972年:C语言的诞生

​ 1972年,丹尼斯·里奇和布莱恩·柯林汉又在B语言的基础上重新设计了一种新的语言,这种新的语言取代了B语言,所以称为C语言。

1973年:Unix系统的重写

​ 1973年,整个Unix系统使用C语言重写。此后C语言广泛用于各种操作系统和系统软件的开发。

1988年:C语言的标准化

​ 1988年,美国国家标准协会(ANSI)正式将C语言标准化,标志着C语言开始稳定和规范化。

至今:

​ 在计算机语言的使用排行榜上一直霸占前三名。

[计算机语言使用排行榜](TIOBE Index - TIOBE)

3.编写C语言的编译器

3.1编译和链接

​ C语言是一门编译型计算机语言,C语言源代码都是文本文件,文件本身无法执行,必须通过编译器翻译和连接器的链接,生成二进制的可执行文件,才能被执行。

​ C语言的代码是放在.c为后缀的文件(源文件)中的,要得到最终可运行的可执行文件,中间要经过编译和链接两个过程。

在这里插入图片描述

每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj为后缀的文件)

多个目标文件和库文件经过链接器处理生成对应的可执行文件(.exe文件)

3.2常见C语言的编译器

常见的C语言编译器:msvc、clang、gcc等。

常见的集成开发环境:vs2022、XCode、CodeBlocks、DevC++、Clion等。

集成开发环境(IDE):用于提供程序开发环境的应用程序,一般包括编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、调试功能等一体化开发软件服务套。

  • VS2022集成了MSVC(安装包较大,安装使用简单,推荐使用)
  • XCode集成了clang(苹果电脑的开发工具)
  • CodeBlocks集成了gcc(需要配置环境)
  • DevC++集成了gcc(竞赛常用的C/C++编译器)
  • Clion默认使用CMake,编译器可以配置(收费软件)

VS2022的具体安装过程和常见的使用方法

3.3使用VS2022创建项目

使用VS2022的优点:不用配置环境,上手简单,功能强大,并且是中文的,对于初学者比较友好。

直接新建项目,选择空项目,在空项目中新建源文件,在C语言中使用.c后缀结尾的文件为源文件,以.h后缀结尾的文件为头文件。

如图所示:

在这里插入图片描述

4.第一个C语言程序

#include <stdio.h>
int main(){
    printf("Hello World!");
    return 0;
}

上述程序有以下几个部分组成:

  • #include <stdio.h>:库函数printf()的头文件,想要调用库函数就必须包含相对应的头文件。
  • int main(){ }:main函数,其中int为主函数的返回值类型,main函数是整个程序的入口,一个C语言项目(即使有多个.c文件)中只能有一个main函数。
  • printf():这是一个库函数,作用是在控制台输出:Hello World!,想要调用这个库函数必须包含#include <stdio.h>头文件。
  • return 0:函数结束时,返回一个0

执行上述程序的效果是在控制台输出:Hello World!

如下图所示:

在这里插入图片描述

库函数的定义:为了不用重复实现某些常用的代码,C语言标准规定了一些函数,这些函数组成了函数库,即库函数。

一系列的库函数声明通常包含在同一个头文件中,所以想要调用库函数必须包含相对应的头文件。库函数可以提高程序员的开发效率。

main函数的定义方式有多种:

int main(){}:目前常用的定义方式,返回一个int类型,没有参数列表,但实际中我们传参对代码也没有任何影响

#include <stdio.h>

int main()
{
	main(1, 2, 3);
	return 0;

}

int main(void){}:返回一个int类型,强调没有参数,即我们在调用main函数时不能传参了

#include <stdio.h>

int main(void)
{
	main(1, 2, 3);//这里编译器会报错
	return 0;

}

int main(int argc,char * argv[]):比较古老的写法,目前已经很少见了,返回一个int类型,两个参数int argc和char* arg[]

#include <stdio.h>

int main(int argc,char* argv[])
{
	
	return 0;

}

5.关键字与标识符

关键字:C语言中保留的具有特殊意义的符号。

C语言中一共有32个关键字:

//基本数据类型
int char float double void
//类型修饰关键字
short long signed unsigned
//复杂类型关键字
struct union enum typedef sizeof
//循环语句
for while do break continue
//条件语句
if else goto
//开关语句
switch case default
//存储类型关键字
auto extern register static
//其他关键字
const volatile  sizeof

标识符:程序员自己定义的由大小写字母、数字和下划线(_)组成的字符串符号,如变量名、函数名、类名等等。

标识符的命名规则:

  • 不能由数字开头
  • 不能是关键字
  • 严格区分大小写

关键字不能够自己创建,并且标识符不能和关键字重名。

6.ASCII编码

我们看到的字符在计算机中的存储形式是二进制,将字符编一个二进制序列的过程就是编码,美国标准协会(ANSI)为了防止每个人的编码不同,就出台了ASCII编码。

ASCII 图表

下表包含所有 128 个 ASCII 十进制 **(dec)、**八进制 **(oct)、**十六进制 (hex) 和字符 (ch) 代码。

decocthexchdecocthexchdecocthexchdecocthexch
000NUL(空)324020(空格)6410040@9614060`
111SOH(标头的开头)334121!6510141A9714161a
222STX(文本开头)344222"6610242B9814262b
333ETX(文末)354323#6710343C9914363c
444EOT(传输结束)364424$6810444D10014464d
555ENQ(查询)374525%6910545E10114565e
666ACK(确认)384626&7010646F10214666f
777BEL(铃铛)3947277110747G10314767g
8108BS(退格键)405028(7211048H10415068h
9119HT(水平选项卡)415129)7311149I10515169i
10120aLF(换行 - 新行)42522a*741124aJ1061526aj
11130bVT(垂直选项卡)43532b+751134bK1071536bk
12140cFF(表单馈送 - 新页面)44542c,761144cL1081546cl
13150dCR(回车)45552d-771154dM1091556dm
14160eSO(移出)46562e.781164eN1101566en
15170fSI(Shift 键)47572f/791174fO1111576fo
162010DLE(数据链路转义)48603008012050P11216070p
172111DC1(设备控制 1)49613118112151Q11316171q
182212DC2(设备控制 2)50623228212252R11416272r
192313DC3(设备控制 3)51633338312353S11516373s
202414DC4(设备控制 4)52643448412454T11616474t
212515NAK(否定承认)53653558512555U11716575u
222616SYN(同步空闲)54663668612656V11816676v
232717ETB(传输块末端)55673778712757W11916777w
243018CAN(取消)56703888813058X12017078x
253119EM(媒介结束)57713998913159Y12117179y
26321aSUB(替补)58723a:901325aZ1221727az
27331bESC(逃脱)59733b;911335b[1231737b{
28341cFS(文件分隔符)60743c<921345c\1241747c|
29351dGS(组分隔符)61753d=931355d]1251757d}
30361eRS(记录分隔符)62763e>941365e^1261767e~
31371fUS(单位分隔符)63773f?951375f_1271777fDEL(删除)

建议记住的几组特殊数据:

  • 字符A-Z的ASCII码值为65~90
  • 字符a-z的ASCII码值为97~122
  • 字符0-9的ASCII码值为48~57
  • 换行\n的ASCII码值为10
  • ASCII码值从0~31这32个字符为不可打印字符,无法在屏幕上打印

7.转义字符

​ 在字符中有一组特殊的字符:转义字符,它们可以改变字符原来的意义。

例如:n为普通字符,在屏幕上打印就是一个n,但如果在n的前面加上/,形成一个转义字符/n,/n在屏幕上打印就是一个换行了。

以下为C语言中常见的转义字符:

• ? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。

•\ ’ :⽤于表⽰字符常量’

•\ " :⽤于表⽰⼀个字符串内部的双引号

•\ \ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。

• \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。

• \b :退格键,光标回退⼀个字符,但不删除字符。

• \f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于

• \n :换⾏符。

• \r :回⻋符,光标移到同⼀⾏的开头。

• \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数。

• \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。

•\ddd:ddd表示1~3个8进制数。 如\130,表示字符X

•\xdd:dd表示2个十六进制数。 如\x30,表示字符0

转义字符参考

8.语句和语句分类

C语言中的代码是由一条一条的语句构成的,语句具体分为五类:空语句、表达式语句、函数调用语句、复合语句、控制语句。

8.1 空语句

一个逗号就可以构成一条语句,这个语句就是空语句

#include <stdio.h>
int main(){
    ;//空语句
    return 0;
}

8.2表达式语句

#include <stdio.h>
int main(){
    int a=10;
    int b=20;
    int d=100;
    int c=a+b;//表达式语句
    a=(b,c,d);//逗号表达式,返回从左到右最后一个值,即a=d
    return 0;
}

8.3函数调用语句

#include <stdio.h>
int main(){
    printf("Hello World!");//函数调用语句
    return 0;
}

8.4复合语句

#include <stdio.h>
int main(){
    {
        int a=10;
        int b=20;
        printf("%d\n",a+b);
    }//在花括号内的语句就是复合语句
    return 0;
}

8.5控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构方式,顺序结构,选择结构,循环结构)。

它们由特定的语句定义字符组成,C语言共有九种控制语句可以分成以下三类:

  • 条件判断语句(分支语句):if、switch;
  • 循环语句:for、while、do while;
  • 转向语句:return、goto、countinue、break;

9.注释

注释是我们对代码的说明,在运行时编译器会将注释替换成一个空格,从而将注释忽略而对实际代码不会造成影响。

注释是写给我们自己或其他程序员看的,方便我们理解代码,但也不要过度的注释,不要写没有必要的注释。

9.1/**/形式的注释

#include <stdio.h>
int main(){
    /*这是一个注释*/
   /*
   这是一个注释,内部可以换行
   */
    printf("%d\n",1/*这是一个注释,可以插在行内*/);
    /*第1行注释
    /*第2行注释
    注释不能嵌套,第1行注释开始遇到第3行注释结束,所以第四行注释编译器会报错
    */3行注释
    */4行注释
    return 0;
}

9.2//形式的注释

#include <stdio.h>
int main(){
    //这是一个注释
  
    printf("%d\n",1);//这是一个注释,只能单行
    return 0;
}

结语:

​ 通过上面的学习,希望能够帮助你更好的了解C语言的一些基本知识,总的来说C语言需要学习的主要有两大内容,一个是数据,另一个是就是流程控制语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值