1.什么是c语言
人用语言交流,计算机也由专门的计算机语言,c语言就是众多计算机语言之一,就好比我们也有各国语言。
1.1 集成开发环境
我们写的c语言代码对输出环境也是有要求的,不可能再记事本上来运行我们的代码,这时候就要引入我们所说的集成开发环境,集成开发环境是一种集成了代码的编译,编辑,调试等多种软件开发工具的应用程序,高效,便捷的一体化平台(写代码,运行代码的应用)。
我推荐大家还是用vs2022(visusl studio 2022),现在虽然已经出到了2026版的,但是新应用不太稳定,后续的修复过于繁琐,我们用老版本系统稳定,但是不建议用太老的版本,现在有一些语言不适配,为了避免带来不必要的麻烦,推荐使用vs2022。
1.2 c语言的基本框架

这串代码是所有程序员写代码的开始,printf 英文是打印的意思,在开发环境中想打印都是需要条件的#include<stdio.h>,这就是我们所说的头文件。
1.2.1 main函数
c语言都是从main函数开始开始执行的,main函数是程序的入口,main函数也叫“主函数”,main函数在一个程序中有且只有一个main函数,即使在一个项目中有多个.c文件,也只能有一个main函数,int 则是c语言中的一种数据类型,表示执行完main函数后的一个返回类型,return 返回的意思,这里就很显然int(整数类型)。
1.2.2 常见错误
我们在书写代码的时候,总有写易错点,这里重点就是代码用的是英语书写的,所以有些符号就要避免写成中文,常见的就是 ; () ""容易打成中文符号,其次就是不记得 ; 分号是每句语句的结束标志,是必不可少的
1.3 注释
我们在平常学习过程中应该都有做笔记的习惯,古人云:“好记性不如烂笔头”,我们在写代码的过程中也可以通过注释来做笔记,用于解释代码,能极大提过代码的可读性,编译器完全忽略我们注释的内容,因此也不会对我们正常运行代码有影响

我们可以选取之后用按键注释,注释之后你会发现起始就是 //

因此我们单行注释是也可以直接用 // 来进行注释,还有一种多行注释的方式 /* */

这也是一种很便捷的方法。
2.数据类型和变量
2.1 c语言提供的数据类型
本文主要就是讲解其中的内置函数:

2.1.1 字符型
字符又分为字符和字符串,这里的重要区分标志就是单引号和双引号,字符用的是单引号,字符串用的是双引号,字符代表的是单个字符,字符串代表的是多个字符,这里就先不多做赘述;字符型(char),又分无符号字符(unsigned char)和有符号字符(signed char),没有特殊说明char就是有符号字符。

2.1.2 整形
整形分为整形,短整型,长整型,长长整形,每种又有无符号和有符号两种类型, 有符号和无符号两种类型于字符型的一样,也是在前面加unsigned(无符号),signed(有符号),没有特殊说明也是有符号的。

2.1.3 浮点型
浮点型也就是我们平常所见的小数,浮点数是c语言用于储存和计算小数的专用数据类型,浮点型又分为单精度浮点型(float)和双精度浮点型(double),显而易见,双精度的精确性更高,但是有双精确为什么还要有单精度的呢?当数据比较简单时,用double会导致精度浪费,double的运行速度没有float快。
2.1.4 布尔类型
布尔类型是专门用于表示真假的。使用布尔类型时要包含头文件<stdbool.h>,布尔类型的取值就两个true和false,分别表示真和假;我们在c语言中通常是用0表示假,1表示真,所以布尔类型我们并不常用。
3. 数据类型的长度
3.1 数据类型的长度
3.1.1 数据类型的单位
我们的数学中有单位,在计算机中也不例外,在计算机中的最小单位是bit(比特位),最常用的单位是字节(byte),1byte=8bit ,其他的单位应该都比较熟悉

