3.C语言程序设计-顺序程序设计

一、数据的表现形式及其运算

常量和变量

常量

在程序运行过程中,其值不能改变的量称为常量。

分类:
1.整型常量
2.实型常量:
1)十进制小数形式,由数字和小数点组成。
2)指数形式 由于在计算机输入输出时无法表示上角或下角,故规定以字母e或E表示以10为底的指数。但应注意:e或E之前必须有数字,而且e或E后面必须为整数。如12.34e3表示12.34*10^3
3.字符常量 :
1)普通字符 用但撇号括起来的一个字符,如’a’,单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。字符常量存储在计算机存储单元中时,并不是存储字符本身,而是以其代码存储的,(一般采用ASCⅡ代码)
2)转义字符 就是以"“开头的字符序列。
在这里插入图片描述
转义字符意思是将”"后面的字符转换成另外的意义。
4. 字符串常量 用双撇号把若干字符括起来,字符串常量是双撇号中的全部字符。
5.符号常量 用#define指令,指定用一个符号名称代表一个常量
#define PI 3.14159 //注意行末没有分号.
这种用一个符号代表一个常量的称为符号常量。使用符号常量有以下好处:
1)含义清晰
2)在需要改变程序中多处用到的同一个常量时,能做到一改全改

注意:要区分符号常量和变量,不要把符号常量误认为变量。符号常量不占内存,只是一个临时符号,代表一个值,在预编译后这个符号就不存在了,故不能对符号常量赋新值。为了与变量名相区别,习惯上符号常量用大写字母表示。

变量

变量代表一个有名字的、具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。

变量必须先定义,后使用。在定义时指定该变量的名字和类型。一个变量应该有名字,以便被引用。请注意区分变量名和变量值这两个不同的概念。变量名其实是以一个名字代表的一个存储地址。
在这里插入图片描述

常变量

C99允许使用常变量,方法是在定义变量时,前面加一个const

如:const int a=3;  定义 a 为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变。

常变量与常量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不许改变其值。可以说,常变量是有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用。
对符号常量的名字是不分配存储单元的。而常变量要占用存储单元,有变量值,只是该值不改变而已。从使用的角度看,常变量具有符号常量的优点,而且使用更方便。有了常变量以后,可以不必多用符号常量。

标识符

C 语言规定标识符只能由字母、数字和下画线3种字符组成,且第1个字符必须为字母或下画线。
注意:编译系统认为大写字母和小写字母是两个不同的字符。
一般而言,变量名用小写字母表示,与人们日常习惯一致,以提高可读性。

二、数据类型

在计算机中,数据是存放在存储单元中的,它是具体存在的。而且,存储单元是由有限的字节构成的,每一个存储单元中存放数据的范围是有限的。
所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。
在这里插入图片描述

其中,基本类型(包括整型和浮点型)和枚举类型变量的值都是数值,统称为算术类型( arithmetic type )。算术类型和指针类型统称为纯量类型( scalar type ),因为其变量的值是以数字来表示的。枚举类型是程序中用户定义的整数类型。数组类型和结构体类型统称为组合类型( aggregate type ),共用体类型不属于组合类型,因为在同一时间内只有一个成员具有值。函数类型用来定义函数,描述一个函数的接口,包括函数返回值的数据类型和参数的类型。
不同类型的数据在内存中占用的存储单元长度是不同的。

整型数据

1.基本整型( int 型)

编译系统分配给 int 型数据2个字节或4个字节(由具体的 C 编译系统自行决定)。在存储单元中的存储方式是:用整数的补码( complement )形式存放。
在存放整数的存储单元中,最左面一位是用来表示符号的,如果该位为0,表示数值为正,如果该为1表,数值为负

2.短整型(short int型)

类型名为short int 或shot。存储方式与ont型相同

3.长整型(long int)
类型名为long int或long。
4.双长整型(long long int)
类型名为longlongint或long long,一般分配8个字节。这是C99新增的类型,但许多C编译系统尚未实现。

说明:C标准没有具体规定各种类型数据所占用存储单元的长度,这是由各编译系统自行决定的。C标准只要求long型数据长度不短于int型,short 型不长于int型。

以上介绍的几种类型,变量值在存储单元中都是以补码形式存储的,存储单元中的第 1个二进位制代表符号。整型变量的值的范围包括负数到正数.
在这里插入图片描述

在实际应用中,有的数据的范围常常只有正值.为了充分利用变量的值的范围,可以将变量定义为“无符号”类型。可以在类型符号前面加上修饰符 unsigned,表示指定该变量是“无符号整数”类型。如果加上修饰符 signed,则是“有符号类型”。

在这里插入图片描述
(1)只有整型(包括字符型)数据可以加 signed或 unsigned 修饰符,实型数据不能加。(2)对无符号整型数据用“%u”格式输出。%u表示用无符号十进制数的格式输出。

字符型数据

