本文目标

  • 一、什么是C语言
    • 1.C语言是与计算机交流的语言
    • 2.计算机语言的发展
    • 3.C语言的编译
  • 二、第一个C语言程序
    • 1.代码
    • 2.main函数介绍
    • 3.其他问题
  • 三、数据类型
    • 1.简单的介绍
    • 2.输入输出格式
    • 3. 变量、常量
      • 1.定义变量的方法
      • 2.变量的分类
      • 3.变量的使用
      • 4.变量的作用域和生命周期
      • 5.常量
  • 四、字符串+转义字符+注释
    • 1.字符串
    • 2.转义字符
    • 3.注释
  • 五、语句
    • 1.选择语句
    • 2.循环语句

前言:以下只是本人对C语言的理解,如有错误还请指正

一、什么是C语言

1.C语言是与计算机交流的语言

人与人之间交流需要语言,例如汉语、英语、法语等。人与计算机交流同样需要语言,人和计算机交流用计算机语言。C 语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

2.计算机语言的发展

  1. 计算机是通过二进制工作的,最早人们使用0101001这样的二进制指令处理计算机问题。后来逐渐产生了汇编指令(助记符)(ADD),即汇编语言,将一部分二进制代码记为助记符。
  2. 在汇编语言的基础上逐渐演化出B语言,后来变成C语言,此时的C语言已经成为一门高级语言
  3. 最早各公司使用的C语言标准各不相同,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。
  4. 现在普遍支持的是C89标准
  5. C语言需要使用编译器,常用的主要有:GCC、MSVC等(MSVC是VS的编译器)

3.C语言的编译

C/C++是典型的编译型语言

过程:code.c(源代码)—编译—>test.obj—链接—>test.exe(可执行程序)

二、第一个C语言程序

1.代码

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

2.main函数介绍

  1. main函数是程序的入口
  2. 一个工程中main函数有且仅有一个(其他.c文件中也不能有main函数)
  3. main函数的标准写法(不建议使用void main这种古老写法)
int main()
{return 0;
}
/*void main()  不推荐使用{}*/
  • return 0;指返回0这个整型值,与函数的返回类型int对应
  • return的整数其实也可以是其他数字,不过在业界默认return 0表示正常退出,return 1表示异常退出

3.其他问题

  1. #include<stdio.h>当需要使用C语言内置函数时都需要引用头文件才能使用,stdio表示standard input output(标准输入输出)
  2. printf是一个库函数,是一个专门用来打印数据的输出函数
  3. 从头到尾调试:ctrl+F5

三、数据类型

该部分涉及到常量与变量的介绍

1.简单的介绍

C语言包含的数据类型

定义变量的本质:在内存中开辟一块空间,用来保存数据。

而定义一个变量,是需要类型的,这个是基本语法决定的。类型决定了变量开辟空间的大小。

C中为何要有类型?本质是对内存进行合理化划分,按需索取。

2.输入输出格式

char 字符型 1byte %c
short 短整型 2bytes %d
int 整型 4bytes %d
long 长整型 >=4bytes %ld
long long 更长的整型 8bytes %lld
float 单精度浮点型 4bytes %f
double 双精度浮点型 8bytes %lf
#include <stdio.h>
int main()
{printf("%d\n", sizeof(char));//1printf("%d\n", sizeof(short));//2printf("%d\n", sizeof(int));//4printf("%d\n", sizeof(long));//4(大于等于4小于等于8)printf("%d\n", sizeof(long long));//8printf("%d\n", sizeof(float));//4printf("%d\n", sizeof(double));//8printf("%d\n", sizeof(long double));//8return 0;}

3. 变量、常量

生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等) 有些值是可变的(比如:年龄,体重,薪资)。

不变的值,C语言中用常量的概念来表示,用变量来表示变的值。

1.定义变量的方法

int age = 150;
float weight = 45.5f;
char ch = 'w';

注意:45.5加f表示float类型,否则默认为double类型。

2.变量的分类

C语言变量分为局部变量和全局变量

  • 局部变量:包含在代码块中的变量称为局部变量。局部变量具有临时性。进入代码块,自动形成局部变量,退出代码块自动释放。

  • 全局变量:在所有函数外定义的变量,叫做全局变量。全局变量具有全局性

  • 那什么是代码块呢?代码块:用{}括起来的区域,叫做代码块

