故事的开始总是极具温柔——C语言常见概念

 一、什么是C语言

首先,什么是语言?人与人交流沟通的的一种表达方式。

那什么是C语言呢?人与电脑沟通交流的一种表达方式。

人和人沟通交流有很多种语言,诸如:汉语、英语、德语、日语......

人与电脑共同交流同样也有很多语言,诸如:Python,Java,C++......

C语言便是其中的一种。


二、C语言的历史

1969年,贝尔实验室的Ken Thompson与Dennis Ritchie一起开发了Unix操作系统,Unix是汇编语言写的,为了移植到其他计算机上,B语言诞生。

1972年,Dennis Ritchie和Brian Kernighan在B语言的基础上重新设计了一种新语言,这种语言逐渐取代B语言,故称C语言。

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

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

如今,C语言仍广泛使用,在计算机语言上位居前列。


三、编译器的选择——VS2022

C语言写出来,并不能直接被计算机所识别,还需通过编译器的翻译和链接器的链接,生成二进制的可执行文件才能被计算机执行。

也就是说,C语言是编译型的计算机语言,一个C语言程序,需要经过编译和链接两个过程才能真正被计算机所识别。

常见的编译器有:msvc,clang,gcc

理论上来说,我一个程序写出来,我要经过编译,链接两个过程,很麻烦对不对。那么我就想,能不能有个什么东西,我写出来后,那个东西能帮我完成后续任务,以至于我只要安心完成撰写代码部分就行了?

有的兄弟,有的。

集成开发环境横空出世!

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

常见的集成开发环境有:

• VS2022集成了MSVC(安装包较大⼀些,安装简单,无需多余配置,使用起来非常方便)

• XCode集成了clang(苹果电脑上的开发工具)

• CodeBlocks集成了gcc(这个工具比较小众,需要配置环境,不太推荐)

• DevC++集成了gcc(小巧,但是工具过于简单,对于代码风格的养成不好,⼀些竞赛使用)

• Clion是默认使用CMake,编译器是可以配置的(工具是收费,所以暂时不推荐大家使用)

VS2022是一个主流的集成开发环境,企业中使用较为普遍,同时功能强大,安装就能使用,容易上手,默认界面是中文,对新手友好。因此在这里选用VS2022作为启航的起点。


四、VS新建项目

第一步,打开Visual studio 2022

第二步,创建新项目

第三步,选择空项目,然后点击下一步

第四步,位置默认保存在C盘,可以更改至你想存放的地方,推荐D盘,再点击创建。

第五步,项目可以添加源文件和头文件。

C语言把.c为后缀的文件的叫源文件.h为后缀的文件的叫头文件

源文件是实际实现代码的地方,因此我们直接在源文件新建.c文件就行。

第六步,源文件——添加——新建项

第七步,选择第一个C++文件——再点右下角添加

第八步,创建成功


五,故事在这里启航——第一个C语言程序

#include<stdio.h>

int main()
{
	printf("hello,world");
	return 0;
}

ctrl+Fn+F5运行

有些电脑是ctrl+F5运行


六、main函数

你或许见过跑步比赛,运动员们在各自的起点待命,发令枪一响,大家都以各自最快的速度抵达终点。

那么C语言的起点在哪?

main函数便出现了。

C语言不管有多少行代码,都是从main函数开始执行,main函数便是程序的入口。   main函数,也成为主函数。main函数前面的int表示函数结束返回一个整型类型的值。所以main函数后面的return 0;正好前后呼应。

划重点!!!

1.main函数是程序的入口

2.main函数有且仅有一个

跑步的运动员一场比赛只有一个起跑点吧。那如果有多个起跑点咋办?一个人变多个人?影分身?

3.即使一个项目有多个.c文件,也只能有一个main函数(程序入口只有一个)


七、printf 和 库函数

printf("hello,world");

这是 printf函数 , printf 是⼀个库函数,它的功能是在标准输出设备(一般指屏幕)上进行信息的打印。上面的代码是使用 printf 函数打印字符串。只要把想要打印的⼀串字符放在双引号中并传递给printf函数就可以打印。

printf函数也可以用来打印其他类型数据,如:

	int a = 100;
	printf("%d\n", a);//打印整型
	printf("%c\n", 'b');//打印字符
	printf("%lf\n", 3.14);//打印双精度浮点数

%d,%c,%lc是占位符,会被后面的值替换。(关于占位符,后续会详细说)

