零基础玩转C语言系列第一章——初始C语言(上)

举报
安然无虞 发表于 2022/05/26 22:57:40 2022/05/26
【摘要】 目录 一、如何学好C语言? 1、鼓励你,为你叫好。 2、挤时间学习 3、学好编程,不仅仅是学好C语言 二、初始C语言 本章目标 本章重点 1、什么是C语言? 2、第一个C语言程序 3、数据类型 4、变量、常量 1.定义变量的方法 2.变量的分类 3.变量的作用域和生命周期 4.常量 4、字符串+转义字符 ...

目录

一、如何学好C语言?

1、鼓励你,为你叫好。

2、挤时间学习

3、学好编程,不仅仅是学好C语言

二、初始C语言

本章目标

本章重点

1、什么是C语言?

2、第一个C语言程序

3、数据类型

4、变量、常量

1.定义变量的方法

2.变量的分类

3.变量的作用域和生命周期

4.常量

4、字符串+转义字符

1.字符串

2.转义字符

5、注释

6、选择语句

7、循环语句

8、函数

三、练习巩固题

四、结语


【声明】:第一章只是简单介绍一下C语言的大体内容,所提知识点点到为止,不做过多阐述,在后面的博文中笔者会详细介绍。在接下来的两个多月里,博主将会持续更新C语言模块,由初阶到进阶,层层递进,每篇文章的后面都会附加上专门的习题供铁汁们练习。

【大学课程现状】:大学课程主要侧重于素质教育,远远满足不了公司需求,单单是靠在学校里面学的东西很难找到一份满意的工作,可能你现在大一,或是大二,也可能你现在很迷茫,不知道从哪里学起等等,你可以看看笔者的博客,我们一起学习,一起加油,保持空杯心态,从零开始。

一、如何学好C语言?

1、鼓励你,为你叫好。

C 生万物
编程之本
长远 IT 职业发展的首选
C 语言是母体语言,是人机交互接近底层的桥梁
学会 C/C++ ,相当于掌握技术核心
知识点一竿子打通。
IT 行业,一般每 10 年就有一次变革
50 年间,在 TIOBE 排行榜中, C/C++ 位置长期霸占前三名,没有丝毫撼动,可谓经典永不过 时!

2、挤时间学习

欲戴王冠,必承其重。
如果你总是和别人走一样的路怎么才能保证超越别人,想要变得优秀,那就得付出不一样的努力。
每个人一天只有24小时,要挤时间学习。

3、学好编程,不仅仅是学好C语言

在找工作前,我们必须要学好的是:

计算机语言

数据结构和算法

操作系统

计算机网络

项目实战

二、初始C语言

本章目标

基本上了解C语言的基础知识,对C语言有一个大概的认识。

每个知识点就是简单的认识,不做详细讲解,后面的博客中都会讲到。

本章重点

  • 什么是C语言
  • 第一个C语言程序
  • 数据类型
  • 变量、常量
  • 字符串+转义字符
  • 注释
  • 选择语句
  • 循环语句
  • 函数
  • 数组
  • 操作符
  • 常见关键字
  • #define定义常量和宏
  • 指针
  • 结构体    

1、什么是C语言?

C 语言是一门通用 计算机编程语言 广泛应用于底层开发。
C语言是用来编写代码的,写代码是为了解决问题的。而C语言中的语法,就是规定了怎么写代码是正确的,即规定了代码的书写规则。举个通俗的例子,我们大家都是中国人,咱们使用的汉语自然也有语法,汉语语法中,“我吃饭了”,肯定不会有人说成“吃饭我了”,哈哈,如果有的话,当我没说过;老外使用的语言中也有语法,比如英语中的主谓宾、主系表等。
C 语言是一门面向过程的计算机编程语言,与 C++ Java 等面向对象的编程语言有所不同。
这里补充一下“集成开发环境”的概念:编辑器+编译器+链接器+调试器

2、第一个C语言程序


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

分析第一个程序:

工欲善其事,必先利其器:推荐铁汁们使用Visual Studio 2019编译器, 可能很多学校老师推荐使用的是Dev-C++,因为Dev-C++已经10多年没有更新了,许多功能已经远远满足不了现在的编写代码或者开发的需求,而且敲出的代码不美观,不便于好的代码风格的养成。

下面是安装Visual Studio 2019的教程,打算编写更高质量代码的铁汁们抓紧行动起来吧。