由于字符是按其代码(整数)形式存储的,因此C99 把字符型数据作为整数类型的一种。
字符与字符代码并不是任意写一个字符,程序都能识别的。只能使用系统的字符集中的字符,目前大多数系统采用 ASCII 字符集。各种字符集(包括ASCII字符集)的基本集都包括了 127 个字符。其中包括:
在这里插入图片描述
注意:字符1和整数1是不同的概念。字符1只是代表一个形状为1的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节。如图所示:
在这里插入图片描述
字符变量
字符变量是用类型符 char 定义字符变量。

在这里插入图片描述

浮点型数据

浮点型数据是用来表示具有小数点的实数的。
浮点数类型包括 float(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。
1.)float型(单精度浮点型)。
编译系统为每一个float 型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。小数部分的小数点前面的数为0。
如图所示
在这里插入图片描述
2.double型(双精度浮点型)。
为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字,数值范围为-1.7X1038~1.7X103。为了提高运算精度,在C语言中进行浮点数的算术运算时,将 float 型数据都自动转换为 double型,然后进行运算。
3.ong double型(长双精度)型。
不同的编译系统对 long double型的处理方法不同。

确定常量的类型

在C语言中,不仅变量有类型,常量也有类型。在程序中出现的常量是要存放在计算机中的存储单元中的。这就必须确定分配给它多少字节,按什么方式存储。
整型常量
不带小数点的数值是整型常量,但应注意其有效范围。
在一个整数的末尾加大写字母 L或小写字母 l,表示它是长整型(long int)
浮点型常量
凡以小数形式或指数形式出现的实数均是浮点型常量,在内存中都以指数形式存储。C编译系统把浮点型常量都按双精度处理,分配8个字节。
注意:C程序中的实型常量都作为双精度浮点型常量。

区分类型和变量: 每一个变量都属于一个确定的类型,类型是变量的一个重要的属性。变量是占用存储单元的,是具体存在的实体,在其占用的存储单元中可以存放数据而类型是变量的共性,是抽象的,不占用存储单元,不能用来存放数据。

三、运算符和表达式

C运算符
在这里插入图片描述
基本的算数运算符

在这里插入图片描述
由于键盘无X号,运算符X以*代替;由于键盘无除号,运算符以/代替。
%运算符要求参加运算的运算对象(即操作数)为整数,除%以外的运算符的操作数都可以是任何算术类型

自增(++)自减(--)运算符

自增(十十)自减(–)运算符的作用是使变量的值加1或减1,
例如:
在这里插入图片描述
自增(减)运算符常用于循环语句中,使循环变量自动加 1;也用于指针变量,使指针指向下一个地址。

算术表达式和运算符的优先级与结合性

算术运算符是自左至右(左结合性),赋值运算符是自右至左(右结合性)。

不同类型数据间的混合运算

如果一个运算符两侧的数据类型不同,则先自动进行类型转换,使二者成为同一种类型,然后进行运算。整型、实型、字符型数据间可以进行混合运算。规律为:

  1. 十,、*_/运算的两个数中有一个数为 float或double型,结果是double型,因为系统将所有 float 型数据都先转换为 double型,然后进行运算。
    2.如果int型与 float 或double型数据进行运算先把int型和float型数据转换为double型,然后进行运算,结果是 double型。
    3.字符(char)型数据与整型数据进行运算就是把字符的ASCII代码与整型数据进行运算。

强制类型转换运算符


其一般形式为:(类型名)(表达式)
注意,表达式应该用括号括起来。如果写成(int)x+y
则只将x转换成整型,然后与y相加。
需要说明的是,在强制类型转换时,得到一个所需类型的中间数据,而原来变量的类型未发生变化。例如:
a=(int)x
如果已定义x为float型变量,a为整型变量,进行强制类型运算(int)x后得到一个int类型的临时值,它的值等于 x的整数部分,把它赋给,注意x的值和类型都未变化仍为 float型。该临时值在赋值后就不再存在了。

从上可知,有两种类型转换。
一种是在运算时不必用户干预,系统自动进行的类型转换。
另一种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。强制类型转换运算优先于%运算,因此先进行(int)x的运算,得到一个整型的中间变量,然后再对3求余。此外,在函数调用时,有时为了使实参与形参举型一致,可以用强制举型转换运算符得到一个所需类型的参数。

四、C语句

一个函数包含声明部分执行部分,执行部分是由语句组成的,语句的作用是向计算机系统发出操作指令,要求执行相应的操作。一个C语句经过编译后产生若干条机器指令。声明部分不是语句,它不产生机器指令,只是对有关数据的声明

在这里插入图片描述
(2)函数调用语句

函数调用语句由一个函数调用加一个分号构成。

(3)表达式语句

达式语句由一个表达式加一个分号构成,最典型的是由赋值表达式构成一个赋值语句。

(4)空语句

;
此语句只有一个分号,它什么也不做。可以用来作为流程的转向点(流程从程序其他地方转到此语句处),也可用来作为循环语句中的循环体(循环体是空语句,表示循环体什么也不做)。

