自学C语言-3

第3章 数据类型

学好了C语言,会很容易掌握其他编程语言,这是因为不同的编程语言有着一些共性存在。同时,一个好的程序员在编写代码时,一定要有规范性,清晰、整洁的代码才是有价值的。
本章致力于使学习者掌握C语言中非常重要的一部分知识-数据类型、常量与变量。只有学懂了这些知识,才可以开始编写程序。
本章的知识架构及重难点如下:
在这里插入图片描述

数据类型:
混合运算
变量的存储类别
auto变量
static变量
register变量
extern变量
变量
整型变量
实型变量
字符型变量
常量
整型常量
实型常量
字符型常量
转义字符
符号常量
编程规范
关键字
标识符
数据类型
基本类型
构造类型
指针类型
空类型

3.1 编程规范
俗话说:没有规矩,不成方圆。虽然C语言中的代码书写形式相对自由,但是为了使编写的代码具有通用、友好的可读性,应尽量遵守一定的规范。
1.代码缩进
C语言中,代码按递进层次依次向右缩进,每次缩进4个字符。不采用空格,而采用Tab键制表位,以保证缩进的对齐。

#include<stdio.h>
int main()															/*主函数mian*/
{
		int iResult=0;										 /*定义变量*/
		int i;
		printf("由1加到100的结果是:");				 /*输出语句*/
		for(i=1;i<=100;i++)
		{
				iRsult=i+iResult;
		}
		printf("%d\n",iResult);							/*输出结果*/
		return 0;													/*结束返回*/
	}

在这里插入图片描述

  • 2.变量、常量命名规范
    常量命名统一为大写格式。如果是成员变量,均以m_开始。如果是普通变量,取与实际意义相关的名称,并且名称的首字母要大写,再在前面添加类型的首字母。如果是指针,则在其标识符前添加p字符,并且名称首字母要大写。例如:
#define	AGE 28								/*定义常量*/
int m_iAge;										/*定义整型成员变量*/
int iNumber;									/*定义普通整型变量*/
int *pAge;										/*定义指针变量*/
  • 3.函数的命名规范
    定义函数时,函数名的首字母要大写,其后的字母根据含义大小写混合。例如:
int AddTwoNum(int num1,int num2);
  • 4.注释
    尽量采用行注释。如果行注释与代码处于一行,则注释应位于代码右方。如果连续出现多个行注释,并且代码较短,则应对齐注释。例如:
int iLong;									/*长度*/
int iWidth;									/*宽度*/
int iHeight;								/*高度*/

3.2 关键字

关键字(Keywords),又称为保留字,是C语言规定的具有特定意义的字符串。C语言中有32个关键字,如表3.1所示。用户定义的常量、变量、函数等名称不能与关键字相同,否则会出现错误。
在这里插入图片描述注意:这32个关键字不需要背诵。在C语言开发环境中编写代码时,关键字会自动显示为特殊字体(如变成蓝色)。今后的学习中会逐渐接触到这些关键字的具体使用方法,这里不需要死记硬背。

3.3 标识符

C语言中,为了在程序的运行过程中可以使用变量、常量、函数、数组等,就要为这些形式设定一个名称,而设定的名称就是所谓的标识符。
标识符的名称设定比较自由,开发者可以设定自己喜欢且容易理解的各类名称。但这并不意味着可以随意自由发挥,下面介绍设定C语言标识符时应该遵守的一些基本命名规则。

(1)标识符必须以字母或下画线开头,而不能以数字或者符号开头。例如:

int $num;												/*错误,标识符第一个字符不能为符号*/
int 2hao;												/*错误,标识符第一个字符不能为数字*/
int num;												/*正确,标识符第一个字符为字母*/
int _hao;												/*正确,标识符第一个字符为下画线*/

(2)标识符中,除开头外的其他字符可以由字母、下画线或数字组成。例如:

