1.常量与变量

目录

1.常量与变量

1.1常量

1.2变量

2.简单的屏幕输出

3.补充:数据类型

4.小结

6.习题练习


C语言程序处理的数据有常量(Constant)和变量(Variable)两种形式。

1.1常量

顾名思义,常量就是在程序中不能改变其值的量。按照类型划分有以下几种:整型常量、实型常量、字符型常量、字符串字面量(String Literal)和枚举常量(暂时先不介绍)。一些关于常量的实例如下表所示:

常量的类型 实例 备注
整型常量 10,-30, 0 包括正整数,负整数和零在内的所有整数
实型常量 3.14,-0.56,18.0 由于计算机的实型数是以浮点(Floating-Point)形式表示的,即小数点位置可以是浮动的,因此实型常量既可以称为实数,也可以称为浮点数
字符型常量 'x','X','0','9' 用一对单引号括起来的任意字符
字符串字面量 “Hello!”,“K88”,“9” 用一对双引号括起来的零个或多个字符

C程序中的整型(Integer)常量通常习惯上用我们熟悉的十进制(Decimai)数来表示,但事实上它们都是以二进制形式存储在计算机内存中的。二进制数表示不直观方便,因此有时也将其表示为八进制(0ctal)和十六进制(Hexadecimal),编译器会自动将其转换为二进制形式存储。不同进制的整型常量的表示形式。即使是整型常量也有长整型和短整型、有符号和无符号之分,不同类型的整型常量的表示形式。

不同进制的整型常量的表示形式
进制 整数17的不同进制表示 特点
十进制 17 以 10为基的数值系统称为十进制(Decimal)。由0~9的数字序列组成,数字前可以带正负号
二进制

00010001

以2为基的数值系统称为二进制(Binary)。二进制整数由0、1数字序列组成。在二进制系统中,数10相当于十进制中的数2
八进制

021

(将00010001从最低位开始三位一组得到其压缩表示 021)

以8为基的数值系统称为八进制(Octal)。八进制整数由数字0开头,后跟0~7(可用3位二进制位表示)的数字序列组成。在八进制系统中,数10相当于十进制中的数8
十六进制

0x11

(将00010001从最低位开始四位一组得到其压缩表示 0x11)

以16为基的数值系统称为十六进制(Hexadecimal)。十六进制整数由数字0加字母x(或X)开头,后跟0-9,-或A~E(可用4位二进制位表示)的数字序列组成。在十六进制系统中,数10相当于十进制中的数16
不同类型的整型常量的表示方式
不同类型的整型常量 实例 特点
有符号型常量 10,-30,0 默认的 int 型定义为有符号整数,因此对int型无须使用 signed
无符号整型常量 30u,256U 无符号整型常量由常量值后跟U或日来表示,不能表示成小于0的数,如-30u 就是不合法的
长整型常量 -2561,1024I 长整型常量由常量值后跟L或1来表示
无符号长整型常量 30lu 无符号长整型常量由常量值后跟LU、Lu、IU或地来表示

C程序中的实型常量有十进制小数和指数两种表示形式,如下表所示:

实型常量的表示方式
不同形式的实型常量 实例 特点
十进制小数形式 0.123,-12.35,.98 十进制小数形式与人们表示实数的惯用形式相同,是由数字和小数点组成的。注意必须有小数点,如果没有小数点,则不能作为小数形式的实型数
指数形式 3.45e-6
(等价于0.00000345)
指数形式用于直观地表示绝对值很大或很小的数。在C语言中,由于程序编辑时不能输人上下角标、所以以字母e或者E来代表以10为底的指数。其中,的左边是数值部分(有效数字),可以表示成整数或者小数形式、不能省略;e的右边是指数部分,必须是整数形式

实型常量有单精度、双精度和长双精度之分,但无有符号和无符号之分,不同类型的实型常量的表示形式

不同类型的实型常量的表示形式
不同类型的实型常量 实例 特点
单精度实型常量 1.25F,1.25e-2f 单精度实型常量由常量值后跟F或f来表示
双精度实型常量 0.123,-12.35,.98 实型常量隐含按双精度型处理
长双精度实型常量 1.25L 长双精度型常量由常量值后跟L或l来表示

1.2变量

变量不同于常量,其值在程序执行过程中是可以改变的。在C程序中,变量在使用之前必须先定义。定义变量的一般形式为:类型关键字 变量名;
关键字(Keyword)是C语言预先规定的、具有特殊意义的单词(详见附录A)。这里的类型关键字用于声明变量的类型。变量的类型决定了编译器为其分配内存单元的字节数、数据在内存单元中的存放形式、该类型变量合法的取值范围以及该类型变量可参与的运算种类。

下面程序首先定义整型、实型和字符型三个变量,然后分别为其赋值。

int main(void)
{
    int   a;    //用关键字int指定a的类型
    float b;     //用关键字float指定变量b的类型
    char  c;      //用关键字char指定变量c的类型
    a=1;           //为int型变量a赋值整型常量1
    b=2.5;         //为float型变量b赋值实型常量2.5
    c='A';         //为char型变量c赋值字符型常量‘A’
    return 0;
  }    

