C语言基础——C语言常见概念

简介: C语言基础——C语言常见概念

前言:

       从现在开始我们要进行C语言的学习了,我将尽我所能写出优质博客来配合大家的学习。在学习C语言期间,我们使用的编译器为VS2022,大家有什么疑惑的地方可向我提问,我将知无不言。正所谓:言多必失。我们开始今天的学习吧。最后,还是想说:你们的支持是我的最大动力,还请一键三连。

1.C语言基本构成
       1.1第一个C语言程序
1. #include<stdio.h>
2. int main()
3. {
4. printf("hello,wold");
5. return 0;
6. }

这⾥演⽰VS2022中创建项⽬和编写C代码的过程,并运⾏出结果。 在VS2022上运⾏代码的快捷键: Ctrl+F5

1.2 main函数

       每个 C 语⾔程序不管有多少⾏代码,都是从 main 函数开始执⾏的, main 函数是程序的⼊⼝, main 函数也被叫做:主函数。 main 前⾯的 int 表⽰ main 函数执⾏结束的时候返回⼀个整型类 型的值。所以在 main 函数的最后写 return 0; 正好前后呼应。当程序结束运行时可以通过判断返回值是否为0来确认程序是否正常运行。

1.main函数是程序的⼊⼝

2. main函数有且仅有⼀个

3.即使⼀个项⽬中有多个.c⽂件,但是只能有⼀个main函数(因为程序的⼊⼝只能有⼀个)

第⼀次写代码,⼀些常⻅的错误总结:

1. main 被写成了mian

2. main后边的()漏掉了

3. 代码中不能使⽤中⽂符号,⽐如括号和分号

4.⼀条语句结束后,有分号

1.3 printf函数

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

       那么,什么是库函数呢?

       为了不再重复实现常⻅的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,这些函数再由不 同的编译器⼚商根据标准进⾏实现,提供给程序员使⽤。这些函数组成了⼀个函数库,被称为标准 库,这些函数也被称为库函数。在这个基础上⼀些编译器⼚商可能会额外扩展提供部分函数(这些函 数其他编译器不⼀定⽀持)。 ⼀个系列的库函数⼀般会声明在同⼀个头⽂件中,所以库函数的使⽤,要包含对应的头⽂件。

  1.4 关键字

       C语⾔中有⼀批保留的名字的符号,⽐如: int 、 if 、 return ,这些符号被称为保留字或者关键 字。注意:

1.关键字都有特殊的意义,是保留给C语⾔使⽤的

2. 程序员⾃⼰在创建标识符的时候是不能和关键字重复的

3.关键字也是不能⾃⼰创建的。

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

是不是现在看起来头都大了呢,别担心,这些关键字不用特别记忆,它们会随着我们的学习被大家记住的,它们就是纸老虎,仅此而已。

1.5字符和ASCII编码

       我们在键盘上敲的如:a,b,?,%这些称之为字符。

       我们都明白计算机的内容都是以二进制的形式储存的,那我们在键盘上敲的字符在内存里究竟以何种方式存在呢?当然不可能随意存储,就好比自家的东西不能乱放,不然极容易找不到。       为了解决这个问题,科学家们编排了ASCII编码表,来存放字符。

我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数 据:

• 字符A~Z的ASCII码值从65~90

• 字符a~z的ASCII码值从97~122

• 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32

• 数字字符0~9的ASCII码值从48~57

• 换⾏ \n 的ASCII值是:0

• 在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察

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

1. #include <stdio.h>
2. int main()
3. {
4. printf("%c\n", 'Q');
5. printf("%c\n", 81);//这⾥的81是字符Q的ASCII码值,也是可以正常打印的
6. return 0;
7. }

可打印字符展⽰:

1. #include <stdio.h>
2. int main()
3. {
4. int i = 0;
5. for (i = 32; i <= 127; i++)
6.  {
7. printf("%c ", i);
8. if (i % 16 == 15)
9. printf("\n");
10.  }
11. return 0;
12. }

结果如下:

1.6转义字符

你看到前面的\n,你肯定会有疑惑,但是,当你看到这时,相信你应该明白了这个是转义字符。

其实在字符中有⼀组特殊的字符是转义字符,转义 字符顾名思义:转变原来的意思的字符。

比如,看看下面的代码:

1. #include <stdio.h>
2. int main()
3. {
4. printf("abcndef");
5. return 0;
6. }

和以下代码:

1. #include <stdio.h>
2. int main()
3. {
4. printf("abc\ndef");
5. return 0;
6. }

试着将它们运行一下:

你会发现两个结果完全不一样,这是为什么呢?

这就是转义字符的问题, \n 是⼀个转义字符表⽰换⾏的意思,我们可以简单的理解为 \ 让 n 的意思 发⽣了转变, n 本来是⼀个普通的字符,被 \ 转义为换⾏的意思。 C语⾔中像这样的转义字符还有⼀些,具体如下:

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

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

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

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

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

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

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

• \n :换⾏符。

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

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

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

下⾯2种转义字符可以理解为:

字符的8进制或者16进制表⽰形式 • \ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X • \xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0

\0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其 ASCII码值是0.

2.语句和语句分类

C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:

1空语句

2 表达式语句

3函数调⽤语句

4复合语句

5 控制语句

2.1 空语句

空语句是最简单的,⼀个分号就是⼀条语句,是空语句。

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

1. #include <stdio.h>
2. int main()
3. {
4.  ;//空语句
5. return 0;
6. }
2.2表达式语句

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

1. #include <stdio.h>
2. int main()
3. {
4. int a = 20;
5. int b = 0;
6.  b = a + 5; //表达式语句
7. return 0;
8. }
2.3函数调用语句

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

1. #include <stdio.h>
2. int Add(int x, int y)
3. {
4. return x+y;
5. }
6. int main()
7. {
8. printf("hehe\n");//函数调⽤语句
9. int ret = Add(2, 3);//函数调⽤语句 
10. return 0;
11. }
2.4复合语句

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

1. #include <stdio.h>
2. void print(int arr[], int sz) //函数的⼤括号中的代码也构成复合语句
3. {
4. int i = 0;
5. for(i=0; i<sz; i++)
6.  {
7. printf("%d ", arr[i]);
8.  }
9. }
10. int main()
11. {
12. int i = 0;
13. int arr[10] = {0};
14. for(i=0; i<10; i++) //for循环的循环体的⼤括号中的就是复合语句
15.  {
16.  arr[i] = 10-i;
17. printf("%d\n", arr[i]);
18.  }
19. return 0;
2.5控制语句

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

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

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

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

后期会给⼤家⼀⼀介绍控制语句。

3.注释

       注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。 注释是给程序员⾃⼰,或者其他程序员看的。 好的注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没必要的注释。 当然不写注释可能会让后期阅读代码的⼈抓狂。 写注释⼀定程度上反应了程序作者的素质,建议⼤家写必要的注释,在未来找⼯作的时候,写代码时 留下必要的注释也会给⾯试官留下更好的印象。

3.1 注释的2种形式

C 语⾔的注释有两种表⽰⽅法。

1. /**/ 的形式 第⼀种⽅法是将注释放在 /*...*/ 之间,内部可以分⾏。

1. /* 注释 */
2. /*
3.  这是⼀⾏注释
4. */

这种注释可以插在⾏内。

int fopen(char* s /* file name */, int mode);

上⾯⽰例中, /* file name */ ⽤来对函数参数进⾏说明,跟在它后⾯的代码依然会有效执⾏。 这种注释⼀定不能忘记写结束符号 */ ,否则很容易导致错误。

/**/ 的这个注释也不⽀持嵌套注释, /* 开始注释后,遇到第⼀个 */ 就认为注释结束了。

2.//形式

第⼆种写法是将注释放在双斜杠 // 后⾯,从双斜杠到⾏尾都属于注释。这种注释只能是单⾏,可以 放在⾏⾸,也可以放在⼀⾏语句的结尾。这是 C99 标准新增的语法。

1. // 这是⼀⾏注释
2. 
3. int x = 1; // 这也是注释

不管是哪⼀种注释,都不能放在双引号⾥⾯。 双引号⾥⾯的注释符号,会成为字符串的⼀部分,解释为普通符号,失去注释作⽤。

3.2注释会被替换

编译时,注释会被替换成⼀个空格,所以 min/* 这⾥是注释*/Value 会变成 min Value ,⽽不 是 minValue 。

最后:

       今天的学习到这里就结束了,期待与大家的再一次相逢。

完!

相关文章
|
6月前
|
存储 程序员 C语言
C语言(1)----C语言是什么?基本概念介绍
C语言(1)----C语言是什么?基本概念介绍
61 3
|
3月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
78 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
3月前
|
存储 编译器 程序员
【C语言篇】C语言常见概念
编译时,注释会被替换成⼀个空格,所以min/* 这⾥是注释*/Value会变成min Value,⽽不是minValue。这是C99标准新增的语法。
40 0
|
5月前
|
IDE Unix 编译器
一:《初学C语言》— C语言常见概念
在本篇文章中,详细讲述了C语言的常见概念。意在能够让读者初步了解C语言,为后续C语言的学习做铺垫
126 5
一:《初学C语言》—  C语言常见概念
|
4月前
|
存储 Java 程序员
【C语言入门】C语言入门:探索编程世界的基础概念
【C语言入门】C语言入门:探索编程世界的基础概念
105 2
|
5月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
5月前
|
存储 自然语言处理 编译器
C语言常见概念
C语言常见概念
|
5月前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
108 7
|
6月前
|
Java C语言 C++
从C语言到C++_28(红黑树RedBlackTree)概念+插入接口实现(上)
从C语言到C++_28(红黑树RedBlackTree)概念+插入接口实现
52 4
|
6月前
|
C语言 容器
从C语言到C++_27(AVL树)概念+插入接口实现(四种旋转)(上)
从C语言到C++_27(AVL树)概念+插入接口实现(四种旋转)
47 4