Anda di halaman 1dari 25

C



第二讲 数据描述


设 预备知识

数据类型
常量与变量
不同类型数据间的转换



讲 < >

C





计 § 2.0 预备知识
计算机中数的表示及进制转换
数码、基与权
数码:表示数的符号
基:数码的个数
权:每一位所具有的值



讲 < >

C


程 数制 十进制数 二进制数 八进制数 十六进制数

设 数码 0~9 0~1 0~7 0~9,A~F,a~f

基 10 2 8 16

权 10º , 10¹ , 10² ,…


2º , 2¹ , 2² ,… 8º , 8¹ , 8² ,… 16º , 16¹ , 16² ,…

表示 十六进制:
二进制:
十进制: 4275=4×8³+2×8²
81AE=8×16³+1×16²
八进制: 1011=1×2³+0×2²
4956= +7×8¹+5×8º
4×10³+9×10² +10×16¹+14×16º
+1×2¹+1×2º
+5×10¹+6×10º

特点 逢十进一 逢二进一 逢八进一 逢十六进一



讲 < >

C


各种进制之间的转换
程 二进制、八进制、十六进制转换成十进制
序 方法:按权相加

例 (111011)2 = 1 × 2 5 + 1 × 2 4 + 1 × 2 3 + 0 × 2 2 + 1 × 21 + 1 × 2 0 =(59)
10

例 (136)8 = 1 × 8 2 + 3 × 81 + 6 × 8 0 =(94)
10

例 (1F 2 A)
16 = 1 × 16 3
+ 15 × 16 2
+ 2 × 16 1
+ 10 × 16 0
=(7978)
10



讲 < >

C 各种进制之间的转换 ( 整数 )
语 二进制、八进制、十六进制转换成十进制


方法:按权相加
序 十进制转换成二进制、八进制、十六进制


方法:连续除以基,从低到高记录余数,直至商为 0

例 把十进制数
例 把十进制数 59 转换成二进制数
159 转换成八进制数
例 把十进制数 459 转换成十六进制数
2 598 159 余余1 7
16
2 29 8459
19 余余余 111 3
16
2 14 8 2 余余余
28 120 2
2 71 0 余余11
16 2 3 7
2 03 余1 1 C B
2 1 (159)余 10=(237)8
1
(459)
0 10=(1CB)16 1 1 1 0 1 1


讲 < > (59)10=(111011)2

C
语 二进制与八进制之间的转换

二进制转换成八进制:从右向左,每 3 位一组(不足 3 位

序 左补 0 ),转换成八进制
设 八进制转换成二进制:用 3 位二进制数代替每一位八进制
计 数
000 ~ 0
001 ~ 1
例 (1101001)2=(001,101,001)2=(151)8 010 ~ 2
011 ~ 3
100 ~ 4
例 (426)8=(100,010,110)2=(100010110)2 101 ~ 5
110 ~ 6
111 ~ 7



讲 < >

C 二进制与十六进制之间的转换
语 二进制转换成十六进制:从右向左,每 4 位一组 0000 ~ 0
言 (不足 4 位左补 0 ),转换成十六进制 0001 ~ 1

十六进制转换成二进制:用 4 位二进制数代替每一 0010 ~ 2

设 位十六进制数 0011 ~ 3
计 0100 ~ 4
0101 ~ 5
例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16 0110 ~ 6
0111 ~ 7
1000 ~ 8
1001 ~ 9
例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2 1010 ~ A
1011 ~ B
1100 ~ C
1101 ~ D
1110 ~ E
1111 ~ F


讲 < >

C

言 字节和位 0


字节是计算机中存取数据的基本单位 1
2
设 每个字节有一个地址 3

一个字节一般由 8 个二进制位组成 4
5
每个二进位的值是 0 或 1 6
7
8
9
7 6 5 4 3 2 1 0 10

……...


讲 < >

C


程 数值的表示方法——原码、反码和补码

设 原码:最高位为符号位,其余各位为数值本身的绝对值
计 反码:
正数:反码与原码相同
负数:符号位为 1 ,其余位对原码取反
补码:
正数:原码、反码、补码相同
负数:最高位为 1 ,其余位为原码取反,再对整个数加 1
负数补码转换成十进制数:最高位不动,其余位取反加 1

对于负机器数, 例 补码: 11111001


有 [X] 原 =[[X] 补 ] 补 取反: 10000110
第 加 1 : 10000111=-7

讲 < >

短整型 short
C

§ 2.1 数据类型
整 型 整型 int
言 数据类型总表
程 长整型 long