注意,一个C程序必须有且只能有一个用main作为名字的函数,这个函数称为主西数。main后面圆括号内的 void表示它没有函数参数,main前面的im表示函数执行后会返回操作系统一个整型值,在man函数的函数体中的最后一条语句使用retum语句返回了这个值,通常返回0表示程序正常结束。

变量名是用户定义的标识符(Identiier),用于标识内存中一个具体的存储单元,在这个存储单元中存放的数据称为变量的值。在计算机内存中,变量好比个盒子,程序员负责为盒子命名。盒子中可以放入你想放进去的任何数据当新的数据被放人盒子时,盒子即变量的旧值被新值所覆盖。


变量名的命名应遵守以下基本的命名规则(NamingRales):
(1)标识符只能由英文字母、数字和下划线组成,建议使用见名知意的名字为变量命名,可以使用英文单词大小写混排或中间加下划线的方式,而不要使用汉语拼音;
(2)标识符必须以字母或下划线开头;
(3)不允许使用C关键字为标识符命名;
(4)标识符可以包含任意多个字符,但一般会有最大长度限制,与编译器相关,不过大多数情况下不会达到此限制。

注意,标识符是区分大小写(即大小写敏感)的。例如sum、Sum和SUM 是三个不同的标识符。为避免混淆,程序中最好不要出现仅靠大小写区分的相似的标识符。此外,C89规定所有变量必须在第一条可执行语句之前定义,但C99没有这个限制。

在为变量赋值时,等号两边的空格不是必需的,增加空格只是为了增强程序的可读性(Readability)。此外,main()函数内的语句统一向后缩进了4个空格,这同样也是为了增强程序的可读性。这是一种良好的书写程序的习惯,它和编写正确的程序一样重要。
C语言允许在定义变量的同时对变量初始化(为其赋初值)。

例如将上方的代码修改如下:

int main(void)
{
    int a = 1;          //定义整型变量a并对其初始化
    float b = 2.5;      //定义实型变量b并对其初始化
    char c = 'A';       //定义字符型变量c并对其初始化
    return 0;
}

如果定义了一个变量,但未对其进行初始化,那么该变量的值是一个随机数

以按如下方式定义三个整型变量:
int a,b,c;
若要在定义变量的同时将其初始化为0,则为
intax=0,b=0,c=0;

但是不能写成:
inta=b=c=0;

虽然在一条语句中同时定义多个变量的形式很简洁,但不适用于需要对每个变量表示的意义单独进行注释的场合,因为这样会影响注释的清晰性。

2.简单的屏幕输出

变量被赋值以后,如何在屏幕上显示这些变量的值呢?这就要用到printf()函数。C的标准输入/输出函数printf()的作用是输出一个字符串,或者按指定格式和数据类型输出若干变量的值,如下面程序所示。

#include <stdio.h>
int main(void)
{
     int a = 1;
     float b = 2.5;
     char c = 'A';
     printf("a = %d\n",a);       //按整型格式输出变量a的值
     printf("b = %f\n",b);       //按整型格式输出变量b的值
     printf("c = %c\n",c);       //按整型格式输出变量c的值
     printf("End of program\n");//输出一个字符串
     return 0;
}
     

程序第1行以#开头而未以分号结尾的不是C语,而是的编译预处理命令
尖括号内的文件称为头文件(HeaderFiles),h为head之意,std为standard之意,i为input之意,o为output之意。编译预处理命令#include 可使头文件在程序中生效。它的作用是:将写在尖括号内的头文件stdio.h包含到源文件中。
C语言没有提供专门的输人/输出语句,输入/输出操作是通过调用C的标准库函数来实现的。C的标准函数库中提供许多用于标准输入/输出操作的库函数,使用这些标准输人/输出函数时,只要在程序的开头用编译预处理命令将包含标准输人输出函数的头文件stdio.h包含到源文件中来即可。

%d、%、%e 都是格式字符。%d表示按十进制整型格式输出变量的值。%表示按十进制小数格式输出变m.量的值,除非特别指定,否则隐含输出6位小数。%c表示输出字符型变量的值(一个字符)。\n表示输出一个换行,即将光标移到下一行的起始位置。第10行中没有要输出值的变量,直接将位于双引号内(不包括\n)的字符串送到屏幕显示。在语言中,用一对双引号括起来的若干字符,称为字符串(String)。

3.补充:数据类型

4.小结

在此过程中易出现错误:

编译错误:1.变量未定义就使用

                2.忽视了变量区分大小写,使得定义的变量和使用的变量不同名

int newValue;
newvalue = 0;

               3.在可执行语句之后定义变量

printf("Input n:");
int n:

                 4.在定义变量时,用于变量初始化的常量类型与定义的变量类型不一致

int n = 3.5;

                 5.在定义变量时,对多个变量进行连续赋初值

int m = n = 0;

6.习题练习

1.变量未声明
原问题:int x=y=2.5;中,y未声明;z未声明但被使用。
修正:在程序中显式声明所有变量:floatx,y,z;
2.数据类型错误
原问题:int类型无法存储2.5,导致截断为2
修正:将变量类型改为float,允许存储浮点数。
3.格式符错误
原问题:%d用于输出浮点数,导致输出错误。
修正:将%d改为%f,或进一步调整为%.1f简化输出。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