除了byte是8进制意外其他的都是1024进制。
3.1.2 各种数据的长度
每种数据都有自己的长度,使用不同的数据类型,能够创建不同长度的变量,变量长度不同,储存数据范围就有所差异。
3.1.2.1 sizeof操作符
sizeof是一个关键字,也是操作符,是专门用来计算数据类型的,单位是字节;在不同的系统中又有所不同,在不同的编译器上也有所不同

我们是怎么推出这个字节数的呢?

我们用sizeof( 类型 )来求字节数,d表示打印的结果的整型,我们在打印不同类型是需要不同的打印符

sizeof后面接表达式时,表达式是不会进行计算的:

sizeof中的s=b+1并没有进行计算,所以说sizeof中表达式不进行运算。
4. 变量
4.1 变量的创建
c语言中我们把经常变化的值称为变量,不变的值称为常量,变量创建的语法形式是:

变量命名的一般规则:

变量在创建的时候给一个初始值,这就叫初始化。

4.2 变量的分类
4.2.1 全局变量
在大括号外面定义的变量就是全局变量;
全局变量的使用范围更广,在整个程序中都能使用。
4.2.2 局部变量
在大括号里面定义的变量就是局部变量;
局部变量的使用范围比较小,只能一定的范围内使用,对应的main函数中使用。

那当全局变量和局部变量的名称相同时, 以谁优先?我们来试验一下

这不难看出,当全局变量和局部变量同名时,局部优先使用。
5. printf和scanf
5.1 printf
printf()的作用就是将文本输出到屏幕上,像我们之前的

输出结果就是hello world,那我们为什么要在后面加\n呢?printf输出完后不会自动换行,我们需要手动换行,这时就需要添加一个换行符\n,

我们不难看出来下面明显有一行空白。
不难想到如果在输出内容中有换行符会是什么输出结果?

这里不难看出文本内的换行符也是有效的。
这里我们需要注意一下,使用printf()时需要头文件<stdio.h>。
5.1.1 占位符
所谓的“占位符”,就是这个位置可以用其他的值来代入。

这里面%d就是占位符,占位符的输入就是这样的,将“ ”外面的替换成%d,%d表示代入的值必须是整形,以此内推,当要代入的是字符串时就是用%s,代入的时单个字符时用的时%c,注意输出文本内是可以使用多个字符的,按序依次代入。

5.1.2 输出格式
printf()可以定制占位符的输出格式,
5.1.2.1 限定宽度

我们限定宽度时,就是在%d的中间插入限定的宽度,因为输出结果默认是右对齐的,所以当不足5位时,会在输出结果前面补上多余的空格,如果超过限定宽度就是直接输出;那如果希望我们是向左对齐,则可以在限定宽度前加-号,这样就看不到补上的空格了。

但是如果是小数的又有所不同,因为小数的默认精度是小数点后6位所以当我们小数点后6位补满之后就要开始向前开始补空格了,如下:

在前面补了2个空格,细心的网友会发现我这串代码没有return 0; 你们可千万不要忘记噢!!!
补充一个小知识点:printf输出不显示+号,要想输出+号就需要在占位符前加上一个+号

5.1.2.2 限定小数位数
当我们需要保留小数点后几位的话,就可以将占位符写成%.2f,这就是保留小数点后2位。

注意:这里如果说不写小数而是整数的话,不会自动添加小数点后两位,必须要有小数点才行,只有整数,会自动默认小数点前为0

小数占位符是可以五宽度占位符结合使用的

像这样,.前为宽度占位符,.前为小数占位符。
5.1.2.3 输出部分字符串
%s是用于输出字符串,默认是全部输出,如果我们想要是输出部分字符串,就可以使用%.[m]s来指定输出长度,其中[m]是想要输出的长度。

5.2 scanf
当我们有变量时,需要我们自己输入这时候就需要用到scanf函数了,这个函数与printf函数,相匹配,一输入,一输出;二者的头文件也是一样的;输入是从键盘输入,输出则是屏幕输出。我们直接用实例来解析:

初始化score为0,printf输出字符串,让我们从键盘输入成绩,因为我们输入的成绩是整型所有用d来占位,在我们没有输入成绩时,程序是不会运行的,这里可能会有人疑惑这个&(取地址符)这个我们用于获取内存地址的符号,我们从键盘上输入的数也是要占内存的,我们通过这个内存的地址就可以直接锁定这个值,scanf传递的不是值,而是地址(找到变量的内存,然后修改里面的数据),然后摁下回车键,对数据进行处理,程序才能继续进行。
5.2.1 基本用法
scanf()函数是用于读取用户键盘输入。
程序执行到这个函数时,会停下来,等待用户输入;输入完成之后,摁下回车键,函数就会处理用户的输入,将其存放到变量中。
scanf()与printf()语法类似。

第一个参数是格式字符串,里面放置占位符(与printf的占位符一样),告诉用户需要输入的数据类型是什么, c语言数据都是有类型的,scanf()必须提前知道输入数据的类型,才能处理数据。
注意:scanf不用与printf一样用\n,来换行如果使用了\n,不小心就可能倒是程序无法正常运行。

这种情况,就是在数据类型后面加了\n导致,在scanf中的\n与换行没有一点关系;scanf在处理占位符时,会自动过滤空白字符,包括空格,制表符,换行符等;要想正常运行就需要在输入数据后面也加上\n。

这里就会问了当我们有多个变量时,我们不就只能一行输出了,不不不!!!
scanf()处理用户输入的原理是,用户输入先放入缓存,等按下回车键时,按照占位符对缓存进行解读。

我们每输入一个数据都可以按下回车键进行下一个数据的输入,也可以用空格来进行下一个数据的输入,使用回车键不影响解读
5.2.2 scanf的返回值
scanf()函数虽然是用于输入,但是也是有返回值的,表示成功读取的变量个数
如果没有读取任何项,或者匹配失败,则返回0。
如果在成功读取之前,读取发生了错误,或者是读取到了文件的结尾,则返回eof(-1),三次ctrl+z则直接读取到文件结尾,返回-1。

5.2.3 占位符
scanf()函数中的占位符与printf()中的占位符基本一致
特别的就是占位符%s,它的规则是,从当前第一个非空白字符开始读,到下一个空白字符为止;
因为%s不会包含空白字符,所以我们无法读取多个单词,只能多个%s一起使用。
所以scanf()不适合读取含有空白字符的字符串,注意scanf()遇到读取字符时会在字符串后面储存一个空字符\0。
在读入字符数组时,我们为了防止数组过界,可以限制读入字符串的长度,写成%[m]s,其中[m]是个整数,表示读取字符串的长度。 (数组你们可能还没有了解,这里主要是通过数组让你们知道怎么限制字符串的长度)

因为读入字符串会自带空字符\0,所以只有10个的长度。
5.2.4 赋值忽略符
有一些特定的格式我们是不能直接输入的,例如输入日期:

如果输入2026-7-21,是可以正确解读年,月,日。但是如果用户输入其他的格式就又不一样了,例如输出2026/7/21,这种情况就会解读失败。
为了避免这种情况,我们就要使用赋值忽略符,只要把*加到%后面,该占位符就不会有返回值,在解读之后将被丢弃。

6.总结
我相信通过细致的讲解,对c语言有了大致的了解,c作为计算机语言,其中的数据类型和变量是新手入门的不二人选,我们想要学好任意一门计算机语言,数据类型与变量都是最好打基础的,从根本上了解了计算机语言的底层逻辑,输入,输出也是计算机执行程序的基础语法,虽然每种语言的输入和输出的函数有所不同,但是输入和输出函数都是新手必学的。
到此这篇关于c语言的开端---数据类型和变量的文章就介绍到这了,更多相关c语言数据类型和变量内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论