前言:
从现在开始我们要进行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 。
最后:
今天的学习到这里就结束了,期待与大家的再一次相逢。
完!