C语言程序设计-常量与变量

目录

1.4 常量与变量

1.4.1 常量与变量的概念

1.4.2 整型常量与变量

1.4.3 实型常量与变量

1.4.4 字符型常量与变量

传送门上一节:C语言程序设计-概述、简单程序、数据类型

传送门下一节:C语言程序设计-算数运算符、赋值运算符、逗号运算符及表达式


1.4 常量与变量

C语言中的数据有常量与变量之分。

1.4.1 常量与变量的概念

【例1.5】 编写输出1000与50的和、1000的两倍的程序。

程序如下:

#include<stdio.h>
#define TMP 1000    //定义符号常量TMP
int main(void)
{
    int s;  //定义整型变量s

    s=TMP+50;   //相当于s=1000+50;
    printf("First:%d\n",s);
    s=2*TMP;    //相当于s=2*1000;
    printf("Second:%d\n",s);
    return 0;
}

运行结果:

First:1050
Second:2000

程序说明:

1、程序中第二行的作用是用#define命令行定义符号名TMP,并用它代表1000。以后在本程序中出现的所有TMP都代表1000。如果在一个程序中经常使用同一个量,而且这个量较长,则用符号名代替此量比较方便,当然也有其他用处(如例5.1)。请注意#define命令行的定义形式和位置。

2、程序中TMP(代替1000)、50和2是固定不变的,而s中的值可以改变,执行语句“s=TMP+50;”后s得到两数之和1050,执行语句“s=2*TMP;”后,s的值又由1050变为2000.

以上例题中出现了两种量:一种是在程序运行过程中其值不能变的量,如50和2,这种量称为常量;TMP在程序运行过程中其值也不能改变,因此也是常量,这种用符号名表示的常量称为符号变量;另一种是在运行过程中其值可以改变的量,如s,这种量称为变量。注意,由于TMP是常量,企图通过语句“TMP=5;”给它赋一个新值是错误的。

每个变量都应该有一个名字,其名字由用户命名。变量的命名规则如下:

1、变量名由a~z、A~Z、0~9、_(下划线)组成,并区别大小写。

2、变量名的第一个字符不能是数字。

3、C语言中的关键字不能作为变量名。

 其中C语言的关键字共有32个:

(关键字:系统预定说明的标识符称为关键字)

根据关键字的作用,可分为数据类型关键字、控制语句关键字、存储类型关键字、其他关键字。(此处借鉴于博主“阿强打代码”)

1、数据类型关键字(12个):

(1)char:声明字符型变量或函数

(2)double:声明双精度变量或函数

(3)enum:声明枚举类型

(4)float:声明浮点型变量或函数

(5)int:声明整型变量或函数

(6)long:声明长整型变量或函数

(7)short:声明短整型变量或函数

(8)signed:声明有符号类型变量或函数

(9)struct:声明结构体变量或函数

(10)union:声明共用体(联合)数据类型

(11)unsigned:声明无符号类型变量或函数

(12)void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)

2、循环语句关键字(12个):

-1-循环语句

(1)for:循环语句,十分常用

(2)do:循环语句的循环体

(3)while:循环语句的循环条件

(4)continue:结束当前循环,开始下一轮循环

-2-条件语句

(1)if:条件语句

(2)else:条件语句否定分支(与if连用)

(3)goto:无条件跳转语句

-3-开关语句

(1)switch:用于开关语句

(2)case:开关语句分支

(3)default:开关语句中”其它“分支

-4-返回语句

return:子程序返回语句(参数可带可不带)

3、存储类型关键字(4个):

(1)auto:声明自动变量

(2)extern:声明变量是在其他文件正声明(也可以看作是引用变量)

(3)register:声明寄存器变量

(4)static:声明静态变量

4、其他关键字(4个):

(1)const:声明只读变量

(2)sizeof:计算数据类型长度

(3)typedef:用于给数据类型取别名(还有其他作用)

(4)volatile:说明变量在程序执行中可被隐含地改变

变量名是一个标识符。在C语言中,用来标识变量名、符号常量名、标号名、数组名、函数名、类型名、文件名等的有效字符序列称为标识符,这些标识符的命名规则与变量名的命名规则相同。标识符一般使用小写字母。

【例 1.6】下面变量名中哪些是合法的?哪些是不合法的?

Int、double、_123、9k、qbasic、printf、a.b、year、business

【解】合法的变量名有Int、_123、qbasic、printf、year、business