int good_way;											/*正确,标识符中可以有下画线*/
int bus7;													/*正确,标识符中可以有数字*/
int car6V;												/*正确*/

(3)C语言区分大小写,也就是说,大写或小写的英文字母代表的是不同的标识符。例如,下面的代码给出了3个不同的标识符。

int mingri;												/*全部是小写*/
int MINGRI;												/*全部是大写*/
int MingRi;												/*一部分是小写,一部分是大写*/

可以看出,标识符中只要有一个字符不同,其代表的就是一个新的名称。
(4)标识符不能是关键字。例如,系统使用int关键字表示整型数据类型,因此用户定义的标识符就不能再使用int,否则会提示编译错误。但将其中的某个字母改写成大写字母后,就可以通过编译。

int int;												/*错误,int为系统关键字*/
int lnt;												/*正确,lnt不再是关键字*/

(5)标识符应体现一定的功能含义,便于理解。通常采用所表述内容的英文、拼音等,这样即便是没有注释,只直观地查看代码,也能快速了解到其表述的作用及功能。
例如,定义一个长方体的长、宽和高时,如果将其简单定义为a、b、c,则没有后面的注释就很难理解。相比之下,iLong、iWidth、iHeight这样的标识符更清晰、明了,推荐大家采用。

int a;													/*长方形的长*/
int b;													/*长方形的宽*/
int c;													/*长方形的高*/
int iLong												/*长方形的长*/
int iWidth										  /*长方形的宽*/
int iHeight										  /*长方形的高*/

误区警示:标识符必须使用英文,是一个不精准的说法。开发环境不同,要求也不同。Visual C++ 6.0中,使用中文标识符会出现错误,但Visual Studio 2019中使用中文标识符编译器并不会报错。综合考量,最好不要使用中文写代码,以免出现不必要的错误。另外,写代码时要多写注释,养成好习惯。
(6)按照ANSI标准,最初的ANSI C规定标识符长度不准超过6个字符,但在C99之后放宽到了31个字符。一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符也不足为怪。
注意:编写代码时,应先调整输入状态为”英文半角输入法“。

3.4数据类型

程序要解决复杂的问题,就要处理不同的数据。不同的数据类型,如整型、字符型、实型等,在内存中占用的存储空间大小也不同。C语言中的数据类型包括基本类型、构造类型、指针类型和空类型等,如图3.1所示。

  • 1.基本类型
    基本类型是C语言中的基础类型,包括整型、字符型、实型(浮点型)、枚举类型4类。
    在这里插入图片描述

2.构造类型

当基本类型不能满足需要时,开发者可以自行构造数据类型。即使用基本类型数据,或已构造好的数据类型,通过添加、设计、组合,形成能满足待解决问题需要的新的数据类型。
构造类型是由多种类型组合而成的新类型,其每个组成部分都称为成员。构造类型包括数组类型、结构体类型和共用体类型3类。

3.指针类型

指针是C语言的精华。指针类型不同于其他类型,因为其值表示的是某个内存地址。

4.空类型

空类型的关键字是void,主要用于对函数返回值和函数参数进行限定。函数一般具有一个返回值(返给调用者),这个返回值应该具有特定的类型,如整型int。当函数不需要返回值时,就可以使用空类型进行设定。

3.5 常量

