栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

初始C语言前4/13

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初始C语言前4/13

目录

什么是C语言?

1  第一个C语言程序

1、创建项目

2、写代码

2.1  新建源文件

2.2  运行代码

2  数据类型

3  变量、常量

3.1定义变量的方法

3.2变量的分类

3.3变量的使用

3.4变量的作用域和生命周期

3.5常量

4  字符串+转义字符+注释

4.1字符串

4.2 转义字符

4.3注释


什么是C语言?

人和人交流用:中文、英文、日语

人和计算机交流用:计算机语言(包括C/C++/Java/python……)

即C语言是一种常见的计算机语言

C语言是一门通用的计算机编程语言,广泛应用于底层开发。刚买的电脑是硬件,铁疙瘩,怎么让它工作呢?原因是上面装有操作系统,常见的操作系统有:Windows、linux、Mac。操作系统是怎么让这个铁疙瘩工作起来的呢?有一个东西把操作系统和硬件关联起来,这个东西是驱动层(常说装网卡驱动或显卡驱动指的就是驱动)这个驱动其实是跨过操作系统和硬件之间,用操作系统来把硬件很好的调用起来。  

操作系统上可以装微信、QQ、百度网盘等应用软件,即在操作系统之(是应用层)上可以装很多应用软件。操作系统及一下称为底层(或下层),所以对操作系统、硬件及操作系统和硬件之间的驱动层的开发用C语言是最多的,这些地方如需要一个操作系统,需要写一些驱动等这些东西是下层或底层软件。C语言广泛适用于底层(下层)开发,较擅长于底层开发,C语言可以写上层软件,如可以写QQ等。

C语言的发展引入了C语言的标椎:计算机识别的是二进制,用一个二进制代表一个意思,比如一个二进制序列起名叫ADD(加法)或SUB(减法),即具有某种意思,帮助我们把某些二进制记住了,例如记不住你的身份证号码但记住你叫张三,这样的符号是助记符,助记符是帮助我们来记住的,即像ADD或SUB等叫助记符,有了这些助记符就有了一门汇编语言,接下来就用汇编语言写代码了就不用二进制写代码了。后来在汇编语言的基础上发明了B语言,在B语言基础上又发明了C语言,初始的C语言不够成熟和完整,各个厂商就可能对C语言进行定制,对C语言增加语法,C语言形成了差异,所以就出现了C语言的国际标椎叫:ANSI C(ANSI C有好几个版本)。C语言之父定制的C语言标准是:K&R(两个人名字含有的字母),之后又有的标准有:C89、C90、C99……C11、C17,现在主流的标准是C89和C90,C99之后就使用的比较少了。 

写C时写test.c、add.h这些文件怎么运行起来的呢?经历了什么?其实并没有把这些文件运行起来,C语言在运行时需要编译器,把代码进行编译,虽然写出的是test.c这样的文件,但最终实际上我们会编出一个像test.exe这样的文件,中间会经过编译器。经编译器处理后形成可执行程序,现在有哪些编译器呢?VS2019是集成开发环境,里面掉了一个编译器 :cl.exe。(经常说是msvc这样一个编译器) 

常见的编译器有GCC、Clang、WIN-TC、SUBUME、MSVC、Turbo C等,VS2019里集成的是MSVC编译器,GDP是调试器不是编译器。集成开发环境是把各种各样的功能集成到里面去,有编辑功能,依赖的是编辑器,可以编辑东西,编辑好了后可以编译,也有编译器在里面,还有链接器,调试器。VS2019集这些功能于一身所以是集成开发环境。 

1  第一个C语言程序

1、创建项目

(项目名称:如test_11_2是带_而不是带.的)(我统一放在D盘的2021_code中了)

2、写代码

写C语言代码就是写.c .h这样的文件

xxxx.c这样的文件在C语言中是源文件;

xxxx.h这样的文件在C语言中是头文件。

2.1  新建源文件