同时使用库函数的时候,是需要包含头文件的,比如:printf函数需要包含的就是stdio.h这个头文件,具体方法是

#include<stdio.h>

std表示standard 

i表示input

o表示output

整体表示标准输入输出。

那么问题来了,什么是库函数?

在认识库函数前,我先举一个例子。

假设你今天想吃土豆丝,你是不是需要土豆?除了土豆以外,你是不是还想要个什么东西把土豆由块状变成丝状?说到这里你马上会想到一个工具——菜刀。但是,你不可能跑到山上挖铁矿石,然后提炼出铁,然后定型,然后磨刀吧。比起这个,你更愿意去厨房找找看。

库函数就和仓库一样,你想用printf打印东西出来,你要去调用stdio这个标准输入输出的库(stdio.h是头文件),就像你要菜刀要去厨房找一样;要用数学工具时候,你就需要调用math这个数学库,就像你要用钳子的时候,你会去工具房看看(没人会把钳子放厨房吧,确信)。printf就是一种库函数,它放在stdio这个库里面,要导入stdio.h这个头文件才能调用。
库函数(也称为库例程或标准库函数)是 编程中预先编写好的、可重复使用的代 码集合,它们被打包成“库“供开发者调用。

库函数非常多,想具体了解可以移步https://cplusplus.com/reference/clibrary/


八、关键字

婴儿呱呱坠地,全家都很高兴,但是紧接着爸妈就开始想了:“该叫什么名字好呢?”

回到这里,你在写程序的时候,有些需要创建标识符,这个标识符和给婴儿起名字一样,主要看你想叫它什么。

那么是不是什么名字都能起呢?

答案是——no!

C语言中有一批保留的名字的的符号,叫关键字。

关键字都有特殊的意义,只能给C语言自己使用;

程序员在创建标识符的时候不能与关键字重复;

当然,关键字是C语言自身固有的,并不需要自己创建,自己也没办法创建。

常见的关键字如下:

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

当然,关键字也不止这么些,想知道详细的请移步https://zh.cppreference.com/w/c/keyword


九、字符和ASCII码

键盘上你能看到的各种一个一个的符号,这些就是字符。比如:@,a,*,#等。C语言中的字符是用单引号括起来的,如’@‘,’a‘,’*‘,’#‘。

我们都知道,计算机是个二进制世界,那么字符怎么存进这个二进制世界呢?

聪明的你一定想到,如果我把每个字符用二进制数来编码,那么不就把字符存进去了吗。于是ASCII码出现了。

ASCII码是美国国家标准学会(ANSI)出台了⼀个标准,方便大家互相通信,不造成编码混乱,C 语⾔中的字符就遵循了ASCII编码的方式。

参考地址:https://zh.cppreference.com/w/cpp/language/ascii

这个编码并不需要费力全部记住,需要用的时刻查看一下就好,不过仍建议记住几个常用的:

1.字符A~Z的ASCII码是从65~90;

2.字符a~z的ASCII码是从97~122;

3.大小写字母对应ASCII码的差值是32,小写字母的ASCII码大;

4.数字字符0~9的ASCII码是48~57;

5.换行\n的ASCII码是10;

6.ASCII码中0~31这32个字符是不可打印字符,是无法打印在屏幕上观察的。

单个字符的打印可以使用%c来指定格式:

#include<stdio.h>
int main()
{
	printf("%c\n", 'A');
	printf("%c\n", 65);//这⾥的65是字符A的ASCII码值,也是可以正常打印的
	return 0;
}

结果:

可打印字符展示:

#include<stdio.h>
int main()
{
	int i=0;
	for (i = 65; i <= 90; i++)
	{
		printf("%c\t", i);
		if (i == 80)
		{
			printf("\n");
		}
	}
	return 0;
}

结果展示:


十、字符串和\0

学完字符,你就懂怎么把字符输入二进制世界了。但是,现实生活中很多东西并不只是用一个简简单单的字符来表示的。比如:I love you。这里的love就是由多个字符来表示的,这时候你可能就会问了,love怎么输入二进制世界?
于是,字符串出来了。

在C语言中,用双引号括起来的一串字符就叫字符串,如:“love”,就是一个字符串。

字符串的打印格式可以用%s来指定,也可以直接打印如下:

#include<stdio.h>
int main()
{
	printf("I love you\n");//可以直接输入字符串打印
	printf("%s\n", "I love you");//也可以用%s指定打印字符串
	return 0;
}

展示:

但是,眼见不一定为实,C语言的字符串还有一个特殊的知识。