VS2019的安装和简单使用-visual studio 2019 安装教程_哔哩哔哩_bilibili

UP主是笔者学习专业课的启蒙老师,迷茫的同学赶紧关注他,强烈建议铁汁们看他B站上面的视频学习C语言,笔者可以肯定地说,他讲解的C语言是B站包括慕课等自学视频中讲解的最好、最通透、最...不信你先看他个两节课,你绝对会喜欢的,只要你好好跟着他的课学上两个月再配合笔者的博文,绝对轻轻松松超出身边同等段位的同学一大截,嘿嘿,毫不费力考个专业课第一它不香吗!

3、数据类型

char //字符数据类型

short(完整版:short int) //短整型

int //整型

long(完整版:long int) //长整型

long long //更长的整形

float //单精度浮点数

double //双精度浮点数

问1:C语言中有没有字符串类型?

答:C语言中没有字符串类型,描述字符串的时候一般采用字符串数组的形式。

问2:为什么出现了这么多的类型?

答:存在这么多的类型,是为了更加丰富的表达生活中的各种值。而且数据类型不同,计算机的使用效率就有所不同,对于一个变量,可根据其表示的范围去选择合适的用来定义它的数据类型,避免造成空间上的浪费,因为每个数据类型占的字节数不一样,也就是说计算机在存放这些数据类型的时候所用的空间是不同的。

问3:每种类型的大小是多少?

答:


   
  1. #include<stdio.h>
  2. int main()
  3. {
  4. printf("%d\n", sizeof(char));//1
  5. printf("%d\n", sizeof(short));//2
  6. printf("%d\n", sizeof(int));//4
  7. printf("%d\n", sizeof(long));//4(其实C语言中没有明确规定long的大小,只需要不小于int类型即可)
  8. printf("%d\n", sizeof(long long));//8
  9. printf("%d\n", sizeof(float));//4
  10. printf("%d\n", sizeof(double));//8
  11. return 0;
  12. }

对该代码的说明:里面1 2 4 4 8 4 8表示的是各个数据类型的大小,单位是字节,其中出现了C语言中的关键字sizeof, sizeof是用来计算类型或者是类型所创建的变量的大小,单位是字节。其中打印函数中的"%d",表示打印一个十进制的整数。

类型的使用:


   
  1. #include<stdio.h>
  2. int main()
  3. {
  4. //类型 类型名
  5. char ch = 'w';//注意字符是用单引号引起来的
  6. int weight = 120;//使用int这种整型类型创建了一个变量叫weight,并且赋值为120
  7. //注意变量的创建是要在内存中开辟空间的
  8. int salary = 20000;
  9. return 0;
  10. }

4、变量、常量

生活中有些值是不变的,比如圆周率,性别,身份证号码,血型等等;

有些值是可变的,比如年龄,体重,身高,薪资等等。

不变的值,C语言用常量来表示;可变的值,C语言用变量来表示。

1.定义变量的方法

类型  类型名


   
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int age = 150;//定义一个整型变量age,并且给其赋值为150
  5. //注意变量在创建的时候不初始化,是一种不好的代码风格
  6. //当一个局部变量不初始化的时候,它的值是随机的,像这里的age和ch就是局部变量
  7. char ch = 'w';
  8. return 0;
  9. }

2.变量的分类

  • 局部变量
  • 全局变量

注意:{ } ,就是代码块,在代码块内部定义的变量就叫局部变量,在代码块外部定义的变量叫全局变量。


   
  1. #include<stdio.h>
  2. int global = 2019;//全局变量
  3. int main()
  4. {
  5. int a = 2018;//局部变量
  6. //下面定义的global会不会有问题?
  7. int global = 2021;//局部变量
  8. printf("global = %d\n", global);
  9. return 0;
  10. }

总结:

上面局部变量global的定义其实是没有什么问题!

但是为什么打印的是局部变量global的值,而不是全局变量global的值?

注意:当局部变量和全局变量同名的时候,局部变量优先使用。

所以,局部变量和全局变量最好不要重名。

3.变量的作用域和生命周期

作用域:程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效可用的。

而限制这个名字的可用性的代码范围就是这个名字的作用域。

1.局部变量的作用域是局部变量所在的局部范围;

2.全局变量的作用域是整个工程。

生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

1.局部变量的生命周期:

进入局部变量所在的范围(作用域)生命周期开始,出作用于生命周期结束;

2.全局变量的生命周期:

整个程序的生命周期,也就是main函数的生命周期。