(头文件),名称是:test.c(若是test.cpp时是编译器用C++的语法来解析的,写test.c时是用C语言的语法来解析的)(可以不用test可以自己起名的,可以用中文的但不建议,一般用英文,因为VS是外国人开发的,对英语的支持比较好)。

主函数的写法: 大括号是函数体。int main()中int表示整型,表示这个函数运行结束后返回一个整型的值。return 0这里的0是整数,在main函数结束的时候返回,所以main函数前面的int和后面的return 0是前后呼应的。语法要求,写法固定。C99中main函数就是这样写的。

void main()

{

}

这种的写法是很久之前的,C99之前,现在没有人这样写了(书上加void是空白的意思,相当于没加。)

有些直接写main没有int的是坚决不支持的。例如:

main()

{

}

这种,既没有给main函数类型是什么又没有说明返回类型是什么,结束没有返回,而是采用默认(main函数默认是返回int的)这是坏的习惯。应该函数要返回什么就明确返回什么

再写入printf("hello worldn");和头文件#include即写完一个C语言代码。 

注:头文件中std是标准,i是输入,o是输出,所以是标准输入输出的头文件,未来只要涉及到printf、scanf函数(打印、输入或输出到屏幕上)都要引用头文件。

2.2  运行代码

ctrl+F5或ctrl+Fn+F5

(fn是辅助功能键,单按F2、F5(F1-F12)等是有特殊意义的,Fn+F5(或其他F几)才是真正F5的功能)

注写C语言代码时首先要知道main函数。main函数的作用:执行代码的入口。写几百行或更多代码这么多代码不是从第一行开始执行的,main函数是程序的入口,程序是从main函数的第一行开始执行的。按F10代码从main函数的第一行开始执行,所以main函数必须有但main函数有且仅有一个。main函数也称主函数。

C语言打印有打印函数,printf函数。printf函数的使用:例如打印:hello world,则:printf()圆括号里是想打印的东西,字符串(字符组起来的串)是用双引号引起来的,所以printf(“hello worldn”)这是语法形式。printf函数是一个库函数,库函数是别人的函数(库里提供的函数)使用别人的东西要向别人打招呼,这时就要包含头文件,即库函数的使用得包含一个头文件stdio.h

即包含的语法形式:#include然后就可以使用printf函数了。即 

要用printf库函数函数即需要包含头文件:#include

否则编译器会显示:printf函数未定义

语法就是规定了怎么写代码是正确的,即规定了代码书写的规则。如汉语的语法:我吃饭了——是符合语法的;吃饭我了——是不符合语法的。

2  数据类型

C语言是用来写代码的,写代码是用来解决问题的,写个代码,写个软件来解决问题。C语言写出来的代码要解决问题则必须能描述问题,如写代码能描述现实生活中各种各样的数据类型。写代码是用来描述现实事件的。

C语言提供的数据类型:

char        是字符数据类型

short       是短整型(写全的话应该叫short int)

int           是整型

long        是长整型(写全的话应该是long int)

long long是更长的整型

float        是单精度浮点数(在这以上short、int、long、long long这4个是整型,以下这两个是浮点型)

double    是双精度浮点数

每一种数据类型都有其作用。表示一个字符是用char,短整型用short。

浮点型意思是如:31.45可以写成:3.145*10^1,可写成0.3145*10^2发现小数点是可以浮动的所以叫浮点数,C语言中提供能描述浮点数类型的有两种,即float单精度浮点数和double双精度浮点数,两者的区别是双精度的精度比单精度的精度高,希望精度更高,小数点后的位数更多则用double,精度低用float即可。

如描述一个人的年龄,年龄是整数,则用int类型或短整型short int。

 

若过了一年再:age=age+1

即这是数据类型的用途。

若:描述3.14,是小数则定义float类型,起名叫pai,,然后赋值:float pai=3.14f;

3.14后面写f表明是float类型的数据,f大小写都可以,如果后面没有f则编译器默认3.14是double类型的数据。若写成double类型,则精度会更高一些:double pai=3.141592653;

为什么出现这么多的类型?整型细化成4种,浮点型分成2种,为什么细化成这些呢?

 