注意:printf也可作为变量名使用,在C语言中printf(库函数名)、define(预编译处理命令)等都有特定的含义,称为预定义标识符,它们不是关键字,C语法允许它们作为自定义标识符,但这样做将使它们失去系统规定的原意,例如,若将printf定义为变量名,系统就不能再通过printf调用输出函数。因此,我们不提倡将预定义标识符改为自定义标识符使用。

不合法的变量名有double(关键字)、9k(数字开头)、a.b(出现非法字符)。

说明:

(1)变量必须先定义后使用。变量就像一个可以存放“物品”的容器,定义的含义如同制造容器,通过定义的变量,系统就会为其分配一个存储单元。因此变量的定义部分必须放在本函数体内其他语句之前

(2)应该注意:变量中存放的“物品”只能是数据,而且只能是一个数据。向变量中存放数据的操作称为赋值,只经定义而未赋值的变量,其值是不确定的。

        可以给同一个变量多次赋值,每进行一次赋值操作,系统都会用新数据替代变量中的原有数据,因此变量的值应该是最后一次存放的数据。图1.8表示了一个变量的定义、多次赋值以及输出的全过程。

 图1.8 变量的定义、赋值和输出

(3)变量的“名”和变量的“值”有区别。变量的“名”是该变量所代表的存储单元的标志,而变量的“值”是指存储单元中的内容。

1.4.2 整型常量与变量

整型常量不能带小数点。

1、整型常量

【例1.7】 编写程序,用%d格式说明符输出一个整型常量和实数,并观察其结果。

#include <stdio.h>
int main(void)
{
    printf("%d,%d\n",21,21.5);
    return 0;
}

运行结果:

21,0

程序说明:

格式说明符%d用于输出整型数据,所以21的输出结果是正确的,但21.5是实型数据,所以试图用%d输出,得到了错误的输出结果。

2、整型变量

整型变量中只能存放整型数据。整型变量的常用类型有基本型(int型)和长整型(long型)。定义变量时必须根据需要给出其类型。

【例1.8】编写一个整型变量的定义、赋值和输出的程序。

#include <stdio.h>
int main(void)
{
    int a,b;        //定义基本整型变量a和b
    a=2147483647;
    b=a+1;
    printf("a=%d,b=%d\n",a,b);
    return 0;
}

运行结果:

a=2147483647,b=-2147483648

(注:b的值不是2147483648,产生溢出现象)

程序说明:

(1)定义基本整型变量要用关键字int%d用于输出基本整型数据

(2)在Visual C++ 6.0环境中,基本整型占4个字节(32个位),取值范围是-2147483648~2147483647,因此2147483647+1的值产生溢出现象,得不到预期的值2147483648。

(3)程序中定义了变量a和b,其名称由编程者给出。在实际开发软件时,为了增加程序的可读性,命名变量时应做到变量名“简单明了”“见名知意”。例如,表示年份的变量名可用iYear,其中第一个字母i表示该变量的数据类型,Year表示年份。

3、变量初始化

在定义变量的同时给变量赋值,如“int a=5;”称为变量的初始化。“int a=5;”的作用与“int a;a=5;” 相同。C语言允许在同一定义部分中定义多个变量,并同时对它们进行初始化,如“int a=5,b=6;”是合法的。

 由于只经定义而未赋值的变量,其值不确定,为了防止使用这些无意义的变量,建议对那些暂时不必赋值的变量均清零,如“int a=0;”。

 为了防止产生数据溢出的现象,必须先估计所要处理的数据范围,再根据其范围选择合适的数据类别。整型变量可以精确地存放数据,但取值范围较小。当预计数据超出整型数据范围时,可以考虑选用实型变量。

1.4.3 实型常量与变量

1、实型常量

在C语言中将实型常量作为双精度类型处理

【例1.9】编写程序,将实型常量按小数形式和指数形式输出。

#include <stdio.h>
int main(void)
{
    printf("%lf\n",123451234512345.1);
    printf("%le\n",12345.6788885);
    printf("%le\n",0.0);
    return 0;
}

运行结果:

123451234512345.090000
1.234568e+004
0.000000e+000

程序说明:

(1)实型常量有两种不同形式的输出,使用%lf按十进制小数形式输出,小数点后有6位;使用%le,按指数形式输出,小数点前有一位非零数字,小数点后输出6位;如果用%le格式说明符输出0.0,则输出形式为0.000000e+000。

(2)由第一个实型常量的输出结果可以看出,前15位的数字准确无误。

在C语言中实型常量有两种表示形式,即十进制小数形式指数形式