4.常量

C语言中的常量和变量的定义形式有所差异。

C语言中的常量分为以下4种:

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量

字面常量:如100(字面常量)  3.14(字面常量)  "abc"(字符串常量)  'w'(字符常量);

const修饰的常变量:当一个变量的值不想被修改,用const“保护”起来就行了,此时的变量变成了常变量,但是其实质仍然是变量,常量的某些性质仍然不具备。

#define定义的标识符常量:如#define  MAX  100   --->此后在程序中出现MAX就代表了100,如果需要将程序中100数值全部改变,一个一个改太不方便,而用了#define MAX 100 ,只需要将MAX后面的100改成你想要的数字,后面程序中都会改变,这样就方便多了。

枚举常量:在下面的例子中介绍


   
  1. #include<stdio.h>
  2. enum Sex
  3. {
  4. //枚举这种类型的可能取值,就是枚举常量,如括号中的MALE,FEMALE,SECURT
  5. MALE, //男
  6. FEMALE,//女
  7. SECURT //未知
  8. };
  9. int main()
  10. {
  11. //字面常量演示
  12. 3.14;//字面常量
  13. 100;//字面常量
  14. //const修饰的常变量
  15. const float pai = 3.14f; //这里的pai是const修饰的常变量
  16. pai = 5.14;//会报错,是不能修改的,因为用const保护起来了
  17. //#define定义的标识符常量演示
  18. #define MAX 100
  19. printf("%d\n", MAX);//100
  20. //枚举常量演示
  21. printf("%d\n", MALE);//0
  22. printf("%d\n", FEMALE);//1
  23. printf("%d\n", SECURT);//2
  24. //注意之所以依此打印出0 1 2,是因为枚举常量默认是从0开始,一次向下递增1的
  25. return 0;
  26. }

对const的使用唠叨一下:上面例子上的pai被称为const修饰的常变量,const修饰的常变量在C语言中只是在语法层面限制了变量pai不能直接被改变,但是pai本质上还是一个变量,所以才叫做常变量。

4、字符串+转义字符

1.字符串

"hello world.\n"

这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。

注意:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算作字符串内容。


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4. //下面这段代码,打印的结果是什么,为什么?(突出'\0'的重要性)
  5. char arr1[] = "bit";//字符串的末尾隐藏了一个'\0','\0'是字符串的结束标志
  6. char arr2[] = { 'b','i','t' };//一定要注意着一行代码,这样写是错误的,找不到'0',不知道字符
  7. //串数组什么时候结束求长度则是随机值,应该改成下面这种形式
  8. char arr3[] = { 'b','i','t','\0' };
  9. printf("%s\n", arr1);//bit
  10. printf("%s\n", arr2);//乱码->没有'\0',没有明确哪儿结束
  11. printf("%s\n", arr3);//bit
  12. return 0;
  13. }

2.转义字符

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

假如我们要在屏幕上打印一个目录:c:\code\test.c

我们该如何写代码?


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

实际上程序的运行结果是这样的:

哈哈,是不是很奇妙,所以这里就不得不提一下转义字符了,转义字符顾名思义就是转变意思。

看看下面一些转义字符:

转义字符                                                释义

  • \?                               在书写连续多个问号时,防止它们被解析成三字母词
  • \'                                用于表示字符常量'
  • \"                                用于表示一个字符串内部的双引号
  • \\                                用于表示一个反斜杠,防止它被解释成一个转义序列符
  • \a                               警告字符,蜂鸣
  • \b                               退格符
  • \f                                进纸符
  • \n                               换行
  • \r                                回车
  • \t                                水平制表符
  • \v                               垂直制表符
  • \ddd                           ddd表示1~3个八进制的数字
  • \xdd                           dd表示2个十六进制的数字

 铁汁们要注意哦,颜色越深代表它地位越高,越重要。


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4. //问题1:在屏幕上打印一个',该怎么做?
  5. //问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号,该怎么做?
  6. printf("%c\n", '\'');
  7. printf("%s\n", "\"");
  8. return 0;
  9. }

 下面我们简单介绍一下,'\ddd' 和 '\xdd'这两个转义字符:

1. \ddd,虽然看起来比较长,其实就代表一个转义字符,说到底不还是一个字符'\ddd'嘛。ddd表示1~3个八进制的数字。如:\130 这种写法是对的,因为‘\ddd’中的\后面直接跟上1~3个数字,并且必须是八进制的数字,可以是'\130',可以是'\62',也可以是'\5',这里就要简单介绍一下十进制、八进制和十六进制了:

