-
1 文字讲解
-
2 视频教程
-
3 过关测试
-
4 课堂小结
2.3 赋值语句
赋值语句是程序中最经常出现的语句,它的作用是对一个变量进行赋值。赋值就是将一个数据存入一段连续的具有若干个存储单元的存储空间中,该存储空间有一个名字,就是前面介绍的变量名。程序中通过变量名来使用这些存储空间,既可以通过变量名将某个数据存入,又可以通过变量名将已存入的数据读出。对一个变量进行定义后,这个变量如果没有赋值,那么它的值是不确定的,所以对变量进行操作之前,应该对该变量进行赋值。
一、赋值语句的格式与功能
1、赋值语句的定义:
赋值语句是由赋值表达式和一个语句结束符(即分号“;”)组成的。
2、赋值语句的一般形式
变量 = 表达式 ;
说明:这种语句实际上就是在赋值表达式后面加上一个“=”。
(1)会发生类型转换 (2)右结合
(3)优先级倒数第二
3、赋值语句的功能(先计算后赋值)
它的功能是首先计算赋值号“=”右边表达式的值,然后将结果送给赋值号“=”左边的变量。
4、赋值语句的用法
例1 g=9.8;
说明:给变量直接赋值。g为变量名,“=”为赋值号。该语句表示将数据 9.8 赋给变量g。
例2 g=10+20-9;
说明:右边为表达式。执行该语句时,先计算右边表达式”10+20-9”的值,结果为21,再将21存入变量g中。
例3 int x=1; x = x+1;
说明:累加语句。上面有两条句,第一条定义一个变量x,并初始为1;第二条语句,则将x的值1取出,将1和1相加,再将结果2存入x中,即变量g的当前值为2。这与数学上的 表达式“x = x+1”不一样,需要加强理解。执行过程如下图所示:

对于初学者,需要注意的是,“=”不是等号,而是赋值号。赋值语句与算术中的等式是完全不同的。
注意:
虽然赋值号“=”是一个运算符,但由于它的操作是将右边表达式的值赋给左边的变量, 因此,要求赋值号“=”的左边一定是一个变量而不能是常量或表达式。例如
A=a+1;
3=x/2
a+b=12
都是错误的。
例2-3 定义两个字符型变量。
char c1, c2;
c1='a';
c2='b';
这个例子定义了两个字符型变量c1、c2,一个字符型变量可存放一个字符将一个字符量存放到一个字符变量中,实际上并不是把该字符常量本身放到内存中,而是将该字符相应ASCI码存放到内存单元中。C语言中的字符型数据与整型数据之间可以通用。因为字符型数据与整型数据的存储结构一样。
例2-4 给变量赋值。
#include <stdio.h>
main()
{ char c1='a', c2;
int k;
k=c1; //将字符型变量c1的ascii码赋给整型变量k
c2=97; //将整数97赋给字符型变量c2
printf("%c, %c, %d\n", c1, c2, c1);
//字符变量既可按字符型输出,也可按整型输出
printf("%d, %c\n", k, k);
//整型变量既可按整型输出,也可按字符型输出
}
运行结果如图2-2所示。

图2-2 例2-4运行结果
上面的程序中,变量说明:
char c1='a', c2;
等价于
char c1, c2 ;
即在定义变量的同时,可以给变量赋初值。
例2-5 将小写字母转换成大写字母。
源程序1:定义两个变量
#include <stdio.h>
main()
{ char c1, c2;
c1='a';
c2=c1-32; //c2='A'
printf("%c,%c",c1,c2);
}
运行结果如下图所示:

源程序2:定义一个变量
#include <stdio.h>
main()
{ char ch;
ch='a';
printf("%c=>", ch);
ch=ch-32; // 这种用法更多一些
printf("%c",ch);
}
运行结果如下:
知识点:
1、将大写字母转换为小写字母:ch = ch +32;
2、将小写字母转换为大写字母:ch = ch -32;
3、字母移位变换:
如:'b'-->'e' 相应语句 ch = ch +3;
'f' -->'b' 相应语句 ch = ch -4;
4、将数字字符转换对应的数值:
如:'1'-->1 相应语句 a = ch - '0';
5、将数字字符移位变换:
如:'1'-->'5' 相应语句 ch = ch -4;
注意:字符型数据做加减法运算时要有意义。
另外,由于C语言中还有一些复合赋值运算,如+=、-=、*=、 /=等,中间不能有空格,因此,下列语句:
c+=32; ( 相当于c=c+32; )
c-=32; ( 相当于c=c-32; )
i*=a+b; ( 相当于i=i*(a+b); )
k/=2; ( 相当于k=k/2; )
均为赋值语句,它们均可以作为一个单独的语句在程序中出现。
二、复合赋值运算
格式:复合赋值运算符=运算符+赋值号


三、赋值语句中的类型转换
当赋值语句(或赋值运算表达式)中“=”左边的变量与右边表达式的数据类型不一致时, C编译系统会自动实现数据类型的转换,转换的原则是将赋值号右边的表达式值的类型转换成与左边变量相同的类型后再赋值。例如:
int a;
short b;
char c;
a=b; //short型变量b的值转换成int型后再赋给a
b=c; //char型变量c的值转换成short型后再赋给b
a=b+c; //将b和c的值转换成int型后相加,再赋给a
需要注意的是,对于不同类型的变量,由于其数据的长度不同,当左边变量的数据类型比右边表达式值的类型长(比如int型转换成float型或 float型转换成 double型)时,转换后的值不会改变精度或准确度,只是改变值的表示形式。然而,当右边表达式值的类型比左边变量的类型要长时,这种转换的结果会对右边的数据进行截取,仅取出与左边变量类型相同的长度,这意味着会丢失高位数据,因此,可能引起精度降低或出现错误的结果。
总结:1、范围小->范围大,只改变存储结构
2、范围大->范围小,不但改变存储结构,精度可能降低或出现错误
看下面使用赋值语句编写的简单程序示例。
例2-6 使用赋值语句编写程序。
#include <stdio.h>
#include <conio.h>
main()
{
double x; int a =350; char c;
c=a; // int -> char 数据可能有错误
x=a; // int -> double 数据没有错误
printf("a=%d,c=%d,x=%f\n ", a, c, x);
getch( );
}
程序的运行结果如图2-3所示。

图2-3 例2-6运行结果
程序分析:
语句“c=a; ”执行如下图所示:

因为字符型在内存中仅占一个字节,所以执行“c=a”后,char型变量c只取int型变量a值的低8位。对于高位字节,数据则丢失。执行后,结果产生错误,c = 94。
语句“x=a;”执行如下图所示:

double型数据表示的范围比int型大,所以执行“x=a;“后,x的值不会比a小。数据的存储结构发生了变化,但数据的精度可能会发生变化。在编写程序时需要引起注意。
程序中 printf( )是格式化输出标准函数,它可将a、c、x的值按指定的格式显示在屏幕上, getch( )也是标准函数,等待用户输入任意一个字符。
一般来说,一个完整的计算机程序经常要求具备输入和输出功能。C语言本身没有配备完成输入/输出功能的语句,它的输入/输出功能是通过在程序中调用系统提供的标准函数来实现的。下面介绍几种常用的输入/输出(I/O)标准函数。
三、怎样编写源程序
1、写一个空程序

2、加头文件

3、定义变量

4、输入语句或初始化
5、算法

6、输出相关信息