#include <stdio.h>
int global = 2020;//全局变量
int main()
{int local = 2021;//局部变量//下面定义的global会不会有问题?  int global = 2022;//局部变量printf("global = %d\n", global);  return 0;
}//输出:global = 2022

总结:

  1. 上述的局部变量global变量的定义没有问题。
  2. 当局部变量和全局变量同名的时候,优先使用局部变量。

补充:当一个全局变量在同一个工程中一个.c文件中定义时,也可以通过extern声明在另一个.c文件中使用

语法:

extern 类型 变量名;
extern int a;

3.变量的使用

#include <stdio.h>
int main()
{int num1 = 0;int num2 = 0;int sum = 0;printf("输入两个操作数:>");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("sum = %d\n", sum);return 0;
}

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

作用域

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

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

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

生命周期

变量的生命周期指的是该变量从定义到被释放的时间范围,所谓的释放,指的是曾经开辟的空间“被释放”。换句话说就是变量的创建到变量的销毁之间的一个时间段。

  1. 局部变量的生命周期是:进入代码块,形成局部变量[开辟空间],退出代码块,“释放”局部变量。

  2. 全局变量的生命周期是:定义完成之后,程序运行的整个生命周期内,该变量一直有效

    作用域和生命周期。

5.常量

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

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

  1. 字面常量

    #include <stdio.h>
    {3.14;//字面常量1000;//字面常量return 0;
    }
    
  2. const 修饰的常变量

    #include <stdio.h>
    {//const 修饰的常变量const float pai = 3.14f;   //这里的pai是const修饰的常变量,f表示说明它是一个浮点数pai = 5.14;//是不能直接修改的return 0;
    }
    

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

    验证:

    #include <stdio.h>
    {int n = 0;int arr[n] = {0}; return 0;
    }
    

    这个代码是编译不过去的,因为在C89标准中,数组元素的数量是不能用变量表示的。如果此处n为常量,那这个代码是可以编译成功的,间接证明了const修饰的这个变量是个无法直接改变的变量(可以通过指针的方式间接改变)

  3. #define 定义的标识符常量

    #include <stdio.h>
    //#define的标识符常量 演示
    #define MAX 100
    int main()
    { printf("max = %d\n", MAX);return 0;
    }
    //这个变量是没有类型的,就只是100
    
  4. 枚举常量

    #include<stdio.h>
    enum Sex//生活中有一些属性时可以直接列举出全部可能性的
    {MALE,//内部储存为0FEMALE,//内部储存为1SECRET//内部储存为2
    };//括号中的MALE,FEMALE,SECRET是枚举常量
    int main()
    {//枚举常量演示printf("%d\n", MALE);printf("%d\n", FEMALE);printf("%d\n", SECRET);return 0;
    }
    

    注:枚举常量的默认是从0开始,依次向下递增1的

四、字符串+转义字符+注释

1.字符串

字符串:由双引号引起的一串字符(“abcdef”)称为字符串字面值,简称字符串。

"hello world\n"

C语言没有字符串对应的数据类型。

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

代码演示:

#include<stdio.h>
int main()
{char arr1[]="abcdef";char arr2[]={'a','b','c','d','e','f'};//这两个数组定义一的方式一样吗?printf("%s\n",arr1);  //abcdefprintf("%s\n",arr2);  //abcdef烫烫烫烫烫abcdef(abcdef后面的部分随机)printf("%d\n", strlen(arr1));    //6printf("%d\n", strlen(arr2));    //22(随机值)return 0;
}

原因:第一种方式数组第7个元素为 \0 ,而第二种方式数组只存储了六个字母,第一个可以找到字符串的结束标志,而第二个找不到,只能不断地往后找直到找到 \0 ,strlen()函数以也以\0为停止计数的标志,原理相同。

形象一点:

arr1 a b c d e f \0(读取到\0,结束)
arr2 a b c d e f 读不到\0一直往后找,直到找到\0

可以改成: 在arr2 后面加一个’\0’

char arr2[]={'a','b','c','d','e','f','\0'};

字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不属于字符串内容,使用strlen()函数时,strlen(arr1)返回6;如果arr2后面没有加’\0’,strlen(arr2)返回随机值。

2.转义字符

转义字符顾名思义就是转变意思。