(5)复合语句

可以用{ }分把一些语句和声明括起来成为复合语句(又称语句块)。
(6)赋值语句

1.赋值运算符“=,它的作用是将一个数据赋给一个变量。
2.复合的赋值运算符
在赋值符一之前加上其他运算符,可以构成复合的运算符。例:
a+=3    等价于a=a+3
x*=y十8 等价于x=x*(y十8)
x%=3    等价于x=x%3
注意:如果b是包含若干项的表达式,则相当于它有括号。例如,以下3种写法是等价的:
x%=y+3
x%=(y+3)
x=x%(y+3)(不要错写成xx%y+3)
3.赋值表达式
由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。
它的一般形式为:变量   赋值运算符   表达式
作用是将一个表达式的值赋给一个变量.
4.赋值过程中的类型转换
如果赋值运算符两侧的类型不一致,但都是基本类型时,在赋值时要进行类型转换。类型转换是由系统自动进行的,转换的规则是:
(1) 将浮点型数据(包括单、双精度)赋给整型变量时,先对浮点数取整,即舍弃小数部分,然后赋予整型变量。
(2)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。
(3)将一个 double型数据赋给 float 变量时先将双精度数转换为单精度即只取6~7位有效数字,存储到 float 型变量的 4 个字节中。应注意双精度数值的大小不能超出 float 型变量的数值范围。
(4)字符型数据赋给整型变量时,将字符的ASCII代码赋给整型变量。
(5)将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量(例如把占4个字节的int型数据赋给占2个字节的 short 变量或占1个字节的char 变量)时,只将其低字节原封不动地送到被赋值的变量(即发生“截断”)

在这里插入图片描述

变量赋初值

inta=3,b=3,c=3; (正确)
Int a=b=c=3; (错误)

五、数据的输入输出

用 scanf函数输入a,b,c 的值请注意在 scan函数中括号内变量a,b,c的前面,要用地址符&.,即&a,&b,&c。&a表示变量a 在内存中的地址。该 scanf 函数表示从终端输人的3个数据分别送到地址为 &a,&.b,&c 的存储单元,也就是赋给变量 a,b,c。双撤号内用%If 格式声明,表示输人的是双精度型实数。

在printf函数中,不是简单地用%f格式声明,而是在格式符的前面加了"7.2"表示在输出x1和x2时指定数据占7列其中小数占2列。

1.所谓输入输出是以计算机主机为主体而言的。
2.C语言本身不提供输入输出语句,输人和输出操作是由C标准函数库中的函数来实现的。
3.要在程序文件的开头用预处理指令 #include 把有关头文件放在本程序中
在这里插入图片描述

不同的编译系统所提供的函数库中,函数的数量名字和功能是不完全相同的。不过,有些通用的函数(如 printf和 scanf等),各种编译系统都提供成为各种系统的标准函数。
printf函数输出数据

在C程序中用来实现输出和输人的主要是 printf 函数和scanf函数。这两个函数是格式输入输出函数。用这两个函数时,程序设计人员必须指定输入输出数据的格式,即根据数据的不同类型指定不同的格式.

printf函数的一般格式为:printf(格式控制,输出表列)例如:
printf("%d,%c\n",i,c);
(1)“格式控制”是用双撇号括起来的一个字符串,称为格式控制字符串,简称格式字符串。它包括两个信息:
     1)格式声明。格式声明由“%”和格式字符组成,如%d%f等。它的作用是将输出的数据转换为指定的格式后输出。格式声明总是由“%”字符开始的。
     2)普通字符。普通字符即需要在输出时原样输出的字符。例如上面 printf 函数中双撇号内的逗号、空格和换行符,也可以包括其他字符。
(2)输出表列是程序需要输出的一些数据,可以是常量、变量或表达式。

格式字符
1.d格式符。用来输出一个有符号的十进制整数。
2.c格式符。用来输出一个字符。
3.s 格式符。用来输出一个字符串。
4.f格式符。用来输出实数(包括单、双精度长双精度),以小数形式输出,有几种用法:

1)基本型,用%f。
不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。系统处理的方法一般是:实数中的整数部分全部输出,小数部分输出6位。
2)指定数据宽度和小数位数,用%m.nf 例:“%7.2”格式指定了输出的数据占7列,其中包括2位小数.
3)输出的数据向左对齐,用%-m.nf
在m.n的前面加一个负号,其作用与%mn形式作用基本相同,但当数据长度不超过m时,数据向左靠,右端补空格。
在这里插入图片描述

5.e格式符。用格式声明%e指定以指数形式输出实数.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

scanf函数输入数据

canf函数的一般形式:scanf(格式控制,地址表列)
“格式控制”的含义同 printf 函数。“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。
与printf函数中的格式声明相似,%开始,以一个格式字符结束,中间可以插入附加的字符。

使用scanf函数时应注意的问题

在这里插入图片描述

字符输入输出函数
putchar()和getchar()该函数只能一个个输入一个个输出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值