回答问题 ….,
1,C程序中是否一定包含注释,
注释的作用是什么?
答案:不一定,是方便阅读程序的。
2,每个程序至少包含一个什么函数?
答案:主函数 main
3,程序中 main函数可以含两个以上吗?
答案:不能,有且只能有一个。
4,一个函数的组成是什么样?
答案:由两部分组成即,
函数的首部 函数体
例如,int add(int x,int y)
{int z;
z=x+y;
return(z);
}
函数首部
函数体
5,函数体包含哪几部分?
答案:包括:声明部分 执行部分
例如,int add(int x,int y)
{int z;
z=x+y;
return(z);
}
声明部分
执行部分
7,语句的标记是什么?
答案:是结尾用分号即:, ;,
6、程序的执行次序是怎样的?
答案:从主函数 main开始执行,在主函
数结尾结束。中间可以调用其他函数
8,程序在机器上的执行过程?
答案:编辑、编译、连接、执行
9,什么叫算法?算法有什么特性?
答案:算法就是解决问题的步骤 ;
有穷性、确定性、可以有输入、至少一
个输出、有效性
10、表示算法的基本结构是哪三种?
答案:顺序结构、选择结构、循环结构
11、设计程序分哪几个步骤?
答案,
分析问题、设计算法、画流程图( N-S
图)、编制程序
第三章 数据类型、运
算符与表达式
预备知识
数据类型
常量与变量
变量赋初值
不同类型数据间的转换
预备知识
?字节和位
?内存以字节为单元组成
?每个字节有一个地址
?一个字节一般由 8个二进制位组成
?每个二进位的值是 0或 1
0 1 2 3 4 5 6 7
200
208
202
206
204
……...
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?数值的表示方法 ——原码、反码和补码
?原码:最高位为符号位,其余各位为数值本身
的绝对值
?反码,
?正数:反码与原码相同
?负数:符号位为 1,其余位对原码取反
?补码,
?正数:原码、反码、补码相同
?负数:最高位为 1,其余位为原码取反,再对
整个数加 1
例如,
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
X= +91 = +1011011,[X]原 =01011011
X= -91 = -1011011,[X]原 =11011011
X= +91 = +1011011,[X]反 =01011011
X= -91 = -1011011,[X]反 =10100100
补
补 1
求数 -88( 10) =-10110 0( 2) 的原码、反码和补码
原码 反码 补码
+7 00000111 00000111 00000111
-7 10000111 11111000 11111001
+0 00000000 00000000 00000000
-0 10000000 11111111 00000000
数的范围
01111111~
11111111
(-127~+127)
01111111~
10000000
(-127~+127)
01111111~
10000000
(-128~+127)
(用一字节表示数)
?负数补码转换成十进制数:最高位不动,其余位取反加 1
例 补码,11111001
取反,10000110
加 1,10000111=-7
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
例如:求补码为
11111011 的十进制
数
§ 3.1 数据类型
?数据类型总表
< >
C
数
据
类
型
基本类型
构造类型
指针类型
空类型 void
定义类型 typedef
字符类型 char
枚举类型 enum
整 型
实型
单精度型 float
双精度型 double
数组
结构体 struct
共用体 union
短整型 short
长整型 long
整型 int
数据类型决定,
1、数据的表示形式
2、数据占内存字节数
3、数据取值范围
4、其上可进行的操作
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?基本数据类型
< >
类型 符号 关键字 数的表示范围 所占位数
整
型
字
符
型
实
型
有
无
[signed]int 16 -32768~32767
[signed]short 16 -32768~32767
[signed]long 32 -2147483648~2147483647
16 unsigned int 0~65535
32 0~4294967295 unsigned long
unsigned short 16 0~65535
有 float 32 -3.4e-38~3.4e38
有 double 64 -1.7e-308~1.7e308
有 char 8 -128~127
无 unsigned char 8 0~255
说明,数据类型所占字节数随机器硬件不同而不同,
上表以 IBM PC机为例,
语
言
程
序
设
计
第
三
章
数
据
描
述
C
§ 3.2 常量与变量
?标识符
?定义:用来标识变量、常量、函数等的字符序列
?组成,
?只能由字母、数字、下划线组成,且第一个字母必须
是字母或下划线
?大小写敏感
?不能使用关键字
?长度:最长 32个字符
?建议,
?见名知意
?不宜混淆 如 l与 I,o与 0
例,判断下列标识符号合法性
sum Sum M.D.John day Date
3days
student_name #33 lotus_1_2_3
int a>b _above $123 < >
#33
$123
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?一般用大写字母
?是宏定义预处理命令,不是 C语句
?直接常量,
?整型常量
?实型常量
?字符常量
?字符串常量
如 #define PRICE 30
?常量
?定义:程序运行时其值不能改变的量(即常数)
?分类,
?符号常量,用标识符代表常量
?定义格式,#define 符号常量 常量
>
>
>
> < >
例 符号常量举例 (ch3_1.c)
#define PRICE 30
main()
{
int num,total;
num=10;
total=num*PRICE;
printf("total=%d",total);
}
运行结果,total=300
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?整型常量(整常数)
?三种形式,
?十进制整数:由数字 0~9和正负号表示,如
123,-456,0
?八进制整数:由数字 0开头,后跟数字 0~7表
示,如 0123,011
?十六进制整数:由 0x开头,后跟
0~9,a~f,A~F表示, 如 0x123,0Xff
< 例 12 与 12L 例 30000 为 int型
65536 为 long int 型
?整型常量的类型
?根据其值所在范围确定其数据类型
?在 整常量后加字母 l或 L,认为它是 long int
型常量
问题,
0123 = ( )10
0x123 = ( )10
0Xff = ( )10
83
291
255
问题:
10
10
10
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?实型常量(实数或浮点数)
?表示形式,
?十进制数形式:(必须有小数点) 如
0.123,.123,123.0,0.0,123,
?指数形式:( e或 E之前必须有数字;
指数必须为整数)如 12.3e3,123E2,
1.23e4,e-5,1.2E-3.5
<
?实型常量的类型
?默认 double型
?在 实型常量后加字母 f或 F,认为它是 float
型
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?字符常量
?定义,用 单引号 括起来的单个 普通字符 或 转义字符,
?字符常量的 值,该字符的 ASCII码 值
<
转义字符及其含义,
转义字符 含义
\n
\v
\r
\a
\?
\ddd
\t
\b
\f
\\
\,
\xhh
转义字符 含义
换行
垂直制表
回车
响铃
单引号
3位 8进制数代表的字符
水平制表
退格
换页
反斜线
双引号
2位 16进制数代表的字符
如 ‘ \101? -----------?A? ?\012? -----------?\n?
?\376? -----------??? ?\x61? -----------?a?
?\60? -----------?0? ?\483? ----------(?)
例,
?A?-------?\101?-------?\x41?--------65
<
如 ‘ A?——65,‘ a?——97,
‘ 0?——48,?\n?——10
如 ‘ a‘ ?A‘ ??‘ ?\n‘ ?\101‘
?转义字符,反斜线后面跟一个字符或一个代码值表示
例 转义字符举例,
main()
{
printf("\101 \x42 C\n");
printf("I say:\"How are you?\"\n");
printf("\\C Program\\\n");
printf("Turbo \'C\'");
}
运行结果,(屏幕显示 )
A B C
Isay:‖How are you?‖
\C Program\
Turbo ?C‘
例 main()
{ printf(“Y\b=\n”);
}
运行结果,
屏幕显示,=
打印机输出,¥
<
?字符常量与字符串常量不同
?字符串常量
?定义:用双引号 (―‖)括起来的字符序列
?存储,每个字符串尾 自动 加一个 ‘ \0’ 作为字
符串结束标志
h e l l o \0 例 字符串, hello”在内存中
a a \0 例 ‘ a?,a”
例 空串,” \0
例, char ch;
ch=“A”;
例
? ?;
语
言
程
序
设
计
第
三
章
数
据
描
述
C
编译程序根据变量定义为其
分配指定字节的内存单元 …...
地址
int a=1,b=-3,c;
a
b
c
2字节
2字节
2字节
地址
地址
…...
内存
1
-3
??
随机数
?变量
?概念:其值可以改变的量
?变量名 与 变量值
?变量定义的一般格式,
数据类型 变量 1[,变量 2,…,变量 n];
< >
?变量初始化,定义时赋初值 例,
int a,b,c;
float data;
决定分配字节数
和数的表示范围
合法标识符 例,
int a=2,b,c=4;
float data=3.67;
char ch=?A?;
int x=1,y=1,z=1;
int x=y=z=1;
?变量的使用,先定义,后使用
例 1
int student;
statent=19; //Undefined symbol ?statent‘ in function main
例 2
float a,b,c;
c=a%b; //Illegal use of floating point in function main
?变量定义位置,一般 放在函数开头
main()
{ int a,b=2;
float data;
a=1;
data=(a+b)*1.2;
printf(“data=%f\n”,data);
}
变量定义
可执行语句
main()
{ int a,b=2;
a=1;
float data;
data=(a+b)*1.2;
printf(“data=%f\n”,data);
}
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?整型变量
?占字节数随机器不同而不同,一般占一个机器字
?short≤int≤long
?可用 sizeof(类型标识符)测量 (如,sizeof(int))
?数值在内存中以补码表示
?整型数据的溢出
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
例,//example3.3
main()
{int a,b;
a=32767;
b=a+1;
printf(“%d,%d”,a,b);
}
01111111111111111
10000000000000000
运行结果,
32767,-32768
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?实型变量
?float,占 4字节,提供 7位有效数字
?double,占 8字节,提供 15~16位有效数字
例 float a;
a=111111.111; /* a=111111.1*/
double b;
b=111111.111; /* b=111111.111*/
?实型数据在内存中按照指数形式存储
+,31459 1
数符 小数部分 指数
?实型数据的舍入误差
例,//example3.4
main()
{float a,b;
a=123456.789e5;
b=a+20;
printf(“%f,%f”,a,b);
}
运行结果,
12345678848.000000,12345678848.000000
a的值是
12345678900
b的理论值应是
12345678920
实型变量只能保证 7位有效
数字,后面的数字是无意
义的,并不准确地表示该
数
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?字符型变量
?字符变量存放字符常量(字符以 ASCII码 存储)
?char与 int数据间可进行算术运算
例,main()
{ char a;
int x,s;
a=?D?;
x=?A?+5; /* x=65+5; */
s=?!?+?G? /* s=33+71; */
printf(“%c,%c,%d”,a,x,s);
}
没有 字符串变量,用字符数组存放
运行结果,
D,F,104
< >
例 /*example3.5*/
#define PRICE 12.5
main()
{ int num=3;
float total;
char ch1,ch2=?D?;
total=num*PRICE;
ch1=ch2-?A?+?a?;
printf(“total=%f,ch1=%c\n”,total,ch1);
}
宏定义
变量定义
输出结果
运行结果,
total=37.500000,ch1=d
语
言
程
序
设
计
第
三
章
数
据
描
述
C
语
言
程
序
设
计
第
三
章
数
据
描
述
C
§ 3.3 变量赋初值
C语言允许在定义变量的同进使变量初
始化。
例,int a=3;
float f=3.56;
char c=?a‘;
int a,b,c=5;
int a; a=3;
float f; f=3.56;
Char c; c=‘a’;
Char c; c=‘a’;
§ 3.4不同类型数据间的转换
?隐式转换
?什么情况下发生
?运算转换 ------不同类型数据混合运算时
?赋值转换 ------把一个值赋给与其类型不同的
变量时
?输出转换 ------输出时转换成指定的输出格式
?函数调用转换 ------实参与形参类型不一致时
转换
?运算转换规则,不同类型数据运算时先 自动
转换成同一类型
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
double float
long
unsigned
int char,short 低
高 说明,
必定的转换
运算对象类型不同时转换
例 char ch;
int i;
float f;
double d;
ch/i + f*d - (f+i)
int
int
double
double
double
double
double
double < >
?显式转换(强制转换)
?一般形式,( 类型名 ) ( 表达式)
例 (int)(x+y)
(int)x+y
(double)(3/2)
(int)3.6
?说明:强制转换得到所需类型的中间变量,原变
量类型不变 例 main()
{ float x;
int i;
x=3.6;
i=(int)x;
printf(“x=%f,i=%d”,x,i);
}
结果,x=3.600000,i=3
精度损失问题
较高类型向较低类型转换时可能发生
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
思考或问答题,
1,数据类型决定什么?
2、整型变量、字符型变量和单精度变量在内存中各占几个字节?
3、标识符的允许使用哪些符号? 4、符号常量是怎样定义的?
5、字符型常量是怎样定义的? 6、什么叫转义字符?
7、字符串常量与字符常量有什么区别?
8、整型变量与字符型变量可以通用?
9、定义变量时是否可以赋初值?
11、变量不定义可以直接使用吗?例如
main()
{ int a=23,b=12;
c=a+b;
printf(―c=%d‖,c);
}
10、不同类型数据之间的转换规则是如何规定的?
作业,65页 3.3,3.6,3.8
实验二 C语言程序初步 (写实验报告 )
,C语言程序设计方法,167页
实验内容,程序 (一 ) 功能,输出两个数的最大值。
参考程序,
#include <stdio.h>
main()
{ int m,n;
m=2;
n=3;
if(m<n) printf("%d",n);
else printf("%d",m);
}
程序 (二 ) 书中程序
四、问题
0.修改程序一, 要求求任意两个数的最大值 。
1 ~3 书上内容
实验报告的书写要求,
1、封面项目要填全。( 实验台号填机器编号、日期填实验时间)
2、实验仪器及器材:微机,DOS,TC
3、实验目的:填写题目中 [实验目的 ]
4、实验内容:填写题目中的 [实验内容 ],同时如果是程序
要写上程序清单及 N-S流程图。
5、实验数据:填写
1)检测数据。
2)程序编译及连接过程的反馈信息。
3)输出结果。
5、结果讨论:填写题目中 [问题 ]解答。
小结,
1、计算机内存的存储单位是字节,一个字节是 8
位二进制数,每个字节有一个地址。
2、数据是以补码存在内存中的。
正数:原码、补码相同
负数:最高位为 1,其余位为原码取反,再对整
个数加 1 1)数据的表示形式
2) 数据占内存字节数
3、数据类型决定,3) 数据取值范围
4) 可进行的操作
4、字符型变量在内存中占一个字节( 8位)。
5、整型变量在内存中占二个字节( 16位)。
6、单精度实型变量在内存中占四个字节( 32位)
。
7、标识符的使用规则:只能使用字母、数
字、下划线,且第一个字符不能是数字。
8、符号常量用来代表一个常量,必须用宏
定义( #define),一般符号常量用大写标
识符。
9、整型变量与字符型变量可以通用。
10、字符型常量使用单引号引起来的一个字
符,注意转义字符的使用。
11、注意字符串常量与字符常量的区别。
12、定义变量时可以赋初值。
13、注意不同类型数据之间的转换规则。
结合实验情况对前面的内容归纳下,
1、算法与 C程序的关系。
设计并执行一个 C程序的过程如下,
分
析
问
题
写
出
算
法
(N-S图 )
编
写
源
程
序
编
译
源
程
序
连接
目标
程序
及函
数
执行
.exe
文件
例如:编写一个交换整型变量 A和 B值的程序。
分析:假设 A和 B是两个装有不同液体的杯子,要
想使杯子 A和杯子 B内容互换必须借助第三个杯
子 C,首先把 A到入 C,再把 B到入 A,最后把 C到入
B.如图,
A B C
1
2 3
N-S图 C源程序
A C
B A
C B
main()
{ int a,b,c ;
scanf(“%d,%d”,&a,&b);
c=a; a=b ; b=c;
printf(“a=%d,b=%d”,a,b) ;
}
例如:输入
5,9
输出
a=9,b=5
2,C源程序结构
一个 C源程序由函数构成,程序中至少含有一个主
函数 main,也可以包含一个 main函数和若干其
他函数,所有函数之间是并列关系。
C函数的一般形式,
函数类型 函数名 (函数形式参数 )
{
声明部分
执行部分
}
函数体
函数首部
例如:求 a,b,c三个实数中最大数。
main()
{
float max(float x,float y,float z);
float a,b,c,d;
scanf(―%f,%f,%f‖,&a,&b,&c);
d=max(a,b,c);
printf(―max=%f ‖,d);
}
float max(float x,float y,float z)
{
float w;
if (x>y) w=x; else w=y;
if (w<z) w=z;
return(w);
}
声明部分,
执行部分
声明部分,定义实型变量 w
执行部分
主函数首部
max函数首部
3,C语言常量类型有
1)整型常量 例如,-225,013,0x3f
2)实型常量 例如,3.14,2.7e+20
3)字符型常量 例如,‘ a?,?C?,? n?
4)字符串常量 例如:, a”,”yes”
5)符号常量 用预定义命令定义。
4,C语言主要
变量类型有
1)整型变量 用 int 或 long 定义 例如 int a;
以补码形式存在内存中
2) 字符型 变 量 用 char 定义 例如 char ch ;
以补码形式存在内存中
3)实型 变 量 用 float 或 double 定义 例如 float x ;
以指数形式存在内存中
第三章 数据类型,运算符与表达式
C运算符简介
算术运算符和算术表达式
赋值运算符和赋值表达式
逗号运算赋和逗号表达式
C语句概述
赋值语句
第三章
第四章
C语言 运算符
算术运算符:( + - * / % ++ --)
关系运算符:( < <= == > >= !=)
逻辑运算符:(! && ||)
位运算符,( << >> ~ | ^ &)
赋值运算符:( = 及其扩展)
条件运算符:(?:)
逗号运算符:(,)
指针运算符:( * &)
求字节数,( sizeof)
强制类型转换:(类型)
分量运算符:(, ->)
下标运算符:( [])
其它,( ( ) -)
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?学习运算符应注意,
?运算符功能
?与运算量关系
?要求运算量个数 有双目运算、单目运算、三目运算
?要求运算量类型
?运算符优先级别 在一个表达式中按优先级次序运算
?结合方向 优先级相同时按结合方向运算
?结果的类型
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
§ 3.8 算术运算符和算术表达式
?基本算术运算符,+,-,*,/,%
?结合方向:从左向右 取负 – 是右结合
?优先级,- ---->*,/,% -----> +,-
(2) (3) (4)
说明,
?? -? 可为 单目 运算符时,为负号运算符,右结合性
?两整数相除 (/),结果为整数
?参加 +,-,*,/运算的两个数中有一个为实数,则结果是 double
型,因为所有的实数都按 double型进行运算。
?%要求两侧均为整型数据
例 5/2 =
-5/2.0 =
例 5%2 =
-5%2 =
1%10 =
5%1 =
5.5%2 < >
例 5/2 2
-5/2.0 = -2.5
例 1
-1
1
0
(?)
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?自增、自减运算符 ++ --
?作用:使变量值加 1或减 1
?种类,
?前置 ++i,--i (先执行 i=i+1或 i=i-1,再使用 i值)
?后置 i++,i-- (先使用 i值,再执行 i=i+1或 i=i-1)
例 j=3; k=++j;
j=3; k=j++;
j=3; printf(“%d”,++j);
j=3; printf(“%d”,j++);
a=3;b=5;c=(++a)*b;
a=3;b=5;c=(a++)*b;
< >
//k=4,j=4
//k=3,j=4
//4
//3
//c=20,a=4
//c=15,a=4
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?自增、自减运算符 ++ --
?作用:使变量值加 1或减 1
?种类,
?前置 ++i,--i (先执行 i+1或 i-1,再使用 i值)
?后置 i++,i-- (先使用 i值,再执行 i+1或 i-1)
?说明,
?++ -- 不能用于常量和表达式,如 5++,(a+b)++
?++ --结合方向,自右向左
?优先级,- ++ -- ------>* / % ----->+ -
(2) (3) (4)
例 -i++ ? -(i++)
i=3; printf(“%d”,-i++); //-3 例 j+++k; (j++)+k; 例 -i++ i=3; printf(“%d”,-i++);
语
言
程
序
设
计
第
三
章
数
据
描
述
C
尽可能多地 (从左至右 )将若干字符组成一个
运算符
§ 3.9 赋值运算符和表达式
?简单赋值运算符
?符号,=
?格式,变量标识符 =表达式
?作用:将一个数据(常量或表达式)赋给一个变量
?复合赋值运算符
?种类, += -= *= /= %=, =, = &= ^= |=
?含义,exp1 op= exp2 ? exp1 = exp1 op exp2
a+=3 a=a+3
x*=y+8 x=x*(y+8)
x%=3 x=x%3
< >
例 a=3;
d=func();
c=d+2;
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?说明,
?结合方向,自右向左
?优先级, 14
?左侧必须是变量,不能是常量或表达式
?赋值表达式的值与变量值相等,且可嵌套
?赋值转换 规则,使赋值号右边表达式值 自动 转换成其左边
变量的类型
例 3=x-2*y;
a+b=3;
例 float f;
int i;
i=10;
f=i;
则 f=10.0
例 int i;
i=2.56; //结果 i=2;
例, a=b=c=5
a=(b=5)
a=5+(c=6)
a=(b=4)+(c=6)
a=(b=10)/(c=2)
< >
//表达式值为 5,a,b,c值为 5
// b=5;a=5
//表达式值 11,c=6,a=11
//表达式值 10,a=10,b=4,c=6
//表达式值 5,a=5,b=10,c=2
语
言
程
序
设
计
第
三
章
数
据
描
述
C
>
?说明,
?结合方向,自右向左
?优先级, 14
?左侧必须是变量,不能是常量或表达式
?赋值表达式的值与变量值相等,且可嵌套
?赋值转换 规则,使赋值号右边表达式值 自动 转换成其左边
变量的类型
例, a=12;
a+=a-=a*a
例, int a=2;
a+=a*=a-=a*=3;
< >
//a=-264 等价于 a=a+(a=a-(a*a))
//a=0 等价于 a=a+(a=a*(a=a-(a=a*3)))
语
言
程
序
设
计
第
三
章
数
据
描
述
C
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?int <= float,bouble 规则:舍弃小数部分,内
存中以整数存储。
例,int i; i=3.56; //结果,i=3 ?float,double<= int 规则:先将整型数据转换成浮点型数据或双精度数据,然后以
float,double形式存储到变量中。
例,float i;bouble h;
int a=23; i=a; h=a;
//结果,i=23.000000 h=2.300000e+01
?float<=bouble 规则:截取其前面 7位有
效数字,存放到 float变量的存储单元中。注意
数值范围不能溢出。
例,float i;double c=123456789;i=c;
printf(“%f”,i);
//结果,i=123456792.000000
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?int <= char 规则:将字符数据 (8位 )放到整
型变量低 8位中。若字符最高位为 0,则整型变
量高 8位补 0;若字符最高位为 1,则高 8位全补
1。
例,int a;char ch=?\376?;a=ch;/*▊ */
printf(“%d”,a);
//结果,a=-2
?char<=int,short,long 规则:将其低 8位原
封不动地送到 char型变量。
例,int i=289;char c=?a?;c=i;
00000001 00100001
00100001
i=289
c=33
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?Int<=long 规则:将 long型数据中低 16位
原封不动地送到整型变量。
例,int a;long b=8;a=b;
0 000000000000000 0000000000001000
0 000000000001000
b=8
a=8
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?非 unsigned<=unsigned 规则:要求两者占的
字节数相同。将 unsigned型变量原样送到非
unsigned型变量中,但如果数据范围超过相应
整型的范围,则会出现数据错误。
例,unsigned int a=65535;int b; b=a;
1 111111111111111
a
b
1111111111111111
结果,b=-1
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?unsigned<=非 unsigned 规则:要求两者占的
字节数相同。将 unsigned型变量原样送到非
unsigned型变量中,原有的符号位也作为数值
一起传送。
例,unsigned a;int b=-1;
a=b;printf(“%u”,a);
1 111111111111111 a
b 1111111111111111 结果,a=65535
<幻灯片 28
§ 3.10 逗号运算符和逗号表达式
?形式,表达式 1,表达式 2,……,表达式 n
?结合性,从左向右
?优先级, 15
?逗号表达式 的值:等于表达式 n的值
?用途,常用于循环 for语句中
例 a=3*5,a*4
a=3*5,a*4,a+5
例 x=(a=3,6*3)
x=a=3,6*a
例 a=1;b=2;c=3;
printf(“%d,%d,%d”,a,b,c);
printf(“%d,%d,%d”,(a,b,c),b,c);
< >
//a=15,表达式值 60
//a=15,表达式值 20
//赋值表达式,表达式值 18,x=18
//逗号表达式,表达式值 18,x=3
//1,2,3
//3,2,3
语
言
程
序
设
计
第
三
章
数
据
描
述
C
例,
/*example3.6*/
#include <stdio.h>
main()
{ int x,y=7;
float z=4.0;
x=(y=y+6,y/z);
printf("x=%d\n",x);
}
运行结果,x=3
§ 4.1 C语句概述
C语言的语句是用来向计算机系统发出
操作指令的,一个 C语句经编译后产生
若干条机器指令。 C源程序文件一般包
含 首部 和 函数体 两部分,函数体 由 声明
部分 和 执行部分 (语句部分 ) 组成。其
中声明部分不是语句,如 int a,b;它
不产生操作代码。
第四章 最简单的 C程序设计
C语句分为以下 5类,
1、控制语句(如 if语句,while语句,for语句等 )
2、函数调用语句(如 printf(“y=%d”,y); )
3、表达式语句
a=3 是赋值表达式
a=3; 是赋值语句 (表达式后加 ;构成了语句 )
一个语句必须在最后出现 分号 。
分号是语句必不可少的一部分。
C语言中任何表达式都可以加分号成为语句。
i=i+1 i++ (表达式)
i=i+1; i++; (语句)
x+y;也是语句,但没有把 x+y的和赋给一个变量,
所以无实际意义。
4,空语句; 只有一个分号,什么也不做。
5、复合语句,也叫分程序。是用 { } 扩起来的。
{ a=a+b;
printf(“%d”,a);
}(一起执行,最后一行的分号不能省略 )
§ 4.2 赋值语句
C语言中的赋值号? =”是运算符
C语言中的赋值表达式 a=b;
If ((a=b)>0) t=a; if(a>0) t=a;
作用是:先将 b的值赋给 a,然后判断 a是否大于 0。
如果写成
If ((a=b;)>0) t=a;(错误 ) 条件中不能包含赋值语 句
作业,P66 3.9,3.10,3.12
1,C程序中是否一定包含注释,
注释的作用是什么?
答案:不一定,是方便阅读程序的。
2,每个程序至少包含一个什么函数?
答案:主函数 main
3,程序中 main函数可以含两个以上吗?
答案:不能,有且只能有一个。
4,一个函数的组成是什么样?
答案:由两部分组成即,
函数的首部 函数体
例如,int add(int x,int y)
{int z;
z=x+y;
return(z);
}
函数首部
函数体
5,函数体包含哪几部分?
答案:包括:声明部分 执行部分
例如,int add(int x,int y)
{int z;
z=x+y;
return(z);
}
声明部分
执行部分
7,语句的标记是什么?
答案:是结尾用分号即:, ;,
6、程序的执行次序是怎样的?
答案:从主函数 main开始执行,在主函
数结尾结束。中间可以调用其他函数
8,程序在机器上的执行过程?
答案:编辑、编译、连接、执行
9,什么叫算法?算法有什么特性?
答案:算法就是解决问题的步骤 ;
有穷性、确定性、可以有输入、至少一
个输出、有效性
10、表示算法的基本结构是哪三种?
答案:顺序结构、选择结构、循环结构
11、设计程序分哪几个步骤?
答案,
分析问题、设计算法、画流程图( N-S
图)、编制程序
第三章 数据类型、运
算符与表达式
预备知识
数据类型
常量与变量
变量赋初值
不同类型数据间的转换
预备知识
?字节和位
?内存以字节为单元组成
?每个字节有一个地址
?一个字节一般由 8个二进制位组成
?每个二进位的值是 0或 1
0 1 2 3 4 5 6 7
200
208
202
206
204
……...
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?数值的表示方法 ——原码、反码和补码
?原码:最高位为符号位,其余各位为数值本身
的绝对值
?反码,
?正数:反码与原码相同
?负数:符号位为 1,其余位对原码取反
?补码,
?正数:原码、反码、补码相同
?负数:最高位为 1,其余位为原码取反,再对
整个数加 1
例如,
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
X= +91 = +1011011,[X]原 =01011011
X= -91 = -1011011,[X]原 =11011011
X= +91 = +1011011,[X]反 =01011011
X= -91 = -1011011,[X]反 =10100100
补
补 1
求数 -88( 10) =-10110 0( 2) 的原码、反码和补码
原码 反码 补码
+7 00000111 00000111 00000111
-7 10000111 11111000 11111001
+0 00000000 00000000 00000000
-0 10000000 11111111 00000000
数的范围
01111111~
11111111
(-127~+127)
01111111~
10000000
(-127~+127)
01111111~
10000000
(-128~+127)
(用一字节表示数)
?负数补码转换成十进制数:最高位不动,其余位取反加 1
例 补码,11111001
取反,10000110
加 1,10000111=-7
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
例如:求补码为
11111011 的十进制
数
§ 3.1 数据类型
?数据类型总表
< >
C
数
据
类
型
基本类型
构造类型
指针类型
空类型 void
定义类型 typedef
字符类型 char
枚举类型 enum
整 型
实型
单精度型 float
双精度型 double
数组
结构体 struct
共用体 union
短整型 short
长整型 long
整型 int
数据类型决定,
1、数据的表示形式
2、数据占内存字节数
3、数据取值范围
4、其上可进行的操作
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?基本数据类型
< >
类型 符号 关键字 数的表示范围 所占位数
整
型
字
符
型
实
型
有
无
[signed]int 16 -32768~32767
[signed]short 16 -32768~32767
[signed]long 32 -2147483648~2147483647
16 unsigned int 0~65535
32 0~4294967295 unsigned long
unsigned short 16 0~65535
有 float 32 -3.4e-38~3.4e38
有 double 64 -1.7e-308~1.7e308
有 char 8 -128~127
无 unsigned char 8 0~255
说明,数据类型所占字节数随机器硬件不同而不同,
上表以 IBM PC机为例,
语
言
程
序
设
计
第
三
章
数
据
描
述
C
§ 3.2 常量与变量
?标识符
?定义:用来标识变量、常量、函数等的字符序列
?组成,
?只能由字母、数字、下划线组成,且第一个字母必须
是字母或下划线
?大小写敏感
?不能使用关键字
?长度:最长 32个字符
?建议,
?见名知意
?不宜混淆 如 l与 I,o与 0
例,判断下列标识符号合法性
sum Sum M.D.John day Date
3days
student_name #33 lotus_1_2_3
int a>b _above $123 < >
#33
$123
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?一般用大写字母
?是宏定义预处理命令,不是 C语句
?直接常量,
?整型常量
?实型常量
?字符常量
?字符串常量
如 #define PRICE 30
?常量
?定义:程序运行时其值不能改变的量(即常数)
?分类,
?符号常量,用标识符代表常量
?定义格式,#define 符号常量 常量
>
>
>
> < >
例 符号常量举例 (ch3_1.c)
#define PRICE 30
main()
{
int num,total;
num=10;
total=num*PRICE;
printf("total=%d",total);
}
运行结果,total=300
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?整型常量(整常数)
?三种形式,
?十进制整数:由数字 0~9和正负号表示,如
123,-456,0
?八进制整数:由数字 0开头,后跟数字 0~7表
示,如 0123,011
?十六进制整数:由 0x开头,后跟
0~9,a~f,A~F表示, 如 0x123,0Xff
< 例 12 与 12L 例 30000 为 int型
65536 为 long int 型
?整型常量的类型
?根据其值所在范围确定其数据类型
?在 整常量后加字母 l或 L,认为它是 long int
型常量
问题,
0123 = ( )10
0x123 = ( )10
0Xff = ( )10
83
291
255
问题:
10
10
10
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?实型常量(实数或浮点数)
?表示形式,
?十进制数形式:(必须有小数点) 如
0.123,.123,123.0,0.0,123,
?指数形式:( e或 E之前必须有数字;
指数必须为整数)如 12.3e3,123E2,
1.23e4,e-5,1.2E-3.5
<
?实型常量的类型
?默认 double型
?在 实型常量后加字母 f或 F,认为它是 float
型
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?字符常量
?定义,用 单引号 括起来的单个 普通字符 或 转义字符,
?字符常量的 值,该字符的 ASCII码 值
<
转义字符及其含义,
转义字符 含义
\n
\v
\r
\a
\?
\ddd
\t
\b
\f
\\
\,
\xhh
转义字符 含义
换行
垂直制表
回车
响铃
单引号
3位 8进制数代表的字符
水平制表
退格
换页
反斜线
双引号
2位 16进制数代表的字符
如 ‘ \101? -----------?A? ?\012? -----------?\n?
?\376? -----------??? ?\x61? -----------?a?
?\60? -----------?0? ?\483? ----------(?)
例,
?A?-------?\101?-------?\x41?--------65
<
如 ‘ A?——65,‘ a?——97,
‘ 0?——48,?\n?——10
如 ‘ a‘ ?A‘ ??‘ ?\n‘ ?\101‘
?转义字符,反斜线后面跟一个字符或一个代码值表示
例 转义字符举例,
main()
{
printf("\101 \x42 C\n");
printf("I say:\"How are you?\"\n");
printf("\\C Program\\\n");
printf("Turbo \'C\'");
}
运行结果,(屏幕显示 )
A B C
Isay:‖How are you?‖
\C Program\
Turbo ?C‘
例 main()
{ printf(“Y\b=\n”);
}
运行结果,
屏幕显示,=
打印机输出,¥
<
?字符常量与字符串常量不同
?字符串常量
?定义:用双引号 (―‖)括起来的字符序列
?存储,每个字符串尾 自动 加一个 ‘ \0’ 作为字
符串结束标志
h e l l o \0 例 字符串, hello”在内存中
a a \0 例 ‘ a?,a”
例 空串,” \0
例, char ch;
ch=“A”;
例
? ?;
语
言
程
序
设
计
第
三
章
数
据
描
述
C
编译程序根据变量定义为其
分配指定字节的内存单元 …...
地址
int a=1,b=-3,c;
a
b
c
2字节
2字节
2字节
地址
地址
…...
内存
1
-3
??
随机数
?变量
?概念:其值可以改变的量
?变量名 与 变量值
?变量定义的一般格式,
数据类型 变量 1[,变量 2,…,变量 n];
< >
?变量初始化,定义时赋初值 例,
int a,b,c;
float data;
决定分配字节数
和数的表示范围
合法标识符 例,
int a=2,b,c=4;
float data=3.67;
char ch=?A?;
int x=1,y=1,z=1;
int x=y=z=1;
?变量的使用,先定义,后使用
例 1
int student;
statent=19; //Undefined symbol ?statent‘ in function main
例 2
float a,b,c;
c=a%b; //Illegal use of floating point in function main
?变量定义位置,一般 放在函数开头
main()
{ int a,b=2;
float data;
a=1;
data=(a+b)*1.2;
printf(“data=%f\n”,data);
}
变量定义
可执行语句
main()
{ int a,b=2;
a=1;
float data;
data=(a+b)*1.2;
printf(“data=%f\n”,data);
}
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?整型变量
?占字节数随机器不同而不同,一般占一个机器字
?short≤int≤long
?可用 sizeof(类型标识符)测量 (如,sizeof(int))
?数值在内存中以补码表示
?整型数据的溢出
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
例,//example3.3
main()
{int a,b;
a=32767;
b=a+1;
printf(“%d,%d”,a,b);
}
01111111111111111
10000000000000000
运行结果,
32767,-32768
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?实型变量
?float,占 4字节,提供 7位有效数字
?double,占 8字节,提供 15~16位有效数字
例 float a;
a=111111.111; /* a=111111.1*/
double b;
b=111111.111; /* b=111111.111*/
?实型数据在内存中按照指数形式存储
+,31459 1
数符 小数部分 指数
?实型数据的舍入误差
例,//example3.4
main()
{float a,b;
a=123456.789e5;
b=a+20;
printf(“%f,%f”,a,b);
}
运行结果,
12345678848.000000,12345678848.000000
a的值是
12345678900
b的理论值应是
12345678920
实型变量只能保证 7位有效
数字,后面的数字是无意
义的,并不准确地表示该
数
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?字符型变量
?字符变量存放字符常量(字符以 ASCII码 存储)
?char与 int数据间可进行算术运算
例,main()
{ char a;
int x,s;
a=?D?;
x=?A?+5; /* x=65+5; */
s=?!?+?G? /* s=33+71; */
printf(“%c,%c,%d”,a,x,s);
}
没有 字符串变量,用字符数组存放
运行结果,
D,F,104
< >
例 /*example3.5*/
#define PRICE 12.5
main()
{ int num=3;
float total;
char ch1,ch2=?D?;
total=num*PRICE;
ch1=ch2-?A?+?a?;
printf(“total=%f,ch1=%c\n”,total,ch1);
}
宏定义
变量定义
输出结果
运行结果,
total=37.500000,ch1=d
语
言
程
序
设
计
第
三
章
数
据
描
述
C
语
言
程
序
设
计
第
三
章
数
据
描
述
C
§ 3.3 变量赋初值
C语言允许在定义变量的同进使变量初
始化。
例,int a=3;
float f=3.56;
char c=?a‘;
int a,b,c=5;
int a; a=3;
float f; f=3.56;
Char c; c=‘a’;
Char c; c=‘a’;
§ 3.4不同类型数据间的转换
?隐式转换
?什么情况下发生
?运算转换 ------不同类型数据混合运算时
?赋值转换 ------把一个值赋给与其类型不同的
变量时
?输出转换 ------输出时转换成指定的输出格式
?函数调用转换 ------实参与形参类型不一致时
转换
?运算转换规则,不同类型数据运算时先 自动
转换成同一类型
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
double float
long
unsigned
int char,short 低
高 说明,
必定的转换
运算对象类型不同时转换
例 char ch;
int i;
float f;
double d;
ch/i + f*d - (f+i)
int
int
double
double
double
double
double
double < >
?显式转换(强制转换)
?一般形式,( 类型名 ) ( 表达式)
例 (int)(x+y)
(int)x+y
(double)(3/2)
(int)3.6
?说明:强制转换得到所需类型的中间变量,原变
量类型不变 例 main()
{ float x;
int i;
x=3.6;
i=(int)x;
printf(“x=%f,i=%d”,x,i);
}
结果,x=3.600000,i=3
精度损失问题
较高类型向较低类型转换时可能发生
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
思考或问答题,
1,数据类型决定什么?
2、整型变量、字符型变量和单精度变量在内存中各占几个字节?
3、标识符的允许使用哪些符号? 4、符号常量是怎样定义的?
5、字符型常量是怎样定义的? 6、什么叫转义字符?
7、字符串常量与字符常量有什么区别?
8、整型变量与字符型变量可以通用?
9、定义变量时是否可以赋初值?
11、变量不定义可以直接使用吗?例如
main()
{ int a=23,b=12;
c=a+b;
printf(―c=%d‖,c);
}
10、不同类型数据之间的转换规则是如何规定的?
作业,65页 3.3,3.6,3.8
实验二 C语言程序初步 (写实验报告 )
,C语言程序设计方法,167页
实验内容,程序 (一 ) 功能,输出两个数的最大值。
参考程序,
#include <stdio.h>
main()
{ int m,n;
m=2;
n=3;
if(m<n) printf("%d",n);
else printf("%d",m);
}
程序 (二 ) 书中程序
四、问题
0.修改程序一, 要求求任意两个数的最大值 。
1 ~3 书上内容
实验报告的书写要求,
1、封面项目要填全。( 实验台号填机器编号、日期填实验时间)
2、实验仪器及器材:微机,DOS,TC
3、实验目的:填写题目中 [实验目的 ]
4、实验内容:填写题目中的 [实验内容 ],同时如果是程序
要写上程序清单及 N-S流程图。
5、实验数据:填写
1)检测数据。
2)程序编译及连接过程的反馈信息。
3)输出结果。
5、结果讨论:填写题目中 [问题 ]解答。
小结,
1、计算机内存的存储单位是字节,一个字节是 8
位二进制数,每个字节有一个地址。
2、数据是以补码存在内存中的。
正数:原码、补码相同
负数:最高位为 1,其余位为原码取反,再对整
个数加 1 1)数据的表示形式
2) 数据占内存字节数
3、数据类型决定,3) 数据取值范围
4) 可进行的操作
4、字符型变量在内存中占一个字节( 8位)。
5、整型变量在内存中占二个字节( 16位)。
6、单精度实型变量在内存中占四个字节( 32位)
。
7、标识符的使用规则:只能使用字母、数
字、下划线,且第一个字符不能是数字。
8、符号常量用来代表一个常量,必须用宏
定义( #define),一般符号常量用大写标
识符。
9、整型变量与字符型变量可以通用。
10、字符型常量使用单引号引起来的一个字
符,注意转义字符的使用。
11、注意字符串常量与字符常量的区别。
12、定义变量时可以赋初值。
13、注意不同类型数据之间的转换规则。
结合实验情况对前面的内容归纳下,
1、算法与 C程序的关系。
设计并执行一个 C程序的过程如下,
分
析
问
题
写
出
算
法
(N-S图 )
编
写
源
程
序
编
译
源
程
序
连接
目标
程序
及函
数
执行
.exe
文件
例如:编写一个交换整型变量 A和 B值的程序。
分析:假设 A和 B是两个装有不同液体的杯子,要
想使杯子 A和杯子 B内容互换必须借助第三个杯
子 C,首先把 A到入 C,再把 B到入 A,最后把 C到入
B.如图,
A B C
1
2 3
N-S图 C源程序
A C
B A
C B
main()
{ int a,b,c ;
scanf(“%d,%d”,&a,&b);
c=a; a=b ; b=c;
printf(“a=%d,b=%d”,a,b) ;
}
例如:输入
5,9
输出
a=9,b=5
2,C源程序结构
一个 C源程序由函数构成,程序中至少含有一个主
函数 main,也可以包含一个 main函数和若干其
他函数,所有函数之间是并列关系。
C函数的一般形式,
函数类型 函数名 (函数形式参数 )
{
声明部分
执行部分
}
函数体
函数首部
例如:求 a,b,c三个实数中最大数。
main()
{
float max(float x,float y,float z);
float a,b,c,d;
scanf(―%f,%f,%f‖,&a,&b,&c);
d=max(a,b,c);
printf(―max=%f ‖,d);
}
float max(float x,float y,float z)
{
float w;
if (x>y) w=x; else w=y;
if (w<z) w=z;
return(w);
}
声明部分,
执行部分
声明部分,定义实型变量 w
执行部分
主函数首部
max函数首部
3,C语言常量类型有
1)整型常量 例如,-225,013,0x3f
2)实型常量 例如,3.14,2.7e+20
3)字符型常量 例如,‘ a?,?C?,? n?
4)字符串常量 例如:, a”,”yes”
5)符号常量 用预定义命令定义。
4,C语言主要
变量类型有
1)整型变量 用 int 或 long 定义 例如 int a;
以补码形式存在内存中
2) 字符型 变 量 用 char 定义 例如 char ch ;
以补码形式存在内存中
3)实型 变 量 用 float 或 double 定义 例如 float x ;
以指数形式存在内存中
第三章 数据类型,运算符与表达式
C运算符简介
算术运算符和算术表达式
赋值运算符和赋值表达式
逗号运算赋和逗号表达式
C语句概述
赋值语句
第三章
第四章
C语言 运算符
算术运算符:( + - * / % ++ --)
关系运算符:( < <= == > >= !=)
逻辑运算符:(! && ||)
位运算符,( << >> ~ | ^ &)
赋值运算符:( = 及其扩展)
条件运算符:(?:)
逗号运算符:(,)
指针运算符:( * &)
求字节数,( sizeof)
强制类型转换:(类型)
分量运算符:(, ->)
下标运算符:( [])
其它,( ( ) -)
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?学习运算符应注意,
?运算符功能
?与运算量关系
?要求运算量个数 有双目运算、单目运算、三目运算
?要求运算量类型
?运算符优先级别 在一个表达式中按优先级次序运算
?结合方向 优先级相同时按结合方向运算
?结果的类型
< >
语
言
程
序
设
计
第
三
章
数
据
描
述
C
§ 3.8 算术运算符和算术表达式
?基本算术运算符,+,-,*,/,%
?结合方向:从左向右 取负 – 是右结合
?优先级,- ---->*,/,% -----> +,-
(2) (3) (4)
说明,
?? -? 可为 单目 运算符时,为负号运算符,右结合性
?两整数相除 (/),结果为整数
?参加 +,-,*,/运算的两个数中有一个为实数,则结果是 double
型,因为所有的实数都按 double型进行运算。
?%要求两侧均为整型数据
例 5/2 =
-5/2.0 =
例 5%2 =
-5%2 =
1%10 =
5%1 =
5.5%2 < >
例 5/2 2
-5/2.0 = -2.5
例 1
-1
1
0
(?)
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?自增、自减运算符 ++ --
?作用:使变量值加 1或减 1
?种类,
?前置 ++i,--i (先执行 i=i+1或 i=i-1,再使用 i值)
?后置 i++,i-- (先使用 i值,再执行 i=i+1或 i=i-1)
例 j=3; k=++j;
j=3; k=j++;
j=3; printf(“%d”,++j);
j=3; printf(“%d”,j++);
a=3;b=5;c=(++a)*b;
a=3;b=5;c=(a++)*b;
< >
//k=4,j=4
//k=3,j=4
//4
//3
//c=20,a=4
//c=15,a=4
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?自增、自减运算符 ++ --
?作用:使变量值加 1或减 1
?种类,
?前置 ++i,--i (先执行 i+1或 i-1,再使用 i值)
?后置 i++,i-- (先使用 i值,再执行 i+1或 i-1)
?说明,
?++ -- 不能用于常量和表达式,如 5++,(a+b)++
?++ --结合方向,自右向左
?优先级,- ++ -- ------>* / % ----->+ -
(2) (3) (4)
例 -i++ ? -(i++)
i=3; printf(“%d”,-i++); //-3 例 j+++k; (j++)+k; 例 -i++ i=3; printf(“%d”,-i++);
语
言
程
序
设
计
第
三
章
数
据
描
述
C
尽可能多地 (从左至右 )将若干字符组成一个
运算符
§ 3.9 赋值运算符和表达式
?简单赋值运算符
?符号,=
?格式,变量标识符 =表达式
?作用:将一个数据(常量或表达式)赋给一个变量
?复合赋值运算符
?种类, += -= *= /= %=, =, = &= ^= |=
?含义,exp1 op= exp2 ? exp1 = exp1 op exp2
a+=3 a=a+3
x*=y+8 x=x*(y+8)
x%=3 x=x%3
< >
例 a=3;
d=func();
c=d+2;
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?说明,
?结合方向,自右向左
?优先级, 14
?左侧必须是变量,不能是常量或表达式
?赋值表达式的值与变量值相等,且可嵌套
?赋值转换 规则,使赋值号右边表达式值 自动 转换成其左边
变量的类型
例 3=x-2*y;
a+b=3;
例 float f;
int i;
i=10;
f=i;
则 f=10.0
例 int i;
i=2.56; //结果 i=2;
例, a=b=c=5
a=(b=5)
a=5+(c=6)
a=(b=4)+(c=6)
a=(b=10)/(c=2)
< >
//表达式值为 5,a,b,c值为 5
// b=5;a=5
//表达式值 11,c=6,a=11
//表达式值 10,a=10,b=4,c=6
//表达式值 5,a=5,b=10,c=2
语
言
程
序
设
计
第
三
章
数
据
描
述
C
>
?说明,
?结合方向,自右向左
?优先级, 14
?左侧必须是变量,不能是常量或表达式
?赋值表达式的值与变量值相等,且可嵌套
?赋值转换 规则,使赋值号右边表达式值 自动 转换成其左边
变量的类型
例, a=12;
a+=a-=a*a
例, int a=2;
a+=a*=a-=a*=3;
< >
//a=-264 等价于 a=a+(a=a-(a*a))
//a=0 等价于 a=a+(a=a*(a=a-(a=a*3)))
语
言
程
序
设
计
第
三
章
数
据
描
述
C
语
言
程
序
设
计
第
三
章
数
据
描
述
C
?int <= float,bouble 规则:舍弃小数部分,内
存中以整数存储。
例,int i; i=3.56; //结果,i=3 ?float,double<= int 规则:先将整型数据转换成浮点型数据或双精度数据,然后以
float,double形式存储到变量中。
例,float i;bouble h;
int a=23; i=a; h=a;
//结果,i=23.000000 h=2.300000e+01
?float<=bouble 规则:截取其前面 7位有
效数字,存放到 float变量的存储单元中。注意
数值范围不能溢出。
例,float i;double c=123456789;i=c;
printf(“%f”,i);
//结果,i=123456792.000000
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?int <= char 规则:将字符数据 (8位 )放到整
型变量低 8位中。若字符最高位为 0,则整型变
量高 8位补 0;若字符最高位为 1,则高 8位全补
1。
例,int a;char ch=?\376?;a=ch;/*▊ */
printf(“%d”,a);
//结果,a=-2
?char<=int,short,long 规则:将其低 8位原
封不动地送到 char型变量。
例,int i=289;char c=?a?;c=i;
00000001 00100001
00100001
i=289
c=33
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?Int<=long 规则:将 long型数据中低 16位
原封不动地送到整型变量。
例,int a;long b=8;a=b;
0 000000000000000 0000000000001000
0 000000000001000
b=8
a=8
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?非 unsigned<=unsigned 规则:要求两者占的
字节数相同。将 unsigned型变量原样送到非
unsigned型变量中,但如果数据范围超过相应
整型的范围,则会出现数据错误。
例,unsigned int a=65535;int b; b=a;
1 111111111111111
a
b
1111111111111111
结果,b=-1
语
言
程
序
设
计
第
三
章
数
据
描
述
C ?unsigned<=非 unsigned 规则:要求两者占的
字节数相同。将 unsigned型变量原样送到非
unsigned型变量中,原有的符号位也作为数值
一起传送。
例,unsigned a;int b=-1;
a=b;printf(“%u”,a);
1 111111111111111 a
b 1111111111111111 结果,a=65535
<幻灯片 28
§ 3.10 逗号运算符和逗号表达式
?形式,表达式 1,表达式 2,……,表达式 n
?结合性,从左向右
?优先级, 15
?逗号表达式 的值:等于表达式 n的值
?用途,常用于循环 for语句中
例 a=3*5,a*4
a=3*5,a*4,a+5
例 x=(a=3,6*3)
x=a=3,6*a
例 a=1;b=2;c=3;
printf(“%d,%d,%d”,a,b,c);
printf(“%d,%d,%d”,(a,b,c),b,c);
< >
//a=15,表达式值 60
//a=15,表达式值 20
//赋值表达式,表达式值 18,x=18
//逗号表达式,表达式值 18,x=3
//1,2,3
//3,2,3
语
言
程
序
设
计
第
三
章
数
据
描
述
C
例,
/*example3.6*/
#include <stdio.h>
main()
{ int x,y=7;
float z=4.0;
x=(y=y+6,y/z);
printf("x=%d\n",x);
}
运行结果,x=3
§ 4.1 C语句概述
C语言的语句是用来向计算机系统发出
操作指令的,一个 C语句经编译后产生
若干条机器指令。 C源程序文件一般包
含 首部 和 函数体 两部分,函数体 由 声明
部分 和 执行部分 (语句部分 ) 组成。其
中声明部分不是语句,如 int a,b;它
不产生操作代码。
第四章 最简单的 C程序设计
C语句分为以下 5类,
1、控制语句(如 if语句,while语句,for语句等 )
2、函数调用语句(如 printf(“y=%d”,y); )
3、表达式语句
a=3 是赋值表达式
a=3; 是赋值语句 (表达式后加 ;构成了语句 )
一个语句必须在最后出现 分号 。
分号是语句必不可少的一部分。
C语言中任何表达式都可以加分号成为语句。
i=i+1 i++ (表达式)
i=i+1; i++; (语句)
x+y;也是语句,但没有把 x+y的和赋给一个变量,
所以无实际意义。
4,空语句; 只有一个分号,什么也不做。
5、复合语句,也叫分程序。是用 { } 扩起来的。
{ a=a+b;
printf(“%d”,a);
}(一起执行,最后一行的分号不能省略 )
§ 4.2 赋值语句
C语言中的赋值号? =”是运算符
C语言中的赋值表达式 a=b;
If ((a=b)>0) t=a; if(a>0) t=a;
作用是:先将 b的值赋给 a,然后判断 a是否大于 0。
如果写成
If ((a=b;)>0) t=a;(错误 ) 条件中不能包含赋值语 句
作业,P66 3.9,3.10,3.12