第二章 数据类型、运算符和表达式

 2.1 引例

【例2.2】 设球半径为r、体积为v、表面积为f,输入半径r分别计算球体积和球表面积。

#include<stdio.h>
#define PI 3.14159
void main()
{
	int r;
	float v, f;
	r = 2;
	v = 4.0 * PI * r * r * r / 3.0;
	f = 4.0 * PI * r * r;
	printf("体积为:%f,表面积为:%f\n", v, f);
}

2.2 C语言的数据类型

                                    ···整型
               ···基本类型 ···字符型
                                    ···实型
                                  ···数组类型
数据类型···构造类型···结构体类型
                                 ···共用体类型
                                  ···枚举类型
               ···指针类型
               ···空类型

2.3 C语言的常量

2.3.1 直接常量

1.整型常量


十进制表示 : 0~9, 正、负号和零;
八进制表示:以0为前缀后接0~7,无符号;
十六进制表示:以0x或0X为前缀,后接0~9和字母A~F(字母大小写均可),无符号,后加u或U认为是unsingned型,l或L认为是long int型;

2.实型常量


(1)小数形式:最前后零可以不写,但小数点一定要写; - .123和12.345 均正确
(2)指数形式:由尾数部分、字母E或e和指数部分组成:±尾数E指数 如1.23E-2表示1.23×10 ^ -2, 3.14E+3表示3.14×10 ^ 3;
C语言中实型常量默认为double 型,如果后加字母f或F则是float 型;如:1.65f,654.87F;

3.字符型常量


''定义字符,""定义字符串;
字符常量只能用单引号括起来,字符常量只能是单个字符不能是字符串;可以是ASCII码中任意字符,但不同字符之间存在着次序差异(这按ASCII码来,小写字母>大写字母>数字字符);
每个字符在内存中占一个字节用于储存ASCII码;C语言中字符常量可以像整数一样参加运算'4'和4是不同的'4'的ASCII码是52
转义字符:\0  空字符(表示结束,\0之后内容都不显示);\b退格;\n回车;\n\分行连续(顶格写);\ddd(1~3位八进制所代表的字符);\xhh(1~2位十六进制所代表的字符);

转义字符:

转义字符转义功能ASCII码值
\0空字符0
\a响铃7
\b退格(Backspace)8
\t水平制表符(即横向跳格)9
\n回车换行(Enter)10
\v竖向跳格11
\f换页12
\r回车13
\"双引号(")34
\'单引号(')39
\?问号(?)63
\\反斜线字符(\)92
\ddd1~3位八进制所代表的字符
\xhh1~2位十六进制所表达的字符

例2.3】转义字符使用示例。

#include<stdio.h>
int main()
{
	char b, c, d, e;
	b = '\43';
	c = '\103';
	d = '\x2a';
	e = '\x41';
	printf("b=%c,c=%c,d=%c,e=%c\n", b, c, d, e);
	printf("\"good\40morning!\b\"!\n");
	printf("\123456");
	return 0;
}

4.字符串常量

"6"相当于6\0 占两个字节

 2.3.2 符号常量


#define 标识符 常量值(定义)如:#define xp 3.145

【例2.5】利用符号常量计算价格

#include<stdio.h>
#define PRICE 20
int main()
{
	int num, total;
	num = 10;
	total = num * PRICE;
	printf("总价格为:%d\n,total");
	return 0;
}


 

2.4 C语言的变量 

2.4.1 变量的定义与使用

1定义变量


int r; /*定义r为整型*/  

float v,f;   /*定义v、f位单精度浮点型*/    
double x,y; /*定义x、y为双精度浮点型*/  

 char ch; /*定义ch为字符型*/

2.变量的初始化


int x=2; /*定义一个整型变量x并赋初值2*/    

int s=1,t=1; /*定义两个整型变量s和t,并分别赋初值1*/
float f=3.68; /*定义一个单精度型变量f并赋初值3.68*/      

char ch='x';  /*定义一个字符型变量ch并赋初值字符x*/
“int x=y=3;”是不规范的,应该使=左边的数据(类型)和右边的变量(类型)一致

3.变量的使用


【2.6】变量使用示例

#include<stdio.h>
int main()
{
	int a, b, c;
	char ch = 'A';
	a = 10;
	b = a + ch;
	scanf_s("%d", &c);
	printf("%d,&d,%d,%c\n", a, b, c, ch);
	return 0;
}

2.4.2 整型变量

整型数据关键字、字节数和取值范围
关键字类型占用字节取值范围
short int短整型2-32768~32767(-2^15~2^15 -1)
int

整型

4-2147483648~2147483647(-2^31 ~2^31 -1)
long int长整型4-2147483648~2147483647(-2^31 ~2^31 -1)
unsigned short无符号短整型20~65535(0~2^16 -1)
unsigned int

无符号整型

40~4294967295(0~2^32 -1)
unsigned long无符号40~429467295(0~2^32 -1)

超过范围的话会溢出(也就是会产生错误的结果)

【例2.7】不同类型整型变量的定义与使用示例

#include<stdio.h>
int main()
{
	int a, b, c, d;
	unsigned long e;
	a = 5; b = 6; e = 10;
	c = a + e;
	d = b + e;
	printf("c=%d,d=%d\n", c, d);
	return 0;
}

【例2.8】短整型变量的溢出

#include<stdio.h>
int main()
{
	short int a, b;
	a = 32767;
	b = a + 1;
	printf("a=%d,b=%d\n", a, b);
	return 0;
}