常量就是其值在程序运行过程中不可以改变的量,包括3类:数值型常量(包括整型常量和实型常量)、字符型常量和符号常量。下面分别进行说明。

  • 3.5.1 整型常量
    整型常量就是整型常数(没有小数部分),如123、-456等。有十进制、八进制和十六进制3种表示形式。
    1.十进制:我们日常所见到的整数都是十进制形式的,如365、75等。十进制数使用0-9来表示所有数,递进关系为逢十进一。注意,除了0本身,其他十进制数不能以0开头。
    2.八进制:使用0-7来表示所有的数,递进关系为逢八进一。八进制常量前要加上0作为前缀,如0123、0432等。
    3.十六进制:使用0-9和字母A-F(或a-f)来表示所有的数,递进关系为逢十六进一。十六进制常量前要加上0x作为前缀,如0x123、0x3ba4。
    整型常量可以是基本类型(int)、长整型(long int)或短整型(short int),还可以是无符号整型(unsigned)或有符号(signed)整型。在常量后加上L(或l),表示该常量是长整型,如1314L;加上U(或u), 表示该常量为无符号整型,如520U。
    注意:整型常量所占的内存大小和数值范围取决于编译器。字长为16位的计算机中,基本整型为16位;字长为32位的计算机中,基本整型为32位。这里,8位等于1字节。
    无符号整型可以存放的正数范围比有符号整型大一倍,因为有符号整数的最高位用于储存符号,而无符号整型所有位全部同来存储数字。
    1.短整型是16位的,无符号短整型的取值范围是0-65535,有符号短整型的取值范围是-32768至+32767。
    2.长整型是32位的,无符号长整型的取值范围是0-4294967295,有符号长整型的取值范围是-2147483648至+2147483647。
    3.16位计算机中,基本整型的取值范围和短整型相同;32位及以上计算机中,基本整型的取值范围和长整型相同。
    技巧:Windows10系统中,通过内置的计算器可进行八进制、十进制和十六进制之间的转换。打开计算器后,默认显示的是标准模式计算器,只能进行十进制运算。单击左上角的☰按钮,在菜单中选择”程序员“命令,可切换至程序员计算器模式,如图3.2所示。
    在这里插入图片描述

3.5.2 实型常量

实型也称为浮点型,由整数和小数两部分组成,并用十进制的小数点进行分隔。表示实数的方式有小数和指数两种。

1.小数形式

小数表示方法就是使用十进制的小数方法描述实型。例如:
123.45; /小数表示方法/
0.5458;

2.指数形式(科学计数形式)

当实型数非常大或非常小时,可使用指数形式来表示。使用字母e或者E表示指数形式,如45e2表示的是45x102,即4500,45e-2表示的是45x10-2,即0.45。上面示例的两个小数用指数形式表示如下:
1.2345e2; /指数表示方法/
5.458e-1;
注意:
实型常量中可以使用下画线进行分隔,这些下画线不会影响数字的值,仅提供分隔作用,以方便阅读。需要注意的是,下画线不能位于数字开头和结尾,不可以写在二进制和十六进制前缀字母旁,也不可以写在小数点旁。
书写实型常量时,可以在常量后加上F或L后缀(大小定通用)。F表示该常量是float单精度类型,L表示该常量为long double长双精度类型。例如:
1.2345e2F; /单精度类型/
5.458e-1L; /长双精度类型/
如果不加后缀,则默认实型常量为double双精度类型。例如:
1.2345e2; /默认为双精度类型/

3.5.3 字符型常量

字符型常量与整型、实型有所不同,需要使用定界符进行限制。字符型常量包括两种:字符常量和字符串常量。
1.字符常量
使用一对单直撇引号(‘’)括起来的字符就是字符常量,如‘A’、’#‘、’b’等。
1.字符常量只能包括一个字符,不能是字符串。例如,‘A’是正确的,但用‘AB’来表示字符常量就是错误的。
2.字符常量是区分大小写的。例如,’A’和‘a’代表的是不同的字符常量。
3.’‘代表的是定界符,不属于字符常量的一部分。
例3.1 输出”Find Day!"
在本实例中,使用putchar函数将多个字符常量依次输出,在控制台中显示“Find Day!"。
在这里插入图片描述
运行程序,显示效果如图3.3所示。
注意:给char型变量赋值时不可以使用3个单引号。这样写编译器会不知道从哪里开始,到哪里结束,进而产生错误。例如,下面的赋值语句会提示”error C2001:newline in constant"错误。
char cChar=‘A’'; /使用3个单引号为字符型赋值/
**