每种类型的大小是多少?——以上数据类型分别占有多大空间呢?怎么来计算一个数据类型所创建变量占据内存空间的大小呢?用关键字:sizeof

C语言中的sizeof是用来计算变量或者使用类型创建变量的大小,单位是字节。

 

同样: 

计算各数据类型所占空间的大小:

char类型所创建的变量大小是:

 

sizeof计算结果的单位是字节。计算机中是2进制的:0-1;

10进制:0-9

8进制:0-7

存放一个二进制时(比如说存放一个1或者一个0需要多大空间呢)

在内存中存放1,则需要一个小格子存放即可;存放0时也只需要一个小格子,把一个这样最小的格子(的空间大小)叫做1个比特位(1bit位),即是计算机中的最小的单位 

现在把8个这样的比特位放在一起,这块空间的大小叫一个字节(byte)

即一个字节是8个比特位。 

计算机中的单位再往上有:kb、mb、gb、tb、pb…… 

单位的计算:1byte=8bit

1kb=1024byte

1mb=1024kb

1gb=1024mb

1tb=1024gb

1pb=1024tb

char是1个字节,一个short是2个字节,一个int是4个字节,一个long也是4个字节,long long是8个字节,float是4个字节,double是8个字节,即是创建的这些类型变量在内存中所占空间的大小。

一个比特位要存放数据的话要么存放的是1要么存放的是0,一个比特位只能表示两种(2^1)意思,一个比特位存的是1表示是真,存0表示假,如果两个比特位则可以存放00、01、10、11四种(2^2)状态。如果用8个比特位00000000、00000001、00000010……11111111能表示2^8种状态,即能表示256个数字。

short是2个字节,是16个比特位,16个比特位能表示的数字是2^16种。

一个int是4个字节,是32个比特位,32个比特位能表示的数字的范围是2^32种。

即一个int表示范围的广度比一个short要更广。

若表示一个人的年龄,年龄不超过4位数,数字不大,所以创建一个人的年龄的变量时考虑用short即可,用short age,而不需要用int了,int age太大了,好多空间都浪费了,即提高了空间的利用率。因为一个short表示的范围已经到0~65535(16个1)了,已经是5位数了,而一个人的年龄是不会超过5位数的。

这么多类型的存在?——即提供了丰富的类型让我们进行合理的选择,则对于内存的利用率会更高一些。选择最适合的类型使用。存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。

long长整型和整型int一样长,C语言标准并没有规定long是几个字节,规定了sizeof(long)>=sizeof(int)即可,只要long的大小大于等于int,并没有规定long具体多大。

(注:printf(“%dn”,)表示打印一个数字),所以printf(“%dn”,sizeof(char),sizeof(short))是错误的。若想打印两个数字则:printf(“%d %dn”,sizeof(char),sizeof(short))。 

类型的使用是为了创建变量的。

char ch =‘w’;

int weight = 120;

int salary = 20000;

 

3  变量、常量

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

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

3.1定义变量的方法

int age = 150;

float weight = 45.5f;

char ch = 'w';

即:类型 变量名(类型+变量名)

注:变量不赋值是有问题的,不是一种好的代码风格。

变量在创建的时候不初始化是一种不好的风格。

 

即最好在变量创建的时候就赋给一个值。

 

当一个局部变量不初始化的时候,它的值是随机的(全局变量就不一样了)

int age;

age=age+1;

显然是错误的。原来的值不知道,后来也不知道会变成什么。

char类型的初始化:char ch = 'w';//把字符w放进去是初始化。char不初始化也会放随机的、不是预期的字符。(代码有问题)

3.2变量的分类

局部变量

全局变量

 

 

 

 

尽量全局变量和全局变量名字不同。

变量的创建是要在内存中开辟空间的。

3.3变量的使用

需要变量时就创建变量。

比如:两个整数相加

 

简洁的表示:

 