2.4.3 实型变量

实型数据关键字、字节数和取值范围
关键字类型占用字节数取值范围
float单精度型43.4E-38~3.4E+38
double双精度型83.7E-308~1.7E+308

单精度型数据能保留7位有效数字,双精度型数据能保留16位有效数字;
*二者小数点后只保留六位数,超过后会四舍五入*
【例2.9】 实型变量的使用示例

#include<stdio.h>
int main()
{
	float a = 1234.56789;
	double b = 1234.567895678;
	printf("a=%f,b=%f\n", a, b);
	return 0;
}

 2.4.4 字符型变量

【2.10】 字符变量的使用示例

#include<stdio.h>
int main()
{
	char c1, c2;
	c1 = 'A';
	c2 = 65;
	printf("%c,%c\n", c1, c2);
	printf("%d,%d\n", c1, c2);
	return 0;
}

【例2.11】 把大写字母转换为小写字母。

#include<stdio.h>
int main()
{
	char c1, c2;
	c1 = 'A';
	c2 = 'B';
	c1 = c1 + 32;
	c2 = c2 + 32;
	printf("%c,%c\n", c1, c2);
	printf("%d,%d\n", c1, c2);
	return 0;
}

2.5 运算符和表达式

2.5.1 赋值运算符和赋值表达式

1.简单赋值运算符


“=”表示赋值,“int a=b=c;”是错误的,应该写成“int a=3,b=3,c=3;”最左边只能是一个变量


2.复合赋值运算符

复合算术赋值运算符
运算符应用举例等价形式
+=a+=xa=a+(x)
-=a-=xa=a-(x)
*=a*=x

a=a*(x)

/=a/=xa=a/(x)
%=a%=xa=a%(x)

3.赋值表达式


变量=表达式
赋值表达式末尾没有分号;赋值语句末尾必须有分号;if语句中不可以出现赋值语句;

2.5.2 算数运算符和算术表达式
 

1.基本的算术运算符

基本算数运算符
运算符+-*/%
名称求余

+、-、*、/、%都是双目运算符,“-”当负号用时是单目运算符;
在计算a/b时,如果a,b是整型那么其商也是整型;小数部分会被舍去,3/4结果是零,4/3结果是1;
如果a,b有一个是实型那么a,b都会转换为double类型再相除其结果也是double类型;3.0/2结果为1.5
求余运算符的两个运算数都应为整型,且求余结果与第一个操作数符号相同;-4%3的值为-1;4%-3的值为1


2.自增、自减运算符

++自增运算符:前缀方式“int a=++x”“先加后用”“b=++a”等价于“a=a+1,b=a”
                          后缀方式“int a=x++”“先用后加”“b=a++”等价于“b=a,a=a+1”
--自减运算符同理且二者都是单目运算符
自增和自减运算符的操作对象只能是一个简单变量,不能是常量或表达式

3.算术运算符的优先级和结合性

单目运算符是右结合的,双目运算符是左结合的;单目运算符优先级高于双目运算符;
双目运算符中“*、/、%”优先级高于“+、-”
“++、- -、-”>“*、/、%”>“+、-”;“()”的优先级最高

4.算术表达式

算术表达式注意事项
1.表达式中的乘号不能省略,表达式中所有字符均应写在同一行上;
2.可以使用多层圆括号但要注意括号的配对(不能用[]和{});
3.不能拿0当除数;
【例2.13】 输入一个3位正整数(123),输出其反序数

#include<stdio.h>
int main()
{
	int number, a, b, c;
	number = 123;
	printf("输入的3位数为:%d\n", number);
	a = number / 100;
	b = (number - a * 100) / 10;
	c = number % 10;
	printf("反序数是:%d%d%d\n", c, b, a);
	return 0;
}

2.5.3 逗号运算符和逗号表达式

逗号运算符是双目运算符,优先级最低,左结合

【例2.14】逗号表达式应用示例

#include<stdio.h>
int main()
{
	int i, j = 7;
	float k = 5;
	i = (j = j + 2, j / k);
	printf("i=%d\n", i);
	return 0;
}

 2.5.4 求字节数运算符

格式:sizeof(表达式)或sizeof 表达式sizeof(数据类型名)

sizeof("china")=6 实际上是“china\0”
char类型占1字节
short int类型占2字节
int类型占4字节
float类型占4字节
double类型占8字节

#include<stdio.h>
int main()
{
	printf("char类型占%d字节\n", sizeof(char));
	printf("short int 类型占%d字节\n", sizeof(short int));
	printf("int 类型占%d字节\n", sizeof(int));
	printf("float 类型占%d字节\n", sizeof(float));
	printf("double 类型占%d字节\n", sizeof(double));
	return 0;
}

 【例2.16】求字节运算符示例

#include<stdio.h>
int main()
{
	int a, b;
	a = sizeof(3 + 5.0);
	b = sizeof 3 + 5.0;
	printf("%d,%d,%d\\", a, b, sizeof("china"));
	return 0;
}

 2.6 数据类型转换

2.6.1 自动类型转换

为了不丢失数据

char,short→int→usigned→long→double←float

2.6.2 强制类型转化

把表达式的运算结果强制转换成类型说明符指定类型。

【例2.18】 强制类型转换示例。

#include<stdio.h>
int main()
{
	int a = 3, b = 4;
	float c;
	c = (float)(a + b) / 2;
	printf("c=%f\n", c);
	return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值