转义字符 释义
? 在书写连续多个问号时使用,防止他们被解析成三字母词
用于表示字符常量’
\“ 用于表示一个字符串内部的双引号
\ 用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符,将当前位置移到下一页的开头
\n 换行
\r 回车,将当前位置移到本行的开头。
\t 水平制表符,将当前位置移到下一个tab位置。
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。 如: \130 X(八进制的130转换成十进制的88,88对应的ASCII码为X)
\xdd dd表示2个十六进制数字。 如: \x30 0

\a, \b, \f, \v不常用。

关于\ddd和\xdd的补充

一、'\ddd'
ddd表示1个、2个或者3个八进制数,这也就意味着’\130’是一个转义字符,’\43’也是一个转义字符

printf("%d\n",'\130');

这句代码输出的结果是65,因为输出格式是整型,所以八进制数130转换为十进制数88(1*8^2+3*8^1+0*8^0=88),输出88

printf("%c\n",'\101');

这句代码输出的结果是X,因为输出格式是字符型,所以八进制数130转换为十进制数88,然后输出ASCII码表中对应的字符X

二、'\xdd'

dd表示2个十六进制数

printf("%c\n", '\x30');

这句代码输出的结果是0,输出格式为字符型,十六进制数30转换为十进制数48(3*16^1+0*16^0=48),然后输出ASCII表中对应的字符0

%d 打印整型
%c 打印字符
%s 打印字符串
%f 打印float类型的数据
%lf 打印double类型的数据
%zu 打印sizeof的返回值
//程序输出什么?
#include <stdio.h>int main()
{printf("%d\n", strlen("abcdef"));    //打印6// \62被解析成一个转义字符,不加8,八进制是0-7printf("%d\n", strlen("c:\test\628\test.c"));    //打印14return 0;
}

字符串中,转义字符算作一个字符。

3.注释

  1. 代码中有不需要的代码可以直接删除,也可以注释掉
  2. 代码中有些代码比较难懂,可以加一下注释文字

为了让大家更直观的理解注释及其使用,代码如下:

#include <stdio.h>
int Add(int x, int y)
{return x+y;
}/*C语言风格注释
int Sub(int x, int y)
{return x-y;
}
*/int main()
{//C++注释风格//int a = 10;//调用Add函数,完成加法 printf("%d\n", Add(1, 2));return 0;
}

注释的两种风格:

  • C语言风格的注释 /*xxxxxx*/

缺陷:不能嵌套注释

  • C++风格的注释 //xxxxxxxx

优点:可以注释一行也可以注释多行

缺点:多行注释操作繁琐

这里推荐大家使用C++风格的注释。

五、语句

1.选择语句

在人生道路中,我们无时无刻不在做出选择。如果我们选择好好学习,就有机会拿到好offer。如果我们开摆,就有家里蹲的可能。这就是选择

为了让大家能更好的理解选择语句及其使用,代码如下:

#include <stdio.h>
int main()
{int coding = 0;printf("你会去敲代码吗?(选择1 or 0)");scanf("%d", &coding);if(coding == 1){prinf("甭说了,开卷\n");}else{printf("让我们开摆\n");}return 0;
}

2.循环语句

人类的本质是复读机,有些东西我们需要不断的重复,比如学习

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

  • while语句
  • for语句
  • do…while语句

在这里,我们先简单的展示下while语句的使用:

#include <stdio.h>
int main()
{printf("努力学习C语言\n");int line = 0;while(line<=20000){line++;printf("我要继续努力敲代码\n");}if(line>20000)printf("好offer\n");return 0;
}

C语言三大基本结构:顺序结构、选择结构、循环结构


结语:C语言入门学习的第一课就先到这里结束啦,更多内容将在后续一一展开,如果觉得本篇内容尚可,不妨点个