报错中讲到的scanf_s的函数时VS编译器提供的,不是C语言自己的,在其他的编译器下就没有scanf_s的函数,也不认识这个函数,当你在代码中使用了scanf_s函数,你的代码在其他的编译器(比如gcc、clong)下就没法正确的编译,这就降低了代码的跨平台性(移植性不够好),所以建议写代码尽量使用标准C提供的功能和函数。(scanf_s函数的使用和scanf是有区别的)

 

应该是:

 

创建好后直接赋值

但是这样的代码在一些老一点的编译器就跑不过去了。C99标准之前有一个规定:变量要创建在当前代码块的前面,一个{}就是一个代码块。直接写int sum = num1 + num2 ;这样是在后面定义了sum了。

注:在C99之后的语法就支持了:变量在哪里使用就在哪里定义就可以。

3.4变量的作用域和生命周期

作用域:(视力范围)哪里有权限哪里就是作用域

 

局部变量的作用域是它所在的局部范围

 

 

如果在大括号外定义一个变量,全局变量,则任意地方都可以使用

 

即打印了三份g。

但是若: 

所以代码应该在函数内部写。而:若再写一个函数,在这个函数内部打印g是可以的。

 

注:以后代码多了也不是全部写在main函数里,函数会把代码分散开。以函数的形式写代码。

局部变量和全局变量都是可以改变的。变量本来也就是可以改变的量。

 

作用域指的是它在哪里可以使用。

局部变量的作用域:变量所在的局部范围,即它所在的{}

全局变量的作用域:任意地方都可以使用,即整个工程。一个工程有好多个源文件。

生命周期

一个人的生命周期是从出生到死去这整个时间段。

对于变量:

 

对于a变量来说,它的作用域是在它所在的大括号{}内部,它的生命周期是{开始创建出}到期、生命周期结束。

全局变量是当进入main函数开始执行时就可以使用。

main函数开始执行整个程序就开始执行,main函数执行结束时程序也就执行结束了。程序的生命周期和main函数的生命周期是一样的。

 

生命周期描述的是一个时间段,作用域描述的是能使用的代码范围。两者之间有关联但不等同。

局部变量的生命周期:进入局部变量所在的范围,生命周期开始,出局部变量所在的范围的时候,生命周期结束;

 全局变量的生命周期:是整个程序的生命周期。

只要{}里定义的变量就是局部变量。

3.5常量

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

①字面常量

②const修饰的常变量

③#define定义的标识符常量

④枚举常量

 

4  字符串+转义字符+注释

4.1字符串

 

 

注:字符串的结束标注是‘0’的转义字符,在计算字符串长度的时候‘0’是结束标志,不算字符串的内容。

 

4.2 转义字符

 

原因:结果不对是因为转义字符存在。

转义字符:转变原来的意思,还是字符,需要单引号引。(写在一个字符串里是不需要单引号引的如“henhe”)(只要是字符就需要单引号引)

在C语言中规定的转义字符还有:

?——释义是:在书写连续多个问号时使用,防止他们被解析成三字母词(在三字母词时使用,很少使用了,很多编译器不支持)

'——释义是:用于表示字符常量,即表示字符单引号

\——释义是:用于表示一个反斜杠,防止它被解释为一个转义序列符

a——释义是:警告字符,蜂鸣

b——释义是:退格符

f——释义是:进纸符

n——释义是:换行

r——释义是:回车

t——释义是:水平制表符,是键盘上的tab键(table),跳开一段,相当于几个空格,可以自己设置

v——释义是:垂直制表符

ddd——释义是:ddd表示1~3个八进制的数字。注:是斜杠后面跟1到3个数字默认是八进制(数字范围0-7)如:130代表的是X

xdd——释义是:dd表示3个十六进制数字。如:x30代表的是0

注:一个数组里不能放不同类型的数据,一个数组只能放相同类型的元素

 

4.3注释

C语言由两种注释方式:

①//:C99之后引入的注释方式,也是C++的注释风格

②注释就结束

使用注释的情况:

①代码复杂,对代码的解释,帮助(别人或自己)理解,方便看懂,梳理思路

②代码暂时不需要,注释掉的代码不参与编译

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号