设 基本类型 单精度型 float
计 实型
双精度型 double
字符类型 char
数组 数据类型决定:
1. 数据占内存字节数
C 结构体 struct

2. 数据取值范围
构造类型 共用体 union 3. 在其上可进行的操作

类 枚举类型 enum

指针类型
空类型 void


讲 < > 定义类型 typedef

C 基本数据类型

言 类型 符号 关键 所占位数 数的表示范围
程 字
序 (signed)int 16 -32768~32767
设 有 16
(signed)short -32768~32767

(signed)long 32 -2147483648~2147483647

型 unsigned 16 0~65535
无 int
unsigned short 16 0~65535
unsigned long 32 0~4294967295
有 float 32 -3.4e38~3.4e38

型 有 double 64 -1.7e308~1.7e308
字 有 char 8 -128~127
符 无
型 unsigned char 8 0~255
说明 : 数据类型所占字节数随机器硬件不同而不同 , 上表以 IBM PC 机为例 :


讲 < >

C§ 2.2 常量与变量

言 标识符


定义:用来标识变量、常量、函数等的字符序列
设 组成:

只能由字母、数字、下划线组成,且第一个字符必须是字母或
下划线
大小写敏感
不能使用关键字
长度:最长 32 个字符
命名原则:
例 : 判断下列标识符号合法性
见名知意
sum Sum M.D.John
M.D.John day Date 3days
不宜混淆 如 l 与 I, o 与 0
#33
student_name
char a>b #33 $123
lotus_1_2_3
第 char a>b _above $123

讲 < >

C
语 常量

程 定义:程序运行时其值不能改变的量(即常数)

设 分类 :
计 符号常量 : 用标识符代表常量
定义格式: #define 符号常量 常量
一般用大写字母 例 符号常量举例
#define PRICEC 语句
如是宏定义预处理命令,不是
 30
直接常量 : #define PRICE 30
整型常量 > main() 运行结果: total=300
实型常量 > {
字符常量 > int num,total;
字符串常量 > num=10;
total=num*PRICE;
第 printf("total=%d",total);

讲 < > }

C

言 整型常量(整常数)

序 三种形式:

十进制整数:由数字 0~9 和正负号表示 . 如 123,-456,0

八进制整数:由数字 0 开头 , 后跟数字 0~7 表示 . 如
0123,011
整型常量的 类型 0x 开头 , 后跟 0~9,a~f,A~F 表示 .
十六进制整数:由
问题:
问题:
根据其值所在范围确定其数据类型
0123 =如( 0x123,0Xff
0123
在整常量后加字母 = ( l83或 L)),认为它是
10
10 long int 型常量
0x123
0x123 == (( 291 ))1010
例0Xff
30000== ((为 int 型 ))1010
0Xff
例 12 与 12L 255
65536 为 long int 型



讲 <

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 字符常量

言 定义 : 用单引号括起来的单个普通字符或转义字符 .
如 ‘ a’ ‘A’ ‘?’ ASCII


字符常量的值:该字符的 ‘\n’ ‘\101’
码值
设 转义字符 : 反斜线后面跟一个字符或一个代码值表示
计 如 ‘ A’——65 , ‘ a’——97 ,
例 转义字符举例 ‘0’——48 , ‘\n’——10
转义字符及其含义:
main()
如 ‘ :
例\101’ -----------‘A’转义字符 ‘\012’ -----------’\n’
转义字符 含义 含义
{ ‘A’-------’\101’-------’\x41’--------65
‘\376’ -----------’’ ‘\x61’ -----------’a’ 屏幕显示 )
运行结果: (
\n printf("\101 换行C\n"); \t ABC 水平制表
\x42
‘\60’ -----------’0’ ‘\483’ ----------(×)
Isay:”How are you?”
\v printf("I say:\"How are you?\"\n"); \C Program\ 退格
垂直制表 \b
\r
printf("\\C Program\\\n");
回车 \f Turbo ‘C’ 换页
printf("Turbo \'C\'");
}\a 响铃 \\ 反斜线
Ch2_1.c
\' 单引号 \" 双引号
例 main() 运行结果:
第 \ddd 1 - 3 位 8 进制数代表的字符 \xhh 1 - 2 位 16 进制数代表的字符
二 { printf(“Y\b=\n”); 屏幕显示: =
讲 < } 打印机输出: ¥

C 字符串常量

言 定义:用双引号 (“”) 括起来的字符序列
程 存储:每个字符串尾自动加一个 ‘ \0’ 作为字

设 符串结束标志