零基础学C语言之初识C语言(上)相关推荐

  1. 零基础学python免费网课-零基础学Python量化投资,超值线上课程反复回看

    原标题:零基础学Python量化投资,超值线上课程反复回看 超值网络课程 量化投资是一种严谨.系统化的投资方式,相比起传统投资,量化投资风险低回报高,但是它要求投资者使用数据处理分析.计算机编程技术. ...

  2. python线上课程-零基础学Python量化投资,超值线上课程反复回看

    原标题:零基础学Python量化投资,超值线上课程反复回看 超值网络课程 量化投资是一种严谨.系统化的投资方式,相比起传统投资,量化投资风险低回报高,但是它要求投资者使用数据处理分析.计算机编程技术. ...

  3. 零基础学SQL(1):初识数据库与SQL

    零基础学SQL(1):初识数据库与SQL 一.初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以 进行高效访问的数据集合.该数据集合称为数据库(Database,DB).用来管理数据库的 ...

  4. 没有c语言基础可以学python吗-零基础学Python之前需要学c语言吗

    Python本身是比较适合作为入门编程语言来学习的,一方面Python的语法结构比较简单清晰,实验也相对比较容易完成,这会逐渐增强初学者的学习信心,另一方面Python属于全场景编程语言,未来在很多领 ...

  5. python语言程序设计难不难_零基础学Python编程开发难度大吗?从哪学起?

    转行零基础学Python编程开发难度大吗?从哪学起? 近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大? 今天,小编就来为大家详细解读一下这个问题. ...

  6. 第一门语言学python好_零基础学编程,哪一门语言比较适合入门?

    最近,有不少小伙伴问我,说零基础学编程,第一门语言学哪个好?有人推荐学Python,理由是Python简单,对新人友好,上手快,那Python到底适不合适新人学呢. 我今天就这个问题给大家稍微的展开一 ...

  7. 【零基础学Java】—初识Java(一)

    [零基础学Java]- 初识Java(一)

  8. 零基础学python还是c语言-零基础学Python之前需要学c语言吗

    Python本身是比较适合作为入门编程语言来学习的,一方面Python的语法结构比较简单清晰,实验也相对比较容易完成,这会逐渐增强初学者的学习信心,另一方面Python属于全场景编程语言,未来在很多领 ...

  9. C语言基础专业书,零基础学C语言(第3版) (康莉/李宽 等著) 中文pdf完整版[29MB]

    零基础学C语言(第3版)站在零基础学习的角度讲授C语言,使初学者能尽快掌握C语言程序设计的精髓,避免走弯路.在讲解知识点时,笔者采用由浅人深.逐级递进的学习方式进行内容设置安排.<零基础学C语言 ...

  10. 零基础学c语言 第2版 pdf下载,《零基础学C语言(第2版)》.(康莉,李宽).[PDF].@ckook.pdf...

    零基础学C语言(第2版)(康莉,李宽)高清PDF扫描版105M,本书站在零基础学习的角度,使初学者能尽快掌... 更多资源请访问稀酷客() 更多资源请访问稀酷客() 更多资源请访问稀酷客() 更多资源 ...

最新文章

  1. html文件修改后缀为aspx之后在ie6中格式显示不正确问题的解决办法
  2. Go get 下载的包在哪里?
  3. Codeforces Round #377 (Div. 2) 732A B C D E F
  4. 太卷了~ 八股文,算法张口就来?2022版Java面试手册帮你全拿捏
  5. unordered_map使用自定义enum作为键值
  6. 不仅有骁龙8 Plus!摩托罗拉新旗舰还要抢首发2亿像素
  7. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_2_函数式接口的使用...
  8. JDK1.8优雅的集合排序(集合的排序)
  9. Linux环境安装Postgresql报错。configure: error: zlib library not found
  10. 锐文科技发布基于国产FPGA的智能网卡芯片
  11. 迈拓恢复出厂设置图解_恢复出厂设置在哪里 如何恢复出厂设置【图解】
  12. 从写方案到见投资人,一步步教你如何拿投资
  13. 基于Matlab的数字水印设计—基于DCT域的水
  14. unity世界坐标与相对坐标转换
  15. thingsboard
  16. .NET平台C/S架构应用程序开发核心技术总结(MyKTV点歌系统案例分析)
  17. sealed java_sealed 关键字
  18. oracle spool设置字符集,spool出来的文件格式一个是UTF8一个是ASCII ??
  19. Lua热更原理以及加载规则
  20. 定义一个圆,求圆的面积

热门文章

  1. 人工智能的嘴巴——语音合成(Text to Speech | TTS)
  2. 在ubuntu20.04/18.04下安装无线网卡rtl8192fu驱动
  3. 嘟噜噜的难受伴快乐的一天。
  4. (20201015 Solved)docker-compose创建网络ERROR: Pool overlaps with other one on this address space
  5. 微信公众号自定义菜单如何添加emoji表情图标?
  6. html后台管理模板(源码)
  7. Webmin未经身份验证的远程代码执行-墨者学院
  8. fedora 20 安裝 及 配置桌面環境
  9. 【2006NOIP普及组】开心的金明 题解
  10. 当命运欺骗了你,落到谷底时,唯一的出口就是向上