字符串的末尾隐藏一个\0字符,这个字符是字符串结束的标志。

打开监视窗口,输入字符串“love”。

表面上看只有四个字符‘l','o','v','e',四个字符,但事实上在末尾还藏了一个\0的转义字符,\0是字符串的结束标志。库函数printf()和strlen()遇到\0的时候就自动停止了。

比如:

#include<stdio.h>
int main()
{
	printf("this is the best way\0 to...");
	return 0;
}

结果:

后面的to...不打印。

再比如:

#include<stdio.h>
#include <string.h>
int main()
{
	int i;
	char str[] = "this is the best way\0 to...";

	i = strlen(str);
	printf("%d\n", i);
	return 0;
}

结果:
字母16个(一个字母对应一字符)+空格4个(一空格对应一字符)=正好20个,也就是说\0后面不计入。

为了直观演示\0的功能,引入以下代码:

#include<stdio.h>
int main()
{
	char str1[] = { 'l','o','v','e' };
	char str2[] = "love";

	printf("%s\n", str1);
	printf("%s\n", str2);
	return 0;
}

监视窗口如下:

从监视窗口我们可以看出,字符串str1和str2最大的区别就是有无\0结尾。这导致的结果会是啥呢?如下:

有\0的str2正常输入,而没有\0结尾的str1,由于字符串找不到停止标志,故str1继续打印,就出现了我们常说的乱码。

那我在str1中人工插入\0呢?

代码部分如下:

#include<stdio.h>
int main()
{
	char str1[] = { 'l','o','v','e','\0' };
	char str2[] = "love";

	printf("%s\n", str1);
	printf("%s\n", str2);
	return 0;
}

结果:

好了,可以看出,现在正常了。


十一、转义字符

转义字符顾名思义,转变原来意思的字符。

你可能会好奇,这个有啥用,为什么会用到这个?

我们从小学学到的一篇诗开始吧。

小学我们都学了一篇诗,叫《咏鹅》

鹅,鹅,鹅,

曲项向天歌。

白毛浮绿水,

红掌拨清波。

那么我怎么把这篇课文在C语言中打印出来呢?

聪明的你一定会想到如下代码:

#include<stdio.h>
int main()
{
	printf("鹅,鹅,鹅,曲项向天歌。白毛浮绿水,红掌拨清波。");
	return 0;
}

可是打印出来,你觉得不好看,你想要的效果是每句话都占一行,而不是这样全诗共一行。

聪明的你又想到,我在句的后面加上回车键不久好了吗?

试一下

#include<stdio.h>
int main()
{
	printf("鹅,鹅,鹅,
曲项向天歌。
白毛浮绿水,
红掌拨清波。");
	return 0;
}

结果:

emmm,报错了,好像不行,原因是“()”无法跨行。

聪明的你又想到了,我加入四个printf()函数,每个函数打印一句话不就行了吗?

再试一下

#include<stdio.h>
int main()
{
	printf("鹅,鹅,鹅,");
    printf("曲项向天歌。");
    printf("白毛浮绿水,");
    printf("红掌拨清波。");
	return 0;
}

结果:

还是不行,计算机还是处理成一行。

那有什么办法能变成一行一句话吗?

有的兄弟,有的。转义字符的作用就出来了。

转义字符有个叫\n的,它的作用就是换行,我们试一下。

代码:

#include<stdio.h>
int main()
{
	printf("鹅,鹅,鹅,\n曲项向天歌。\n白毛浮绿水,\n红掌拨清波。\n");
	return 0;
}

结果:

完美解决。

事实上,在C语言中转义字符可不止这一种,接下来,本文一一解释用法和用途。

11.1 \?

\?:在书写连续多个问号时使用,防止他们被解析成三字母词。

转义字符\?的出现是个历史遗留问题。

现在运行这个代码:

#include<stdio.h>
int main()
{
	printf("(are you serious??)");
	return 0;
}

结果:

貌似没有任何问题。

但在远古时期的编译器中,??)会被识别成]。

以至于远古时期运行这个代码结果会是——(are you serious]