十进制比较简单,我们大家应该都很熟悉,十进制数字组成:0 1 2 3 4 5 6 7 8 9;

八进制数字组成:0 1 2 3 4 5 6 7

十六进制数字组成:0 1 2 3 4 5 6 7 8 9 A B C D E F

2. \xdd, dd表示两个十六进制数字,如\x30 ,  '\xdd'中的\x后面跟的数字默认的是十六进制的

 补充介绍strlen():strlen(),在求字符串长度的时候,只算'\0'之前的部分

一定要注意strlen()的使用,后面学习中用到的比较多!

一道笔试题:


  
  1. //程序输出什么?
  2. #include<stdio.h>
  3. #include<string.h>
  4. int main()
  5. {
  6. printf("%d\n", strlen("abcdef"));
  7. printf("%d\n", strlen("c:\test\628\test.c"));
  8. return 0;
  9. }

为了不影响铁汁思考,这里答案就不给出了,你先自己数一下,确定答案后,再输进编译器中,看看屏幕上输出的和你想的是不是一致的。

5、注释

  • 代码复杂时最好加上注释,利己利他;
  • 代码暂时不要的时候也可以注释掉。

比如:


  
  1. #include<stdio.h>
  2. int Add(int x, int y)
  3. {
  4. return x + y;
  5. }
  6. /*C语言注释风格
  7. int Sub(int x, int y)
  8. {
  9. return x -y;
  10. }
  11. */
  12. int main()
  13. {
  14. //C++注释风格
  15. //int a = 10;
  16. //调用Add函数,完成加法
  17. printf("%d\n", Add(1, 2));
  18. return 0;
  19. }

很显然,注释有两种风格:

  • C语言风格的注释:/* ... */
  • C++风格的注释: //...

注意C语言风格的注释缺陷是不能嵌套注释,C++风格的注释好处是可以注释一行,也可以注释多行,所以在这里就不用说了,比这当然建议铁汁们用C++风格的注释。

6、选择语句

什么叫“选择”呢?

如果你好好学习,校招时拿一个好offer,过上上高质量人生;

如果你不学习,毕业等于失业,回家卖红薯。

这就是选择!

代码示例:


  
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int coding = 0;
  5. printf("你会去敲代码吗?(选择1or0);>");
  6. scanf("%d", &coding);
  7. if (coding == 1)
  8. {
  9. printf("坚持,你会有好offer!\n");
  10. }
  11. else
  12. {
  13. printf("没了没了,回家卖红薯...\n");
  14. }
  15. return 0;
  16. }

7、循环语句

有些事情必须一直做,比如太阳日复一日的东升西落,比如铁汁们,日复一日的努力学习。

那么C语言中如何实现循环呢?

  • while语句-简单讲解
  • for语句(后面详细介绍)
  • do...while语句(后面详细介绍)

  
  1. //while循环的实例
  2. #include<stdio.h>
  3. int main()
  4. {
  5. printf("好好敲代码\n");
  6. int line = 0;
  7. while (line <= 100000)
  8. {
  9. line++;
  10. printf("我要继续努力敲代码\n");
  11. }
  12. if (line > 100000)
  13. {
  14. printf("好offer\n");
  15. }
  16. return 0;
  17. }

在这里笔者又要啰嗦了:建议铁汁们大学四年代码量至少达到100000行,没错,十万行,用我的亲身体会告诉大家,听课,或者是看一些资料的时候,很容易明白,但是轮到自己上手编写的时候,很茫然,不知道怎么入手,究其根本原因,还不是代码敲少了,代码量跟不上!你自己在编译器上面实现一个题目,就拿之后零基础玩转C语言系列结束,推出的算法与数据结构为例吧,我们在听老师讲数据结构的时候,能听懂,但是你不敲出来,不自己实现个三四遍,我不信过比较长的一段时间你还记得住,反正笔者是记不住,嗐,怪笨了, 哈哈,不过经过笔者的努力,C版本和Java版本的现在都能敲出来哦,所以说什么呢,听老师讲三遍,都不如自己敲出来实现一遍来的实际,如果想要变成自己的,至少要自己实现三四遍,而且还要不定时的复习一下,说到这,笔者先去看一下之前的链表,有几天没看了......然后举个现实点的例子吧,有的公司在面试的时候,要求你在十五分钟之内写一个带头循环双向链表,如果不是特别熟悉,根本写不出来,更别说是在那样的强压之下了,所以...请铁汁们再将上面读一遍。