2.字符串常量

字符串常量是用一对双直撇引号(“”)括起来的若干字符序列。例如,“Have a good day!“和”beautiful day"即为字符串常量。如果字符串中一个字符都没有,将其称作空串,此时字符串的长度为0。在C语言中存储字符串常量时,系统会在字符串的末尾自动添加一个“\0”,作为字符串的结束标志。例如,字符串”welcome"在内存中的存储形式如图3.4所示。。

**

例3.2 打印《静夜思》诗句
在本实例中,使用printf函数将字符串常量《静夜思》诗句在控制台输出显示。
在这里插入图片描述
运行程序,显示效果如上图所示。
字符常量和字符串常量的差别主要体现在以下几个方面。
1.定界符不同。字符常量使用的是’’,而字符串常量使用的是“”。
2.长度不同。字符常量只能有一个字符,长度为1。字符串常量的长度可以是0,也可以是任意值。即使字符串常量中的字符只有1个,长度也 不是1,而是2。例如,字符串常量“F”,其在内存中的存储情况如图3.6所示(因为系统自动添加了结束字符“\0",所以其长度为2)。
3.存储方式不同。字符常量中存储的是字符的ASCII码值;字符串常量不仅要存储有效的字符,还要存储结尾处的结束标志”\0"。
ASCII码到底是什么呢?在C语言中,所使用的字符被一一映射到一个表中,这个表称为ASCII码表,如表3.2所示。
在这里插入图片描述

3.5.4 转义字符

在例3.1和例3.2中能看到"\n"符号,但输出结果中却不显示该符号,只是进行了换行操作,这种符号称为转义符号。转义符号在字符常量中是一种特殊的字符,通常以反斜杠""开头,后面跟一个或几个字符。常用的转义字符及其含义如表3.3所示。
在这里插入图片描述

3.5.5 符号常量

在例1.2中,程序的功能是求解一个长方体的体积。因为题设中长方体的高度是固定的,所以使用符号名Height来代替固定的常量值10,这里使用的符号名就称之为符号常量。使用符号常量的好处在于可以为编程和阅读带来方便。
例3.3 小时和年之间的转换
本实例使用符号常量来表示一年在多少个小时(一年按365天计算)。在控制台上显示文字,提示用户输入一个表示小时数量的值。用户输入小时数后,经过计算得到对应的年数,并输出显示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/67be1f22eb2b43058efd8f29d096c25e.png#pic_center)

在这里插入图片描述
编程训练
训练1:输出猪猪表情 使用字符型常量‘(’、‘)’、‘-’、‘o’组合成猪猪表情,用putchar函数输出。输出结果如下:
(-(oo)-)
在这里插入图片描述

训练2:打印绕口令《白石塔》 使用字符串常量,用printf函数输出绕口令《白石塔》内容,输出结果如下:
在这里插入图片描述

3.6 变量

在前面的学习中,我们已经多次接触过变量。变量就是在程序运行期间其值可以变化的量,每个变量都属于某种类型,如整型、实型、字符型等,该类型定义了变量的格式和行为。一个变量应该有属于自己的名称,并且在内存中占有一定的存储空间,其所占空间大小取决于类型。

3.6.1 整型变量

整型变量是用来存储整型数值的变量。整型变量可以分为如表3.4所示的6种类型,其中基本类型的符号使用int关键字,在此基础上可以根据需要加上一些符号进行修饰,如关键字short或long。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/243a6055f8fc4ecf95df46353c732107.png#pic_center)

在这里插入图片描述
说明:表格中的[]为可选部分。例如[signed]int, 在书写时可以省略signed关键字。

1.有符号基本整型

有符号基本整型是指signed int 型,其值是基本的整型常数。编写时,常将其关键字signed进行省略。有符号基本整型在内存中占4个字节,取值范围是-2147483648~2147483647。
说明:通常说到的整型,都是指有符号基本整型int。
定义一个有符号整型变量的方法是在变量前使用关键字int。例如,定义一个整型变量iNumber,并为其赋值-10的方法如下:
int iNumber; /定义有符号基本整型变量/
iNumber=-10; /为变量赋值/
或者在定义变量的同时为其赋值:
int iNumber=-10; /定义有符号基本整型变量的同时进行赋值/
注意:程序中用到的变量应集中定义,并放在变量赋值之前,否则会产生错误。例如:
/正确的写法:/
int iNumber1; /先定义变量/
int iNumber2;
iNumber1=6; /再对变量赋值/
iNumber2=7;
/*错误的写法: */
int iNumber1; /定义变量/
iNumber1=6; /为变量赋值,错误!!因为赋值语句在定义变量语句之前/
int iNumber2; /定义变量/
iNumber2=7; /为变量赋值/

例3.4 输出有符号int类型取值范围
本实例练习对有符号基本整型变量的使用,读者可直观地看到其作用。
在这里插入图片描述
运行程序,显示效果如上图所示。

2.无符号基本整型

无符号基本整型使用的关键字是unsigned int,其中的关键字int在编写时可以省略。无符号基本整型在内存中占4个字节,取值范围是0~4294967295。
定义一个无符号基本整型变量的方法是在变量前使用关键字unsigned。例如,要定义一个无符号基本整型变量iUnsignedNum,并为其赋值111的方法如下:

unsigned iUnsignedNum;						/*定义无符号基本整型变量*/
iUnsignedNum=111;								/*为变量赋值*/

3.有符号短整型

有符号短整型使用的关键字是signed short int, 其中的关键字signed和int在编写时可以省略。有符号短整型在内存中占两个字节,取值范围是-32768~32767。
定义一个有符号短整型变量的方法是在变量前使用的关键字short。例如,要定义一个有符号短整型变量iShortNum,并为其赋值-521的方法如下:
short iShortNum; /定义有符号短整型变量/
iShortNum=-521; /为变量赋值/

4. 无符号短整型

无符号短整型使用的关键字是unsigned short int, 其中的关键字int在编写时可以省略。无符号短整型在内存中占两个字节,取值范围是0~65535。
定义一个无符号短整数变量的方法是在变量前使用关键字unsigned short。例如,要定义一个无符号短整型变量iUnsignedShtNum, 并为其赋值222的方法如下:

unsigned short iUnsignedShtNum; 					/*定义无符号短整型变量*/
iUnsignedShtNum = 222; 									/*为变量赋值*/

5.有符号长整型

有符号长整型使用的关键字是signed long int ,其中的关键字signed和int在编写时可以省略。有符号长整型在内存中占4个字节,取值范围是-2147483648~2147483647。
定义一个有符号长整型变量的方法是在变量前使用关键字long。例如,要定义一个有符号长整型变量iLongNum,并为其赋值-3333333的方法如下:

long iLongNum;								/*定义有符号长整型变量*/
iLongNum=-3333333L;						/*为变量赋值*/

6.无符号长整型

无符号长整型使用的关键字是unsigned long int,其中的关键字int在编写时可以省略。无符号长整型在内存中占4个字节,取值范围是0~4294967295。
定义一个无符号长整型变量的方法是在变量前使用关键字unsigned long。例如,要定义一个无符号长整型变量iUnsignedLongNum,并为其赋值6666666的方法如下:

unsigned long iUnsignedLongNum;							/*定义无符号长整型变量*/
iUnsignedLongNum=6666666L;									/*为变量赋值*/

3.6.2 实型变量

实型变量也称为浮点型变量,是用来存储实型数值的变量,其中实型数值由整数和小数两部分组成。实型变量根据精度可以分为单精度类型、双精度类型和长双精度类型3种。

1.单精度类型

单精度类型使用的关键字是float,它在内存中占4个字节,取值范围是-3.4e-38~3.4e38。定义一个单精度类型变量的方法是在变量前使用关键字float。例如,要定义一个变量fFloatStyle,并为其赋值3.14的方法如下:

float fFloatStyle;							/*定义单精度类型变量*/
fFloatStyle=3.14f;							/*为变量赋值*/

例3.5 存款一年后能取出多少钱,已知银行的年利率是2.95%,如果在银行中存入1000元,一年后可以取出多少钱?(提示:总额=本金+年利率*本金)。具体代码如下:
在这里插入图片描述
运行程序,显示效果如上图所示。

2.双精度类型

双精度类型使用的关键字是double,它在内存中占8个字节,取值范围是-1.7e-308~1.7e308。定义一个双精度类型变量的方法是在变量前使用关键字double。例如,要定义一个变量dDoubleStyle,并为其赋值5.321的方法如下:

double dDoubleStyle; 									/*定义双精度类型变量*/
dDoubleStyle=5.321;										/*为变量赋值*/

例3.6 计算圆柱体的粮仓体积和屯粮量:一个圆柱体的粮仓,底面直径为50米,高为15米,该粮仓体积为多少立方米?如果每立方米能屯粮896千克,该粮仓一共可存储多少千克粮食?(提示:体积=3.14半径平方高)。具体代码如下:
在这里插入图片描述
运行程序,显示效果如上图所示。

3.长双精度类型

长双精度类型使用的关键字是long double,它在内存中占8个字节,取值范围是-1.7e-308~1.7e308。定义一个双精度类型变量的方法是在变量前使用关键字long double。例如,要定义一个变量fLongDouble,并为其赋值46.257的方法如下:

long double fLongDouble; 					/*定义长双精度类型变量*/
fLongDouble = 46.257;						/*为变量赋值*/

例3.7 记录太阳和火星之间的距离:在本实例中,定义一个长双精度类型变量表示太阳和火星之间的距离,然后为其赋值22.794,最后通过输出语句将其显示在控制台。
在这里插入图片描述
运行程序,显示效果如上图所示。

3.6.3 字符型变量

字符型变量是用来存储字符常量的变量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。字符型变量在内存空间中占一个字节,取值范围是-128~127。定义一个字符型变量的方法是使用关键字char。例如,要定义一个字符型变量cChar,为其赋值’a’的方法如下:
char cChar; /定义字符型变量/
cChar=‘a’; /为变量赋值/
说明:字符型变量在内存中存储的是字符的ASCII码,即一个无符号整数,其形式与整数的存储形式一样,因此C语言允许字符型数据与整型数据之间互相转换。
例3.8 字符型和整数间的互换:本实例为定义的字符型变量和整型变量进行不同的赋值,然后通过输出结果观察整型变量和字符型变量之间的转换。
在这里插入图片描述
上述代码首先定义了4个变量,两个字符型,两个整型,然后分别赋值为‘a’和97。因为字符’a’在ASCII码中的值正好是97,因此两者可以互相转换输出。运行程序,显示效果如图3.12所示。
下面对目前学过的所有数据类型进行一下概括总结,如表3.5所示。
在这里插入图片描述编程训练:
训练3:记录大毛的基本信息 使用整型变量保存大毛的年龄,使用字符型变量保存大毛的性别(W表示女,M表示男),用实型变量保存大毛的身高、体重、最后用printf函数输出。结果如下:
在这里插入图片描述
训练4:预测快递到货时长 假设某商品从广州市发货,预测其到达北京、上海、浙江、江苏、山东、湖南、辽宁、吉林、黑龙江等地的时长,使用整型变量存储预测的时长(即天数),用printf函数输出预测的结果。输出结果如下:
在这里插入图片描述

3.7 变量的存储类别

根据变量的产生时间,其在C程序中有两种不同的存储形式——静态存储和动态存储。静态存储是程序运行时为其分配固定的存储时间,动态存储则是在程序运行期间根据需要动态地分配存储空间。可通过存储类修饰符来告诉编译器要处理什么样的类型变量,包括自动变量(auto)、静态变量(static)、寄存器变量(register)和外部变量(extern)4种。

3.7.1 auto变量

auto关键字用于定义一个局部变量为自动变量,该变量存储在内存的动态存储区中,这意味着每次执行到该变量定义语句时,都会产生一个新的变量,并且重新对其初始化。
例3.9 auto变量两次加1结果:在AddOne函数中定义一个auto型的整数变量ilnt,在其中对变量执行加1操作。之后在主函数main中两次调用AddOne函数。从结果可以看到,在AddOne函数中定义整型变量时,系统会对其分配内存空间,在函数调用结束时,自动释放这些存储空间。
在这里插入图片描述
运行程序,显示效果如上图所示。
注意:关键字auto可以省略,不特别指定情况下,局部变量的存储方式默认为都是auto型。

3.7.2 static变量

static 变量表示静态变量,存储在内存的静态存储区中。
对于局部变量来说,尽管static变量和auto变量的作用域都仅限于声明变量的函数之中,但是在语句块执行期间,static变量将始终保持它的值,并且初始化操作只在第一次执行时起作用,在随后的运行过程中变量将保持语句块上一次执行时的值。
【例3.10】使用static变量记录点击量:创建click函数,用于记录用户的点击量。在函数体中定义static变量sum=0,每次调用此方法,sum的值都会加1,并输出此时sum的值。调用5次click函数,查看此时的点击量是多少。代码如下:
在这里插入图片描述
运行程序,显示效果如上图所示。

3.7.3 register变量

register变量又称为寄存器存储类变量。通过它,程序员可以请求编译器把某个需要频繁访问的局部变量存放在计算机的硬件寄存器中,而不是内存中。这样做的好处是可以提高程序的运行速度。不过这只是反映了程序员的主观意愿,由于cpu即使编译器忽略register,而把变量存放在可设定的内存中,也是无法获取变量的地址的。
要想有效地利用寄存器register关键字,必须像汇编语言程序员那样了解处理器的内部结构,知道可用于存放变量的寄存器的数量、种类以及工作方式。由于不同计算机对于这些细节可能是不同的,因此对于一个具备可移植性的程序来说,register的作用并不大,读者了解即可。
【例3.11】加快计算机运行速度:使用register变量修饰整型变量。代码如下:
在这里插入图片描述

3.7.4 extern变量

一个工程(Project,即项目)是由多个C文件组成的,这些源代码文件会分别进行编译,然后链接成一个可执行模块。有时我们需要用到其他C文件中的变量,这些变量就需要声明为extern型。
extern变量又称为外部存储变量,常用于声明程序需要使用且已在其他程序文件中定义过的变量。
【例3.12】打破常规输出100:在本实例中,首先在Externl文件中声明一个外部整型变量iExtern,然后在Extern2文件中定义iExtern变量,并进行赋值,最后在extern1中将变量值显示到控制台。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f9975aeb2c044b7a868ee12e753beeb8.png#pic_center)

在这里插入图片描述在这里插入图片描述运行程序,显示效果如上图所示。
编程训练:
训练5:还剩多少停车位 记录停车场的车位数量,每进一辆车,车位数就会减少一个。模拟此场景,创建函数part用于记录停车场的车位数量,函数中定义static变量sum=3625,每次调用此方法,sum值都会减1,并输出此时sum的值。调用5次park函数,查看此时车位数量是多少。输出结果如下:
在这里插入图片描述
训练6:数据清洗 定义一个mul函数,在函数中使用auto修饰变量a,并对此变量执行乘以2操作。主函数中调用5次mul函数,查看结果,发现每次都得到同一个结果,说明每次都将数据进行了清洗和重置。结果如下:
在这里插入图片描述

3.8 混合运算

不同类型的数据之间可以进行混合运算,如10+‘a’-1.5+3.26。在进行这样的运算时,不同的数据类型要先转换成同一类型,然后再进行运算。类型之间的转换规律如图3.17所示。
在这里插入图片描述
【例3.13】不同数据类型间的混合运算 在本实例中,计算(10+‘a’)-1.5+3.2
6的结果,最后使用printf函数将其输出。
在这里插入图片描述
编程训练
训练7:混合运算1 编写程序,计算混合运算1.68+‘s’+8-99+8+'d’的结果,最后使用printf函数将其输出。
在这里插入图片描述
训练8:混合运算2 编写程序,计算混合运算(1.68+‘s’+8-9)
(9+8+‘d’)的结果,最后使用printf函数将其输出。
在这里插入图片描述

3.9 实践与练习

综合练习1:设置百度地图常用地点、使用百度地图时,经常会弹出设置常用地点的对话框。编写程序,输出家庭住址和公司地址。输出结果如下:

在这里插入图片描述

综合练习2:模拟联通流量提醒 定义两个实型变量,表示已用流量(3.592)和剩余流量(3.408)。定义一个字符型变量,表示流量查询网址(http://u.10010.cn/tAE3v)。输出结果如下:
在这里插入图片描述

综合练习3:计算3的幂 在自定义函数中使用static静态局部整型变量,计算3的幂。输出结果如下:
在这里插入图片描述

综合练习4:抓鸭子 模拟抖音上非常火的抓鸭子游戏。游戏开始后,大家轮番说话,第一个人说”抓鸭子“,第二个人问”抓几只“,第三个说”抓X只”(X代表鸭子数量),其后的人可以说“抓住了”或“没抓着”。如果说“没抓着”,后面的人就重复上述过程;如果说“抓住了”,后面的人就依次模仿鸭子叫,“嘎”的次数要对应鸭子的数量。如果有人出错,就算输,要接受惩罚。输出结果如下:

在这里插入图片描述

综合练习5:一起来测试情商 编写程序,测试你的情商是多少。运行效果如图3.19所示。
在这里插入图片描述在这里插入图片描述

综合练习6:输出饭店菜谱 编写程序,输出如图3.20所示的菜谱。
在这里插入图片描述

综合练习7:输出狙击枪形状 利用字符串常量输出狙击枪形状,输出形状如下所示。(提示:利用搜狗特殊符号)
在这里插入图片描述

综合练习8:模拟超市结账 超市结账是我们经常会遇到的事情,假设某人去超市买商品的结果分别如下:56.75元、72.91元、88.50元、26.37元、68.51元。接下来模拟超市结账场景。运行结果如下所示。(提示:利用搜狗特殊符号画★ ☆)。
在这里插入图片描述

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本项目是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。该系统主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者,包含项目源码、数据库脚本、项目说明等,有论文参考,可以直接作为毕设使用。 后台框架采用SpringBoot,数据库使用MySQL,开发环境为JDK、IDEA、Tomcat。项目经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。 该系统的功能主要包括商品管理、订单管理、用户管理等模块。在商品管理模块中,可以添加、修改、删除商品信息;在订单管理模块中,可以查看订单详情、处理订单状态;在用户管理模块中,可以注册、登录、修改个人信息等。此外,系统还提供了数据统计功能,可以对销售数据进行统计和分析。 技术实现方面,前端采用Vue框架进行开发,后端使用SpringBoot框架搭建服务端应用。数据库采用MySQL进行数据存储和管理。整个系统通过前后端分离的方式实现,提高了系统的可维护性和可扩展性。同时,系统还采用了一些流行的技术和工具,如MyBatis、JPA等进行数据访问和操作,以及Maven进行项目管理和构建。 总之,本系统是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。系统经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

manyoftenvictory

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值