零基础学C语言之初识C语言(上)
本文目标
- 一、什么是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.计算机语言的发展
- 计算机是通过二进制工作的,最早人们使用0101001这样的二进制指令处理计算机问题。后来逐渐产生了汇编指令(助记符)(ADD),即汇编语言,将一部分二进制代码记为助记符。
- 在汇编语言的基础上逐渐演化出B语言,后来变成C语言,此时的C语言已经成为一门高级语言
- 最早各公司使用的C语言标准各不相同,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。
- 现在普遍支持的是C89标准
- 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函数介绍
main
函数是程序的入口- 一个工程中
main
函数有且仅有一个(其他.c文件中也不能有main
函数) main
函数的标准写法(不建议使用void main
这种古老写法)
int main()
{return 0;
}
/*void main() 不推荐使用{}*/
- return 0;指返回0这个整型值,与函数的返回类型int对应
- return的整数其实也可以是其他数字,不过在业界默认return 0表示正常退出,return 1表示异常退出
3.其他问题
#include<stdio.h>
当需要使用C语言内置函数时都需要引用头文件才能使用,stdio表示standard input output
(标准输入输出)printf
是一个库函数,是一个专门用来打印数据的输出函数- 从头到尾调试: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
总结:
- 上述的局部变量global变量的定义没有问题。
- 当局部变量和全局变量同名的时候,优先使用局部变量。
补充:当一个全局变量在同一个工程中一个.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)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域是变量所在的局部范围。
全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是该变量从定义到被释放的时间范围,所谓的释放,指的是曾经开辟的空间“被释放”。换句话说就是变量的创建到变量的销毁之间的一个时间段。
局部变量的生命周期是:进入代码块,形成局部变量[开辟空间],退出代码块,“释放”局部变量。
全局变量的生命周期是:定义完成之后,程序运行的整个生命周期内,该变量一直有效
作用域和生命周期。
5.常量
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下四种:
字面常量
#include <stdio.h> {3.14;//字面常量1000;//字面常量return 0; }
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修饰的这个变量是个无法直接改变的变量(可以通过指针的方式间接改变)
#define
定义的标识符常量#include <stdio.h> //#define的标识符常量 演示 #define MAX 100 int main() { printf("max = %d\n", MAX);return 0; } //这个变量是没有类型的,就只是100
枚举常量
#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.注释
- 代码中有不需要的代码可以直接删除,也可以注释掉
- 代码中有些代码比较难懂,可以加一下注释文字
为了让大家更直观的理解注释及其使用,代码如下:
#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语言入门学习的第一课就先到这里结束啦,更多内容将在后续一一展开,如果觉得本篇内容尚可,不妨点个
原标题:零基础学Python量化投资,超值线上课程反复回看 超值网络课程 量化投资是一种严谨.系统化的投资方式,相比起传统投资,量化投资风险低回报高,但是它要求投资者使用数据处理分析.计算机编程技术. ... 原标题:零基础学Python量化投资,超值线上课程反复回看 超值网络课程 量化投资是一种严谨.系统化的投资方式,相比起传统投资,量化投资风险低回报高,但是它要求投资者使用数据处理分析.计算机编程技术. ... 零基础学SQL(1):初识数据库与SQL 一.初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以 进行高效访问的数据集合.该数据集合称为数据库(Database,DB).用来管理数据库的 ... Python本身是比较适合作为入门编程语言来学习的,一方面Python的语法结构比较简单清晰,实验也相对比较容易完成,这会逐渐增强初学者的学习信心,另一方面Python属于全场景编程语言,未来在很多领 ... 转行零基础学Python编程开发难度大吗?从哪学起? 近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大? 今天,小编就来为大家详细解读一下这个问题. ... 最近,有不少小伙伴问我,说零基础学编程,第一门语言学哪个好?有人推荐学Python,理由是Python简单,对新人友好,上手快,那Python到底适不合适新人学呢. 我今天就这个问题给大家稍微的展开一 ... [零基础学Java]- 初识Java(一) Python本身是比较适合作为入门编程语言来学习的,一方面Python的语法结构比较简单清晰,实验也相对比较容易完成,这会逐渐增强初学者的学习信心,另一方面Python属于全场景编程语言,未来在很多领 ... 零基础学C语言(第3版)站在零基础学习的角度讲授C语言,使初学者能尽快掌握C语言程序设计的精髓,避免走弯路.在讲解知识点时,笔者采用由浅人深.逐级递进的学习方式进行内容设置安排.<零基础学C语言 ... 零基础学C语言(第2版)(康莉,李宽)高清PDF扫描版105M,本书站在零基础学习的角度,使初学者能尽快掌... 更多资源请访问稀酷客() 更多资源请访问稀酷客() 更多资源请访问稀酷客() 更多资源 ...零基础学C语言之初识C语言(上)相关推荐
最新文章
热门文章