(1)十进制小数形式必须包括数字和小数点。如12.3、.12、12.、0.0都是合法的十进制小数形式,而123和.(只有小数点)是非法的小数形式。

(2)指数形式类似于数学中的科学记数法。如3.15e1、315e-1、0.315E+2分别相当于3.15*10、315*10的负一次方、0.135*10的二次方,而且都表示31.5.使用指数形式时,要注意e(或E)前面必须有数字,且e后面的指数必须为整数,如E-1、3e1.1、.3e、e等都是不合法的指数形式,而3.e2、1E+3都是合法的。

2、实型变量

实型变量中只能存放实型数据,实型变量按其所能保证的精度分为单精度型(float)和双精度型(double)。

【例1.10】编写一个实型变量的定义、赋值和输出的程序。

#include<stdio.h>
int main(void)
{
    float a=12.3,b=0.0;     //初始化两个单精度型变量
    double c=12345.67;      //初始化双精度型变量

    b=12345.67;
    printf("a=%f,b=%f,c=%lf\n",a,b,c);
    return 0;
}

运行结果:

a=12.300000,b=12345.669922,c=12345.670000

程序说明:

(1)定义单精度型变量要用关键字float,%f用于输出单精度或双精度型数据;定义双精度型变量要用关键字double,%lf用于输出双精度型数据。不论用%f还是%lf,都输出6位小数。

(2)用单精度型变量存放数据时,能保证6位有效数字,而双精度型变量能保证15位有效数字。从运行结果可以看出,b保证了前6位数字(从第7位起数字已不准确),而c保证了所有数字(因为不大于15位)。

实型变量取值范围较大,但由于不能保证有效数字以外的数字,无法精确地存放数据,往往出现误差。表1.1列出了实型变量a的定义形式、a在Visual C++ 6.0环境中所占的字节数和a的取值范围。

表1.1 实型变量的定义

1.4.4 字符型常量与变量

1、字符型常量

【例1.11】编写程序,将字符按不同格式输出。

#include<stdio.h>
int main(void)
{
    printf("%c---%d,%c---%d\n",'a','a','A','A');
    printf("%d---%c,%d---%c\n",'a'+1,'a'+1,'A'+1,'A'+1);
    printf("小写-大写字母=%d\n",'a'-'A');
    return 0;
}

运行结果:

a---97,A---65
98---b,66---B
小写-大写字母=32

程序说明:

(1)格式说明%c用于输出一个字符,字符常量用单引号括起来,但输出时不输出单引号。字符也可以按整数形式输出输出的是该字符的ASCII码值。字符a和A的ASCII码值分别为97和65。

(2)字符常量可以参加运算,表达式’a‘+1的值是字符a的ASCII码值97和1之和98(即b的ASCII码值),而’A‘+1的值是A的ASCII码值65和1之和66(即B的ASCII码值)。

(3)小写字母与其相对应的大写字母的ASCII码值之差都是32,因此字母H可表示为’h‘-32,字母m可表示为’M‘+32。

字符常量是ASCII字符集中的一个字符,但其中有些字符在键盘上是找不到的,例如各种特殊字符,这时可以使用转义字符形式,参见1.6.3节。

2、字符型变量

字符型变量(char)中存放ASCII字符集中的任何一个字符,字符变量在内存中占一个字节

【例1.12】编写一个字符型变量的定义、赋值和输出程序。

#include<stdio.h>
int main(void)
{
    char ch='a';        //初始化1个字符型变量
    int s=0;

    ch=ch-32;       //将小写字母’a‘转换成大写字母’A‘
    s='5'-'0';      //将数字字符5转换成对应数字5
    printf("ch=%c,s=%d\n",ch,s);
    return 0;

}

运行结果:

ch=A,s=5

程序说明:

(1)定义字符型变量要用关键字char,%c用于输出字符型数据。

(2)小写字母和对应大写字母的ASCII码值均相差32,用此规律可以进行字母的大小写转换。

(3)数字字符5和0的ASCII码值分别为53和48,其差值是5,正好是数字字符5对应的数字,用此规律可以进行数字字符和对应数字键=间的转换。

(4)编写程序时,定义字符型变量时建议用c作为变量名的第一个字符,表示该变量为字符型。


传送门来喽🚪~

传送门上一节:C语言程序设计-概述、简单程序、数据类型

传送门下一节:C语言程序设计-算数运算符、赋值运算符、逗号运算符及表达式


Patience is a virtue.

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值