例 字符串“ hello” 在内存中 h e l l o \0

例 空串 “” \0

字符常量与字符串常量不同

例 ‘ a’ a “a” a \0

例: char ch;
第 ch=“A”;
ch=‘A’;

讲 <

C 变量


概念:其值可以改变的量
程 变量名与变量值

设 变量定义的一般格式:
计 数据类型 变量 1[ ,变量 2 ,…,变量 n];
变量初始化 : 定义时赋初值
例: int a=1, b=-3,c;
决定分配字节数
变量的使用:先定义,后使用 int a,b,c;
合法标识符 例 :

…...
和数的表示范围
变量定义位置:一般放在函数开头 float data;
地址 int a=2,b,c=4;
main()
main() a float
1 data=3.67;
2 字节
例1
例2 { int
{ a,b=2;
int a,b=2; 地址 char ch=‘A’;
int student;
float a,b,c;
float data;
a=1; 变量定义b int -3
x=1,y=1,z=1;
2 字节
stadent=19; //Undefined symbol ‘statent’ in function main
c=a%b; a=1;//Illegal use of floating int x=y=z=1;(×)
point in function main
float data; 地址 可执行语句
data=(a+b)*1.2; c
data=(a+b)*1.2;
编译程序根据变量定义为其
×× 2 字节

二 printf(“data=%f\n”,data);
printf(“data=%f\n”,data);
分配指定字节的内存单元
…...
讲 < > 随机数
数 } } 内存
C
语 整型变量
言 占字节数随机器不同而不同 .

序 short≤int≤long
设 可用 sizeof( 类型标识符)测量

实型变量
float :占 4 字节,提供 7 位有效数字
double :占 8 字节,提供 15~16 位有效数字
例 float a;
字符型变量
a=111111.111; /* a=111111.1*/
字符变量用来存放一个字符常量,存放其 ASCII 码值
double b;
char 与 int 数据间可进行算术运算
b=111111.111; /* b=111111.111*/
例 a=‘D’; /* a=68; */
第 没有字符串变量,用字符数组存放
x=‘A’+5; /* x=65+5; */

讲 s=‘!’+‘G’ /* s=33+71; */

< >
C
语 字符数据与整型数据可以相互赋值


序 i ASCII值为97 ch ASCII值为98

计 0 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0
#include”stdio.h”
main()
{int i=‘a’;
Ch2_2.c

char ch=98;
printf(“%c,%d\n”,i,i);
printf(“%c,%d\n”,ch,ch);

}
二 运行结果: a,97
讲 < >
数 b,98
C
语 例 : #include"stdio.h"
言 #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 Ch2_3.c




C



§ 2.3 不同类型数据间的转换
序 隐式转换

计 什么情况下发生
运算转换 ------ 不同类型数据混合运算时
赋值转换 ------ 把一个值赋给与其类型不同的变量

输出转换 ------ 输出时转换成指定的输出格式
函数调用转换 ------ 实参与形参类型不一致时转换
运算转换规则 : 不同类型数据运算时先自动转
换成同一类型



讲 < >

C double float 说明 :



程 必定的转换
long

设 运算对象类型不同时转换

unsigned
例 int i;
int char,short float f;
低 double d;
long l;

10+‘a’ +i*f - d/l


例 char ch; ch/i + f*d - (f+i)
int i; int double double int double double
float f;
int double double int double double
double d;
第 double
double

讲 < > double
double

C 显式转换(强制转换)


一般形式:(类型名)(表达式)
程 例 (int)(x+y)

设 (int)x+y
计 (double)(3/2)
(int)3.6
说明:强制转换得到所需类型的中间变量,原
例变量类型不变
#include“stdio.h”
main() 精度损失问题
{ float x;
int i; 较高类型向较低类
x=3.6; 型转换时可能发生
i=(int)x;
第 printf(“x=%f,i=%d”,x,i);
Ch2_4.c

二 }

数 结果: x=3.600000,i=3
作业 与上机
C
语 1. 编写一程序,将一个大写字母转换成小写字母。

程 2. 写出下面程序的运行结果。

设 main()

{char c1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%cb%c\tc%c\tabc\n",c1,c2,c3);
printf("\t\b%c%c\n",c4,c5);}
3. 求下面算术表达式的值。
(1)x+a%3*(int)(x+y)%2/4

设 x=2.5,a=7,y=4.7
二 (2)(float)(a+b)/2+(int)x%(int)y

数 设 a=2,b=3,x=3.5,y=2.5

Anda mungkin juga menyukai