在这里可能就有铁汁要问了,写了这么多的代码,在编译器上创建了那么多的项目,过了一年或者半年之后,我想找某一天自己要敲的代码,怎么办,肯定没有头绪了,说不定还被自己给删了,所以,笔者在这里又有推荐了,哈哈,百利而无一害哈,大家伙花费自己的时间来看笔者的博文,那就是笔者的铁汁,笔者的小友,肯定不会浪费大家的时间白耽误功夫的。所以,笔者推荐的是,国内的网站,叫gitee,是中文版本,访问速度快。属于代码管理工具,简单地说就是把你的代码放到一个网站上面去保存。可能大家之前听过github,它也是代码管理工具,不过是国外的,对我们的网络要求高,访问慢,而且还是外文版,由于笔者自己使用的是gitee,体验很好,所以推荐铁汁们使用,安装教程放在下面咯。

gitee(码云)的注册和代码提交【手把手】_哔哩哔哩_bilibili

还有还有,推荐这个第二点原因是,以后铁汁们在找工作的时候,可以将自己的gitee网址链接放在简历上面,面试官看的时候,发现你每天都上传代码,心里肯定会说,这小姑娘,或者这小伙子不错,很认真...所以这个不但是自己的加分项,而且在面试官面前多了一项谈资,掌握一点主动权不香嘛。

好了好了,又跑题了,哈哈,开始干正事...

8、函数

上面讲了main函数,也就是主函数。一个工程中,主函数有且只有一个。

函数,什么是函数呢?

数学中有函数,如f(x) = 2*x + 1;//功能是求2x + 1的值

                             f(x,y) = x + y;//功能是求x + y的值

C语言把一些独立的功能封装成一个个函数,供使用者调用。


  
  1. //求两个整数之和
  2. #include<stdio.h>
  3. int main()
  4. {
  5. int num1 = 0;
  6. int num2 = 0;
  7. int sum = 0;
  8. printf("请输入两个整数:\n");
  9. scanf("%d %d", &num1, &num2);
  10. sum = num1 + num2;
  11. printf("sum = %d\n", sum);
  12. return 0;
  13. }

上述代码,写成函数如下:


  
  1. #include<stdio.h>
  2. //函数定义
  3. int Add(int x, int y)//int是返回类型,Add是函数名,x和y是函数的形式参数
  4. {
  5. //大括号里面的内容是函数体
  6. int z = x + y;
  7. return z;
  8. }
  9. int main()
  10. {
  11. int num1 = 0;
  12. int num2 = 0;
  13. int sum = 0;
  14. printf("请输入两个整数:\n");
  15. scanf("%d %d", &num1, &num2);
  16. sum = Add(num1, num2);//函数调用
  17. printf("sum = %d\n", sum);
  18. return 0;
  19. }

打个比方吧:把函数想象成流水线工厂,比如汽车工厂。

函数的特点就是简化代码,方便代码复用,即如果需要,直接调用即可 

三、练习巩固题

小飞机_牛客题霸_牛客网

被5整除问题_牛客题霸_牛客网

计算带余除法_牛客题霸_牛客网

四、结语

初始C语言部分暂时先介绍到这里,后面还有部分内内容正在整理...

感觉笔者写的还可以,或者自己有些许收获的时候,麻烦小友铁汁们动动小手,给俺来个一键三连,万分感谢。

最后,笔者在这里特别感谢两位铁汁对我上一篇关于蓝桥杯的博文的支持,当然还要感谢其他小友们的支持与认可,我在这里谢谢大家。因为我刚开始写博客没多久,而且既然选择做了,就不能辜负铁汁和粉丝们,所以正常一篇博客整理出来都是很用心思的,前前后后整合自己的纸质笔记和电子笔记才出的来一篇,花费了很多时间,不过当我看到评论的时候,我真的很感动,铁汁们的支持就是我最大的动力,笔者真心希望能通过博文帮助到铁汁们,哪怕只是一个小小的知识点,只要你觉得有所收获,就是对我最大的支持,在接下来的时光里,笔者愿意陪铁汁们一起成长,互相学习,虽任重而道远吧,但是未来可期,不负韶华呀铁汁们。

文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。

原文链接:bit-runout.blog.csdn.net/article/details/120799064

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。