同样(??会被解析成[

因此,需要引入\?停止对??)的解析

原代码就要写成

#include<stdio.h>
int main()
{
	printf("(are you serious\?\?)");
	return 0;
}

(现在的编译器貌似可能大概也许用不到吧)

11.2 \'

\':用于表示字符常量'

在本文的第七节中,演示了一个占位符%c,用来打印字符的。(假设你已经学会了)

而从第九节的ASCII码表中,我们可以看到    '     也是一个字符,对应的ASCII码是39。

这时候你想了,既然你是字符,%c又是打印字符的,可不可以......

实践是检验真理的唯一标准

#include<stdio.h>
int main()
{
	printf("%c\n",''');
	return 0;
}

结果:

oh~no~,代码报错,理由是编译器在识别代码的过程中把前两个''看作一对,认为你要打印的是空字符,而后面一个找不到另一对,所以显示缺少右引号。

这个时候这个转义字符的作用体现出来了,我们加上\试试?

#include<stdio.h>
int main()
{
	printf("%c\n",''');
	return 0;
}

好了,这下没问题了。

11.3  \"

\":用于表示字符串内部的双引号

在第十节中,本文提到占位符%s用来打印字符串的,那么我现在想打印一句话——符号""是双引号,会发生什么呢?

代码:

#include<stdio.h>
int main()
{
	printf("%s\n", "符号""是双引号");
	return 0;
}

结果

你发现""并没有被打印出来,原因是编译器在识别过程中默认识别第一个双引号中的   符号   和第二个双引号中的   是双引号    

那如何打印出""呢,\"的作用就出来了

修改代码:

#include<stdio.h>
int main()
{
	printf("%s\n", "符号\"\"是双引号");
	return 0;
}

结果:

这下没问题了。

11.4 \a

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

这个代码特别好玩。

#include<stdio.h>
int main()
{
	printf("\a");
	return 0;
}

运行结果就是一声清脆的——叮咚叮

强烈建议用电脑输入代码自己体会!!!

不过你可能会好奇,我要这个东西响一声有什么用?

假设某天,你运行了一段特别长的代码,运行了很久,你想测试运行这段代码到底要多久?(咱也不知道为啥要测这个)

ctrl+F5,代码走起来

一分钟过去了,两分钟过去了,n分钟过去了,还在运行......

这时候你妈喊你:“你什么时候弄完啊,过来搭把手”

你很焦灼,一方面你不知道代码什么时候运行完,另一方面你妈又在喊你帮忙

ei!如果你在运行之前,在代码最后插入一句

printf("\a");

当你听到一声清脆的——叮咚叮

你果断按下手中的秒表,测试运行的时间被成功的记下来,另一方面,你也成功给你妈妈搭了把手,避免了矛盾的升级。

你真是个天才!

当然,\a还有其他各种用途,就留给迟早成为程序大佬的你来探索啦。

11.5 \b

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

这里本文直接从代码开始分析吧。

代码:

#include<stdio.h>
int main()
{
	printf("abd\bc");
	return 0;
}

分析:

从该代码中,聪明的你一定知道,printf()里要打印的值有如下6个字符。

运行结果到底是啥样的呢?

第四步,碰到\b,光标回退一个字符。

第五步,后续打印的字符直接覆盖原字符。

我们看输出结果:

确实和我们的分析一致。

这个转义字符到这里就结束了,你可能也会和我一样好奇

我为啥要回退一个再输入?

我直接输入

printf("abc");

不就好了吗,上面那些不纯属于脱裤子放屁,多此一举吗?

带着这个疑问,我打开了一局游戏,在主页的加载页面,你可能见过以下动画

Loading

Loading.

Loading..

Loading...

然后重复(我想直接给视频的。。)

那么我在用printf()打印过程中,用\b回退3个字符,再用空格覆盖...,再一个一个输出  .    重复这个过程,动画不就能用VS打印出来吗?

代码展示:

#include <windows.h>
#include<stdio.h>
int main()
{
	int i = 0;
	printf("Loading");
	for (i = 0; i < 6; i++)
	{
		Sleep(1000);//延迟1000ms
		printf(".");
		Sleep(1000);//延迟1000ms
		printf(".");
		Sleep(1000);//延迟1000ms
		printf(".");
		Sleep(1000);//延迟1000ms
		printf("\b\b\b");
		printf("   ");
		printf("\b\b\b");
	}
	return 0;
}

结果:

(好像观看不了视频,强烈建议复制到VS2022看看)

11.6 \f    \v

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

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

\f已经用不到了,就不讲了吧,直接讲\v

先直接上代码:

#include<stdio.h>
int main()
{
	printf("abd\vc!");
	return 0;
}

分析:

功能其实很简单,就是遇到\v时,光标垂直下移一行

结果:

不过你学到这里,肯定和我一样好奇,这个东西到底有啥用途?

实际情况是,没啥用

关于用途,又是个历史遗留问题,其设计初衷就是是用于控制早期打印设备或终端的垂直光标位置,现在几乎用不上,所以了解即可。

11.7 \n

\n :换行符。

转义字符这一节的引入就是用的这个,所以就不过多赘述啦。

11.8 \r

\r :回车符,光标移到同一行的开头。

同样,上代码

#include<stdio.h>
int main()
{
	printf("王莺莺小气鬼");
	printf("\r");
	printf("王莺莺长命百岁");
	printf("\n\t—《云边有个小卖部》");
	return 0;
}

咳咳,学到这里我相信大家应该能看懂代码了。

\r和11.5中的\b很像,都是回退光标,后面输入的值都直接覆盖

不一样的是,\b只回退一个字符,\r直接把光标放到这一行的最左边,相当于重新打印了。

结果:

至于作用的话,emmmm想想歌词,一行唱完了是不是马上换另一句

那我是不是可以直接用\r回到开头把这一句全覆盖了

唱下一句又把这一句覆盖了,重复如此

代码就不给了,我是小菜鸡qvq

11.9 \t

\t :制表符,光标移到下一个水平制表位,通常是下一个4/8的倍数。

现在你想用printf打印一张表

聪明的你肯定能想到,我每一行打印一行,下一行用\n不就行了吗?

代码:

#include<stdio.h>
int main()
{
	printf("name score grade\n");
	printf("maria 95 excellent\n");
	printf("jame 78 fair\n");
	printf("steve 54 poor\n");
	return 0;
}

运行结果:

看到这个结果,你很难受,这这这不对齐啊,你强迫症犯了。

怎么把这个对其呢,当然,你敲空格可以的,数出多少个字符,严格控制位置。

但是我们说,你如果数字符的话,就慢了,\t能解君愁。

我们插入\t试试?

代码:

#include<stdio.h>
int main()
{
	printf("name\tscore\tgrade\n");
	printf("maria\t95\texcellent\n");
	printf("jame\t78\tfair\n");
	printf("steve\t54\tpoor\n");
	return 0;
}

结果:

这下舒服了。

\t理解起来如下:

以maria为例,maria一共5个字符,5<8,\t后的面的值只会在8后面继续打印,中间的部分用空格补齐。

那我换成excellent呢?

excellent一共9个字符,8<9<16,介于8~16中间,所以往后补到16,后面的值在16后继续打印,中间部分用空格代替。

大于16的重复如此,反正到底补到多少,说人话就是补之前有多少个字符,空格就补到大于这个字符的最小4或8的倍数。我这里是补到8的倍数。

切记切记,\t是转义字符,是一个字符,你别数空格说,ei,这个有3个空格,就是3字符,不是哈!!!不是!!!

这个就到这里,至于到底是4的倍数还是8的倍数,和你终端的配置或开发环境(IDE)的设置有关。

11.10 \ddd 与  \xdd

\ddd:d d d 表示3个八进制数字。

代码:

	printf("\111\n");
	printf("\168\n");
	printf("\294\n");
	printf("\477");

第一个:八进制111对应十进制73,ASCII码字符i,所以输出i

第二个:八进制每一位小于等于8,所以超过8的不会计入,故这里只能读取前两位

第三个:第二位开始大于8,所以只读前面一个

第四个:八进制数字最大为 \377(十进制255),超过会报错

结果(前三):

结果(第四):

\xdd:d d表示2个十六进制数字。

在十六进制中,d可取:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

\xdd的d超过F就会报错。

知识点到这里就结束了,不过你可能还和我一样迷茫,我知道这个东西打印字符的,但是有什么用呢,比如我想打印i,直接写个i就好了,也没必要写\111或者\x49。

如果只是打印字母的话,那当然直接输入要方便的多,不过这俩的核心作用是 “用数字直接代表一个看不见或打不出的字符”。

比如上面说的\a警报,你键盘上是没有单独的警报键的。

所以你可以

#include<stdio.h>
int main()
{
	printf("\007");
	return 0;
}

代码运行一下你又会听到熟悉的——叮咚叮

那十六进制和八进制有区别吗?

有,但不多。这又是个历史遗留问题,早期确实用八进制较多,但你看十六进制\xdd第一个x是不是很好辨认,所以现代代码中逐渐被十六进制取代。

还有记不记得第九节讲了\0?

\0就是八进制的一种,printf()和strlen()碰到这个就停止了。

11.11 \\

\\:用于表示一个反斜杠,防止它被解释为一个转义序列符。

oh~yep~终于到最后一个要学的了

学完前面聪明的你已经不用我解释作用了。

但是为了文章完整,我还是说一下。

这是我C代码的存储地址:E:\C_language\day1\day1\1.c

现在我想用printf打印出来,上代码:

#include<stdio.h>
int main()
{
	printf("E:\C_language\day1\day1\1.c");
	return 0;
}

结果:

oh~no~

所有\都不显示,后面\1识别成八进制1了,记不记得第九节讲过ASCII码中0~31这32个字符是不可打印字符,是无法打印在屏幕上观察的,所以后面\1不显示。

更改代码:

#include<stdio.h>
int main()
{
	printf("E:\\C_language\\day1\\day1\\1.c");
	return 0;
}

结果:

ok,没问题了

11.12 额外巩固

C语言刷题,你会看到这个很熟悉的题目(ps:我已经见过好多次了,所以单拎出来)

如果你一个一个数,ei,14个,选D,那就是经典的错误,标准的零分了

我们学过上面所有的转义字符,一个一个分析一下

\\:这是个转义字符,转为\,一个字符

141:三个字符

\141:记得\ddd吗,标准的八进制,就是十进制97,转a

abc:三个字符

\t:水平制表符,一个字符

加起来9,选A

切记!切记!!切记!!!

转义字符也是字符,算一个字符!!!


十二、语句和语句分类

学英语你是不是最开始学字母,然后背单词,然后学语法?...

C语言同样也有“语法”,不过此“语法”非彼语法,英语什么主谓啊,主谓宾啊,主谓双宾啊,主系表啊...

太麻烦了,太多了

C语言的语句,就5类:

12.1 空语句

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

空语句,一般出现的地方是:这里需要⼀条语句,但是这个语句不需要做任何事,就可以写一个空语句。

12.2 表达式语句

include <stdio.h>

int main()
{
 int a = 20;
 int b = 0;
 b = a + 5; //表达式语句 
 return 0;
}

表达式语句就是在表达式的后边加上分号。

12.3 函数调用语句

#include <stdio.h>

int Add(int x, int y)//创建函数
{
 return x+y;
}

int main()
{
 printf("hehe\n");//函数调⽤语句 
 int ret = Add(2, 3);//函数调⽤语句  
 return 0;
}

函数调用的时候,也会加上分号,就是函数调用语句。

12.4 复合语句

#include <stdio.h>
void print(int arr[], int sz) //函数的⼤括号中的代码也构成复合语句 
{
 int i = 0;
 for(i = 0; i < sz; i++)
 {
 printf("%d ", arr[i]);
 }
}

int main()
{
 int i = 0;
 int arr[10] = {0};
 for(i = 0; i < 10; i++) //for循环的循环体的⼤括号中的就是复合语句 
 {
 arr[i] = 10 - i;
 printf("%d\n", arr[i]);
 }
 return 0;
}

复合语句其实就是代码块,成对括号中的代码就构成一个代码块,也被称为复合语句。

12.5 控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构⽅式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:

1. 条件判断语句也叫分支语句:if语句、switch语句;

2. 循环执行语句:do while语句、while语句、for语句;

3. 转向语句:break语句、goto语句、continue语句、return语句。

这一节本人觉得稍作了解就好,后面还会大费周章的学的。


十三、注释

注释相信大家都听过,也没啥好讲的,注释方法就两种

一种是//,每一行//以后的值不会被识别

//#include<stdio.h>
//int main()
//{
//	printf("终于到最后一节辣");
//	return 0;
//}

另一种是/*文本*/,/*与*/中间的文本不会被读取

/*#include<stdio.h>
int main()
{
	printf("终于到最后一节辣");
	return 0;
}*/

值得注意的是,编译时,注释会被替换成一个空格,所以 min/* 这里是注释*/Value 会变成 min Value ,而不是 minValue 。

对了,还有快捷键,选中文本后ctrl+k+c(先按k后按c),批量注释

选中文本后ctrl+k+u(先按k后按u),批量取消注释


这一节终于结束了,写了3天,本来以为没人看的,自己写写玩

但是发出去竟然有人点赞收藏了,还有人关注我

那我尽量写详细点吧,帮助每一个不懂的小白,帮助那时的我

写作:@fresh_man2

初审:@fresh_man2

二审:@fresh_man2

资料搜集:@fresh_man2

资料参考来源:鹏哥C语言,CSDN,deepseek

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fresh_man2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值